aboutsummaryrefslogtreecommitdiffstats
path: root/BSF/include/functions_tag.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'BSF/include/functions_tag.inc.php')
-rw-r--r--BSF/include/functions_tag.inc.php323
1 files changed, 0 insertions, 323 deletions
diff --git a/BSF/include/functions_tag.inc.php b/BSF/include/functions_tag.inc.php
deleted file mode 100644
index 7bd5d8408..000000000
--- a/BSF/include/functions_tag.inc.php
+++ /dev/null
@@ -1,323 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based picture gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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. |
-// +-----------------------------------------------------------------------+
-
-
-/**
- * Tags available. Each return tag is represented as an array with its id,
- * its name, its weight (count), its url name. Tags are not sorted.
- *
- * The returned list can be a subset of all existing tags due to
- * permissions, only if a list of forbidden categories is provided
- *
- * @param array forbidden categories
- * @return array
- */
-function get_available_tags()
-{
- // we can find top fatter tags among reachable images
- $query = '
-SELECT tag_id, COUNT(DISTINCT(it.image_id)) counter
- FROM '.IMAGE_CATEGORY_TABLE.' ic
- INNER JOIN '.IMAGE_TAG_TABLE.' it ON ic.image_id=it.image_id'.get_sql_condition_FandF
- (
- array
- (
- 'forbidden_categories' => 'category_id',
- 'visible_categories' => 'category_id',
- 'visible_images' => 'ic.image_id'
- ),
- '
- WHERE'
- ).'
- GROUP BY tag_id
- ORDER BY NULL';
- $tag_counters = simple_hash_from_query($query, 'tag_id', 'counter');
-
- if ( empty($tag_counters) )
- {
- return array();
- }
-
- $query = '
-SELECT id, name, url_name
- FROM '.TAGS_TABLE;
- $result = pwg_query($query);
- $tags = array();
- while ($row = mysql_fetch_assoc($result))
- {
- $counter = @$tag_counters[ $row['id'] ];
- if ( $counter )
- {
- $row['counter'] = $counter;
- array_push($tags, $row);
- }
- }
- return $tags;
-}
-
-/**
- * All tags, even tags associated to no image.
- *
- * @return array
- */
-function get_all_tags()
-{
- $query = '
-SELECT id,
- name,
- url_name
- FROM '.TAGS_TABLE.'
-;';
- $result = pwg_query($query);
- $tags = array();
- while ($row = mysql_fetch_assoc($result))
- {
- array_push($tags, $row);
- }
-
- usort($tags, 'name_compare');
-
- return $tags;
-}
-
-/**
- * Giving a set of tags with a counter for each one, calculate the display
- * level of each tag.
- *
- * The level of each tag depends on the average count of tags. This
- * calcylation method avoid having very different levels for tags having
- * nearly the same count when set are small.
- *
- * @param array tags
- * @return array
- */
-function add_level_to_tags($tags)
-{
- global $conf;
-
- if (count($tags) == 0)
- {
- return $tags;
- }
-
- $total_count = 0;
-
- foreach ($tags as $tag)
- {
- $total_count+= $tag['counter'];
- }
-
- // average count of available tags will determine the level of each tag
- $tag_average_count = $total_count / count($tags);
-
- // tag levels threshold calculation: a tag with an average rate must have
- // the middle level.
- for ($i = 1; $i < $conf['tags_levels']; $i++)
- {
- $threshold_of_level[$i] =
- 2 * $i * $tag_average_count / $conf['tags_levels'];
- }
-
- // display sorted tags
- foreach (array_keys($tags) as $k)
- {
- $tags[$k]['level'] = 1;
-
- // based on threshold, determine current tag level
- for ($i = $conf['tags_levels'] - 1; $i >= 1; $i--)
- {
- if ($tags[$k]['counter'] > $threshold_of_level[$i])
- {
- $tags[$k]['level'] = $i + 1;
- break;
- }
- }
- }
-
- return $tags;
-}
-
-/**
- * return the list of image ids corresponding to given tags. AND & OR mode
- * supported.
- *
- * @param array tag ids
- * @param string mode
- * @return array
- */
-function get_image_ids_for_tags($tag_ids, $mode = 'AND')
-{
- switch ($mode)
- {
- case 'AND':
- {
- // strategy is to list images associated to each tag
- $tag_images = array();
-
- foreach ($tag_ids as $tag_id)
- {
- $query = '
-SELECT image_id
- FROM '.IMAGE_TAG_TABLE.'
- WHERE tag_id = '.$tag_id.'
-;';
- $tag_images[$tag_id] = array_from_query($query, 'image_id');
- }
-
- // then we calculate the intersection, the images that are associated to
- // every tags
- $items = array_shift($tag_images);
- foreach ($tag_images as $images)
- {
- $items = array_intersect($items, $images);
- }
-
- return array_unique($items);
- break;
- }
- case 'OR':
- {
- $query = '
-SELECT DISTINCT image_id
- FROM '.IMAGE_TAG_TABLE.'
- WHERE tag_id IN ('.implode(',', $tag_ids).')
-;';
- return array_from_query($query, 'image_id');
- break;
- }
- default:
- {
- die('get_image_ids_for_tags: unknown mode, only AND & OR are supported');
- }
- }
-}
-
-/**
- * return a list of tags corresponding to given items.
- *
- * @param array items
- * @param array max_tags
- * @param array excluded_tag_ids
- * @return array
- */
-function get_common_tags($items, $max_tags, $excluded_tag_ids=null)
-{
- if (empty($items))
- {
- return array();
- }
- $query = '
-SELECT id, name, url_name, count(*) counter
- FROM '.IMAGE_TAG_TABLE.'
- INNER JOIN '.TAGS_TABLE.' ON tag_id = id
- WHERE image_id IN ('.implode(',', $items).')';
- if (!empty($excluded_tag_ids))
- {
- $query.='
- AND tag_id NOT IN ('.implode(',', $excluded_tag_ids).')';
- }
- $query .='
- GROUP BY tag_id';
- if ($max_tags>0)
- {
- $query .= '
- ORDER BY counter DESC
- LIMIT 0,'.$max_tags;
- }
- else
- {
- $query .= '
- ORDER BY NULL';
- }
-
- $result = pwg_query($query);
- $tags = array();
- while($row = mysql_fetch_assoc($result))
- {
- array_push($tags, $row);
- }
- usort($tags, 'name_compare');
- return $tags;
-}
-
-/**
- * return a list of tags corresponding to any of ids, url_names, names
- *
- * @param array ids
- * @param array url_names
- * @param array names
- * @return array
- */
-function find_tags($ids, $url_names=array(), $names=array() )
-{
- $where_clauses = array();
- if ( !empty($ids) )
- {
- $where_clauses[] = 'id IN ('.implode(',', $ids).')';
- }
- if ( !empty($url_names) )
- {
- $where_clauses[] =
- 'url_name IN ('.
- implode(
- ',',
- array_map(
- create_function('$s', 'return "\'".$s."\'";'),
- $url_names
- )
- )
- .')';
- }
- if ( !empty($names) )
- {
- $where_clauses[] =
- 'name IN ('.
- implode(
- ',',
- array_map(
- create_function('$s', 'return "\'".$s."\'";'),
- $names
- )
- )
- .')';
- }
- if (empty($where_clauses))
- {
- return array();
- }
-
- $query = '
-SELECT id, url_name, name
- FROM '.TAGS_TABLE.'
- WHERE '. implode( '
- OR ', $where_clauses);
-
- $result = pwg_query($query);
- $tags = array();
- while ($row = mysql_fetch_assoc($result))
- {
- array_push($tags, $row);
- }
- return $tags;
-}
-?> \ No newline at end of file