splits ws_functions.inc.php in 8 files + comments + code cleaning
git-svn-id: http://piwigo.org/svn/trunk@25281 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
parent
8ec9e2bbb6
commit
2eae3907a7
11 changed files with 4422 additions and 3830 deletions
File diff suppressed because it is too large
Load diff
30
include/ws_functions/index.php
Normal file
30
include/ws_functions/index.php
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2013 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. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
// Recursive call
|
||||
$url = '../';
|
||||
header( 'Request-URI: '.$url );
|
||||
header( 'Content-Location: '.$url );
|
||||
header( 'Location: '.$url );
|
||||
exit();
|
||||
?>
|
838
include/ws_functions/pwg.categories.php
Normal file
838
include/ws_functions/pwg.categories.php
Normal file
|
@ -0,0 +1,838 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2013 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. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns images per category
|
||||
* @param mixed[] $params
|
||||
* @option int[] cat_id (optional)
|
||||
* @option bool recursive
|
||||
* @option int per_page
|
||||
* @option int page
|
||||
* @option string order (optional)
|
||||
*/
|
||||
function ws_categories_getImages($params, &$service)
|
||||
{
|
||||
global $user, $conf;
|
||||
|
||||
$images = array();
|
||||
|
||||
//------------------------------------------------- get the related categories
|
||||
$where_clauses = array();
|
||||
foreach ($params['cat_id'] as $cat_id)
|
||||
{
|
||||
if ($params['recursive'])
|
||||
{
|
||||
$where_clauses[] = 'uppercats '.DB_REGEX_OPERATOR.' \'(^|,)'.$cat_id.'(,|$)\'';
|
||||
}
|
||||
else
|
||||
{
|
||||
$where_clauses[] = 'id='.$cat_id;
|
||||
}
|
||||
}
|
||||
if (!empty($where_clauses))
|
||||
{
|
||||
$where_clauses = array('('. implode("\n OR ", $where_clauses) . ')');
|
||||
}
|
||||
$where_clauses[] = get_sql_condition_FandF(
|
||||
array('forbidden_categories' => 'id'),
|
||||
null, true
|
||||
);
|
||||
|
||||
$query = '
|
||||
SELECT id, name, permalink, image_order
|
||||
FROM '. CATEGORIES_TABLE .'
|
||||
WHERE '. implode("\n AND ", $where_clauses) .'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
$cats = array();
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$row['id'] = (int)$row['id'];
|
||||
$cats[ $row['id'] ] = $row;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------- get the images
|
||||
if (!empty($cats))
|
||||
{
|
||||
$where_clauses = ws_std_image_sql_filter($params, 'i.');
|
||||
$where_clauses[] = 'category_id IN ('. implode(',', array_keys($cats)) .')';
|
||||
$where_clauses[] = get_sql_condition_FandF(
|
||||
array('visible_images' => 'i.id'),
|
||||
null, true
|
||||
);
|
||||
|
||||
$order_by = ws_std_image_sql_order($params, 'i.');
|
||||
if ( empty($order_by)
|
||||
and count($params['cat_id'])==1
|
||||
and isset($cats[ $params['cat_id'][0] ]['image_order'])
|
||||
)
|
||||
{
|
||||
$order_by = $cats[ $params['cat_id'][0] ]['image_order'];
|
||||
}
|
||||
$order_by = empty($order_by) ? $conf['order_by'] : 'ORDER BY '.$order_by;
|
||||
|
||||
$query = '
|
||||
SELECT i.*, GROUP_CONCAT(category_id) AS cat_ids
|
||||
FROM '. IMAGES_TABLE .' i
|
||||
INNER JOIN '. IMAGE_CATEGORY_TABLE .' ON i.id=image_id
|
||||
WHERE '. implode("\n AND ", $where_clauses) .'
|
||||
GROUP BY i.id
|
||||
'. $order_by .'
|
||||
LIMIT '. $params['per_page'] .'
|
||||
OFFSET '. ($params['per_page']*$params['page']) .'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$image = array();
|
||||
foreach (array('id', 'width', 'height', 'hit') as $k)
|
||||
{
|
||||
if (isset($row[$k]))
|
||||
{
|
||||
$image[$k] = (int)$row[$k];
|
||||
}
|
||||
}
|
||||
foreach (array('file', 'name', 'comment', 'date_creation', 'date_available') as $k)
|
||||
{
|
||||
$image[$k] = $row[$k];
|
||||
}
|
||||
$image = array_merge($image, ws_std_get_urls($row));
|
||||
|
||||
$image_cats = array();
|
||||
foreach (explode(',', $row['cat_ids']) as $cat_id)
|
||||
{
|
||||
$url = make_index_url(
|
||||
array(
|
||||
'category' => $cats[$cat_id],
|
||||
)
|
||||
);
|
||||
$page_url = make_picture_url(
|
||||
array(
|
||||
'category' => $cats[$cat_id],
|
||||
'image_id' => $row['id'],
|
||||
'image_file' => $row['file'],
|
||||
)
|
||||
);
|
||||
$image_cats[] = array(
|
||||
'id' => (int)$cat_id,
|
||||
'url' => $url,
|
||||
'page_url' => $page_url,
|
||||
);
|
||||
}
|
||||
|
||||
$image['categories'] = new PwgNamedArray(
|
||||
$image_cats,
|
||||
'category',
|
||||
array('id', 'url', 'page_url')
|
||||
);
|
||||
$images[] = $image;
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'paging' => new PwgNamedStruct(
|
||||
array(
|
||||
'page' => $params['page'],
|
||||
'per_page' => $params['per_page'],
|
||||
'count' => count($images)
|
||||
)
|
||||
),
|
||||
'images' => new PwgNamedArray(
|
||||
$images, 'image',
|
||||
ws_std_get_image_xml_attributes()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns a list of categories
|
||||
* @param mixed[] $params
|
||||
* @option int cat_id (optional)
|
||||
* @option bool recursive
|
||||
* @option bool public
|
||||
* @option bool tree_output
|
||||
* @option bool fullname
|
||||
*/
|
||||
function ws_categories_getList($params, &$service)
|
||||
{
|
||||
global $user, $conf;
|
||||
|
||||
$where = array('1=1');
|
||||
$join_type = 'INNER';
|
||||
$join_user = $user['id'];
|
||||
|
||||
if (!$params['recursive'])
|
||||
{
|
||||
if ($params['cat_id']>0)
|
||||
{
|
||||
$where[] = '(
|
||||
id_uppercat = '. (int)($params['cat_id']) .'
|
||||
OR id='.(int)($params['cat_id']).'
|
||||
)';
|
||||
}
|
||||
else
|
||||
{
|
||||
$where[] = 'id_uppercat IS NULL';
|
||||
}
|
||||
}
|
||||
else if ($params['cat_id']>0)
|
||||
{
|
||||
$where[] = 'uppercats '. DB_REGEX_OPERATOR .' \'(^|,)'.
|
||||
(int)($params['cat_id']) .'(,|$)\'';
|
||||
}
|
||||
|
||||
if ($params['public'])
|
||||
{
|
||||
$where[] = 'status = "public"';
|
||||
$where[] = 'visible = "true"';
|
||||
|
||||
$join_user = $conf['guest_id'];
|
||||
}
|
||||
else if (is_admin())
|
||||
{
|
||||
// in this very specific case, we don't want to hide empty
|
||||
// categories. Function calculate_permissions will only return
|
||||
// categories that are either locked or private and not permitted
|
||||
//
|
||||
// calculate_permissions does not consider empty categories as forbidden
|
||||
$forbidden_categories = calculate_permissions($user['id'], $user['status']);
|
||||
$where[]= 'id NOT IN ('.$forbidden_categories.')';
|
||||
$join_type = 'LEFT';
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
id, name, comment, permalink,
|
||||
uppercats, global_rank, id_uppercat,
|
||||
nb_images, count_images AS total_nb_images,
|
||||
representative_picture_id, user_representative_picture_id, count_images, count_categories,
|
||||
date_last, max_date_last, count_categories AS nb_categories
|
||||
FROM '. CATEGORIES_TABLE .'
|
||||
'.$join_type.' JOIN '. USER_CACHE_CATEGORIES_TABLE .'
|
||||
ON id=cat_id AND user_id='.$join_user.'
|
||||
WHERE '. implode("\n AND ", $where) .'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
// management of the album thumbnail -- starts here
|
||||
$image_ids = array();
|
||||
$categories = array();
|
||||
$user_representative_updates_for = array();
|
||||
// management of the album thumbnail -- stops here
|
||||
|
||||
$cats = array();
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$row['url'] = make_index_url(
|
||||
array(
|
||||
'category' => $row
|
||||
)
|
||||
);
|
||||
foreach (array('id','nb_images','total_nb_images','nb_categories') as $key)
|
||||
{
|
||||
$row[$key] = (int)$row[$key];
|
||||
}
|
||||
|
||||
if ($params['fullname'])
|
||||
{
|
||||
$row['name'] = strip_tags(get_cat_display_name_cache($row['uppercats'], null, false));
|
||||
}
|
||||
else
|
||||
{
|
||||
$row['name'] = strip_tags(
|
||||
trigger_event(
|
||||
'render_category_name',
|
||||
$row['name'],
|
||||
'ws_categories_getList'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$row['comment'] = strip_tags(
|
||||
trigger_event(
|
||||
'render_category_description',
|
||||
$row['comment'],
|
||||
'ws_categories_getList'
|
||||
)
|
||||
);
|
||||
|
||||
// management of the album thumbnail -- starts here
|
||||
//
|
||||
// on branch 2.3, the algorithm is duplicated from
|
||||
// include/category_cats, but we should use a common code for Piwigo 2.4
|
||||
//
|
||||
// warning : if the API method is called with $params['public'], the
|
||||
// album thumbnail may be not accurate. The thumbnail can be viewed by
|
||||
// the connected user, but maybe not by the guest. Changing the
|
||||
// filtering method would be too complicated for now. We will simply
|
||||
// avoid to persist the user_representative_picture_id in the database
|
||||
// if $params['public']
|
||||
if (!empty($row['user_representative_picture_id']))
|
||||
{
|
||||
$image_id = $row['user_representative_picture_id'];
|
||||
}
|
||||
else if (!empty($row['representative_picture_id']))
|
||||
{ // if a representative picture is set, it has priority
|
||||
$image_id = $row['representative_picture_id'];
|
||||
}
|
||||
else if ($conf['allow_random_representative'])
|
||||
{
|
||||
// searching a random representant among elements in sub-categories
|
||||
$image_id = get_random_image_in_category($row);
|
||||
}
|
||||
else
|
||||
{ // searching a random representant among representant of sub-categories
|
||||
if ($row['count_categories']>0 and $row['count_images']>0)
|
||||
{
|
||||
$query = '
|
||||
SELECT representative_picture_id
|
||||
FROM '. CATEGORIES_TABLE .'
|
||||
INNER JOIN '. USER_CACHE_CATEGORIES_TABLE .'
|
||||
ON id=cat_id AND user_id='.$user['id'].'
|
||||
WHERE uppercats LIKE \''.$row['uppercats'].',%\'
|
||||
AND representative_picture_id IS NOT NULL
|
||||
'.get_sql_condition_FandF(
|
||||
array('visible_categories' => 'id'),
|
||||
"\n AND"
|
||||
).'
|
||||
ORDER BY '. DB_RANDOM_FUNCTION .'()
|
||||
LIMIT 1
|
||||
;';
|
||||
$subresult = pwg_query($query);
|
||||
|
||||
if (pwg_db_num_rows($subresult) > 0)
|
||||
{
|
||||
list($image_id) = pwg_db_fetch_row($subresult);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($image_id))
|
||||
{
|
||||
if ($conf['representative_cache_on_subcats'] and $row['user_representative_picture_id'] != $image_id)
|
||||
{
|
||||
$user_representative_updates_for[ $row['id'] ] = $image_id;
|
||||
}
|
||||
|
||||
$row['representative_picture_id'] = $image_id;
|
||||
$image_ids[] = $image_id;
|
||||
$categories[] = $row;
|
||||
}
|
||||
unset($image_id);
|
||||
// management of the album thumbnail -- stops here
|
||||
|
||||
$cats[] = $row;
|
||||
}
|
||||
usort($cats, 'global_rank_compare');
|
||||
|
||||
// management of the album thumbnail -- starts here
|
||||
if (count($categories) > 0)
|
||||
{
|
||||
$thumbnail_src_of = array();
|
||||
$new_image_ids = array();
|
||||
|
||||
$query = '
|
||||
SELECT id, path, representative_ext, level
|
||||
FROM '. IMAGES_TABLE .'
|
||||
WHERE id IN ('. implode(',', $image_ids) .')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
if ($row['level'] <= $user['level'])
|
||||
{
|
||||
$thumbnail_src_of[$row['id']] = DerivativeImage::thumb_url($row);
|
||||
}
|
||||
else
|
||||
{
|
||||
// problem: we must not display the thumbnail of a photo which has a
|
||||
// higher privacy level than user privacy level
|
||||
//
|
||||
// * what is the represented category?
|
||||
// * find a random photo matching user permissions
|
||||
// * register it at user_representative_picture_id
|
||||
// * set it as the representative_picture_id for the category
|
||||
foreach ($categories as &$category)
|
||||
{
|
||||
if ($row['id'] == $category['representative_picture_id'])
|
||||
{
|
||||
// searching a random representant among elements in sub-categories
|
||||
$image_id = get_random_image_in_category($category);
|
||||
|
||||
if (isset($image_id) and !in_array($image_id, $image_ids))
|
||||
{
|
||||
$new_image_ids[] = $image_id;
|
||||
}
|
||||
if ($conf['representative_cache_on_level'])
|
||||
{
|
||||
$user_representative_updates_for[ $category['id'] ] = $image_id;
|
||||
}
|
||||
|
||||
$category['representative_picture_id'] = $image_id;
|
||||
}
|
||||
}
|
||||
unset($category);
|
||||
}
|
||||
}
|
||||
|
||||
if (count($new_image_ids) > 0)
|
||||
{
|
||||
$query = '
|
||||
SELECT id, path, representative_ext
|
||||
FROM '. IMAGES_TABLE .'
|
||||
WHERE id IN ('. implode(',', $new_image_ids) .')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$thumbnail_src_of[ $row['id'] ] = DerivativeImage::thumb_url($row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// compared to code in include/category_cats, we only persist the new
|
||||
// user_representative if we have used $user['id'] and not the guest id,
|
||||
// or else the real guest may see thumbnail that he should not
|
||||
if (!$params['public'] and count($user_representative_updates_for))
|
||||
{
|
||||
$updates = array();
|
||||
|
||||
foreach ($user_representative_updates_for as $cat_id => $image_id)
|
||||
{
|
||||
$updates[] = array(
|
||||
'user_id' => $user['id'],
|
||||
'cat_id' => $cat_id,
|
||||
'user_representative_picture_id' => $image_id,
|
||||
);
|
||||
}
|
||||
|
||||
mass_updates(
|
||||
USER_CACHE_CATEGORIES_TABLE,
|
||||
array(
|
||||
'primary' => array('user_id', 'cat_id'),
|
||||
'update' => array('user_representative_picture_id')
|
||||
),
|
||||
$updates
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($cats as &$cat)
|
||||
{
|
||||
foreach ($categories as $category)
|
||||
{
|
||||
if ($category['id'] == $cat['id'] and isset($category['representative_picture_id']))
|
||||
{
|
||||
$cat['tn_url'] = $thumbnail_src_of[$category['representative_picture_id']];
|
||||
}
|
||||
}
|
||||
// we don't want them in the output
|
||||
unset($cat['user_representative_picture_id'], $cat['count_images'], $cat['count_categories']);
|
||||
}
|
||||
unset($cat);
|
||||
// management of the album thumbnail -- stops here
|
||||
|
||||
if ($params['tree_output'])
|
||||
{
|
||||
$cats = categories_flatlist_to_tree($cats);
|
||||
}
|
||||
|
||||
return array(
|
||||
'categories' => new PwgNamedArray(
|
||||
$cats,
|
||||
'category',
|
||||
ws_std_get_category_xml_attributes()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns the list of categories as you can see them in administration
|
||||
* @param mixed[] $params
|
||||
*
|
||||
* Only admin can run this method and permissions are not taken into
|
||||
* account.
|
||||
*/
|
||||
function ws_categories_getAdminList($params, &$service)
|
||||
{
|
||||
$query = '
|
||||
SELECT category_id, COUNT(*) AS counter
|
||||
FROM '. IMAGE_CATEGORY_TABLE .'
|
||||
GROUP BY category_id
|
||||
;';
|
||||
$nb_images_of = simple_hash_from_query($query, 'category_id', 'counter');
|
||||
|
||||
$query = '
|
||||
SELECT id, name, comment, uppercats, global_rank
|
||||
FROM '. CATEGORIES_TABLE .'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
$cats = array();
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$id = $row['id'];
|
||||
$row['nb_images'] = isset($nb_images_of[$id]) ? $nb_images_of[$id] : 0;
|
||||
|
||||
$row['name'] = strip_tags(
|
||||
trigger_event(
|
||||
'render_category_name',
|
||||
$row['name'],
|
||||
'ws_categories_getAdminList'
|
||||
)
|
||||
);
|
||||
$row['comment'] = strip_tags(
|
||||
trigger_event(
|
||||
'render_category_description',
|
||||
$row['comment'],
|
||||
'ws_categories_getAdminList'
|
||||
)
|
||||
);
|
||||
|
||||
$cats[] = $row;
|
||||
}
|
||||
|
||||
usort($cats, 'global_rank_compare');
|
||||
return array(
|
||||
'categories' => new PwgNamedArray(
|
||||
$cats,
|
||||
'category',
|
||||
array('id', 'nb_images', 'name', 'uppercats', 'global_rank')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Adds a category
|
||||
* @param mixed[] $params
|
||||
* @option string name
|
||||
* @option int parent (optional)
|
||||
* @option string comment (optional)
|
||||
* @option bool visible
|
||||
* @option string status (optional)
|
||||
* @option bool commentable
|
||||
*/
|
||||
function ws_categories_add($params, &$service)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
$options = array();
|
||||
if (!empty($params['status']) and in_array($params['status'], array('private','public')))
|
||||
{
|
||||
$options['status'] = $params['status'];
|
||||
}
|
||||
|
||||
if (!empty($params['comment']))
|
||||
{
|
||||
$options['comment'] = $params['comment'];
|
||||
}
|
||||
|
||||
$creation_output = create_virtual_category(
|
||||
$params['name'],
|
||||
$params['parent'],
|
||||
$options
|
||||
);
|
||||
|
||||
if (isset($creation_output['error']))
|
||||
{
|
||||
return new PwgError(500, $creation_output['error']);
|
||||
}
|
||||
|
||||
invalidate_user_cache();
|
||||
|
||||
return $creation_output;
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Sets details of a category
|
||||
* @param mixed[] $params
|
||||
* @option int cat_id
|
||||
* @option string name (optional)
|
||||
* @option string comment (optional)
|
||||
*/
|
||||
function ws_categories_setInfo($params, &$service)
|
||||
{
|
||||
$update = array(
|
||||
'id' => $params['category_id'],
|
||||
);
|
||||
|
||||
$info_columns = array('name', 'comment',);
|
||||
|
||||
$perform_update = false;
|
||||
foreach ($info_columns as $key)
|
||||
{
|
||||
if (isset($params[$key]))
|
||||
{
|
||||
$perform_update = true;
|
||||
$update[$key] = $params[$key];
|
||||
}
|
||||
}
|
||||
|
||||
if ($perform_update)
|
||||
{
|
||||
single_update(
|
||||
CATEGORIES_TABLE,
|
||||
$update,
|
||||
array('id' => $update['id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Sets representative image of a category
|
||||
* @param mixed[] $params
|
||||
* @option int category_id
|
||||
* @option int image_id
|
||||
*/
|
||||
function ws_categories_setRepresentative($params, &$service)
|
||||
{
|
||||
// does the category really exist?
|
||||
$query = '
|
||||
SELECT COUNT(*)
|
||||
FROM '. CATEGORIES_TABLE .'
|
||||
WHERE id = '. $params['category_id'] .'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
if ($count == 0)
|
||||
{
|
||||
return new PwgError(404, 'category_id not found');
|
||||
}
|
||||
|
||||
// does the image really exist?
|
||||
$query = '
|
||||
SELECT COUNT(*)
|
||||
FROM '. IMAGES_TABLE .'
|
||||
WHERE id = '. $params['image_id'] .'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
if ($count == 0)
|
||||
{
|
||||
return new PwgError(404, 'image_id not found');
|
||||
}
|
||||
|
||||
// apply change
|
||||
$query = '
|
||||
UPDATE '. CATEGORIES_TABLE .'
|
||||
SET representative_picture_id = '. $params['image_id'] .'
|
||||
WHERE id = '. $params['category_id'] .'
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
$query = '
|
||||
UPDATE '. USER_CACHE_CATEGORIES_TABLE .'
|
||||
SET user_representative_picture_id = NULL
|
||||
WHERE cat_id = '. $params['category_id'] .'
|
||||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Deletes a category
|
||||
* @param mixed[] $params
|
||||
* @option string|int[] category_id
|
||||
* @option string photo_deletion_mode
|
||||
* @option string pwg_token
|
||||
*/
|
||||
function ws_categories_delete($params, &$service)
|
||||
{
|
||||
if (get_pwg_token() != $params['pwg_token'])
|
||||
{
|
||||
return new PwgError(403, 'Invalid security token');
|
||||
}
|
||||
|
||||
$modes = array('no_delete', 'delete_orphans', 'force_delete');
|
||||
if (!in_array($params['photo_deletion_mode'], $modes))
|
||||
{
|
||||
return new PwgError(500,
|
||||
'[ws_categories_delete]'
|
||||
.' invalid parameter photo_deletion_mode "'.$params['photo_deletion_mode'].'"'
|
||||
.', possible values are {'.implode(', ', $modes).'}.'
|
||||
);
|
||||
}
|
||||
|
||||
if (!is_array($params['category_id']))
|
||||
{
|
||||
$params['category_id'] = preg_split(
|
||||
'/[\s,;\|]/',
|
||||
$params['category_id'],
|
||||
-1,
|
||||
PREG_SPLIT_NO_EMPTY
|
||||
);
|
||||
}
|
||||
$params['category_id'] = array_map('intval', $params['category_id']);
|
||||
|
||||
$category_ids = array();
|
||||
foreach ($params['category_id'] as $category_id)
|
||||
{
|
||||
if ($category_id > 0)
|
||||
{
|
||||
$category_ids[] = $category_id;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($category_ids) == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '. CATEGORIES_TABLE .'
|
||||
WHERE id IN ('. implode(',', $category_ids) .')
|
||||
;';
|
||||
$category_ids = array_from_query($query, 'id');
|
||||
|
||||
if (count($category_ids) == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
delete_categories($category_ids, $params['photo_deletion_mode']);
|
||||
update_global_rank();
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Moves a category
|
||||
* @param mixed[] $params
|
||||
* @option string|int[] category_id
|
||||
* @option int parent
|
||||
* @option string pwg_token
|
||||
*/
|
||||
function ws_categories_move($params, &$service)
|
||||
{
|
||||
global $page;
|
||||
|
||||
if (get_pwg_token() != $params['pwg_token'])
|
||||
{
|
||||
return new PwgError(403, 'Invalid security token');
|
||||
}
|
||||
|
||||
if (!is_array($params['category_id']))
|
||||
{
|
||||
$params['category_id'] = preg_split(
|
||||
'/[\s,;\|]/',
|
||||
$params['category_id'],
|
||||
-1,
|
||||
PREG_SPLIT_NO_EMPTY
|
||||
);
|
||||
}
|
||||
$params['category_id'] = array_map('intval', $params['category_id']);
|
||||
|
||||
$category_ids = array();
|
||||
foreach ($params['category_id'] as $category_id)
|
||||
{
|
||||
if ($category_id > 0)
|
||||
{
|
||||
$category_ids[] = $category_id;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($category_ids) == 0)
|
||||
{
|
||||
return new PwgError(403, 'Invalid category_id input parameter, no category to move');
|
||||
}
|
||||
|
||||
// we can't move physical categories
|
||||
$categories_in_db = array();
|
||||
|
||||
$query = '
|
||||
SELECT id, name, dir
|
||||
FROM '. CATEGORIES_TABLE .'
|
||||
WHERE id IN ('. implode(',', $category_ids) .')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$categories_in_db[ $row['id'] ] = $row;
|
||||
|
||||
// we break on error at first physical category detected
|
||||
if (!empty($row['dir']))
|
||||
{
|
||||
$row['name'] = strip_tags(
|
||||
trigger_event(
|
||||
'render_category_name',
|
||||
$row['name'],
|
||||
'ws_categories_move'
|
||||
)
|
||||
);
|
||||
|
||||
return new PwgError(403,
|
||||
sprintf(
|
||||
'Category %s (%u) is not a virtual category, you cannot move it',
|
||||
$row['name'],
|
||||
$row['id']
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (count($categories_in_db) != count($category_ids))
|
||||
{
|
||||
$unknown_category_ids = array_diff($category_ids, array_keys($categories_in_db));
|
||||
|
||||
return new PwgError(403,
|
||||
sprintf(
|
||||
'Category %u does not exist',
|
||||
$unknown_category_ids[0]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// does this parent exists? This check should be made in the
|
||||
// move_categories function, not here
|
||||
// 0 as parent means "move categories at gallery root"
|
||||
if (0 != $params['parent'])
|
||||
{
|
||||
$subcat_ids = get_subcat_ids(array($params['parent']));
|
||||
if (count($subcat_ids) == 0)
|
||||
{
|
||||
return new PwgError(403, 'Unknown parent category id');
|
||||
}
|
||||
}
|
||||
|
||||
$page['infos'] = array();
|
||||
$page['errors'] = array();
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
move_categories($category_ids, $params['parent']);
|
||||
invalidate_user_cache();
|
||||
|
||||
if (count($page['errors']) != 0)
|
||||
{
|
||||
return new PwgError(403, implode('; ', $page['errors']));
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
343
include/ws_functions/pwg.extensions.php
Normal file
343
include/ws_functions/pwg.extensions.php
Normal file
|
@ -0,0 +1,343 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2013 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. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns the list of all plugins
|
||||
* @param mixed[] $params
|
||||
*/
|
||||
function ws_plugins_getList($params, &$service)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/plugins.class.php');
|
||||
|
||||
$plugins = new plugins();
|
||||
$plugins->sort_fs_plugins('name');
|
||||
$plugin_list = array();
|
||||
|
||||
foreach ($plugins->fs_plugins as $plugin_id => $fs_plugin)
|
||||
{
|
||||
if (isset($plugins->db_plugins_by_id[$plugin_id]))
|
||||
{
|
||||
$state = $plugins->db_plugins_by_id[$plugin_id]['state'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$state = 'uninstalled';
|
||||
}
|
||||
|
||||
$plugin_list[] = array(
|
||||
'id' => $plugin_id,
|
||||
'name' => $fs_plugin['name'],
|
||||
'version' => $fs_plugin['version'],
|
||||
'state' => $state,
|
||||
'description' => $fs_plugin['description'],
|
||||
);
|
||||
}
|
||||
|
||||
return $plugin_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Performs an action on a plugin
|
||||
* @param mixed[] $params
|
||||
* @option string action
|
||||
* @option string plugin
|
||||
* @option string pwg_token
|
||||
*/
|
||||
function ws_plugins_performAction($params, &$service)
|
||||
{
|
||||
global $template;
|
||||
|
||||
if (get_pwg_token() != $params['pwg_token'])
|
||||
{
|
||||
return new PwgError(403, 'Invalid security token');
|
||||
}
|
||||
|
||||
define('IN_ADMIN', true);
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/plugins.class.php');
|
||||
|
||||
$plugins = new plugins();
|
||||
$errors = $plugins->perform_action($params['action'], $params['plugin']);
|
||||
|
||||
if (!empty($errors))
|
||||
{
|
||||
return new PwgError(500, $errors);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (in_array($params['action'], array('activate', 'deactivate')))
|
||||
{
|
||||
$template->delete_compiled_templates();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Performs an action on a theme
|
||||
* @param mixed[] $params
|
||||
* @option string action
|
||||
* @option string theme
|
||||
* @option string pwg_token
|
||||
*/
|
||||
function ws_themes_performAction($params, &$service)
|
||||
{
|
||||
global $template;
|
||||
|
||||
if (get_pwg_token() != $params['pwg_token'])
|
||||
{
|
||||
return new PwgError(403, 'Invalid security token');
|
||||
}
|
||||
|
||||
define('IN_ADMIN', true);
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php');
|
||||
|
||||
$themes = new themes();
|
||||
$errors = $themes->perform_action($params['action'], $params['theme']);
|
||||
|
||||
if (!empty($errors))
|
||||
{
|
||||
return new PwgError(500, $errors);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (in_array($params['action'], array('activate', 'deactivate')))
|
||||
{
|
||||
$template->delete_compiled_templates();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Updates an extension
|
||||
* @param mixed[] $params
|
||||
* @option string type
|
||||
* @option string id
|
||||
* @option string revision
|
||||
* @option string pwg_token
|
||||
* @option bool reactivate (optional - undocumented)
|
||||
*/
|
||||
function ws_extensions_update($params, &$service)
|
||||
{
|
||||
if (!is_webmaster())
|
||||
{
|
||||
return new PwgError(401, l10n('Webmaster status is required.'));
|
||||
}
|
||||
|
||||
if (get_pwg_token() != $params['pwg_token'])
|
||||
{
|
||||
return new PwgError(403, 'Invalid security token');
|
||||
}
|
||||
|
||||
if (!in_array($params['type'], array('plugins', 'themes', 'languages')))
|
||||
{
|
||||
return new PwgError(403, "invalid extension type");
|
||||
}
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/'.$params['type'].'.class.php');
|
||||
|
||||
$type = $params['type'];
|
||||
$extension_id = $params['id'];
|
||||
$revision = $params['revision'];
|
||||
|
||||
$extension = new $type();
|
||||
|
||||
if ($type == 'plugins')
|
||||
{
|
||||
if (
|
||||
isset($extension->db_plugins_by_id[$extension_id])
|
||||
and $extension->db_plugins_by_id[$extension_id]['state'] == 'active'
|
||||
)
|
||||
{
|
||||
$extension->perform_action('deactivate', $extension_id);
|
||||
|
||||
redirect(PHPWG_ROOT_PATH
|
||||
. 'ws.php'
|
||||
. '?method=pwg.extensions.update'
|
||||
. '&type=plugins'
|
||||
. '&id=' . $extension_id
|
||||
. '&revision=' . $revision
|
||||
. '&reactivate=true'
|
||||
. '&pwg_token=' . get_pwg_token()
|
||||
. '&format=json'
|
||||
);
|
||||
}
|
||||
|
||||
$upgrade_status = $extension->extract_plugin_files('upgrade', $revision, $extension_id);
|
||||
$extension_name = $extension->fs_plugins[$extension_id]['name'];
|
||||
|
||||
if (isset($params['reactivate']))
|
||||
{
|
||||
$extension->perform_action('activate', $extension_id);
|
||||
}
|
||||
}
|
||||
else if ($type == 'themes')
|
||||
{
|
||||
$upgrade_status = $extension->extract_theme_files('upgrade', $revision, $extension_id);
|
||||
$extension_name = $extension->fs_themes[$extension_id]['name'];
|
||||
}
|
||||
else if ($type == 'languages')
|
||||
{
|
||||
$upgrade_status = $extension->extract_language_files('upgrade', $revision, $extension_id);
|
||||
$extension_name = $extension->fs_languages[$extension_id]['name'];
|
||||
}
|
||||
|
||||
global $template;
|
||||
$template->delete_compiled_templates();
|
||||
|
||||
switch ($upgrade_status)
|
||||
{
|
||||
case 'ok':
|
||||
return l10n('%s has been successfully updated.', $extension_name);
|
||||
|
||||
case 'temp_path_error':
|
||||
return new PwgError(null, l10n('Can\'t create temporary file.'));
|
||||
|
||||
case 'dl_archive_error':
|
||||
return new PwgError(null, l10n('Can\'t download archive.'));
|
||||
|
||||
case 'archive_error':
|
||||
return new PwgError(null, l10n('Can\'t read or extract archive.'));
|
||||
|
||||
default:
|
||||
return new PwgError(null, l10n('An error occured during extraction (%s).', $upgrade_status));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Ignore an update
|
||||
* @param mixed[] $params
|
||||
* @option string type (optional)
|
||||
* @option string id (optional)
|
||||
* @option bool reset
|
||||
* @option string pwg_token
|
||||
*/
|
||||
function ws_extensions_ignoreupdate($params, &$service)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
define('IN_ADMIN', true);
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
if (!is_webmaster())
|
||||
{
|
||||
return new PwgError(401, 'Access denied');
|
||||
}
|
||||
|
||||
if (get_pwg_token() != $params['pwg_token'])
|
||||
{
|
||||
return new PwgError(403, 'Invalid security token');
|
||||
}
|
||||
|
||||
$conf['updates_ignored'] = unserialize($conf['updates_ignored']);
|
||||
|
||||
// Reset ignored extension
|
||||
if ($params['reset'])
|
||||
{
|
||||
if (!empty($params['type']) and isset($conf['updates_ignored'][ $params['type'] ]))
|
||||
{
|
||||
$conf['updates_ignored'][$params['type']] = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$conf['updates_ignored'] = array(
|
||||
'plugins'=>array(),
|
||||
'themes'=>array(),
|
||||
'languages'=>array()
|
||||
);
|
||||
}
|
||||
|
||||
conf_update_param('updates_ignored', pwg_db_real_escape_string(serialize($conf['updates_ignored'])));
|
||||
unset($_SESSION['extensions_need_update']);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (empty($params['id']) or empty($params['type']) or !in_array($params['type'], array('plugins', 'themes', 'languages')))
|
||||
{
|
||||
return new PwgError(403, 'Invalid parameters');
|
||||
}
|
||||
|
||||
// Add or remove extension from ignore list
|
||||
if (!in_array($params['id'], $conf['updates_ignored'][ $params['type'] ]))
|
||||
{
|
||||
$conf['updates_ignored'][ $params['type'] ][] = $params['id'];
|
||||
}
|
||||
|
||||
conf_update_param('updates_ignored', pwg_db_real_escape_string(serialize($conf['updates_ignored'])));
|
||||
unset($_SESSION['extensions_need_update']);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Checks for updates (core and extensions)
|
||||
* @param mixed[] $params
|
||||
*/
|
||||
function ws_extensions_checkupdates($params, &$service)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
define('IN_ADMIN', true);
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/updates.class.php');
|
||||
|
||||
$update = new updates();
|
||||
$result = array();
|
||||
|
||||
if (!isset($_SESSION['need_update']))
|
||||
{
|
||||
$update->check_piwigo_upgrade();
|
||||
}
|
||||
|
||||
$result['piwigo_need_update'] = $_SESSION['need_update'];
|
||||
|
||||
$conf['updates_ignored'] = unserialize($conf['updates_ignored']);
|
||||
|
||||
if (!isset($_SESSION['extensions_need_update']))
|
||||
{
|
||||
$update->check_extensions();
|
||||
}
|
||||
else
|
||||
{
|
||||
$update->check_updated_extensions();
|
||||
}
|
||||
|
||||
if (!is_array($_SESSION['extensions_need_update']))
|
||||
{
|
||||
$result['ext_need_update'] = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
$result['ext_need_update'] = !empty($_SESSION['extensions_need_update']);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
?>
|
284
include/ws_functions/pwg.groups.php
Normal file
284
include/ws_functions/pwg.groups.php
Normal file
|
@ -0,0 +1,284 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2013 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. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns the list of groups
|
||||
* @param mixed[] $params
|
||||
* @option int[] group_id (optional)
|
||||
* @option string name (optional)
|
||||
*/
|
||||
function ws_groups_getList($params, &$service)
|
||||
{
|
||||
$where_clauses = array('1=1');
|
||||
|
||||
if (!empty($params['name']))
|
||||
{
|
||||
$where_clauses[] = 'LOWER(name) LIKE \''. pwg_db_real_escape_string($params['name']) .'\'';
|
||||
}
|
||||
|
||||
if (!empty($params['group_id']))
|
||||
{
|
||||
$where_clauses[] = 'id IN('. implode(',', $params['group_id']) .')';
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
g.*, COUNT(user_id) AS nb_users
|
||||
FROM '. GROUPS_TABLE .' AS g
|
||||
LEFT JOIN '. USER_GROUP_TABLE .' AS ug
|
||||
ON ug.group_id = g.id
|
||||
WHERE '. implode(' AND ', $where_clauses) .'
|
||||
GROUP BY id
|
||||
ORDER BY '. $params['order'] .'
|
||||
LIMIT '. $params['per_page'] .'
|
||||
OFFSET '. ($params['per_page']*$params['page']) .'
|
||||
;';
|
||||
|
||||
$groups = array_from_query($query);
|
||||
|
||||
return array(
|
||||
'paging' => new PwgNamedStruct(array(
|
||||
'page' => $params['page'],
|
||||
'per_page' => $params['per_page'],
|
||||
'count' => count($groups)
|
||||
)),
|
||||
'groups' => new PwgNamedArray($groups, 'group')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Adds a group
|
||||
* @param mixed[] $params
|
||||
* @option string name
|
||||
* @option bool is_default
|
||||
*/
|
||||
function ws_groups_add($params, &$service)
|
||||
{
|
||||
$params['name'] = pwg_db_real_escape_string($params['name']);
|
||||
|
||||
// is the name not already used ?
|
||||
$query = '
|
||||
SELECT COUNT(*)
|
||||
FROM '.GROUPS_TABLE.'
|
||||
WHERE name = \''.$params['name'].'\'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
if ($count != 0)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'This name is already used by another group.');
|
||||
}
|
||||
|
||||
// creating the group
|
||||
single_insert(
|
||||
GROUPS_TABLE,
|
||||
array(
|
||||
'name' => $params['name'],
|
||||
'is_default' => boolean_to_string($params['is_default']),
|
||||
)
|
||||
);
|
||||
|
||||
return $service->invoke('pwg.groups.getList', array('group_id' => pwg_db_insert_id()));
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Deletes a group
|
||||
* @param mixed[] $params
|
||||
* @option int[] group_id
|
||||
* @option string pwg_token
|
||||
*/
|
||||
function ws_groups_delete($params, &$service)
|
||||
{
|
||||
if (get_pwg_token() != $params['pwg_token'])
|
||||
{
|
||||
return new PwgError(403, 'Invalid security token');
|
||||
}
|
||||
|
||||
$group_id_string = implode(',', $params['group_id']);
|
||||
|
||||
// destruction of the access linked to the group
|
||||
$query = '
|
||||
DELETE
|
||||
FROM '. GROUP_ACCESS_TABLE .'
|
||||
WHERE group_id IN('. $group_id_string .')
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
// destruction of the users links for this group
|
||||
$query = '
|
||||
DELETE
|
||||
FROM '. USER_GROUP_TABLE .'
|
||||
WHERE group_id IN('. $group_id_string .')
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
$query = '
|
||||
SELECT name
|
||||
FROM '. GROUPS_TABLE .'
|
||||
WHERE id IN('. $group_id_string .')
|
||||
;';
|
||||
$groupnames = array_from_query($query, 'name');
|
||||
|
||||
// destruction of the group
|
||||
$query = '
|
||||
DELETE
|
||||
FROM '. GROUPS_TABLE .'
|
||||
WHERE id IN('. $group_id_string .')
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
return new PwgNamedArray($groupnames, 'group_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Updates a group
|
||||
* @param mixed[] $params
|
||||
* @option int group_id
|
||||
* @option string name (optional)
|
||||
* @option bool is_default (optional)
|
||||
*/
|
||||
function ws_groups_setInfo($params, &$service)
|
||||
{
|
||||
$updates = array();
|
||||
|
||||
// does the group exist ?
|
||||
$query = '
|
||||
SELECT COUNT(*)
|
||||
FROM '. GROUPS_TABLE .'
|
||||
WHERE id = '. $params['group_id'] .'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
if ($count == 0)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'This group does not exist.');
|
||||
}
|
||||
|
||||
if (!empty($params['name']))
|
||||
{
|
||||
$params['name'] = pwg_db_real_escape_string($params['name']);
|
||||
|
||||
// is the name not already used ?
|
||||
$query = '
|
||||
SELECT COUNT(*)
|
||||
FROM '. GROUPS_TABLE .'
|
||||
WHERE name = \''. $params['name'] .'\'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
if ($count != 0)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'This name is already used by another group.');
|
||||
}
|
||||
|
||||
$updates['name'] = $params['name'];
|
||||
}
|
||||
|
||||
if (!empty($params['is_default']) or @$params['is_default']===false)
|
||||
{
|
||||
$updates['is_default'] = boolean_to_string($params['is_default']);
|
||||
}
|
||||
|
||||
single_update(
|
||||
GROUPS_TABLE,
|
||||
$updates,
|
||||
array('id' => $params['group_id'])
|
||||
);
|
||||
|
||||
return $service->invoke('pwg.groups.getList', array('group_id' => $params['group_id']));
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Adds user(s) to a group
|
||||
* @param mixed[] $params
|
||||
* @option int group_id
|
||||
* @option int[] user_id
|
||||
*/
|
||||
function ws_groups_addUser($params, &$service)
|
||||
{
|
||||
// does the group exist ?
|
||||
$query = '
|
||||
SELECT COUNT(*)
|
||||
FROM '. GROUPS_TABLE .'
|
||||
WHERE id = '. $params['group_id'] .'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
if ($count == 0)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'This group does not exist.');
|
||||
}
|
||||
|
||||
$inserts = array();
|
||||
foreach ($params['user_id'] as $user_id)
|
||||
{
|
||||
$inserts[] = array(
|
||||
'group_id' => $params['group_id'],
|
||||
'user_id' => $user_id,
|
||||
);
|
||||
}
|
||||
|
||||
mass_inserts(
|
||||
USER_GROUP_TABLE,
|
||||
array('group_id', 'user_id'),
|
||||
$inserts,
|
||||
array('ignore'=>true)
|
||||
);
|
||||
|
||||
return $service->invoke('pwg.groups.getList', array('group_id' => $params['group_id']));
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Removes user(s) from a group
|
||||
* @param mixed[] $params
|
||||
* @option int group_id
|
||||
* @option int[] user_id
|
||||
*/
|
||||
function ws_groups_deleteUser($params, &$service)
|
||||
{
|
||||
// does the group exist ?
|
||||
$query = '
|
||||
SELECT COUNT(*)
|
||||
FROM '. GROUPS_TABLE .'
|
||||
WHERE id = '. $params['group_id'] .'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
if ($count == 0)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'This group does not exist.');
|
||||
}
|
||||
|
||||
$query = '
|
||||
DELETE FROM '. USER_GROUP_TABLE .'
|
||||
WHERE
|
||||
group_id = '. $params['group_id'] .'
|
||||
AND user_id IN('. implode(',', $params['user_id']) .')
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
return $service->invoke('pwg.groups.getList', array('group_id' => $params['group_id']));
|
||||
}
|
||||
|
||||
?>
|
1582
include/ws_functions/pwg.images.php
Normal file
1582
include/ws_functions/pwg.images.php
Normal file
File diff suppressed because it is too large
Load diff
235
include/ws_functions/pwg.permissions.php
Normal file
235
include/ws_functions/pwg.permissions.php
Normal file
|
@ -0,0 +1,235 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2013 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. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns permissions
|
||||
* @param mixed[] $params
|
||||
* @option int[] cat_id (optional)
|
||||
* @option int[] group_id (optional)
|
||||
* @option int[] user_id (optional)
|
||||
*/
|
||||
function ws_permissions_getList($params, &$service)
|
||||
{
|
||||
$my_params = array_intersect(array_keys($params), array('cat_id','group_id','user_id'));
|
||||
if (count($my_params) > 1)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'Too many parameters, provide cat_id OR user_id OR group_id');
|
||||
}
|
||||
|
||||
$cat_filter = '';
|
||||
if (!empty($params['cat_id']))
|
||||
{
|
||||
$cat_filter = 'WHERE cat_id IN('. implode(',', $params['cat_id']) .')';
|
||||
}
|
||||
|
||||
$perms = array();
|
||||
|
||||
// direct users
|
||||
$query = '
|
||||
SELECT user_id, cat_id
|
||||
FROM '. USER_ACCESS_TABLE .'
|
||||
'. $cat_filter .'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
if (!isset($perms[ $row['cat_id'] ]))
|
||||
{
|
||||
$perms[ $row['cat_id'] ]['id'] = $row['cat_id'];
|
||||
}
|
||||
$perms[ $row['cat_id'] ]['users'][] = $row['user_id'];
|
||||
}
|
||||
|
||||
// indirect users
|
||||
$query = '
|
||||
SELECT ug.user_id, ga.cat_id
|
||||
FROM '. USER_GROUP_TABLE .' AS ug
|
||||
INNER JOIN '. GROUP_ACCESS_TABLE .' AS ga
|
||||
ON ug.group_id = ga.group_id
|
||||
'. $cat_filter .'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
if (!isset($perms[ $row['cat_id'] ]))
|
||||
{
|
||||
$perms[ $row['cat_id'] ]['id'] = $row['cat_id'];
|
||||
}
|
||||
$perms[ $row['cat_id'] ]['users_indirect'][] = $row['user_id'];
|
||||
}
|
||||
|
||||
// groups
|
||||
$query = '
|
||||
SELECT group_id, cat_id
|
||||
FROM '. GROUP_ACCESS_TABLE .'
|
||||
'. $cat_filter .'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
if (!isset($perms[ $row['cat_id'] ]))
|
||||
{
|
||||
$perms[ $row['cat_id'] ]['id'] = $row['cat_id'];
|
||||
}
|
||||
$perms[ $row['cat_id'] ]['groups'][] = $row['group_id'];
|
||||
}
|
||||
|
||||
// filter by group and user
|
||||
foreach ($perms as $cat_id => &$cat)
|
||||
{
|
||||
if (isset($filters['group_id']))
|
||||
{
|
||||
if (empty($cat['groups']) or count(array_intersect($cat['groups'], $params['group_id'])) == 0)
|
||||
{
|
||||
unset($perms[$cat_id]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (isset($filters['user_id']))
|
||||
{
|
||||
if (
|
||||
(empty($cat['users_indirect']) or count(array_intersect($cat['users_indirect'], $params['user_id'])) == 0)
|
||||
and (empty($cat['users']) or count(array_intersect($cat['users'], $params['user_id'])) == 0)
|
||||
) {
|
||||
unset($perms[$cat_id]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$cat['groups'] = !empty($cat['groups']) ? array_unique($cat['groups']) : array();
|
||||
$cat['users'] = !empty($cat['users']) ? array_unique($cat['users']) : array();
|
||||
$cat['users_indirect'] = !empty($cat['users_indirect']) ? array_unique($cat['users_indirect']) : array();
|
||||
}
|
||||
unset($cat);
|
||||
|
||||
return array(
|
||||
'categories' => new PwgNamedArray(
|
||||
array_values($perms),
|
||||
'category',
|
||||
array('id')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Add permissions
|
||||
* @param mixed[] $params
|
||||
* @option int[] cat_id
|
||||
* @option int[] group_id (optional)
|
||||
* @option int[] user_id (optional)
|
||||
* @option bool recursive
|
||||
*/
|
||||
function ws_permissions_add($params, &$service)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
if (!empty($params['group_id']))
|
||||
{
|
||||
$cat_ids = get_uppercat_ids($params['cat_id']);
|
||||
if ($params['recursive'])
|
||||
{
|
||||
$cat_ids = array_merge($cat_ids, get_subcat_ids($params['cat_id']));
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '. CATEGORIES_TABLE .'
|
||||
WHERE id IN ('. implode(',', $cat_ids) .')
|
||||
AND status = \'private\'
|
||||
;';
|
||||
$private_cats = array_from_query($query, 'id');
|
||||
|
||||
$inserts = array();
|
||||
foreach ($private_cats as $cat_id)
|
||||
{
|
||||
foreach ($params['group_id'] as $group_id)
|
||||
{
|
||||
$inserts[] = array(
|
||||
'group_id' => $group_id,
|
||||
'cat_id' => $cat_id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
mass_inserts(
|
||||
GROUP_ACCESS_TABLE,
|
||||
array('group_id','cat_id'),
|
||||
$inserts,
|
||||
array('ignore'=>true)
|
||||
);
|
||||
}
|
||||
|
||||
if (!empty($params['user_id']))
|
||||
{
|
||||
if ($params['recursive']) $_POST['apply_on_sub'] = true;
|
||||
add_permission_on_category($params['cat_id'], $params['user_id']);
|
||||
}
|
||||
|
||||
return $service->invoke('pwg.permissions.getList', array('cat_id'=>$params['cat_id']));
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Removes permissions
|
||||
* @param mixed[] $params
|
||||
* @option int[] cat_id
|
||||
* @option int[] group_id (optional)
|
||||
* @option int[] user_id (optional)
|
||||
*/
|
||||
function ws_permissions_remove($params, &$service)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
$cat_ids = get_subcat_ids($params['cat_id']);
|
||||
|
||||
if (!empty($params['group_id']))
|
||||
{
|
||||
$query = '
|
||||
DELETE
|
||||
FROM '. GROUP_ACCESS_TABLE .'
|
||||
WHERE group_id IN ('. implode(',', $params['group_id']).')
|
||||
AND cat_id IN ('. implode(',', $cat_ids).')
|
||||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
if (!empty($params['user_id']))
|
||||
{
|
||||
$query = '
|
||||
DELETE
|
||||
FROM '. USER_ACCESS_TABLE .'
|
||||
WHERE user_id IN ('. implode(',', $params['user_id']) .')
|
||||
AND cat_id IN ('. implode(',', $cat_ids) .')
|
||||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
return $service->invoke('pwg.permissions.getList', array('cat_id'=>$params['cat_id']));
|
||||
}
|
||||
|
||||
?>
|
338
include/ws_functions/pwg.php
Normal file
338
include/ws_functions/pwg.php
Normal file
|
@ -0,0 +1,338 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2013 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. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns a list of missing derivatives (not generated yet)
|
||||
* @param mixed[] $params
|
||||
* @option string types (optional)
|
||||
* @option int[] ids
|
||||
* @option int max_urls
|
||||
* @option int prev_page (optional)
|
||||
*/
|
||||
function ws_getMissingDerivatives($params, &$service)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
if (empty($params['types']))
|
||||
{
|
||||
$types = array_keys(ImageStdParams::get_defined_type_map());
|
||||
}
|
||||
else
|
||||
{
|
||||
$types = array_intersect(array_keys(ImageStdParams::get_defined_type_map()), $params['types']);
|
||||
if (count($types)==0)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, "Invalid types");
|
||||
}
|
||||
}
|
||||
|
||||
$max_urls = $params['max_urls'];
|
||||
$query = 'SELECT MAX(id)+1, COUNT(*) FROM '. IMAGES_TABLE .';';
|
||||
list($max_id, $image_count) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
if (0 == $image_count)
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
$start_id = $params['prev_page'];
|
||||
if ($start_id<=0)
|
||||
{
|
||||
$start_id = $max_id;
|
||||
}
|
||||
|
||||
$uid = '&b='.time();
|
||||
|
||||
$conf['question_mark_in_urls'] = $conf['php_extension_in_urls'] = true;
|
||||
$conf['derivative_url_style'] = 2; //script
|
||||
|
||||
$qlimit = min(5000, ceil(max($image_count/500, $max_urls/count($types))));
|
||||
$where_clauses = ws_std_image_sql_filter( $params, '' );
|
||||
$where_clauses[] = 'id<start_id';
|
||||
|
||||
if (!empty($params['ids']))
|
||||
{
|
||||
$where_clauses[] = 'id IN ('.implode(',',$params['ids']).')';
|
||||
}
|
||||
|
||||
$query_model = '
|
||||
SELECT id, path, representative_ext, width, height, rotation
|
||||
FROM '. IMAGES_TABLE .'
|
||||
WHERE '. implode(' AND ', $where_clauses) .'
|
||||
ORDER BY id DESC
|
||||
LIMIT '. $qlimit .'
|
||||
;';
|
||||
|
||||
$urls = array();
|
||||
do
|
||||
{
|
||||
$result = pwg_query(str_replace('start_id', $start_id, $query_model));
|
||||
$is_last = pwg_db_num_rows($result) < $qlimit;
|
||||
|
||||
while ($row=pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$start_id = $row['id'];
|
||||
$src_image = new SrcImage($row);
|
||||
if ($src_image->is_mimetype())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach($types as $type)
|
||||
{
|
||||
$derivative = new DerivativeImage($type, $src_image);
|
||||
if ($type != $derivative->get_type())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (@filemtime($derivative->get_path())===false)
|
||||
{
|
||||
$urls[] = $derivative->get_url().$uid;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($urls)>=$max_urls and !$is_last)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($is_last)
|
||||
{
|
||||
$start_id = 0;
|
||||
}
|
||||
} while (count($urls)<$max_urls and $start_id);
|
||||
|
||||
$ret = array();
|
||||
if ($start_id)
|
||||
{
|
||||
$ret['next_page'] = $start_id;
|
||||
}
|
||||
$ret['urls'] = $urls;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns Piwigo version
|
||||
* @param mixed[] $params
|
||||
*/
|
||||
function ws_getVersion($params, &$service)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
if ($conf['show_version'] or is_admin())
|
||||
{
|
||||
return PHPWG_VERSION;
|
||||
}
|
||||
else
|
||||
{
|
||||
return new PwgError(403, 'Forbidden');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns general informations about the installation
|
||||
* @param mixed[] $params
|
||||
*/
|
||||
function ws_getInfos($params, &$service)
|
||||
{
|
||||
$infos['version'] = PHPWG_VERSION;
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.IMAGES_TABLE.';';
|
||||
list($infos['nb_elements']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.CATEGORIES_TABLE.';';
|
||||
list($infos['nb_categories']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.CATEGORIES_TABLE.' WHERE dir IS NULL;';
|
||||
list($infos['nb_virtual']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.CATEGORIES_TABLE.' WHERE dir IS NOT NULL;';
|
||||
list($infos['nb_physical']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.IMAGE_CATEGORY_TABLE.';';
|
||||
list($infos['nb_image_category']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.TAGS_TABLE.';';
|
||||
list($infos['nb_tags']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.IMAGE_TAG_TABLE.';';
|
||||
list($infos['nb_image_tag']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.USERS_TABLE.';';
|
||||
list($infos['nb_users']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.GROUPS_TABLE.';';
|
||||
list($infos['nb_groups']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
$query = 'SELECT COUNT(*) FROM '.COMMENTS_TABLE.';';
|
||||
list($infos['nb_comments']) = pwg_db_fetch_row(pwg_query($query));
|
||||
|
||||
// first element
|
||||
if ($infos['nb_elements'] > 0)
|
||||
{
|
||||
$query = 'SELECT MIN(date_available) FROM '.IMAGES_TABLE.';';
|
||||
list($infos['first_date']) = pwg_db_fetch_row(pwg_query($query));
|
||||
}
|
||||
|
||||
// unvalidated comments
|
||||
if ($infos['nb_comments'] > 0)
|
||||
{
|
||||
$query = 'SELECT COUNT(*) FROM '.COMMENTS_TABLE.' WHERE validated=\'false\';';
|
||||
list($infos['nb_unvalidated_comments']) = pwg_db_fetch_row(pwg_query($query));
|
||||
}
|
||||
|
||||
foreach ($infos as $name => $value)
|
||||
{
|
||||
$output[] = array(
|
||||
'name' => $name,
|
||||
'value' => $value,
|
||||
);
|
||||
}
|
||||
|
||||
return array('infos' => new PwgNamedArray($output, 'item'));
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Adds images to the caddie
|
||||
* @param mixed[] $params
|
||||
* @option int[] image_id
|
||||
*/
|
||||
function ws_caddie_add($params, &$service)
|
||||
{
|
||||
global $user;
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '. IMAGES_TABLE .'
|
||||
LEFT JOIN '. CADDIE_TABLE .'
|
||||
ON id=element_id AND user_id='. $user['id'] .'
|
||||
WHERE id IN ('. implode(',',$params['image_id']) .')
|
||||
AND element_id IS NULL
|
||||
;';
|
||||
$result = array_from_query($query, 'id');
|
||||
|
||||
$datas = array();
|
||||
foreach ($result as $id)
|
||||
{
|
||||
$datas[] = array(
|
||||
'element_id' => $id,
|
||||
'user_id' => $user['id'],
|
||||
);
|
||||
}
|
||||
if (count($datas))
|
||||
{
|
||||
mass_inserts(
|
||||
CADDIE_TABLE,
|
||||
array('element_id','user_id'),
|
||||
$datas
|
||||
);
|
||||
}
|
||||
return count($datas);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Deletes rates of an user
|
||||
* @param mixed[] $params
|
||||
* @option int user_id
|
||||
* @option string anonymous_id (optional)
|
||||
*/
|
||||
function ws_rates_delete($params, &$service)
|
||||
{
|
||||
$query = '
|
||||
DELETE FROM '. RATE_TABLE .'
|
||||
WHERE user_id='. $params['user_id'];
|
||||
|
||||
if (!empty($params['anonymous_id']))
|
||||
{
|
||||
$query .= ' AND anonymous_id=\''.$params['anonymous_id'].'\'';
|
||||
}
|
||||
|
||||
$changes = pwg_db_changes(pwg_query($query));
|
||||
if ($changes)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'include/functions_rate.inc.php');
|
||||
update_rating_score();
|
||||
}
|
||||
return $changes;
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Performs a login
|
||||
* @param mixed[] $params
|
||||
* @option string username
|
||||
* @option string password
|
||||
*/
|
||||
function ws_session_login($params, &$service)
|
||||
{
|
||||
if (try_log_user($params['username'], $params['password'], false))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return new PwgError(999, 'Invalid username/password');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Performs a logout
|
||||
* @param mixed[] $params
|
||||
*/
|
||||
function ws_session_logout($params, &$service)
|
||||
{
|
||||
if (!is_a_guest())
|
||||
{
|
||||
logout_user();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns info about the current user
|
||||
* @param mixed[] $params
|
||||
*/
|
||||
function ws_session_getStatus($params, &$service)
|
||||
{
|
||||
global $user;
|
||||
|
||||
$res['username'] = is_a_guest() ? 'guest' : stripslashes($user['username']);
|
||||
foreach ( array('status', 'theme', 'language') as $k )
|
||||
{
|
||||
$res[$k] = $user[$k];
|
||||
}
|
||||
$res['pwg_token'] = get_pwg_token();
|
||||
$res['charset'] = get_pwg_charset();
|
||||
|
||||
list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
|
||||
$res['current_datetime'] = $dbnow;
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
?>
|
244
include/ws_functions/pwg.tags.php
Normal file
244
include/ws_functions/pwg.tags.php
Normal file
|
@ -0,0 +1,244 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2013 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. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns a list of tags
|
||||
* @param mixed[] $params
|
||||
* @option bool sort_by_counter
|
||||
*/
|
||||
function ws_tags_getList($params, &$service)
|
||||
{
|
||||
$tags = get_available_tags();
|
||||
if ($params['sort_by_counter'])
|
||||
{
|
||||
usort($tags, create_function('$a,$b', 'return -$a["counter"]+$b["counter"];') );
|
||||
}
|
||||
else
|
||||
{
|
||||
usort($tags, 'tag_alpha_compare');
|
||||
}
|
||||
|
||||
for ($i=0; $i<count($tags); $i++)
|
||||
{
|
||||
$tags[$i]['id'] = (int)$tags[$i]['id'];
|
||||
$tags[$i]['counter'] = (int)$tags[$i]['counter'];
|
||||
$tags[$i]['url'] = make_index_url(
|
||||
array(
|
||||
'section'=>'tags',
|
||||
'tags'=>array($tags[$i])
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return array(
|
||||
'tags' => new PwgNamedArray(
|
||||
$tags,
|
||||
'tag',
|
||||
ws_std_get_tag_xml_attributes()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns the list of tags as you can see them in administration
|
||||
* @param mixed[] $params
|
||||
*
|
||||
* Only admin can run this method and permissions are not taken into
|
||||
* account.
|
||||
*/
|
||||
function ws_tags_getAdminList($params, &$service)
|
||||
{
|
||||
return array(
|
||||
'tags' => new PwgNamedArray(
|
||||
get_all_tags(),
|
||||
'tag',
|
||||
ws_std_get_tag_xml_attributes()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns a list of images for tags
|
||||
* @param mixed[] $params
|
||||
* @option int[] tag_id (optional)
|
||||
* @option string[] tag_url_name (optional)
|
||||
* @option string[] tag_name (optional)
|
||||
* @option bool tag_mode_and
|
||||
* @option int per_page
|
||||
* @option int page
|
||||
* @option string order
|
||||
*/
|
||||
function ws_tags_getImages($params, &$service)
|
||||
{
|
||||
// first build all the tag_ids we are interested in
|
||||
$tags = find_tags($params['tag_id'], $params['tag_url_name'], $params['tag_name']);
|
||||
$tags_by_id = array();
|
||||
foreach ($tags as $tag)
|
||||
{
|
||||
$tags['id'] = (int)$tag['id'];
|
||||
$tags_by_id[ $tag['id'] ] = $tag;
|
||||
}
|
||||
unset($tags);
|
||||
$tag_ids = array_keys($tags_by_id);
|
||||
|
||||
$where_clauses = ws_std_image_sql_filter($params);
|
||||
if (!empty($where_clauses))
|
||||
{
|
||||
$where_clauses = implode(' AND ', $where_clauses);
|
||||
}
|
||||
|
||||
$image_ids = get_image_ids_for_tags(
|
||||
$tag_ids,
|
||||
$params['tag_mode_and'] ? 'AND' : 'OR',
|
||||
$where_clauses,
|
||||
ws_std_image_sql_order($params)
|
||||
);
|
||||
|
||||
$count_set = count($image_ids);
|
||||
$image_ids = array_slice($image_ids, $params['per_page']*$params['page'], $params['per_page'] );
|
||||
|
||||
$image_tag_map = array();
|
||||
// build list of image ids with associated tags per image
|
||||
if (!empty($image_ids) and !$params['tag_mode_and'])
|
||||
{
|
||||
$query = '
|
||||
SELECT image_id, GROUP_CONCAT(tag_id) AS tag_ids
|
||||
FROM '. IMAGE_TAG_TABLE .'
|
||||
WHERE tag_id IN ('. implode(',', $tag_ids) .')
|
||||
AND image_id IN ('. implode(',', $image_ids) .')
|
||||
GROUP BY image_id
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$row['image_id'] = (int)$row['image_id'];
|
||||
$image_ids[] = $row['image_id'];
|
||||
$image_tag_map[ $row['image_id'] ] = explode(',', $row['tag_ids']);
|
||||
}
|
||||
}
|
||||
|
||||
$images = array();
|
||||
if (!empty($image_ids))
|
||||
{
|
||||
$rank_of = array_flip($image_ids);
|
||||
|
||||
$query = '
|
||||
SELECT *
|
||||
FROM '. IMAGES_TABLE .'
|
||||
WHERE id IN ('. implode(',',$image_ids) .')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$image = array();
|
||||
$image['rank'] = $rank_of[ $row['id'] ];
|
||||
|
||||
foreach (array('id', 'width', 'height', 'hit') as $k)
|
||||
{
|
||||
if (isset($row[$k]))
|
||||
{
|
||||
$image[$k] = (int)$row[$k];
|
||||
}
|
||||
}
|
||||
foreach (array('file', 'name', 'comment', 'date_creation', 'date_available') as $k)
|
||||
{
|
||||
$image[$k] = $row[$k];
|
||||
}
|
||||
$image = array_merge( $image, ws_std_get_urls($row) );
|
||||
|
||||
$image_tag_ids = ($params['tag_mode_and']) ? $tag_ids : $image_tag_map[$image['id']];
|
||||
$image_tags = array();
|
||||
foreach ($image_tag_ids as $tag_id)
|
||||
{
|
||||
$url = make_index_url(
|
||||
array(
|
||||
'section'=>'tags',
|
||||
'tags'=> array($tags_by_id[$tag_id])
|
||||
)
|
||||
);
|
||||
$page_url = make_picture_url(
|
||||
array(
|
||||
'section'=>'tags',
|
||||
'tags'=> array($tags_by_id[$tag_id]),
|
||||
'image_id' => $row['id'],
|
||||
'image_file' => $row['file'],
|
||||
)
|
||||
);
|
||||
$image_tags[] = array(
|
||||
'id' => (int)$tag_id,
|
||||
'url' => $url,
|
||||
'page_url' => $page_url,
|
||||
);
|
||||
}
|
||||
|
||||
$image['tags'] = new PwgNamedArray($image_tags, 'tag', ws_std_get_tag_xml_attributes() );
|
||||
$images[] = $image;
|
||||
}
|
||||
|
||||
usort($images, 'rank_compare');
|
||||
unset($rank_of);
|
||||
}
|
||||
|
||||
return array(
|
||||
'paging' => new PwgNamedStruct(
|
||||
array(
|
||||
'page' => $params['page'],
|
||||
'per_page' => $params['per_page'],
|
||||
'count' => count($images),
|
||||
'total_count' => $count_set,
|
||||
)
|
||||
),
|
||||
'images' => new PwgNamedArray(
|
||||
$images,
|
||||
'image',
|
||||
ws_std_get_image_xml_attributes()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Adds a tag
|
||||
* @param mixed[] $params
|
||||
* @option string name
|
||||
*/
|
||||
function ws_tags_add($params, &$service)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
$creation_output = create_tag($params['name']);
|
||||
|
||||
if (isset($creation_output['error']))
|
||||
{
|
||||
return new PwgError(500, $creation_output['error']);
|
||||
}
|
||||
|
||||
return $creation_output;
|
||||
}
|
||||
|
||||
?>
|
446
include/ws_functions/pwg.users.php
Normal file
446
include/ws_functions/pwg.users.php
Normal file
|
@ -0,0 +1,446 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2013 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. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Returns a list of users
|
||||
* @param mixed[] $params
|
||||
* @option int[] user_id (optional)
|
||||
* @option string username (optional)
|
||||
* @option string[] status (optional)
|
||||
* @option int min_level (optional)
|
||||
* @option int[] group_id (optional)
|
||||
* @option int per_page
|
||||
* @option int page
|
||||
* @option string order
|
||||
*/
|
||||
function ws_users_getList($params, &$service)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$where_clauses = array('1=1');
|
||||
|
||||
if (!empty($params['user_id']))
|
||||
{
|
||||
$where_clauses[] = 'u.'.$conf['user_fields']['id'].' IN('. implode(',', $params['user_id']) .')';
|
||||
}
|
||||
|
||||
if (!empty($params['username']))
|
||||
{
|
||||
$where_clauses[] = 'u.'.$conf['user_fields']['username'].' LIKE \''.pwg_db_real_escape_string($params['username']).'\'';
|
||||
}
|
||||
|
||||
if (!empty($params['status']))
|
||||
{
|
||||
$params['status'] = array_intersect($params['status'], get_enums(USER_INFOS_TABLE, 'status'));
|
||||
if (count($params['status']) > 0)
|
||||
{
|
||||
$where_clauses[] = 'ui.status IN("'. implode('","', $params['status']) .'")';
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($params['min_level']))
|
||||
{
|
||||
if ( !in_array($params['min_level'], $conf['available_permission_levels']) )
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'Invalid level');
|
||||
}
|
||||
$where_clauses[] = 'ui.level >= '.$params['min_level'];
|
||||
}
|
||||
|
||||
if (!empty($params['group_id']))
|
||||
{
|
||||
$where_clauses[] = 'ug.group_id IN('. implode(',', $params['group_id']) .')';
|
||||
}
|
||||
|
||||
$display = array('u.'.$conf['user_fields']['id'] => 'id');
|
||||
|
||||
if ($params['display'] != 'none')
|
||||
{
|
||||
$params['display'] = explode(',', $params['display']);
|
||||
|
||||
if (in_array('all', $params['display']))
|
||||
{
|
||||
$params['display'] = array_merge($params['display'], array(
|
||||
'username','email','status','level','groups','language','theme',
|
||||
'nb_image_page','recent_period','expand','show_nb_comments','show_nb_hits',
|
||||
'enabled_high',
|
||||
));
|
||||
}
|
||||
else if (in_array('basics', $params['display']))
|
||||
{
|
||||
$params['display'] = array_merge($params['display'], array(
|
||||
'username','email','status','level','groups',
|
||||
));
|
||||
}
|
||||
|
||||
if (in_array('username', $params['display']))
|
||||
{
|
||||
$display['u.'.$conf['user_fields']['username']] = 'username';
|
||||
}
|
||||
if (in_array('email', $params['display']))
|
||||
{
|
||||
$display['u.'.$conf['user_fields']['email']] = 'email';
|
||||
}
|
||||
|
||||
$ui_fields = array(
|
||||
'status','level','language','theme','nb_image_page','recent_period','expand',
|
||||
'show_nb_comments','show_nb_hits','enabled_high',
|
||||
);
|
||||
foreach ($ui_fields as $field)
|
||||
{
|
||||
if (in_array($field, $params['display']))
|
||||
{
|
||||
$display['ui.'.$field] = $field;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$params['display'] = array();
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT DISTINCT ';
|
||||
|
||||
$first = true;
|
||||
foreach ($display as $field => $name)
|
||||
{
|
||||
if (!$first) $query.= ', ';
|
||||
else $first = false;
|
||||
$query.= $field .' AS '. $name;
|
||||
}
|
||||
if (in_array('groups', $params['display']))
|
||||
{
|
||||
if (!$first) $query.= ', ';
|
||||
$query.= '"" AS groups';
|
||||
}
|
||||
|
||||
$query.= '
|
||||
FROM '. USERS_TABLE .' AS u
|
||||
INNER JOIN '. USER_INFOS_TABLE .' AS ui
|
||||
ON u.'. $conf['user_fields']['id'] .' = ui.user_id
|
||||
LEFT JOIN '. USER_GROUP_TABLE .' AS ug
|
||||
ON u.'. $conf['user_fields']['id'] .' = ug.user_id
|
||||
WHERE
|
||||
'. implode(' AND ', $where_clauses) .'
|
||||
ORDER BY '. $params['order'] .'
|
||||
LIMIT '. $params['per_page'] .'
|
||||
OFFSET '. ($params['per_page']*$params['page']) .'
|
||||
;';
|
||||
|
||||
$users = hash_from_query($query, 'id');
|
||||
|
||||
if (count($users) > 0 and in_array('groups', $params['display']))
|
||||
{
|
||||
$query = '
|
||||
SELECT user_id, group_id
|
||||
FROM '. USER_GROUP_TABLE .'
|
||||
WHERE user_id IN ('. implode(',', array_keys($users)) .')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$users[ $row['user_id'] ]['groups'][] = $row['group_id'];
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'paging' => new PwgNamedStruct(
|
||||
array(
|
||||
'page' => $params['page'],
|
||||
'per_page' => $params['per_page'],
|
||||
'count' => count($users)
|
||||
)
|
||||
),
|
||||
'users' => new PwgNamedArray(array_values($users), 'user')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Adds a user
|
||||
* @param mixed[] $params
|
||||
* @option string username
|
||||
* @option string password (optional)
|
||||
* @option string email (optional)
|
||||
*/
|
||||
function ws_users_add($params, &$service)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
if ($conf['double_password_type_in_admin'])
|
||||
{
|
||||
if ($params['password'] != $params['password_confirm'])
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, l10n('The passwords do not match'));
|
||||
}
|
||||
}
|
||||
|
||||
$user_id = register_user(
|
||||
$params['username'],
|
||||
$params['password'],
|
||||
$params['email'],
|
||||
false, // notify admin
|
||||
$errors,
|
||||
$params['send_password_by_mail']
|
||||
);
|
||||
|
||||
if (!$user_id)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, $errors[0]);
|
||||
}
|
||||
|
||||
return $service->invoke('pwg.users.getList', array('user_id'=>$user_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Deletes users
|
||||
* @param mixed[] $params
|
||||
* @option int[] user_id
|
||||
* @option string pwg_token
|
||||
*/
|
||||
function ws_users_delete($params, &$service)
|
||||
{
|
||||
if (get_pwg_token() != $params['pwg_token'])
|
||||
{
|
||||
return new PwgError(403, 'Invalid security token');
|
||||
}
|
||||
|
||||
global $conf, $user;
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
// protect some users
|
||||
$params['user_id'] = array_diff(
|
||||
$params['user_id'],
|
||||
array(
|
||||
$user['id'],
|
||||
$conf['guest_id'],
|
||||
$conf['default_user_id'],
|
||||
$conf['webmaster_id'],
|
||||
)
|
||||
);
|
||||
|
||||
foreach ($params['user_id'] as $user_id)
|
||||
{
|
||||
delete_user($user_id);
|
||||
}
|
||||
|
||||
return l10n_dec(
|
||||
'%d user deleted', '%d users deleted',
|
||||
count($params['user_id'])
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Updates users
|
||||
* @param mixed[] $params
|
||||
* @option int[] user_id
|
||||
* @option string username (optional)
|
||||
* @option string password (optional)
|
||||
* @option string email (optional)
|
||||
* @option string status (optional)
|
||||
* @option int level (optional)
|
||||
* @option string language (optional)
|
||||
* @option string theme (optional)
|
||||
* @option int nb_image_page (optional)
|
||||
* @option int recent_period (optional)
|
||||
* @option bool expand (optional)
|
||||
* @option bool show_nb_comments (optional)
|
||||
* @option bool show_nb_hits (optional)
|
||||
* @option bool enabled_high (optional)
|
||||
*/
|
||||
function ws_users_setInfo($params, &$service)
|
||||
{
|
||||
global $conf, $user;
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
$updates = $updates_infos = array();
|
||||
$update_status = null;
|
||||
|
||||
if (count($params['user_id']) == 1)
|
||||
{
|
||||
if (get_username($params['user_id'][0]) === false)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'This user does not exist.');
|
||||
}
|
||||
|
||||
if (!empty($params['username']))
|
||||
{
|
||||
$user_id = get_userid($params['username']);
|
||||
if ($user_id and $user_id != $params['user_id'][0])
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, l10n('this login is already used'));
|
||||
}
|
||||
if ($params['username'] != strip_tags($params['username']))
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, l10n('html tags are not allowed in login'));
|
||||
}
|
||||
$updates[ $conf['user_fields']['username'] ] = $params['username'];
|
||||
}
|
||||
|
||||
if (!empty($params['email']))
|
||||
{
|
||||
if ( ($error = validate_mail_address($params['user_id'][0], $params['email'])) != '')
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, $error);
|
||||
}
|
||||
$updates[ $conf['user_fields']['email'] ] = $params['email'];
|
||||
}
|
||||
|
||||
if (!empty($params['password']))
|
||||
{
|
||||
$updates[ $conf['user_fields']['password'] ] = $conf['password_hash']($params['password']);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($params['status']))
|
||||
{
|
||||
if ( $params['status'] == 'webmaster' and !is_webmaster() )
|
||||
{
|
||||
return new PwgError(403, 'Only webmasters can grant "webmaster" status');
|
||||
}
|
||||
if ( !in_array($params['status'], array('guest','generic','normal','admin','webmaster')) )
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'Invalid status');
|
||||
}
|
||||
|
||||
// status update query is separated from the rest as not applying to the same
|
||||
// set of users (current, guest and webmaster can't be changed)
|
||||
$params['user_id_for_status'] = array_diff(
|
||||
$params['user_id'],
|
||||
array(
|
||||
$user['id'],
|
||||
$conf['guest_id'],
|
||||
$conf['webmaster_id'],
|
||||
)
|
||||
);
|
||||
|
||||
$update_status = $params['status'];
|
||||
}
|
||||
|
||||
if (!empty($params['level']) or @$params['level']===0)
|
||||
{
|
||||
if ( !in_array($params['level'], $conf['available_permission_levels']) )
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'Invalid level');
|
||||
}
|
||||
$updates_infos['level'] = $params['level'];
|
||||
}
|
||||
|
||||
if (!empty($params['language']))
|
||||
{
|
||||
if ( !in_array($params['language'], array_keys(get_languages())) )
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'Invalid language');
|
||||
}
|
||||
$updates_infos['language'] = $params['language'];
|
||||
}
|
||||
|
||||
if (!empty($params['theme']))
|
||||
{
|
||||
if ( !in_array($params['theme'], array_keys(get_pwg_themes())) )
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, 'Invalid theme');
|
||||
}
|
||||
$updates_infos['theme'] = $params['theme'];
|
||||
}
|
||||
|
||||
if (!empty($params['nb_image_page']))
|
||||
{
|
||||
$updates_infos['nb_image_page'] = $params['nb_image_page'];
|
||||
}
|
||||
|
||||
if (!empty($params['recent_period']) or @$params['recent_period']===0)
|
||||
{
|
||||
$updates_infos['recent_period'] = $params['recent_period'];
|
||||
}
|
||||
|
||||
if (!empty($params['expand']) or @$params['expand']===false)
|
||||
{
|
||||
$updates_infos['expand'] = boolean_to_string($params['expand']);
|
||||
}
|
||||
|
||||
if (!empty($params['show_nb_comments']) or @$params['show_nb_comments']===false)
|
||||
{
|
||||
$updates_infos['show_nb_comments'] = boolean_to_string($params['show_nb_comments']);
|
||||
}
|
||||
|
||||
if (!empty($params['show_nb_hits']) or @$params['show_nb_hits']===false)
|
||||
{
|
||||
$updates_infos['show_nb_hits'] = boolean_to_string($params['show_nb_hits']);
|
||||
}
|
||||
|
||||
if (!empty($params['enabled_high']) or @$params['enabled_high']===false)
|
||||
{
|
||||
$updates_infos['enabled_high'] = boolean_to_string($params['enabled_high']);
|
||||
}
|
||||
|
||||
// perform updates
|
||||
single_update(
|
||||
USERS_TABLE,
|
||||
$updates,
|
||||
array($conf['user_fields']['id'] => $params['user_id'][0])
|
||||
);
|
||||
|
||||
if (isset($update_status) and count($params['user_id_for_status']) > 0)
|
||||
{
|
||||
$query = '
|
||||
UPDATE '. USER_INFOS_TABLE .' SET
|
||||
status = "'. $update_status .'"
|
||||
WHERE user_id IN('. implode(',', $params['user_id_for_status']) .')
|
||||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
if (count($updates_infos) > 0)
|
||||
{
|
||||
$query = '
|
||||
UPDATE '. USER_INFOS_TABLE .' SET ';
|
||||
|
||||
$first = true;
|
||||
foreach ($updates_infos as $field => $value)
|
||||
{
|
||||
if (!$first) $query.= ', ';
|
||||
else $first = false;
|
||||
$query.= $field .' = "'. $value .'"';
|
||||
}
|
||||
|
||||
$query.= '
|
||||
WHERE user_id IN('. implode(',', $params['user_id']) .')
|
||||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
return $service->invoke('pwg.users.getList', array(
|
||||
'user_id' => $params['user_id'],
|
||||
'display' => 'basics,'.implode(',', array_keys($updates_infos)),
|
||||
));
|
||||
}
|
||||
|
||||
?>
|
127
ws.php
127
ws.php
|
@ -25,15 +25,15 @@ define ('PHPWG_ROOT_PATH', './');
|
|||
|
||||
include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
|
||||
check_status(ACCESS_FREE);
|
||||
include_once(PHPWG_ROOT_PATH.'include/ws_core.inc.php');
|
||||
|
||||
if ( !$conf['allow_web_services'] )
|
||||
{
|
||||
page_forbidden('Web services are disabled');
|
||||
}
|
||||
|
||||
add_event_handler('ws_add_methods', 'ws_addDefaultMethods');
|
||||
include_once(PHPWG_ROOT_PATH.'include/ws_core.inc.php');
|
||||
|
||||
add_event_handler('ws_add_methods', 'ws_addDefaultMethods');
|
||||
add_event_handler('ws_invoke_allowed', 'ws_isInvokeAllowed', EVENT_HANDLER_PRIORITY_NEUTRAL, 3);
|
||||
|
||||
$requestFormat = 'rest';
|
||||
|
@ -102,6 +102,7 @@ function ws_addDefaultMethods( $arr )
|
|||
$service = &$arr[0];
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'include/ws_functions.inc.php');
|
||||
$ws_functions_root = PHPWG_ROOT_PATH.'include/ws_functions/';
|
||||
|
||||
$f_params = array(
|
||||
'f_min_rate' => array('default'=>null,
|
||||
|
@ -128,7 +129,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'pwg.getVersion',
|
||||
'ws_getVersion',
|
||||
null,
|
||||
'Returns the Piwigo version.'
|
||||
'Returns the Piwigo version.',
|
||||
$ws_functions_root . 'pwg.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -136,7 +138,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'ws_getInfos',
|
||||
null,
|
||||
'<b>Admin only.</b> Returns general informations.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -148,7 +150,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_ID),
|
||||
),
|
||||
'<b>Admin only.</b> Adds elements to the caddie. Returns the number of elements added.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -171,7 +173,8 @@ function ws_addDefaultMethods( $arr )
|
|||
), $f_params),
|
||||
'Returns elements for the corresponding categories.
|
||||
<br><b>cat_id</b> can be empty if <b>recursive</b> is true.
|
||||
<br><b>order</b> comma separated fields for sorting'
|
||||
<br><b>order</b> comma separated fields for sorting',
|
||||
$ws_functions_root . 'pwg.categories.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -190,7 +193,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'fullname' => array('default'=>false,
|
||||
'type'=>WS_TYPE_BOOL),
|
||||
),
|
||||
'Returns a list of categories.'
|
||||
'Returns a list of categories.',
|
||||
$ws_functions_root . 'pwg.categories.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -209,7 +213,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_INT|WS_TYPE_POSITIVE),
|
||||
), $f_params),
|
||||
'<b>Admin only.</b> Returns a list of derivatives to build.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -223,7 +227,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'key' => array(),
|
||||
),
|
||||
'<b>POST only.</b> Adds a comment to an image.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -238,7 +242,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'maxValue'=>2*$conf['nb_comment_page'],
|
||||
'type'=>WS_TYPE_INT|WS_TYPE_POSITIVE),
|
||||
),
|
||||
'Returns information about an image.'
|
||||
'Returns information about an image.',
|
||||
$ws_functions_root . 'pwg.images.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -248,7 +253,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'image_id' => array('type'=>WS_TYPE_ID),
|
||||
'rate' => array('type'=>WS_TYPE_FLOAT),
|
||||
),
|
||||
'Rates an image.'
|
||||
'Rates an image.',
|
||||
$ws_functions_root . 'pwg.images.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -264,7 +270,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'order' => array('default'=>null,
|
||||
'info'=>'id, file, name, hit, rating_score, date_creation, date_available, random'),
|
||||
), $f_params),
|
||||
'Returns elements for the corresponding query search.'
|
||||
'Returns elements for the corresponding query search.',
|
||||
$ws_functions_root . 'pwg.images.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -277,7 +284,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_INT|WS_TYPE_POSITIVE),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Sets the privacy levels for the images.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -290,7 +297,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'rank' => array('type'=>WS_TYPE_INT|WS_TYPE_POSITIVE|WS_TYPE_NOTNULL)
|
||||
),
|
||||
'<b>Admin & POST only.</b> Sets the rank of a photo for a given album.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -302,7 +309,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'anonymous_id' => array('default'=>null),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Deletes all rates for a user.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -310,7 +317,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'pwg.session.getStatus',
|
||||
'ws_session_getStatus',
|
||||
null,
|
||||
'Gets information about the current session. Also provides a token useable with admin methods.'
|
||||
'Gets information about the current session. Also provides a token useable with admin methods.',
|
||||
$ws_functions_root . 'pwg.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -318,7 +326,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'ws_session_login',
|
||||
array('username', 'password'),
|
||||
'<b>POST only.</b> Tries to login the user.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.php',
|
||||
array('post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -326,7 +334,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'pwg.session.logout',
|
||||
'ws_session_logout',
|
||||
null,
|
||||
'Ends the current session.'
|
||||
'Ends the current session.',
|
||||
$ws_functions_root . 'pwg.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -336,7 +345,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'sort_by_counter' => array('default'=>false,
|
||||
'type'=>WS_TYPE_BOOL),
|
||||
),
|
||||
'Retrieves a list of available tags.'
|
||||
'Retrieves a list of available tags.',
|
||||
$ws_functions_root . 'pwg.tags.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -360,7 +370,8 @@ function ws_addDefaultMethods( $arr )
|
|||
'order' => array('default'=>null,
|
||||
'info'=>'id, file, name, hit, rating_score, date_creation, date_available, random'),
|
||||
), $f_params),
|
||||
'Returns elements for the corresponding tags. Fill at least tag_id, tag_url_name or tag_name.'
|
||||
'Returns elements for the corresponding tags. Fill at least tag_id, tag_url_name or tag_name.',
|
||||
$ws_functions_root . 'pwg.tags.php'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -374,7 +385,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'position' => array()
|
||||
),
|
||||
'<b>Admin & POST only.</b> Add a chunk of a file.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -389,7 +400,7 @@ function ws_addDefaultMethods( $arr )
|
|||
),
|
||||
'<b>Admin only.</b> Add or update a file for an existing photo.
|
||||
<br>pwg.images.addChunk must have been called before (maybe several times).',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -422,7 +433,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'<b>Admin only.</b> Add an image.
|
||||
<br>pwg.images.addChunk must have been called before (maybe several times).
|
||||
<br>Don\'t use "thumbnail_sum" and "high_sum", these parameters are here for backward compatibility.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -448,7 +459,7 @@ function ws_addDefaultMethods( $arr )
|
|||
<br>Use the <b>$_FILES[image]</b> field for uploading file.
|
||||
<br>Set the form encoding to "form-data".
|
||||
<br>You can update an existing photo if you define an existing image_id.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -460,7 +471,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'pwg_token' => array(),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Deletes image(s).',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -469,7 +480,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'ws_categories_getAdminList',
|
||||
null,
|
||||
'<b>Admin only.</b>',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.categories.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -488,7 +499,9 @@ function ws_addDefaultMethods( $arr )
|
|||
'commentable' => array('default'=>true,
|
||||
'type'=>WS_TYPE_BOOL),
|
||||
),
|
||||
'<b>Admin only.</b> Adds an album.'
|
||||
'<b>Admin only.</b> Adds an album.',
|
||||
$ws_functions_root . 'pwg.categories.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
@ -502,7 +515,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'<b>Admin & POST only.</b> Deletes album(s).
|
||||
<br><b>photo_deletion_mode</b> can be "no_delete" (may create orphan photos), "delete_orphans"
|
||||
(default mode, only deletes photos linked to no other album) or "force_delete" (delete all photos, even those linked to other albums)',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.categories.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -516,7 +529,7 @@ function ws_addDefaultMethods( $arr )
|
|||
),
|
||||
'<b>Admin & POST only.</b> Move album(s).
|
||||
<br>Set parent as 0 to move to gallery root. Only virtual categories can be moved.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.categories.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -528,7 +541,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'image_id' => array('type'=>WS_TYPE_ID),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Sets the representative photo for an album. The photo doesn\'t have to belong to the album.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.categories.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -537,7 +550,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'ws_tags_getAdminList',
|
||||
null,
|
||||
'<b>Admin only.</b>',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.tags.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -546,7 +559,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'ws_tags_add',
|
||||
array('name'),
|
||||
'<b>Admin only.</b> Adds a new tag.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.tags.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -559,7 +572,7 @@ function ws_addDefaultMethods( $arr )
|
|||
),
|
||||
'<b>Admin only.</b> Checks existence of images.
|
||||
<br>Give <b>md5sum_list</b> if $conf[uniqueness_mode]==md5sum. Give <b>filename_list</b> if $conf[uniqueness_mode]==filename.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -574,7 +587,7 @@ function ws_addDefaultMethods( $arr )
|
|||
),
|
||||
'<b>Admin only.</b> Checks if you have updated version of your files for a given photo, the answer can be "missing", "equals" or "differs".
|
||||
<br>Don\'t use "thumbnail_sum" and "high_sum", these parameters are here for backward compatibility.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -583,7 +596,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'ws_images_checkUpload',
|
||||
null,
|
||||
'<b>Admin only.</b> Checks if Piwigo is ready for upload.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -611,7 +624,7 @@ function ws_addDefaultMethods( $arr )
|
|||
<br><b>single_value_mode</b> can be "fill_if_empty" (only use the input value if the corresponding values is currently empty) or "replace"
|
||||
(overwrite any existing value) and applies to single values properties like name/author/date_creation/comment.
|
||||
<br><b>multiple_value_mode</b> can be "append" (no change on existing values, add the new values) or "replace" and applies to multiple values properties like tag_ids/categories.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.images.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -624,7 +637,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'comment' => array('default'=>null),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Changes properties of an album.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.categories.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -633,7 +646,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'ws_plugins_getList',
|
||||
null,
|
||||
'<b>Admin only.</b> Gets the list of plugins with id, name, version, state and description.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.extensions.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -646,7 +659,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'pwg_token' => array(),
|
||||
),
|
||||
'<b>Admin only.</b>',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.extensions.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -659,7 +672,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'pwg_token' => array(),
|
||||
),
|
||||
'<b>Admin only.</b>',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.extensions.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -673,7 +686,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'pwg_token' => array(),
|
||||
),
|
||||
'<b>Webmaster only.</b>',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.extensions.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -690,7 +703,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'pwg_token' => array(),
|
||||
),
|
||||
'<b>Webmaster only.</b> Ignores an extension if it needs update.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.extensions.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -699,7 +712,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'ws_extensions_checkupdates',
|
||||
null,
|
||||
'<b>Admin only.</b> Checks if piwigo or extensions are up to date.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.extensions.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -720,7 +733,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'info'=>'id, name, nb_users, is_default'),
|
||||
),
|
||||
'<b>Admin only.</b> Retrieves a list of all groups. The list can be filtered.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.groups.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -733,7 +746,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_BOOL),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Creates a group and returns the new group record.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.groups.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -743,9 +756,10 @@ function ws_addDefaultMethods( $arr )
|
|||
array(
|
||||
'group_id' => array('flags'=>WS_PARAM_FORCE_ARRAY,
|
||||
'type'=>WS_TYPE_ID),
|
||||
'pwg_token' => array(),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Deletes a or more groups. Users and photos are not deleted.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.groups.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -759,7 +773,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_BOOL),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Updates a group. Leave a field blank to keep the current value.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.groups.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -772,7 +786,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_ID),
|
||||
),
|
||||
'<b>Admin only.</b> Adds one or more users to a group.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.groups.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -785,7 +799,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_ID),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Removes one or more users from a group.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.groups.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -816,7 +830,7 @@ function ws_addDefaultMethods( $arr )
|
|||
),
|
||||
'<b>Admin only.</b> Retrieves a list of all the users.
|
||||
<br>"display" controls which data are returned, "basics" stands for "username,email,status,level,groups"',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.users.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -831,7 +845,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'send_password_by_mail' => array('default'=>false, 'type'=>WS_TYPE_BOOL),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Registers a new user.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.users.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -841,9 +855,10 @@ function ws_addDefaultMethods( $arr )
|
|||
array(
|
||||
'user_id' => array('flags'=>WS_PARAM_FORCE_ARRAY,
|
||||
'type'=>WS_TYPE_ID),
|
||||
'pwg_token' => array(),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Deletes on or more users. Photos owned by this user are not deleted.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.users.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -879,7 +894,7 @@ function ws_addDefaultMethods( $arr )
|
|||
),
|
||||
'<b>Admin & POST only.</b> Updates a user. Leave a field blank to keep the current value.
|
||||
<br>"username", "password" and "email" are ignored if "user_id" is an array.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.users.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -896,7 +911,7 @@ function ws_addDefaultMethods( $arr )
|
|||
),
|
||||
'<b>Admin only.</b> Returns permissions: user ids and group ids having access to each album ; this list can be filtered.
|
||||
<br>Provide only one parameter!',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.permissions.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -914,7 +929,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_BOOL),
|
||||
),
|
||||
'<b>Admin only.</b> Adds permissions to an album.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.permissions.php',
|
||||
array('admin_only'=>true)
|
||||
);
|
||||
|
||||
|
@ -930,7 +945,7 @@ function ws_addDefaultMethods( $arr )
|
|||
'type'=>WS_TYPE_ID),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Removes permissions from an album.',
|
||||
null,
|
||||
$ws_functions_root . 'pwg.permissions.php',
|
||||
array('admin_only'=>true, 'post_only'=>true)
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue