- global categories' options : instead of N horizontal tabs on a single

page, N options in the left menu (but the same backend)

- categories.global_rank : new calculated field. It gives a global rank of
  the category among all others (updated during ordering)

- category.php page : menu is generated faster thanks to
  categories.global_rank, recursivity becomes useless :-)

- new function to display select box with a set of categories :
  display_select_cat_wrapper

- cat_options : instead of using 1 multiselect for true/false items, using 1
  multiselect for true, and another one for false. The form provides buttons
  with arrows to switch categories from one multiselect to another

- deletion of obsolete function display_categories (working with the old
  template system)

- deletion of obsolete functions get_user_plain_structure,
  create_user_structure, get_user_subcat_ids, update_structure, count_images
  : useless thanks to global_rank


git-svn-id: http://piwigo.org/svn/trunk@614 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
plegall
2004-11-23 22:31:24 +00:00
parent 5197779bba
commit f0fcd1eedc
16 changed files with 352 additions and 478 deletions

View File

@@ -166,6 +166,7 @@ if ( mysql_num_rows( $result ) > 0 )
$link_start = PHPWG_ROOT_PATH.'admin.php?page=';
$conf_link = $link_start.'configuration&section=';
$opt_link = $link_start.'cat_options&section=';
//----------------------------------------------------- template initialization
include(PHPWG_ROOT_PATH.'include/page_header.php');
$template->set_filenames( array('admin'=>'admin.tpl') );
@@ -189,7 +190,6 @@ $template->assign_vars(array(
'L_SITES'=>$lang['remote_sites'],
'L_CATEGORIES'=>$lang['categories'],
'L_MANAGE'=>$lang['manage'],
'L_UPLOAD'=>$lang['upload'],
'L_IMAGES'=>$lang['pictures'],
'L_WAITING'=>$lang['waiting'].$nb_waiting,
'L_COMMENTS'=>$lang['comments'].$nb_comments,
@@ -199,8 +199,11 @@ $template->assign_vars(array(
'L_GROUPS'=>$lang['groups'],
'L_AUTH'=>$lang['permissions'],
'L_UPDATE'=>$lang['update'],
'L_CAT_OPTIONS'=>$lang['cat_options_menu'],
'L_UPLOAD'=>$lang['cat_options_upload_menu'],
'L_COMMENTS'=>$lang['cat_options_comments_menu'],
'L_VISIBLE'=>$lang['cat_options_visible_menu'],
'L_STATUS'=>$lang['cat_options_status_menu'],
'U_CONFIG_GENERAL'=>add_session_id($conf_link.'general' ),
'U_CONFIG_COMMENTS'=>add_session_id($conf_link.'comments' ),
'U_CONFIG_DISPLAY'=>add_session_id($conf_link.'default' ),
@@ -212,7 +215,10 @@ $template->assign_vars(array(
'U_USERS'=>add_session_id($link_start.'user_search' ),
'U_GROUPS'=>add_session_id($link_start.'group_list' ),
'U_CATEGORIES'=>add_session_id($link_start.'cat_list' ),
'U_UPLOAD'=>add_session_id($link_start.'admin_upload' ),
'U_UPLOAD'=>add_session_id($opt_link.'upload'),
'U_COMMENTS'=>add_session_id($opt_link.'comments'),
'U_VISIBLE'=>add_session_id($opt_link.'visible'),
'U_STATUS'=>add_session_id($opt_link.'status'),
'U_WAITING'=>add_session_id($link_start.'waiting' ),
'U_COMMENTS'=>add_session_id($link_start.'comments' ),
'U_CAT_UPDATE'=>add_session_id($link_start.'update'),

View File

@@ -36,7 +36,7 @@ include_once(PHPWG_ROOT_PATH.'admin/include/isadmin.inc.php');
// print '<pre>';
// print_r($_POST);
// print '</pre>';
if (isset($_POST['submit']) and count($_POST['cat']) > 0)
if (isset($_POST['falsify']) and count($_POST['cat_true']) > 0)
{
switch ($_GET['section'])
{
@@ -44,8 +44,8 @@ if (isset($_POST['submit']) and count($_POST['cat']) > 0)
{
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET uploadable = \''.$_POST['option'].'\'
WHERE id IN ('.implode(',', $_POST['cat']).')
SET uploadable = \'false\'
WHERE id IN ('.implode(',', $_POST['cat_true']).')
;';
pwg_query($query);
break;
@@ -54,8 +54,8 @@ UPDATE '.CATEGORIES_TABLE.'
{
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET commentable = \''.$_POST['option'].'\'
WHERE id IN ('.implode(',', $_POST['cat']).')
SET commentable = \'false\'
WHERE id IN ('.implode(',', $_POST['cat_true']).')
;';
pwg_query($query);
break;
@@ -63,79 +63,101 @@ UPDATE '.CATEGORIES_TABLE.'
case 'visible' :
{
// locking a category => all its child categories become locked
if ($_POST['option'] == 'false')
{
$subcats = get_subcat_ids($_POST['cat']);
$query = '
$subcats = get_subcat_ids($_POST['cat_true']);
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET visible = \'false\'
WHERE id IN ('.implode(',', $subcats).')
;';
pwg_query($query);
}
// unlocking a category => all its parent categories become unlocked
if ($_POST['option'] == 'true')
{
$uppercats = array();
$query = '
SELECT uppercats
FROM '.CATEGORIES_TABLE.'
WHERE id IN ('.implode(',', $_POST['cat']).')
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
$uppercats = array_merge($uppercats,
explode(',', $row['uppercats']));
}
$uppercats = array_unique($uppercats);
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET visible = \'true\'
WHERE id IN ('.implode(',', $uppercats).')
;';
pwg_query($query);
}
pwg_query($query);
break;
}
case 'status' :
{
// make a category private => all its child categories become private
if ($_POST['option'] == 'false')
{
$subcats = get_subcat_ids($_POST['cat']);
$query = '
$subcats = get_subcat_ids($_POST['cat_true']);
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET status = \'private\'
WHERE id IN ('.implode(',', $subcats).')
;';
pwg_query($query);
}
// make public a category => all its parent categories become public
if ($_POST['option'] == 'true')
{
$uppercats = array();
$query = '
pwg_query($query);
break;
}
}
}
else if (isset($_POST['trueify']) and count($_POST['cat_false']) > 0)
{
switch ($_GET['section'])
{
case 'upload' :
{
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET uploadable = \'true\'
WHERE id IN ('.implode(',', $_POST['cat_false']).')
;';
pwg_query($query);
break;
}
case 'comments' :
{
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET commentable = \'true\'
WHERE id IN ('.implode(',', $_POST['cat_false']).')
;';
pwg_query($query);
break;
}
case 'visible' :
{
// unlocking a category => all its parent categories become unlocked
$uppercats = array();
$query = '
SELECT uppercats
FROM '.CATEGORIES_TABLE.'
WHERE id IN ('.implode(',', $_POST['cat']).')
WHERE id IN ('.implode(',', $_POST['cat_false']).')
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
$uppercats = array_merge($uppercats,
explode(',', $row['uppercats']));
}
$uppercats = array_unique($uppercats);
$query = '
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
$uppercats = array_merge($uppercats,
explode(',', $row['uppercats']));
}
$uppercats = array_unique($uppercats);
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET visible = \'true\'
WHERE id IN ('.implode(',', $uppercats).')
;';
pwg_query($query);
break;
}
case 'status' :
{
// make public a category => all its parent categories become public
$uppercats = array();
$query = '
SELECT uppercats
FROM '.CATEGORIES_TABLE.'
WHERE id IN ('.implode(',', $_POST['cat_false']).')
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
$uppercats = array_merge($uppercats,
explode(',', $row['uppercats']));
}
$uppercats = array_unique($uppercats);
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET status = \'public\'
WHERE id IN ('.implode(',', $uppercats).')
;';
pwg_query($query);
}
pwg_query($query);
break;
}
}
@@ -159,22 +181,6 @@ $template->assign_vars(
array(
'L_SUBMIT'=>$lang['submit'],
'L_RESET'=>$lang['reset'],
'L_CAT_OPTIONS_MENU_UPLOAD'=>$lang['cat_options_menu_upload'],
'L_CAT_OPTIONS_MENU_VISIBLE'=>$lang['cat_options_menu_visible'],
'L_CAT_OPTIONS_MENU_COMMENTS'=>$lang['cat_options_menu_comments'],
'L_CAT_OPTIONS_MENU_STATUS'=>$lang['cat_options_menu_status'],
'L_CAT_OPTIONS_UPLOAD_INFO'=>$lang['cat_options_upload_info'],
'L_CAT_OPTIONS_UPLOAD_TRUE'=>$lang['cat_options_upload_true'],
'L_CAT_OPTIONS_UPLOAD_FALSE'=>$lang['cat_options_upload_false'],
'L_CAT_OPTIONS_COMMENTS_INFO'=>$lang['cat_options_comments_info'],
'L_CAT_OPTIONS_COMMENTS_TRUE'=>$lang['cat_options_comments_true'],
'L_CAT_OPTIONS_COMMENTS_FALSE'=>$lang['cat_options_comments_false'],
'L_CAT_OPTIONS_VISIBLE_INFO'=>$lang['cat_options_visible_info'],
'L_CAT_OPTIONS_VISIBLE_TRUE'=>$lang['cat_options_visible_true'],
'L_CAT_OPTIONS_VISIBLE_FALSE'=>$lang['cat_options_visible_false'],
'L_CAT_OPTIONS_STATUS_INFO'=>$lang['cat_options_status_info'],
'L_CAT_OPTIONS_STATUS_TRUE'=>$lang['cat_options_status_true'],
'L_CAT_OPTIONS_STATUS_FALSE'=>$lang['cat_options_status_false'],
'U_UPLOAD'=>add_session_id($base_url.'upload'),
'U_VISIBLE'=>add_session_id($base_url.'visible'),
@@ -205,127 +211,103 @@ switch ($page['section'])
{
case 'upload' :
{
$query = '
SELECT id
$query_true = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE uploadable = \'true\'
AND dir IS NOT NULL
AND site_id = 1
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($cats_true, $row['id']);
}
$query = '
SELECT id
$query_false = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE uploadable = \'false\'
AND dir IS NOT NULL
AND site_id = 1
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($cats_false, $row['id']);
}
$template->assign_vars(
array(
'L_TITLE' => $lang['cat_options_upload_title'],
'L_CAT_OPTIONS_TRUE' => $lang['cat_options_upload_true'],
'L_CAT_OPTIONS_FALSE' => $lang['cat_options_upload_false'],
'L_CAT_OPTIONS_INFO' => $lang['cat_options_upload_info'],
)
);
$template->assign_block_vars('upload', array());
break;
}
case 'comments' :
{
$query = '
SELECT id
$query_true = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE commentable = \'true\'
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($cats_true, $row['id']);
}
$query = '
SELECT id
$query_false = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE commentable = \'false\'
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($cats_false, $row['id']);
}
$template->assign_vars(
array(
'L_TITLE' => $lang['cat_options_comments_title'],
'L_CAT_OPTIONS_TRUE' => $lang['cat_options_comments_true'],
'L_CAT_OPTIONS_FALSE' => $lang['cat_options_comments_false'],
'L_CAT_OPTIONS_INFO' => $lang['cat_options_comments_info'],
)
);
$template->assign_block_vars('comments', array());
break;
}
case 'visible' :
{
$query = '
SELECT id
$query_true = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE visible = \'true\'
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($cats_true, $row['id']);
}
$query = '
SELECT id
$query_false = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE visible = \'false\'
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($cats_false, $row['id']);
}
$template->assign_vars(
array(
'L_TITLE' => $lang['cat_options_visible_title'],
'L_CAT_OPTIONS_TRUE' => $lang['cat_options_visible_true'],
'L_CAT_OPTIONS_FALSE' => $lang['cat_options_visible_false'],
'L_CAT_OPTIONS_INFO' => $lang['cat_options_visible_info'],
)
);
$template->assign_block_vars('visible', array());
break;
}
case 'status' :
{
$query = '
SELECT id
$query_true = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE status = \'public\'
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($cats_true, $row['id']);
}
$query = '
SELECT id
$query_false = '
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE status = \'private\'
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($cats_false, $row['id']);
}
$template->assign_vars(
array(
'L_TITLE' => $lang['cat_options_status_title'],
'L_CAT_OPTIONS_TRUE' => $lang['cat_options_status_true'],
'L_CAT_OPTIONS_FALSE' => $lang['cat_options_status_false'],
'L_CAT_OPTIONS_INFO' => $lang['cat_options_status_info'],
)
);
$template->assign_block_vars('status', array());
break;
}
}
$CSS_classes = array('optionTrue'=>$cats_true,
'optionFalse'=>$cats_false);
$user['expand'] = true;
$structure = create_user_structure('');
display_select_categories($structure,
'&nbsp;',
array(),
'category_option',
$CSS_classes);
display_select_cat_wrapper($query_true,array(),'category_option_true');
display_select_cat_wrapper($query_false,array(),'category_option_false');
// +-----------------------------------------------------------------------+
// | sending html code |
// +-----------------------------------------------------------------------+

