From e1c81393735abf78dfcecaddf421ff8cf98b825b Mon Sep 17 00:00:00 2001 From: Marcin Kurczewski <mkurczew@gmail.com> Date: Fri, 1 Nov 2013 20:51:19 +0100 Subject: [PATCH] Unused tags are removed on post edit --- src/Controllers/PostController.php | 1 + src/Models/Model_Tag.php | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Controllers/PostController.php b/src/Controllers/PostController.php index 0bc47da8..69e82bb4 100644 --- a/src/Controllers/PostController.php +++ b/src/Controllers/PostController.php @@ -427,6 +427,7 @@ class PostController } R::store($post); + Model_Tag::removeUnused(); $this->context->transport->success = true; diff --git a/src/Models/Model_Tag.php b/src/Models/Model_Tag.php index 24986d63..e42dbac9 100644 --- a/src/Models/Model_Tag.php +++ b/src/Models/Model_Tag.php @@ -3,7 +3,7 @@ class Model_Tag extends AbstractModel { public static function locate($key, $throw = true) { - $tag = R::findOne('tag', 'LOWER(name) = LOWER(?)', [$key]); + $tag = R::findOne(self::getTableName(), 'LOWER(name) = LOWER(?)', [$key]); if (!$tag) { if ($throw) @@ -13,6 +13,24 @@ class Model_Tag extends AbstractModel return $tag; } + public static function removeUnused() + { + $dbQuery = R::$f + ->begin() + ->select('id, name') + ->from(self::getTableName()) + ->where() + ->not()->exists() + ->open() + ->select('1') + ->from('post_tag') + ->where('post_tag.tag_id = tag.id') + ->close(); + $rows = $dbQuery->get(); + $entities = R::convertToBeans(self::getTableName(), $rows); + R::trashAll($entities); + } + public static function insertOrUpdate($tags) { $dbTags = []; @@ -21,7 +39,7 @@ class Model_Tag extends AbstractModel $dbTag = self::locate($tag, false); if (!$dbTag) { - $dbTag = R::dispense('tag'); + $dbTag = R::dispense(self::getTableName()); $dbTag->name = $tag; R::store($dbTag); }