aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--admin/cat_list.php284
-rw-r--r--doc/ChangeLog11
-rw-r--r--template/default/admin/cat_list.tpl75
-rw-r--r--template/default/default.css29
-rw-r--r--template/default/theme/category_children.pngbin0 -> 1553 bytes
-rw-r--r--template/default/theme/category_delete.pngbin0 -> 1751 bytes
-rw-r--r--template/default/theme/category_edit.pngbin0 -> 1605 bytes
-rw-r--r--template/default/theme/category_elements.pngbin0 -> 1680 bytes
-rw-r--r--template/default/theme/category_jump-to.pngbin0 -> 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.'&amp;parent_id='.$category['id']),
- 'U_MOVE_UP'=>add_session_id($self_url.'&amp;up='.$category['id']),
-
- 'U_MOVE_DOWN'=>add_session_id($self_url.'&amp;down='.$category['id']),
-
- 'U_CAT_EDIT'=>
- add_session_id($base_url.'cat_modify&amp;cat_id='.$category['id']),
-
- 'U_CAT_DELETE'=>add_session_id($self_url.'&amp;delete='.$category['id']),
-
- 'U_INFO_IMG'
- => add_session_id($base_url.'element_set&amp;cat='.$category['id'])
- ));
+ 'U_EDIT'=>
+ add_session_id($base_url.'cat_modify&amp;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.'&amp;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&amp;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&amp;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
new file mode 100644
index 000000000..c8d9b36b0
--- /dev/null
+++ b/template/default/theme/category_children.png
Binary files differ
diff --git a/template/default/theme/category_delete.png b/template/default/theme/category_delete.png
new file mode 100644
index 000000000..abedfe810
--- /dev/null
+++ b/template/default/theme/category_delete.png
Binary files differ
diff --git a/template/default/theme/category_edit.png b/template/default/theme/category_edit.png
new file mode 100644
index 000000000..57bd43af0
--- /dev/null
+++ b/template/default/theme/category_edit.png
Binary files differ
diff --git a/template/default/theme/category_elements.png b/template/default/theme/category_elements.png
new file mode 100644
index 000000000..9b5229a41
--- /dev/null
+++ b/template/default/theme/category_elements.png
Binary files differ
diff --git a/template/default/theme/category_jump-to.png b/template/default/theme/category_jump-to.png
new file mode 100644
index 000000000..1763b90aa
--- /dev/null
+++ b/template/default/theme/category_jump-to.png
Binary files differ