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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[发布] 版主评语 V1.2 For Dz5.0 [2006/11/20] 欢迎测试

[复制链接]
shire2008 发表于 2006-11-19 12:19:32 | 显示全部楼层
原帖由 花石子 于 2006-11-18 09:37 发表
支持

演示

http://www.yiid.com


我们做个链接吧
回复

使用道具 举报

cnstudent 发表于 2006-11-19 13:15:26 | 显示全部楼层
以下内容仅为学习交流编写,未经测试,请勿使用.
  1. <?php

  2. /*
  3.         本程序由badfox编写
  4. */
  5. require_once './include/common.inc.php';

  6. $sendcmentspm = 1; //发送PM提醒请设置为1,不发送请设置0
  7. /* 写类似开关记得要写在require_once './include/common.inc.php';的下面,因为common.inc.php内会用post和get的覆盖,可能会造成安全隐患. */

  8. if(empty($forum['allowview'])) {
  9.         if(!$forum['viewperm'] && !$readaccess) {
  10.                 showmessage('group_nopermission', NULL, 'NOPERM');
  11.         } elseif($forum['viewperm'] && !forumperm($forum['viewperm'])) {
  12.                 showmessage('forum_nopermission', NULL, 'NOPERM');
  13.         }
  14. } elseif($thread['readperm'] && $thread['readperm'] > $readaccess && !$forum['ismoderator'] && $thread['authorid'] != $discuz_uid) {
  15.         showmessage('thread_nopermission', NULL, 'NOPERM');
  16. }

  17. $query = $db->query("SELECT * FROM {$tablepre}threads WHERE tid='$tid' AND displayorder>='0'");
  18. if(empty($tid) || !$thread = $db->fetch_array($query)) {
  19.         showmessage('thread_nonexistence');
  20. }

  21. if($forum['type'] == 'forum') {
  22.         $navigation = "&raquo; <a href="forumdisplay.php?fid=$fid">$forum[name]</a> &raquo; <a href="viewthread.php?tid=$tid">$thread[subject]</a> ";
  23.         $navtitle = strip_tags($forum['name']).' - '.$thread['subject'];
  24. } elseif($forum['type'] == 'sub') {
  25.         $query = $db->query("SELECT name, fid FROM {$tablepre}forums WHERE fid='$forum[fup]'");
  26.         $fup = $db->fetch_array($query);
  27.         $navigation = "&raquo; <a href="forumdisplay.php?fid=$fup[fid]">$fup[name]</a> &raquo; <a href="forumdisplay.php?fid=$fid">$forum[name]</a> &raquo; <a href="viewthread.php?tid=$tid">$thread[subject]</a> ";
  28.         $navtitle = strip_tags($fup['name']).' - '.strip_tags($forum['name']).' - '.$thread['subject'];
  29. }

  30. if($action == 'cments' && $pid) {// 这里tid判断给我去掉了,不需要

  31.         if(!$forum['ismoderator']) {// 这里原本的有点问题,如果adminid不是3的就不会显示,安全隐患
  32.                 showmessage('对不起,您只能在自己的管辖范围内发表评语,请返回。');
  33.         }

  34.         if(!empty($sendcmentspm)) {
  35.                 $forumname = strip_tags($forum['name']);
  36.                 $sendcmentspm = 1;
  37.         } else {
  38.                 $sendcmentspm = 0;
  39.         }

  40.         $query = $db->query("SELECT * FROM {$tablepre}posts WHERE pid='$pid' AND tid='$tid' AND invisible='0' AND authorid<>'0'");

  41.         if(!($post = $db->fetch_array($query)) || $post['tid'] != $thread['tid'] || !$post['authorid']) {
  42.                 showmessage('undefined_action');
  43.         } elseif(!$forum['ismoderator'] && $karmaratelimit && $timestamp - $post['dateline'] > $karmaratelimit * 3600) {
  44.                 showmessage('对不起,您不能对发表于 $karmaratelimit 小时前的帖子发表评论,请返回。');
  45.         } elseif($post['authorid'] == $discuz_uid || $post['tid'] != $tid) {
  46.                 showmessage('对不起,您不能给自己发表的帖子发表评论,请返回。');
  47.         } elseif($post['anonymous']) {
  48.                 showmessage('对不起,您不能对匿名帖发表评论,请返回。');
  49.         }

  50.         if(!$dupkarmarate) {
  51.                 $query = $db->query("SELECT pid FROM {$tablepre}cments WHERE uid='$discuz_uid' AND pid='$pid' LIMIT 1");
  52.                 if($db->num_rows($query)) {
  53.                         showmessage('对不起,您不能对同一个帖子发表评论,请返回。');
  54.                 }
  55.         }

  56.         $page = intval($page);

  57.         if(!submitcheck('cmentsubmit')) {

  58.                 $referer = $boardurl.'viewthread.php?tid='.$tid.'&page='.$page.'#pid'.$pid;
  59.                 include template('cments');

  60.         } else {

  61.                 $db->query("UPDATE {$tablepre}posts SET cments=cments+'1' WHERE pid='$pid'");

  62.                 $sqlreason = cutstr($cments, 80);
  63.                 //这里不是8种积分,只需要1种就可以了,不必foreach所以可以直接写进下面执行语句
  64.                 $db->query("INSERT INTO {$tablepre}cments (pid, tid, uid, username, dateline, cments) VALUES ('$pid', $tid, '$discuz_uid', '$discuz_user', '$timestamp', '$sqlreason')", 'UNBUFFERED');

  65.                 if($sendcmentspm) {
  66.                         require_once DISCUZ_ROOT.'./include/misc.func.php';
  67.                         sendreasonpm('post', 'rate_cments');
  68.                 }

  69.                 showmessage('感谢您的评论,现在将转入评论前页面。', dreferer());
  70.         }

  71. } elseif($action == 'viewcments' && $pid){

  72.         $queryc = $db->query("SELECT * FROM {$tablepre}cments WHERE pid='$pid' ORDER BY dateline");
  73.         $queryp = $db->query("SELECT * FROM {$tablepre}posts WHERE pid='$pid' AND invisible='0'");

  74.         if(!($db->num_rows($queryc))) {
  75.                 //这里因为在其他程序删除的不够彻底,所以我在这里加了一句删除语句
  76.                 $db->query("DELETE FROM {$tablepre}cments WHERE pid='$pid'");
  77.                 showmessage('您所指定的帖子不存在,请返回。');
  78.         } elseif(!$db->num_rows($queryp)) {
  79.                 showmessage('对不起,指定帖子在近一年内没有评论记录,请返回。');
  80.         }

  81.         $post = $db->fetch_array($queryp);
  82.         if($post['tid'] != $thread['tid']) {
  83.                 showmessage('undefined_action', NULL, 'HALTED');
  84.         }

  85.         //下面这个判断有点问题,自己检查下吧
  86.         //if(!$bannedmessages || !$post['authorid'] || ($bannedmessages && $post['authorid'] && !in_array(intval($author['groupid']), array(0, 4, 5)))) {
  87.                 require_once DISCUZ_ROOT.'./include/discuzcode.func.php';
  88.                 $post['dateline'] = gmdate("$dateformat $timeformat", $post['dateline'] + $timeoffset * 3600);
  89.                 $post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], $post['htmlon'], $forum['allowsmilies'], $forum['allowbbcode'], $forum['allowimgcode'], $forum['allowhtml'], $forum['jammer']);
  90.         //} else {
  91.                 //$post['message'] = '';
  92.         //}

  93.         $loglist = array();
  94.         while($log = $db->fetch_array($queryc)) {
  95.                 $log['dateline'] = gmdate("$dateformat $timeformat", $log['dateline'] + $timeoffset * 3600);
  96.                 $log['cments'] = dhtmlspecialchars($log['cments']);
  97.                 $loglist[] = $log;
  98.         }

  99.         include template('viewcments');

  100. } else {

  101.         showmessage('undefined_action');

  102. }



  103. ?>
