From 79c440d8bbd9c36778d421e6348fa43091efaadf Mon Sep 17 00:00:00 2001 From: plegall Date: Thu, 6 Jan 2005 22:16:21 +0000 Subject: [PATCH] - upgrade scripts added for releases 1.3.x - my_error function moved from admin/include/functions.php to include/functions.inc.php - because MySQL temporary tables are not always authorized on creation, use a temporary table name (with the current microsecond) on a non temporary table (in mass_updates function) - ability to retrieve distant full directories (usefull in upgrade scripts) - global variables $count_queries and $queries_time moved into global array $page - get_cat_display_name displays category names in correct order : the one given by uppercats - function setup_style simplified - default value for configuration parameter "show_nb_comments" set to false (less queries by default) git-svn-id: http://piwigo.org/svn/trunk@672 68402e56-0260-453c-a942-63ccdbb3a9ee --- admin/include/functions.php | 78 +++--- include/functions.inc.php | 43 +++- include/functions_category.inc.php | 13 +- include/functions_user.inc.php | 5 +- include/page_tail.php | 10 +- install/config.sql | 2 +- install/upgrade_1.3.0.php | 401 +++++++++++++++++++++++++++++ install/upgrade_1.3.1.php | 363 ++++++++++++++++++++++++++ install/upgrade_1.3.2.php | 362 ++++++++++++++++++++++++++ install/upgrade_1.3.3.php | 362 ++++++++++++++++++++++++++ install/upgrade_1.3.4.php | 362 ++++++++++++++++++++++++++ upgrade.php | 187 ++++++++++++++ 12 files changed, 2129 insertions(+), 59 deletions(-) create mode 100644 install/upgrade_1.3.0.php create mode 100644 install/upgrade_1.3.1.php create mode 100644 install/upgrade_1.3.2.php create mode 100644 install/upgrade_1.3.3.php create mode 100644 install/upgrade_1.3.4.php create mode 100644 upgrade.php diff --git a/admin/include/functions.php b/admin/include/functions.php index d8aa31cc9..a90b8307e 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -767,22 +767,6 @@ function get_fs_directories($path, $recursive = true) return $dirs; } -// my_error returns (or send to standard output) the message concerning the -// error occured for the last mysql query. -function my_error($header, $echo = true) -{ - $error = $header.'N°= '.mysql_errno(); - $error.= ' -->> '.mysql_error()."

