Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[分享] 自己动手给UChome管理后台增加回收站(六)

[复制链接]
putersham 发表于 2009-9-8 14:27:41 | 显示全部楼层 |阅读模式
本帖最后由 putersham 于 2009-9-10 14:44 编辑

http://blog.sina.com.cn/s/blog_3f1a25310100enqj.html

这是最后一篇了,讲讲如何把删除记录显示以及根据删除者还有删除时间进行搜索

另外,我们还需要给回收站功能加上限制,

只有站点管理员和信息管理员删除的信息才进回收站,

其他用户在管理后台删除的不需要进入回收站,

还有就是限制非管理员利用URL访问回收站



我们在admincp.php的最底部把$list打印出来

print_r($list);

exit;



结果发现我们在数据库中增加的2个字段 rec_operator 和 rec_time 也随数据流一起输出了

所以我们直接就可以用了,只要修改模板

feed.htm 文件:

      <div class="detail" <!--{if $value['image_3']}-->style="clear: both;"<!--{/if}-->>
       $value[body_template]
      </div>
改为

      <div class="detail" <!--{if $value['image_3']}-->style="clear: both;"<!--{/if}-->>
       $value[body_template]
       <!--{if $menus[1] && $_GET[act]==recycled}--><br />{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除<!--{/if}-->
      </div>


blog.htm 文件:

   <td>
    <a href="cp.php?ac=blog&op=edit&blogid=$value[blogid]&act=$_GET[act]" target="_blank">编辑</a>&nbsp;
    <a href="admincp.php?ac=comment&id=$value[blogid]&idtype=blogid&act=$_GET[act]">评论</a>
   </td>
  </tr>
  <!--{/loop}-->
改为:

   <td>
    <a href="cp.php?ac=blog&op=edit&blogid=$value[blogid]&act=$_GET[act]" target="_blank">编辑</a>&nbsp;
    <a href="admincp.php?ac=comment&id=$value[blogid]&idtype=blogid&act=$_GET[act]">评论</a>
   </td>
  </tr>
        <!--{if $menus[1] && $_GET[act]==recycled}-->
        <tr>
         <td>&nbsp;</td>
         <td align="right">{$value[rec_operator]}</td>
            <!--{if $allowmanage}--><th width="80">&nbsp;</th><!--{/if}-->
            <th colspan="3">于&nbsp;{$value[rec_time]}&nbsp;删除</th>
        </tr>
        <!--{/if}-->
  <!--{/loop}-->


album.htm 文件:

    <br />时间: <!--{date('Y-m-d',$value[dateline])}-->
    <!--{if $value[friend]}--><br />权限: [<a href="admincp.php?ac=album&friend=$value[friend]&act=$_GET[act]">$value[friend]</a>]<!--{/if}-->
    <br /><a href="admincp.php?ac=pic&albumid=$value[albumid]&act=$_GET[act]">管理图片($value[picnum])</a>
    </td>
   <!--{if $key%2==1}--></tr><tr><!--{/if}-->
改为:

    <br />时间: <!--{date('Y-m-d',$value[dateline])}-->
    <!--{if $value[friend]}--><br />权限: [<a href="admincp.php?ac=album&friend=$value[friend]&act=$_GET[act]">$value[friend]</a>]<!--{/if}-->
    <br /><a href="admincp.php?ac=pic&albumid=$value[albumid]&act=$_GET[act]">管理图片($value[picnum])</a>
    <!--{if $menus[1] && $_GET[act]==recycled}--><br />{$value[rec_operator]}<br />于&nbsp;{$value[rec_time]}&nbsp;删除<!--{/if}-->
    </td>
   <!--{if $key%2==1}--></tr><tr><!--{/if}-->



pic.htm  文件:

     <!--{if $value[hot]}--><br /><span style="color:red;">热度: $value[hot]</span><!--{/if}-->
     <br><a href="admincp.php?ac=comment&id=$value[picid]&idtype=picid&act=$_GET[act]">评论管理</a>
    </td>
    <!--{if $key%2==1}--></tr><tr><!--{/if}-->
改为:

     <!--{if $value[hot]}--><br /><span style="color:red;">热度: $value[hot]</span><!--{/if}-->
     <br><a href="admincp.php?ac=comment&id=$value[picid]&idtype=picid&act=$_GET[act]">评论管理</a>
                    <!--{if $menus[1] && $_GET[act]==recycled}--><br />{$value[rec_operator]}<br />于&nbsp;{$value[rec_time]}&nbsp;删除<!--{/if}-->
    </td>
    <!--{if $key%2==1}--></tr><tr><!--{/if}-->


comment.htm   文件:

  IP: <a href="admincp.php?ac=comment&ip=$value[ip]&act=$_GET[act]">$value[ip]</a>
  <!--{date('Y-m-d H:i',$value[dateline])}-->
  </p>
  </td>
改为:

  IP: <a href="admincp.php?ac=comment&ip=$value[ip]&act=$_GET[act]">$value[ip]</a>
  <!--{date('Y-m-d H:i',$value[dateline])}-->
        <!--{if $menus[1] && $_GET[act]==recycled}--><br />{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除<!--{/if}-->
  </p>
  </td>


thread.htm   文件:

  <td><!--{date('Y-m-d',$value[dateline])}--></td>
</tr>
<!--{/loop}-->
</table>
改为:

  <td><!--{date('Y-m-d',$value[dateline])}--></td>
</tr>
        <!--{if $menus[1] && $_GET[act]==recycled}-->
    <tr>
     <td colspan="4">{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除</td>
  <!--{if $allowmanage}--><td>&nbsp;</td><!--{/if}-->
  <td>&nbsp;</td>
    </tr>
        <!--{/if}-->
<!--{/loop}-->
</table>


post.htm   文件:

    <!--{date('Y-m-d H:i',$value[dateline])}-->
   </p>
   </td>
改为:

    <!--{date('Y-m-d H:i',$value[dateline])}-->
                <!--{if $menus[1] && $_GET[act]==recycled}--><br />{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除<!--{/if}-->
   </p>
   </td>


doing.htm   文件:

  $value[message] &nbsp;<!--{date('Y-m-d H:i', $value[dateline])}--></td></tr>
改为:

  $value[message] &nbsp;<!--{date('Y-m-d H:i', $value[dateline])}--><!--{if $menus[1] && $_GET[act]==recycled}--><br />{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除<!--{/if}--></td></tr>


share.htm   文件:

   <a href="admincp.php?ac=comment&id=$value[sid]&idtype=sid&act=$_GET[act]">管理评论</a>

改为:

   <a href="admincp.php?ac=comment&id=$value[sid]&idtype=sid&act=$_GET[act]">管理评论</a><!--{if $menus[1] && $_GET[act]==recycled}-->&nbsp;{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除<!--{/if}-->


poll.htm   文件:

     <a href="admincp.php?ac=poll&op=delete&pid=$value[pid]&act=$_GET[act]" onclick="return confirm('本操作不可恢复,确认删除?');" >删除</a>&nbsp;
     <a href="admincp.php?ac=comment&id=$value[pid]&idtype=pid&act=$_GET[act]">评论</a>
    </td>
   </tr>
   <!--{/loop}-->
   </table>
改为:

     <a href="admincp.php?ac=poll&op=delete&pid=$value[pid]&act=$_GET[act]" onclick="return confirm('本操作不可恢复,确认删除?');" >删除</a>&nbsp;
     <a href="admincp.php?ac=comment&id=$value[pid]&idtype=pid&act=$_GET[act]">评论</a>
    </td>
   </tr>
        <!--{if $menus[1] && $_GET[act]==recycled}-->
    <tr>
     <td colspan="4">{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除</td>
  <!--{if $allowmanage}--><td>&nbsp;</td><!--{/if}-->
  <td>&nbsp;</td>
    </tr>
        <!--{/if}-->
   <!--{/loop}-->
   </table>


tag.htm   文件:

  <td>$value[blognum]</td>
  <td><!--{date('Y-m-d', $value[dateline])}--></td>
</tr>
<!--{/loop}-->
</table>
改为:

  <td>$value[blognum]</td>
  <td><!--{date('Y-m-d', $value[dateline])}--></td>
</tr>
    <!--{if $menus[1] && $_GET[act]==recycled}--><tr><td colspan="3">{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除</td></tr><!--{/if}-->
<!--{/loop}-->
</table>


mtag.htm   文件:

  <td>$value[postnum]</td>
  <td>[<a href="cp.php?ac=mtag&op=manage&tagid=$value[tagid]&subop=base&act=$_GET[act]" target="_blank">群组管理</a>]</td>
</tr>
<!--{/loop}-->
</table>
</div>
改为:

  <td>$value[postnum]</td>
  <td>[<a href="cp.php?ac=mtag&op=manage&tagid=$value[tagid]&subop=base&act=$_GET[act]" target="_blank">群组管理</a>]</td>
</tr>
    <!--{if $menus[1] && $_GET[act]==recycled}--><tr><td colspan="4">{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除</td></tr><!--{/if}-->
<!--{/loop}-->
</table>
</div>


event.htm  文件:

    <a href="cp.php?ac=event&op=edit&id=$value[eventid]&act=$_GET[act]" target="_blank">编辑</a>
   </td>
  </tr>
  <!--{/loop}-->
  </table>
改为:

    <a href="cp.php?ac=event&op=edit&id=$value[eventid]&act=$_GET[act]" target="_blank">编辑</a>
   </td>
  </tr>
    <!--{if $menus[1] && $_GET[act]==recycled}-->
    <tr><td colspan="7">{$value[rec_operator]}&nbsp;于&nbsp;{$value[rec_time]}&nbsp;删除</td></tr>
    <!--{/if}-->
  <!--{/loop}-->
  </table>


接着是增加账户限制,限制不是站点管理员和信息管理员的用户查看回收站内的信息

要让非管理员无法访问回收站自然最便捷的就是清理GET里的act参数

所以我们在admincp.php里加入判断

//判断管理回收站的权限
if ($_SGLOBAL['member']['groupid'] == 1 || $_SGLOBAL['member']['groupid'] == 2){
$_SGLOBAL[allowUseRec] = 1;
}else{
$_GET[act] = '';
unset($_SGLOBAL[allowUseRec]);
}
把这段代码加在include_once(S_ROOT.'./admin/admincp_'.$acfile.'.php');之前就行了

这样如果用户权限不是1或者2 既站点管理员或者信息管理员的话,就清理GET到的act参数的值,

同时给全局变量引入一个参数 $_SGLOBAL['allowUseRec']

这样我们在class_mysql 以及 function_delete 里对回收站的操作就可以有个限制了

先给数据库的回收加上条件,修改class_mysql.php:

  if( strstr($sql,'DELETE') && preg_match("/admincp\.php/", empty($_SERVER['PHP_SELF'])?'': $_SERVER['PHP_SELF']) && preg_match("/admincp\.php/", empty($_SERVER['HTTP_REFERER'])?'': $_SERVER['HTTP_REFERER']) && in_array($_GET['ac'] , $acs) && $_GET['act']<>'recycled') {
改为:

global $_SGLOBAL;

  if( strstr($sql,'DELETE') && preg_match("/admincp\.php/", empty($_SERVER['PHP_SELF'])?'': $_SERVER['PHP_SELF']) && preg_match("/admincp\.php/", empty($_SERVER['HTTP_REFERER'])?'': $_SERVER['HTTP_REFERER']) && in_array($_GET['ac'] , $acs) && $_GET['act']<>'recycled' && $_SGLOBAL['allowUseRec']) {
再修改图片文件移动,修改 function_delete.php:

   if ($_GET['act']<>'recycled'){
    //清理重复的备份文件
    if (file_exists($file_bak_path)) unlink($file_bak_path);
    //移动文件,代替删除动作
    if(!@rename($file,$file_bak_path)) {

改为:

   if ($_GET['act']<>'recycled' && $_SGLOBAL['allowUseRec']){
    //清理重复的备份文件
    if (file_exists($file_bak_path)) unlink($file_bak_path);
    //移动文件,代替删除动作
    if(!@rename($file,$file_bak_path)) {

好了 至此回收站就做完了



有人可能要问我为什么回收站不能回收

其实原因有很多,最麻烦的是积分和计数

就是回收以后的积分返还以及数量的计数,牵涉到很多问题

以后有需要了我再把这部分的做出来吧 呵呵。


09年09月10日补充,回收站添加后,对分页的处理
修改 ./source/function_common.php
//分页
function multi($num, $perpage, $curpage, $mpurl, $ajaxdiv='', $todiv='') {
        global $_SCONFIG, $_SGLOBAL;

        if(empty($ajaxdiv) && $_SGLOBAL['inajax']) {
                $ajaxdiv = $_GET['ajaxdiv'];
        }
改为:
//分页
function multi($num, $perpage, $curpage, $mpurl, $ajaxdiv='', $todiv='') {
        global $_SCONFIG, $_SGLOBAL;

        $mpurl = $mpurl.'&act='.$_GET['act'];
        if(empty($ajaxdiv) && $_SGLOBAL['inajax']) {
                $ajaxdiv = $_GET['ajaxdiv'];
        }
回复

使用道具 举报

coldhair 发表于 2009-9-8 15:13:01 | 显示全部楼层
强大,你的这几个帖子我全下载了
回复

使用道具 举报

 楼主| putersham 发表于 2009-9-9 18:39:10 | 显示全部楼层
汗的 呵呵,工作需要啦
等周末有时间我拿2.0sc版的改个回收站上去然后给你下载啊
呵呵
回复

使用道具 举报

 楼主| putersham 发表于 2009-9-9 18:40:15 | 显示全部楼层
对了 现在只能把删掉的保留在回收站 已删除的资料恢复的功能不太好弄 牵扯到的积分和计数挺多的 我回头想想办法
回复

使用道具 举报

8int 发表于 2009-9-9 20:11:54 | 显示全部楼层
强大,你的这几个帖子我全下载了
回复

使用道具 举报

 楼主| putersham 发表于 2009-9-10 14:46:21 | 显示全部楼层
09年09月10日补充,回收站添加后,对分页的处理
修改 ./source/function_common.php
//分页
function multi($num, $perpage, $curpage, $mpurl, $ajaxdiv='', $todiv='') {
        global $_SCONFIG, $_SGLOBAL;

        if(empty($ajaxdiv) && $_SGLOBAL['inajax']) {
                $ajaxdiv = $_GET['ajaxdiv'];
        }
改为:
//分页
function multi($num, $perpage, $curpage, $mpurl, $ajaxdiv='', $todiv='') {
        global $_SCONFIG, $_SGLOBAL;

        $mpurl = $mpurl.'&act='.$_GET['act'];
        if(empty($ajaxdiv) && $_SGLOBAL['inajax']) {
                $ajaxdiv = $_GET['ajaxdiv'];
        }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-10 00:52 , Processed in 0.128309 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表