老张小站

  1. 欢迎光临

    感谢访问老张的博客!

  • 1
1,511

Discuz X3.* 增加大众审核机制

分类 网站技术/村民张先生 发布于 2019-03-27 17:51
0

本文正在完善中,仅供参考。

说明:在原有审核机制基础上,增加大众审核机制。本文以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、增加大众审核功能。稍后添加……

欢迎转载分享,转载请注明 来源:大张小站 https://www.zhang.cq.cn/20192127.html
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截