Skip to content

Commit

Permalink
feature 2737: improve tag administration screen
Browse files Browse the repository at this point in the history
show for every tag
- the number of photos
- link to public index page
- link to batch manager edit

add an event for extended description multi language strings (used for autocompletion and shown in the tag admin screen) instead of hard coded in the core [lang=..

git-svn-id: http://piwigo.org/svn/trunk@17765 68402e56-0260-453c-a942-63ccdbb3a9ee
  • Loading branch information
rvelices committed Sep 5, 2012
1 parent 528c75a commit dadd8f6
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 55 deletions.
7 changes: 7 additions & 0 deletions admin/batch_manager.php
Expand Up @@ -114,6 +114,13 @@
'category' => $_GET['cat']
);
}

if (substr_compare($_GET['cat'],'tag-',0,4)==0)
{
$_SESSION['bulk_manager_filter']=array();
$_SESSION['bulk_manager_filter']['tags'] = array(intval(substr($_GET['cat'],4)));
$_SESSION['bulk_manager_filter']['tag_mode'] = 'AND';
}
}

if (!isset($_SESSION['bulk_manager_filter']))
Expand Down
3 changes: 0 additions & 3 deletions admin/batch_manager_unit.php
Expand Up @@ -181,9 +181,6 @@
);
$template->assign(array('navbar' => $nav_bar));

// tags
$all_tags = get_all_tags();

$element_ids = array();

$is_category = false;
Expand Down
71 changes: 41 additions & 30 deletions admin/include/functions.php
Expand Up @@ -1205,7 +1205,7 @@ function create_virtual_category($category_name, $parent_id=null, $options=array
{
return array('error' => l10n('The name of an album must not be empty'));
}

$insert = array(
'name' => $category_name,
'rank' => 0,
Expand Down Expand Up @@ -1474,11 +1474,14 @@ function set_tags_of($tags_of)
}
}

mass_inserts(
IMAGE_TAG_TABLE,
array_keys($inserts[0]),
$inserts
);
if (count($inserts))
{
mass_inserts(
IMAGE_TAG_TABLE,
array_keys($inserts[0]),
$inserts
);
}
}
}

Expand All @@ -1498,7 +1501,7 @@ function associate_images_to_categories($images, $categories)
{
return false;
}

// get existing associations
$query = '
SELECT
Expand All @@ -1509,7 +1512,7 @@ function associate_images_to_categories($images, $categories)
AND category_id IN ('.implode(',', $categories).')
;';
$result = pwg_query($query);

$existing = array();
while ($row = pwg_db_fetch_assoc($result))
{
Expand Down Expand Up @@ -2119,38 +2122,46 @@ function get_taglist($query, $only_user_language=true)
$result = pwg_query($query);

$taglist = array();
$altlist = array();
while ($row = pwg_db_fetch_assoc($result))
{
if (!$only_user_language and preg_match_all('#\[lang=(.*?)\](.*?)\[/lang\]#is', $row['name'], $matches))
$raw_name = $row['name'];
$name = trigger_event('render_tag_name', $raw_name);

$taglist[] = array(
'name' => $name,
'id' => '~~'.$row['id'].'~~',
);

if (!$only_user_language)
{
foreach ($matches[2] as $tag_name)
$alt_names = trigger_event('get_tag_alt_names', array(), $raw_name);

// TEMP 2.4
if (count($alt_names)==0 and preg_match_all('#\[lang=(.*?)\](.*?)\[/lang\]#is', $row['name'], $matches))
{
array_push(
$taglist,
array(
'name' => trigger_event('render_tag_name', $tag_name),
foreach ($matches[2] as $alt)
{
$alt_names[] = $alt;
}
}

foreach( array_diff( array_unique($alt_names), array($name) ) as $alt)
{
$altlist[] = array(
'name' => $alt,
'id' => '~~'.$row['id'].'~~',
)
);
}

$row['name'] = preg_replace('#\[lang=(.*?)\](.*?)\[/lang\]#is', null, $row['name']);
}

if (strlen($row['name']) > 0)
{
array_push(
$taglist,
array(
'name' => trigger_event('render_tag_name', $row['name']),
'id' => '~~'.$row['id'].'~~',
)
);
}
}

$cmp = create_function('$a,$b', 'return strcasecmp($a["name"], $b["name"]);');
usort($taglist, $cmp);
usort($taglist, 'tag_alpha_compare');
if (count($altlist))
{
usort($altlist, 'tag_alpha_compare');
$taglist = array_merge($taglist, $altlist);
}

return $taglist;
}
Expand Down
66 changes: 49 additions & 17 deletions admin/tags.php
Expand Up @@ -45,7 +45,7 @@
FROM '.TAGS_TABLE.'
;';
$existing_names = array_from_query($query, 'name');


$current_name_of = array();
$query = '
Expand All @@ -58,7 +58,7 @@
{
$current_name_of[ $row['id'] ] = $row['name'];
}

$updates = array();
// we must not rename tag with an already existing name
foreach (explode(',', $_POST['edit_list']) as $tag_id)
Expand Down Expand Up @@ -110,7 +110,7 @@
FROM '.TAGS_TABLE.'
;';
$existing_names = array_from_query($query, 'name');


$current_name_of = array();
$query = '
Expand All @@ -123,7 +123,7 @@
{
$current_name_of[ $row['id'] ] = $row['name'];
}

$updates = array();
// we must not rename tag with an already existing name
foreach (explode(',', $_POST['edit_list']) as $tag_id)
Expand Down Expand Up @@ -179,7 +179,7 @@
)
);
}

