summaryrefslogtreecommitdiff
path: root/modules/tag/models
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2011-04-23 13:16:27 -0700
committerBharat Mediratta <bharat@menalto.com>2011-04-23 13:16:27 -0700
commitb57b229543aeab096e8574e9f27cff5d6a9ed07c (patch)
treea9e9595ef6f3a88b3c33e94068191cc148b7160b /modules/tag/models
parentc1779a9e8f1a2c3cbda576815a37fd9b67b3c82c (diff)
parentc101151616033d53587d1435881dae0fa45aeefa (diff)
Merge branch 'alindeman/1628' of git://github.com/alindeman/gallery3 into andy
Diffstat (limited to 'modules/tag/models')
-rw-r--r--modules/tag/models/tag.php24
1 files changed, 17 insertions, 7 deletions
diff --git a/modules/tag/models/tag.php b/modules/tag/models/tag.php
index bd665667..bb79e707 100644
--- a/modules/tag/models/tag.php
+++ b/modules/tag/models/tag.php
@@ -69,13 +69,23 @@ class Tag_Model_Core extends ORM {
* to this tag.
*/
public function save() {
- $related_item_ids = array();
- foreach (db::build()
- ->select("item_id")
- ->from("items_tags")
- ->where("tag_id", "=", $this->id)
- ->execute() as $row) {
- $related_item_ids[$row->item_id] = 1;
+ // Check to see if another tag exists with the same name
+ $duplicate_tag = ORM::factory("tag")
+ ->where("name", "=", $this->name)
+ ->where("id", "!=", $this->id)
+ ->find();
+ if ($duplicate_tag->loaded()) {
+ // If so, tag its items with this tag so as to merge it
+ $duplicate_tag_items = ORM::factory("item")
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $duplicate_tag->id)
+ ->find_all();
+ foreach ($duplicate_tag_items as $item) {
+ $this->add($item);
+ }
+
+ // ... and remove the duplicate tag
+ $duplicate_tag->delete();
}
if (isset($this->object_relations["items"])) {