diff options
-rw-r--r-- | admin/cat_list.php | 5 | ||||
-rw-r--r-- | admin/include/functions.php | 117 | ||||
-rw-r--r-- | admin/maintenance.php | 1 | ||||
-rw-r--r-- | admin/site_update.php | 11 | ||||
-rw-r--r-- | install/upgrade_1.3.1.php | 21 |
5 files changed, 58 insertions, 97 deletions
diff --git a/admin/cat_list.php b/admin/cat_list.php index aac736a21..2b805b105 100644 --- a/admin/cat_list.php +++ b/admin/cat_list.php @@ -60,7 +60,7 @@ function save_categories_order($categories) $fields = array('primary' => array('id'), 'update' => array('rank')); mass_updates(CATEGORIES_TABLE, $fields, $datas); - update_global_rank(@$_GET['parent_id']); + update_global_rank(); } // +-----------------------------------------------------------------------+ @@ -82,7 +82,6 @@ if (isset($_GET['delete']) and is_numeric($_GET['delete']) and !is_adviser()) { delete_categories(array($_GET['delete'])); array_push($page['infos'], l10n('cat_virtual_deleted')); - ordering(); update_global_rank(); } // request to add a virtual category @@ -294,7 +293,7 @@ foreach ($categories as $category) } } // Add a link to Page bottom only if needed (10 or more categories) -if ( isset($category['rank']) and $category['rank'] > 9 ) +if ( isset($category['rank']) and $category['rank'] > 9 ) { $template->assign_block_vars('eop_link', array('ICON'=>'Displayed')); } diff --git a/admin/include/functions.php b/admin/include/functions.php index c7f2acde7..64ad4d93d 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -683,69 +683,72 @@ function mass_updates($tablename, $dbfields, $datas) } /** - * updates the global_rank of categories under the given id_uppercat - * - * @param int id_uppercat + * order categories (update categories.rank and global_rank database fields) + * so that rank field are consecutive integers starting at 1 for each child * @return void */ -function update_global_rank($id_uppercat = 'all') +function update_global_rank() { $query = ' -SELECT id,rank +SELECT id, if(id_uppercat is null,\'\',id_uppercat) AS id_uppercat, uppercats, rank, global_rank FROM '.CATEGORIES_TABLE.' + ORDER BY id_uppercat,rank,name ;'; - $result = pwg_query($query); - $ranks_array = array(); - while ($row = mysql_fetch_array($result)) - { - $ranks_array[$row['id']] = $row['rank']; - } - // which categories to update ? - $uppercats_array = array(); + $cat_map = array(); + + $current_rank = 0; + $current_uppercat = ''; - $query = ' -SELECT id,uppercats - FROM '.CATEGORIES_TABLE; - if (is_numeric($id_uppercat)) - { - $query.= ' - WHERE uppercats REGEXP \'(^|,)'.$id_uppercat.'(,|$)\' - AND id != '.$id_uppercat.' -'; - } - $query.= ' -;'; $result = pwg_query($query); while ($row = mysql_fetch_array($result)) { - $uppercats_array[$row['id']] = $row['uppercats']; + if ($row['id_uppercat'] != $current_uppercat) + { + $current_rank = 0; + $current_uppercat = $row['id_uppercat']; + } + ++$current_rank; + $cat = + array( + 'rank' => $current_rank, + 'rank_changed' =>$current_rank!=$row['rank'], + 'global_rank' => $row['global_rank'], + 'uppercats' => $row['uppercats'], + ); + $cat_map[ $row['id'] ] = $cat; } $datas = array(); - foreach ($uppercats_array as $id => $uppercats) + + foreach( $cat_map as $id=>$cat ) { - array_push( - $datas, - array( - 'id' => $id, - 'global_rank' => preg_replace( + $new_global_rank = preg_replace( '/(\d+)/e', - "\$ranks_array['$1']", - str_replace(',', '.', $uppercats) - ), - ) - ); + "\$cat_map['$1']['rank']", + str_replace(',', '.', $cat['uppercats'] ) + ); + if ( $cat['rank_changed'] + or $new_global_rank!=$cat['global_rank'] + ) + { + $datas[] = array( + 'id' => $id, + 'rank' => $cat['rank'], + 'global_rank' => $new_global_rank, + ); + } } mass_updates( CATEGORIES_TABLE, array( 'primary' => array('id'), - 'update' => array('global_rank') + 'update' => array('rank', 'global_rank') ), $datas ); + return count($datas); } /** @@ -894,43 +897,6 @@ SELECT image_id } /** - * order categories (update categories.rank and global_rank database fields) - * - * the purpose of this function is to give a rank for all categories - * (insides its sub-category), even the newer that have none at te - * beginning. For this, ordering function selects all categories ordered by - * rank ASC then name ASC for each uppercat. - * - * @returns void - */ -function ordering() -{ - $current_rank = 0; - $current_uppercat = ''; - - $query = ' -SELECT id, if(id_uppercat is null,\'\',id_uppercat) AS id_uppercat - FROM '.CATEGORIES_TABLE.' - ORDER BY id_uppercat,rank,name -;'; - $result = pwg_query($query); - $datas = array(); - while ($row = mysql_fetch_array($result)) - { - if ($row['id_uppercat'] != $current_uppercat) - { - $current_rank = 0; - $current_uppercat = $row['id_uppercat']; - } - $data = array('id' => $row['id'], 'rank' => ++$current_rank); - array_push($datas, $data); - } - - $fields = array('primary' => array('id'), 'update' => array('rank')); - mass_updates(CATEGORIES_TABLE, $fields, $datas); -} - -/** * returns the fulldir for each given category id * * @param array cat_ids @@ -1370,7 +1336,6 @@ UPDATE '.CATEGORIES_TABLE.' pwg_query($query); update_uppercats(); - ordering(); update_global_rank(); // status and related permissions management diff --git a/admin/maintenance.php b/admin/maintenance.php index 7ee5f84e5..f44797b7d 100644 --- a/admin/maintenance.php +++ b/admin/maintenance.php @@ -48,7 +48,6 @@ switch ($action) { update_uppercats(); update_category('all'); - ordering(); update_global_rank(); invalidate_user_cache(); break; diff --git a/admin/site_update.php b/admin/site_update.php index fc69a940b..df05e11eb 100644 --- a/admin/site_update.php +++ b/admin/site_update.php @@ -242,7 +242,7 @@ SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_id // If $_POST['subcats-included'] != 1 ("Search in subcategories" is unchecked) // $db_fulldirs doesn't include any subdirectories and $fs_fulldirs does - // So $fs_fulldirs will be limited to the selected basedir + // So $fs_fulldirs will be limited to the selected basedir // (if that one is in $fs_fulldirs) if (!isset($_POST['subcats-included']) or $_POST['subcats-included'] != 1) { @@ -253,7 +253,7 @@ SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_id // print_r( array_diff($fs_fulldirs, array_keys($db_fulldirs)) ); echo "<br>"; // die('That\'s why dirs or files synchronizations were duplicating cats.'); - $inserts = array(); + $inserts = array(); // new categories are the directories not present yet in the database foreach (array_diff($fs_fulldirs, array_keys($db_fulldirs)) as $fulldir) { @@ -670,7 +670,6 @@ if (isset($_POST['submit']) echo get_elapsed_time($start,get_moment()); echo ' -->'."\n"; $start = get_moment(); - ordering(); update_global_rank(); echo '<!-- ordering categories : '; echo get_elapsed_time($start, get_moment()); @@ -828,14 +827,14 @@ SELECT id array_push($has_high_images, $row['id']); } } - + foreach ( $files as $id=>$file ) { $data = $site_reader->get_element_metadata( $file, in_array($id, $has_high_images) ); - + if ( is_array($data) ) { $data['date_metadata_update'] = CURRENT_DATE; @@ -872,7 +871,7 @@ SELECT id if (count($datas) > 0) { // echo '<pre>', print_r($datas); echo '</pre>'; - + mass_updates( IMAGES_TABLE, // fields diff --git a/install/upgrade_1.3.1.php b/install/upgrade_1.3.1.php index aa2421eba..e27e3ad40 100644 --- a/install/upgrade_1.3.1.php +++ b/install/upgrade_1.3.1.php @@ -71,7 +71,7 @@ ALTER TABLE phpwebgallery_categories ALTER TABLE phpwebgallery_categories ADD COLUMN commentable enum('true','false') NOT NULL default 'true' ;", - + " ALTER TABLE phpwebgallery_categories ADD COLUMN global_rank varchar(255) default NULL @@ -91,7 +91,7 @@ ALTER TABLE phpwebgallery_comments UPDATE phpwebgallery_comments SET date_temp = date ;", - + " ALTER TABLE phpwebgallery_comments CHANGE COLUMN date date datetime NOT NULL default '0000-00-00 00:00:00' @@ -126,7 +126,7 @@ ALTER TABLE phpwebgallery_history UPDATE phpwebgallery_history SET date_temp = date ;", - + " ALTER TABLE phpwebgallery_history CHANGE COLUMN date date datetime NOT NULL default '0000-00-00 00:00:00' @@ -207,7 +207,7 @@ ALTER TABLE phpwebgallery_images ALTER TABLE phpwebgallery_images ADD INDEX images_i5 (date_creation) ;", - + " ALTER TABLE phpwebgallery_sessions DROP COLUMN ip @@ -222,7 +222,7 @@ ALTER TABLE phpwebgallery_sessions UPDATE phpwebgallery_sessions SET expiration_temp = expiration ;", - + " ALTER TABLE phpwebgallery_sessions CHANGE COLUMN expiration expiration datetime NOT NULL default '0000-00-00 00:00:00' @@ -237,7 +237,7 @@ UPDATE phpwebgallery_sessions ALTER TABLE phpwebgallery_sessions DROP COLUMN expiration_temp ;", - + " ALTER TABLE phpwebgallery_sites DROP INDEX galleries_url @@ -251,7 +251,7 @@ ALTER TABLE phpwebgallery_sites " DROP TABLE phpwebgallery_user_category ;", - + " ALTER TABLE phpwebgallery_users DROP COLUMN long_period @@ -276,7 +276,7 @@ ALTER TABLE phpwebgallery_users ALTER TABLE phpwebgallery_users ADD UNIQUE users_ui1 (username) ;", - + " CREATE TABLE phpwebgallery_rate ( user_id smallint(5) unsigned NOT NULL default '0', @@ -342,7 +342,7 @@ $indexes_of = array( foreach (array_keys($indexes_of) as $table) { $existing_indexes = array(); - + $query = ' SHOW INDEX FROM '.PREFIX_TABLE.$table.' @@ -529,7 +529,6 @@ mass_inserts( ); // refresh calculated datas -ordering(); update_global_rank(); update_category(); @@ -587,7 +586,7 @@ $page['infos'] = array_merge( $page['infos'], array( 'all sub-categories of private categories become private', - + 'user permissions and group permissions have been erased', 'only thumbnails prefix and webmaster mail address have been saved from |