if (count($inserts) > 0)
{
mass_inserts(
Expand Down Expand Up @@ -226,7 +226,7 @@
{
$destination_tag_id = $_POST['destination_tag'];
$tag_ids = explode(',', $_POST['merge_list']);

if (is_array($tag_ids) and count($tag_ids) > 1)
{
$name_of_tag = array();
Expand All @@ -242,7 +242,7 @@
{
$name_of_tag[ $row['id'] ] = trigger_event('render_tag_name', $row['name']);
}

$tag_ids_to_delete = array_diff(
$tag_ids,
array($destination_tag_id)
Expand Down Expand Up @@ -297,7 +297,7 @@
{
$tags_deleted[] = $name_of_tag[$tag_id];
}

array_push(
$page['infos'],
sprintf(
Expand Down Expand Up @@ -325,11 +325,11 @@
$tag_names = array_from_query($query, 'name');

delete_tags($_POST['tags']);

array_push(
$page['infos'],
l10n_dec(
'The following tag was deleted',
'The following tag was deleted',
'The %d following tags were deleted',
count($tag_names)).' : '.
implode(', ', $tag_names)
Expand All @@ -343,7 +343,7 @@
if (isset($_GET['action']) and 'delete_orphans' == $_GET['action'])
{
check_pwg_token();

delete_orphan_tags();
$_SESSION['page_infos'] = array(l10n('Orphan tags deleted'));
redirect(get_root_url().'admin.php?page=tags');
Expand Down Expand Up @@ -377,7 +377,7 @@
)
)
);

array_push(
$page['infos'],
sprintf(
Expand Down Expand Up @@ -440,12 +440,44 @@
// | form creation |
// +-----------------------------------------------------------------------+


// tag counters
$query = '
SELECT tag_id, COUNT(image_id) AS counter
FROM '.IMAGE_TAG_TABLE.'
GROUP BY tag_id';
$tag_counters = simple_hash_from_query($query, 'tag_id', 'counter');

// all tags
$query = '
SELECT *
FROM '.TAGS_TABLE.'
;';
$result = pwg_query($query);
$all_tags = array();
while ($tag = pwg_db_fetch_assoc($result))
{
$raw_name = $tag['name'];
$tag['name'] = trigger_event('render_tag_name', $raw_name);
$tag['counter'] = intval(@$tag_counters[ $tag['id'] ]);
$tag['U_VIEW'] = make_index_url(array('tags'=>array($tag)));
$tag['U_EDIT'] = 'admin.php?page=batch_manager&cat=tag-'.$tag['id'];

$alt_names = trigger_event('get_tag_alt_names', array(), $raw_name);
$alt_names = array_diff( array_unique($alt_names), array($tag['name']) );
if (count($alt_names))
{
$tag['alt_names'] = implode(', ', $alt_names);
}
$all_tags[] = $tag;
}
usort($all_tags, 'tag_alpha_compare');



$template->assign(
array(
'TAG_SELECTION' => get_html_tag_selection(
get_all_tags(),
'tags'
),
'all_tags' => $all_tags,
)
);

Expand All @@ -460,7 +492,7 @@
{
$list_name = 'MERGE_TAGS_LIST';
}

$template->assign(
array(
$list_name => implode(',', $_POST['tags']),
Expand Down
31 changes: 26 additions & 5 deletions admin/themes/default/template/tags.tpl
Expand Up @@ -40,7 +40,7 @@ jQuery(document).ready(function(){
{foreach from=$tags item=tag}
<tr>
<td>{$tag.NAME}</td>
<td><input type="text" name="tag_name-{$tag.ID}" value="{$tag.NAME}" size="30"></td>
<td><input type="text" name="tag_name-{$tag.ID}" value="{$tag.NAME}" size="50"></td>
</tr>
{/foreach}
</table>
Expand All @@ -64,7 +64,7 @@ jQuery(document).ready(function(){
{foreach from=$tags item=tag}
<tr>
<td>{$tag.NAME}</td>
<td><input type="text" name="tag_name-{$tag.ID}" value="{$tag.NAME}" size="30"></td>
<td><input type="text" name="tag_name-{$tag.ID}" value="{$tag.NAME}" size="50"></td>
</tr>
{/foreach}
</table>
Expand Down Expand Up @@ -95,16 +95,37 @@ jQuery(document).ready(function(){

<label>
{'New tag'|@translate}
<input type="text" name="add_tag" size="30">
<input type="text" name="add_tag" size="50">
</label>

<p><input class="submit" type="submit" name="add" value="{'Submit'|@translate}"></p>
</fieldset>

<fieldset>
<legend>{'Tag selection'|@translate}</legend>

{$TAG_SELECTION}
{html_style}
.showInfo{ldelim}position:static; display:inline-block; text-indent:6px}
{/html_style}
{footer_script}{literal}
jQuery('.showInfo').tipTip({
'delay' : 0,
'fadeIn' : 200,
'fadeOut' : 200,
'maxWidth':'300px',
'keepAlive':true,
'activation':'click'
});
{/literal}{/footer_script}
<ul class="tagSelection">
{foreach from=$all_tags item=tag}
<li>{capture name='showInfo'}<b>{$tag.name}</b><br>{$pwg->l10n_dec('%d photo', '%d photos', $tag.counter)} <a href="{$tag.U_VIEW}">{'View'|@translate}</a> <a href="{$tag.U_EDIT}">{'Edit'|@translate}</a>{if !empty($tag.alt_names)}<br>{$tag.alt_names}{/if}{/capture}
<a class="showInfo" title="{$smarty.capture.showInfo|@htmlspecialchars}">i</a>
<label>
<input type="checkbox" name="tags[]" value="{$tag.id}"> {$tag.name}
</label>
</li>
{/foreach}
</ul>

<p>
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
Expand Down

0 comments on commit dadd8f6

Please sign in to comment.