diff -r 000000000000 -r f9ffdbd96607 punbb/admin_maintenance.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/punbb/admin_maintenance.php Wed Jul 11 21:01:48 2007 -0400
@@ -0,0 +1,186 @@
+ PUN_ADMIN)
+ message($lang_common['No permission']);
+
+
+if (isset($_GET['i_per_page']) && isset($_GET['i_start_at']))
+{
+ $per_page = intval($_GET['i_per_page']);
+ $start_at = intval($_GET['i_start_at']);
+ if ($per_page < 1 || $start_at < 1)
+ message($lang_common['Bad request']);
+
+ @set_time_limit(0);
+
+ // If this is the first cycle of posts we empty the search index before we proceed
+ if (isset($_GET['i_empty_index']))
+ {
+ // This is the only potentially "dangerous" thing we can do here, so we check the referer
+ confirm_referrer('admin_maintenance.php');
+
+ $truncate_sql = ($db_type != 'sqlite' && $db_type != 'pgsql') ? 'TRUNCATE TABLE ' : 'DELETE FROM ';
+ $db->query($truncate_sql.$db->prefix.'search_matches') or error('Unable to empty search index match table', __FILE__, __LINE__, $db->error());
+ $db->query($truncate_sql.$db->prefix.'search_words') or error('Unable to empty search index words table', __FILE__, __LINE__, $db->error());
+
+ // Reset the sequence for the search words (not needed for SQLite)
+ switch ($db_type)
+ {
+ case 'mysql':
+ case 'mysqli':
+ $result = $db->query('ALTER TABLE '.$db->prefix.'search_words auto_increment=1') or error('Unable to update table auto_increment', __FILE__, __LINE__, $db->error());
+ break;
+
+ case 'pgsql';
+ $result = $db->query('SELECT setval(\''.$db->prefix.'search_words_id_seq\', 1, false)') or error('Unable to update sequence', __FILE__, __LINE__, $db->error());
+ }
+ }
+
+ $end_at = $start_at + $per_page;
+
+?>
+
+
+
+
+
+ / Rebuilding search index …
+
+
+
+
+Rebuilding index … This might be a good time to put on some coffee :-)
+
+query('SELECT DISTINCT t.id, p.id, p.message FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id WHERE t.id>='.$start_at.' AND t.id<'.$end_at.' ORDER BY t.id') or error('Unable to fetch topic/post info', __FILE__, __LINE__, $db->error());
+
+ $cur_topic = 0;
+ while ($cur_post = $db->fetch_row($result))
+ {
+ if ($cur_post[0] <> $cur_topic)
+ {
+ // Fetch subject and ID of first post in topic
+ $result2 = $db->query('SELECT p.id, t.subject, MIN(p.posted) AS first FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id WHERE t.id='.$cur_post[0].' GROUP BY p.id, t.subject ORDER BY first LIMIT 1') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());
+ list($first_post, $subject) = $db->fetch_row($result2);
+
+ $cur_topic = $cur_post[0];
+ }
+
+ echo 'Processing post '.$cur_post[1].' in topic '.$cur_post[0].'
'."\n";
+
+ if ($cur_post[1] == $first_post) // This is the "topic post" so we have to index the subject as well
+ update_search_index('post', $cur_post[1], $cur_post[2], $subject);
+ else
+ update_search_index('post', $cur_post[1], $cur_post[2]);
+ }
+
+ // Check if there is more work to do
+ $result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE id>'.$end_at) or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());
+
+ $query_str = ($db->num_rows($result)) ? '?i_per_page='.$per_page.'&i_start_at='.$end_at : '';
+
+ $db->end_transaction();
+ $db->close();
+
+ exit('
JavaScript redirect unsuccessful. Click here to continue.');
+}
+
+
+// Get the first post ID from the db
+$result = $db->query('SELECT id FROM '.$db->prefix.'topics ORDER BY id LIMIT 1') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());
+if ($db->num_rows($result))
+ $first_id = $db->result($result);
+
+$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Maintenance';
+require PUN_ROOT.'header.php';
+
+generate_admin_menu('maintenance');
+
+?>
+
+
+
+