Add basic support to select more than one label per group label-picker-multiple
authorAlexander Ebert <ebert@woltlab.com>
Fri, 29 Sep 2023 12:11:03 +0000 (14:11 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Thu, 5 Oct 2023 15:56:37 +0000 (17:56 +0200)
wcfsetup/install/files/acp/templates/labelGroupAdd.tpl
wcfsetup/install/files/lib/acp/form/LabelGroupAddForm.class.php
wcfsetup/install/files/lib/acp/form/LabelGroupEditForm.class.php
wcfsetup/install/files/lib/data/label/group/LabelGroup.class.php
wcfsetup/install/files/lib/system/label/LabelPicker.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml
wcfsetup/setup/db/install.sql

index 27d81c790bdf7cb768e67b33ea81216f86d8d952..6ef2cbc58a4b74af541acc85367af97b5980006b 100644 (file)
                                        </dd>
                                </dl>
                                
+                               <dl>
+                                       <dt></dt>
+                                       <dd><label><input type="checkbox" name="multipleSelection" id="multipleSelection" value="1"{if $multipleSelection} checked{/if}> {lang}wcf.acp.label.group.multipleSelection{/lang}</label></dd>
+                               </dl>
+                               
                                <dl>
                                        <dt></dt>
                                        <dd><label><input type="checkbox" name="forceSelection" id="forceSelection" value="1"{if $labelForceSelection} checked{/if}> {lang}wcf.acp.label.group.forceSelection{/lang}</label></dd>
index 2e10bcef9b9f924fdcaf04267f38b3611c12cc8f..79249b6ff9f9774e71fa8ccf177f3d229baa09c0 100644 (file)
@@ -82,6 +82,12 @@ class LabelGroupAddForm extends AbstractForm
      */
     public $showOrder = 0;
 
+    /**
+     * Allow the selection of multiple labels of the same group.
+     * @since 6.1
+     */
+    public bool $multipleSelection = false;
+
     /**
      * @inheritDoc
      */
@@ -119,6 +125,9 @@ class LabelGroupAddForm extends AbstractForm
         if (isset($_POST['showOrder'])) {
             $this->showOrder = \intval($_POST['showOrder']);
         }
+        if (isset($_POST['multipleSelection'])) {
+            $this->multipleSelection = true;
+        }
     }
 
     /**
@@ -181,6 +190,7 @@ class LabelGroupAddForm extends AbstractForm
                 'groupName' => $this->groupName,
                 'groupDescription' => $this->groupDescription,
                 'showOrder' => $this->showOrder,
+                'multipleSelection' => $this->multipleSelection ? 1 : 0,
             ]),
         ]);
         $returnValues = $this->objectAction->executeAction();
@@ -214,7 +224,7 @@ class LabelGroupAddForm extends AbstractForm
         $this->saved();
 
         // reset values
-        $this->forceSelection = false;
+        $this->forceSelection = $this->multipleSelection = false;
         $this->groupName = $this->groupDescription = '';
         $this->objectTypes = [];
         $this->showOrder = 0;
@@ -250,6 +260,7 @@ class LabelGroupAddForm extends AbstractForm
             'labelObjectTypeContainers' => $this->labelObjectTypeContainers,
             'objectTypeID' => $this->objectTypeID,
             'showOrder' => $this->showOrder,
+            'multipleSelection' => $this->multipleSelection,
         ]);
     }
 
index 821a8dcfe39472ae36b9d82b0a476de58a66c79f..9a0581b3a6b396dac4f18bacff92a78f8cf8271c 100644 (file)
@@ -82,6 +82,7 @@ class LabelGroupEditForm extends LabelGroupAddForm
                     'groupName' => $this->groupName,
                     'groupDescription' => $this->groupDescription,
                     'showOrder' => $this->showOrder,
+                    'multipleSelection' => $this->multipleSelection ? 1 : 0,
                 ]),
             ]
         );
@@ -118,6 +119,7 @@ class LabelGroupEditForm extends LabelGroupAddForm
             $this->groupName = $this->group->groupName;
             $this->groupDescription = $this->group->groupDescription;
             $this->showOrder = $this->group->showOrder;
+            $this->multipleSelection = !!$this->multipleSelection;
         }
     }
 
index 8432d8823895839b73f717d4e23d15d68b9eadc1..84751652dd05d6b0505f948e3021814a5b25fd0f 100644 (file)
@@ -18,6 +18,7 @@ use wcf\system\WCF;
  * @property-read   string $groupDescription   description of the label group (only shown in ACP)
  * @property-read   int $forceSelection     is `1` if a label in the label group has to be selected when creating an object for which the label group is available, otherwise `0`
  * @property-read   int $showOrder      position of the label group in relation to the other label groups
+ * @property-read int $multipleSelection is `1` if more than one label may be selected, otherwise `0`
  */
 class LabelGroup extends DatabaseObject implements IRouteController
 {
index 75ebcfc19756ff62bc8c59cce160b5215ee3076b..e86ca4982a871c732a080bd35d100fb15e6eb704 100644 (file)
@@ -31,6 +31,7 @@ final class LabelPicker
                     id="%s"
                     title="%s"
                     labels="%s"
+                    %s
                     data-group-id="%d"
                 ></woltlab-core-label-picker>
             EOT,
@@ -38,6 +39,7 @@ final class LabelPicker
             $this->getId(),
             $this->labelGroup->getTitle(),
             StringUtil::encodeHTML(JSON::encode($labels)),
+            $this->labelGroup->multipleSelection ? 'multiple' : '',
             $this->labelGroup->groupID,
         );
     }
