diff --git a/elementactions/TagManager_MergeElementAction.php b/elementactions/TagManager_MergeElementAction.php new file mode 100644 index 0000000..58c8cb8 --- /dev/null +++ b/elementactions/TagManager_MergeElementAction.php @@ -0,0 +1,92 @@ +getClassHandle()).', + validateSelection: function($selectedElements){ return $selectedElements.length > 1; }, + }); + + $("#TagManager_Merge-actiontrigger").on("click", function() { + var elements = Craft.elementIndex.getSelectedElements(); + var list = $(".merge-tags-list"); + + list.empty(); + + $.each(elements, function(index, element) { + list.append("
  • " + element.innerText + "
  • "); + }); + + $(document).ready(function() { + Craft.initUiElements(); + }); + + $(document).on("click", ".formsubmit", function(ev) { + // Code adapted from formsubmit function in craft.js:1411 + + var $btn = $(ev.currentTarget); + var $form = $("#TagManager_Merge-actiontrigger"); + + if ($btn.attr("data-param")) + { + $("") + .attr({ + name: $btn.attr("data-param"), + value: $btn.attr("data-value") + }) + .appendTo($form); + } + + $form.submit(); + + $("#merge-tags-menu").hide(); + }); + });'; + + craft()->templates->includeJs($js); + craft()->templates->includeCss('h3.merge-tags-intro { padding-top: 14px; }'); + + return craft()->templates->render('tagmanager/_mergeTrigger'); + } + + public function isDestructive() + { + return true; + } + + public function performAction(ElementCriteriaModel $criteria) + { + $mergeId = $this->getParams()->merge_id; + $elementIds = $criteria->ids(); + + foreach ($elementIds as $elementId) + { + if ($elementId != $mergeId) { + if (!craft()->elements->mergeElementsByIds($elementId, $mergeId)) { + $this->setMessage(Craft::t('An error occurred while merging tags.')); + return false; + } + } + } + + // Success! + $this->setMessage(Craft::t('Tags merged successfully.')); + return true; + } + + protected function defineParams() + { + return array( + 'merge_id' => array(AttributeType::Number, 'required' => true) + ); + } +} diff --git a/elementtypes/TagManagerElementType.php b/elementtypes/TagManagerElementType.php index aac2c89..8fb26fe 100644 --- a/elementtypes/TagManagerElementType.php +++ b/elementtypes/TagManagerElementType.php @@ -56,6 +56,10 @@ public function getAvailableActions($source = null) )); $actions[] = $deleteAction; + // Merge + $mergeAction = craft()->elements->getAction('TagManager_Merge'); + $actions[] = $mergeAction; + // Allow plugins to add additional actions $allPluginActions = craft()->plugins->call('addTagManagerActions', array($source), true); foreach ($allPluginActions as $pluginActions) { diff --git a/templates/_mergeTrigger.twig b/templates/_mergeTrigger.twig new file mode 100644 index 0000000..4f90677 --- /dev/null +++ b/templates/_mergeTrigger.twig @@ -0,0 +1,6 @@ + +