feature 2999: documentation of functions_search and functions_tag

git-svn-id: http://piwigo.org/svn/trunk@25658 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
mistic100 2013-11-23 22:57:15 +00:00
parent 037413eee8
commit da06285d4e
7 changed files with 142 additions and 108 deletions

View file

@ -342,7 +342,7 @@ SELECT DISTINCT(id)
* Finds a matching category id from a potential list of permalinks
*
* @param string[] $permalinks
* @param int $idx filled with the index in $permalinks that matches
* @param int &$idx filled with the index in $permalinks that matches
* @return int|null
*/
function get_cat_id_from_permalinks($permalinks, &$idx)

View file

@ -72,9 +72,9 @@ function user_comment_check($action, $comment)
/**
* Tries to insert a user comment and returns action to perform.
*
* @param array $comm
* @param array &$comm
* @param string $key secret key sent back to the browser
* @param array $infos output array of error messages
* @param array &$infos output array of error messages
* @return string validate, moderate, reject
*/
function insert_user_comment(&$comm, $key, &$infos)

View file

@ -29,7 +29,7 @@
/**
* Updates data of categories with filtered values
*
* @param array $cats
* @param array &$cats
*/
function update_cats_with_filtered_data(&$cats)
{

View file

@ -361,7 +361,7 @@ function news_exists($start=null, $end=null)
/**
* Formats a news line and adds it to the array (e.g. '5 new elements')
*
* @param array $news
* @param array &$news
* @param int $count
* @param string $singular_key
* @param string $plural_key

View file

@ -50,13 +50,13 @@ abstract class PluginMaintain
/**
* @param string $plugin_version
* @param array $errors - used to return error messages
* @param array &$errors - used to return error messages
*/
abstract function install($plugin_version, &$errors=array());
/**
* @param string $plugin_version
* @param array $errors - used to return error messages
* @param array &$errors - used to return error messages
*/
abstract function activate($plugin_version, &$errors=array());
@ -119,7 +119,7 @@ abstract class ThemeMaintain
/**
* @param string $theme_version
* @param array $errors - used to return error messages
* @param array &$errors - used to return error messages
*/
abstract function activate($theme_version, &$errors=array());
@ -342,7 +342,7 @@ function trigger_action($event)
* @depracted 2.6
*
* @param string $plugin_id
* @param mixed $data
* @param mixed &$data
* @return bool
*/
function set_plugin_data($plugin_id, &$data)

View file

@ -21,12 +21,16 @@
// | USA. |
// +-----------------------------------------------------------------------+
/**
* @package functions\search
*/
/**
* returns search rules stored into a serialized array in "search"
* Returns search rules stored into a serialized array in "search"
* table. Each search rules set is numericaly identified.
*
* @param int search_id
* @param int $search_id
* @return array
*/
function get_search_array($search_id)
@ -47,12 +51,10 @@ SELECT rules
}
/**
* returns the SQL clause from a search identifier
* Returns the SQL clause for a search.
* Transforms the array returned by get_search_array() into SQL sub-query.
*
* Search rules are stored in search table as a serialized array. This array
* need to be transformed into an SQL clause to be used in queries.
*
* @param array search
* @param array $search
* @return string
*/
function get_sql_search_clause($search)
@ -170,12 +172,13 @@ function get_sql_search_clause($search)
}
/**
* returns the list of items corresponding to the advanced search array
* Returns the list of items corresponding to the advanced search array.
*
* @param array search
* @param array $search
* @param string $images_where optional additional restriction on images table
* @return array
*/
function get_regular_search_results($search, $images_where)
function get_regular_search_results($search, $images_where='')
{
global $conf;
$forbidden = get_sql_condition_FandF(
@ -246,34 +249,55 @@ SELECT DISTINCT(id)
return $items;
}
/**
* Finds if a char is a letter, a figure or any char of the extended ASCII table (>127).
*
* @param char $ch
* @return bool
*/
function is_word_char($ch)
{
return ($ch>='0' && $ch<='9') || ($ch>='a' && $ch<='z') || ($ch>='A' && $ch<='Z') || ord($ch)>127;
}
/**
* Finds if a char is a special token for word start: [{<=*+
*
* @param char $ch
* @return bool
*/
function is_odd_wbreak_begin($ch)
{
return strpos('[{<=*+', $ch)===false ? false:true;
}
/**
* Finds if a char is a special token for word end: ]}>=*+
*
* @param char $ch
* @return bool
*/
function is_odd_wbreak_end($ch)
{
return strpos(']}>=*+', $ch)===false ? false:true;
}
define('QST_QUOTED', 0x01);
define('QST_NOT', 0x02);
define('QST_WILDCARD_BEGIN',0x04);
define('QST_WILDCARD_END', 0x08);
define('QST_QUOTED', 0x01);
define('QST_NOT', 0x02);
define('QST_WILDCARD_BEGIN', 0x04);
define('QST_WILDCARD_END', 0x08);
define('QST_WILDCARD', QST_WILDCARD_BEGIN|QST_WILDCARD_END);
/**
* analyzes and splits the quick/query search query $q into tokens
* Analyzes and splits the quick/query search query $q into tokens.
* q='john bill' => 2 tokens 'john' 'bill'
* Special characters for MySql full text search (+,<,>,~) appear in the token modifiers.
* The query can contain a phrase: 'Pierre "New York"' will return 'pierre' qnd 'new york'.
*
* @param string $q
* @param array &$qtokens
* @param array &$qtoken_modifiers
*/
function analyse_qsearch($q, &$qtokens, &$qtoken_modifiers)
{
@ -368,11 +392,15 @@ function analyse_qsearch($q, &$qtokens, &$qtoken_modifiers)
}
}
/**
* returns the LIKE sql clause corresponding to the quick search query
* that has been split into tokens
* Returns the LIKE SQL clause corresponding to the quick search query
* that has been split into tokens.
* for example file LIKE '%john%' OR file LIKE '%bill%'.
*
* @param array $tokens
* @param array $token_modifiers
* @param string $field
* @return string|null
*/
function get_qsearch_like_clause($tokens, $token_modifiers, $field)
{
@ -393,7 +421,14 @@ function get_qsearch_like_clause($tokens, $token_modifiers, $field)
}
/**
*/
* Returns tags corresponding to the quick search query that has been split into tokens.
*
* @param array $tokens
* @param array $token_modifiers
* @param array &$token_tag_ids
* @param array &$not_tag_ids
* @param array &$all_tags
*/
function get_qsearch_tags($tokens, $token_modifiers, &$token_tag_ids, &$not_tag_ids, &$all_tags)
{
$token_tag_ids = array_fill(0, count($tokens), array() );
@ -546,24 +581,27 @@ SELECT t.*, COUNT(image_id) AS counter
usort($all_tags, 'tag_alpha_compare');
foreach ( $all_tags as &$tag )
{
$tag['name'] = trigger_event('render_tag_name', $tag['name']);
}
}
/**
* returns the search results corresponding to a quick/query search.
* Returns the search results corresponding to a quick/query search.
* A quick/query search returns many items (search is not strict), but results
* are sorted by relevance unless $super_order_by is true. Returns:
* array (
* 'items' => array(85,68,79...)
* 'qs' => array(
* 'matching_tags' => array of matching tags
* 'matching_cats' => array of matching categories
* 'matching_cats_no_images' =>array(99) - matching categories without images
* ))
* array (
* 'items' => array of matching images
* 'qs' => array(
* 'matching_tags' => array of matching tags
* 'matching_cats' => array of matching categories
* 'matching_cats_no_images' =>array(99) - matching categories without images
* )
* )
*
* @param string q
* @param bool super_order_by
* @param string images_where optional aditional restriction on images table
* @param string $q
* @param bool $super_order_by
* @param string $images_where optional additional restriction on images table
* @return array
*/
function get_quick_search_results($q, $super_order_by, $images_where='')
@ -763,10 +801,12 @@ SELECT DISTINCT(id)
}
/**
* returns an array of 'items' corresponding to the search id
* Returns an array of 'items' corresponding to the search id.
* It can be either a quick search or a regular search.
*
* @param int search id
* @param string images_where optional aditional restriction on images table
* @param int $search_id
* @param bool $super_order_by
* @param string $images_where optional aditional restriction on images table
* @return array
*/
function get_search_results($search_id, $super_order_by, $images_where='')
@ -782,4 +822,5 @@ function get_search_results($search_id, $super_order_by, $images_where='')
return get_quick_search_results($search['q'], $super_order_by, $images_where);
}
}
?>

