Tag relations don't suggest tags already used

This commit is contained in:
Marcin Kurczewski 2014-03-10 16:14:00 +01:00
parent fba6a50251
commit 73fc1830ff
4 changed files with 10 additions and 5 deletions

View file

@ -32,6 +32,7 @@ usersPerPage=8
postsPerPage=20
logsPerPage=250
tagsPerPage=100
tagsRelated=15
thumbWidth=150
thumbHeight=150
thumbStyle=outside

View file

@ -276,7 +276,8 @@ function attachTagIt(target)
onTagClicked: function(e, ui)
{
var targetTagit = ui.tag.parents('.tagit');
options = { tag: ui.tagLabel };
var context = target.tagit('assignedTags');
options = { context: context, tag: ui.tagLabel };
if (targetTagit.siblings('.related-tags:eq(0)').data('for') == options.tag)
{
targetTagit.siblings('.related-tags').slideUp(function()
@ -289,7 +290,7 @@ function attachTagIt(target)
$.getJSON('/tags-related?json', options, function(data)
{
var list = $('<ul>');
$.each(data.tags.slice(0, 10), function(i, tag)
$.each(data.tags, function(i, tag)
{
var link = $('<a>');
link.attr('href', '/posts/' + tag.name + '/');

View file

@ -73,9 +73,11 @@ class TagController
{
PrivilegesHelper::confirmWithException(Privilege::ListTags);
$suppliedContext = (array) InputHelper::get('context');
$suppliedTag = InputHelper::get('tag');
$tags = TagSearchService::getRelatedTagRows($suppliedTag, 10, 1);
$limit = intval($this->config->browsing->tagsRelated);
$tags = TagSearchService::getRelatedTagRows($suppliedTag, $suppliedContext, $limit);
$this->context->transport->tags =
array_values(array_map(

View file

@ -9,7 +9,7 @@ class TagSearchService extends AbstractSearchService
$stmt->addColumn(new Sql\AliasFunctor(new Sql\CountFunctor('post_tag.post_id'), 'post_count'));
}
public static function getRelatedTagRows($parentTagName, $limit)
public static function getRelatedTagRows($parentTagName, $context, $limit)
{
$parentTagEntity = TagModel::findByName($parentTagName, false);
if (empty($parentTagEntity))
@ -24,7 +24,6 @@ class TagSearchService extends AbstractSearchService
->addInnerJoin('post_tag', new Sql\EqualsFunctor('post_tag.tag_id', 'tag.id'))
->setGroupBy('tag.id')
->setOrderBy('post_count', Sql\SelectStatement::ORDER_DESC)
->setLimit($limit + 1, 0)
->setCriterion(new Sql\ExistsFunctor((new Sql\SelectStatement)
->setTable('post_tag pt2')
->setCriterion((new Sql\ConjunctionFunctor)
@ -62,6 +61,8 @@ class TagSearchService extends AbstractSearchService
}
usort($rows, function($a, $b) { return intval($b['sort']) - intval($a['sort']); });
$rows = array_filter($rows, function($row) use ($context) { return !in_array($row['name'], $context); });
$rows = array_slice($rows, 0, $limit);
return $rows;
}