diff options
author | plegall <plg@piwigo.org> | 2004-12-05 21:28:40 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2004-12-05 21:28:40 +0000 |
commit | 9064686d9990b6830c0cd6a00d95745d3841eb9e (patch) | |
tree | 0d2bc6ee0564041f1836fb63c30cfe00738f211b /admin | |
parent | e4ce82fc27e1e10d697815928ef06c692a3f56da (diff) |
- 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
Diffstat (limited to '')
-rw-r--r-- | admin/cat_list.php | 53 | ||||
-rw-r--r-- | admin/cat_modify.php | 13 | ||||
-rw-r--r-- | admin/include/functions.php | 114 | ||||
-rw-r--r-- | admin/picture_modify.php | 210 |
4 files changed, 184 insertions, 206 deletions
diff --git a/admin/cat_list.php b/admin/cat_list.php index 2914901b5..72862b484 100644 --- a/admin/cat_list.php +++ b/admin/cat_list.php @@ -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)"; + } + else + { + $query.= ' SET uppercats = id'; + } + if (!empty($parent_global_rank)) + { + $query.= " , global_rank = CONCAT('".$parent_global_rank."','.',rank)"; + } + else + { + $query.= ' , uppercats = id'; } - $query.= $my_id; - $query.= '\' + $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'], diff --git a/admin/cat_modify.php b/admin/cat_modify.php index fc54301d1..c230fcf94 100644 --- a/admin/cat_modify.php +++ b/admin/cat_modify.php @@ -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">→</span>'; -$navigation.= get_cat_display_name( - $current_category['name'], + +$navigation.= get_cat_display_name_cache( + $category['uppercats'], ' <span style="font-size:15px">→</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()); } diff --git a/admin/include/functions.php b/admin/include/functions.php index 8ae7929ae..0d2972740 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -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 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)) +SELECT id + FROM '.CATEGORIES_TABLE; + if (is_array($ids)) { - $query.= ' - WHERE uppercats REGEXP \'(^|,)'.$id.'(,|$)\''; + 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.= ' - GROUP BY category_id ;'; $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 + WHERE category_id IN ('.implode(',', $cat_ids).') + GROUP BY category_id +'; + $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'].' + 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 ;'; - pwg_query($query); - } + $result = pwg_query($query); + while ($row = mysql_fetch_array($result)) + { + array_push($categories, $row['id']); } + + $categories = array_unique($categories); + set_random_representant($categories); } } diff --git a/admin/picture_modify.php b/admin/picture_modify.php index 476ddb359..23f4d301d 100644 --- a/admin/picture_modify.php +++ b/admin/picture_modify.php @@ -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 ? - $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) +} +// 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) { - $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']); + array_push($datas, array('image_id' => $_GET['image_id'], + 'category_id' => $category_id)); } - // dissociate any category ? - // retrieving all the linked categories + 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 - 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'], '->', ''); - $thumbnail_url = get_thumbnail_src($row['path'], @$row['tn_ext']); $url_img = PHPWG_ROOT_PATH.'picture.php?image_id='.$_GET['image_id']; $url_img .= '&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'], ' > ', ''); - $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'], + ' → ', + '', + 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']) +$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)) { - $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, ' '); - $vtp->closeSession($sub, 'associate_LOV');*/ + 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'); ?> |