Add toggle button for reaction types in ACP
authormutec <mysterycode@mysterycode.de>
Mon, 14 Oct 2019 14:31:26 +0000 (16:31 +0200)
committerJoshua Rüsweg <ruesweg@woltlab.com>
Tue, 3 Dec 2019 12:22:58 +0000 (13:22 +0100)
This gives administrators a quick overview which reaction types are enabled and which are not.

Closes #3094

wcfsetup/install/files/acp/templates/reactionTypeList.tpl
wcfsetup/install/files/lib/data/reaction/type/ReactionTypeAction.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 0ae6214c168b1db91055953622d0f7a63fbf4bea..b125202ef0909482909a6be7848e983f8974a1b4 100644 (file)
@@ -12,6 +12,7 @@
                
                $(function() {
                        new WCF.Action.Delete('wcf\\data\\reaction\\type\\ReactionTypeAction', '.reactionTypeRow');
+                       new WCF.Action.Toggle('wcf\\data\\reaction\\type\\ReactionTypeAction', '.reactionTypeRow');
                });
        </script>
 {/if}
@@ -46,6 +47,7 @@
                                                
                                                <span class="statusDisplay sortableButtonContainer">
                                                        <span class="icon icon16 fa-arrows sortableNodeHandle"></span>
+                                                       <span class="jsOnly icon icon16 fa-{if $reactionType->isAssignable}check-{/if}square-o jsToggleButton jsTooltip pointer" title="{lang}wcf.acp.reactionType.is{if !$reactionType->isAssignable}Not{/if}Assignable{/lang}" data-disable-title="{lang}wcf.acp.reactionType.isAssignable{/lang}" data-enable-title="{lang}wcf.acp.reactionType.isNotAssignable{/lang}" data-object-id="{@$reactionType->reactionTypeID}"></span>
                                                        <a href="{link controller='ReactionTypeEdit' id=$reactionType->reactionTypeID}{/link}"><span title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip icon icon16 fa-pencil"></span></a>
                                                        <span title="{lang}wcf.global.button.delete{/lang}" class="jsDeleteButton pointer jsTooltip icon icon16 fa-times" data-object-id="{@$reactionType->reactionTypeID}" data-confirm-message-html="{lang __encode=true}wcf.acp.reactionType.delete.confirmMessage{/lang}"></span>
                                                        
index 3bdae6773ca02138ceb0ada36718a056d92435ca..2317ee042a8eeb8b56abef201380cbcabc7831c2 100644 (file)
@@ -2,6 +2,8 @@
 namespace wcf\data\reaction\type;
 use wcf\data\AbstractDatabaseObjectAction;
 use wcf\data\ISortableAction;
+use wcf\data\IToggleAction;
+use wcf\data\TDatabaseObjectToggle;
 use wcf\system\exception\PermissionDeniedException;
 use wcf\system\exception\UserInputException;
 use wcf\system\file\upload\UploadFile;
@@ -20,7 +22,9 @@ use wcf\system\WCF;
  * @method     ReactionTypeEditor[]            getObjects()
  * @method     ReactionTypeEditor              getSingleObject()
  */
-class ReactionTypeAction extends AbstractDatabaseObjectAction implements ISortableAction {
+class ReactionTypeAction extends AbstractDatabaseObjectAction implements ISortableAction, IToggleAction {
+       use TDatabaseObjectToggle;
+       
        /**
         * @inheritDoc
         */
@@ -222,4 +226,15 @@ class ReactionTypeAction extends AbstractDatabaseObjectAction implements ISortab
                
                return $returnValues;
        }
+       
+       /**
+        * @inheritDoc
+        */
+       public function toggle() {
+               foreach ($this->getObjects() as $object) {
+                       $object->update([
+                               'isAssignable' => $object->isAssignable ? 0 : 1
+                       ]);
+               }
+       }
 }
index 8f9ba28f8410850e3dedc67fa7e44ba972a084ce..f637a0d7a9f83f23f5f9b16ea54bd9b40d5d2bc0 100644 (file)
@@ -2599,8 +2599,9 @@ Kein Abschnitt darf leer sein und alle Abschnitten dürfen nur folgende Zeichen
                <item name="wcf.acp.reactionType.type"><![CDATA[Reaktions-Typ]]></item>
                <item name="wcf.acp.reactionType.image"><![CDATA[Reaktions-Datei]]></item>
                <item name="wcf.acp.reactionType.showOrder.description"><![CDATA[Der Reaktions-Typ wird nach dem ausgewählten Reaktions-Typ angezeigt.]]></item>
-               <item name="wcf.acp.reactionType.isAssignable"><![CDATA[Kann verwendet werden]]></item>
+               <item name="wcf.acp.reactionType.isAssignable"><![CDATA[Verwendung erlauben]]></item>
                <item name="wcf.acp.reactionType.isAssignable.description"><![CDATA[Wenn eine Reaktion nicht verwendet werden kann, können Benutzer nicht mit der Reaktion reagieren. Wurde auf einen Inhalt bereits mit der Reaktion reagiert, ist sie auch weiterhin für Benutzer sichtbar.]]></item>
+               <item name="wcf.acp.reactionType.isNotAssignable"><![CDATA[Verwendung verbieten]]></item>
        </category>
        <category name="wcf.acp.rebuildData">
                <item name="wcf.acp.rebuildData"><![CDATA[Anzeigen aktualisieren]]></item>
index b2fca935ed9c5a1afc119aa88f0e48f12b896b53..0424c19cdcfebcd486f02980511e1350424dc52d 100644 (file)
@@ -2527,8 +2527,9 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.reactionType.type"><![CDATA[Reaction Type]]></item>
                <item name="wcf.acp.reactionType.image"><![CDATA[Reaction File]]></item>
                <item name="wcf.acp.reactionType.showOrder.description"><![CDATA[The reaction type will be shown after the selected reaction type.]]></item>
-               <item name="wcf.acp.reactionType.isAssignable"><![CDATA[Can be assigend]]></item>
+               <item name="wcf.acp.reactionType.isAssignable"><![CDATA[Allow use]]></item>
                <item name="wcf.acp.reactionType.isAssignable.description"><![CDATA[If a reaction cannot be used, users cannot react with the reaction. If a content has already been reacted to with the reaction, it remains visible to users.]]></item>
+               <item name="wcf.acp.reactionType.isNotAssignable"><![CDATA[Disallow use]]></item>
        </category>
        <category name="wcf.acp.rebuildData">
                <item name="wcf.acp.rebuildData"><![CDATA[Rebuild Data]]></item>