diff options
-rw-r--r-- | admin/cat_list.php | 284 | ||||
-rw-r--r-- | doc/ChangeLog | 11 | ||||
-rw-r--r-- | template/default/admin/cat_list.tpl | 75 | ||||
-rw-r--r-- | template/default/default.css | 29 | ||||
-rw-r--r-- | template/default/theme/category_children.png | bin | 0 -> 1553 bytes | |||
-rw-r--r-- | template/default/theme/category_delete.png | bin | 0 -> 1751 bytes | |||
-rw-r--r-- | template/default/theme/category_edit.png | bin | 0 -> 1605 bytes | |||
-rw-r--r-- | template/default/theme/category_elements.png | bin | 0 -> 1680 bytes | |||
-rw-r--r-- | template/default/theme/category_jump-to.png | bin | 0 -> 1603 bytes |
9 files changed, 172 insertions, 227 deletions
diff --git a/admin/cat_list.php b/admin/cat_list.php index a4fa4b5ce..e38d5b4c9 100644 --- a/admin/cat_list.php +++ b/admin/cat_list.php @@ -30,6 +30,34 @@ if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); } include_once(PHPWG_ROOT_PATH.'admin/include/isadmin.inc.php'); + +// +-----------------------------------------------------------------------+ +// | functions | +// +-----------------------------------------------------------------------+ + +/** + * save the rank depending on given categories order + * + * The list of ordered categories id is supposed to be in the same parent + * category + * + * @param array categories + * @return void + */ +function save_categories_order($categories) +{ + $current_rank = 0; + $datas = array(); + foreach ($categories as $id) + { + array_push($datas, array('id' => $id, 'rank' => ++$current_rank)); + } + $fields = array('primary' => array('id'), 'update' => array('rank')); + mass_updates(CATEGORIES_TABLE, $fields, $datas); + + update_global_rank(@$_GET['parent_id']); +} + // +-----------------------------------------------------------------------+ // | initialization | // +-----------------------------------------------------------------------+ @@ -47,7 +75,7 @@ if (isset($_GET['delete']) and is_numeric($_GET['delete'])) update_global_rank(); } // request to add a virtual category -else if (isset($_POST['submit'])) +else if (isset($_POST['submitAdd'])) { // is the given category name only containing blank spaces ? if (preg_match('/^\s*$/', $_POST['virtual_name'])) @@ -137,6 +165,11 @@ SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) array_push($page['infos'], $lang['cat_virtual_added']); } } +else if (isset($_POST['submitOrder'])) +{ + asort($_POST['catOrd'], SORT_NUMERIC); + save_categories_order(array_keys($_POST['catOrd'])); +} // +-----------------------------------------------------------------------+ // | Cache management | // +-----------------------------------------------------------------------+ @@ -180,131 +213,6 @@ if (isset($_GET['parent_id'])) false); } // +-----------------------------------------------------------------------+ -// | rank updates | -// +-----------------------------------------------------------------------+ -$current_rank = 0; -if (isset($_GET['up']) and is_numeric($_GET['up'])) -{ - // 1. searching the id of the category just above at the same level - while (list ($id,$current) = each($categories)) - { - if ($current['id'] == $_GET['up']) - { - $current_rank = $current['rank']; - break; - } - } - if ($current_rank > 1) - { - // 2. Exchanging ranks between the two categories - $query = ' -UPDATE '.CATEGORIES_TABLE.' - SET rank = '.($current_rank-1).' - WHERE id = '.$_GET['up'].' -;'; - pwg_query($query); - $query = ' -UPDATE '.CATEGORIES_TABLE.' - SET rank = '.$current_rank.' - WHERE id = '.$categories[($current_rank-1)]['id'].' -;'; - pwg_query($query); - // 3. Updating the cache array - $categories[$current_rank] = $categories[($current_rank-1)]; - $categories[($current_rank-1)] = $current; - } - else - { - // 2. Updating the rank of our category to be after the previous max rank - $query = ' -UPDATE '.CATEGORIES_TABLE.' - SET rank = '.(count($categories) + 1).' - WHERE id = '.$_GET['up'].' -;'; - pwg_query($query); - $query = ' -UPDATE '.CATEGORIES_TABLE.' - SET rank = rank-1 - WHERE id_uppercat '; - if (empty($_GET['parent_id'])) - { - $query.= 'IS NULL'; - } - else - { - $query.= '= '.$_GET['parent_id']; - } - $query.= ' -;'; - pwg_query($query); - // 3. Updating the cache array - array_push($categories, $current); - array_shift($categories); - } - update_global_rank(@$_GET['parent_id']); -} -else if (isset($_GET['down']) and is_numeric($_GET['down'])) -{ - // 1. searching the id of the category just above at the same level - while (list ($id,$current) = each($categories)) - { - if ($current['id'] == $_GET['down']) - { - $current_rank = $current['rank']; - break; - } - } - if ($current_rank < count($categories)) - { - // 2. Exchanging ranks between the two categories - $query = ' -UPDATE '.CATEGORIES_TABLE.' - SET rank = '.($current_rank+1).' - WHERE id = '.$_GET['down'].' -;'; - pwg_query($query); - $query = ' -UPDATE '.CATEGORIES_TABLE.' - SET rank = '.$current_rank.' - WHERE id = '.$categories[($current_rank+1)]['id'].' -;'; - pwg_query($query); - // 3. Updating the cache array - $categories[$current_rank]=$categories[($current_rank+1)]; - $categories[($current_rank+1)] = $current; - } - else - { - // 2. updating the rank of our category to be the first one - $query = ' -UPDATE '.CATEGORIES_TABLE.' - SET rank = 0 - WHERE id = '.$_GET['down'].' -;'; - pwg_query($query); - $query = ' -UPDATE '.CATEGORIES_TABLE.' - SET rank = rank+1 - WHERE id_uppercat '; - if (empty($_GET['parent_id'])) - { - $query.= 'IS NULL'; - } - else - { - $query.= '= '.$_GET['parent_id']; - } - $query.= ' -;'; - pwg_query($query); - // 3. Updating the cache array - array_unshift($categories, $current); - array_pop($categories); - } - update_global_rank(@$_GET['parent_id']); -} -reset($categories); -// +-----------------------------------------------------------------------+ // | template initialization | // +-----------------------------------------------------------------------+ $template->set_filenames(array('categories'=>'admin/cat_list.tpl')); @@ -344,26 +252,46 @@ $tpl = array('cat_first','cat_last'); // +-----------------------------------------------------------------------+ // | Categories display | // +-----------------------------------------------------------------------+ -$ranks = array(); -if (count($categories) > 0) +$categories = array(); + +$query = ' +SELECT id, name, dir, rank, nb_images, status + FROM '.CATEGORIES_TABLE; +if (!isset($_GET['parent_id'])) { - foreach ($categories as $category) - { - $ranks[$category['id']] = $category['rank']; - } + $query.= ' + WHERE id_uppercat IS NULL'; +} +else +{ + $query.= ' + WHERE id_uppercat = '.$_GET['parent_id']; +} +$query.= ' + ORDER BY rank ASC +;'; +$result = pwg_query($query); +while ($row = mysql_fetch_array($result)) +{ + $categories[$row['id']] = $row; + // by default, let's consider there is no sub-categories. This will be + // calculated after. + $categories[$row['id']]['nb_subcats'] = 0; +} +if (count($categories) > 0) +{ $query = ' SELECT id_uppercat, COUNT(*) AS nb_subcats FROM '. CATEGORIES_TABLE.' - WHERE id_uppercat IN ('.implode(',', array_keys($ranks)).') + WHERE id_uppercat IN ('.implode(',', array_keys($categories)).') GROUP BY id_uppercat ;'; $result = pwg_query($query); while ($row = mysql_fetch_array($result)) { - $categories[$ranks[$row['id_uppercat']]]['nb_subcats'] - = $row['nb_subcats']; + $categories[$row['id_uppercat']]['nb_subcats'] = $row['nb_subcats']; } } @@ -372,32 +300,6 @@ foreach ($categories as $category) $images_folder = PHPWG_ROOT_PATH.'template/'; $images_folder.= $user['template'].'/admin/images'; - if ($category['visible'] == 'false') - { - $image_src = $images_folder.'/icon_folder_lock.gif'; - $image_alt = $lang['cat_private']; - $image_title = $lang['cat_private']; - } - else if (empty($category['dir'])) - { - $image_src = $images_folder.'/icon_folder_link.gif'; - $image_alt = $lang['cat_virtual']; - $image_title = $lang['cat_virtual']; - } - else - { - if ($category['nb_subcats'] > 0) - { - $image_src = $images_folder.'/icon_subfolder.gif'; - } - else - { - $image_src = $images_folder.'/icon_folder.gif'; - } - $image_alt = ''; - $image_title = ''; - } - $base_url = PHPWG_ROOT_PATH.'admin.php?page='; $cat_list_url = $base_url.'cat_list'; @@ -410,45 +312,49 @@ foreach ($categories as $category) $template->assign_block_vars( 'category', array( - 'CATEGORY_IMG_SRC'=>$image_src, - 'CATEGORY_IMG_ALT'=>$image_alt, - 'CATEGORY_IMG_TITLE'=>$image_title, - 'CATEGORY_NAME'=>$category['name'], - 'CATEGORY_DIR'=>@$category['dir'], - 'CATEGORY_NB_IMG'=>$category['nb_images'], + 'NAME'=>$category['name'], + 'ID'=>$category['id'], + 'RANK'=>$category['rank']*10, + + 'U_JUMPTO'=> + add_session_id(PHPWG_ROOT_PATH.'category.php?cat='.$category['id']), - 'U_CATEGORY'=> + 'U_CHILDREN'=> add_session_id($cat_list_url.'&parent_id='.$category['id']), - 'U_MOVE_UP'=>add_session_id($self_url.'&up='.$category['id']), - - 'U_MOVE_DOWN'=>add_session_id($self_url.'&down='.$category['id']), - - 'U_CAT_EDIT'=> - add_session_id($base_url.'cat_modify&cat_id='.$category['id']), - - 'U_CAT_DELETE'=>add_session_id($self_url.'&delete='.$category['id']), - - 'U_INFO_IMG' - => add_session_id($base_url.'element_set&cat='.$category['id']) - )); + 'U_EDIT'=> + add_session_id($base_url.'cat_modify&cat_id='.$category['id']) + ) + ); - if (!empty($category['dir'])) + if (empty($category['dir'])) { - $template->assign_block_vars('category.storage' ,array()); - } - else - { - $template->assign_block_vars('category.virtual' ,array()); + $template->assign_block_vars( + 'category.delete', + array( + 'URL'=>add_session_id($self_url.'&delete='.$category['id']) + ) + ); } if ($category['nb_images'] > 0) { - $template->assign_block_vars('category.image_info' ,array()); + $template->assign_block_vars( + 'category.elements', + array( + 'URL'=>add_session_id($base_url.'element_set&cat='.$category['id']) + ) + ); } - else + + if ('private' == $category['status']) { - $template->assign_block_vars('category.no_image_info' ,array()); + $template->assign_block_vars( + 'category.permissions', + array( + 'URL'=>add_session_id($base_url.'cat_perm&cat='.$category['id']) + ) + ); } } // +-----------------------------------------------------------------------+ diff --git a/doc/ChangeLog b/doc/ChangeLog index aa3eb2ee4..2255a4abf 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,14 @@ +2005-06-30 Pierrick LE GALL + + * categories management : new display with icon for actions + (delete, sub-categories, elements, edit, jump to, permissions) + + * categories management : semantic HTML layout (using common + lists) + + * categories management : new way to order categories of the same + level : a text field let the admin reorder all categories at once. + 2005-06-25 Pierrick LE GALL * new feature : ability to add links on the main page (see diff --git a/template/default/admin/cat_list.tpl b/template/default/admin/cat_list.tpl index f6e30b042..7463845ce 100644 --- a/template/default/admin/cat_list.tpl +++ b/template/default/admin/cat_list.tpl @@ -1,43 +1,42 @@ <div class="admin">{CATEGORIES_NAV}</div> -<table style="width:100%;"> -<!-- BEGIN category --> -<tr> - <td style="width:1px;padding:5px;"><img src="{category.CATEGORY_IMG_SRC}" alt="{category.CATEGORY_IMG_ALT}" title="{category.CATEGORY_IMG_TITLE}" /></td> - <td style="width:60%;text-align:left;"><a class="titreImg" href="{category.U_CATEGORY}">{category.CATEGORY_NAME}</a> - <br /> - <!-- BEGIN storage --> - {L_STORAGE} : {category.CATEGORY_DIR} - - <!-- END storage --> - {L_NB_IMG} : {category.CATEGORY_NB_IMG} - </td> - <td class="row1" style="width:10%;white-space:nowrap;text-align:center;"> - <a href="{category.U_MOVE_UP}">{L_MOVE_UP}</a><br /> - <a href="{category.U_MOVE_DOWN}">{L_MOVE_DOWN}</a> - </td> - <td class="row1" style="width:10%;white-space:nowrap;text-align:center;"> - <a href="{category.U_CAT_EDIT}">{L_EDIT}</a> - </td> - <td class="row1" style="width:10%;white-space:nowrap;text-align:center;"> - <!-- BEGIN image_info --> - <a href="{category.U_INFO_IMG}">{L_INFO_IMG}</a> - <!-- END image_info --> - <!-- BEGIN no_image_info --> - <span style="color:darkgray;">{L_INFO_IMG}</span> - <!-- END no_image_info --> - </td> - <td class="row1" style="width:10%;white-space:nowrap;text-align:center;"> - <!-- BEGIN virtual --> - <a href="{category.U_CAT_DELETE}">{L_DELETE}</a> - <!-- END virtual --> - <!-- BEGIN storage --> - <span style="color:darkgray;">{L_DELETE}</span> - <!-- END storage --> - </td> -<tr> -<!-- END category --> -</table> + +<form id="categoryOrdering" action="" method="post"> + + <ul> + + <!-- BEGIN category --> + <li> <!-- category {category.ID} --> + + <ul class="categoryActions"> + <li><a href="{category.U_JUMPTO}" title="{lang:jump to category}"><img src="./template/default/theme/category_jump-to.png" alt="{lang:jump to}" /></a></li> + <li><a href="{category.U_EDIT}" title="{lang:edit category informations}"><img src="./template/default/theme/category_edit.png" alt="{lang:edit}"/></a></li> + <!-- BEGIN elements --> + <li><a href="{category.elements.URL}" title="{lang:manage category elements}"><img src="./template/default/theme/category_elements.png" alt="{lang:elements}" /></a></li> + <!-- END elements --> + <li><a href="{category.U_CHILDREN}" title="{lang:manage sub-categories}"><img src="./template/default/theme/category_children.png" alt="{lang:sub-categories}" /></a></li> + <!-- BEGIN delete --> + <li><a href="{category.delete.URL}" title="{lang:delete category}"><img src="./template/default/theme/category_delete.png" alt="{lang:delete}" /></a></li> + <!-- END delete --> + </ul> + + <p><strong>{category.NAME}</strong></p> + + <p> + <label> + {lang:Position} : + <input type="text" size="4" name="catOrd[{category.ID}]" maxlength="4" value="{category.RANK}" /> + </label> + </p> + + </li> + <!-- END category --> + + <p><input name="submitOrder" type="submit" class="bouton" value="{lang:Save order}" /></p> + +</form> + <form action="{F_ACTION}" method="post"> {L_ADD_VIRTUAL} : <input type="text" name="virtual_name" /> <input type="hidden" name="rank" value="{NEXT_RANK}"/> - <input type="submit" value="{L_SUBMIT}" class="bouton" name="submit" /> + <input type="submit" value="{L_SUBMIT}" class="bouton" name="submitAdd" /> </form> diff --git a/template/default/default.css b/template/default/default.css index e8e63c8a5..f02f33ce3 100644 --- a/template/default/default.css +++ b/template/default/default.css @@ -383,6 +383,35 @@ label:hover { } /** + * Categories management + */ + +form#categoryOrdering>ul { + list-style: none; + padding: 0; + margin: 0; +} + +form#categoryOrdering>ul>li { + border: 1px solid grey; + padding: 0px 5px; + margin-bottom: 5px; +} + +form#categoryOrdering ul.categoryActions { + float: right; + margin-top: 5px; +} + +ul.categoryActions>li { + display: inline; +} + +ul.categoryActions a img { + border: none; +} + +/** * Errors box in administration */ #errors { diff --git a/template/default/theme/category_children.png b/template/default/theme/category_children.png Binary files differnew file mode 100644 index 000000000..c8d9b36b0 --- /dev/null +++ b/template/default/theme/category_children.png diff --git a/template/default/theme/category_delete.png b/template/default/theme/category_delete.png Binary files differnew file mode 100644 index 000000000..abedfe810 --- /dev/null +++ b/template/default/theme/category_delete.png diff --git a/template/default/theme/category_edit.png b/template/default/theme/category_edit.png Binary files differnew file mode 100644 index 000000000..57bd43af0 --- /dev/null +++ b/template/default/theme/category_edit.png diff --git a/template/default/theme/category_elements.png b/template/default/theme/category_elements.png Binary files differnew file mode 100644 index 000000000..9b5229a41 --- /dev/null +++ b/template/default/theme/category_elements.png diff --git a/template/default/theme/category_jump-to.png b/template/default/theme/category_jump-to.png Binary files differnew file mode 100644 index 000000000..1763b90aa --- /dev/null +++ b/template/default/theme/category_jump-to.png |