aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/functions_admin.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/functions_admin.php')
-rw-r--r--phpBB/includes/functions_admin.php434
1 files changed, 256 insertions, 178 deletions
diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php
index 01bbd60836..b38a06141c 100644
--- a/phpBB/includes/functions_admin.php
+++ b/phpBB/includes/functions_admin.php
@@ -20,21 +20,20 @@
***************************************************************************/
// Simple version of jumpbox, just lists authed forums
-// This needs altering to allow for ignoring acl checks ... they aren't needed
-// everywhere ...
-function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl = false)
+function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl = false, $ignore_nonpost = false, $ignore_emptycat = true)
{
global $db, $user, $auth;
$right = $cat_right = 0;
$forum_list = $padding = $holding = '';
- $acl = ($ignore_acl) ? '' : 'f_list';
- $rowset = get_forum_list($acl, FALSE, FALSE, TRUE);
+ $acl = ($ignore_acl) ? '' : array('f_list', 'a_forum', 'a_forumadd', 'a_forumdel');
+ $rowset = get_forum_list($acl, false, $ignore_nonpost, true);
foreach ($rowset as $row)
{
- if ($row['forum_id'] == $ignore_id)
+ if ((is_array($ignore_id) && in_array($row['forum_id'], $ignore_id)) ||
+ $row['forum_id'] == $ignore_id)
{
continue;
}
@@ -57,15 +56,16 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl =
$holding = '';
}
- if ($row['right_id'] - $row['left_id'] > 1)
+ if ($row['right_id'] - $row['left_id'] > 1 && $ignore_emptycat)
{
$cat_right = max($cat_right, $row['right_id']);
- $holding .= '<option class="sep" value="' . $row['forum_id'] . '"' . $selected . '>' . $padding . '+ ' . $row['forum_name'] . '</option>';
+ $holding .= '<option value="' . $row['forum_id'] . '"' . $selected . '>' . $padding . '+ ' . $row['forum_name'] . '</option>';
}
else
{
- $forum_list .= $holding . '<option value="' . $row['forum_id'] . '"' . $selected . '>' . $padding . '- ' . $row['forum_name'] . '</option>';
+ $sep = ($row['right_id'] - $row['left_id'] > 1) ? '+ ' : '- ';
+ $forum_list .= $holding . '<option value="' . $row['forum_id'] . '"' . $selected . '>' . $padding . $sep . $row['forum_name'] . '</option>';
$holding = '';
}
}
@@ -88,7 +88,7 @@ function get_forum_list($acl_list = 'f_list', $id_only = TRUE, $postable_only =
{
// This query is identical to the jumpbox one
$expire_time = ($no_cache) ? 0 : 120;
- $sql = 'SELECT forum_id, forum_name, forum_postable, left_id, right_id
+ $sql = 'SELECT forum_id, forum_name, forum_type, left_id, right_id
FROM ' . FORUMS_TABLE . '
ORDER BY left_id ASC';
$result = $db->sql_query($sql, $expire_time);
@@ -102,7 +102,7 @@ function get_forum_list($acl_list = 'f_list', $id_only = TRUE, $postable_only =
$rowset = array();
foreach ($forum_rows as $row)
{
- if ($postable_only && !$row['forum_postable'])
+ if ($postable_only && $row['forum_type'] == FORUM_CAT)
{
continue;
}
@@ -122,49 +122,45 @@ function move_topics($topic_ids, $forum_id, $auto_sync = TRUE)
global $db;
$forum_ids = array($forum_id);
- $where_sql = (is_array($topic_ids)) ? 'IN (' . implode(', ', $topic_ids) . ')' : '= ' . $topic_ids;
+ $sql_where = (is_array($topic_ids)) ? 'IN (' . implode(', ', $topic_ids) . ')' : '= ' . $topic_ids;
+
+ $sql = 'DELETE FROM ' . TOPICS_TABLE . "
+ WHERE topic_moved_id $sql_where
+ AND forum_id = " . $forum_id;
+ $db->sql_query($sql);
+
+ $table_ary = array(TOPICS_TABLE, POSTS_TABLE, LOG_MOD_TABLE);
+ foreach ($table_ary as $table)
+ {
+ $sql = "UPDATE $table
+ SET forum_id = $forum_id
+ WHERE topic_id " . $sql_where;
+ $db->sql_query($sql);
+ }
+ unset($table_ary);
if ($auto_sync)
{
$sql = 'SELECT DISTINCT forum_id
FROM ' . TOPICS_TABLE . '
- WHERE topic_id ' . $where_sql;
+ WHERE topic_id ' . $sql_where;
$result = $db->sql_query($sql);
+
while ($row = $db->sql_fetchrow($result))
{
$forum_ids[] = $row['forum_id'];
}
- }
-
- $sql = 'DELETE FROM ' . TOPICS_TABLE . "
- WHERE topic_moved_id $where_sql
- AND forum_id = " . $forum_id;
- $db->sql_query($sql);
-
- $sql = 'UPDATE ' . TOPICS_TABLE . "
- SET forum_id = $forum_id
- WHERE topic_id " . $where_sql;
- $db->sql_query($sql);
-
- $sql = 'UPDATE ' . POSTS_TABLE . "
- SET forum_id = $forum_id
- WHERE topic_id " . $where_sql;
- $db->sql_query($sql);
-
- $sql = 'UPDATE ' . LOG_MOD_TABLE . "
- SET forum_id = $forum_id
- WHERE topic_id " . $where_sql;
- $db->sql_query($sql);
+ $db->sql_freeresult($result);
- if ($auto_sync)
- {
sync('forum', 'forum_id', $forum_ids, TRUE);
+ unset($forum_ids);
}
}
function move_posts($post_ids, $topic_id, $auto_sync = TRUE)
{
global $db;
+
if (!is_array($post_ids))
{
$post_ids = array($post_ids);
@@ -179,19 +175,25 @@ function move_posts($post_ids, $topic_id, $auto_sync = TRUE)
FROM ' . POSTS_TABLE . '
WHERE post_id IN (' . implode(', ', $post_ids) . ')';
$result = $db->sql_query($sql);
+
while ($row = $db->sql_fetchrow($result))
{
$forum_ids[] = $row['forum_id'];
$topic_ids[] = $row['topic_id'];
}
+ $db->sql_freeresult($result);
}
- $sql = 'SELECT * FROM ' . TOPICS_TABLE . ' WHERE topic_id = ' . $topic_id;
+ $sql = 'SELECT *
+ FROM ' . TOPICS_TABLE . '
+ WHERE topic_id = ' . $topic_id;
$result = $db->sql_query($sql);
- if (!$row = $db->sql_fetchrow($result))
+
+ if (!($row = $db->sql_fetchrow($result)))
{
- trigger_error('Topic_post_not_exist');
+ trigger_error('NO_TOPIC');
}
+ $db->sql_freeresult($result);
$sql = 'UPDATE ' . POSTS_TABLE . '
SET forum_id = ' . $row['forum_id'] . ", topic_id = $topic_id
@@ -217,6 +219,7 @@ function delete_topics($where_type, $where_ids, $auto_sync = TRUE)
{
$where_ids = array_unique($where_ids);
}
+
if (!count($where_ids))
{
return array('topics' => 0, 'posts' => '0');
@@ -226,13 +229,13 @@ function delete_topics($where_type, $where_ids, $auto_sync = TRUE)
'posts' => delete_posts($where_type, $where_ids, FALSE)
);
- $where_sql = "WHERE $where_type " . ((!is_array($where_ids)) ? "= $where_ids" : 'IN (' . implode(', ', $where_ids) . ')');
+//???? $where_sql = "WHERE $where_type " . ((!is_array($where_ids)) ? "= $where_ids" : 'IN (' . implode(', ', $where_ids) . ')');
$sql = 'SELECT topic_id, forum_id
FROM ' . TOPICS_TABLE . "
WHERE $where_type " . ((!is_array($where_ids)) ? "= $where_ids" : 'IN (' . implode(', ', $where_ids) . ')');
-
$result = $db->sql_query($sql);
+
while ($row = $db->sql_fetchrow($result))
{
$forum_ids[] = $row['forum_id'];
@@ -247,17 +250,25 @@ function delete_topics($where_type, $where_ids, $auto_sync = TRUE)
return $return;
}
- // TODO: clean up topics cache if any, last read marking, probably some other stuff too
+ // TODO: probably some other stuff too
- $where_sql = ' IN (' . implode(', ', $topic_ids) . ')';
+ $sql_where = ' IN (' . implode(', ', $topic_ids) . ')';
$db->sql_transaction('begin');
- $db->sql_query('DELETE FROM ' . LASTREAD_TABLE . ' WHERE topic_id' . $where_sql);
- $db->sql_query('DELETE FROM ' . POLL_VOTES_TABLE . ' WHERE topic_id' . $where_sql);
- $db->sql_query('DELETE FROM ' . POLL_OPTIONS_TABLE . ' WHERE topic_id' . $where_sql);
- $db->sql_query('DELETE FROM ' . TOPICS_WATCH_TABLE . ' WHERE topic_id' . $where_sql);
- $db->sql_query('DELETE FROM ' . TOPICS_TABLE . ' WHERE topic_moved_id' . $where_sql);
- $db->sql_query('DELETE FROM ' . TOPICS_TABLE . ' WHERE topic_id' . $where_sql);
+
+ $table_ary = array(TOPICS_TRACK_TABLE, POLL_VOTES_TABLE, POLL_OPTIONS_TABLE, TOPICS_WATCH_TABLE, TOPICS_TABLE);
+ foreach ($table_ary as $table)
+ {
+ $sql = "DELETE FROM $table
+ WHERE topic_id $sql_where";
+ $db->sql_query($sql);
+ }
+ unset($table_ary);
+
+ $sql = 'DELETE FROM ' . TOPICS_TABLE . '
+ WHERE topic_moved_id' . $sql_where;
+ $db->sql_query($sql);
+
$db->sql_transaction('commit');
if ($auto_sync)
@@ -266,6 +277,23 @@ function delete_topics($where_type, $where_ids, $auto_sync = TRUE)
sync('topic_reported', $where_type, $where_ids);
}
+ // Optimize/vacuum tables
+ switch (SQL_LAYER)
+ {
+ case 'mysql':
+ case 'mysql4':
+ $table_ary = array(TOPICS_TRACK_TABLE, POLL_VOTES_TABLE, POLL_OPTIONS_TABLE, TOPICS_WATCH_TABLE, TOPICS_TABLE);
+ $sql = 'OPTIMIZE TABLE ' . implode(', ', $table_ary);
+ $db->sql_query($sql);
+ unset($table_ary);
+
+ break;
+
+ case 'postgresql':
+ $db->sql_query('VACUUM');
+ break;
+ }
+
return $return;
}
@@ -301,13 +329,19 @@ function delete_posts($where_type, $where_ids, $auto_sync = TRUE)
return false;
}
- $where_sql = ' WHERE post_id IN (' . implode(', ', $post_ids) . ')';
+ $sql_where = implode(', ', $post_ids);
$db->sql_transaction('begin');
- $db->sql_query('DELETE FROM ' . POSTS_TABLE . $where_sql);
- $db->sql_query('DELETE FROM ' . RATINGS_TABLE . $where_sql);
- $db->sql_query('DELETE FROM ' . REPORTS_TABLE . $where_sql);
- $db->sql_query('DELETE FROM ' . SEARCH_MATCH_TABLE . $where_sql);
+
+ $table_ary = array(POSTS_TABLE, RATINGS_TABLE, REPORTS_TABLE, SEARCH_MATCH_TABLE);
+ foreach ($table_ary as $table)
+ {
+ $sql = "DELETE FROM $table
+ WHERE post_id IN ($sql_where)";
+ $db->sql_query($sql);
+ }
+ unset($table_ary);
+
$db->sql_transaction('commit');
delete_attachment($post_ids);
@@ -319,18 +353,35 @@ function delete_posts($where_type, $where_ids, $auto_sync = TRUE)
sync('forum', 'forum_id', $forum_ids, TRUE);
}
+ // Optimize/vacuum tables
+ switch (SQL_LAYER)
+ {
+ case 'mysql':
+ case 'mysql4':
+ $table_ary = array(POSTS_TABLE, RATINGS_TABLE, REPORTS_TABLE, SEARCH_MATCH_TABLE);
+ $sql = 'OPTIMIZE TABLE ' . implode(', ', $table_ary);
+ $db->sql_query($sql);
+ unset($table_ary);
+
+ break;
+
+ case 'postgresql':
+ $db->sql_query('VACUUM');
+ break;
+ }
+
return count($post_ids);
}
+// All-encompasing sync function
//
// Usage:
// sync('topic', 'topic_id', 123); <= resynch topic #123
// sync('topic', 'forum_id', array(2, 3)); <= resynch topics from forum #2 and #3
// sync('topic'); <= resynch all topics
-//
function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE, $sync_extra = FALSE)
{
- global $db, $dbms;
+ global $db;
if (is_array($where_ids))
{
@@ -351,13 +402,13 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
else
{
$where_sql = 'WHERE ' . $mode{0} . ".$where_type IN (" . implode(', ', $where_ids) . ')';
- $where_sql_and = $where_sql . "\n\tAND";
+ $where_sql_and = $where_sql . ' AND';
}
}
else
{
$where_sql = "WHERE t.$where_type IN (" . implode(', ', $where_ids) . ')';
- $where_sql_and = $where_sql . "\n\tAND";
+ $where_sql_and = $where_sql . ' AND';
}
switch ($mode)
@@ -370,7 +421,6 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
$result = $db->sql_query($sql);
$topic_ids = $approved_unapproved_ids = array();
-
while ($row = $db->sql_fetchrow($result))
{
$approved_unapproved_ids[] = $row['topic_id'];
@@ -386,29 +436,34 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
SET topic_approved = 1 - topic_approved
WHERE topic_id IN (' . implode(', ', $approved_unapproved_ids) . ')';
$db->sql_query($sql);
- break;
+ break;
case 'post_attachment':
$post_ids = array();
- switch ($dbms)
+ switch (SQL_LAYER)
{
+ case 'oracle':
+ //TODO
+ break;
+
default:
$sql = 'SELECT t.post_id, t.post_attachment, COUNT(a.attachment_id) AS attachments
FROM ' . POSTS_TABLE . ' t
LEFT JOIN ' . ATTACHMENTS_TABLE . " a ON t.post_id = a.post_id
$where_sql
GROUP BY t.post_id";
+ }
+ $result = $db->sql_query($sql);
- $result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
- {
- if (($row['post_attachment'] && !$row['attachments']) || ($row['attachments'] && !$row['post_attachment']))
- {
- $post_ids[] = $row['post_id'];
- }
- }
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if (($row['post_attachment'] && !$row['attachments']) || ($row['attachments'] && !$row['post_attachment']))
+ {
+ $post_ids[] = $row['post_id'];
+ }
}
+ $db->sql_freeresult($result);
if (!count($post_ids))
{
@@ -419,32 +474,37 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
SET post_attachment = 1 - post_attachment
WHERE post_id IN (' . implode(', ', $post_ids) . ')';
$db->sql_query($sql);
- break;
+ break;
case 'topic_attachment':
- $topic_ids = array();
- switch ($dbms)
+ switch (SQL_LAYER)
{
+ case 'oracle':
+ //TODO
+ break;
+
default:
$sql = 'SELECT t.topic_id, t.topic_attachment, COUNT(a.attachment_id) AS attachments
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p
LEFT JOIN ' . ATTACHMENTS_TABLE . " a ON p.post_id = a.post_id
$where_sql_and t.topic_id = p.topic_id
AND ((t.topic_attachment = 1 AND attachments = 0)
- OR (t.topic_attachment = 0 AND attachments > 0))
+ OR (t.topic_attachment = 0 AND attachments > 0))
GROUP BY t.topic_id";
+ }
+ $result = $db->sql_query($sql);
- $result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
- {
- if (($row['topic_attachment'] && !$row['attachments'])
- || ($row['attachments'] && !$row['topic_attachment']))
- {
- $topic_ids[] = $row['topic_id'];
- }
- }
+ $topic_ids = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if (($row['topic_attachment'] && !$row['attachments'])
+ || ($row['attachments'] && !$row['topic_attachment']))
+ {
+ $topic_ids[] = $row['topic_id'];
+ }
}
+ $db->sql_freeresult($result);
if (count($topic_ids))
{
@@ -455,98 +515,122 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
SET topic_attachment = 1 - topic_attachment
WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
$db->sql_query($sql);
- break;
+ break;
case 'reported':
$topic_data = $topic_ids = $post_ids = array();
if ($sync_extra)
{
- // NOTE: untested
- $sql = 'SELECT p.post_id
- FROM ' . POSTS_TABLE . ' t
- LEFT JOIN ' . REPORTS_TABLE . " r ON r.post_id = t.post_id
- $where_sql
- AND ((t.post_reported = 1 AND r.post_id IS NULL)
- OR (t.post_reported = 0 AND r.post_id > 0))
- GROUP p.post_id";
- $result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
+ switch (SQL_LAYER)
{
- $post_ids[] = $row['post_id'];
+ case 'oracle':
+ //TODO
+ break;
+
+ default:
+ // NOTE: untested
+ $sql = 'SELECT p.post_id
+ FROM ' . POSTS_TABLE . ' t
+ LEFT JOIN ' . REPORTS_TABLE . " r ON r.post_id = t.post_id
+ $where_sql
+ AND ((t.post_reported = 1 AND r.post_id IS NULL)
+ OR (t.post_reported = 0 AND r.post_id > 0))
+ GROUP p.post_id";
}
- $db->sql_freeresult();
+ $result = $db->sql_query($sql);
- if (count($post_ids))
+ if ($row = $db->sql_fetchrow($result))
{
+ do
+ {
+ $post_ids[] = $row['post_id'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+
$sql = 'UPDATE ' . POSTS_TABLE . '
SET post_reported = 1 - post_reported
WHERE post_id IN (' . implode(', ', $post_ids) . ')';
$db->sql_query($sql);
unset($post_ids);
}
+ $db->sql_freeresult();
}
- // NOTE: untested
- $sql = 'SELECT t.topic_id, t.topic_reported, p.post_reported
- FROM ' . TOPICS_TABLE . ' t
- LEFT JOIN ' . POSTS_TABLE . " p ON p.topic_id = t.topic_id
- $where_sql
- GROUP BY p.topic_id, p.post_reported";
+ switch (SQL_LAYER)
+ {
+ case 'oracle':
+ //TODO
+ break;
+
+ default:
+ // NOTE: untested
+ $sql = 'SELECT t.topic_id, t.topic_reported, p.post_reported
+ FROM ' . TOPICS_TABLE . ' t
+ LEFT JOIN ' . POSTS_TABLE . " p ON p.topic_id = t.topic_id
+ $where_sql
+ GROUP BY p.topic_id, p.post_reported";
+ }
$result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
+ if ($row = $db->sql_fetchrow($result))
{
- if (!isset($topic_data[$row['topic_id']]))
- {
- $topic_data[$row['topic_id']] = array(
- 'topic_reported' => $row['topic_reported'],
- 'post_reported' => $row['post_reported']
- );
- }
- else
+ do
{
- $topic_data[$row['topic_id']]['post_reported'] |= $row['post_reported'];
+ if (!isset($topic_data[$row['topic_id']]))
+ {
+ $topic_data[$row['topic_id']] = array(
+ 'topic_reported' => $row['topic_reported'],
+ 'post_reported' => $row['post_reported']
+ );
+ }
+ else
+ {
+ $topic_data[$row['topic_id']]['post_reported'] |= $row['post_reported'];
+ }
}
- }
+ while ($row = $db->sql_fetchrow($result));
- foreach ($topic_data as $topic_id => $row)
- {
- if ($row['post_reported'] != $row['topic_reported'])
+ foreach ($topic_data as $topic_id => $row)
{
- $topic_ids[] = $topic_id;
+ if ($row['post_reported'] != $row['topic_reported'])
+ {
+ $topic_ids[] = $topic_id;
+ }
}
- }
- if (count($topic_ids))
- {
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET topic_reported = 1 - topic_reported
WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
$db->sql_query($sql);
+ unset($topic_ids);
}
+ $db->sql_freeresult($result);
+
return;
- break;
+ break;
case 'forum':
if ($resync_parents)
{
- $forum_ids = array();
-
$sql = 'SELECT f2.forum_id
FROM ' . FORUMS_TABLE . ' f, ' . FORUMS_TABLE . " f2
$where_sql_and f.left_id BETWEEN f2.left_id AND f2.right_id";
-
$result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
- {
- $forum_ids[] = $row['forum_id'];
- }
- if (count($forum_ids))
+ if ($row = $db->sql_fetchrow($result))
{
+ $forum_ids = array();
+ do
+ {
+ $forum_ids[] = $row['forum_id'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+
sync('forum', 'forum_id', $forum_ids, FALSE);
+ unset($forum_ids);
}
+ $db->sql_freeresult($result);
return;
}
@@ -555,12 +639,16 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
$sql = 'SELECT f.*, f2.forum_id AS id
FROM ' . FORUMS_TABLE . ' f, ' . FORUMS_TABLE . " f2
$where_sql_and f2.left_id BETWEEN f.left_id AND f.right_id";
+ $result = $db->sql_query($sql);
$forum_data = $forum_ids = $post_ids = $subforum_list = $post_count = $last_post_id = $post_info = $topic_count = $topic_count_real = array();
-
- $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
+ if ($row['forum_type'] == FORUM_LINK)
+ {
+ continue;
+ }
+
$forum_ids[$row['id']] = $row['id'];
if (!isset($subforum_list[$row['forum_id']]))
{
@@ -596,6 +684,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
{
$topic_count_real[$row['forum_id']] += $row['forum_topics'];
}
+
if ($row['topic_approved'])
{
$topic_count[$row['forum_id']] = $row['forum_topics'];
@@ -624,6 +713,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
$forum_data[$forum_id]['topics'] += $topic_count[$subforum_id];
$forum_data[$forum_id]['topics_real'] += $topic_count_real[$subforum_id];
}
+
if (isset($post_count[$subforum_id]))
{
$forum_data[$forum_id]['posts'] += $post_count[$subforum_id];
@@ -640,6 +730,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
$post_ids[] = $data['last_post_id'];
}
}
+
if (count($post_ids))
{
$sql = 'SELECT p.post_id, p.poster_id, u.username, p.post_time
@@ -682,35 +773,21 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
{
if (preg_match('#name$#', $fieldname))
{
- if (isset($row[$fieldname]))
- {
- $sql['forum_' . $fieldname] = (string) $row[$fieldname];
- }
- else
- {
- $sql['forum_' . $fieldname] = '';
- }
+ $sql['forum_' . $fieldname] = (isset($row[$fieldname])) ? (string) $row[$fieldname] : '';
}
else
{
- if (isset($row[$fieldname]))
- {
- $sql['forum_' . $fieldname] = (int) $row[$fieldname];
- }
- else
- {
- $sql['forum_' . $fieldname] = 0;
- }
+ $sql['forum_' . $fieldname] = (isset($row[$fieldname])) ? (int) $row[$fieldname] : 0;
}
}
- $sql = 'UPDATE ' . FORUMS_TABLE . '
+ $sql = 'UPDATE ' . FORUMS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $sql) . '
WHERE forum_id = ' . $forum_id;
$db->sql_query($sql);
}
}
- break;
+ break;
case 'topic':
$topic_data = $topic_ids = $post_ids = $approved_unapproved_ids = $resync_forums = array();
@@ -719,8 +796,8 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p
$where_sql_and p.topic_id = t.topic_id
GROUP BY p.topic_id, p.post_approved";
-
$result = $db->sql_query($sql);
+
while ($row = $db->sql_fetchrow($result))
{
$row['total_posts'] = intval($row['total_posts']);
@@ -766,7 +843,6 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
if (!count($topic_ids))
{
// If we get there, topic ids were invalid or topics did not contain any posts
-
delete_topics($where_type, $where_ids);
return;
}
@@ -830,10 +906,9 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u
WHERE p.post_id IN (' . implode(', ', $post_ids) . ')
AND u.user_id = p.poster_id';
+ $result = $db->sql_query($sql);
$post_ids = array();
-
- $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($row['post_id'] == $topic_data[$row['topic_id']]['first_post_id'])
@@ -874,33 +949,35 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
{
// This routine assumes that post_reported values are correct
// if they are not, use sync('reported') instead
- $fieldnames[] = 'reported';
$sql = 'SELECT t.topic_id, p.post_id
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p
$where_sql_and p.topic_id = t.topic_id
AND p.post_reported = 1
GROUP t.topic_id";
-
$result = $db->sql_query($sql);
+
+ $fieldnames[] = 'reported';
while ($row = $db->sql_fetchrow($result))
{
$topic_data[$row['topic_id']]['reported'] = 1;
}
+ $db->sql_freeresult($result);
// This routine assumes that post_attachment values are correct
// if they are not, use sync('post_attachment') instead
- $fieldnames[] = 'attachment';
$sql = 'SELECT t.topic_id, p.post_id
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p
$where_sql_and p.topic_id = t.topic_id
AND p.post_attachment = 1
GROUP t.topic_id";
-
$result = $db->sql_query($sql);
+
+ $fieldnames[] = 'attachment';
while ($row = $db->sql_fetchrow($result))
{
$topic_data[$row['topic_id']]['attachment'] = 1;
}
+ $db->sql_freeresult($result);
}
foreach ($topic_data as $topic_id => $row)
@@ -929,8 +1006,8 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
// NOTE: should shadow topics be updated as well?
$sql = 'UPDATE ' . TOPICS_TABLE . '
- SET ' . $db->sql_build_array('UPDATE', $sql) . '
- WHERE topic_id = ' . $topic_id;
+ SET ' . $db->sql_build_array('UPDATE', $sql) . '
+ WHERE topic_id = ' . $topic_id;
$db->sql_query($sql);
$resync_forums[] = $row['forum_id'];
@@ -948,17 +1025,21 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
GROUP BY f.forum_id';
$result = $db->sql_query($sql);
- $forum_ids = array();
- while ($row = $db->sql_fetchrow($result))
- {
- $forum_ids[] = $row['forum_id'];
- }
- if (count($forum_ids))
+ if ($row = $db->sql_fetchrow($result))
{
+ $forum_ids = array();
+ do
+ {
+ $forum_ids[] = $row['forum_id'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+
sync('forum', 'forum_id', $forum_ids, FALSE);
+ unset($forum_ids);
}
+ $db->sql_freeresult($result);
}
- break;
+ break;
}
}
@@ -1003,8 +1084,7 @@ function prune($forum_id, $prune_date = '', $auto_sync = TRUE)
}
$db->sql_freeresult($result);
- $p_result = delete_topics('topic_id', $topic_list, $auto_sync);
- return $p_result;
+ return delete_topics('topic_id', $topic_list, $auto_sync);
}
// Function auto_prune(), this function now relies on passed vars
@@ -1036,7 +1116,7 @@ function remove_comments(&$output)
$in_comment = false;
for($i = 0; $i < $linecount; $i++)
{
- if (preg_match('/^\/\*/', preg_quote($lines[$i])))
+ if (preg_match('#^\/\*#', preg_quote($lines[$i])))
{
$in_comment = true;
}
@@ -1046,7 +1126,7 @@ function remove_comments(&$output)
$output .= $lines[$i] . "\n";
}
- if (preg_match('/\*\/$/', preg_quote($lines[$i])))
+ if (preg_match('#\*\/$#', preg_quote($lines[$i])))
{
$in_comment = false;
}
@@ -1103,10 +1183,10 @@ function split_sql_file($sql, $delimiter)
if ($i != $token_count - 1 || strlen($tokens[$i] > 0))
{
// This is the total number of single quotes in the token.
- $total_quotes = preg_match_all("/'/", $tokens[$i], $matches);
+ $total_quotes = preg_match_all("#'#", $tokens[$i], $matches);
// Counts single quotes that are preceded by an odd number of backslashes,
// which means they're escaped quotes.
- $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$i], $matches);
+ $escaped_quotes = preg_match_all("#(?<!\\\\)(\\\\\\\\)*\\\\'#", $tokens[$i], $matches);
$unescaped_quotes = $total_quotes - $escaped_quotes;
@@ -1132,10 +1212,10 @@ function split_sql_file($sql, $delimiter)
for ($j = $i + 1; (!$complete_stmt && ($j < $token_count)); $j++)
{
// This is the total number of single quotes in the token.
- $total_quotes = preg_match_all("/'/", $tokens[$j], $matches);
+ $total_quotes = preg_match_all("#'#", $tokens[$j], $matches);
// Counts single quotes that are preceded by an odd number of backslashes,
// which means they're escaped quotes.
- $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$j], $matches);
+ $escaped_quotes = preg_match_all("#(?<!\\\\)(\\\\\\\\)*\\\\'#", $tokens[$j], $matches);
$unescaped_quotes = $total_quotes - $escaped_quotes;
@@ -1170,10 +1250,8 @@ function split_sql_file($sql, $delimiter)
return $output;
}
-// Cache moderators, called whenever permissions are
-// changed via admin_permissions. Changes of username
-// and group names must be carried through for the
-// moderators table
+// Cache moderators, called whenever permissions are changed via admin_permissions. Changes of username
+// and group names must be carried through for the moderators table
function cache_moderators()
{
global $db;