From d7925595dc46c1d913dd722b2121d4552c20cb47 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 31 Aug 2009 13:50:40 +0000 Subject: Fix Bug #50035 - Fix handling of bookmarks and subscriptions on "split topcis", "merge topics" and "merge posts" Authorised by: AcydBurn git-svn-id: file:///svn/phpbb/branches/phpBB-3_0_0@10079 89ea8834-ac86-4346-8a33-228a782c2dd0 --- phpBB/includes/mcp/mcp_forum.php | 3 ++ phpBB/includes/mcp/mcp_topic.php | 87 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) (limited to 'phpBB/includes/mcp') diff --git a/phpBB/includes/mcp/mcp_forum.php b/phpBB/includes/mcp/mcp_forum.php index b70601b479..acb7aa4ac0 100644 --- a/phpBB/includes/mcp/mcp_forum.php +++ b/phpBB/includes/mcp/mcp_forum.php @@ -416,11 +416,14 @@ function merge_topics($forum_id, $topic_ids, $to_topic_id) // If the topic no longer exist, we will update the topic watch table. // To not let it error out on users watching both topics, we just return on an error... + // Same for Bookmarks $db->sql_return_on_error(true); $db->sql_query('UPDATE ' . TOPICS_WATCH_TABLE . ' SET topic_id = ' . (int) $to_topic_id . ' WHERE ' . $db->sql_in_set('topic_id', $topic_ids)); + $db->sql_query('UPDATE ' . BOOKMARKS_TABLE . ' SET topic_id = ' . (int) $to_topic_id . ' WHERE ' . $db->sql_in_set('topic_id', $topic_ids)); $db->sql_return_on_error(false); $db->sql_query('DELETE FROM ' . TOPICS_WATCH_TABLE . ' WHERE ' . $db->sql_in_set('topic_id', $topic_ids)); + $db->sql_query('DELETE FROM ' . BOOKMARKS_TABLE . ' WHERE ' . $db->sql_in_set('topic_id', $topic_ids)); // Link to the new topic $return_link .= (($return_link) ? '

' : '') . sprintf($user->lang['RETURN_NEW_TOPIC'], '', ''); diff --git a/phpBB/includes/mcp/mcp_topic.php b/phpBB/includes/mcp/mcp_topic.php index 576d20b466..cdb4cac7d6 100644 --- a/phpBB/includes/mcp/mcp_topic.php +++ b/phpBB/includes/mcp/mcp_topic.php @@ -503,6 +503,45 @@ function split_topic($action, $topic_id, $to_forum_id, $subject) // Update forum statistics set_config_count('num_topics', 1, true); + // Add new topic to bookmarks + $bookmarks = array(); + $sql = 'SELECT user_id + FROM ' . BOOKMARKS_TABLE . ' + WHERE topic_id = ' . $topic_id; + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + $bookmarks[] = array( + 'user_id' => (int) $row['user_id'], + 'topic_id' => $to_topic_id, + ); + } + $db->sql_freeresult($result); + if (sizeof($bookmarks)) + { + $db->sql_multi_insert(BOOKMARKS_TABLE, $bookmarks); + } + + // Add new topic to watch-list + $notifications = array(); + $sql = 'SELECT user_id, notify_status + FROM ' . TOPICS_WATCH_TABLE . ' + WHERE topic_id = ' . $topic_id; + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + $notifications[] = array( + 'user_id' => (int) $row['user_id'], + 'topic_id' => $to_topic_id, + 'notify_status' => (int) $row['notify_status'], + ); + } + $db->sql_freeresult($result); + if (sizeof($notifications)) + { + $db->sql_multi_insert(TOPICS_WATCH_TABLE, $notifications); + } + // Link back to both topics $return_link = sprintf($user->lang['RETURN_TOPIC'], '', '') . '

' . sprintf($user->lang['RETURN_NEW_TOPIC'], '', ''); } @@ -596,17 +635,65 @@ function merge_posts($topic_id, $to_topic_id) if ($row) { + // Add new topic to bookmarks + $bookmarks = array(); + $sql = 'SELECT user_id + FROM ' . BOOKMARKS_TABLE . ' + WHERE topic_id = ' . (int) $topic_id; + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + $bookmarks[] = array( + 'user_id' => (int) $row['user_id'], + 'topic_id' => (int) $to_topic_id, + ); + } + $db->sql_freeresult($result); + if (sizeof($bookmarks)) + { + // To not let it error out on users, who already bookmarked the topic, we just return on an error... + $db->sql_return_on_error(true); + $db->sql_multi_insert(BOOKMARKS_TABLE, $bookmarks); + $db->sql_return_on_error(false); + } + + // Add new topic to notifications + $notifications = array(); + $sql = 'SELECT user_id, notify_status + FROM ' . TOPICS_WATCH_TABLE . ' + WHERE topic_id = ' . (int) $topic_id; + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + $notifications[] = array( + 'user_id' => (int) $row['user_id'], + 'topic_id' => (int) $to_topic_id, + 'notify_status' => (int) $row['notify_status'], + ); + } + $db->sql_freeresult($result); + if (sizeof($notifications)) + { + // To not let it error out on users, who already watch the topic, we just return on an error... + $db->sql_return_on_error(true); + $db->sql_multi_insert(TOPICS_WATCH_TABLE, $notifications); + $db->sql_return_on_error(false); + } + $return_link .= sprintf($user->lang['RETURN_TOPIC'], '', ''); } else { // If the topic no longer exist, we will update the topic watch table. // To not let it error out on users watching both topics, we just return on an error... + // Same for bookmarks $db->sql_return_on_error(true); $db->sql_query('UPDATE ' . TOPICS_WATCH_TABLE . ' SET topic_id = ' . (int) $to_topic_id . ' WHERE topic_id = ' . (int) $topic_id); + $db->sql_query('UPDATE ' . BOOKMARKS_TABLE . ' SET topic_id = ' . (int) $to_topic_id . ' WHERE topic_id = ' . (int) $topic_id); $db->sql_return_on_error(false); $db->sql_query('DELETE FROM ' . TOPICS_WATCH_TABLE . ' WHERE topic_id = ' . (int) $topic_id); + $db->sql_query('DELETE FROM ' . BOOKMARKS_TABLE . ' WHERE topic_id = ' . (int) $topic_id); } // Link to the new topic -- cgit v1.2.1