View file

@ -21,8 +21,16 @@
// | USA. |
// +-----------------------------------------------------------------------+
/**
* @package functions\tag
*/
/** returns the number of available tags for the connected user */
/**
* Returns the number of available tags for the connected user.
*
* @return int
*/
function get_nb_available_tags()
{
global $user;
@ -38,14 +46,11 @@ function get_nb_available_tags()
}
/**
* 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.
* Returns all available tags for the connected user (not sorted).
* The returned list can be a subset of all existing tags due to permissions,
* also tags with no images are not returned.
*
* 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
* @return array [id, name, counter, url_name]
*/
function get_available_tags()
{
@ -53,18 +58,18 @@ function get_available_tags()
$query = '
SELECT tag_id, COUNT(DISTINCT(it.image_id)) AS 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'
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';
GROUP BY tag_id
;';
$tag_counters = simple_hash_from_query($query, 'tag_id', 'counter');
if ( empty($tag_counters) )
@ -76,6 +81,7 @@ SELECT tag_id, COUNT(DISTINCT(it.image_id)) AS counter
SELECT *
FROM '.TAGS_TABLE;
$result = pwg_query($query);
$tags = array();
while ($row = pwg_db_fetch_assoc($result))
{
@ -91,9 +97,9 @@ SELECT *
}
/**
* All tags, even tags associated to no image.
* Returns all tags even associated to no image.
*
* @return array
* @return array [id, name, url_name]
*/
function get_all_tags()
{
@ -119,11 +125,11 @@ SELECT *
* 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
* calculation method avoid having very different levels for tags having
* nearly the same count when set are small.
*
* @param array tags
* @return array
* @param array $tags at least [id, counter]
* @return array [..., level]
*/
function add_level_to_tags($tags)
{
@ -173,13 +179,14 @@ function add_level_to_tags($tags)
}
/**
* return the list of image ids corresponding to given tags. AND & OR mode
* supported.
* Return the list of image ids corresponding to given tags.
* AND & OR mode supported.
*
* @param array tag ids
* @param int[] $tag_ids
* @param string mode
* @param string extra_images_where_sql - optionally apply a sql where filter to retrieved images
* @param string order_by - optionally overwrite default photo order
* @param string $extra_images_where_sql - optionally apply a sql where filter to retrieved images
* @param string $order_by - optionally overwrite default photo order
* @param bool $user_permissions
* @return array
*/
function get_image_ids_for_tags($tag_ids, $mode='AND', $extra_images_where_sql='', $order_by='', $use_permissions=true)
@ -190,7 +197,8 @@ function get_image_ids_for_tags($tag_ids, $mode='AND', $extra_images_where_sql='
return array();
}
$query = 'SELECT id
$query = '
SELECT id
FROM '.IMAGES_TABLE.' i ';
if ($use_permissions)
@ -229,14 +237,14 @@ function get_image_ids_for_tags($tag_ids, $mode='AND', $extra_images_where_sql='
}
/**
* return a list of tags corresponding to given items.
* Return a list of tags corresponding to given items.
*
* @param array items
* @param array max_tags
* @param array excluded_tag_ids
* @return array
* @param int[] $items
* @param int $max_tags
* @param int[] $excluded_tag_ids
* @return array [id, name, counter, url_name]
*/
function get_common_tags($items, $max_tags, $excluded_tag_ids=null)
function get_common_tags($items, $max_tags, $excluded_tag_ids=array())
{
if (empty($items))
{
@ -256,7 +264,7 @@ SELECT t.*, count(*) AS counter
GROUP BY t.id
ORDER BY ';
if ($max_tags>0)
{
{ // TODO : why ORDER field is in the if ?
$query .= 'counter DESC
LIMIT '.$max_tags;
}
@ -277,45 +285,29 @@ SELECT t.*, count(*) AS counter
}
/**
* return a list of tags corresponding to any of ids, url_names, names
* Return a list of tags corresponding to any of ids, url_names or names.
*
* @param array ids
* @param array url_names
* @param array names
* @return array
* @param int[] $ids
* @param string[] $url_names
* @param string[] $names
* @return array [id, name, url_name]
*/
function find_tags($ids, $url_names=array(), $names=array() )
function find_tags($ids=array(), $url_names=array(), $names=array() )
{
$where_clauses = array();
if ( !empty($ids) )
if (!empty($ids))
{
$where_clauses[] = 'id IN ('.implode(',', $ids).')';
}
if ( !empty($url_names) )
if (!empty($url_names))
{
$where_clauses[] =
'url_name IN ('.
implode(
',',
array_map(
create_function('$s', 'return "\'".$s."\'";'),
$url_names
)
)
.')';
'url_name IN (\''. implode('\', \'', $url_names) .'\')';
}
if ( !empty($names) )
if (!empty($names))
{
$where_clauses[] =
'name IN ('.
implode(
',',
array_map(
create_function('$s', 'return "\'".$s."\'";'),
$names
)
)
.')';
'name IN (\''. implode('\', \'', $names) .'\')';
}
if (empty($where_clauses))
{
@ -336,4 +328,5 @@ SELECT *
}
return $tags;
}
?>