diff options
Diffstat (limited to '')
-rw-r--r-- | include/functions_category.inc.php | 481 |
1 files changed, 481 insertions, 0 deletions
diff --git a/include/functions_category.inc.php b/include/functions_category.inc.php new file mode 100644 index 000000000..051e89f56 --- /dev/null +++ b/include/functions_category.inc.php @@ -0,0 +1,481 @@ +<?php +/*************************************************************************** + * functions_category.inc.php * + * -------------------- * + * application : PhpWebGallery 1.3 * + * author : Pierrick LE GALL <pierrick@z0rglub.com> * + * * + *************************************************************************** + + *************************************************************************** + * * + * 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; * + * * + ***************************************************************************/ +function get_subcats_id( $cat_id ) +{ + global $prefixeTable; + + $restricted_cat = array(); + $i = 0; + + $query = "select id"; + $query.= " from $prefixeTable"."categories"; + $query.= " where id_uppercat = $cat_id;"; + $result = mysql_query( $query ); + while ( $row = mysql_fetch_array( $result ) ) + { + $restricted_cat[$i++] = $row['id']; + $sub_restricted_cat = get_subcats_id( $row['id'] ); + for ( $j = 0; $j < sizeof( $sub_restricted_cat ); $j++ ) + { + $restricted_cat[$i++] = $sub_restricted_cat[$j]; + } + } + + return $restricted_cat; +} + +function check_restrictions( $category_id ) +{ + global $user,$lang,$prefixeTable; + + if ( is_user_allowed( $category_id, $user['restrictions'] ) > 0 ) + { + echo '<div style="text-align:center;">'.$lang['access_forbiden'].'<br />'; + echo '<a href="'.add_session_id( './category.php' ).'">'; + echo $lang['thumbnails'].'</a></div>'; + exit(); + } +} + +// the check_cat_id function check whether the $cat is a right parameter : +// - $cat is numeric and corresponds to a category in the database +// - $cat equals 'fav' (for favorites) +// - $cat equals 'search' (when the result of a search is displayed) +function check_cat_id( $cat ) +{ + global $page,$prefixeTable; + unset( $page['cat'] ); + if ( isset( $cat ) ) + { + if ( is_numeric( $cat ) ) + { + $query = "select id from $prefixeTable"."categories where id = $cat;"; + $result = mysql_query( $query ); + if ( mysql_num_rows( $result ) != 0 ) + { + $page['cat'] = $cat; + } + } + if ( $cat == 'fav' or $cat == 'search' or $cat == 'most_visited' + or $cat == 'best_rated' or $cat == 'recent' ) + { + $page['cat'] = $cat; + } + } +} + +function display_cat( $id_uppercat, $indent, $restriction, $tab_expand ) +{ + global $prefixeTable,$user,$lang,$conf,$page,$vtp,$handle; + + $query = 'select name,id,date_dernier,nb_images,dir'; + $query.= ' from '.$prefixeTable.'categories'; + $query.= ' where id_uppercat'; + if ( $id_uppercat == "" ) + { + $query.= ' is NULL'; + } + else + { + $query.= ' = '.$id_uppercat; + } + $query.= ' order by rank asc;'; + $result = mysql_query( $query ); + while ( $row = mysql_fetch_array( $result ) ) + { + if ( !in_array( $row['id'], $restriction ) ) + { + $nb_subcats = get_nb_subcats( $row['id'] ); + + $expand = ""; + // si la catégorie n'a pas de sous catégorie + // ou que l'on doit développer toutes les catégories par défaut + // alors on utilise l'expand par défaut + if ( $nb_subcats == 0 or $user['expand'] == "true" ) + { + $expand = $page['expand']; + } + // si la catégorie n'est pas dans les catégories à développer + // alors on l'ajoute aux catégories à développer + else if ( !in_array( $row['id'], $tab_expand ) ) + { + $expand = implode( ",", $tab_expand ); + if ( strlen( $expand ) > 0 ) + { + $expand.= ","; + } + $expand.= $row['id']; + } + // si la catégorie est déjà dans les catégories à développer + // alors on la retire des catégories à développer + else + { + $expand = array_remove( $tab_expand, $row['id'] ); + } + $url = "./category.php?cat=".$page['cat']."&expand=$expand"; + if ( $page['cat'] == 'search' ) + { + $url.= "&search=".$_GET['search']; + } + $lien_cat = add_session_id_to_url( $url ); + if ( $row['name'] == "" ) + { + $name = str_replace( "_", " ", $row['dir'] ); + } + else + { + $name = $row['name']; + } + + $vtp->addSession( $handle, 'category' ); + $vtp->setVar( $handle, 'category.indent', $indent ); + + if ( $user['expand'] == "true" or $nb_subcats == 0 ) + { + $vtp->addSession( $handle, 'bullet_wo_link' ); + $vtp->setVar( $handle, 'bullet_wo_link.bullet_url', + $user['lien_collapsed'] ); + $vtp->setVar( $handle, 'bullet_wo_link.bullet_alt', '>' ); + $vtp->closeSession( $handle, 'bullet_wo_link' ); + } + else + { + $vtp->addSession( $handle, 'bullet_w_link' ); + $vtp->setVar( $handle, 'bullet_w_link.bullet_link', $lien_cat ); + $vtp->setVar( $handle, 'bullet_w_link.bullet_alt', '>' ); + if ( in_array( $row['id'], $tab_expand ) ) + { + $vtp->setVar( $handle, 'bullet_w_link.bullet_url', + $user['lien_expanded'] ); + } + else + { + $vtp->setVar( $handle, 'bullet_w_link.bullet_url', + $user['lien_collapsed'] ); + } + $vtp->closeSession( $handle, 'bullet_w_link' ); + } + $vtp->setVar( $handle, 'category.link_url', + add_session_id( './category.php?cat='. + $row['id'].'&expand='.$expand ) ); + $vtp->setVar( $handle, 'category.link_name', $name ); + if ( $id_uppercat == "" ) + { + $vtp->setVar( $handle, 'category.name_style', 'font-weight:bold;' ); + } + if ( $nb_subcats > 0 ) + { + $vtp->addSession( $handle, 'subcat' ); + $vtp->setVar( $handle, 'subcat.nb_subcats', $nb_subcats ); + $vtp->closeSession( $handle, 'subcat' ); + } + $vtp->setVar( $handle, 'category.total_cat', $row['nb_images'] ); + $date_dispo = explode( "-", $row['date_dernier'] ); + $date_cat = mktime( 0, 0, 0, $date_dispo[1], $date_dispo[2], + $date_dispo[0] ); + $vtp->setVar( $handle, 'category.cat_icon', get_icon( $date_cat ) ); + $vtp->closeSession( $handle, 'category' ); + + if ( in_array( $row['id'], $tab_expand ) or $user['expand'] == "true" ) + { + display_cat( $row['id'], $indent.' ', + $restriction, $tab_expand ); + } + } + } +} + +function get_nb_subcats( $id ) +{ + global $prefixeTable,$user; + + $query = 'select count(*) as count'; + $query.= ' from '.$prefixeTable.'categories'; + $query.= ' where id_uppercat = '.$id; + for ( $i = 0; $i < sizeof( $user['restrictions'] ); $i++ ) + { + $query.= " and id != ".$user['restrictions'][$i]; + } + $query.= ';'; + $result = mysql_query( $query ); + $row = mysql_fetch_array( $result ); + return $row['count']; +} + +function get_total_image( $id, $restriction ) +{ + global $prefixeTable; + + $total = 0; + + $query = 'select id,nb_images'; + $query.= ' from '.$prefixeTable.'categories'; + $query.= ' where id_uppercat'; + if ( !is_numeric( $id ) ) + { + $query.= ' is NULL'; + } + else + { + $query.= ' = '.$id; + } + $query.= ";"; + $result = mysql_query( $query ); + while ( $row = mysql_fetch_array( $result ) ) + { + if ( !in_array( $row['id'], $restriction ) ) + { + $total+= $row['nb_images']; + $total+= get_total_image( $row['id'], $restriction ); + } + } + return $total; +} + +// variables : +// $cat['comment'] +// $cat['dir'] +// $cat['last_dir'] +// $cat['name'] is an array : +// - $cat['name'][0] is the lowest cat name +// and +// - $cat['name'][n] is the most uppercat name findable +// $cat['nb_images'] +// $cat['id_uppercat'] +// $cat['site_id'] +function get_cat_info( $id ) +{ + global $prefixeTable; + + $cat = array(); + $cat['name'] = array(); + + $query = 'select nb_images,id_uppercat,comment,site_id,galleries_url,dir'; + $query.= ' from '.$prefixeTable.'categories as a'; + $query.= ', '.$prefixeTable.'sites as b'; + $query.= ' where a.id = '.$id; + $query.= ' and a.site_id = b.id;'; + $row = mysql_fetch_array( mysql_query( $query ) ); + $cat['site_id'] = $row['site_id']; + $cat['id_uppercat'] = $row['id_uppercat']; + $cat['comment'] = nl2br( $row['comment'] ); + $cat['nb_images'] = $row['nb_images']; + $cat['last_dir'] = $row['dir']; + $galleries_url = $row['galleries_url']; + + $cat['dir'] = ""; + $i = 0; + $is_root = false; + $row['id_uppercat'] = $id; + while ( !$is_root ) + { + $query = 'select name,dir,id_uppercat'; + $query.= ' from '.$prefixeTable.'categories'; + $query.= ' where id = '.$row['id_uppercat'].';'; + $row = mysql_fetch_array( mysql_query( $query ) ); + $cat['dir'] = $row['dir']."/".$cat['dir']; + if ( $row['name'] == "" ) + { + $cat['name'][$i] = str_replace( "_", " ", $row['dir'] ); + } + else + { + $cat['name'][$i] = $row['name']; + } + if ( $row['id_uppercat'] == "" ) + { + $is_root = true; + } + $i++; + } + $cat['local_dir'] = substr( $cat['dir'], 0 , strlen( $cat['dir'] ) - 1 ); + $cat['dir'] = $galleries_url.$cat['dir']; + + return $cat; +} + +// The function get_cat_display_name returns a string containing the list +// of upper categories to the root category from the lowest category shown +// example : "anniversaires - fete mere 2002 - animaux - erika" +// You can give two parameters : +// - $separation : the string between each category name " - " for example +// - $style : the style of the span tag for the lowest category, +// "font-style:italic;" for example +function get_cat_display_name( $array_cat_names, $separation, $style ) +{ + $output = ""; + for ( $i = sizeof( $array_cat_names ) - 1; $i >= 0; $i-- ) + { + if ( $i != sizeof( $array_cat_names ) - 1 ) + { + $output.= $separation; + } + if ( $i != 0 ) + { + $output.= $array_cat_names[$i]; + } + else + { + if ( $style != "" ) + { + $output.= '<span style="'.$style.'">'; + } + $output.= $array_cat_names[$i]; + if ( $style != "" ) + { + $output.= "</span>"; + } + } + } + return replace_space( $output ); +} + +// initialize_category initializes ;-) the variables in relation +// with category : +// 1. calculation of the number of pictures in the category +// 2. determination of the SQL query part to ask to find the right category +// $page['where'] is not the same if we are in +// - simple category +// - search result +// - favorites displaying +// - most visited pictures +// - best rated pictures +// - recent pictures +// 3. determination of the title of the page +// 4. creation of the navigation bar +function initialize_category( $calling_page = 'category' ) +{ + global $prefixeTable,$page,$lang,$user,$conf; + + if ( isset( $page['cat'] ) ) + { + // $page['nb_image_page'] is the number of picture to display on this page + // By default, it is the same as the $user['nb_image_page'] + $page['nb_image_page'] = $user['nb_image_page']; + // $url is used to create the navigation bar + $url = './category.php?cat='.$page['cat'].'&expand='.$page['expand']; + // simple category + if ( is_numeric( $page['cat'] ) ) + { + $result = get_cat_info( $page['cat'] ); + $page['comment'] = $result['comment']; + $page['cat_dir'] = $result['dir']; + $page['cat_name'] = $result['name']; + $page['cat_nb_images'] = $result['nb_images']; + $page['cat_site_id'] = $result['site_id']; + $page['title'] = get_cat_display_name( $page['cat_name'], ' - ', '' ); + $page['where'] = ' where cat_id = '.$page['cat']; + } + else + { + $query = ''; + // search result + if ( $page['cat'] == 'search' ) + { + $page['title'] = $lang['search_result']; + if ( $calling_page == 'picture' ) + { + $page['title'].= ' : <span style="font-style:italic;">'; + $page['title'].= $_GET['search']."</span>"; + } + $page['where'] = " where ( file like '%".$_GET['search']."%'"; + $page['where'].= " or name like '%".$_GET['search']."%'"; + $page['where'].= " or comment like '%".$_GET['search']."%' )"; + + $query = 'select count(*) as nb_total_images'; + $query.= ' from '.$prefixeTable.'images'; + $query.= $page['where']; + $query.= ';'; + + $url.= '&search='.$_GET['search']; + } + // favorites displaying + else if ( $page['cat'] == 'fav' ) + { + $page['title'] = $lang['favorites']; + + $page['where'] = ', '.$prefixeTable.'favorites'; + $page['where'].= ' where user_id = '.$user['id']; + $page['where'].= ' and image_id = id'; + + $query = 'select count(*) as nb_total_images'; + $query.= ' from '.$prefixeTable.'favorites'; + $query.= ' where user_id = '.$user['id']; + $query.= ';'; + } + // pictures within the short period + else if ( $page['cat'] == 'recent' ) + { + $page['title'] = $lang['recent_cat_title']; + // We must find the date corresponding to : + // today - $conf['periode_courte'] + $date = time() - 60*60*24*$user['short_period']; + $page['where'] = " where date_available > '"; + $page['where'].= date( 'Y-m-d', $date )."'"; + + $query = 'select count(*) as nb_total_images'; + $query.= ' from '.$prefixeTable.'images'; + $query.= $page['where']; + $query.= ';'; + } + // most visited pictures + else if ( $page['cat'] == 'most_visited' ) + { + $page['title'] = $conf['top_number'].' '.$lang['most_visited_cat']; + $page['where'] = ' where cat_id != -1'; + $conf['order_by'] = ' order by hit desc, file asc'; + $page['cat_nb_images'] = $conf['top_number']; + if ( $page['start'] + $user['nb_image_page'] >= $conf['top_number'] ) + { + $page['nb_image_page'] = $conf['top_number'] - $page['start']; + } + } + + if ( $query != '' ) + { + $result = mysql_query( $query ); + $row = mysql_fetch_array( $result ); + $page['cat_nb_images'] = $row['nb_total_images']; + } + + if ( $page['cat'] == 'search' or $page['cat'] == 'most_visited' + or $page['cat'] == 'recent' or $page['cat'] == 'best_rated' ) + { + // we must not show pictures of a forbidden category + $restricted_cat = get_all_restrictions( $user['id'], $user['status'] ); + if ( sizeof( $restricted_cat ) > 0 ) + { + for ( $i = 0; $i < sizeof( $restricted_cat ); $i++ ) + { + $page['where'].= ' and cat_id != '.$restricted_cat[$i]; + } + } + } + } + if ( $calling_page == 'category' ) + { + $page['navigation_bar'] = + create_navigation_bar( $url, $page['cat_nb_images'], $page['start'], + $user['nb_image_page'], 'back' ); + } + } + else + { + $page['title'] = $lang['diapo_default_page_title']; + } +} +?>
\ No newline at end of file |