- on picture.php, related categories under the element are displayed in

global_rank order

- when adding a new virtual category, initializes its global_rank

- bug fixed : in admin/cat_list, false next rank

- in admin/cat_modify, complete directory is calculated only if category is
  not virtual

- admin/picture_modify rewritten : graphically nearer to admin/cat_modify,
  virtual associations are back

- update_category partially rewritten : take an array of categories in
  parameter, becomes optionnaly recursive, use the set_random_representant
  function, set a random representant for categories with elements and no
  representant

- bug fixed : on a search results screen, elements belonging to more than 1
  category were shown more than once

- bug fixed : in admin/cat_modify, changing a value in a textefield and
  hitting enter was setting a new random representant


git-svn-id: http://piwigo.org/svn/trunk@635 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
plegall
2004-12-05 21:28:40 +00:00
parent e4ce82fc27
commit 9064686d99
10 changed files with 313 additions and 303 deletions
+38 -15
View File
@@ -62,16 +62,7 @@ else if (isset($_POST['submit']))
$parent_id = !empty($_GET['parent_id'])?$_GET['parent_id']:'NULL';
// As we don't create a virtual category every day, let's do (far) too
// much queries
if ($parent_id != 'NULL')
{
$query = '
SELECT uppercats
FROM '.CATEGORIES_TABLE.'
WHERE id = '.$parent_id.'
;';
$parent_uppercats = array_pop(mysql_fetch_array(pwg_query($query)));
}
// we have then to add the virtual category
$query = '
INSERT INTO '.CATEGORIES_TABLE.'
@@ -87,16 +78,41 @@ SELECT MAX(id)
FROM '.CATEGORIES_TABLE.'
;';
$my_id = array_pop(mysql_fetch_array(pwg_query($query)));
if ($parent_id != 'NULL')
{
$query = '
SELECT uppercats, global_rank
FROM '.CATEGORIES_TABLE.'
WHERE id = '.$parent_id.'
;';
$result = pwg_query($query);
$row = mysql_fetch_array($result);
$parent_uppercats = $row['uppercats'];
$parent_global_rank = $row['global_rank'];
}
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET uppercats = \'';
';
if (!empty($parent_uppercats))
{
$query.= $parent_uppercats.',';
$query.= " SET uppercats = CONCAT('".$parent_uppercats."',',',id)";
}
$query.= $my_id;
$query.= '\'
else
{
$query.= ' SET uppercats = id';
}
if (!empty($parent_global_rank))
{
$query.= " , global_rank = CONCAT('".$parent_global_rank."','.',rank)";
}
else
{
$query.= ' , uppercats = id';
}
$query.= '
WHERE id = '.$my_id.'
;';
pwg_query($query);
@@ -276,9 +292,16 @@ reset($categories);
// +-----------------------------------------------------------------------+
$template->set_filenames(array('categories'=>'admin/cat_list.tpl'));
$form_action = PHPWG_ROOT_PATH.'admin.php?page=cat_list';
if (isset($_GET['parent_id']))
{
$form_action.= '&parent_id='.$_GET['parent_id'];
}
$template->assign_vars(array(
'CATEGORIES_NAV'=>$navigation,
'NEXT_RANK'=>count($categories)+1,
'NEXT_RANK'=>max(array_keys($categories))+1,
'F_ACTION'=>$form_action,
'L_ADD_VIRTUAL'=>$lang['cat_add'],
'L_SUBMIT'=>$lang['submit'],
+8 -5
View File
@@ -101,12 +101,12 @@ foreach (array('comment','dir','site_id') as $nullable)
}
// Navigation path
$current_category = get_cat_info($_GET['cat_id']);
$url = PHPWG_ROOT_PATH.'admin.php?page=cat_list&parent_id=';
$navigation = '<a class="" href="'.add_session_id(PHPWG_ROOT_PATH.'admin.php?page=cat_list').'">';
$navigation.= $lang['home'].'</a> <span style="font-size:15px">&rarr;</span>';
$navigation.= get_cat_display_name(
$current_category['name'],
$navigation.= get_cat_display_name_cache(
$category['uppercats'],
' <span style="font-size:15px">&rarr;</span>',
$url);
@@ -136,7 +136,6 @@ $template->assign_vars(array(
'CATEGORIES_NAV'=>$navigation,
'CAT_NAME'=>$category['name'],
'CAT_COMMENT'=>$category['comment'],
'CATEGORY_DIR'=>preg_replace('/\/$/', '', get_complete_dir($category['id'])),
$status=>'checked="checked"',
$lock=>'checked="checked"',
@@ -184,7 +183,11 @@ SELECT tn_ext,path
if (!empty($category['dir']))
{
$template->assign_block_vars('storage' ,array());
$template->assign_block_vars(
'storage',
array('CATEGORY_DIR'=>preg_replace('/\/$/',
'',
get_complete_dir($category['id']))));
$template->assign_block_vars('upload' ,array());
}
+76 -42
View File
@@ -441,36 +441,74 @@ function check_favorites( $user_id )
}
/**
* updates calculated informations about a category : date_last and
* updates calculated informations about a set of categories : date_last and
* nb_images. It also verifies that the representative picture is really
* linked to the category. Recursive.
* linked to the category. Optionnaly recursive.
*
* @param mixed category id
* @param boolean recursive
* @returns void
*/
function update_category($id = 'all')
function update_category($ids = 'all', $recursive = false)
{
// retrieving all categories to update
$cat_ids = array();
$query = '
SELECT id
FROM '.CATEGORIES_TABLE;
if (is_array($ids))
{
if ($recursive)
{
foreach ($ids as $num => $id)
{
if ($num == 0)
{
$query.= '
WHERE ';
}
else
{
$query.= '
OR ';
}
$query.= 'uppercats REGEXP \'(^|,)'.$id.'(,|$)\'';
}
}
else
{
$query.= '
WHERE id IN ('.implode(',', $ids).')';
}
}
$query.= '
;';
$result = pwg_query( $query );
while ( $row = mysql_fetch_array( $result ) )
{
array_push($cat_ids, $row['id']);
}
$cat_ids = array_unique($cat_ids);
if (count($cat_ids) == 0)
{
return false;
}
// calculate informations about categories retrieved
$query = '
SELECT category_id,
COUNT(image_id) AS nb_images,
MAX(date_available) AS date_last
FROM '.IMAGES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id = image_id';
if (is_numeric($id))
{
$query.= '
WHERE uppercats REGEXP \'(^|,)'.$id.'(,|$)\'';
}
$query.= '
FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id = image_id
WHERE category_id IN ('.implode(',', $cat_ids).')
GROUP BY category_id
;';
$result = pwg_query( $query );
';
$result = pwg_query($query);
$datas = array();
while ( $row = mysql_fetch_array( $result ) )
{
array_push($cat_ids, $row['category_id']);
array_push($datas, array('id' => $row['category_id'],
'date_last' => $row['date_last'],
'nb_images' => $row['nb_images']));
@@ -479,8 +517,16 @@ SELECT category_id,
'update' => array('date_last', 'nb_images'));
mass_updates(CATEGORIES_TABLE, $fields, $datas);
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET representative_picture_id = NULL
WHERE nb_images = 0
;';
pwg_query($query);
if (count($cat_ids) > 0)
{
$categories = array();
// find all categories where the setted representative is not possible
$query = '
SELECT id
@@ -493,35 +539,23 @@ SELECT id
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
// set a new representative element for this category
$query = '
SELECT image_id
FROM '.IMAGE_CATEGORY_TABLE.'
WHERE category_id = '.$row['id'].'
ORDER BY RAND()
LIMIT 0,1
;';
$sub_result = pwg_query($query);
if (mysql_num_rows($sub_result) > 0)
{
list($representative) = mysql_fetch_array($sub_result);
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET representative_picture_id = '.$representative.'
WHERE id = '.$row['id'].'
;';
pwg_query($query);
}
else
{
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET representative_picture_id = NULL
WHERE id = '.$row['id'].'
;';
pwg_query($query);
}
array_push($categories, $row['id']);
}
// find categories with elements and with no representant
$query = '
SELECT id
FROM '.CATEGORIES_TABLE.'
WHERE representative_picture_id IS NULL
AND nb_images != 0
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($categories, $row['id']);
}
$categories = array_unique($categories);
set_random_representant($categories);
}
}
+67 -149
View File
@@ -83,110 +83,47 @@ if (isset($_POST['submit']))
$query.= ' WHERE id = '.$_GET['image_id'];
$query.= ';';
pwg_query($query);
// make the picture representative of a category ?
}
// associate the element to other categories than its storage category
if (isset($_POST['associate'])
and isset($_POST['cat_dissociated'])
and count($_POST['cat_dissociated']) > 0)
{
$datas = array();
foreach ($_POST['cat_dissociated'] as $category_id)
{
array_push($datas, array('image_id' => $_GET['image_id'],
'category_id' => $category_id));
}
mass_inserts(IMAGE_CATEGORY_TABLE, array('image_id', 'category_id'), $datas);
update_category($_POST['cat_dissociated']);
}
// dissociate the element from categories (but not from its storage category)
if (isset($_POST['dissociate'])
and isset($_POST['cat_associated'])
and count($_POST['cat_associated']) > 0)
{
$query = '
SELECT DISTINCT(category_id) as category_id,representative_picture_id
FROM '.IMAGE_CATEGORY_TABLE.' AS ic, '.CATEGORIES_TABLE.' AS c
WHERE c.id = ic.category_id
AND image_id = '.$_GET['image_id'].'
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
// if the user ask the picture to be the representative picture of its
// category, the category is updated in the database (without wondering
// if this picture was already the representative one)
if (isset($_POST['representative-'.$row['category_id']]))
{
$query = 'UPDATE '.CATEGORIES_TABLE;
$query.= ' SET representative_picture_id = '.$_GET['image_id'];
$query.= ' WHERE id = '.$row['category_id'];
$query.= ';';
pwg_query($query);
}
// if the user ask this picture to be not any more the representative,
// we have to set the representative_picture_id of this category to NULL
else if (isset($row['representative_picture_id'])
and $row['representative_picture_id'] == $_GET['image_id'])
{
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET representative_picture_id = NULL
WHERE id = '.$row['category_id'].'
;';
pwg_query($query);
}
}
$associate_or_dissociate = false;
// associate with a new category ?
if ($_POST['associate'] != '-1' and $_POST['associate'] != '')
{
// does the uppercat id exists in the database ?
if (!is_numeric($_POST['associate']))
{
array_push($errors, $lang['cat_unknown_id']);
}
else
{
$query = '
SELECT id
FROM '.CATEGORIES_TABLE.'
WHERE id = '.$_POST['associate'].'
;';
if (mysql_num_rows(pwg_query($query)) == 0)
array_push($errors, $lang['cat_unknown_id']);
}
}
if ($_POST['associate'] != '-1'
and $_POST['associate'] != ''
and count($errors) == 0)
{
$query = '
INSERT INTO '.IMAGE_CATEGORY_TABLE.'
(category_id,image_id)
VALUES
('.$_POST['associate'].','.$_GET['image_id'].')
;';
pwg_query($query);
$associate_or_dissociate = true;
update_category($_POST['associate']);
}
// dissociate any category ?
// retrieving all the linked categories
$query = '
SELECT DISTINCT(category_id) as category_id
FROM '.IMAGE_CATEGORY_TABLE.'
WHERE image_id = '.$_GET['image_id'].'
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
if (isset($_POST['dissociate-'.$row['category_id']]))
{
$query = '
DELETE FROM '.IMAGE_CATEGORY_TABLE.'
WHERE image_id = '.$_GET['image_id'].'
AND category_id = '.$row['category_id'].'
;';
pwg_query($query);
$associate_or_dissociate = true;
update_category($row['category_id']);
}
}
if ($associate_or_dissociate)
{
synchronize_all_users();
}
AND category_id IN ('.implode(',',$_POST['cat_associated'] ).')
';
pwg_query($query);
update_category($_POST['cat_associated']);
}
// retrieving direct information about picture
$query = '
SELECT *
FROM '.IMAGES_TABLE.'
WHERE id = '.$_GET['image_id'].'
SELECT i.*, c.uppercats
FROM '.IMAGES_TABLE.' AS i
INNER JOIN '.CATEGORIES_TABLE.' AS c ON i.storage_category_id = c.id
WHERE i.id = '.$_GET['image_id'].'
;';
$row = mysql_fetch_array(pwg_query($query));
$storage_category_id = $row['storage_category_id'];
if (empty($row['name']))
{
$title = str_replace('_', ' ',get_filename_wo_extension($row['file']));
@@ -196,38 +133,23 @@ else
$title = $row['name'];
}
// Navigation path
$current_category = get_cat_info($row['storage_category_id']);
$dir_path = get_cat_display_name($current_category['name'], '-&gt;', '');
$thumbnail_url = get_thumbnail_src($row['path'], @$row['tn_ext']);
$url_img = PHPWG_ROOT_PATH.'picture.php?image_id='.$_GET['image_id'];
$url_img .= '&amp;cat='.$row['storage_category_id'];
$date = isset($_POST['date_creation']) && empty($errors)
?$_POST['date_creation']:date_convert_back(@$row['date_creation']);
// retrieving all the linked categories
$query = '
SELECT DISTINCT(category_id) AS category_id,status,visible
,representative_picture_id
FROM '.IMAGE_CATEGORY_TABLE.','.CATEGORIES_TABLE.'
WHERE image_id = '.$_GET['image_id'].'
AND category_id = id
;';
$result = pwg_query($query);
$categories = '';
while ($cat_row = mysql_fetch_array($result))
{
$cat_infos = get_cat_info($cat_row['category_id']);
$cat_name = get_cat_display_name($cat_infos['name'], ' &gt; ', '');
$categories.='<option value="'.$cat_row['category_id'].'">'.$cat_name.'</option>';
}
?$_POST['date_creation']:date_convert_back(@$row['date_creation']);
$storage_category = get_cat_display_name_cache($row['uppercats'],
' &rarr; ',
'',
false);
//----------------------------------------------------- template initialization
$template->set_filenames(array('picture_modify'=>'admin/picture_modify.tpl'));
$template->assign_vars(array(
'TITLE_IMG'=>$title,
'DIR_IMG'=>$dir_path,
'STORAGE_CATEGORY_IMG'=>$storage_category,
'PATH_IMG'=>$row['path'],
'FILE_IMG'=>$row['file'],
'TN_URL_IMG'=>$thumbnail_url,
'URL_IMG'=>add_session_id($url_img),
@@ -241,7 +163,6 @@ $template->assign_vars(array(
'CREATION_DATE_IMG'=>$date,
'KEYWORDS_IMG'=>isset($_POST['keywords'])?$_POST['keywords']:@$row['keywords'],
'COMMENT_IMG'=>isset($_POST['comment'])?$_POST['comment']:@$row['comment'],
'ASSOCIATED_CATEGORIES'=>$categories,
'L_UPLOAD_NAME'=>$lang['upload_name'],
'L_DEFAULT'=>$lang['default'],
@@ -257,50 +178,47 @@ $template->assign_vars(array(
'L_DISSOCIATE'=>$lang['dissociate'],
'L_INFOIMAGE_ASSOCIATE'=>$lang['infoimage_associate'],
'L_SUBMIT'=>$lang['submit'],
'L_RESET'=>$lang['reset'],
'L_CAT_ASSOCIATED'=>$lang['cat_associated'],
'L_CAT_DISSOCIATED'=>$lang['cat_dissociated'],
'L_PATH'=>$lang['path'],
'L_STORAGE_CATEGORY'=>$lang['storage_category'],
'F_ACTION'=>add_session_id(PHPWG_ROOT_PATH.'admin.php?'.$_SERVER['QUERY_STRING'])
));
//-------------------------------------------------------------- errors display
if (sizeof($errors) != 0)
if (count($errors) != 0)
{
$template->assign_block_vars('errors',array());
for ($i = 0; $i < sizeof($errors); $i++)
foreach ($errors as $error)
{
$template->assign_block_vars('errors.error',array('ERROR'=>$errors[$i]));
$template->assign_block_vars('errors.error',array('ERROR'=>$error));
}
}
// if there are linked category other than the storage category, we show
// propose the dissociate text
if (mysql_num_rows($result) > 0)
{
//$vtp->addSession($sub, 'dissociate');
//$vtp->closeSession($sub, 'dissociate');
}
// associate to another category ?
//
// We only show a List Of Values if the number of categories is less than
// $conf['max_LOV_categories']
$query = 'SELECT COUNT(id) AS nb_total_categories';
$query.= ' FROM '.CATEGORIES_TABLE.';';
$row = mysql_fetch_array(pwg_query($query));
if ($row['nb_total_categories'] < $conf['max_LOV_categories'])
{
$template->assign_block_vars('associate_LOV',array());
$template->assign_block_vars('associate_LOV.associate_cat',array(
));
/*$vtp->addSession($sub, 'associate_LOV');
$vtp->addSession($sub, 'associate_cat');
$vtp->setVar($sub, 'associate_cat.value', '-1');
$vtp->setVar($sub, 'associate_cat.content', '');
$vtp->closeSession($sub, 'associate_cat');
$page['plain_structure'] = get_plain_structure(true);
$structure = create_structure('', array());
display_categories($structure, '&nbsp;');
$vtp->closeSession($sub, 'associate_LOV');*/
}
$query = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id = category_id
WHERE image_id = '.$_GET['image_id'].'
AND id != '.$storage_category_id.'
;';
display_select_cat_wrapper($query,array(),'associated_option');
$result = pwg_query($query);
$associateds = array($storage_category_id);
while ($row = mysql_fetch_array($result))
{
array_push($associateds, $row['id']);
}
$query = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE id NOT IN ('.implode(',', $associateds).')
;';
display_select_cat_wrapper($query,array(),'dissociated_option');
//----------------------------------------------------------- sending html code
$template->assign_var_from_handle('ADMIN_CONTENT', 'picture_modify');
?>