diff options
Diffstat (limited to 'phpBB/includes/mcp/mcp_main.php')
-rw-r--r-- | phpBB/includes/mcp/mcp_main.php | 209 |
1 files changed, 104 insertions, 105 deletions
diff --git a/phpBB/includes/mcp/mcp_main.php b/phpBB/includes/mcp/mcp_main.php index b63af4886c..fd2f4345ed 100644 --- a/phpBB/includes/mcp/mcp_main.php +++ b/phpBB/includes/mcp/mcp_main.php @@ -351,6 +351,37 @@ function change_topic_type($action, $topic_ids) AND forum_id = 0'; $db->sql_query($sql); + // Do a little forum sync stuff + $sql = 'SELECT t.topic_replies + 1 as topic_posts, COUNT(t.topic_approved) as topics_authed + FROM ' . TOPICS_TABLE . ' t + WHERE ' . $db->sql_in_set('t.topic_id', $topic_ids) . ' + GROUP BY t.topic_posts'; + $result = $db->sql_query($sql); + $row_data = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + $sync_sql = array(); + + if ($row_data['topic_posts']) + { + $sync_sql[$to_forum_id][] = 'forum_posts = forum_posts + ' . (int) $row_data['topic_posts']; + } + + if ($row_data['topics_authed']) + { + $sync_sql[$to_forum_id][] = 'forum_topics = forum_topics + ' . (int) $row_data['topics_authed']; + } + + $sync_sql[$to_forum_id][] = 'forum_topics_real = forum_topics_real + ' . (int) sizeof($topic_ids); + + foreach ($sync_sql as $forum_id_key => $array) + { + $sql = 'UPDATE ' . FORUMS_TABLE . ' + SET ' . implode(', ', $array) . ' + WHERE forum_id = ' . $forum_id_key; + $db->sql_query($sql); + } + sync('forum', 'forum_id', $to_forum_id); } } @@ -388,6 +419,37 @@ function change_topic_type($action, $topic_ids) WHERE ' . $db->sql_in_set('topic_id', $topic_ids); $db->sql_query($sql); + // Do a little forum sync stuff + $sql = 'SELECT t.topic_replies + 1 as topic_posts, COUNT(t.topic_approved) as topics_authed + FROM ' . TOPICS_TABLE . ' t + WHERE ' . $db->sql_in_set('t.topic_id', $topic_ids) . ' + GROUP BY t.topic_posts'; + $result = $db->sql_query($sql); + $row_data = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + $sync_sql = array(); + + if ($row_data['topic_posts']) + { + $sync_sql[$forum_id][] = 'forum_posts = forum_posts - ' . (int) $row_data['topic_posts']; + } + + if ($row_data['topics_authed']) + { + $sync_sql[$forum_id][] = 'forum_topics = forum_topics - ' . (int) $row_data['topics_authed']; + } + + $sync_sql[$forum_id][] = 'forum_topics_real = forum_topics_real - ' . (int) sizeof($topic_ids); + + foreach ($sync_sql as $forum_id_key => $array) + { + $sql = 'UPDATE ' . FORUMS_TABLE . ' + SET ' . implode(', ', $array) . ' + WHERE forum_id = ' . $forum_id_key; + $db->sql_query($sql); + } + sync('forum', 'forum_id', $forum_id); } } @@ -536,25 +598,30 @@ function mcp_move_topic($topic_ids) } } - $sql = 'SELECT COUNT(p.post_id) AS topic_posts, MAX(p.post_id) AS last_post_id - FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t + $db->sql_transaction('begin'); + + $sql = 'SELECT topic_replies + 1 as topic_posts + FROM ' . TOPICS_TABLE . ' t WHERE ' . $db->sql_in_set('t.topic_id', $topic_ids) . ' - AND p.topic_id = t.topic_id - AND t.topic_approved = 1 - AND p.post_approved = 1'; + GROUP BY topic_posts'; $result = $db->sql_query($sql); $row_data = $db->sql_fetchrow($result); $db->sql_freeresult($result); - $forum_sync_data[$forum_id]['forum_posts'] -= (int) $row_data['topic_posts']; - $forum_sync_data[$forum_id]['forum_topics'] -= (int) $topics_authed_moved; - $forum_sync_data[$forum_id]['forum_topics_real'] -= (int) $topics_moved; + $sync_sql = array(); - $forum_sync_data[$to_forum_id]['forum_posts'] += (int) $row_data['topic_posts']; - $forum_sync_data[$to_forum_id]['forum_topics'] += (int) $topics_authed_moved; - $forum_sync_data[$to_forum_id]['forum_topics_real'] += (int) $topics_moved; + if ($row_data['topic_posts']) + { + $sync_sql[$forum_id][] = 'forum_posts = forum_posts - ' . (int) $row_data['topic_posts']; + $sync_sql[$to_forum_id][] = 'forum_posts = forum_posts + ' . (int) $row_data['topic_posts']; + } - $db->sql_transaction('begin'); + if ($topics_authed_moved) + { + $sync_sql[$to_forum_id][] = 'forum_topics = forum_topics + ' . (int) $topics_authed_moved; + } + + $sync_sql[$to_forum_id][] = 'forum_topics_real = forum_topics_real + ' . (int) $topics_moved; // Move topics, but do not resync yet move_topics($topic_ids, $to_forum_id, false); @@ -614,114 +681,31 @@ function mcp_move_topic($topic_ids) $db->sql_query('INSERT INTO ' . TOPICS_TABLE . $db->sql_build_array('INSERT', $shadow)); - $forum_sync_data[(int) $row['forum_id']]['forum_topics']++; - $forum_sync_data[(int) $row['forum_id']]['forum_topics_real']++; + $topics_authed_moved--; + $topics_moved--; } } unset($topic_data); - $success_msg = (sizeof($topic_ids) == 1) ? 'TOPIC_MOVED_SUCCESS' : 'TOPICS_MOVED_SUCCESS'; + $sync_sql[$forum_id][] = 'forum_topics_real = forum_topics_real - ' . (int) $topics_moved; - // we must update the info, this post is being moved and is not the newest anymore - if ($forum_sync_data[$forum_id]['forum_last_post_id'] == $row_data['last_post_id']) + if ($topics_authed_moved) { - $forum_sync_data[$forum_id]['forum_last_post_id'] = 0; - $forum_sync_data[$forum_id]['forum_last_post_subject'] = ''; - $forum_sync_data[$forum_id]['forum_last_post_time'] = 0; - $forum_sync_data[$forum_id]['forum_last_poster_id'] = 0; - $forum_sync_data[$forum_id]['forum_last_poster_name'] = ''; - $forum_sync_data[$forum_id]['forum_last_poster_colour'] = ''; - - // I want the newest post that is not in the collection - // TODO: this is the last trouble maker - $sql = 'SELECT MAX(p.post_id) AS last_post_id - FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t - WHERE p.topic_id = t.topic_id - AND t.topic_approved = 1 - AND p.post_approved = 1 - AND t.forum_id = ' . $forum_id; - $result = $db->sql_query($sql); - - if ($last_post_id = $db->sql_fetchfield('last_post_id', false, $result)) - { - $sql = 'SELECT p.post_subject, p.post_time, p.post_username, p.poster_id, u.username as poster_name, u.user_colour as poster_colour - FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u - WHERE p.post_id = ' . $last_post_id . ' - AND p.poster_id = u.user_id'; - $result2 = $db->sql_query($sql); - $post_data = $db->sql_fetchrow($result2); - $db->sql_freeresult($result2); - - $post_data['post_id'] = $last_post_id; - - if ($post_data['poster_id'] == ANONYMOUS) - { - $post_data['poster_name'] = $post_data['post_username']; - } - unset($post_data['post_username']); - - foreach ($post_data as $row => $val) - { - $forum_sync_data[$forum_id]['forum_last_' . $row] = $val; - } - } - - $db->sql_freeresult($result); + $sync_sql[$forum_id][] = 'forum_topics = forum_topics - ' . (int) $topics_authed_moved; } - // we must update the info, this post is being moved and is not the newest anymore - if ($forum_sync_data[$to_forum_id]['forum_last_post_id'] < $row_data['last_post_id']) - { - $forum_sync_data[$to_forum_id]['forum_last_post_id'] = 0; - $forum_sync_data[$to_forum_id]['forum_last_post_subject'] = ''; - $forum_sync_data[$to_forum_id]['forum_last_post_time'] = 0; - $forum_sync_data[$to_forum_id]['forum_last_poster_id'] = 0; - $forum_sync_data[$to_forum_id]['forum_last_poster_name'] = ''; - $forum_sync_data[$to_forum_id]['forum_last_poster_colour'] = ''; - - // mod just moved all the posts out of the forum! - $sql = 'SELECT p.post_subject, p.post_time, p.post_username, p.poster_id, u.username as poster_name, u.user_colour as poster_colour - FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u - WHERE p.post_id = ' . $row_data['last_post_id'] . ' - AND p.poster_id = u.user_id'; - $result2 = $db->sql_query($sql); - $post_data = $db->sql_fetchrow($result2); - $db->sql_freeresult($result2); - - if ($post_data) - { - $post_data['post_id'] = $row_data['last_post_id']; - - if ($post_data['poster_id'] == ANONYMOUS) - { - $post_data['poster_name'] = $post_data['post_username']; - } - unset($post_data['post_username']); - - foreach ($post_data as $row => $val) - { - $forum_sync_data[$to_forum_id]['forum_last_' . $row] = $val; - } - } - } + $success_msg = (sizeof($topic_ids) == 1) ? 'TOPIC_MOVED_SUCCESS' : 'TOPICS_MOVED_SUCCESS'; - foreach ($forum_sync_data as $forum_id_key => $sql_ary) + foreach ($sync_sql as $forum_id_key => $array) { - foreach ($sql_ary as $key => $value) - { - if (strpos($key, 'forum_last_') === 0 || $key === 'forum_posts' || $key === 'forum_topics' || $key === 'forum_topics_real') - { - continue; - } - unset($sql_ary[$key]); - } - $sql = 'UPDATE ' . FORUMS_TABLE . ' - SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' + SET ' . implode(', ', $array) . ' WHERE forum_id = ' . $forum_id_key; $db->sql_query($sql); } + sync('forum', 'forum_id', array($forum_id, $to_forum_id)); + $db->sql_transaction('commit'); } else @@ -1165,6 +1149,21 @@ function mcp_fork_topic($topic_ids) // Sync new topics, parent forums and board stats sync('topic', 'topic_id', $new_topic_id_list, true); + + $sync_sql = array(); + + $sync_sql[$to_forum_id][] = 'forum_posts = forum_posts + ' . $total_posts; + $sync_sql[$to_forum_id][] = 'forum_topics = forum_topics + ' . sizeof($new_topic_id_list); + $sync_sql[$to_forum_id][] = 'forum_topics_real = forum_topics_real + ' . sizeof($new_topic_id_list); + + foreach ($sync_sql as $forum_id_key => $array) + { + $sql = 'UPDATE ' . FORUMS_TABLE . ' + SET ' . implode(', ', $array) . ' + WHERE forum_id = ' . $forum_id_key; + $db->sql_query($sql); + } + sync('forum', 'forum_id', $to_forum_id, true); set_config('num_topics', $config['num_topics'] + sizeof($new_topic_id_list), true); set_config('num_posts', $config['num_posts'] + $total_posts, true); |