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;
?>