描述此 Pull Request 的变更

已知某些特殊情况下(例如:帖子多次审核、词语过滤审核和楼主编辑主帖同时触发等)会产生奇怪的数据错误,具体原因仍在探索中。在这样的大前提下,当帖子设置中勾选了 “回帖倒序排列” 后,会导致楼层顺序名称(例如:沙发、板凳、地板)显示错误,且楼主变成了 # 符号。

模拟复现方法:在数据库表 forum_threaddisablepos 新建一条 tid 数据,即手工标记数据错误。然后编辑这个 tid 对应帖子,勾选 “回帖倒序排列” 后问题即可再现。

描述变更理由

if(!$post['hotrecommended']) {
    if($_G['forum_pagebydesc']) {
        if($ordertype != 1) {
            $post['number'] = $_G['forum_numpost'] + $_G['forum_ppp2']--;
        } else {
            $post['number'] = $post['first'] == 1 ? 1 : ($_G['forum_numpost'] - 1) - $_G['forum_ppp2']--;
        }
    } else {
        if($ordertype != 1) {
            $post['number'] = ++$_G['forum_numpost'];
        } else {
            $post['number'] = $post['first'] == 1 ? 1 : --$_G['forum_numpost'];
            $post['number'] = $post['number'] - 1;
        }
    }
}

正常情况下,这段代码是不会生效的,因为会被下面几行后的:

if($maxposition) {
    $post['number'] = $post['position'];
}

这个判断覆盖掉,只有当 $maxposition = false 时,即第 385 行开始的判断检测到楼层数据错误时,会不使用 position 查询。可能就是因为平常不会触发到这一段代码,所以楼层名称错误长期未被发现。实际测试,只需要将:$post['number'] = $post['number'] - 1; 这部分删除,楼层名称和楼主名称都正常显示了。最后,默认的正序排列,不管帖子数据是否错误,楼层名称均正常。