aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMeik Sievertsen <acydburn@phpbb.com>2006-07-06 15:00:31 +0000
committerMeik Sievertsen <acydburn@phpbb.com>2006-07-06 15:00:31 +0000
commit2b531a279f267642582b275dc3f215367e6a5396 (patch)
tree388175339eebd99ea0f3090bd102056cb2799b2c
parent00508798251f0ebd897b94b360b7426846dab840 (diff)
downloadforums-2b531a279f267642582b275dc3f215367e6a5396.tar
forums-2b531a279f267642582b275dc3f215367e6a5396.tar.gz
forums-2b531a279f267642582b275dc3f215367e6a5396.tar.bz2
forums-2b531a279f267642582b275dc3f215367e6a5396.tar.xz
forums-2b531a279f267642582b275dc3f215367e6a5396.zip
fix for a bug spotted by ToonArmy within bug #3000 (thanks to him for providing a sample patch too)
git-svn-id: file:///svn/phpbb/trunk@6148 89ea8834-ac86-4346-8a33-228a782c2dd0
-rw-r--r--phpBB/includes/mcp/mcp_main.php64
1 files changed, 51 insertions, 13 deletions
diff --git a/phpBB/includes/mcp/mcp_main.php b/phpBB/includes/mcp/mcp_main.php
index 2b65a7c8b2..835c48f389 100644
--- a/phpBB/includes/mcp/mcp_main.php
+++ b/phpBB/includes/mcp/mcp_main.php
@@ -320,26 +320,68 @@ function change_topic_type($action, $topic_ids)
{
$sql = 'UPDATE ' . TOPICS_TABLE . "
SET topic_type = $new_topic_type, forum_id = $forum_id
- WHERE topic_id IN (" . implode(', ', $topic_ids) . ')
+ WHERE topic_id IN (" . implode(', ', $topic_ids) . ')
AND forum_id = 0';
$db->sql_query($sql);
+
+ // Update forum_ids for all posts
+ $sql = 'UPDATE ' . POSTS_TABLE . "
+ SET forum_id = $forum_id
+ WHERE topic_id IN (" . implode(', ', $topic_ids) . ')
+ AND forum_id = 0';
+ $db->sql_query($sql);
+
+ sync('forum', 'forum_id', $forum_id);
}
}
else
{
- $sql = 'UPDATE ' . TOPICS_TABLE . "
- SET topic_type = $new_topic_type, forum_id = 0
- WHERE topic_id IN (" . implode(', ', $topic_ids) . ")";
- $db->sql_query($sql);
+ // Get away with those topics already being a global announcement by re-calculating $topic_ids
+ $sql = 'SELECT topic_id
+ FROM ' . TOPICS_TABLE . '
+ WHERE topic_id IN (' . implode(', ', $topic_ids) . ')
+ AND forum_id <> 0';
+ $result = $db->sql_query($sql);
+
+ $topic_ids = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $topic_ids[] = $row['topic_id'];
+ }
+ $db->sql_freeresult($result);
+
+ if (sizeof($topic_ids))
+ {
+ // Delete topic shadows for global announcements
+ $sql = 'DELETE FROM ' . TOPICS_TABLE . '
+ WHERE topic_moved_id IN (' . implode(', ', $topic_ids) . ')';
+ $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . TOPICS_TABLE . "
+ SET topic_type = $new_topic_type, forum_id = 0
+ WHERE topic_id IN (" . implode(', ', $topic_ids) . ')';
+ $db->sql_query($sql);
+
+ // Update forum_ids for all posts
+ $sql = 'UPDATE ' . POSTS_TABLE . '
+ SET forum_id = 0
+ WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
+ $db->sql_query($sql);
+
+ sync('forum', 'forum_id', $forum_id);
+ }
}
$success_msg = (sizeof($topic_ids) == 1) ? 'TOPIC_TYPE_CHANGED' : 'TOPICS_TYPE_CHANGED';
- $data = get_topic_data($topic_ids);
-
- foreach ($data as $topic_id => $row)
+ if (sizeof($topic_ids))
{
- add_log('mod', $forum_id, $topic_id, 'LOG_TOPIC_TYPE_CHANGED', $row['topic_title']);
+ $data = get_topic_data($topic_ids);
+
+ foreach ($data as $topic_id => $row)
+ {
+ add_log('mod', $forum_id, $topic_id, 'LOG_TOPIC_TYPE_CHANGED', $row['topic_title']);
+ }
}
}
else
@@ -542,10 +584,6 @@ function mcp_delete_topic($topic_ids)
}
$return = delete_topics('topic_id', $topic_ids, true);
-
- /**
- * @todo Adjust total post count (mcp_delete_topic)
- */
}
else
{