Issue #1193 : Tag Manager redesign

* Create the new design of tag manager
 * Replace all actions by ajax actions
 * Add delete, rename, duplicate and merge tag's functions in the Piwigo API
 * Modification of group manager to match both designs
This commit is contained in:
Zacharie
2020-06-16 16:44:14 +02:00
committed by plegall
parent 21dc3b8490
commit a3ab495446
12 changed files with 1527 additions and 630 deletions
+268 -1
View File
@@ -220,14 +220,281 @@ function ws_tags_add($params, &$service)
{
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
if (get_pwg_token() != $params['pwg_token'])
{
return new PwgError(403, 'Invalid security token');
}
$creation_output = create_tag($params['name']);
if (isset($creation_output['error']))
{
return new PwgError(500, $creation_output['error']);
return new PwgError(WS_ERR_INVALID_PARAM, $creation_output['error']);
}
pwg_activity('tag', $creation_output['id'], 'add');
return $creation_output;
}
function ws_tags_delete($params, &$service)
{
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
if (get_pwg_token() != $params['pwg_token'])
{
return new PwgError(403, 'Invalid security token');
}
$query = '
SELECT COUNT(*)
FROM `'. TAGS_TABLE .'`
WHERE id in ('.implode(',', $params['tag_id']) .')
;';
list($count) = pwg_db_fetch_row(pwg_query($query));
if ($count != count($params['tag_id']))
{
return new PwgError(WS_ERR_INVALID_PARAM, 'All tags does not exist.');
}
$tag_ids = $params['tag_id'];
if (count($tag_ids) > 0)
{
delete_tags($params['tag_id']);
return array('id' => $tag_ids);
foreach ($tag_ids as $ids) {
pwg_activity('tag', $creation_output['id'], 'delete');
}
} else {
return array('id' => array());
}
}
function ws_tags_rename($params, &$service)
{
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
if (get_pwg_token() != $params['pwg_token'])
{
return new PwgError(403, 'Invalid security token');
}
$tag_id = $params['tag_id'];
$tag_name = $params['new_name'];
// does the tag exist ?
$query = '
SELECT COUNT(*)
FROM `'. TAGS_TABLE .'`
WHERE id = '. $tag_id .'
;';
list($count) = pwg_db_fetch_row(pwg_query($query));
if ($count == 0)
{
return new PwgError(WS_ERR_INVALID_PARAM, 'This tag does not exist.');
}
$query = '
SELECT name
FROM '.TAGS_TABLE.'
WHERE id != '.$tag_id.'
;';
$existing_names = array_from_query($query, 'name');
$update = array();
if (in_array($tag_name, $existing_names))
{
return new PwgError(WS_ERR_INVALID_PARAM, 'This name is already token');
}
else if (!empty($tag_name))
{
$update = array(
'name' => addslashes($tag_name),
'url_name' => trigger_change('render_tag_url', $tag_name),
);
}
pwg_activity('tag', $tag_id, 'edit');
single_update(
TAGS_TABLE,
$update,
array('id' => $tag_id)
);
return array(
'id' => $tag_id,
'name' => addslashes($tag_name),
'url_name' => trigger_change('render_tag_url', $tag_name)
);
}
function ws_tags_duplicate($params, &$service) {
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
if (get_pwg_token() != $params['pwg_token'])
{
return new PwgError(403, 'Invalid security token');
}
$tag_id = $params['tag_id'];
$copy_name = $params['copy_name'];
// does the tag exist ?
$query = '
SELECT COUNT(*)
FROM `'. TAGS_TABLE .'`
WHERE id = '. $tag_id .'
;';
list($count) = pwg_db_fetch_row(pwg_query($query));
if ($count == 0)
{
return new PwgError(WS_ERR_INVALID_PARAM, 'This tag does not exist.');
}
$query = '
SELECT COUNT(*)
FROM `'. TAGS_TABLE .'`
WHERE name = "'. $copy_name .'"
;';
list($count) = pwg_db_fetch_row(pwg_query($query));
if ($count != 0)
{
return new PwgError(WS_ERR_INVALID_PARAM, 'This name is already taken.');
}
single_insert(
TAGS_TABLE,
array(
'name' => $copy_name,
'url_name' => trigger_change('render_tag_url', $copy_name),
)
);
$destination_tag_id = pwg_db_insert_id(TAGS_TABLE);
pwg_activity('tag', $destination_tag_id, 'add', array('action'=>'duplicate', 'source_tag'=>$tag_id));
$query = '
SELECT image_id
FROM '.IMAGE_TAG_TABLE.'
WHERE tag_id = '.$tag_id.'
;';
$destination_tag_image_ids = array_from_query($query, 'image_id');
$inserts = array();
foreach ($destination_tag_image_ids as $image_id)
{
$inserts[] = array(
'tag_id' => $destination_tag_id,
'image_id' => $image_id
);
pwg_activity('image', $image_id, 'edit', array("add-tag" => $destination_tag_id));
}
if (count($inserts) > 0)
{
mass_inserts(
IMAGE_TAG_TABLE,
array_keys($inserts[0]),
$inserts
);
}
return array(
'id' => $destination_tag_id,
'name' => $copy_name,
'url_name' => trigger_change('render_tag_url', $copy_name),
);
}
function ws_tags_merge($params, &$service) {
if (get_pwg_token() != $params['pwg_token'])
{
return new PwgError(403, 'Invalid security token');
}
$all_tags = $params['merge_tag_id'];
array_push($all_tags, $params['destination_tag_id']);
$all_tags = array_unique($all_tags);
$merge_tag = array_diff($params['merge_tag_id'], array($params['destination_tag_id']));
$query = '
SELECT COUNT(*)
FROM `'. TAGS_TABLE .'`
WHERE id in ('.implode(',', $all_tags) .')
;';
list($count) = pwg_db_fetch_row(pwg_query($query));
if ($count != count($all_tags))
{
return new PwgError(WS_ERR_INVALID_PARAM, 'All tags does not exist.');
}
$image_in_merge_tags = array();
$image_in_dest = array();
$image_to_add = array();
$query = '
SELECT DISTINCT(image_id)
FROM `'. IMAGE_TAG_TABLE .'`
WHERE
tag_id IN ('.implode(',', $merge_tag) .')
;';
$image_in_merge_tags = query2array($query, null, 'image_id');
$query = '
SELECT image_id
FROM `'. IMAGE_TAG_TABLE .'`
WHERE tag_id = '.$params['destination_tag_id'].'
;';
$image_in_dest = query2array($query, null, 'image_id');;
$image_to_add = array_diff($image_in_merge_tags, $image_in_dest);
$inserts = array();
foreach ($image_to_add as $image)
{
$inserts[] = array(
'tag_id' => $params['destination_tag_id'],
'image_id' => $image,
);
}
mass_inserts(
IMAGE_TAG_TABLE,
array('tag_id', 'image_id'),
$inserts,
array('ignore'=>true)
);
pwg_activity('tag', $params['destination_tag_id'], 'edit');
foreach ($image_to_add as $image_id)
{
pwg_activity('image', $image_id, 'edit', array("tag-add" => $params['destination_tag_id']));
}
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
delete_tags($merge_tag);
$image_in_merged = array_merge($image_in_dest, $image_to_add);
return array(
"destination_tag" => $params['destination_tag_id'],
"deleted_tag" => $params['merge_tag_id'],
"images_in_merged_tag" => $image_in_merged
);
}
?>