aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/ws_functions.inc.php112
-rw-r--r--ws.php11
2 files changed, 123 insertions, 0 deletions
diff --git a/include/ws_functions.inc.php b/include/ws_functions.inc.php
index 98828fcb8..40c7a38ef 100644
--- a/include/ws_functions.inc.php
+++ b/include/ws_functions.inc.php
@@ -1016,6 +1016,118 @@ UPDATE '.IMAGES_TABLE.'
return $affected_rows;
}
+function ws_images_setRank($params, &$service)
+{
+ if (!is_admin())
+ {
+ return new PwgError(401, 'Access denied');
+ }
+
+ if (!$service->isPost())
+ {
+ return new PwgError(405, "This method requires HTTP POST");
+ }
+
+ // is the image_id valid?
+ $params['image_id'] = (int)$params['image_id'];
+ if ($params['image_id'] <= 0)
+ {
+ return new PwgError(WS_ERR_INVALID_PARAM, "Invalid image_id");
+ }
+
+ // is the category valid?
+ $params['category_id'] = (int)$params['category_id'];
+ if ($params['category_id'] <= 0)
+ {
+ return new PwgError(WS_ERR_INVALID_PARAM, "Invalid category_id");
+ }
+
+ // is the rank valid?
+ $params['rank'] = (int)$params['rank'];
+ if ($params['rank'] <= 0)
+ {
+ return new PwgError(WS_ERR_INVALID_PARAM, "Invalid rank");
+ }
+
+ // does the image really exist?
+ $query='
+SELECT
+ *
+ FROM '.IMAGES_TABLE.'
+ WHERE id = '.$params['image_id'].'
+;';
+
+ $image_row = pwg_db_fetch_assoc(pwg_query($query));
+ if ($image_row == null)
+ {
+ return new PwgError(404, "image_id not found");
+ }
+
+ // is the image associated to this category?
+ $query = '
+SELECT
+ image_id,
+ category_id,
+ rank
+ FROM '.IMAGE_CATEGORY_TABLE.'
+ WHERE image_id = '.$params['image_id'].'
+ AND category_id = '.$params['category_id'].'
+;';
+ $category_row = pwg_db_fetch_assoc(pwg_query($query));
+ if ($category_row == null)
+ {
+ return new PwgError(404, "This image is not associated to this category");
+ }
+
+ // what is the current higher rank for this category?
+ $query = '
+SELECT
+ MAX(rank) AS max_rank
+ FROM '.IMAGE_CATEGORY_TABLE.'
+ WHERE category_id = '.$params['category_id'].'
+;';
+ $result = pwg_query($query);
+ $row = pwg_db_fetch_assoc($result);
+
+ if (is_numeric($row['max_rank']))
+ {
+ if ($params['rank'] > $row['max_rank'])
+ {
+ $params['rank'] = $row['max_rank'] + 1;
+ }
+ }
+ else
+ {
+ $params['rank'] = 1;
+ }
+
+ // update rank for all other photos in the same category
+ $query = '
+UPDATE '.IMAGE_CATEGORY_TABLE.'
+ SET rank = rank + 1
+ WHERE category_id = '.$params['category_id'].'
+ AND rank IS NOT NULL
+ AND rank >= '.$params['rank'].'
+;';
+ pwg_query($query);
+
+ // set the new rank for the photo
+ $query = '
+UPDATE '.IMAGE_CATEGORY_TABLE.'
+ SET rank = '.$params['rank'].'
+ WHERE image_id = '.$params['image_id'].'
+ AND category_id = '.$params['category_id'].'
+;';
+ pwg_query($query);
+
+ // return data for client
+ return array(
+ 'image_id' => $params['image_id'],
+ 'category_id' => $params['category_id'],
+ 'rank' => $params['rank'],
+ );
+}
+
function ws_images_add_chunk($params, &$service)
{
global $conf;
diff --git a/ws.php b/ws.php
index a23929d28..e4a317385 100644
--- a/ws.php
+++ b/ws.php
@@ -143,6 +143,17 @@ function ws_addDefaultMethods( $arr )
'sets the privacy levels for the images (POST method only)'
);
+ $service->addMethod(
+ 'pwg.images.setRank',
+ 'ws_images_setRank',
+ array(
+ 'image_id' => array(),
+ 'category_id' => array(),
+ 'rank' => array(),
+ ),
+ 'sets the rank of a photo for a given album (POST method only, for admins)'
+ );
+
$service->addMethod('pwg.session.getStatus', 'ws_session_getStatus', null, '' );
$service->addMethod('pwg.session.login', 'ws_session_login',
array('username', 'password'),