View File

@@ -580,27 +580,6 @@ function get_keywords( $keywords_string )
return array_unique( $keywords );
}
function display_categories( $categories, $indent,
$selected = -1, $forbidden = -1 )
{
global $vtp,$sub;
foreach ( $categories as $category ) {
if ( $category['id'] != $forbidden )
{
$vtp->addSession( $sub, 'associate_cat' );
$vtp->setVar( $sub, 'associate_cat.value', $category['id'] );
$content = $indent.'- '.$category['name'];
$vtp->setVar( $sub, 'associate_cat.content', $content );
if ( $category['id'] == $selected )
$vtp->setVar( $sub, 'associate_cat.selected', ' selected="selected"' );
$vtp->closeSession( $sub, 'associate_cat' );
display_categories( $category['subcats'], $indent.str_repeat('&nbsp;',3),
$selected, $forbidden );
}
}
}
/**
* returns an array with the ids of the restricted categories for the user
*

View File

@@ -40,7 +40,7 @@ function get_sync_iptc_data($file)
{
if (in_array($pwg_key, $datefields))
{
if ( preg_match('/(\d{4})(\d{2})(\d{2})/', $value, $matches))
if (preg_match('/(\d{4})(\d{2})(\d{2})/', $value, $matches))
{
$iptc[$pwg_key] = $matches[1].'-'.$matches[2].'-'.$matches[3];
}

View File

@@ -37,12 +37,13 @@ define('CURRENT_DATE', date('Y-m-d'));
// +-----------------------------------------------------------------------+
/**
* order categories (update categories.rank database field)
* 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.
* rank ASC then name ASC for each uppercat. It also updates the global rank
* which is able to order any two categorie in the whole tree
*
* @returns void
*/
@@ -68,6 +69,35 @@ SELECT id, if(id_uppercat is null,\'\',id_uppercat) AS id_uppercat
UPDATE '.CATEGORIES_TABLE.'
SET rank = '.++$current_rank.'
WHERE id = '.$row['id'].'
;';
pwg_query($query);
}
// global rank update
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET global_rank = rank
WHERE id_uppercat IS NULL
;';
pwg_query($query);
$query = '
SELECT DISTINCT(id_uppercat)
FROM '.CATEGORIES_TABLE.'
WHERE id_uppercat IS NOT NULL
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
$query = '
SELECT global_rank
FROM '.CATEGORIES_TABLE.'
WHERE id = '.$row['id_uppercat'].'
;';
list($uppercat_global_rank) = mysql_fetch_array(pwg_query($query));
$query = '
UPDATE '.CATEGORIES_TABLE.'
SET global_rank = CONCAT(\''.$uppercat_global_rank.'\', \'.\', rank)
WHERE id_uppercat = '.$row['id_uppercat'].'
;';
pwg_query($query);
}
@@ -571,23 +601,14 @@ if (!isset($_POST['submit']))
$template->assign_block_vars('introduction', array());
$query = '
SELECT id
SELECT id,name,uppercats,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE site_id != 1
WHERE site_id = 1
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
array_push($user['restrictions'], $row['id']);
}
$user['forbidden_categories'] = implode(',', $user['restrictions']);
$user['expand'] = true;
$structure = create_user_structure('');
display_select_categories($structure,
'&nbsp;',
array(),
'introduction.category_option',
array());
display_select_cat_wrapper($query,
array(),
'introduction.category_option',
false);
}
// +-----------------------------------------------------------------------+
// | synchronize files |

