本文正在完善中,仅供参考。
说明:在原有审核机制基础上,增加大众审核机制。本文以X3.1为例,其它版本未测试。
1、在前台的版块帖子列表中,让指定用户组可以看到等待审核的帖子。
打开 source/module/forum/forum_forumdisplay.php 文件,查找:
$_order = "displayorder DESC, $_GET[orderby] $_GET[ascdesc]";
删除其中的 displayorder DESC, ,即替换为:
$_order = "$_GET[orderby] $_GET[ascdesc]";
说明:取消按 displayorder 值倒序排列(正常帖该值为0,待审帖为-2,详见...),否则待审帖排在整个版块的末尾。
查找:
$threadlist = array_merge($threadlist, C::t('forum_thread')->fetch_all_search($filterarr, $tableid, $start_limit, $_G['tpp'], $_order, '', $indexadd));
在其前方新增一段:
if(!in_array($_G['groupid'], array(4,5,6,7,8))) { $filterarr['displayorder'] = '1'; $threadlist = array_merge($threadlist, C::t('forum_thread')->fetch_all_search($filterarr, $tableid, $start_limit, $_G['tpp'], $_order, '')); $filterarr['displayorder'] = array(-2, 0); }
说明:设定显示待审帖的条件,本示例中是排除用户组,即用户组不为上述ID时显示待审帖。如果要反过来只让这些用户组可见,可去掉前方的感叹号。还可以根据自己的需要设定其它条件,例如持有某种勋章等。
2、完成上一步后,版块帖子列表中会出现待审帖,但点击后提示“……指定的主题不存在……”。
打开 source/function/function_forum.php ,查找:
if(!$_G['forum_auditstatuson'] && !empty($_G['thread'])
在其前方新增一段:
if(!$_G['forum_auditstatuson']) { $_G['forum_auditstatuson'] = $_G['forum_publicauditstatuson'] = in_array($_G['thread']['displayorder'], array(-3,-2)) && !in_array($_G['groupid'], array(4,5,6,7,8)) ? true : false; }
说明:使指定用户组浏览待审帖子时审核状态为开(使帖子可以正常打开)。
3、解决待审帖下的回帖被删除后,前台用户仍然可见的问题。
打开 source/module/forum/forum_viewthread.php 文件,查找:
$visibleallflag = 1;
替换为:
$visibleallflag = $_G['forum_publicauditstatuson'] ? 2 : 1;
打开 source/class/table/table_forum_post.php 文件,查找:
if(!$visibleallflag) { $return['invisible'] = $alias.DB::field('invisible', 0); }
替换为:
if(!$visibleallflag) { $return['invisible'] = $alias.DB::field('invisible', 0); } elseif($visibleallflag == 2) { $return['invisible'] = $alias.DB::field('invisible', array(0, -2, -3)); }
说明:$_G['forum_publicauditstatuson'] 已在第2步中定义。指定用户组浏览待审帖时,$_G['forum_publicauditstatuson'] 状态为 true,然后 $visibleallflag = 2,显示 invisible 值为 0 / -2 / -3 的回复,否则当 $visibleallflag 存在时将显示所有回复(无法排除状态为-5的回收站内回帖)。
4、可选:禁止他人对待审帖进行回复。
打开 source/module/forum/forum_post.php 文件,查找:
$thread = C::t('forum_thread')->fetch($_G['tid']);
在其下方新增一段:
if($thread['displayorder'] == -2 && $thread['authorid'] != $_G['uid'] && !$_G['forum']['ismoderator']) { showmessage('此帖正在等待审核,通过后才能回复!'); }
此时他人已无法提交回帖,但仍然可见回帖按钮和回帖框,可在前台模板中做判断后隐藏。
5、支持和禁止一部分管理操作。
我们无法对待审帖进行删除、移动、分类、加图标等管理操作,按以下说明修改后支持。
打开 source/include/topicadmin/topicadmin_moderate.php 文件,查找:
if($thread['closed'] > 1 && $operation && !in_array($operation, array('delete', 'highlight', 'stick', 'digest', 'bump', 'down')) || $thread['displayorder'] < 0 && $thread['displayorder'] != -4) { if($operation == 'recommend_group') { $recommend_group_count ++; } continue; }
替换为:
if($thread['closed'] > 1 && $operation && !in_array($operation, array('delete', 'highlight', 'stick', 'digest', 'bump', 'down')) || $thread['displayorder'] < 0 && !in_array($thread['displayorder'], array(-2, -3, -4))) { if($operation == 'recommend_group') { $recommend_group_count ++; } continue; } elseif($thread['displayorder'] < 0 && (in_array($operation, array('stick', 'bump', 'down')) || $_GET['optgroup'] == 4)) { showmessage('不能对审核中的帖子进行此项操作。'); }
完成以上修改后,除置顶、升降和关闭打开以外的管理操作将可用。注意:必须保持禁止置顶操作,因为置顶会改变 displayorder 值,使帖子离开审核状态(但审核表中数据未清理)。
此外,“修复帖子”功能默认可用,但对审核中的帖子进行修复操作将造成帖子标题丢失等问题,所以必须禁止对待审核进行修复操作。另外“直播”等功能可能存在问题,此处一并关闭。
打开 source/module/forum/forum_topicadmin.php 文件,查找:
require_once $topicadminfile;
在其上方添加:
if(!in_array($_GET['action'], array('moderate', 'banpost', 'warn', 'stamp', 'stamplist')) && $_G['thread']['displayorder'] < 0) { showmessage('不能对审核中的帖子进行此项操作。', NULL); }
以上5步完成后,待审帖在前台可完美展示。接下来就是添加大众审核功能了,让指定用户组或拥有“大众审核员”勋章的用户可以对帖子是否合规进行投票,当正分值到达指定值时自动通过审核,当负分值到达指定值时自动删除。
6、增加大众审核功能。稍后添加……
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截