From 5d2c5a20538af3bfd093368e3b012b5adccb91ff Mon Sep 17 00:00:00 2001 From: Marcin Kurczewski Date: Sun, 4 May 2014 10:03:03 +0200 Subject: [PATCH] Moved tag renaming to API --- public_html/dispatch.php | 3 ++- src/Api/Jobs/RenameTagsJob.php | 35 +++++++++++++++++++++++++++++++ src/Controllers/TagController.php | 27 +++++++++++------------- src/Models/TagModel.php | 1 + src/Views/tag-list-wrapper.phtml | 2 +- 5 files changed, 51 insertions(+), 17 deletions(-) create mode 100644 src/Api/Jobs/RenameTagsJob.php diff --git a/public_html/dispatch.php b/public_html/dispatch.php index 334d5d60..f6e181be 100644 --- a/public_html/dispatch.php +++ b/public_html/dispatch.php @@ -127,11 +127,12 @@ $tagValidation = \Chibi\Router::register(['TagController', 'listView'], 'GET', '/tags/{filter}/{page}', $tagValidation); \Chibi\Router::register(['TagController', 'autoCompleteView'], 'GET', '/tags-autocomplete', $tagValidation); \Chibi\Router::register(['TagController', 'relatedView'], 'GET', '/tags-related', $tagValidation); +\Chibi\Router::register(['TagController', 'renameView'], 'GET', '/tags-rename', $tagValidation); +\Chibi\Router::register(['TagController', 'renameAction'], 'POST', '/tags-rename', $tagValidation); foreach (['GET', 'POST'] as $method) { \Chibi\Router::register(['TagController', 'mergeAction'], $method, '/tags-merge', $tagValidation); - \Chibi\Router::register(['TagController', 'renameAction'], $method, '/tags-rename', $tagValidation); \Chibi\Router::register(['TagController', 'massTagRedirectAction'], $method, '/mass-tag-redirect', $tagValidation); $userValidations = diff --git a/src/Api/Jobs/RenameTagsJob.php b/src/Api/Jobs/RenameTagsJob.php new file mode 100644 index 00000000..53ca0d7d --- /dev/null +++ b/src/Api/Jobs/RenameTagsJob.php @@ -0,0 +1,35 @@ +getArgument(self::SOURCE_TAG_NAME); + $targetTag = $this->getArgument(self::TARGET_TAG_NAME); + + TagModel::removeUnused(); + TagModel::rename($sourceTag, $targetTag); + + LogHelper::log('{user} renamed {source} to {target}', [ + 'user' => TextHelper::reprUser(Auth::getCurrentUser()), + 'source' => TextHelper::reprTag($sourceTag), + 'target' => TextHelper::reprTag($targetTag)]); + } + + public function requiresPrivilege() + { + return Privilege::RenameTags; + } + + public function requiresAuthentication() + { + return false; + } + + public function requiresConfirmedEmail() + { + return false; + } +} diff --git a/src/Controllers/TagController.php b/src/Controllers/TagController.php index b79d777f..2723fece 100644 --- a/src/Controllers/TagController.php +++ b/src/Controllers/TagController.php @@ -94,6 +94,12 @@ class TagController Messenger::message('Tags merged successfully.'); } + public function renameView() + { + $context = getContext(); + $context->viewName = 'tag-list-wrapper'; + } + public function renameAction() { $context = getContext(); @@ -101,22 +107,13 @@ class TagController $context->handleExceptions = true; Access::assert(Privilege::MergeTags); - if (!InputHelper::get('submit')) - return; - TagModel::removeUnused(); - - $suppliedSourceTag = InputHelper::get('source-tag'); - $suppliedSourceTag = TagModel::validateTag($suppliedSourceTag); - - $suppliedTargetTag = InputHelper::get('target-tag'); - $suppliedTargetTag = TagModel::validateTag($suppliedTargetTag); - - TagModel::rename($suppliedSourceTag, $suppliedTargetTag); - - LogHelper::log('{user} renamed {source} to {target}', [ - 'source' => TextHelper::reprTag($suppliedSourceTag), - 'target' => TextHelper::reprTag($suppliedTargetTag)]); + Api::run( + new RenameTagsJob(), + [ + RenameTagsJob::SOURCE_TAG_NAME => InputHelper::get('source-tag'), + RenameTagsJob::TARGET_TAG_NAME => InputHelper::get('target-tag'), + ]); Messenger::message('Tag renamed successfully.'); } diff --git a/src/Models/TagModel.php b/src/Models/TagModel.php index 0c3aaa54..7fc46d76 100644 --- a/src/Models/TagModel.php +++ b/src/Models/TagModel.php @@ -59,6 +59,7 @@ class TagModel extends AbstractCrudModel throw new SimpleException('Target tag already exists'); $sourceTag->name = $targetName; + TagModel::validateTag($sourceTag->name); self::save($sourceTag); }); } diff --git a/src/Views/tag-list-wrapper.phtml b/src/Views/tag-list-wrapper.phtml index 99866944..0bf6e836 100644 --- a/src/Views/tag-list-wrapper.phtml +++ b/src/Views/tag-list-wrapper.phtml @@ -4,8 +4,8 @@ Assets::addStylesheet('tag-list.css'); $tabs = []; if (Access::check(Privilege::ListTags)) $tabs['list'] = ['List', 'listView']; -if (Access::check(Privilege::RenameTags)) $tabs['rename'] = ['Rename', 'renameAction']; if (Access::check(Privilege::MergeTags)) $tabs['merge'] = ['Merge', 'mergeAction']; +if (Access::check(Privilege::RenameTags)) $tabs['rename'] = ['Rename', 'renameView']; if (Access::check(Privilege::MassTag)) $tabs['mass-tag-redirect'] = ['Mass tag', 'massTagRedirectAction']; $showTabs = count($tabs) > 1; ?>