Revision 560: Проверка на остаточные записи об уже удаленных топиках

Бот

Пользователь
#1
Описание:
Revision 560: Проверка на остаточные записи об уже удаленных топиках
Автор:
Измененные файлы в ревизии:
PHP:
Changed Paths:
    Modify    /trunk/upload/config.php 
    Modify    /trunk/upload/includes/functions_admin.php 

Проверка на остаточные записи об уже удаленных топиках
 

Phoenix

Пользователь
#2
Если взглянуть на изменение ревизии, то можно увидеть серьезный недочет, ибо включенный запрос в синхронизацию топиков, который удаляет из таблицы bb_topics записи, у которых значение topic_first_post_id не входит в существующие id постов, то при разделении темы это будет являться необратимым критическим багом, т.к. новый топик в который переносятся выделенные сообщения не будет иметь id первого сообщения в topic_first_post_id до выполнения синхронизации, т.е. потеря топика будет неизбежной.

К слову...
"topic_first_post_id" можно заполнить еще на стадии добавления топика в таблицу.

Открыть modcp.php
найти:
PHP:
$sql  = "INSERT INTO " . BB_TOPICS . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type)
    VALUES ('" . DB()->escape($post_subject) . "', $first_poster, " . $topic_time . ", $new_forum_id, " . TOPIC_UNLOCKED . ", " . POST_NORMAL . ")";
заменить на:
PHP:
$first_post_id = min(explode(',', $post_id_sql));
 
$sql  = "INSERT INTO " . BB_TOPICS . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_first_post_id)
    VALUES ('" . DB()->escape($post_subject) . "', $first_poster, " . $topic_time . ", $new_forum_id, " . TOPIC_UNLOCKED . ", " . POST_NORMAL . ", $first_post_id)";
 
Сверху