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.= ''; +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 '['.$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
['.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