View File

@@ -39,11 +39,14 @@ if ( isset( $_GET['act'] )
redirect( $url );
}
//-------------------------------------------------- access authorization check
if ( isset( $_GET['cat'] ) ) check_cat_id( $_GET['cat'] );
check_login_authorization();
if ( isset( $page['cat'] ) and is_numeric( $page['cat'] ) )
if (isset($_GET['cat']))
{
check_restrictions( $page['cat'] );
check_cat_id($_GET['cat']);
}
check_login_authorization();
if (isset($page['cat']) and is_numeric($page['cat']))
{
check_restrictions($page['cat']);
}
//-------------------------------------------------------------- initialization
// detection of the start picture to display
@@ -90,14 +93,6 @@ if ( $user['expand'] )
{
$page['tab_expand'] = array();
}
// creating the structure of the categories (useful for displaying the menu)
// creating the plain structure : array of all the available categories and
// their relative informations, see the definition of the function
// get_user_plain_structure for further details.
$page['plain_structure'] = get_user_plain_structure();
$page['structure'] = create_user_structure( '' );
$page['structure'] = update_structure( $page['structure'] );
//----------------------------------------------------- template initialization
//
// Start output of page
@@ -106,7 +101,6 @@ $title = $page['title'];
include(PHPWG_ROOT_PATH.'include/page_header.php');
$template->set_filenames( array('category'=>'category.tpl') );
//-------------------------------------------------------------- category title
if ( !isset( $page['title'] ) )
{
@@ -120,18 +114,12 @@ if ( isset( $page['cat_nb_images'] ) and $page['cat_nb_images'] > 0 )
$icon_recent = get_icon(date('Y-m-d'));
$page['menu'] = '';
foreach ($page['structure'] as $category)
{
$page['menu'].= get_html_menu_category($category);
}
$template->assign_vars(array(
'NB_PICTURE' => count_user_total_images(),
'TITLE' => $template_title,
'USERNAME' => $user['username'],
'TOP_NUMBER'=>$conf['top_number'],
'MENU_CATEGORIES_CONTENT'=>$page['menu'],
'MENU_CATEGORIES_CONTENT'=>get_categories_menu(),
'L_CATEGORIES' => $lang['categories'],
'L_HINT_CATEGORY' => $lang['hint_category'],

View File

@@ -116,15 +116,14 @@ function check_cat_id( $cat )
}
}
function get_user_plain_structure()
function get_categories_menu()
{
global $page,$user;
$infos = array('name','id','date_last','nb_images','dir','id_uppercat',
'rank','site_id','uppercats');
$infos = array('');
$query = '
SELECT '.implode(',', $infos).'
SELECT name,id,date_last,nb_images,global_rank
FROM '.CATEGORIES_TABLE.'
WHERE 1 = 1'; // stupid but permit using AND after it !
if (!$user['expand'])
@@ -143,125 +142,17 @@ SELECT '.implode(',', $infos).'
AND id NOT IN ('.$user['forbidden_categories'].')';
}
$query.= '
ORDER BY id_uppercat ASC, rank ASC
;';
$plain_structure = array();
$result = pwg_query($query);
$cats = array();
while ($row = mysql_fetch_array($result))
{
$category = array();
foreach ($infos as $info)
{
if ($info == 'uc.date_last')
{
if (empty($row['date_last']))
{
$category['date_last'] = 0;
}
else
{
list($year,$month,$day) = explode('-', $row['date_last']);
$category['date_last'] = mktime(0,0,0,$month,$day,$year);
}
}
else if (isset($row[$info]))
{
$category[$info] = $row[$info];
}
else
{
$category[$info] = '';
}
}
$plain_structure[$row['id']] = $category;
array_push($cats, $row);
}
usort($cats, 'global_rank_compare');
return $plain_structure;
}
function create_user_structure( $id_uppercat )
{
global $page;
if ( !isset( $page['plain_structure'] ) )
$page['plain_structure'] = get_user_plain_structure();
$structure = array();
$ids = get_user_subcat_ids( $id_uppercat );
foreach ( $ids as $id ) {
$category = $page['plain_structure'][$id];
$category['subcats'] = create_user_structure( $id );
array_push( $structure, $category );
}
return $structure;
}
function get_user_subcat_ids( $id_uppercat )
{
global $page;
$ids = array();
foreach ( $page['plain_structure'] as $id => $category ) {
if ( $category['id_uppercat'] == $id_uppercat ) array_push( $ids, $id );
else if ( count( $ids ) > 0 ) return $ids;
}
return $ids;
}
// update_structure updates or add informations about each node of the
// structure :
//
// 1. should the category be expanded in the menu ?
// If the category has to be expanded (ie its id is in the
// $page['tab_expand'] or all the categories must be expanded by default),
// $category['expanded'] is set to true.
//
// 2. associated expand string
// in the menu, there is a expand string (used in the URL) to tell which
// categories must be expanded in the menu if this category is chosen
function update_structure( $categories )
{
global $page, $user;
$updated_categories = array();
foreach ( $categories as $category ) {
// update the "expanded" key
if ( $user['expand']
or in_array( $category['id'], $page['tab_expand'] ) )
{
$category['expanded'] = true;
}
else
{
$category['expanded'] = false;
}
// recursive call
$category['subcats'] = update_structure( $category['subcats'] );
// adding the updated category
array_push( $updated_categories, $category );
}
return $updated_categories;
}
// count_images returns the number of pictures contained in the given
// category represented by an array, in this array, we have (among other
// things) :
// $category['nb_images'] -> number of pictures in this category
// $category['subcats'] -> array of sub-categories
// count_images goes to the deepest sub-category to find the total number of
// pictures contained in the given given category
function count_images( $categories )
{
return count_user_total_images();
$total = 0;
foreach ( $categories as $category ) {
$total+= $category['nb_images'];
$total+= count_images( $category['subcats'] );
}
return $total;
return get_html_menu_category($cats);
}
function count_user_total_images()
@@ -829,49 +720,56 @@ SELECT COUNT(1) AS count
}
function display_select_categories($categories,
$indent,
$selecteds,
$blockname,
$CSS_classes)
$fullname = true)
{
global $template,$user;
global $template;
foreach ($categories as $category)
{
if (!in_array($category['id'], $user['restrictions']))
$selected = '';
if (in_array($category['id'], $selecteds))
{
$selected = '';
if (in_array($category['id'], $selecteds))
{
$selected = ' selected="selected"';
}
$class = '';
foreach (array_keys($CSS_classes) as $CSS_class)
{
if (in_array($category['id'], $CSS_classes[$CSS_class]))
{
$class = $CSS_class;
}
}
$template->assign_block_vars(
$blockname,
array('SELECTED'=>$selected,
'VALUE'=>$category['id'],
'CLASS'=>$class,
'OPTION'=>$indent.'- '.$category['name']
));
display_select_categories($category['subcats'],
$indent.str_repeat('&nbsp;',3),
$selecteds,
$blockname,
$CSS_classes);
$selected = ' selected="selected"';
}
if ($fullname)
{
$option = get_cat_display_name_cache($category['uppercats'],
' &rarr; ',
'',
false);
}
else
{
$option = str_repeat('&nbsp;',
(3 * substr_count($category['global_rank'], '.')));
$option.= '- '.$category['name'];
}
$template->assign_block_vars(
$blockname,
array('SELECTED'=>$selected,
'VALUE'=>$category['id'],
'OPTION'=>$option
));
}
}
function display_select_cat_wrapper($query, $selecteds, $blockname,
$fullname = true)
{
$result = pwg_query($query);
$categories = array();
while ($row = mysql_fetch_array($result))
{
array_push($categories, $row);
}
usort($categories, 'global_rank_compare');
display_select_categories($categories, $selecteds, $blockname, $fullname);
}
/**
* returns all subcategory identifiers of given category ids
*
@@ -904,4 +802,9 @@ SELECT DISTINCT(id)
}
return $subcats;
}
function global_rank_compare($a, $b)
{
return strnatcasecmp($a['global_rank'], $b['global_rank']);
}
?>

View File

@@ -211,7 +211,7 @@ function get_cat_display_name($cat_informations,
* @return string
*/
function get_cat_display_name_cache($uppercats,
$separator,
$separator,
$url = 'category.php?cat=',
$replace_space = true)
{
@@ -271,72 +271,76 @@ SELECT id,name
*
* HTML code generated uses logical list tags ul and each category is an
* item li. The paramter given is the category informations as an array,
* used keys are : id, name, dir, nb_images, date_last, subcats (sub-array)
* used keys are : id, name, nb_images, date_last
*
* @param array category
* @param array categories
* @return string
*/
function get_html_menu_category($category)
function get_html_menu_category($categories)
{
global $page, $lang;
$ref_level = 0;
$menu = '
<ul class="menu">';
foreach ($categories as $category)
{
$level = substr_count($category['global_rank'], '.');
if ($level > $ref_level)
{
$menu.= '
<ul class="menu">';
}
else if ($level < $ref_level)
{
$menu.= '
</ul>';
}
$ref_level = $level;
$menu.= '
<li>';
$url = add_session_id(PHPWG_ROOT_PATH.'category.php?cat='.$category['id']);
$url = add_session_id(PHPWG_ROOT_PATH.'category.php?cat='.$category['id']);
$class = '';
if (isset($page['cat'])
and is_numeric($page['cat'])
and $category['id'] == $page['cat'])
{
$class = 'menuCategorySelected';
}
else
{
$class = 'menuCategoryNotSelected';
}
$name = $category['name'];
if (empty($name))
{
$name = str_replace('_', ' ', $category['dir']);
}
$class = '';
if (isset($page['cat'])
and is_numeric($page['cat'])
and $category['id'] == $page['cat'])
{
$class = 'menuCategorySelected';
}
else
{
$class = 'menuCategoryNotSelected';
}
$menu.= '
$menu.= '
<a href="'.$url.'"
title="'.$lang['hint_category'].'"
class="'.$class.'">
'.$name.'
'.$category['name'].'
</a>';
if ($category['nb_images'] > 0)
{
$menu.= '
if ($category['nb_images'] > 0)
{
$menu.= '
<span class="menuInfoCat"
title="'.$category['nb_images'].'
'.$lang['images_available'].'">
['.$category['nb_images'].']
</span>
'.get_icon($category['date_last']);
}
$menu.= '</li>';
}
// recursive call
if ($category['expanded'] and count($category['subcats']) > 0)
{
$menu.= '
<ul class="menu">';
foreach ($category['subcats'] as $subcat)
{
$menu.= get_html_menu_category($subcat);
}
$menu.= '
$menu.= '
</ul>';
}
$menu.= '</li>';
return $menu;
}

View File

@@ -31,6 +31,7 @@ column:uploadable table:categories type:enum('true','false')
column:representative_picture_id table:categories type:mediumint nullable:Y length:8 signed:N
column:uppercats table:categories type:varchar nullable:N length:255 binary:N
column:commentable table:categories type:enum('true','false') nullable:N
column:global_rank table:categories type:varchar nullable:Y length:255 binary:N
column:id table:comments type:int nullable:N length:11 signed:N
column:image_id table:comments type:mediumint nullable:N length:8 signed:N
column:date table:comments type:datetime nullable:N

View File

@@ -25,6 +25,7 @@ CREATE TABLE phpwebgallery_categories (
representative_picture_id mediumint(8) unsigned default NULL,
uppercats varchar(255) NOT NULL default '',
commentable enum('true','false') NOT NULL default 'true',
global_rank varchar(255) default NULL,
PRIMARY KEY (id),
KEY categories_i2 (id_uppercat)
) TYPE=MyISAM;

View File

@@ -326,18 +326,22 @@ $lang['cat_list_virtual_category_added'] = 'virtual category added';
$lang['cat_list_virtual_category_deleted'] = 'virtual category deleted';
$lang['cat_options_menu'] = 'Options';
$lang['cat_options_menu_upload'] = 'upload';
$lang['cat_options_menu_visible'] = 'lock';
$lang['cat_options_menu_comments'] = 'comments';
$lang['cat_options_menu_status'] = 'access';
$lang['cat_options_upload_true'] = 'authorize upload';
$lang['cat_options_upload_false'] = 'forbid upload';
$lang['cat_options_upload_menu'] = 'Upload';
$lang['cat_options_upload_title'] = 'upload authorization settings for categories';
$lang['cat_options_visible_menu'] = 'Lock';
$lang['cat_options_visible_title'] = 'temporary lock categories';
$lang['cat_options_comments_menu'] = 'Comments';
$lang['cat_options_comments_title'] = 'authorize comments for categories';
$lang['cat_options_status_menu'] = 'Access';
$lang['cat_options_status_title'] = 'make your category private or public';
$lang['cat_options_upload_true'] = 'upload authorized';
$lang['cat_options_upload_false'] = 'upload forbidden';
$lang['cat_options_upload_info'] = '(multi)select categories to make them uploadable or not. Upload is not applicable to virtual categories and to categories from a remote site.';
$lang['cat_options_comments_true'] = 'authorize comments';
$lang['cat_options_comments_false'] = 'forbid comments';
$lang['cat_options_comments_true'] = 'comments authorized';
$lang['cat_options_comments_false'] = 'comments forbidden';
$lang['cat_options_comments_info'] = '(multi)select categories to make them commentable or not. By inheritance, an element is commentable if it belongs at least to one commentable category.';
$lang['cat_options_visible_true'] = 'unlock';
$lang['cat_options_visible_false'] = 'lock temporary';
$lang['cat_options_visible_true'] = 'unlocked';
$lang['cat_options_visible_false'] = 'locked';
$lang['cat_options_visible_info'] = '(multi)select categories to lock or unlock them. If you lock category, all its child categories becomes locked. It you unlock a category, all its parent categories becomes unlocked';
$lang['cat_options_status_true'] = 'public';
$lang['cat_options_status_false'] = 'private';

View File

@@ -338,22 +338,22 @@ foreach ($datefields as $datefield)
display_3dates($datefield);
}
//------------------------------------------------------------- categories form
// this is a trick : normally, get_user_plain_structure is used to create
// the categories structure for menu (in category.php) display, but here, we
// want all categories to be shown...
$user['expand'] = true;
$structure = create_user_structure('');
$query = '
SELECT name,id,date_last,nb_images,global_rank,uppercats
FROM '.CATEGORIES_TABLE;
if ($user['forbidden_categories'] != '')
{
$query.= '
WHERE id NOT IN ('.$user['forbidden_categories'].')';
}
$query.= '
;';
$selecteds = array();
if (isset($_POST['submit']))
{
$selecteds = $_POST['cat'];
}
display_select_categories($structure,
'&nbsp;',
$selecteds,
'category_option',
array());
display_select_cat_wrapper($query, $selecteds, 'category_option', false);
$categories_selected = '';
if (isset($_POST['categories-check']))

View File

@@ -38,7 +38,9 @@
<ul class="menu">
<li><a class="adminMenu" href="{U_CATEGORIES}">{L_MANAGE}</a></li>
<li><a class="adminMenu" href="{U_UPLOAD}">{L_UPLOAD}</a></li>
<li><a class="adminMenu" href="{U_CAT_OPTIONS}">{L_CAT_OPTIONS}</a></li>
<li><a class="adminMenu" href="{U_COMMENTS}">{L_COMMENTS}</a></li>
<li><a class="adminMenu" href="{U_VISIBLE}">{L_VISIBLE}</a></li>
<li><a class="adminMenu" href="{U_STATUS}">{L_STATUS}</a></li>
</ul>
</div>
<div class="titreMenu">{L_IMAGES}</div>

View File

@@ -1,60 +1,43 @@
<p class="confMenu">
<a class="{UPLOAD_CLASS}" href="{U_UPLOAD}">{L_CAT_OPTIONS_MENU_UPLOAD}</a>
<a class="{COMMENTS_CLASS}" href="{U_COMMENTS}">{L_CAT_OPTIONS_MENU_COMMENTS}</a>
<a class="{VISIBLE_CLASS}" href="{U_VISIBLE}">{L_CAT_OPTIONS_MENU_VISIBLE}</a>
<a class="{STATUS_CLASS}" href="{U_STATUS}">{L_CAT_OPTIONS_MENU_STATUS}</a>
</p>
<table width="100%" align="center">
<tr class="admin">
<th colspan="2">{L_TITLE}</th>
</tr>
</table>
<form action="{F_ACTION}" method="post">
<select style="width:500px" multiple="multiple" name="cat[]" size="20">
<!-- BEGIN category_option -->
<option class="{category_option.CLASS}" {category_option.SELECTED} value="{category_option.VALUE}">{category_option.OPTION}</option>
<!-- END category_option -->
<table>
<tr>
<td style="text-align:center;">{L_CAT_OPTIONS_TRUE}</td>
<td></td>
<td style="text-align:center;">{L_CAT_OPTIONS_FALSE}</td>
</tr>
<tr>
<td>
<select style="width:300px" multiple="multiple" name="cat_true[]" size="20">
<!-- BEGIN category_option_true -->
<option class="{category_option_true.CLASS}" {category_option_true.SELECTED} value="{category_option_true.VALUE}">{category_option_true.OPTION}</option>
<!-- END category_option_true -->
</select>
</td>
<td valign="middle">
<input type="submit" value="&rarr;" name="falsify" style="font-size:15px;" class="bouton" />
<br />
<input type="submit" value="&larr;" name="trueify" style="font-size:15px;" class="bouton" />
</td>
<td>
<select style="width:300px" multiple="multiple" name="cat_false[]" size="20">
<!-- BEGIN category_option_false -->
<option class="{category_option_false.CLASS}" {category_option_false.SELECTED} value="{category_option_false.VALUE}">{category_option_false.OPTION}</option>
<!-- END category_option_false -->
</select>
</td>
</tr>
</table>
<!-- BEGIN upload -->
<p>{L_CAT_OPTIONS_UPLOAD_INFO}</p>
<p>
<input type="radio" name="option" value="true"/> <span class="optionTrue">{L_CAT_OPTIONS_UPLOAD_TRUE}</span>
</p>
<p>
<input type="radio" name="option" value="false"/> <span class="optionFalse">{L_CAT_OPTIONS_UPLOAD_FALSE}</span>
</p>
<!-- END upload -->
<!-- BEGIN comments -->
<p>{L_CAT_OPTIONS_COMMENTS_INFO}</p>
<p>
<input type="radio" name="option" value="true"/> <span class="optionTrue">{L_CAT_OPTIONS_COMMENTS_TRUE}</span>
</p>
<p>
<input type="radio" name="option" value="false"/> <span class="optionFalse">{L_CAT_OPTIONS_COMMENTS_FALSE}</span>
</p>
<!-- END comments -->
<!-- BEGIN visible -->
<p>{L_CAT_OPTIONS_VISIBLE_INFO}</p>
<p>
<input type="radio" name="option" value="true"/> <span class="optionTrue">{L_CAT_OPTIONS_VISIBLE_TRUE}</span>
</p>
<p>
<input type="radio" name="option" value="false"/> <span class="optionFalse">{L_CAT_OPTIONS_VISIBLE_FALSE}</span>
</p>
<!-- END visible -->
<!-- BEGIN status -->
<p>{L_CAT_OPTIONS_STATUS_INFO}</p>
<p>
<input type="radio" name="option" value="true"/> <span class="optionTrue">{L_CAT_OPTIONS_STATUS_TRUE}</span>
</p>
<p>
<input type="radio" name="option" value="false"/> <span class="optionFalse">{L_CAT_OPTIONS_STATUS_FALSE}</span>
</p>
<!-- END status -->
<p>{L_CAT_OPTIONS_INFO}</p>
<p style="text-align:center;">
<input type="submit" value="{L_SUBMIT}" name="submit" class="bouton" />
<input type="reset" name="reset" value="{L_RESET}" class="bouton" />
</p>

View File

@@ -12,15 +12,17 @@
<form action="{F_AUTH_ACTION}" method="POST">
<ul class="menu">
<!-- BEGIN category -->
<li> <a href="{permission.category.CAT_URL}">{permission.category.CAT_NAME}</a>
<li>
<input type="radio" name="{permission.category.CAT_ID}" value="0" {permission.category.AUTH_YES}/>{L_AUTHORIZED}
<input type="radio" name="{permission.category.CAT_ID}" value="1" {permission.category.AUTH_NO}/>{L_FORBIDDEN}
:
<a href="{permission.category.CAT_URL}">{permission.category.CAT_NAME}</a>
<!-- BEGIN parent_forbidden -->
{L_PARENT_FORBIDDEN}&nbsp;-&nbsp;
<!-- END parent_forbidden -->
<input type="radio" name="{permission.category.CAT_ID}" value="0" {permission.category.AUTH_YES}/>{L_AUTHORIZED}
<input type="radio" name="{permission.category.CAT_ID}" value="1" {permission.category.AUTH_NO}/>{L_FORBIDDEN}
</li>
<!-- END category -->
</ul>
<input type="submit" name="submit" class="bouton" value="{L_SUBMIT}"/>
</form>
<!-- END permission -->
<!-- END permission -->

View File

@@ -7,9 +7,7 @@
<a href="{U_HOME}">{L_CATEGORIES}</a>
</div>
<div class="menu">
<ul class="menu">
{MENU_CATEGORIES_CONTENT}
</ul>
<div class="totalImages">[&nbsp;{NB_PICTURE}&nbsp;{L_TOTAL}&nbsp;]</div>
</div>
<div class="titreMenu">{L_SPECIAL_CATEGORIES}</div>