index 7d493eca2da265273827b23096f26ae6de56af8e..9292d1d07ecd74815671f998cbe861156cbe6ac2 100644 (file)
@@ -988,6 +988,7 @@ Sie erreichen das Fehlerprotokoll unter: {link controller='ExceptionLogView' isE
                <item name="wcf.acp.label.group.edit"><![CDATA[Labelgruppe bearbeiten]]></item>
                <item name="wcf.acp.label.group.error.invalid"><![CDATA[Die gewählte Labelgruppe ist ungültig.]]></item>
                <item name="wcf.acp.label.group.forceSelection"><![CDATA[Label aus dieser Gruppe muss zwingend ausgewählt werden]]></item>
+               <item name="wcf.acp.label.group.multipleSelection"><![CDATA[Erlaube die Auswahl von mehr als einem Label aus dieser Gruppe]]></item>
                <item name="wcf.acp.label.group.list"><![CDATA[Labelgruppen]]></item>
                <item name="wcf.acp.label.group.permanentSelection"><![CDATA[Die ausgewählte Labelgruppe kann nachträglich nicht mehr verändert werden.]]></item>
                <item name="wcf.acp.label.label"><![CDATA[Label]]></item>
index 202fe0578bf27fbdbe681d981e1cbaa65b097469..a59ac933d4226fb0cee1413aebd6ff2fde56a282 100644 (file)
@@ -966,6 +966,7 @@ You can access the error log at: {link controller='ExceptionLogView' isEmail=tru
                <item name="wcf.acp.label.group.edit"><![CDATA[Edit Label Group]]></item>
                <item name="wcf.acp.label.group.error.invalid"><![CDATA[The selected label group is invalid.]]></item>
                <item name="wcf.acp.label.group.forceSelection"><![CDATA[Force selection of a label]]></item>
+               <item name="wcf.acp.label.group.multipleSelection"><![CDATA[Allow more than one label of this group to be selected]]></item>
                <item name="wcf.acp.label.group.list"><![CDATA[Label Groups]]></item>
                <item name="wcf.acp.label.group.permanentSelection"><![CDATA[The selected label group cannot be modified and is permanent for this label.]]></item>
                <item name="wcf.acp.label.label"><![CDATA[Label]]></item>
index 80631ae6dfd3f856bc06c00dfd7f3c07fc30c5ca..a87f7e83d16df215ef54d6dac0010f5bf5ac6b9f 100644 (file)
@@ -617,7 +617,8 @@ CREATE TABLE wcf1_label_group (
        groupName VARCHAR(80) NOT NULL,
        groupDescription VARCHAR(255) NOT NULL DEFAULT '',
        forceSelection TINYINT(1) NOT NULL DEFAULT 0,
-       showOrder INT(10) NOT NULL DEFAULT 0
+       showOrder INT(10) NOT NULL DEFAULT 0,
+       multipleSelection TINYINT(1) NOT NULL DEFAULT 0
 );
 
 DROP TABLE IF EXISTS wcf1_label_group_to_object;