- merged function ordering() with update_global_rank() and also optimized the queries

git-svn-id: http://piwigo.org/svn/trunk@2306 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
rvelices
2008-04-20 22:20:20 +00:00
parent 57b03a7218
commit 23fcaf6b64
5 changed files with 58 additions and 97 deletions
+3 -4
View File
@@ -57,7 +57,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();
}
// +-----------------------------------------------------------------------+
@@ -66,8 +66,8 @@ function save_categories_order($categories)
$categories = array();
$base_url = PHPWG_ROOT_PATH.'admin.php?page=cat_list';
$navigation = '<a class="" href="'.$base_url.'">';
$base_url = get_root_url().'admin.php?page=cat_list';
$navigation = '<a href="'.$base_url.'">';
$navigation.= l10n('home');
$navigation.= '</a>';
@@ -79,7 +79,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
+40 -75
View File
@@ -665,69 +665,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);
}
/**
@@ -875,43 +878,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
*
@@ -1352,7 +1318,6 @@ UPDATE '.CATEGORIES_TABLE.'
pwg_query($query);
update_uppercats();
ordering();
update_global_rank();
// status and related permissions management
-1
View File
@@ -45,7 +45,6 @@ switch ($action)
{
update_uppercats();
update_category('all');
ordering();
update_global_rank();
invalidate_user_cache();
break;
-1
View File
@@ -621,7 +621,6 @@ if (isset($_POST['submit'])
. get_elapsed_time($start,get_moment())
. ' -->' );
$start = get_moment();
ordering();
update_global_rank();
$template->append('footer_elements', '<!-- ordering categories : '
. get_elapsed_time($start, get_moment())
-1
View File
@@ -525,7 +525,6 @@ mass_inserts(
);
// refresh calculated datas
ordering();
update_global_rank();
update_category();