961640b8d6
- optimize code in get_icon - correct css font-wigth:italic to font-style:italic - aditionnal check on $conf['authorize_remembering'] before allowing auto_login git-svn-id: http://piwigo.org/svn/trunk@1641 68402e56-0260-453c-a942-63ccdbb3a9ee
393 lines
10 KiB
PHP
393 lines
10 KiB
PHP
<?php
|
|
// +-----------------------------------------------------------------------+
|
|
// | PhpWebGallery - a PHP based picture gallery |
|
|
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
|
|
// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
|
|
// +-----------------------------------------------------------------------+
|
|
// | branch : BSF (Best So Far)
|
|
// | file : $Id$
|
|
// | last update : $Date$
|
|
// | last modifier : $Author$
|
|
// | revision : $Revision$
|
|
// +-----------------------------------------------------------------------+
|
|
// | This program is free software; you can redistribute it and/or modify |
|
|
// | it under the terms of the GNU General Public License as published by |
|
|
// | the Free Software Foundation |
|
|
// | |
|
|
// | This program is distributed in the hope that it will be useful, but |
|
|
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
|
// | General Public License for more details. |
|
|
// | |
|
|
// | You should have received a copy of the GNU General Public License |
|
|
// | along with this program; if not, write to the Free Software |
|
|
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
|
|
// | USA. |
|
|
// +-----------------------------------------------------------------------+
|
|
|
|
/**
|
|
* Provides functions to handle categories.
|
|
*
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* Is the category accessible to the connected user ?
|
|
*
|
|
* Note : if the user is not authorized to see this category, page creation
|
|
* ends (exit command in this function)
|
|
*
|
|
* @param int category id to verify
|
|
* @return void
|
|
*/
|
|
function check_restrictions($category_id)
|
|
{
|
|
global $user;
|
|
|
|
if (in_array($category_id, explode(',', $user['forbidden_categories'])))
|
|
{
|
|
access_denied();
|
|
}
|
|
}
|
|
|
|
function get_categories_menu()
|
|
{
|
|
global $page, $user;
|
|
|
|
$query = '
|
|
SELECT ';
|
|
// From CATEGORIES_TABLE
|
|
$query.= '
|
|
name, id, nb_images, global_rank,';
|
|
// From USER_CACHE_CATEGORIES_TABLE
|
|
$query.= '
|
|
date_last, max_date_last, count_images, count_categories';
|
|
|
|
// $user['forbidden_categories'] including with USER_CACHE_CATEGORIES_TABLE
|
|
$query.= '
|
|
FROM '.CATEGORIES_TABLE.' INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.'
|
|
ON id = cat_id and user_id = '.$user['id'];
|
|
if (!$user['expand'])
|
|
{
|
|
$query.= '
|
|
WHERE (id_uppercat is NULL';
|
|
if (isset($page['category']))
|
|
{
|
|
$query.= ' OR id_uppercat IN ('.$page['uppercats'].')';
|
|
}
|
|
$query.= ')';
|
|
}
|
|
$query.= '
|
|
;';
|
|
|
|
$result = pwg_query($query);
|
|
$cats = array();
|
|
while ($row = mysql_fetch_assoc($result))
|
|
{
|
|
array_push($cats, $row);
|
|
}
|
|
usort($cats, 'global_rank_compare');
|
|
|
|
return get_html_menu_category($cats);
|
|
}
|
|
|
|
|
|
/**
|
|
* Retrieve informations about a category in the database
|
|
*
|
|
* Returns an array with following keys :
|
|
*
|
|
* - comment
|
|
* - dir : directory, might be empty for virtual categories
|
|
* - name : an array with indexes from 0 (lowest cat name) to n (most
|
|
* uppercat name findable)
|
|
* - nb_images
|
|
* - id_uppercat
|
|
* - site_id
|
|
* -
|
|
*
|
|
* @param int category id
|
|
* @return array
|
|
*/
|
|
function get_cat_info( $id )
|
|
{
|
|
$infos = array('nb_images','id_uppercat','comment','site_id'
|
|
,'dir','date_last','uploadable','status','visible'
|
|
,'representative_picture_id','uppercats','commentable'
|
|
,'image_order');
|
|
|
|
$query = '
|
|
SELECT '.implode(',', $infos).'
|
|
FROM '.CATEGORIES_TABLE.'
|
|
WHERE id = '.$id.'
|
|
;';
|
|
$row = mysql_fetch_array(pwg_query($query));
|
|
if (empty($row))
|
|
return null;
|
|
|
|
$cat = array();
|
|
foreach ($infos as $info)
|
|
{
|
|
if (isset($row[$info]))
|
|
{
|
|
$cat[$info] = $row[$info];
|
|
}
|
|
else
|
|
{
|
|
$cat[$info] = '';
|
|
}
|
|
// If the field is true or false, the variable is transformed into a
|
|
// boolean value.
|
|
if ($cat[$info] == 'true' or $cat[$info] == 'false')
|
|
{
|
|
$cat[$info] = get_boolean( $cat[$info] );
|
|
}
|
|
}
|
|
global $conf;
|
|
if ( !( $conf['allow_html_descriptions'] and
|
|
preg_match('/<(div|br|img|script).*>/i', $cat['comment']) ) )
|
|
{
|
|
$cat['comment'] = nl2br($cat['comment']);
|
|
}
|
|
|
|
$names = array();
|
|
$query = '
|
|
SELECT name,id
|
|
FROM '.CATEGORIES_TABLE.'
|
|
WHERE id IN ('.$cat['uppercats'].')
|
|
;';
|
|
$result = pwg_query($query);
|
|
while($row = mysql_fetch_array($result))
|
|
{
|
|
$names[$row['id']] = $row['name'];
|
|
}
|
|
|
|
// category names must be in the same order than uppercats list
|
|
$cat['name'] = array();
|
|
foreach (explode(',', $cat['uppercats']) as $cat_id)
|
|
{
|
|
$cat['name'][$cat_id] = $names[$cat_id];
|
|
}
|
|
|
|
return $cat;
|
|
}
|
|
|
|
// get_complete_dir returns the concatenation of get_site_url and
|
|
// get_local_dir
|
|
// Example : "pets > rex > 1_year_old" is on the the same site as the
|
|
// PhpWebGallery files and this category has 22 for identifier
|
|
// get_complete_dir(22) returns "./galleries/pets/rex/1_year_old/"
|
|
function get_complete_dir( $category_id )
|
|
{
|
|
return get_site_url($category_id).get_local_dir($category_id);
|
|
}
|
|
|
|
// get_local_dir returns an array with complete path without the site url
|
|
// Example : "pets > rex > 1_year_old" is on the the same site as the
|
|
// PhpWebGallery files and this category has 22 for identifier
|
|
// get_local_dir(22) returns "pets/rex/1_year_old/"
|
|
function get_local_dir( $category_id )
|
|
{
|
|
global $page;
|
|
|
|
$uppercats = '';
|
|
$local_dir = '';
|
|
|
|
if ( isset( $page['plain_structure'][$category_id]['uppercats'] ) )
|
|
{
|
|
$uppercats = $page['plain_structure'][$category_id]['uppercats'];
|
|
}
|
|
else
|
|
{
|
|
$query = 'SELECT uppercats';
|
|
$query.= ' FROM '.CATEGORIES_TABLE.' WHERE id = '.$category_id;
|
|
$query.= ';';
|
|
$row = mysql_fetch_array( pwg_query( $query ) );
|
|
$uppercats = $row['uppercats'];
|
|
}
|
|
|
|
$upper_array = explode( ',', $uppercats );
|
|
|
|
$database_dirs = array();
|
|
$query = 'SELECT id,dir';
|
|
$query.= ' FROM '.CATEGORIES_TABLE.' WHERE id IN ('.$uppercats.')';
|
|
$query.= ';';
|
|
$result = pwg_query( $query );
|
|
while( $row = mysql_fetch_array( $result ) )
|
|
{
|
|
$database_dirs[$row['id']] = $row['dir'];
|
|
}
|
|
foreach ($upper_array as $id)
|
|
{
|
|
$local_dir.= $database_dirs[$id].'/';
|
|
}
|
|
|
|
return $local_dir;
|
|
}
|
|
|
|
// retrieving the site url : "http://domain.com/gallery/" or
|
|
// simply "./galleries/"
|
|
function get_site_url($category_id)
|
|
{
|
|
global $page;
|
|
|
|
$query = '
|
|
SELECT galleries_url
|
|
FROM '.SITES_TABLE.' AS s,'.CATEGORIES_TABLE.' AS c
|
|
WHERE s.id = c.site_id
|
|
AND c.id = '.$category_id.'
|
|
;';
|
|
$row = mysql_fetch_array(pwg_query($query));
|
|
return $row['galleries_url'];
|
|
}
|
|
|
|
// returns an array of image orders available for users/visitors
|
|
function get_category_preferred_image_orders()
|
|
{
|
|
global $conf;
|
|
return array(
|
|
array(l10n('default_sort'), '', true),
|
|
array(l10n('Average rate'), 'average_rate DESC', $conf['rate']),
|
|
array(l10n('most_visited_cat'), 'hit DESC', true),
|
|
array(l10n('Creation date'), 'date_creation DESC', true),
|
|
array(l10n('Post date'), 'date_available DESC', true),
|
|
array(l10n('File name'), 'file ASC', true)
|
|
);
|
|
}
|
|
|
|
function display_select_categories($categories,
|
|
$selecteds,
|
|
$blockname,
|
|
$fullname = true)
|
|
{
|
|
global $template;
|
|
|
|
foreach ($categories as $category)
|
|
{
|
|
$selected = '';
|
|
if (in_array($category['id'], $selecteds))
|
|
{
|
|
$selected = ' selected="selected"';
|
|
}
|
|
|
|
if ($fullname)
|
|
{
|
|
$option = get_cat_display_name_cache($category['uppercats'],
|
|
null,
|
|
false);
|
|
}
|
|
else
|
|
{
|
|
$option = str_repeat(' ',
|
|
(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();
|
|
if (!empty($result))
|
|
{
|
|
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
|
|
*
|
|
* @param array ids
|
|
* @return array
|
|
*/
|
|
function get_subcat_ids($ids)
|
|
{
|
|
$query = '
|
|
SELECT DISTINCT(id)
|
|
FROM '.CATEGORIES_TABLE.'
|
|
WHERE ';
|
|
foreach ($ids as $num => $category_id)
|
|
{
|
|
if ($num > 0)
|
|
{
|
|
$query.= '
|
|
OR ';
|
|
}
|
|
$query.= 'uppercats REGEXP \'(^|,)'.$category_id.'(,|$)\'';
|
|
}
|
|
$query.= '
|
|
;';
|
|
$result = pwg_query($query);
|
|
|
|
$subcats = array();
|
|
while ($row = mysql_fetch_array($result))
|
|
{
|
|
array_push($subcats, $row['id']);
|
|
}
|
|
return $subcats;
|
|
}
|
|
|
|
function global_rank_compare($a, $b)
|
|
{
|
|
return strnatcasecmp($a['global_rank'], $b['global_rank']);
|
|
}
|
|
|
|
function rank_compare($a, $b)
|
|
{
|
|
if ($a['rank'] == $b['rank'])
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return ($a['rank'] < $b['rank']) ? -1 : 1;
|
|
}
|
|
|
|
/**
|
|
* returns display text for information images of category
|
|
*
|
|
* @param array categories
|
|
* @return string
|
|
*/
|
|
function get_display_images_count($cat_nb_images, $cat_count_images, $cat_count_categories, $short_message = true)
|
|
{
|
|
$display_text = '';
|
|
|
|
// Count of category is main
|
|
// if not picture on categorie, test on sub-categories
|
|
$count = ($cat_nb_images > 0 ? $cat_nb_images : $cat_count_images);
|
|
|
|
if ($count > 0)
|
|
{
|
|
$display_text.= l10n_dec('image_available', 'images_available', $count);
|
|
|
|
if ($cat_nb_images > 0)
|
|
{
|
|
if (! $short_message)
|
|
{
|
|
$display_text.= ' '.l10n('images_available_cpl');
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$display_text.= ' '.l10n_dec('images_available_cat', 'images_available_cats', $cat_count_categories);
|
|
}
|
|
}
|
|
|
|
return $display_text;
|
|
}
|
|
|
|
?>
|