复制代码
回复

使用道具 举报

xuesi 发表于 2006-11-19 15:03:10 | 显示全部楼层
回复

使用道具 举报

 楼主| badfox 发表于 2006-11-19 16:33:55 | 显示全部楼层
原帖由 cnstudent 于 2006-11-19 13:15 发表
以下内容仅为学习交流编写,未经测试,请勿使用.
<?php

/*
        本程序由badfox编写
*/
require_once './include/common.inc.php';

$sendcmentspm = 1; //发送PM提醒请设置为1,不发送请设置0
/* 写类似 ...




谢谢cnstudent 老师,俺好好学习!  
回复

使用道具 举报

 楼主| badfox 发表于 2006-11-19 16:38:16 | 显示全部楼层
原帖由 wind123 于 2006-11-19 12:18 发表
貌似和我这个插不多的说,只是在帖子浏览页面加了个显示,不过还是支持下!
大家不妨看看这个
https://discuz.dismall.com/thread-446655-1-1.html


确实相似哈,原先怎么就没找到呢!

不过萝卜白菜,各有所爱,最好有高人能开发个综合的!

以学习为最终目标!
回复

使用道具 举报

cnstudent 发表于 2006-11-19 18:52:09 | 显示全部楼层
原始短消息: 谢谢你的指导,又让我学习了不少东西!
首先谢谢你的指导,又让我学习了不少东西!

我仔细研究了你在42楼发的代码,有个别地方不太明白,你有时间的话能不能帮我解答一下!

  1. $sendcmentspm = 1; //发送PM提醒请设置为1,不发送请设置0
复制代码

我在发表评语的界面有是否发短信的选择,所以,这个就不需要了,不过提醒了我,是不是把是否能重复评语的开关加上!

  1. ($action == 'cments' && $pid) {// 这里tid判断给我去掉了,不需要
复制代码

这个tid不要也没有影响,但是如果传过来的没有tid,当时程序就能退出,不用等判断到查询posts表时才退出,所以是不是加上好呢!


  1.         if(!$forum['ismoderator']) {// 这里原本的有点问题,如果adminid不是3的就不会显示,安全隐患
  2.                 showmessage('对不起,您只能在自己的管辖范围内发表评语,请返回。');
  3.         }
复制代码


我一直不太明白$raterange $modratelimit $adminid $forum['ismoderator']都代表什么意思,只是觉得和权限有关,所以一直保持和‘评分’功能一直,不知道,你能不能帮我解释一下!



  1.                 //这里不是8种积分,只需要1种就可以了,不必foreach所以可以直接写进下面执行语句
  2.                 $db->query("INSERT INTO {$tablepre}cments (pid, tid, uid, username, dateline, cments) VALUES ('$pid', $tid, '$discuz_uid', '$discuz_user', '$timestamp', '$sqlreason')", 'UNBUFFERED');
复制代码


这个简化了不少,原来可以合为一处!原先我还傻呵呵保持原样!谢谢!




  1.              //这里因为在其他程序删除的不够彻底,所以我在这里加了一句删除语句
  2.                 $db->query("DELETE FROM {$tablepre}cments WHERE pid='$pid'");
复制代码

加这个删除语句是不是怕在后台删除帖子时漏下cments表阿? 要不然应该不会有遗漏吧?



  1. //下面这个判断有点问题,自己检查下吧
  2.         //if(!$bannedmessages || !$post['authorid'] || ($bannedmessages && $post['authorid'] && !in_array(intval($author['groupid']), array(0, 4, 5)))) {
  3.                 require_once DISCUZ_ROOT.'./include/discuzcode.func.php';
  4.                 $post['dateline'] = gmdate("$dateformat $timeformat", $post['dateline'] + $timeoffset * 3600);
  5.                 $post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], $post['htmlon'], $forum['allowsmilies'], $forum['allowbbcode'], $forum['allowimgcode'], $forum['allowhtml'], $forum['jammer']);
  6.         //} else {
  7.                 //$post['message'] = '';
  8.         //}

复制代码

这段最不明白了!
这段我只知道时显示帖子内容的,如果权限或者说条件达不到,就显示为空!
你能不能告诉我

  1. !in_array(intval($author['groupid']), array(0, 4, 5)))
复制代码

是判断什么的!
我只知道$bannedmessages是指帖子属于被屏蔽内容! (不太确定)

$post['authorid']是指帖子作者uid!

再次感谢!不知道可不可以加QQ  43704524

1.对呃,我没有看过模板不知道,不好意思了.
2.tid我在上面改过了,其实我改的东西不止注释出来的那么多,上面有检测是否有此tid,没有则显示没有此帖(因为在common内已经处理过了,所以不必再次查询,改进了一下在没有此tid的时候节约一个查询),修改的地方就是上面的empty($tid)的地方.
3.
$raterange是否允许评分
$modratelimit版主在自己版块的评分
$adminid管理权限号
$forum['ismoderator']本版块的版主或超级版主或管理员
4.加上
  1. $db->query("DELETE FROM {$tablepre}cments WHERE pid='$pid'");
复制代码
是因为其他地方清除得不够干净,完善之后可去掉.
5.
  1. !in_array(intval($author['groupid']), array(0, 4, 5)))
复制代码
这是DZ的BUG,我想这个应该是$post['groupid']吧
6.$bannedmessages是开关,是否隐藏敏感帖子内容的开关.在评论不需要用到吧,毕竟只是评论不涉及内容.(个人感觉)
回复

使用道具 举报

 楼主| badfox 发表于 2006-11-19 19:17:00 | 显示全部楼层
学习ing....  
再次谢谢!
回复

使用道具 举报

 楼主| badfox 发表于 2006-11-19 19:57:35 | 显示全部楼层
修改admin\prune.inc.php  详见2楼
回复

使用道具 举报

cnstudent 发表于 2006-11-20 07:56:44 | 显示全部楼层
editpost.inc.php
回复

使用道具 举报

 楼主| badfox 发表于 2006-11-20 09:40:42 | 显示全部楼层
增加修改:
admin\threads.inc.php (后台批量删除主题时,同时删除关联评语!)
include\editpost.inc.php(作者编辑帖子时删除帖子,同时删除关联评语!)

原来Hack一个小插件就关联到这么多东西阿,
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 10:08 , Processed in 0.025895 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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