2 /***************************************************************************
5 * begin : Wednesday, May 16, 2002
6 * copyright : (C) 2001 The phpBB Group
7 * email : support@phpbb.com
9 * $Id: update_to_latest.php,v 1.1.2.11 2005/12/29 11:51:11 acydburn Exp $
11 ***************************************************************************/
13 /***************************************************************************
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or
18 * (at your option) any later version.
20 ***************************************************************************/
22 function _sql($sql, &$errored, &$error_ary, $echo_dot = true)
26 if (!($result = $db->sql_query($sql)))
29 $error_ary['sql'][] = (is_array($sql)) ? $sql[$i] : $sql;
30 $error_ary['error_code'][] = $db->sql_error();
44 define('IN_PHPBB', 1);
45 $phpbb_root_path = './../';
46 include($phpbb_root_path . 'extension.inc');
47 include($phpbb_root_path . 'config.'.$phpEx);
50 die("Please read: <a href='../docs/INSTALL.html'>INSTALL.html</a> before attempting to update.");
52 include($phpbb_root_path . 'includes/constants.'.$phpEx);
53 include($phpbb_root_path . 'includes/functions.'.$phpEx);
54 include($phpbb_root_path . 'includes/functions_admin.'.$phpEx);
55 include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
56 include($phpbb_root_path . 'includes/db.'.$phpEx);
62 $updates_to_version = '.0.19';
68 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
71 <meta http-equiv="Content-Type" content="text/html;">
72 <meta http-equiv="Content-Style-Type" content="text/css">
73 <style type="text/css">
76 font,th,td,p,body { font-family: "Courier New", courier; font-size: 11pt }
78 a:link,a:active,a:visited { color : #006699; }
79 a:hover { text-decoration: underline; color : #DD6900;}
81 hr { height: 0px; border: solid #D1D7DC 0px; border-top-width: 1px;}
83 .maintitle,h1,h2 {font-weight: bold; font-size: 22px; font-family: "Trebuchet MS",Verdana, Arial, Helvetica, sans-serif; text-decoration: none; line-height : 120%; color : #000000;}
87 /* Import the fancy styles for IE only (NS4.x doesn't use the @import function) */
88 @import url("../templates/subSilver/formIE.css");
92 <body bgcolor="#FFFFFF" text="#000000" link="#006699" vlink="#5584AA">
94 <table width="100%" border="0" cellspacing="0" cellpadding="10" align="center">
96 <td><table width="100%" border="0" cellspacing="0" cellpadding="0">
98 <td><img src="../templates/subSilver/images/logo_phpBB.gif" border="0" alt="Forum Home" vspace="1" /></td>
99 <td align="center" width="100%" valign="middle"><span class="maintitle">Updating to latest stable release</span></td>
111 echo '<p>Database type :: <b>' . SQL_LAYER . '</b><br />';
113 $sql = "SELECT config_value
114 FROM " . CONFIG_TABLE . "
115 WHERE config_name = 'version'";
116 if (!($result = $db->sql_query($sql)))
118 die("Couldn't obtain version info");
121 $row = $db->sql_fetchrow($result);
125 switch ($row['config_value'])
128 echo 'Previous version :: <b>< RC-3</b></p><br />';
131 echo 'Previous version :: <b>RC-3</b></p><br />';
134 echo 'Previous version :: <b>RC-4</b></p><br />';
137 echo 'Previous version :: <b>2' . $row['config_value'] . '</b><br />';
141 echo 'Updated version :: <b>2' . $updates_to_version . '</b></p>' ."\n";
146 switch ($row['config_value'])
153 $sql[] = "ALTER TABLE " . USERS_TABLE . " DROP
154 COLUMN user_autologin_key";
156 $sql[] = "ALTER TABLE " . RANKS_TABLE . " DROP
159 $sql[] = "ALTER TABLE " . USERS_TABLE . "
160 ADD COLUMN user_session_time int(11) DEFAULT '0' NOT NULL,
161 ADD COLUMN user_session_page smallint(5) DEFAULT '0' NOT NULL,
162 ADD INDEX (user_session_time)";
163 $sql[] = "ALTER TABLE " . SEARCH_TABLE . "
164 MODIFY search_id int(11) NOT NULL";
166 $sql[] = "ALTER TABLE " . TOPICS_TABLE . "
167 MODIFY topic_moved_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
168 ADD COLUMN topic_first_post_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
169 ADD INDEX (topic_first_post_id)";
171 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
172 ADD COLUMN tr_class1_name varchar(50) NULL,
173 ADD COLUMN tr_class2_name varchar(50) NULL,
174 ADD COLUMN tr_class3_name varchar(50) NULL,
175 ADD COLUMN th_class1_name varchar(50) NULL,
176 ADD COLUMN th_class2_name varchar(50) NULL,
177 ADD COLUMN th_class3_name varchar(50) NULL,
178 ADD COLUMN td_class1_name varchar(50) NULL,
179 ADD COLUMN td_class2_name varchar(50) NULL,
180 ADD COLUMN td_class3_name varchar(50) NULL,
181 ADD COLUMN span_class1_name varchar(50) NULL,
182 ADD COLUMN span_class2_name varchar(50) NULL,
183 ADD COLUMN span_class3_name varchar(50) NULL";
186 $sql[] = "ALTER TABLE " . USERS_TABLE . "
187 ADD COLUMN user_session_time int4";
188 $sql[] = "ALTER TABLE " . USERS_TABLE . "
189 ADD COLUMN user_session_page int2";
190 $sql[] = "ALTER TABLE " . USERS_TABLE . "
191 ALTER COLUMN user_session_time SET DEFAULT '0'";
192 $sql[] = "ALTER TABLE " . USERS_TABLE . "
193 ALTER COLUMN user_session_page SET DEFAULT '0'";
194 $sql[] = "CREATE INDEX user_session_time_" . $table_prefix . "users_index
195 ON " . USERS_TABLE . " (user_session_time)";
197 $sql[] = "ALTER TABLE " . TOPICS_TABLE . "
198 ADD COLUMN topic_first_post_id int4";
199 $sql[] = "CREATE INDEX topic_first_post_id_" . $table_prefix . "topics_index
200 ON " . TOPICS_TABLE . " (topic_first_post_id)";
202 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
203 ADD COLUMN tr_class1_name varchar(50) NULL";
204 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
205 ADD COLUMN tr_class2_name varchar(50) NULL";
206 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
207 ADD COLUMN tr_class3_name varchar(50) NULL";
208 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
209 ADD COLUMN th_class1_name varchar(50) NULL";
210 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
211 ADD COLUMN th_class2_name varchar(50) NULL";
212 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
213 ADD COLUMN th_class3_name varchar(50) NULL";
214 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
215 ADD COLUMN td_class1_name varchar(50) NULL";
216 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
217 ADD COLUMN td_class2_name varchar(50) NULL";
218 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
219 ADD COLUMN td_class3_name varchar(50) NULL";
220 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
221 ADD COLUMN span_class1_name varchar(50) NULL";
222 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
223 ADD COLUMN span_class2_name varchar(50) NULL";
224 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . "
225 ADD COLUMN span_class3_name varchar(50) NULL";
230 $sql[] = "ALTER TABLE " . USERS_TABLE . " DROP
231 COLUMN user_autologin_key";
233 $sql[] = "ALTER TABLE " . USERS_TABLE . " ADD
234 user_session_time int NOT NULL,
235 user_session_page smallint NOT NULL,
236 CONSTRAINT [DF_" . $table_prefix . "users_user_session_time] DEFAULT (0) FOR [user_session_time],
237 CONSTRAINT [DF_" . $table_prefix . "users_user_session_page] DEFAULT (0) FOR [user_session_page]";
238 $sql[] = "CREATE INDEX [IX_" . $table_prefix . "users]
239 ON [" . USERS_TABLE . "]([user_session_time]) ON [PRIMARY]";
241 /* ---------------------------------------------------------------------
242 DROP FORUM TABLE -- if this may cause you problems you can safely
243 comment it out, remember to manually remove the IDENTITY setting on
245 --------------------------------------------------------------------- */
246 $sql [] = "ALTER TABLE " . FORUMS_TABLE . " DROP
247 CONSTRAINT [DF_" . $table_prefix . "forums_forum_posts],
248 CONSTRAINT [DF_" . $table_prefix . "forums_forum_topics],
249 CONSTRAINT [DF_" . $table_prefix . "forums_forum_last_post_id],
250 CONSTRAINT [DF_" . $table_prefix . "forums_prune_enable],
251 CONSTRAINT [DF_" . $table_prefix . "forums_auth_view],
252 CONSTRAINT [DF_" . $table_prefix . "forums_auth_read],
253 CONSTRAINT [DF_" . $table_prefix . "forums_auth_post],
254 CONSTRAINT [DF_" . $table_prefix . "forums_auth_reply],
255 CONSTRAINT [DF_" . $table_prefix . "forums_auth_edit],
256 CONSTRAINT [DF_" . $table_prefix . "forums_auth_delete],
257 CONSTRAINT [DF_" . $table_prefix . "forums_auth_sticky],
258 CONSTRAINT [DF_" . $table_prefix . "forums_auth_announce],
259 CONSTRAINT [DF_" . $table_prefix . "forums_auth_vote],
260 CONSTRAINT [DF_" . $table_prefix . "forums_auth_pollcreate],
261 CONSTRAINT [DF_" . $table_prefix . "forums_auth_attachments]";
262 $sql[] = "CREATE TABLE Tmp_" . FORUMS_TABLE . "
263 (forum_id int NOT NULL, cat_id int NOT NULL, forum_name varchar(100) NOT NULL, forum_desc varchar(255) NULL, forum_status smallint NOT NULL, forum_order int NOT NULL, forum_posts int NOT NULL, forum_topics smallint NOT NULL, forum_last_post_id int NOT NULL, prune_next int NULL, prune_enable smallint NOT NULL, auth_view smallint NOT NULL, auth_read smallint NOT NULL, auth_post smallint NOT NULL, auth_reply smallint NOT NULL, auth_edit smallint NOT NULL, auth_delete smallint NOT NULL, auth_sticky smallint NOT NULL, auth_announce smallint NOT NULL, auth_vote smallint NOT NULL, auth_pollcreate smallint NOT NULL, auth_attachments smallint NOT NULL) ON [PRIMARY]";
264 $sql[] = "ALTER TABLE [Tmp_" . FORUMS_TABLE . "] WITH NOCHECK ADD
265 CONSTRAINT [DF_" . $table_prefix . "forums_forum_posts] DEFAULT (0) FOR [forum_posts],
266 CONSTRAINT [DF_" . $table_prefix . "forums_forum_topics] DEFAULT (0) FOR [forum_topics],
267 CONSTRAINT [DF_" . $table_prefix . "forums_forum_last_post_id] DEFAULT (0) FOR [forum_last_post_id],
268 CONSTRAINT [DF_" . $table_prefix . "forums_prune_enable] DEFAULT (0) FOR [prune_enable],
269 CONSTRAINT [DF_" . $table_prefix . "forums_auth_view] DEFAULT (0) FOR [auth_view],
270 CONSTRAINT [DF_" . $table_prefix . "forums_auth_read] DEFAULT (0) FOR [auth_read],
271 CONSTRAINT [DF_" . $table_prefix . "forums_auth_post] DEFAULT (0) FOR [auth_post],
272 CONSTRAINT [DF_" . $table_prefix . "forums_auth_reply] DEFAULT (0) FOR [auth_reply],
273 CONSTRAINT [DF_" . $table_prefix . "forums_auth_edit] DEFAULT (0) FOR [auth_edit],
274 CONSTRAINT [DF_" . $table_prefix . "forums_auth_delete] DEFAULT (0) FOR [auth_delete],
275 CONSTRAINT [DF_" . $table_prefix . "forums_auth_sticky] DEFAULT (0) FOR [auth_sticky],
276 CONSTRAINT [DF_" . $table_prefix . "forums_auth_announce] DEFAULT (0) FOR [auth_announce],
277 CONSTRAINT [DF_" . $table_prefix . "forums_auth_vote] DEFAULT (0) FOR [auth_vote],
278 CONSTRAINT [DF_" . $table_prefix . "forums_auth_pollcreate] DEFAULT (0) FOR [auth_pollcreate],
279 CONSTRAINT [DF_" . $table_prefix . "forums_auth_attachments] DEFAULT (0) FOR [auth_attachments]";
280 $sql[] = "INSERT INTO Tmp_" . FORUMS_TABLE . " (forum_id, cat_id, forum_name, forum_desc, forum_status, forum_order, forum_posts, forum_topics, forum_last_post_id, prune_next, prune_enable, auth_view, auth_read, auth_post, auth_reply, auth_edit, auth_delete, auth_sticky, auth_announce, auth_vote, auth_pollcreate, auth_attachments)
281 SELECT forum_id, cat_id, forum_name, forum_desc, forum_status, forum_order, forum_posts, forum_topics, forum_last_post_id, prune_next, prune_enable, auth_view, auth_read, auth_post, auth_reply, auth_edit, auth_delete, auth_sticky, auth_announce, auth_vote, auth_pollcreate, auth_attachments FROM " . FORUMS_TABLE . " TABLOCKX";
282 $sql[] = "DROP TABLE " . FORUMS_TABLE;
283 $sql[] = "EXECUTE sp_rename N'Tmp_" . FORUMS_TABLE . "', N'" . FORUMS_TABLE . "', 'OBJECT'";
284 $sql[] = "ALTER TABLE " . FORUMS_TABLE . " ADD
285 CONSTRAINT [PK_" . $table_prefix . "forums] PRIMARY KEY CLUSTERED (forum_id) ON [PRIMARY]";
286 $sql[] = "CREATE NONCLUSTERED INDEX [IX_" . $table_prefix . "forums]
287 ON " . FORUMS_TABLE . " (cat_id, forum_order, forum_last_post_id) ON [PRIMARY]";
288 /* --------------------------------------------------------------
289 END OF DROP FORUM -- don't remove anything after this point!
290 -------------------------------------------------------------- */
292 $sql[] = "DROP INDEX " . RANKS_TABLE . ".IX_" . $table_prefix . "ranks";
293 $sql[] = "ALTER TABLE " . RANKS_TABLE . " DROP
295 $sql[] = "CREATE INDEX [IX_" . $table_prefix . "ranks]
296 ON [" . RANKS_TABLE . "]([rank_min], [rank_special]) ON [PRIMARY]";
298 $sql[] = "DROP INDEX " . TOPICS_TABLE . ".IX_" . $table_prefix . "topics";
299 $sql[] = "ALTER TABLE " . TOPICS_TABLE . " ADD
300 topic_first_post_id int NULL,
301 CONSTRAINT [DF_" . $table_prefix . "topics_topic_first_post_id] FOR [topic_first_post_id]";
302 $sql[] = "CREATE INDEX [IX_" . $table_prefix . "topics]
303 ON [" . TOPICS_TABLE . "]([forum_id], [topic_type], [topic_first_post_id], [topic_last_post_id]) ON [PRIMARY]";
305 $sql[] = "ALTER TABLE " . SEARCH_WORD_TABLE . " DROP
306 CONSTRAINT [PK_" . $table_prefix . "search_wordlist]";
307 $sql[] = "CREATE UNIQUE INDEX [IX_" . $table_prefix . "search_wordlist]
308 ON [" . SEARCH_WORD_TABLE . "]([word_text]) WITH IGNORE_DUP_KEY ON [PRIMARY]";
309 $sql[] = "CREATE INDEX [IX_" . $table_prefix . "search_wordlist_1]
310 ON [" . SEARCH_WORD_TABLE . "]([word_common]) ON [PRIMARY]";
312 $sql[] = "CREATE INDEX [IX_" . $table_prefix . "search_wordmatch_1]
313 ON [" . SEARCH_MATCH_TABLE . "]([word_id]) ON [PRIMARY]";
315 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . " ADD
316 tr_class1_name varchar(50) NULL,
317 tr_class2_name varchar(50) NULL,
318 tr_class3_name varchar(50) NULL,
319 th_class1_name varchar(50) NULL,
320 th_class2_name varchar(50) NULL,
321 th_class3_name varchar(50) NULL,
322 td_class1_name varchar(50) NULL,
323 td_class2_name varchar(50) NULL,
324 td_class3_name varchar(50) NULL,
325 span_class1_name varchar(50) NULL,
326 span_class2_name varchar(50) NULL,
327 span_class3_name varchar(50) NULL";
331 $sql[] = "ALTER TABLE " . USERS_TABLE . " DROP
332 COLUMN user_autologin_key";
334 $sql[] = "ALTER TABLE " . USERS_TABLE . " ADD
335 user_session_time int NOT NULL,
336 user_session_page smallint NOT NULL";
337 $sql[] = "CREATE INDEX user_session_time
338 ON " . USERS_TABLE . " (user_session_time)";
340 $sql[] = "ALTER TABLE " . TOPICS_TABLE . " ADD
341 topic_first_post_id int NULL";
342 $sql[] = "CREATE INDEX topic_first_post_id
343 ON " . TOPICS_TABLE . " (topic_first_post_id)";
345 $sql[] = "ALTER TABLE " . THEMES_NAME_TABLE . " ADD
346 tr_class1_name varchar(50) NULL,
347 tr_class2_name varchar(50) NULL,
348 tr_class3_name varchar(50) NULL,
349 th_class1_name varchar(50) NULL,
350 th_class2_name varchar(50) NULL,
351 th_class3_name varchar(50) NULL,
352 td_class1_name varchar(50) NULL,
353 td_class2_name varchar(50) NULL,
354 td_class3_name varchar(50) NULL,
355 span_class1_name varchar(50) NULL,
356 span_class2_name varchar(50) NULL,
357 span_class3_name varchar(50) NULL";
361 die("No DB LAYER found!");
372 $sql[] = "ALTER TABLE " . USERS_TABLE . "
373 MODIFY COLUMN user_id mediumint(8) NOT NULL,
374 MODIFY COLUMN user_timezone decimal(5,2) DEFAULT '0' NOT NULL";
377 $sql[] = "ALTER TABLE " . USERS_TABLE . "
378 RENAME COLUMN user_timezone TO user_timezone_old";
379 $sql[] = "ALTER TABLE " . USERS_TABLE . "
380 ADD COLUMN user_timezone decimal(5)";
384 $sql[] = "ALTER TABLE " . USERS_TABLE . "
385 ALTER COLUMN [user_timezone] [decimal] (5,2) NOT NULL";
394 $sql[] = "ALTER TABLE " . GROUPS_TABLE . "
395 MODIFY COLUMN group_id mediumint(8) NOT NULL auto_increment";
399 /* ---------------------------------------------------------------------
400 DROP GROUP TABLE -- if this may cause you problems you can safely
401 comment it out, remember to manually add the IDENTITY setting on
403 --------------------------------------------------------------------- */
404 $sql[] = "CREATE TABLE Tmp_" . GROUPS_TABLE . "
405 (group_id int IDENTITY (1, 1) NOT NULL, group_type smallint NULL, group_name varchar(50) NOT NULL, group_description varchar(255) NOT NULL, group_moderator int NULL, group_single_user smallint NOT NULL) ON [PRIMARY]";
406 $sql[] = "SET IDENTITY_INSERT " . GROUPS_TABLE . " ON";
407 $sql[] = "INSERT INTO Tmp_" . GROUPS_TABLE . " (group_id, group_type, group_name, group_description, group_moderator, group_single_user)
408 SELECT group_id, group_type, group_name, group_description, group_moderator, group_single_user FROM " . GROUPS_TABLE . " TABLOCKX";
409 $sql[] = "SET IDENTITY_INSERT " . GROUPS_TABLE . " OFF";
410 $sql[] = "DROP TABLE " . GROUPS_TABLE;
411 $sql[] = "EXECUTE sp_rename N'Tmp_" . GROUPS_TABLE . "', N'" . GROUPS_TABLE . "', 'OBJECT'";
412 $sql[] = "ALTER TABLE " . GROUPS_TABLE . " ADD
413 CONSTRAINT [PK_" . $table_prefix . "groups] PRIMARY KEY CLUSTERED (group_id) ON [PRIMARY]";
414 $sql[] = "CREATE INDEX [IX_" . $table_prefix . "groups]
415 ON " . GROUPS_TABLE . " (group_single_user) ON [PRIMARY]";
416 /* --------------------------------------------------------------
417 END OF DROP GROUP -- don't remove anything after this point!
418 -------------------------------------------------------------- */
431 // Add indexes to post_id in search match table (+ word_id for MS Access)
432 $sql[] = "ALTER TABLE " . SEARCH_MATCH_TABLE . "
433 ADD INDEX post_id (post_id)";
435 // Modify user_timezone to decimal(5,2) for mysql ... mysql4/mssql/pgsql/msaccess
436 // should be completely unaffected
437 // Change default user_notify to 0
438 $sql[] = "ALTER TABLE " . USERS_TABLE . "
439 MODIFY COLUMN user_timezone decimal(5,2) DEFAULT '0' NOT NULL,
440 MODIFY COLUMN user_notify tinyint(1) DEFAULT '0' NOT NULL";
442 // Adjust field type for prune_days, prune_freq ... was too small
443 $sql[] = "ALTER TABLE " . PRUNE_TABLE . "
444 MODIFY COLUMN prune_days smallint(5) UNSIGNED NOT NULL,
445 MODIFY COLUMN prune_freq smallint(5) UNSIGNED NOT NULL";
449 // Add indexes to post_id in search match table (+ word_id for MS Access)
450 $sql[] = "CREATE INDEX " . SEARCH_MATCH_TABLE . "
451 ON " . SEARCH_MATCH_TABLE . " ([post_id])";
452 $sql[] = "CREATE INDEX " . SEARCH_MATCH_TABLE . "_1
453 ON " . SEARCH_MATCH_TABLE . " ([word_id])";
457 // Add indexes to post_id in search match table (+ word_id for MS Access)
458 $sql[] = "CREATE INDEX post_id_" . SEARCH_MATCH_TABLE . "
459 ON " . SEARCH_MATCH_TABLE . " (post_id)";
461 // Regenerate groups table with incremented group_id for pgsql
462 // ... missing in 2.0.3 ...
463 $sql[] = "CREATE SEQUENCE " . GROUPS_TABLE . "_id_seq start 3 increment 1 maxvalue 2147483647 minvalue 1 cache 1";
464 $sql[] = "CREATE TABLE tmp_" . GROUPS_TABLE . "
465 AS SELECT group_id, group_name, group_type, group_description, group_moderator, group_single_user
466 FROM " . GROUPS_TABLE;
467 $sql[] = "DROP TABLE " . GROUPS_TABLE;
468 $sql[] = "CREATE TABLE {$table_prefix}groups (group_id int DEFAULT nextval('" . GROUPS_TABLE . "_id_seq'::text) NOT NULL, group_name varchar(40) NOT NULL, group_type int2 DEFAULT '1' NOT NULL, group_description varchar(255) NOT NULL, group_moderator int4 DEFAULT '0' NOT NULL, group_single_user int2 DEFAULT '0' NOT NULL, CONSTRAINT {$table_prefix}groups_pkey PRIMARY KEY (group_id))";
469 $sql[] = "INSERT INTO " . GROUPS_TABLE . " (group_id, group_name, group_type, group_description, group_moderator, group_single_user)
470 SELECT group_id, group_name, group_type, group_description, group_moderator, group_single_user
471 FROM tmp_" . GROUPS_TABLE;
472 $sql[] = "DROP TABLE tmp_" . GROUPS_TABLE;
482 // Add missing defaults to MSSQL post table schema, failed in previous updates
483 $sql[] = "ALTER TABLE [" . POSTS_TABLE . "] WITH NOCHECK ADD
484 CONSTRAINT [DF_" . POSTS_TABLE . "_enable_bbcode] DEFAULT (1) FOR [enable_bbcode],
485 CONSTRAINT [DF_" . POSTS_TABLE . "_enable_html] DEFAULT (0) FOR [enable_html],
486 CONSTRAINT [DF_" . POSTS_TABLE . "_enable_smilies] DEFAULT (1) FOR [enable_smilies],
487 CONSTRAINT [DF_" . POSTS_TABLE . "_enable_sig] DEFAULT (1) FOR [enable_sig],
488 CONSTRAINT [DF_" . POSTS_TABLE . "_post_edit_count] DEFAULT (0) FOR [post_edit_count]";
492 // Add tables for visual confirmation ... saves me the trouble of writing a seperate
498 $sql[] = 'CREATE TABLE ' . $table_prefix . 'confirm (confirm_id char(32) DEFAULT \'\' NOT NULL, session_id char(32) DEFAULT \'\' NOT NULL, code char(6) DEFAULT \'\' NOT NULL, PRIMARY KEY (session_id, confirm_id))';
503 $sql[] = 'CREATE TABLE [' . $table_prefix . 'confirm] ([confirm_id] [char] (32) NOT NULL , [session_id] [char] (32) NOT NULL , [code] [char] (6) NOT NULL ) ON [PRIMARY]';
504 $sql[] = 'ALTER TABLE [' . $table_prefix . 'confirm] WITH NOCHECK ADD CONSTRAINT [PK_' . $table_prefix . 'confirm] PRIMARY KEY CLUSTERED ( [session_id],[confirm_id]) ON [PRIMARY]';
505 $sql[] = 'ALTER TABLE [' . $table_prefix . 'confirm] WITH NOCHECK ADD CONSTRAINT [DF_' . $table_prefix . 'confirm_confirm_id] DEFAULT (\'\') FOR [confirm_id], CONSTRAINT [DF_' . $table_prefix . 'confirm_session_id] DEFAULT (\'\') FOR [session_id], CONSTRAINT [DF_' . $table_prefix . 'confirm_code] DEFAULT (\'\') FOR [code]';
509 $sql[] = 'CREATE TABLE ' . $table_prefix . 'confirm (confirm_id char(32) NOT NULL, session_id char(32) NOT NULL, code char(6) NOT NULL)';
510 $sql[] = 'ALTER TABLE ' . $table_prefix . 'confirm ADD (PRIMARY KEY (session_id, confirm_id))';
514 $sql[] = 'CREATE TABLE ' . $table_prefix . 'confirm (confirm_id char(32) DEFAULT \'\' NOT NULL, session_id char(32) DEFAULT \'\' NOT NULL, code char(6) DEFAULT \'\' NOT NULL, CONSTRAINT {$table_prefix}confirm_pkey PRIMARY KEY (session_id, confirm_id))';
533 $sql[] = "ALTER TABLE " . SESSIONS_TABLE . "
534 ADD COLUMN session_admin tinyint(2) DEFAULT '0' NOT NULL";
538 $sql[] = "ALTER TABLE " . SESSIONS_TABLE . "
539 ADD COLUMN session_admin int2";
540 $sql[] = "ALTER TABLE " . SESSIONS_TABLE . "
541 ALTER COLUMN session_admin SET DEFAULT '0'";
546 $sql[] = "ALTER TABLE " . SESSIONS_TABLE . " ADD
547 session_admin smallint NOT NULL,
548 CONSTRAINT [DF_" . $table_prefix . "sessions_session_admin] DEFAULT (0) FOR [session_admin]";
552 $sql[] = "ALTER TABLE " . SESSIONS_TABLE . " ADD
553 session_admin smallint NOT NULL";
560 // Add tables for session keys
565 $sql[] = 'CREATE TABLE ' . $table_prefix . 'sessions_keys (key_id varchar(32) DEFAULT \'0\' NOT NULL, user_id mediumint(8) DEFAULT \'0\' NOT NULL, last_ip varchar(8) DEFAULT \'0\' NOT NULL, last_login int(11) DEFAULT \'0\' NOT NULL, PRIMARY KEY (key_id, user_id), KEY last_login (last_login))';
570 $sql[] = 'CREATE TABLE [' . $table_prefix . 'sessions_keys] ([key_id] [char] (32) NOT NULL , [user_id] [int] NOT NULL , [last_ip] [char] (8) NOT NULL , [last_login] [int] NOT NULL) ON [PRIMARY]';
572 $sql[] = 'CREATE INDEX [IX_' . $table_prefix . 'sessions_keys] ON [' . $table_prefix . 'sessions_keys]([key_id], [user_id]) ON [PRIMARY]';
573 $sql[] = 'CREATE INDEX [IX_' . $table_prefix . 'sessions_keys_1] ON [' . $table_prefix . 'sessions_keys]([last_login]) ON [PRIMARY]';
577 $sql[] = 'CREATE TABLE ' . $table_prefix . 'sessions_keys (key_id char(32) NOT NULL, user_id int NOT NULL, last_ip char(8) NOT NULL, last_login int NOT NULL)';
578 $sql[] = 'ALTER TABLE ' . $table_prefix . 'sessions_keys ADD PRIMARY KEY (key_id, user_id)';
582 $sql[] = 'CREATE TABLE ' . $table_prefix . 'sessions_keys (key_id char(32) DEFAULT \'0\' NOT NULL, user_id int4 DEFAULT \'0\' NOT NULL, last_ip char(8) DEFAULT \'0\' NOT NULL, last_login int4 DEFAULT \'0\' NOT NULL, CONSTRAINT ' . $table_prefix . 'sessions_keys_pkey PRIMARY KEY (key_id, user_id))';
583 $sql[] = 'CREATE INDEX last_login_' . $table_prefix . 'sessions_keys_index ON ' . $table_prefix . 'sessions_keys (last_login)';
589 // Add login columns to user table
594 $sql[] = "ALTER TABLE " . USERS_TABLE . "
595 ADD COLUMN user_login_tries smallint(5) UNSIGNED DEFAULT '0' NOT NULL";
596 $sql[] = "ALTER TABLE " . USERS_TABLE . "
597 ADD COLUMN user_last_login_try int(11) DEFAULT '0' NOT NULL";
601 $sql[] = "ALTER TABLE " . USERS_TABLE . "
602 ADD COLUMN user_login_tries int2";
603 $sql[] = "ALTER TABLE " . USERS_TABLE . "
604 ALTER COLUMN user_login_tries SET DEFAULT '0'";
605 $sql[] = "ALTER TABLE " . USERS_TABLE . "
606 ADD COLUMN user_last_login_try int4";
607 $sql[] = "ALTER TABLE " . USERS_TABLE . "
608 ALTER COLUMN user_last_login_try SET DEFAULT '0'";
613 $sql[] = "ALTER TABLE " . USERS_TABLE . " ADD
614 user_login_tries smallint NOT NULL,
615 CONSTRAINT [DF_" . $table_prefix . "users_user_login_tries] DEFAULT (0) FOR [user_login_tries]";
616 $sql[] = "ALTER TABLE " . USERS_TABLE . " ADD
617 user_last_login_try int NOT NULL,
618 CONSTRAINT [DF_" . $table_prefix . "users_user_last_login_try] DEFAULT (0) FOR [user_last_login_try]";
622 $sql[] = "ALTER TABLE " . USERS_TABLE . " ADD
623 user_login_tries smallint NOT NULL";
624 $sql[] = "ALTER TABLE " . USERS_TABLE . " ADD
625 user_last_login_try int NOT NULL";
632 echo "<h2>Updating database schema</h2>\n";
633 echo "<p>Progress :: <b>";
636 $error_ary = array();
640 for ($i = 0; $i < count($sql); $i++)
642 _sql($sql[$i], $errored, $error_ary);
645 echo "</b> <b class=\"ok\">Done</b><br />Result :: \n";
649 echo " <b>Some queries failed, the statements and errors are listing below</b>\n<ul>";
651 for ($i = 0; $i < count($error_ary['sql']); $i++)
653 echo "<li>Error :: <b>" . $error_ary['error_code'][$i]['message'] . "</b><br />";
654 echo "SQL :: <b>" . $error_ary['sql'][$i] . "</b><br /><br /></li>";
657 echo "</ul>\n<p>This is probably nothing to worry about, update will continue. Should this fail to complete you may need to seek help at our development board. See <a href=\"docs\README.html\">README</a> for details on how to obtain advice.</p>\n";
661 echo "<b>No errors</b>\n";
666 echo " No updates required</b></p>\n";
673 $error_ary = array();
676 echo "<h2>Updating data</h2>\n";
677 echo "<p>Progress :: <b>";
680 switch ($row['config_value'])
683 $sql = "SELECT themes_id
684 FROM " . THEMES_TABLE . "
685 WHERE template_name = 'subSilver'";
686 $result = _sql($sql, $errored, $error_ary);
688 if ($row = $db->sql_fetchrow($result))
690 $theme_id = $row['themes_id'];
692 $sql = "UPDATE " . THEMES_TABLE . "
693 SET head_stylesheet = 'subSilver.css', body_background = '', body_bgcolor = 'E5E5E5', body_text = '000000', body_link = '006699', body_vlink = '5493B4', body_alink = '', body_hlink = 'DD6900', tr_color1 = 'EFEFEF', tr_color2 = 'DEE3E7', tr_color3 = 'D1D7DC', tr_class1 = '', tr_class2 = '', tr_class3 = '', th_color1 = '98AAB1', th_color2 = '006699', th_color3 = 'FFFFFF', th_class1 = 'cellpic1.gif', th_class2 = 'cellpic3.gif', th_class3 = 'cellpic2.jpg', td_color1 = 'FAFAFA', td_color2 = 'FFFFFF', td_color3 = '', td_class1 = 'row1', td_class2 = 'row2', td_class3 = '', fontface1 = 'Verdana, Arial, Helvetica, sans-serif', fontface2 = 'Trebuchet MS', fontface3 = 'Courier, ''Courier New'', sans-serif', fontsize1 = 10, fontsize2 = 11, fontsize3 = 12, fontcolor1 = '444444', fontcolor2 = '006600', fontcolor3 = 'FFA34F', span_class1 = '', span_class2 = '', span_class3 = ''
694 WHERE themes_id = $theme_id";
695 _sql($sql, $errored, $error_ary);
697 $sql = "DELETE FROM " . THEMES_NAME_TABLE . "
698 WHERE themes_id = $theme_id";
699 _sql($sql, $errored, $error_ary);
701 $sql = "INSERT INTO " . THEMES_NAME_TABLE . " (themes_id, tr_color1_name, tr_color2_name, tr_color3_name, tr_class1_name, tr_class2_name, tr_class3_name, th_color1_name, th_color2_name, th_color3_name, th_class1_name, th_class2_name, th_class3_name, td_color1_name, td_color2_name, td_color3_name, td_class1_name, td_class2_name, td_class3_name, fontface1_name, fontface2_name, fontface3_name, fontsize1_name, fontsize2_name, fontsize3_name, fontcolor1_name, fontcolor2_name, fontcolor3_name, span_class1_name, span_class2_name, span_class3_name)
702 VALUES ($theme_id, 'The lightest row colour', 'The medium row color', 'The darkest row colour', '', '', '', 'Border round the whole page', 'Outer table border', 'Inner table border', 'Silver gradient picture', 'Blue gradient picture', 'Fade-out gradient on index', 'Background for quote boxes', 'All white areas', '', 'Background for topic posts', '2nd background for topic posts', '', 'Main fonts', 'Additional topic title font', 'Form fonts', 'Smallest font size', 'Medium font size', 'Normal font size (post body etc)', 'Quote & copyright text', 'Code text colour', 'Main table header text colour', '', '', '')";
703 _sql($sql, $errored, $error_ary);
705 $db->sql_freeresult($result);
707 $sql = "SELECT MIN(post_id) AS first_post_id, topic_id
708 FROM " . POSTS_TABLE . "
710 ORDER BY topic_id ASC";
711 $result = _sql($sql, $errored, $error_ary);
713 if ($row = $db->sql_fetchrow($result))
717 $sql = "UPDATE " . TOPICS_TABLE . "
718 SET topic_first_post_id = " . $row['first_post_id'] . "
719 WHERE topic_id = " . $row['topic_id'];
720 _sql($sql, $errored, $error_ary);
722 while ($row = $db->sql_fetchrow($result));
724 $db->sql_freeresult($result);
726 $sql = "SELECT DISTINCT u.user_id
727 FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug, " . AUTH_ACCESS_TABLE . " aa
728 WHERE aa.auth_mod = 1
729 AND ug.group_id = aa.group_id
730 AND u.user_id = ug.user_id
731 AND u.user_level <> " . ADMIN;
732 $result = _sql($sql, $errored, $error_ary);
735 while ($row = $db->sql_fetchrow($result))
737 $mod_user[] = $row['user_id'];
739 $db->sql_freeresult($result);
741 if (count($mod_user))
743 $sql = "UPDATE " . USERS_TABLE . "
744 SET user_level = " . MOD . "
745 WHERE user_id IN (" . implode(', ', $mod_user) . ")";
746 _sql($sql, $errored, $error_ary);
749 $sql = "INSERT INTO " . CONFIG_TABLE . " (config_name, config_value)
750 VALUES ('server_name', 'www.myserver.tld')";
751 _sql($sql, $errored, $error_ary);
753 $sql = "INSERT INTO " . CONFIG_TABLE . " (config_name, config_value)
754 VALUES ('script_path', '/phpBB2/')";
755 _sql($sql, $errored, $error_ary);
757 $sql = "INSERT INTO " . CONFIG_TABLE . " (config_name, config_value)
758 VALUES ('server_port', '80')";
759 _sql($sql, $errored, $error_ary);
761 $sql = "INSERT INTO " . CONFIG_TABLE . " (config_name, config_value)
762 VALUES ('record_online_users', '1')";
763 _sql($sql, $errored, $error_ary);
765 $sql = "INSERT INTO " . CONFIG_TABLE . " (config_name, config_value)
766 VALUES ('record_online_date', '" . time() . "')";
767 _sql($sql, $errored, $error_ary);
773 if (SQL_LAYER == 'postgresql')
775 $sql = "SELECT user_id, user_timezone_old
776 FROM " . USERS_TABLE;
777 $result = _sql($sql, $errored, $error_ary);
779 while ($row = $db->sql_fetchrow($result))
781 $sql = "UPDATE " . USERS_TABLE . "
782 SET user_timezone = " . $row['user_timezone_old'] . "
783 WHERE user_id = " . $row['user_id'];
784 _sql($sql, $errored, $error_ary);
786 $db->sql_freeresult($result);
789 $sql = "SELECT topic_id, topic_moved_id
790 FROM " . TOPICS_TABLE . "
791 WHERE topic_moved_id <> 0
792 AND topic_status = " . TOPIC_MOVED;
793 $result = _sql($sql, $errored, $error_ary);
795 $topic_ary = array();
796 while ($row = $db->sql_fetchrow($result))
798 $topic_ary[$row['topic_id']] = $row['topic_moved_id'];
800 $db->sql_freeresult($result);
802 while (list($topic_id, $topic_moved_id) = each($topic_ary))
804 $sql = "SELECT MAX(post_id) AS last_post, MIN(post_id) AS first_post, COUNT(post_id) AS total_posts
805 FROM " . POSTS_TABLE . "
806 WHERE topic_id = $topic_moved_id";
807 $result = _sql($sql, $errored, $error_ary);
809 $sql = ($row = $db->sql_fetchrow($result)) ? "UPDATE " . TOPICS_TABLE . " SET topic_replies = " . ($row['total_posts'] - 1) . ", topic_first_post_id = " . $row['first_post'] . ", topic_last_post_id = " . $row['last_post'] . " WHERE topic_id = $topic_id" : "DELETE FROM " . TOPICS_TABLE . " WHERE topic_id = " . $row['topic_id'];
810 _sql($sql, $errored, $error_ary);
821 // Topics will resync automatically
823 // Remove stop words from search match and search words
824 $dirname = 'language';
825 $dir = opendir($phpbb_root_path . $dirname);
827 while ($file = readdir($dir))
829 if (preg_match("#^lang_#i", $file) && !is_file($phpbb_root_path . $dirname . "/" . $file) && !is_link($phpbb_root_path . $dirname . "/" . $file) && file_exists($phpbb_root_path . $dirname . "/" . $file . '/search_stopwords.txt'))
832 $stopword_list = trim(preg_replace('#([\w\.\-_\+\'±µ-ÿ\\\]+?)[ \n\r]*?(,|$)#', '\'\1\'\2', str_replace("'", "\'", implode(', ', file($phpbb_root_path . $dirname . "/" . $file . '/search_stopwords.txt')))));
834 $sql = "SELECT word_id
835 FROM " . SEARCH_WORD_TABLE . "
836 WHERE word_text IN ($stopword_list)";
837 $result = _sql($sql, $errored, $error_ary);
840 if ($row = $db->sql_fetchrow($result))
844 $word_id_sql .= (($word_id_sql != '') ? ', ' : '') . $row['word_id'];
846 while ($row = $db->sql_fetchrow($result));
848 $sql = "DELETE FROM " . SEARCH_WORD_TABLE . "
849 WHERE word_id IN ($word_id_sql)";
850 _sql($sql, $errored, $error_ary);
852 $sql = "DELETE FROM " . SEARCH_MATCH_TABLE . "
853 WHERE word_id IN ($word_id_sql)";
854 _sql($sql, $errored, $error_ary);
856 $db->sql_freeresult($result);
861 // Mark common words ...
862 remove_common('global', 4/10);
864 // remove superfluous polls ... grab polls with topics then delete polls
866 $sql = "SELECT v.vote_id
867 FROM " . TOPICS_TABLE . " t, " . VOTE_DESC_TABLE . " v
868 WHERE v.topic_id = t.topic_id";
869 $result = _sql($sql, $errored, $error_ary);
872 if ($row = $db->sql_fetchrow($result))
876 $vote_id_sql .= (($vote_id_sql != '') ? ', ' : '') . $row['vote_id'];
878 while ($row = $db->sql_fetchrow($result));
880 $sql = "DELETE FROM " . VOTE_DESC_TABLE . "
881 WHERE vote_id NOT IN ($vote_id_sql)";
882 _sql($sql, $errored, $error_ary);
884 $sql = "DELETE FROM " . VOTE_RESULTS_TABLE . "
885 WHERE vote_id NOT IN ($vote_id_sql)";
886 _sql($sql, $errored, $error_ary);
888 $sql = "DELETE FROM " . VOTE_USERS_TABLE . "
889 WHERE vote_id NOT IN ($vote_id_sql)";
890 _sql($sql, $errored, $error_ary);
892 $db->sql_freeresult($result);
894 // update pm counters
895 $sql = "SELECT privmsgs_to_userid, COUNT(privmsgs_id) AS unread_count
896 FROM " . PRIVMSGS_TABLE . "
897 WHERE privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . "
898 GROUP BY privmsgs_to_userid";
899 $result = _sql($sql, $errored, $error_ary);
901 if ($row = $db->sql_fetchrow($result))
903 $update_users = array();
906 $update_users[$row['unread_count']][] = $row['privmsgs_to_userid'];
908 while ($row = $db->sql_fetchrow($result));
910 while (list($num, $user_ary) = each($update_users))
912 $user_ids = implode(', ', $user_ary);
914 $sql = "UPDATE " . USERS_TABLE . "
915 SET user_unread_privmsg = $num
916 WHERE user_id IN ($user_ids)";
917 _sql($sql, $errored, $error_ary);
921 $db->sql_freeresult($result);
923 $sql = "SELECT privmsgs_to_userid, COUNT(privmsgs_id) AS new_count
924 FROM " . PRIVMSGS_TABLE . "
925 WHERE privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
926 GROUP BY privmsgs_to_userid";
927 $result = _sql($sql, $errored, $error_ary);
929 if ($row = $db->sql_fetchrow($result))
931 $update_users = array();
934 $update_users[$row['new_count']][] = $row['privmsgs_to_userid'];
936 while ($row = $db->sql_fetchrow($result));
938 while (list($num, $user_ary) = each($update_users))
940 $user_ids = implode(', ', $user_ary);
942 $sql = "UPDATE " . USERS_TABLE . "
943 SET user_new_privmsg = $num
944 WHERE user_id IN ($user_ids)";
945 _sql($sql, $errored, $error_ary);
949 $db->sql_freeresult($result);
951 // Remove superfluous watched topics
952 $sql = "SELECT t.topic_id
953 FROM " . TOPICS_TABLE . " t, " . TOPICS_WATCH_TABLE . " w
954 WHERE w.topic_id = t.topic_id";
955 $result = _sql($sql, $errored, $error_ary);
958 if ($row = $db->sql_fetchrow($result))
962 $topic_id_sql .= (($topic_id_sql != '') ? ', ' : '') . $row['topic_id'];
964 while ($row = $db->sql_fetchrow($result));
966 $sql = "DELETE FROM " . TOPICS_WATCH_TABLE . "
967 WHERE topic_id NOT IN ($topic_id_sql)";
968 _sql($sql, $errored, $error_ary);
970 $db->sql_freeresult($result);
972 // Reset any email addresses which are non-compliant ... something
973 // not done in the upgrade script and thus which may affect some
978 $sql = "UPDATE " . USERS_TABLE . "
980 WHERE user_email NOT REGEXP '^[a-zA-Z0-9_\+\.\-]+@.*[a-zA-Z0-9_\-]+\.[a-zA-Z]{2,}$'";
981 _sql($sql, $errored, $error_ary);
986 // Add the confirmation code switch ... save time and trouble elsewhere
987 $sql = 'INSERT INTO ' . CONFIG_TABLE . " (config_name, config_value)
988 VALUES ('enable_confirm', '0')";
989 _sql($sql, $errored, $error_ary);
991 $sql = "INSERT INTO " . CONFIG_TABLE . " (config_name, config_value)
992 VALUES ('sendmail_fix', '0')";
993 _sql($sql, $errored, $error_ary);
997 $sql = "SELECT user_id, username
998 FROM " . USERS_TABLE;
999 $result = _sql($sql, $errored, $error_ary);
1001 while ($row = $db->sql_fetchrow($result))
1003 if (!preg_match('#(>)|(<)|(")|(&)#', $row['username']))
1005 if ($row['username'] != htmlspecialchars($row['username']))
1007 $sql = "UPDATE " . USERS_TABLE . "
1008 SET username = '" . str_replace("'", "''", htmlspecialchars($row['username'])) . "'
1009 WHERE user_id = " . $row['user_id'];
1010 _sql($sql, $errored, $error_ary);
1014 $db->sql_freeresult($result);
1026 $sql = 'UPDATE ' . USERS_TABLE . ' SET user_allowhtml = 1 WHERE user_id = ' . ANONYMOUS;
1027 _sql($sql, $errored, $error_ary);
1033 $sql = 'UPDATE ' . USERS_TABLE . ' SET user_active = 0 WHERE user_id = ' . ANONYMOUS;
1034 _sql($sql, $errored, $error_ary);
1036 $sql = 'INSERT INTO ' . CONFIG_TABLE . " (config_name, config_value)
1037 VALUES ('allow_autologin', '1')";
1038 _sql($sql, $errored, $error_ary);
1040 $sql = 'INSERT INTO ' . CONFIG_TABLE . " (config_name, config_value)
1041 VALUES ('max_autologin_time', '0')";
1042 _sql($sql, $errored, $error_ary);
1044 // We reset those having autologin enabled and forcing the re-assignment of a session id
1045 $sql = 'DELETE FROM ' . SESSIONS_TABLE;
1046 _sql($sql, $errored, $error_ary);
1050 $sql = 'INSERT INTO ' . CONFIG_TABLE . " (config_name, config_value)
1051 VALUES ('max_login_attempts', '5')";
1052 _sql($sql, $errored, $error_ary);
1054 $sql = 'INSERT INTO ' . CONFIG_TABLE . " (config_name, config_value)
1055 VALUES ('login_reset_time', '30')";
1056 _sql($sql, $errored, $error_ary);
1061 echo " No updates where required</b></p>\n";
1065 echo "<h2>Updating version and optimizing tables</h2>\n";
1066 echo "<p>Progress :: <b>";
1069 // update the version
1070 $sql = "UPDATE " . CONFIG_TABLE . "
1071 SET config_value = '$updates_to_version'
1072 WHERE config_name = 'version'";
1073 _sql($sql, $errored, $error_ary);
1075 // Optimize/vacuum analyze the tables where appropriate
1076 // this should be done for each version in future along with
1077 // the version number update
1082 $sql = 'OPTIMIZE TABLE ' . $table_prefix . 'auth_access, ' . $table_prefix . 'banlist, ' . $table_prefix . 'categories, ' . $table_prefix . 'config, ' . $table_prefix . 'disallow, ' . $table_prefix . 'forum_prune, ' . $table_prefix . 'forums, ' . $table_prefix . 'groups, ' . $table_prefix . 'posts, ' . $table_prefix . 'posts_text, ' . $table_prefix . 'privmsgs, ' . $table_prefix . 'privmsgs_text, ' . $table_prefix . 'ranks, ' . $table_prefix . 'search_results, ' . $table_prefix . 'search_wordlist, ' . $table_prefix . 'search_wordmatch, ' . $table_prefix . 'smilies, ' . $table_prefix . 'themes, ' . $table_prefix . 'themes_name, ' . $table_prefix . 'topics, ' . $table_prefix . 'topics_watch, ' . $table_prefix . 'user_group, ' . $table_prefix . 'users, ' . $table_prefix . 'vote_desc, ' . $table_prefix . 'vote_results, ' . $table_prefix . 'vote_voters, ' . $table_prefix . 'words';
1083 _sql($sql, $errored, $error_ary);
1087 _sql("VACUUM ANALYZE", $errored, $error_ary);
1091 echo "</b> <b class=\"ok\">Done</b><br />Result :: \n";
1095 echo " <b>Some queries failed, the statements and errors are listing below</b>\n<ul>";
1097 for ($i = 0; $i < count($error_ary['sql']); $i++)
1099 echo "<li>Error :: <b>" . $error_ary['error_code'][$i]['message'] . "</b><br />";
1100 echo "SQL :: <b>" . $error_ary['sql'][$i] . "</b><br /><br /></li>";
1103 echo "</ul>\n<p>This is probably nothing to worry about, update will continue. Should this fail to complete you may need to seek help at our development board. See <a href=\"docs\README.html\">README</a> for details on how to obtain advice.</p>\n";
1107 echo "<b>No errors</b>\n";
1110 echo "<h2>Update completed</h2>\n";
1111 echo "\n" . '<p style="color:red">Please make sure you have updated your board files too, this file is only updating your database.</p>';
1112 echo "\n<p>You should now visit the General Configuration settings page in the <a href=\"../admin/\">Administration Panel</a> and check the General Configuration of the board. If you updated from versions prior to RC-3 you <b>must</b> update some entries. If you do not do this emails sent from the board will contain incorrect information. Don't forget to delete this file!</p>\n";