\n"; - if ($echo) - { - echo $error; - } - else - { - return $error; - } -} - /** * inserts multiple lines in a table * @@ -910,18 +894,21 @@ DESCRIBE '.$tablename.' array_push($columns, $column); } } + + $temporary_tablename = $tablename.'_'.micro_seconds(); + $query = ' -CREATE TEMPORARY TABLE '.$tablename.'_temporary +CREATE TABLE '.$temporary_tablename.' ( '.implode(",\n", $columns).', PRIMARY KEY (id) ) ;'; pwg_query($query); - mass_inserts($tablename.'_temporary', $all_fields, $datas); + mass_inserts($temporary_tablename, $all_fields, $datas); // update of images table by joining with temporary table $query = ' -UPDATE '.$tablename.' AS t1, '.$tablename.'_temporary AS t2 +UPDATE '.$tablename.' AS t1, '.$temporary_tablename.' AS t2 SET '.implode("\n , ", array_map( create_function('$s', 'return "t1.$s = t2.$s";') @@ -933,7 +920,7 @@ UPDATE '.$tablename.' AS t1, '.$tablename.'_temporary AS t2 ;'; pwg_query($query); $query = ' -DROP TABLE '.$tablename.'_temporary +DROP TABLE '.$temporary_tablename.' ;'; pwg_query($query); } @@ -1193,12 +1180,23 @@ SELECT id, dir $cat_dirs[$row['id']] = $row['dir']; } - // filling $uppercats_array : to each category id the uppercats list is - // associated - $uppercats_array = array(); + // caching galleries_url + $query = ' +SELECT id, galleries_url + FROM '.SITES_TABLE.' +;'; + $result = pwg_query($query); + $galleries_url = array(); + while ($row = mysql_fetch_array($result)) + { + $galleries_url[$row['id']] = $row['galleries_url']; + } + + // categories : id, site_id, uppercats + $categories = array(); $query = ' -SELECT id, uppercats +SELECT id, uppercats, site_id FROM '.CATEGORIES_TABLE.' WHERE id IN ( '.wordwrap(implode(', ', $cat_ids), 80, "\n").') @@ -1206,25 +1204,18 @@ SELECT id, uppercats $result = pwg_query($query); while ($row = mysql_fetch_array($result)) { - $uppercats_array[$row['id']] = $row['uppercats']; + array_push($categories, $row); } - $query = ' -SELECT galleries_url - FROM '.SITES_TABLE.' - WHERE id = 1 -'; - $row = mysql_fetch_array(pwg_query($query)); - $basedir = $row['galleries_url']; - // filling $cat_fulldirs $cat_fulldirs = array(); - foreach ($uppercats_array as $cat_id => $uppercats) + foreach ($categories as $category) { - $uppercats = str_replace(',', '/', $uppercats); - $cat_fulldirs[$cat_id] = $basedir.preg_replace('/(\d+)/e', - "\$cat_dirs['$1']", - $uppercats); + $uppercats = str_replace(',', '/', $category['uppercats']); + $cat_fulldirs[$category['id']] = $galleries_url[$category['site_id']]; + $cat_fulldirs[$category['id']].= preg_replace('/(\d+)/e', + "\$cat_dirs['$1']", + $uppercats); } return $cat_fulldirs; @@ -1317,4 +1308,15 @@ function get_fs($path, $recursive = true) } return $fs; } + +/** + * stupidly returns the current microsecond since Unix epoch + */ +function micro_seconds() +{ + $t1 = explode(' ', microtime()); + $t2 = explode('.', $t1[0]); + $t2 = $t1[1].substr($t2[1], 0, 6); + return $t2; +} ?> diff --git a/include/functions.inc.php b/include/functions.inc.php index 999b4f8b8..c7f42ab0c 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -486,21 +486,31 @@ function pwg_write_debug() function pwg_query($query) { - global $conf,$count_queries,$queries_time; + global $conf,$page; $start = get_moment(); - $result = mysql_query($query); + $result = mysql_query($query) or my_error($query."\n"); $time = get_moment() - $start; - $count_queries++; - $queries_time+= $time; + + if (!isset($page['count_queries'])) + { + $page['count_queries'] = 0; + $page['queries_time'] = 0; + } + + $page['count_queries']++; + $page['queries_time']+= $time; if ($conf['show_queries']) { $output = ''; - $output.= '
['.$count_queries.'] '."\n".$query;
-    $output.= "\n".'(this query time : '.number_format( $time, 3, '.', ' ').' s)';
-    $output.= "\n".'(total SQL time  : '.number_format( $queries_time, 3, '.', ' ').' s)';
+    $output.= '
['.$page['count_queries'].'] ';
+    $output.= "\n".$query;
+    $output.= "\n".'(this query time : ';
+    $output.= number_format($time, 3, '.', ' ').' s)';
+    $output.= "\n".'(total SQL time  : ';
+    $output.= number_format($page['queries_time'], 3, '.', ' ').' s)';
     $output.= '
