2001-11-15 22:53:06 +00:00
< ? php
2003-09-25 07:27:22 +00:00
// $Id$
2001-12-16 14:42:51 +00:00
/*
** USAGE :
**
** - Point your browser to " http://www.site.com/update.php " and follow
** the instructions .
**
2003-10-03 06:22:12 +00:00
** - If you are not logged in as administrator , you will need to modify the
** statement below . Change the 1 into a 0 to disable the access check .
** After finishing the upgrade , open this file and change the 0 back into
** a 1 !
2001-12-16 14:42:51 +00:00
*/
2003-10-03 06:22:12 +00:00
// Disable access checking?
$access_check = 1 ;
2001-11-15 22:53:06 +00:00
if ( ! get_cfg_var ( " safe_mode " )) {
set_time_limit ( 180 );
}
// Define the various updates in an array("date : comment" => "function");
$mysql_updates = array (
2003-02-23 21:11:03 +00:00
" 2002-06-22: first update since Drupal 4.0.0 release " => " update_32 " ,
2002-07-31 08:14:25 +00:00
" 2002-07-07 " => " update_33 " ,
2002-08-11 20:02:32 +00:00
" 2002-07-31 " => " update_34 " ,
2002-08-16 07:37:03 +00:00
" 2002-08-10 " => " update_35 " ,
2002-08-20 19:29:16 +00:00
" 2002-08-16 " => " update_36 " ,
2002-08-26 18:18:12 +00:00
" 2002-08-19 " => " update_37 " ,
2002-09-15 13:00:12 +00:00
" 2002-08-26 " => " update_38 " ,
2002-09-17 18:39:16 +00:00
" 2002-09-15 " => " update_39 " ,
2002-10-13 12:00:50 +00:00
" 2002-09-17 " => " update_40 " ,
2002-10-17 18:34:38 +00:00
" 2002-10-13 " => " update_41 " ,
2002-10-26 15:17:26 +00:00
" 2002-10-17 " => " update_42 " ,
2002-11-08 13:19:12 +00:00
" 2002-10-26 " => " update_43 " ,
2002-11-20 20:54:56 +00:00
" 2002-11-08 " => " update_44 " ,
2002-12-11 22:00:04 +00:00
" 2002-11-20 " => " update_45 " ,
2003-02-23 21:11:03 +00:00
" 2002-12-10: first update since Drupal 4.1.0 release " => " update_46 " ,
2003-04-18 22:42:59 +00:00
" 2002-12-29 " => " update_47 " ,
" 2003-01-03 " => " update_48 " ,
" 2003-01-05 " => " update_49 " ,
2003-04-19 16:42:42 +00:00
" 2003-01-15 " => " update_50 " ,
2003-04-20 20:33:28 +00:00
" 2003-04-19 " => " update_51 " ,
2003-05-18 16:43:56 +00:00
" 2003-04-20 " => " update_52 " ,
2003-05-24 14:31:36 +00:00
" 2003-05-18 " => " update_53 " ,
2003-06-01 06:46:55 +00:00
" 2003-05-24 " => " update_54 " ,
2003-06-04 18:24:39 +00:00
" 2003-05-31 " => " update_55 " ,
2003-06-08 16:50:05 +00:00
" 2003-06-04 " => " update_56 " ,
2003-07-16 20:14:26 +00:00
" 2003-06-08 " => " update_57 " ,
2003-08-12 18:32:54 +00:00
" 2003-06-08: first update since Drupal 4.2.0 release " => " update_58 " ,
2003-08-16 05:49:45 +00:00
" 2003-08-05 " => " update_59 " ,
2003-08-20 19:19:13 +00:00
" 2003-08-15 " => " update_60 " ,
2003-08-27 05:49:52 +00:00
" 2003-08-20 " => " update_61 " ,
2003-09-09 18:18:43 +00:00
" 2003-08-27 " => " update_62 " ,
2003-09-10 19:30:34 +00:00
" 2003-09-09 " => " update_63 " ,
2003-09-30 08:55:03 +00:00
" 2003-09-10 " => " update_64 " ,
2003-09-30 20:59:26 +00:00
" 2003-09-29 " => " update_65 " ,
2003-10-12 21:25:42 +00:00
" 2003-09-30 " => " update_66 " ,
2003-10-20 07:12:00 +00:00
" 2003-10-11 " => " update_67 " ,
2003-10-22 20:20:35 +00:00
" 2003-10-20 " => " update_68 " ,
2003-10-27 21:25:55 +00:00
" 2003-10-22 " => " update_69 " ,
2003-11-18 19:44:36 +00:00
" 2003-10-27 " => " update_70 " ,
2003-11-28 20:03:00 +00:00
" 2003-11-17 " => " update_71 " ,
2003-12-03 14:35:03 +00:00
" 2003-11-27 " => " update_72 " ,
2003-12-07 18:25:09 +00:00
" 2003-12-03 " => " update_73 " ,
" 2003-12-06 " => " update_74 "
2001-11-15 22:53:06 +00:00
);
2002-06-23 13:26:39 +00:00
function update_32 () {
2002-10-15 09:20:25 +00:00
update_sql ( " ALTER TABLE users ADD index (sid(4)) " );
update_sql ( " ALTER TABLE users ADD index (timestamp) " );
2002-12-16 07:09:53 +00:00
update_sql ( " ALTER TABLE users ADD UNIQUE KEY name (name) " );
2002-06-23 13:26:39 +00:00
}
2002-07-07 15:41:03 +00:00
function update_33 () {
2002-10-15 09:20:25 +00:00
$result = db_query ( " SELECT * FROM variable WHERE value NOT LIKE 's:%;' " );
2002-07-31 08:14:25 +00:00
// NOTE: the "WHERE"-part of the query above avoids variables to get serialized twice.
2002-07-07 15:41:03 +00:00
while ( $variable = db_fetch_object ( $result )) {
variable_set ( $variable -> name , $variable -> value );
}
}
2002-07-31 08:14:25 +00:00
function update_34 () {
2002-10-15 09:20:25 +00:00
update_sql ( " ALTER TABLE feed MODIFY refresh int(10) NOT NULL default '0' " );
update_sql ( " ALTER TABLE feed MODIFY timestamp int (10) NOT NULL default '0' " );
2002-11-24 13:04:28 +00:00
update_sql ( " ALTER TABLE users CHANGE session session TEXT " );
2002-07-31 08:14:25 +00:00
}
2002-08-11 20:02:32 +00:00
function update_35 () {
2002-10-15 09:20:25 +00:00
update_sql ( " ALTER TABLE poll_choices ADD INDEX (nid) " );
2002-08-11 20:02:32 +00:00
}
2002-08-16 07:37:03 +00:00
function update_36 () {
2002-10-15 09:20:25 +00:00
update_sql ( " ALTER TABLE rating CHANGE old previous int(6) NOT NULL default '0' " );
update_sql ( " ALTER TABLE rating CHANGE new current int(6) NOT NULL default '0' " );
2002-08-16 07:37:03 +00:00
}
2002-08-20 19:29:16 +00:00
function update_37 () {
2002-10-15 09:20:25 +00:00
update_sql ( " DROP TABLE IF EXISTS sequences " );
2002-08-20 19:29:16 +00:00
update_sql ( " CREATE TABLE sequences (
2002-08-26 18:18:12 +00:00
name VARCHAR ( 255 ) NOT NULL PRIMARY KEY ,
2002-08-20 19:29:16 +00:00
id INT UNSIGNED NOT NULL
2002-10-15 09:20:25 +00:00
) TYPE = MyISAM " );
2002-08-20 19:29:16 +00:00
2002-10-15 09:20:25 +00:00
if ( $max = db_result ( db_query ( " SELECT MAX(nid) FROM node " ))) {
update_sql ( " REPLACE INTO sequences VALUES ('node', $max ) " );
2002-08-20 19:29:16 +00:00
}
2002-10-15 09:20:25 +00:00
if ( $max = db_result ( db_query ( " SELECT MAX(cid) FROM comments " ))) {
update_sql ( " REPLACE INTO sequences VALUES ('comments', $max ) " );
2002-08-20 19:29:16 +00:00
}
// NOTE: move the comments bit down as soon as we switched to use the new comment module!
2002-10-15 09:20:25 +00:00
if ( $max = db_result ( db_query ( " SELECT MAX(tid) FROM term_data " ))) {
update_sql ( " REPLACE INTO sequences VALUES ('term_data', $max ) " );
2002-08-20 19:29:16 +00:00
}
}
2002-08-26 18:18:12 +00:00
function update_38 () {
2002-10-15 09:20:25 +00:00
update_sql ( " ALTER TABLE watchdog CHANGE message message text NOT NULL default '' " );
2002-08-26 18:18:12 +00:00
}
2002-09-15 13:00:12 +00:00
function update_39 () {
update_sql ( " DROP TABLE moderate " );
2002-10-15 09:20:25 +00:00
update_sql ( " ALTER TABLE comments ADD score MEDIUMINT NOT NULL " );
update_sql ( " ALTER TABLE comments ADD status TINYINT UNSIGNED NOT NULL " );
update_sql ( " ALTER TABLE comments ADD users MEDIUMTEXT " );
2002-09-15 13:00:12 +00:00
update_sql ( " CREATE TABLE moderation_votes (
mid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
vote VARCHAR ( 255 ),
weight TINYINT NOT NULL
2002-10-15 09:20:25 +00:00
) " );
2002-09-15 13:00:12 +00:00
update_sql ( " CREATE TABLE moderation_roles (
rid INT UNSIGNED NOT NULL ,
mid INT UNSIGNED NOT NULL ,
value TINYINT NOT NULL
2002-10-15 09:20:25 +00:00
) " );
2002-09-15 13:00:12 +00:00
2002-10-15 09:20:25 +00:00
update_sql ( " ALTER TABLE moderation_roles ADD INDEX (rid) " );
update_sql ( " ALTER TABLE moderation_roles ADD INDEX (mid) " );
2002-09-15 13:00:12 +00:00
update_sql ( " CREATE TABLE moderation_filters (
fid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
filter VARCHAR ( 255 ) NOT NULL ,
minimum SMALLINT NOT NULL
2002-10-15 09:20:25 +00:00
) " );
2002-09-15 13:00:12 +00:00
2002-10-15 09:20:25 +00:00
update_sql ( " DELETE FROM moderation_votes " );
update_sql ( " INSERT INTO moderation_votes VALUES (1, '+1', 0) " );
update_sql ( " INSERT INTO moderation_votes VALUES (2, '-1', 1) " );
2002-09-15 13:00:12 +00:00
2002-10-15 09:20:25 +00:00
update_sql ( " DELETE FROM moderation_roles " );
update_sql ( " INSERT INTO moderation_roles VALUES (2, 1, 1) " );
update_sql ( " INSERT INTO moderation_roles VALUES (2, 2, -1) " );
2002-09-15 13:00:12 +00:00
update_sql ( " CREATE TABLE forum (
nid int unsigned not null primary key ,
icon varchar ( 255 ) not null ,
shadow int unsigned not null
2002-10-15 09:20:25 +00:00
) " );
2002-09-15 13:00:12 +00:00
}
2002-09-17 18:39:16 +00:00
function update_40 () {
2002-10-15 09:20:25 +00:00
if ( $max = db_result ( db_query ( " SELECT MAX(cid) FROM comments " ))) {
update_sql ( " REPLACE INTO sequences VALUES ('comments', $max ) " );
2002-09-17 18:39:16 +00:00
}
}
2002-10-13 12:00:50 +00:00
function update_41 () {
2002-10-15 09:20:25 +00:00
update_sql ( " CREATE TABLE statistics (
nid int ( 11 ) NOT NULL ,
totalcount bigint UNSIGNED DEFAULT '0' NOT NULL ,
daycount mediumint UNSIGNED DEFAULT '0' NOT NULL ,
timestamp int ( 11 ) UNSIGNED DEFAULT '0' NOT NULL ,
PRIMARY KEY ( nid ),
INDEX ( totalcount ),
INDEX ( daycount ),
INDEX ( timestamp )
) " );
update_sql ( " CREATE TABLE accesslog (
nid int ( 11 ) UNSIGNED DEFAULT '0' ,
url varchar ( 255 ),
hostname varchar ( 128 ),
uid int ( 10 ) UNSIGNED DEFAULT '0' ,
timestamp int ( 11 ) UNSIGNED NOT NULL
) " );
2002-10-13 12:00:50 +00:00
}
2002-10-17 18:34:38 +00:00
function update_42 () {
update_sql ( " DROP TABLE modules " );
update_sql ( " DROP TABLE layout " );
update_sql ( " DROP TABLE referrer " );
}
2002-10-26 15:17:26 +00:00
function update_43 () {
update_sql ( " ALTER TABLE blocks DROP remove " );
update_sql ( " ALTER TABLE blocks DROP name " );
2002-10-26 21:50:39 +00:00
update_sql ( " UPDATE boxes SET type = 0 WHERE type = 1 " );
update_sql ( " UPDATE boxes SET type = 1 WHERE type = 2 " );
2002-10-26 15:17:26 +00:00
}
2002-11-08 13:19:12 +00:00
function update_44 () {
update_sql ( " UPDATE system SET filename = CONCAT('modules/', filename) WHERE type = 'module' " );
}
2002-11-20 20:54:56 +00:00
function update_45 () {
update_sql ( " ALTER TABLE page ADD description varchar(128) NOT NULL default '' " );
}
2002-12-11 22:00:04 +00:00
function update_46 () {
update_sql ( " ALTER TABLE cache ADD created int(11) NOT NULL default '0' " );
}
2002-12-24 15:40:32 +00:00
function update_47 () {
2002-12-31 10:40:26 +00:00
if ( $max = db_result ( db_query ( " SELECT MAX(vid) FROM vocabulary " ))) {
2002-12-30 12:03:53 +00:00
update_sql ( " REPLACE INTO sequences VALUES ('vocabulary', $max ) " );
}
}
2003-04-18 22:42:59 +00:00
function update_48 () {
2003-01-04 11:03:15 +00:00
update_sql ( " ALTER TABLE watchdog ADD link varchar(255) DEFAULT '' NULL " );
}
2003-04-18 22:42:59 +00:00
function update_49 () {
/*
** Make sure the admin module is added to the system table or the
** admin menus won ' t show up .
*/
update_sql ( " DELETE FROM system WHERE name = 'admin'; " );
update_sql ( " INSERT INTO system VALUES ('modules/admin.module','admin','module','',1) " );
2003-01-06 19:51:01 +00:00
}
2003-04-18 22:42:59 +00:00
function update_50 () {
2003-01-16 22:24:52 +00:00
update_sql ( " ALTER TABLE forum ADD tid INT UNSIGNED NOT NULL " );
2003-01-15 23:01:42 +00:00
$result = db_queryd ( " SELECT n.nid, t.tid FROM node n, term_node t WHERE n.nid = t.nid AND type = 'forum' " );
while ( $node = db_fetch_object ( $result )) {
2003-05-07 21:00:36 +00:00
db_queryd ( " UPDATE forum SET tid = %d WHERE nid = %d " , $node -> tid , $node -> nid );
2003-01-15 23:01:42 +00:00
}
update_sql ( " ALTER TABLE forum ADD INDEX (tid) " );
}
2003-04-19 16:42:42 +00:00
function update_51 () {
update_sql ( " ALTER TABLE blocks CHANGE delta delta varchar(32) NOT NULL default '0' " );
}
2003-04-20 20:33:28 +00:00
function update_52 () {
update_sql ( " UPDATE sequences SET name = 'comments_cid' WHERE name = 'comments'; " );
update_sql ( " UPDATE sequences SET name = 'node_nid' WHERE name = 'node'; " );
update_sql ( " DELETE FROM sequences WHERE name = 'import' " );
update_sql ( " DELETE FROM sequences WHERE name = 'bundle_bid' " ); // in case we would run this entry twice
update_sql ( " DELETE FROM sequences WHERE name = 'feed_fid' " ); // in case we would run this entry twice
$bundles = db_result ( db_query ( " SELECT MAX(bid) FROM bundle; " ));
update_sql ( " INSERT INTO sequences (name, id) VALUES ('bundle_bid', ' $bundles ') " );
$feeds = db_result ( db_query ( " SELECT MAX(fid) FROM feed; " ));
update_sql ( " INSERT INTO sequences (name, id) VALUES ('feed_fid', ' $feeds ') " );
update_sql ( " UPDATE sequences SET name = 'vocabulary_vid' WHERE name = 'vocabulary'; " );
update_sql ( " UPDATE sequences SET name = 'term_data_tid' WHERE name = 'term_data' " );
}
2003-05-18 16:43:56 +00:00
function update_53 () {
update_sql ( " CREATE INDEX book_parent ON book(parent); " );
}
2003-05-24 14:31:36 +00:00
function update_54 () {
update_sql ( " ALTER TABLE locales CHANGE string string BLOB DEFAULT '' NOT NULL " );
}
2003-06-01 06:46:55 +00:00
function update_55 () {
update_sql ( " ALTER TABLE site ADD checked INT(11) NOT NULL; " );
update_sql ( " ALTER TABLE site CHANGE timestamp changed INT(11) NOT NULL; " );
}
2003-06-04 18:24:39 +00:00
function update_56 () {
update_sql ( " ALTER TABLE vocabulary CHANGE types nodes TEXT DEFAULT '' NOT NULL " );
}
2003-06-08 16:50:05 +00:00
function update_57 () {
update_sql ( " DELETE FROM variable WHERE name = 'site_charset' " );
}
2003-07-16 20:14:26 +00:00
function update_58 () {
2003-09-30 08:55:03 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
update_sql ( " ALTER TABLE { node} ADD path varchar(250) NULL " );
update_sql ( " ALTER TABLE { node} ALTER COLUMN path SET DEFAULT '' " );
}
else {
update_sql ( " ALTER TABLE { node} ADD path varchar(250) NULL default '' " );
}
2003-07-16 20:14:26 +00:00
}
2003-08-12 18:32:54 +00:00
function update_59 () {
2003-09-30 08:55:03 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
update_sql ( " ALTER TABLE { comments} ADD thread VARCHAR(255) " );
update_sql ( " ALTER TABLE { comments} ALTER COLUMN thread SET NOT NULL " );
}
else {
update_sql ( " ALTER TABLE { comments} ADD thread VARCHAR(255) NOT NULL " );
}
2003-08-12 18:32:54 +00:00
2003-08-13 04:49:52 +00:00
$result = db_query ( " SELECT DISTINCT(nid) FROM { comments} WHERE thread = '' " );
2003-08-12 18:32:54 +00:00
while ( $node = db_fetch_object ( $result )) {
2003-08-13 04:49:52 +00:00
$result2 = db_query ( " SELECT cid, pid FROM { comments} where nid = '%d' ORDER BY timestamp " , $node -> nid );
2003-08-12 18:32:54 +00:00
$comments = array ();
while ( $comment = db_fetch_object ( $result2 )) {
$comments [ $comment -> cid ] = $comment ;
}
$structure = array ();
$structure = _update_thread_structure ( $comments , 0 , - 1 , $structure );
foreach ( $structure as $cid => $thread ) {
$new_parts = array ();
foreach ( explode ( " . " , $thread ) as $part ) {
if ( $part > 9 ) {
$start = substr ( $part , 0 , strlen ( $part ) - 1 );
$end = substr ( $part , - 1 , 1 );
$new_parts [] = str_repeat ( " 9 " , $start ) . $end ;
}
else {
$new_parts [] = $part ;
}
}
$thread = implode ( " . " , $new_parts );
2003-08-13 04:49:52 +00:00
db_query ( " UPDATE { comments} SET thread = '%s' WHERE cid = '%d' " , $thread . " / " , $comments [ $cid ] -> cid );
2003-08-12 18:32:54 +00:00
}
}
}
function _update_thread_structure ( $comments , $pid , $depth , $structure ) {
$depth ++ ;
foreach ( $comments as $key => $comment ) {
if ( $comment -> pid == $pid ) {
if ( $structure [ $comment -> pid ]) {
$structure [ $comment -> cid ] = $structure [ $comment -> pid ] . " . " . _update_next_thread ( $structure , $structure [ $comment -> pid ]);
}
else {
$structure [ $comment -> cid ] = _update_next_thread ( $structure , " " );
}
$structure = _update_thread_structure ( $comments , $comment -> cid , $depth , $structure );
}
}
return $structure ;
}
2003-08-16 05:49:45 +00:00
function update_60 () {
2003-08-22 17:06:44 +00:00
update_sql ( " ALTER TABLE { forum} DROP icon " );
2003-08-16 05:49:45 +00:00
}
2003-08-20 19:19:13 +00:00
function update_61 () {
2003-09-30 08:55:03 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
update_sql ( " CREATE TABLE { sessions} (
uid integer NOT NULL ,
sid varchar ( 32 ) NOT NULL default '' ,
hostname varchar ( 128 ) NOT NULL default '' ,
timestamp integer NOT NULL default '0' ,
session text ,
PRIMARY KEY ( sid )
); " );
update_sql ( " ALTER TABLE { users} DROP session; " );
update_sql ( " ALTER TABLE { users} DROP hostname; " );
update_sql ( " ALTER TABLE { users} DROP sid; " );
2003-08-20 19:19:13 +00:00
2003-09-30 08:55:03 +00:00
}
else {
update_sql ( " CREATE TABLE IF NOT EXISTS { sessions} (
uid int ( 10 ) unsigned NOT NULL ,
sid varchar ( 32 ) NOT NULL default '' ,
hostname varchar ( 128 ) NOT NULL default '' ,
timestamp int ( 11 ) NOT NULL default '0' ,
session text ,
KEY uid ( uid ),
KEY sid ( sid ( 4 )),
KEY timestamp ( timestamp )
) " );
update_sql ( " ALTER TABLE { users} DROP session; " );
update_sql ( " ALTER TABLE { users} DROP hostname; " );
update_sql ( " ALTER TABLE { users} DROP sid; " );
}
2003-08-20 19:19:13 +00:00
}
2003-08-27 05:49:52 +00:00
function update_62 () {
2003-09-30 08:55:03 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
update_sql ( " CREATE INDEX accesslog_timestamp ON { accesslog} (timestamp) " );
2003-08-27 05:49:52 +00:00
2003-09-30 08:55:03 +00:00
update_sql ( " DROP INDEX node_type_idx " );
update_sql ( " DROP INDEX node_title_idx " );
update_sql ( " DROP INDEX node_promote_idx " );
2003-08-27 05:49:52 +00:00
2003-09-30 08:55:03 +00:00
update_sql ( " CREATE INDEX node_type ON { node} (type) " );
update_sql ( " CREATE INDEX node_title_type ON { node} (title,type) " );
update_sql ( " CREATE INDEX node_moderate ON { node} (moderate) " );
update_sql ( " CREATE INDEX node_path ON { node} (path) " );
update_sql ( " CREATE INDEX node_promote_status ON { node} (promote, status) " );
}
else {
update_sql ( " ALTER TABLE { accesslog} ADD INDEX accesslog_timestamp (timestamp) " );
update_sql ( " ALTER TABLE { node} DROP INDEX type " );
update_sql ( " ALTER TABLE { node} DROP INDEX title " );
update_sql ( " ALTER TABLE { node} DROP INDEX promote " );
update_sql ( " ALTER TABLE { node} ADD INDEX node_type (type(4)) " );
update_sql ( " ALTER TABLE { node} ADD INDEX node_title_type (title,type(4)) " );
update_sql ( " ALTER TABLE { node} ADD INDEX node_moderate (moderate) " );
update_sql ( " ALTER TABLE { node} ADD INDEX node_path (path(5)) " );
update_sql ( " ALTER TABLE { node} ADD INDEX node_promote_status (promote, status) " );
}
2003-08-27 05:49:52 +00:00
}
2003-08-12 18:32:54 +00:00
function _update_next_thread ( $structure , $parent ) {
do {
$val ++ ;
if ( $parent ) {
$thread = " $parent . $val " ;
}
else {
$thread = $val ;
}
} while ( array_search ( $thread , $structure ));
return $val ;
}
2003-09-09 18:18:43 +00:00
function update_63 () {
2003-09-30 08:55:03 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
2003-10-23 15:31:10 +00:00
update_sql ( " INSERT INTO { users} (uid, name, mail, timestamp) VALUES ('0', '', '', ' " . time () . " ') " );
2003-09-30 08:55:03 +00:00
}
else {
update_sql ( " ALTER TABLE { users} CHANGE uid uid int(10) unsigned NOT NULL default '0' " );
2003-10-23 15:31:10 +00:00
update_sql ( " INSERT INTO { users} (uid, name, mail, timestamp) VALUES ('0', '', '', ' " . time () . " ') " );
2003-09-30 08:55:03 +00:00
$users = db_result ( db_query ( " SELECT MAX(uid) FROM { users}; " ));
update_sql ( " INSERT INTO { sequences} (name, id) VALUES ('users_uid', ' $users ') " );
}
2003-09-09 18:18:43 +00:00
}
2003-09-10 19:30:34 +00:00
function update_64 () {
2003-09-18 09:13:59 +00:00
update_sql ( " UPDATE { users} SET rid = 1 WHERE uid = 0 " );
2003-09-10 19:30:34 +00:00
}
2003-09-30 08:55:03 +00:00
function update_65 () {
2003-10-22 20:20:35 +00:00
// PostgreSQL-only update.
2003-09-30 08:55:03 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
update_sql ( " CREATE FUNCTION \" rand \" () RETURNS float AS '
BEGIN
RETURN random ();
2003-10-01 05:18:03 +00:00
END ; ' LANGUAGE ' plpgsql ' " );
2003-09-30 08:55:03 +00:00
}
}
2003-09-30 20:59:26 +00:00
function update_66 () {
2003-10-01 05:18:03 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
update_sql ( " CREATE TABLE { path} (
2003-10-22 20:20:35 +00:00
pid serial ,
2003-10-01 05:18:03 +00:00
src varchar ( 128 ) NOT NULL default '' ,
dst varchar ( 128 ) NOT NULL default '' ,
PRIMARY KEY ( pid )
) " );
update_sql ( " CREATE INDEX path_src_idx ON { path}(src) " );
update_sql ( " CREATE INDEX path_dst_idx ON { path}(dst) " );
$result = db_query ( " SELECT nid, path FROM { node} WHERE path != '' " );
while ( $node = db_fetch_object ( $result )) {
update_sql ( " INSERT INTO { path} (src, dst) VALUES ('node/view/ $node->nid ', ' " . check_query ( $node -> path ) . " ') " );
}
2003-09-30 20:59:26 +00:00
}
2003-10-01 05:18:03 +00:00
else {
update_sql ( " CREATE TABLE { path} (
pid int ( 10 ) unsigned NOT NULL auto_increment ,
src varchar ( 128 ) NOT NULL default '' ,
dst varchar ( 128 ) NOT NULL default '' ,
PRIMARY KEY ( pid ),
UNIQUE KEY src ( src ),
UNIQUE KEY dst ( dst )
) " );
// Migrate the existing paths:
$result = db_query ( " SELECT nid, path FROM { node} WHERE path != '' " );
while ( $node = db_fetch_object ( $result )) {
update_sql ( " INSERT INTO { path} (src, dst) VALUES ('node/view/ $node->nid ', ' " . check_query ( $node -> path ) . " ') " );
}
2003-09-30 20:59:26 +00:00
2003-10-01 05:18:03 +00:00
update_sql ( " ALTER TABLE { node} DROP path " );
}
}
2003-09-30 20:59:26 +00:00
2003-10-12 21:25:42 +00:00
function update_67 () {
2003-10-22 20:20:35 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
// Taking no action. PostgreSQL is not always capable of dropping columns.
}
else {
update_sql ( " ALTER TABLE users DROP homepage " );
}
2003-10-12 21:25:42 +00:00
}
2003-10-20 07:12:00 +00:00
function update_68 () {
2003-10-22 20:20:35 +00:00
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
// Unneccesary. The PostgreSQL port was already using a sequence.
}
else {
$max = db_result ( db_query ( " SELECT MAX(aid) FROM { access}; " ));
update_sql ( " INSERT INTO { sequences} (name, id) VALUES ('access_aid', ' $max ') " );
update_sql ( " ALTER TABLE access CHANGE aid aid tinyint(10) NOT NULL " );
}
}
function update_69 () {
if ( $GLOBALS [ " db_type " ] == " pgsql " ) {
/* Rename the statistics table to node_counter */
update_sql ( " ALTER TABLE { statistics} RENAME TO { node_counter} " );
update_sql ( " DROP INDEX { statistics}_totalcount_idx " );
update_sql ( " DROP INDEX { statistics}_daycount_idx " );
update_sql ( " DROP INDEX { statistics}_timestamp_idx " );
update_sql ( " CREATE INDEX { node_counter}_totalcount_idx ON { node_counter}(totalcount) " );
update_sql ( " CREATE INDEX { node_counter}_daycount_idx ON { node_counter}(daycount) " );
update_sql ( " CREATE INDEX { node_counter}_timestamp_idx ON { node_counter}(timestamp) " );
/* Rename the path table to url_alias */
update_sql ( " ALTER TABLE { path} RENAME TO { url_alias} " );
update_sql ( " ALTER TABLE { path}_pid_seq RENAME TO { url_alias}_pid_seq " );
}
else {
update_sql ( " ALTER TABLE { statistics} RENAME TO { node_counter} " );
update_sql ( " ALTER TABLE { path} RENAME TO { url_alias} " );
2003-10-23 15:31:10 +00:00
update_sql ( " UPDATE { sequences} SET name = ' { url_alias}_pid' WHERE name = ' { path}_pid' " );
2003-10-22 20:20:35 +00:00
}
2003-10-23 15:31:10 +00:00
update_sql ( " UPDATE { users} SET name = '' WHERE uid = 0; " );
2003-10-20 07:12:00 +00:00
}
2003-10-27 21:25:55 +00:00
function update_70 () {
update_sql ( " ALTER TABLE { variable} CHANGE name name varchar(48) NOT NULL " );
}
2003-11-18 19:44:36 +00:00
function update_71 () {
update_sql ( " ALTER TABLE { system} ADD bootstrap int(2) " );
}
2003-11-28 20:03:00 +00:00
function update_72 () {
update_sql ( " ALTER TABLE { blocks} ADD throttle tinyint(1) NOT NULL DEFAULT '0' " );
}
2003-12-03 14:35:03 +00:00
function update_73 () {
if ( $GLOBALS [ " db_type " ] == " mysql " ) {
update_sql ( " ALTER TABLE { book} CHANGE log log longtext " );
update_sql ( " ALTER TABLE { boxes} CHANGE body body longtext " );
update_sql ( " ALTER TABLE { cache} CHANGE data data longtext " );
update_sql ( " ALTER TABLE { comments} CHANGE comment comment longtext " );
update_sql ( " ALTER TABLE { comments} CHANGE users users longtext " );
update_sql ( " ALTER TABLE { directory} CHANGE slogan slogan longtext " );
update_sql ( " ALTER TABLE { directory} CHANGE mission mission longtext " );
update_sql ( " ALTER TABLE { feed} CHANGE description description longtext " );
update_sql ( " ALTER TABLE { item} CHANGE description description longtext " );
update_sql ( " ALTER TABLE { node} CHANGE users users longtext " );
update_sql ( " ALTER TABLE { node} CHANGE teaser teaser longtext " );
update_sql ( " ALTER TABLE { node} CHANGE body body longtext " );
update_sql ( " ALTER TABLE { node} CHANGE revisions revisions longtext " );
update_sql ( " ALTER TABLE { permission} CHANGE perm perm longtext " );
update_sql ( " ALTER TABLE { poll} CHANGE voters voters longtext " );
update_sql ( " ALTER TABLE { sessions} CHANGE session session longtext " );
update_sql ( " ALTER TABLE { term_data} CHANGE description description longtext " );
update_sql ( " ALTER TABLE { users} CHANGE data data longtext " );
update_sql ( " ALTER TABLE { variable} CHANGE value value longtext " );
update_sql ( " ALTER TABLE { vocabulary} CHANGE description description longtext " );
update_sql ( " ALTER TABLE { vocabulary} CHANGE nodes nodes longtext " );
update_sql ( " ALTER TABLE { watchdog} CHANGE message message longtext " );
}
}
2003-12-07 18:25:09 +00:00
function update_74 () {
update_sql ( " ALTER TABLE { system} ADD throttle tinyint(1) NOT NULL DEFAULT '0' " );
}
2002-01-05 16:28:34 +00:00
/*
** System functions
*/
2001-11-15 22:53:06 +00:00
function update_sql ( $sql ) {
2003-05-13 18:36:38 +00:00
$edit = $_POST [ " edit " ];
2002-04-29 15:50:19 +00:00
print nl2br ( htmlentities ( $sql )) . " " ;
2001-11-15 22:53:06 +00:00
$result = db_query ( $sql );
if ( $result ) {
2003-06-16 17:09:23 +00:00
print " <div style= \" color: green; \" >OK</div> \n " ;
2001-11-15 22:53:06 +00:00
return 1 ;
}
else {
2003-06-16 17:09:23 +00:00
print " <div style= \" color: red; \" >FAILED</div> \n " ;
2001-11-15 22:53:06 +00:00
return 0 ;
}
}
function update_data ( $start ) {
global $mysql_updates ;
$mysql_updates = array_slice ( $mysql_updates , ( $start -- ? $start : 0 ));
2002-05-11 16:21:48 +00:00
foreach ( $mysql_updates as $date => $func ) {
2001-11-15 22:53:06 +00:00
print " <b> $date </b><br /> \n <pre> \n " ;
$func ();
variable_set ( " update_start " , $date );
print " </pre> \n " ;
}
}
2003-05-20 04:52:06 +00:00
function update_page_header ( $title ) {
$output = " <html><head><title> $title </title> " ;
$output .= <<< EOF
< link rel = " stylesheet " type = " text/css " media = " print " href = " misc/print.css " />
< style type = " text/css " title = " layout " media = " Screen " >
2003-10-01 21:55:19 +00:00
@ import url ( " misc/drupal.css " );
2003-05-20 04:52:06 +00:00
</ style >
EOF ;
2003-10-20 19:21:17 +00:00
$output .= " </head><body> " ;
2003-06-15 19:06:25 +00:00
$output .= " <div id= \" logo \" ><a href= \" http://drupal.org/ \" ><img src= \" misc/druplicon-small.gif \" alt= \" Druplicon - Drupal logo \" title= \" Druplicon - Drupal logo \" /></a></div> " ;
2003-05-20 04:52:06 +00:00
$output .= " <div id= \" update \" ><h1> $title </h1> " ;
return $output ;
}
function update_page_footer () {
return " </div></body></html> " ;
}
2001-11-15 22:53:06 +00:00
function update_page () {
2003-05-13 18:36:38 +00:00
global $user , $mysql_updates ;
$edit = $_POST [ " edit " ];
2001-11-15 22:53:06 +00:00
2003-05-19 15:30:12 +00:00
switch ( $_POST [ " op " ]) {
2001-11-15 22:53:06 +00:00
case " Update " :
// make sure we have updates to run.
2003-05-20 04:52:06 +00:00
print update_page_header ( " Drupal database update " );
2003-11-18 19:44:36 +00:00
$links [] = " <a href= \" index.php \" >main page</a> " ;
$links [] = " <a href= \" index.php?q=admin \" >administration pages</a> " ;
print theme ( " item_list " , $links );
2003-02-23 21:11:03 +00:00
// NOTE: we can't use l() here because the URL would point to 'update.php?q=admin'.
2001-11-15 22:53:06 +00:00
if ( $edit [ " start " ] == - 1 ) {
print " No updates to perform. " ;
}
else {
update_data ( $edit [ " start " ]);
}
2003-02-23 21:11:03 +00:00
print " <br />Updates were attempted. If you see no failures above, you may proceed happily to the <a href= \" index.php?q=admin \" >administration pages</a>. " ;
2003-01-07 05:56:47 +00:00
print " Otherwise, you may need to update your database manually. " ;
2003-05-20 04:52:06 +00:00
print update_page_footer ();
2001-11-15 22:53:06 +00:00
break ;
default :
$start = variable_get ( " update_start " , 0 );
$dates [] = " All " ;
$i = 1 ;
2002-05-11 16:21:48 +00:00
foreach ( $mysql_updates as $date => $sql ) {
2001-11-15 22:53:06 +00:00
$dates [ $i ++ ] = $date ;
if ( $date == $start ) {
$selected = $i ;
}
}
2002-11-24 13:04:28 +00:00
$dates [ $i ] = " No updates available " ;
2001-11-15 22:53:06 +00:00
// make update form and output it.
2003-05-20 04:52:06 +00:00
$form .= form_select ( " Perform updates from " , " start " , ( isset ( $selected ) ? $selected : - 1 ), $dates , " This defaults to the first available update since the last update you peformed. " );
2001-11-15 22:53:06 +00:00
$form .= form_submit ( " Update " );
2003-05-20 04:52:06 +00:00
print update_page_header ( " Drupal database update " );
2001-11-15 22:53:06 +00:00
print form ( $form );
2003-05-20 04:52:06 +00:00
print update_page_footer ();
2001-11-15 22:53:06 +00:00
break ;
}
}
2002-05-11 17:23:45 +00:00
function update_info () {
2003-05-20 04:52:06 +00:00
print update_page_header ( " Drupal database update " );
2002-05-15 22:36:30 +00:00
print " <ol> \n " ;
2002-12-07 11:24:16 +00:00
print " <li>Use this script to <b>upgrade an existing Drupal installation</b>. You don't need this script when installing Drupal from scratch.</li> " ;
2003-01-07 05:56:47 +00:00
print " <li>Before doing anything, backup your database. This process will change your database and its values, and some things might get lost.</li> \n " ;
2003-10-21 07:59:04 +00:00
print " <li>Update your Drupal sources, check the notes below and <a href= \" update.php?op=update \" >run the database upgrade script</a>. Don't upgrade your database twice as it may cause problems.</p></li> \n " ;
2002-12-07 11:24:16 +00:00
print " <li>Go through the various administration pages to change the existing and new settings to your liking.</li> \n " ;
2002-05-15 22:36:30 +00:00
print " </ol> " ;
2003-10-01 21:55:19 +00:00
print " Notes: " ;
print " <ol> " ;
2003-10-21 07:59:04 +00:00
print " <li>If you upgrade from Drupal 4.2.0, you have to create the <code>sessions</code> table manually before upgrading. After you created the table, you'll want to log in and immediately continue the upgrade. To create the <code>sessions</code> table, issue the following SQL command (MySQL specific example):<pre>CREATE TABLE sessions (
2003-10-01 21:55:19 +00:00
uid int ( 10 ) unsigned NOT NULL ,
sid varchar ( 32 ) NOT NULL default '' ,
hostname varchar ( 128 ) NOT NULL default '' ,
timestamp int ( 11 ) NOT NULL default '0' ,
session text ,
KEY uid ( uid ),
KEY sid ( sid ( 4 )),
KEY timestamp ( timestamp )); </ pre ></ li > " ;
print " </ol> " ;
2003-05-20 04:52:06 +00:00
print update_page_footer ();
2001-11-15 22:53:06 +00:00
}
2002-05-11 17:23:45 +00:00
2003-05-19 15:30:12 +00:00
if ( isset ( $_GET [ " op " ])) {
2003-11-18 19:44:36 +00:00
include_once " includes/bootstrap.inc " ;
2002-05-15 22:36:30 +00:00
include_once " includes/common.inc " ;
2003-01-07 05:56:47 +00:00
2002-12-07 11:24:16 +00:00
// Access check:
2003-10-03 06:22:12 +00:00
if (( $access_check == 0 ) || ( $user -> uid == 1 )) {
2002-05-15 22:36:30 +00:00
update_page ();
}
else {
2003-05-20 04:52:06 +00:00
print update_page_header ( " Access denied " );
2003-10-03 06:22:12 +00:00
print " Access denied. You are not authorized to access to this page. Please log in as the user with user ID #1. If you cannot log-in, you will have to edit <code>update.php</code> to by-pass this access check; in that case, open <code>update.php</code> in a text editor and follow the instructions at the top. " ;
2003-05-20 04:52:06 +00:00
print update_page_footer ();
2002-05-15 22:36:30 +00:00
}
}
else {
update_info ();
2001-11-15 22:53:06 +00:00
}
2003-01-14 20:33:42 +00:00
?>