版块开启审核的情况下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个小时,即使发帖人重新访问自己的帖子,这个时候也不会再触发自动同步了。