'; echo $output; @@ -624,4 +634,23 @@ function get_thumbnail_src($path, $tn_ext = '') return $src; } + +// my_error returns (or send to standard output) the message concerning the +// error occured for the last mysql query. +function my_error($header, $echo = true) +{ + $error = '
';
+  $error.= $header;
+  $error.= '[mysql error '.mysql_errno().'] ';
+  $error.= mysql_error();
+  $error.= '
'; + if ($echo) + { + echo $error; + } + else + { + return $error; + } +} ?> diff --git a/include/functions_category.inc.php b/include/functions_category.inc.php index 287075d43..cb532c01a 100644 --- a/include/functions_category.inc.php +++ b/include/functions_category.inc.php @@ -221,18 +221,23 @@ SELECT '.implode(',', $infos).' } $cat['comment'] = nl2br($cat['comment']); - $cat['name'] = array(); - + $names = array(); $query = ' SELECT name,id FROM '.CATEGORIES_TABLE.' WHERE id IN ('.$cat['uppercats'].') - ORDER BY id ASC ;'; $result = pwg_query($query); while($row = mysql_fetch_array($result)) { - $cat['name'][$row['id']] = $row['name']; + $names[$row['id']] = $row['name']; + } + + // category names must be in the same order than uppercats list + $cat['name'] = array(); + foreach (explode(',', $cat['uppercats']) as $cat_id) + { + $cat['name'][$cat_id] = $names[$cat_id]; } return $cat; diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php index 750f4602f..2a44c785a 100644 --- a/include/functions_user.inc.php +++ b/include/functions_user.inc.php @@ -208,10 +208,7 @@ function check_login_authorization($guest_allowed = true) function setup_style($style) { - $template_path = 'template/' ; - $template_name = $style ; - $template = new Template(PHPWG_ROOT_PATH . $template_path . $template_name); - return $template; + return new Template(PHPWG_ROOT_PATH.'template/'.$style); } function getuserdata($user) diff --git a/include/page_tail.php b/include/page_tail.php index e8b4ae349..f5c5eaf3f 100644 --- a/include/page_tail.php +++ b/include/page_tail.php @@ -42,17 +42,17 @@ if ($conf['show_gt']) { $time = get_elapsed_time($t2, get_moment()); - if (!isset($count_queries)) + if (!isset($page['count_queries'])) { - $count_queries = 0; - $queries_time = 0; + $page['count_queries'] = 0; + $page['queries_time'] = 0; } $template->assign_block_vars( 'debug', array('TIME' => $time, - 'NB_QUERIES' => $count_queries, - 'SQL_TIME' => number_format($queries_time, 3, '.', ' ').' s')); + 'NB_QUERIES' => $page['count_queries'], + 'SQL_TIME' => number_format($page['queries_time'],3,'.',' ').' s')); } // diff --git a/install/config.sql b/install/config.sql index 0a356516a..77439982e 100644 --- a/install/config.sql +++ b/install/config.sql @@ -20,7 +20,7 @@ INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('nb_image_line',' INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('nb_line_page','3','Number of rows displayed per page'); INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('recent_period','7','Period within which pictures are displayed as new (in days)'); INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('auto_expand','false','Auto expand of the category tree'); -INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('show_nb_comments','true','Show the number of comments under the thumbnails'); +INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('show_nb_comments','false','Show the number of comments under the thumbnails'); INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('use_iptc','false','Use IPTC data during database synchronization with files metadata'); INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('use_exif','true','Use EXIF data during database synchronization with files metadata'); INSERT INTO phpwebgallery_config (param,value,comment) VALUES ('show_iptc','false','Show IPTC metadata on picture.php if asked by user'); diff --git a/install/upgrade_1.3.0.php b/install/upgrade_1.3.0.php new file mode 100644 index 000000000..1beaeb651 --- /dev/null +++ b/install/upgrade_1.3.0.php @@ -0,0 +1,401 @@ +['.get_elapsed_time($last_time, $new_time).']'; +echo ' Basic database structure upgrade done
'; +flush(); +$last_time = $new_time; + +execute_sqlfile(PHPWG_ROOT_PATH.'install/config.sql', + 'phpwebgallery_', + PREFIX_TABLE); + +$queries = array( + " +UPDATE phpwebgallery_config + SET value = '".$save['prefix_thumbnail']."' + WHERE param = 'prefix_thumbnail' +;", + + " +UPDATE phpwebgallery_config + SET value = '".$save['mail_webmaster']."' + WHERE param = 'mail_webmaster' +;" + ); + +foreach ($queries as $query) +{ + $query = str_replace('phpwebgallery_', PREFIX_TABLE, $query); + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Saved configuration information restored
'; +flush(); +$last_time = $new_time; + +// filling the new column categories.uppercats +$id_uppercats = array(); + +$query = ' +SELECT id, id_uppercat + FROM '.CATEGORIES_TABLE.' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + if (!isset($row['id_uppercat']) or $row['id_uppercat'] == '') + { + $row['id_uppercat'] = 'NULL'; + } + $id_uppercats[$row['id']] = $row['id_uppercat']; +} + +$datas = array(); + +foreach (array_keys($id_uppercats) as $id) +{ + $data = array(); + $data['id'] = $id; + $uppercats = array(); + + array_push($uppercats, $id); + while (isset($id_uppercats[$id]) and $id_uppercats[$id] != 'NULL') + { + array_push($uppercats, $id_uppercats[$id]); + $id = $id_uppercats[$id]; + } + $data['uppercats'] = implode(',', array_reverse($uppercats)); + + array_push($datas, $data); +} + +$fields = array('primary' => array('id'), 'update' => array('uppercats')); +mass_updates(CATEGORIES_TABLE, $fields, $datas); + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' filling the new column categories.uppercats
'; +flush(); +$last_time = $new_time; + +// refresh calculated datas +ordering(); +update_global_rank(); +update_category(); + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Calculated data updated (categories.rank, categories.global_rank,
+categories.date_last, categories.representative_picture_id,
+categories.nb_images)
'; +flush(); +$last_time = $new_time; + +// update calculated field "images.path" +$cat_ids = array(); + +$query = ' +SELECT DISTINCT(storage_category_id) AS unique_storage_category_id + FROM '.IMAGES_TABLE.' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['unique_storage_category_id']); +} +$fulldirs = get_fulldirs($cat_ids); + +foreach ($cat_ids as $cat_id) +{ + $query = ' +UPDATE '.IMAGES_TABLE.' + SET path = CONCAT(\''.$fulldirs[$cat_id].'\',\'/\',file) + WHERE storage_category_id = '.$cat_id.' +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' new column images.path filled
'; +flush(); +$last_time = $new_time; + +// all sub-categories of private categories become private +$cat_ids = array(); + +$query = ' +SELECT id + FROM '.CATEGORIES_TABLE.' + WHERE status = \'private\' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['id']); +} + +if (count($cat_ids) > 0) +{ + $privates = get_subcat_ids($cat_ids); + + $query = ' +UPDATE '.CATEGORIES_TABLE.' + SET status = \'private\' + WHERE id IN ('.implode(',', $privates).') +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' all sub-categories of private categories become private
'; +flush(); +$last_time = $new_time; + +$infos = array( + 'user permissions and group permissions have been erased', + + 'only thumbnails prefix and webmaster mail address have been saved from +previous configuration', + + 'in include/mysql.inc.php, before +
?>
+insert +
define(\'PHPWG_INSTALLED\', true);
'
+  
+  );
+
+?>
\ No newline at end of file
diff --git a/install/upgrade_1.3.1.php b/install/upgrade_1.3.1.php
new file mode 100644
index 000000000..f6395bc45
--- /dev/null
+++ b/install/upgrade_1.3.1.php
@@ -0,0 +1,363 @@
+['.get_elapsed_time($last_time, $new_time).']';
+echo ' Basic database structure upgrade done
'; +flush(); +$last_time = $new_time; + +execute_sqlfile(PHPWG_ROOT_PATH.'install/config.sql', + 'phpwebgallery_', + PREFIX_TABLE); + +$queries = array( + " +UPDATE phpwebgallery_config + SET value = '".$save['prefix_thumbnail']."' + WHERE param = 'prefix_thumbnail' +;", + + " +UPDATE phpwebgallery_config + SET value = '".$save['mail_webmaster']."' + WHERE param = 'mail_webmaster' +;" + ); + +foreach ($queries as $query) +{ + $query = str_replace('phpwebgallery_', PREFIX_TABLE, $query); + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Saved configuration information restored
'; +flush(); +$last_time = $new_time; + +ordering(); +update_global_rank(); +update_category(); + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Calculated data updated (categories.rank, categories.global_rank,
+categories.date_last, categories.representative_picture_id,
+categories.nb_images)
'; +flush(); +$last_time = $new_time; + +// update calculated field "images.path" +$cat_ids = array(); + +$query = ' +SELECT DISTINCT(storage_category_id) AS unique_storage_category_id + FROM '.IMAGES_TABLE.' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['unique_storage_category_id']); +} +$fulldirs = get_fulldirs($cat_ids); + +foreach ($cat_ids as $cat_id) +{ + $query = ' +UPDATE '.IMAGES_TABLE.' + SET path = CONCAT(\''.$fulldirs[$cat_id].'\',\'/\',file) + WHERE storage_category_id = '.$cat_id.' +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' new column images.path filled
'; +flush(); +$last_time = $new_time; + +// all sub-categories of private categories become private +$cat_ids = array(); + +$query = ' +SELECT id + FROM '.CATEGORIES_TABLE.' + WHERE status = \'private\' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['id']); +} + +if (count($cat_ids) > 0) +{ + $privates = get_subcat_ids($cat_ids); + + $query = ' +UPDATE '.CATEGORIES_TABLE.' + SET status = \'private\' + WHERE id IN ('.implode(',', $privates).') +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' all sub-categories of private categories become private
'; +flush(); +$last_time = $new_time; + +$infos = array( + 'user permissions and group permissions have been erased', + + 'only thumbnails prefix and webmaster mail address have been saved from +previous configuration', + + 'in include/mysql.inc.php, before +
?>
+insert +
define(\'PHPWG_INSTALLED\', true);
'
+  
+  );
+
+?>
\ No newline at end of file
diff --git a/install/upgrade_1.3.2.php b/install/upgrade_1.3.2.php
new file mode 100644
index 000000000..179324265
--- /dev/null
+++ b/install/upgrade_1.3.2.php
@@ -0,0 +1,362 @@
+['.get_elapsed_time($last_time, $new_time).']';
+echo ' Basic database structure upgrade done
'; +flush(); +$last_time = $new_time; + +execute_sqlfile(PHPWG_ROOT_PATH.'install/config.sql', + 'phpwebgallery_', + PREFIX_TABLE); + +$queries = array( + " +UPDATE phpwebgallery_config + SET value = '".$save['prefix_thumbnail']."' + WHERE param = 'prefix_thumbnail' +;", + + " +UPDATE phpwebgallery_config + SET value = '".$save['mail_webmaster']."' + WHERE param = 'mail_webmaster' +;" + ); + +foreach ($queries as $query) +{ + $query = str_replace('phpwebgallery_', PREFIX_TABLE, $query); + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Saved configuration information restored
'; +flush(); +$last_time = $new_time; + +ordering(); +update_global_rank(); +update_category(); + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Calculated data updated (categories.rank, categories.global_rank,
+categories.date_last, categories.representative_picture_id,
+categories.nb_images)
'; +flush(); +$last_time = $new_time; + +// update calculated field "images.path" +$cat_ids = array(); + +$query = ' +SELECT DISTINCT(storage_category_id) AS unique_storage_category_id + FROM '.IMAGES_TABLE.' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['unique_storage_category_id']); +} +$fulldirs = get_fulldirs($cat_ids); + +foreach ($cat_ids as $cat_id) +{ + $query = ' +UPDATE '.IMAGES_TABLE.' + SET path = CONCAT(\''.$fulldirs[$cat_id].'\',\'/\',file) + WHERE storage_category_id = '.$cat_id.' +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' new column images.path filled
'; +flush(); +$last_time = $new_time; + +// all sub-categories of private categories become private +$cat_ids = array(); + +$query = ' +SELECT id + FROM '.CATEGORIES_TABLE.' + WHERE status = \'private\' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['id']); +} + +if (count($cat_ids) > 0) +{ + $privates = get_subcat_ids($cat_ids); + + $query = ' +UPDATE '.CATEGORIES_TABLE.' + SET status = \'private\' + WHERE id IN ('.implode(',', $privates).') +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' all sub-categories of private categories become private
'; +flush(); +$last_time = $new_time; + +$infos = array( + 'user permissions and group permissions have been erased', + + 'only thumbnails prefix and webmaster mail address have been saved from +previous configuration', + + 'in include/mysql.inc.php, before +
?>
+insert +
define(\'PHPWG_INSTALLED\', true);
'
+  
+  );
+
+?>
\ No newline at end of file
diff --git a/install/upgrade_1.3.3.php b/install/upgrade_1.3.3.php
new file mode 100644
index 000000000..179324265
--- /dev/null
+++ b/install/upgrade_1.3.3.php
@@ -0,0 +1,362 @@
+['.get_elapsed_time($last_time, $new_time).']';
+echo ' Basic database structure upgrade done
'; +flush(); +$last_time = $new_time; + +execute_sqlfile(PHPWG_ROOT_PATH.'install/config.sql', + 'phpwebgallery_', + PREFIX_TABLE); + +$queries = array( + " +UPDATE phpwebgallery_config + SET value = '".$save['prefix_thumbnail']."' + WHERE param = 'prefix_thumbnail' +;", + + " +UPDATE phpwebgallery_config + SET value = '".$save['mail_webmaster']."' + WHERE param = 'mail_webmaster' +;" + ); + +foreach ($queries as $query) +{ + $query = str_replace('phpwebgallery_', PREFIX_TABLE, $query); + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Saved configuration information restored
'; +flush(); +$last_time = $new_time; + +ordering(); +update_global_rank(); +update_category(); + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Calculated data updated (categories.rank, categories.global_rank,
+categories.date_last, categories.representative_picture_id,
+categories.nb_images)
'; +flush(); +$last_time = $new_time; + +// update calculated field "images.path" +$cat_ids = array(); + +$query = ' +SELECT DISTINCT(storage_category_id) AS unique_storage_category_id + FROM '.IMAGES_TABLE.' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['unique_storage_category_id']); +} +$fulldirs = get_fulldirs($cat_ids); + +foreach ($cat_ids as $cat_id) +{ + $query = ' +UPDATE '.IMAGES_TABLE.' + SET path = CONCAT(\''.$fulldirs[$cat_id].'\',\'/\',file) + WHERE storage_category_id = '.$cat_id.' +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' new column images.path filled
'; +flush(); +$last_time = $new_time; + +// all sub-categories of private categories become private +$cat_ids = array(); + +$query = ' +SELECT id + FROM '.CATEGORIES_TABLE.' + WHERE status = \'private\' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['id']); +} + +if (count($cat_ids) > 0) +{ + $privates = get_subcat_ids($cat_ids); + + $query = ' +UPDATE '.CATEGORIES_TABLE.' + SET status = \'private\' + WHERE id IN ('.implode(',', $privates).') +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' all sub-categories of private categories become private
'; +flush(); +$last_time = $new_time; + +$infos = array( + 'user permissions and group permissions have been erased', + + 'only thumbnails prefix and webmaster mail address have been saved from +previous configuration', + + 'in include/mysql.inc.php, before +
?>
+insert +
define(\'PHPWG_INSTALLED\', true);
'
+  
+  );
+
+?>
\ No newline at end of file
diff --git a/install/upgrade_1.3.4.php b/install/upgrade_1.3.4.php
new file mode 100644
index 000000000..179324265
--- /dev/null
+++ b/install/upgrade_1.3.4.php
@@ -0,0 +1,362 @@
+['.get_elapsed_time($last_time, $new_time).']';
+echo ' Basic database structure upgrade done
'; +flush(); +$last_time = $new_time; + +execute_sqlfile(PHPWG_ROOT_PATH.'install/config.sql', + 'phpwebgallery_', + PREFIX_TABLE); + +$queries = array( + " +UPDATE phpwebgallery_config + SET value = '".$save['prefix_thumbnail']."' + WHERE param = 'prefix_thumbnail' +;", + + " +UPDATE phpwebgallery_config + SET value = '".$save['mail_webmaster']."' + WHERE param = 'mail_webmaster' +;" + ); + +foreach ($queries as $query) +{ + $query = str_replace('phpwebgallery_', PREFIX_TABLE, $query); + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Saved configuration information restored
'; +flush(); +$last_time = $new_time; + +ordering(); +update_global_rank(); +update_category(); + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' Calculated data updated (categories.rank, categories.global_rank,
+categories.date_last, categories.representative_picture_id,
+categories.nb_images)
'; +flush(); +$last_time = $new_time; + +// update calculated field "images.path" +$cat_ids = array(); + +$query = ' +SELECT DISTINCT(storage_category_id) AS unique_storage_category_id + FROM '.IMAGES_TABLE.' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['unique_storage_category_id']); +} +$fulldirs = get_fulldirs($cat_ids); + +foreach ($cat_ids as $cat_id) +{ + $query = ' +UPDATE '.IMAGES_TABLE.' + SET path = CONCAT(\''.$fulldirs[$cat_id].'\',\'/\',file) + WHERE storage_category_id = '.$cat_id.' +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' new column images.path filled
'; +flush(); +$last_time = $new_time; + +// all sub-categories of private categories become private +$cat_ids = array(); + +$query = ' +SELECT id + FROM '.CATEGORIES_TABLE.' + WHERE status = \'private\' +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + array_push($cat_ids, $row['id']); +} + +if (count($cat_ids) > 0) +{ + $privates = get_subcat_ids($cat_ids); + + $query = ' +UPDATE '.CATEGORIES_TABLE.' + SET status = \'private\' + WHERE id IN ('.implode(',', $privates).') +;'; + pwg_query($query); +} + +$new_time = get_moment(); +echo '
['.get_elapsed_time($last_time, $new_time).']';
+echo ' all sub-categories of private categories become private
'; +flush(); +$last_time = $new_time; + +$infos = array( + 'user permissions and group permissions have been erased', + + 'only thumbnails prefix and webmaster mail address have been saved from +previous configuration', + + 'in include/mysql.inc.php, before +
?>
+insert +
define(\'PHPWG_INSTALLED\', true);
'
+  
+  );
+
+?>
\ No newline at end of file
diff --git a/upgrade.php b/upgrade.php
new file mode 100644
index 000000000..748832617
--- /dev/null
+++ b/upgrade.php
@@ -0,0 +1,187 @@
+'."\n";
+flush();
+// +-----------------------------------------------------------------------+
+// |                              functions                                |
+// +-----------------------------------------------------------------------+
+
+/**
+ * loads an sql file and executes all queries
+ *
+ * Before executing a query, $replaced is... replaced by $replacing. This is
+ * useful when the SQL file contains generic words. Drop table queries are
+ * not executed.
+ *
+ * @param string filepath
+ * @param string replaced
+ * @param string replacing
+ * @return void
+ */
+function execute_sqlfile($filepath, $replaced, $replacing)
+{
+  $sql_lines = file($filepath);
+  $query = '';
+  foreach ($sql_lines as $sql_line)
+  {
+    $sql_line = trim($sql_line);
+    if (preg_match('/(^--|^$)/', $sql_line))
+    {
+      continue;
+    }
+    $query.= ' '.$sql_line;
+    // if we reached the end of query, we execute it and reinitialize the
+    // variable "query"
+    if (preg_match('/;$/', $sql_line))
+    {
+      $query = trim($query);
+      $query = str_replace($replaced, $replacing, $query);
+      // we don't execute "DROP TABLE" queries
+      if (!preg_match('/^DROP TABLE/i', $query))
+      {
+        mysql_query($query);
+      }
+      $query = '';
+    }
+  }
+}
+// +-----------------------------------------------------------------------+
+// |                        template initialization                        |
+// +-----------------------------------------------------------------------+
+$template = setup_style('default');
+$template->set_filenames(array('upgrade'=>'upgrade.tpl'));
+$template->assign_vars(array('RELEASE'=>PHPWG_VERSION));
+// +-----------------------------------------------------------------------+
+// |                          versions upgradable                          |
+// +-----------------------------------------------------------------------+
+$versions = array();
+$path = PHPWG_ROOT_PATH.'install';
+if ($contents = opendir($path))
+{
+  while (($node = readdir($contents)) !== false)
+  {
+    if (is_file($path.'/'.$node)
+        and preg_match('/^upgrade_(.*?)\.php$/', $node, $match))
+    {
+      array_push($versions, $match[1]);
+    }
+  }
+}
+natcasesort($versions);
+// +-----------------------------------------------------------------------+
+// |                            upgrade choice                             |
+// +-----------------------------------------------------------------------+
+if (!isset($_GET['version']))
+{
+  $template->assign_block_vars('choices', array());
+  foreach ($versions as $version)
+  {
+    $template->assign_block_vars(
+      'choices.choice',
+      array(
+        'URL' => PHPWG_ROOT_PATH.'upgrade.php?version='.$version,
+        'VERSION' => $version
+        ));
+  }
+}
+// +-----------------------------------------------------------------------+
+// |                            upgrade launch                             |
+// +-----------------------------------------------------------------------+
+else
+{
+  $upgrade_file = $path.'/upgrade_'.$_GET['version'].'.php';
+  if (is_file($upgrade_file))
+  {
+    $page['upgrade_start'] = get_moment();
+    include($upgrade_file);
+    $page['upgrade_end'] = get_moment();
+
+    $template->assign_block_vars(
+      'upgrade',
+      array(
+        'VERSION' => $_GET['version'],
+        'TOTAL_TIME' => get_elapsed_time($page['upgrade_start'],
+                                         $page['upgrade_end']),
+        'SQL_TIME' => number_format($page['queries_time'], 3, '.', ' ').' s',
+        'NB_QUERIES' => $page['count_queries']
+        ));
+
+    if (!isset($infos))
+    {
+      $infos = array();
+    }
+    array_push(
+      $infos,
+      '[security] delete files "upgrade.php", "install.php" and "install"
+directory');
+    
+    $template->assign_block_vars('upgrade.infos', array());
+    
+    foreach ($infos as $info)
+    {
+      $template->assign_block_vars('upgrade.infos.info',
+                                   array('CONTENT' => $info));
+    }
+  }
+  else
+  {
+    die('Hacking attempt');
+  }
+}
+// +-----------------------------------------------------------------------+
+// |                          sending html code                            |
+// +-----------------------------------------------------------------------+
+$template->pparse('upgrade');
+?>
\ No newline at end of file