aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrvelices <rv-github@modusoptimus.com>2008-04-20 22:25:40 +0000
committerrvelices <rv-github@modusoptimus.com>2008-04-20 22:25:40 +0000
commitcd30335df7f2a4c3b15c5f2ba181dc1b0444f00a (patch)
tree08ed00c2786c92b9b7b786f668ebd4816113cca5
parente74943520a928e32a2dd9df1049174594abf89a9 (diff)
merge r 2306 from trunk to branch-1_7
- merged function ordering() with update_global_rank() and also optimized the queries git-svn-id: http://piwigo.org/svn/branches/branch-1_7@2307 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r--admin/cat_list.php5
-rw-r--r--admin/include/functions.php117
-rw-r--r--admin/maintenance.php1
-rw-r--r--admin/site_update.php11
-rw-r--r--install/upgrade_1.3.1.php21
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