版块开启审核的情况下QQ互联无法自动同步的问题分析
下午排查发现一个站点开启了审核的情况下QQ互联无法自动同步的问题,特整理排查过程。
问题描述:
站点端开启了审核功能,所有发帖都先进入待审核状态,审核通过后才可以正常访问,发帖无法自动同步到空间和微博。
代码分析:
找到source/plugin/qqconnect/connect.class.php文件,可以搜索到如下触发自动同步的代码:
if((!getstatus($_G['forum_thread']['status'], 7) || !getstatus($_G['forum_thread']['status'], 8))
&& $_G['forum_thread']['displayorder'] >= 0 && $_G['member']['conisbind']
&& $_G['uid'] == $_G['forum_thread']['authorid']) {
$_G['connect']['feed_log'] = DB::fetch_first("SELECT * FROM ".DB::table('connect_feedlog')." WHERE tid='$_G[tid]'");
if($_G['connect']['feed_log']) {
$_G['connect']['feed_interval'] = 300;
$_G['connect']['feed_publish_max'] = 1000;
if(getstatus($_G['connect']['feed_log']['status'], 1) || (getstatus($_G['connect']['feed_log']['status'], 2)
&& TIMESTAMP - $_G['connect']['feed_log']['lastpublished'] > $_G['connect']['feed_interval']
&& $_G['connect']['feed_log']['publishtimes'] < $_G['connect']['feed_publish_max'])) {
$_G['connect']['feed_js'] = $feedlogstatus = true;
}
if(getstatus($_G['connect']['feed_log']['status'], 3) || (getstatus($_G['connect']['feed_log']['status'], 4)
&& TIMESTAMP - $_G['connect']['feed_log']['lastpublished'] > $_G['connect']['feed_interval']
&& $_G['connect']['feed_log']['publishtimes'] < $_G['connect']['feed_publish_max'])) {
$_G['connect']['t_js'] = $tlogstatus = true;
}
if($feedlogstatus || $tlogstatus) {
$status = $feedlogstatus ? setstatus(2, 1, $status) : $status;
$status = $tlogstatus ? setstatus(4, 1, $status) : $status;
DB::query("UPDATE ".DB::table('connect_feedlog')." SET status='$status', lastpublished='$_G[timestamp]', publishtimes=publishtimes+1 WHERE tid='$_G[tid]'");
}
}
}
其中的$_G['connect']['feed_js']和$_G['connect']['t_js']两个变量为控制是否触发自动同步到空间和微博的变量。
注意开头的if判断里的下面这句:
&& $_G['member']['conisbind'] && $_G['uid'] == $_G['forum_thread']['authorid']
这里要求是发帖人自己访问的时候才会触发自动同步的代码。
结论:
前面提到站点开启了审核功能,所有发帖都会先进入待审核状态,由管理人员审核通过后其他人才可以正常访问到。
当帖子被审核通过后,如果发帖人没有重新访问过自己的帖子,那么同样是不会自动同步到空间和微博的。
另外,自动同步的帖子是有时间限制的,如果发帖时间距当前时间超过12个小时,即使发帖人重新访问自己的帖子,这个时候也不会再触发自动同步了。