Skip to content

Commit fbcc940

Browse files
authored
Merge pull request #22 from joomlatools/feature/21-operator
Allow strict matching
2 parents cb3898a + f8a4d17 commit fbcc940

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

database/behavior/taggable.php

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@
1616
*/
1717
class ComTagsDatabaseBehaviorTaggable extends KDatabaseBehaviorAbstract
1818
{
19+
protected function _initialize(KObjectConfig $config)
20+
{
21+
$config->append(array('strict' => false));
22+
23+
parent::_initialize($config);
24+
}
25+
1926
/**
2027
* Get a list of tags
2128
*
@@ -48,9 +55,21 @@ protected function _beforeSelect(KDatabaseContext $context)
4855
{
4956
$package = $this->getMixer()->getIdentifier()->package;
5057

51-
$query->join($package.'_tags_relations AS tags_relations', 'tags_relations.row = tbl.uuid');
52-
$query->join($package.'_tags AS tags', 'tags.tag_id = tags_relations.tag_id');
53-
$query->where('tags.slug IN :tag');
58+
59+
if ($this->getConfig()->strict)
60+
{
61+
$tags = KObjectConfig::unbox($this->getConfig()->tags);
62+
63+
for ($i = 0; $i < count($tags); $i++) {
64+
$query->join("{$package}_tags_relations AS tags_relations{$i}", "tags_relations{$i}.row = tbl.uuid")
65+
->join("{$package}_tags AS tags{$i}", "tags{$i}.tag_id = tags_relations{$i}.tag_id", 'INNER')
66+
->where("tags{$i}.slug = :tag{$i}")
67+
->bind(array("tag{$i}" => $tags[$i]));
68+
}
69+
}
70+
else $query->join($package . '_tags_relations AS tags_relations', 'tags_relations{$i}.row = tbl.uuid')
71+
->join($package . '_tags AS tags', 'tags.tag_id = tags_relations.tag_id')
72+
->where('tags.slug IN :tag');
5473
}
5574
}
5675
}

model/behavior/taggable.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ public function __construct(KObjectConfig $config)
3838
protected function _initialize(KObjectConfig $config)
3939
{
4040
$config->append(array(
41-
'priority' => KBehaviorAbstract::PRIORITY_HIGH
41+
'priority' => KBehaviorAbstract::PRIORITY_HIGH,
42+
'strict' => false
4243
));
4344

4445
parent::_initialize($config);
@@ -65,7 +66,11 @@ public function onMixin(KObjectMixable $mixer)
6566
protected function _makeTaggable(KModelContextInterface $context)
6667
{
6768
$model = $context->getSubject();
68-
$model->getTable()->addBehavior('com:tags.database.behavior.taggable');
69+
70+
$model->getTable()->addBehavior('com:tags.database.behavior.taggable', array(
71+
'tags' => $model->getState()->tag,
72+
'strict' => $this->getConfig()->strict
73+
));
6974
}
7075

7176
/**

0 commit comments

Comments
 (0)