From 5b64ebc11d10b66212661282a4dcfd411d038211 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 2 Oct 2012 15:34:18 +0200 Subject: [feature/soft-delete] Fix a bug in sync() and set_post_visibility() PHPBB3-9657 --- phpBB/includes/content_visibility.php | 15 ++++++++------- phpBB/includes/functions_admin.php | 6 +++--- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'phpBB/includes') diff --git a/phpBB/includes/content_visibility.php b/phpBB/includes/content_visibility.php index 1aa2ad1a29..8bc67a7fd2 100644 --- a/phpBB/includes/content_visibility.php +++ b/phpBB/includes/content_visibility.php @@ -242,12 +242,6 @@ class phpbb_content_visibility { global $db; - // if we're changing the starter, we need to change the rest of the topic - if ($is_starter && !$is_latest) - { - return self::set_topic_visibility($visibility, $topic_id, $forum_id); - } - if ($post_id) { $where_sql = 'post_id = ' . (int) $post_id; @@ -274,8 +268,9 @@ class phpbb_content_visibility $db->sql_query($sql); // Sync the first/last topic information if needed - if ($is_starter || $is_latest) + if (!$is_starter && $is_latest) { + // update_post_information can only update the last post info ... if ($topic_id) { update_post_information('topic', $topic_id, false); @@ -285,6 +280,12 @@ class phpbb_content_visibility update_post_information('forum', $forum_id, false); } } + else if (($is_starter || $is_latest) && $topic_id) + { + // ... so we need to use sync, if the first post is changed. + // The forum is resynced recursive by sync() itself. + sync('topic', 'topic_id', $topic_id, true); + } } /** diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 54130df935..bb8b02bbea 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -1908,12 +1908,12 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false, unset($delete_topics[$topic_id]); $topic_data[$topic_id]['replies_real'] += $row['total_posts']; - $topic_data[$topic_id]['first_post_id'] = (!$topic_data[$topic_id]['first_post_id']) ? $row['first_post_id'] : min($topic_data[$topic_id]['first_post_id'], $row['first_post_id']); - if ($row['post_visibility'] || !$topic_data[$topic_id]['last_post_id']) + if ($row['post_visibility'] == ITEM_APPROVED) { - $topic_data[$topic_id]['replies'] = $row['total_posts'] - 1; + $topic_data[$topic_id]['first_post_id'] = $row['first_post_id']; $topic_data[$topic_id]['last_post_id'] = $row['last_post_id']; + $topic_data[$topic_id]['replies'] = $row['total_posts'] - 1; } } } -- cgit v1.2.1