Merge branch 'next' of github.com:WoltLab/WCF into next
authorAlexander Ebert <ebert@woltlab.com>
Sun, 18 Nov 2018 14:30:27 +0000 (15:30 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Sun, 18 Nov 2018 14:30:27 +0000 (15:30 +0100)
wcfsetup/install/files/acp/templates/boxList.tpl
wcfsetup/install/files/acp/templates/pageAdd.tpl
wcfsetup/install/files/acp/templates/pageBoxOrder.tpl
wcfsetup/install/files/js/WoltLabSuite/Core/Acp/Ui/Page/BoxOrder.js
wcfsetup/install/files/lib/data/box/Box.class.php
wcfsetup/install/files/lib/data/box/BoxAction.class.php
wcfsetup/install/files/lib/system/box/BoxHandler.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml
wcfsetup/setup/db/install.sql

index 94307c98799f36a4e539f9c66cee431e1f6f9185..c129e243db3891855f94bf0b0dfede20f3b1caf3 100644 (file)
@@ -3,6 +3,7 @@
 <script data-relocate="true">
        $(function() {
                new WCF.Action.Delete('wcf\\data\\box\\BoxAction', '.jsBoxRow');
+               new WCF.Action.Toggle('wcf\\data\\box\\BoxAction', '.jsBoxRow');
        });
 </script>
 
                                {foreach from=$objects item=box}
                                        <tr class="jsBoxRow">
                                                <td class="columnIcon">
+                                                       <span class="icon icon24 fa-{if !$box->isDisabled}check-{/if}square-o jsToggleButton jsTooltip pointer" title="{lang}wcf.global.button.{if !$box->isDisabled}disable{else}enable{/if}{/lang}" data-object-id="{@$box->boxID}"></span>
                                                        <a href="{link controller='BoxEdit' id=$box->boxID}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip"><span class="icon icon24 fa-pencil"></span></a>
                                                        {if $box->canDelete()}
                                                                <span class="icon icon24 fa-times jsDeleteButton jsTooltip pointer" title="{lang}wcf.global.button.delete{/lang}" data-object-id="{@$box->boxID}" data-confirm-message-html="{lang __encode=true}wcf.acp.box.delete.confirmMessage{/lang}"></span>
index 824b61d55d50a5737a5e4e2daff698d2315d097f..caed9ba3bccb53e54701140df9ca0c1aa931ec94 100644 (file)
                                                <ul class="scrollableCheckboxList" id="boxVisibilitySettings">
                                                        {foreach from=$availableBoxes item=availableBox}
                                                                <li>
-                                                                       <label><input type="checkbox" name="boxIDs[]" value="{@$availableBox->boxID}"{if $availableBox->boxID|in_array:$boxIDs} checked{/if}{if $availableBox->identifier == 'com.woltlab.wcf.MainMenu'} disabled{/if}> {$availableBox->name}</label>
+                                                                       <label><input type="checkbox" name="boxIDs[]" value="{@$availableBox->boxID}"{if $availableBox->boxID|in_array:$boxIDs} checked{/if}{if $availableBox->identifier == 'com.woltlab.wcf.MainMenu'} disabled{/if}> {$availableBox->name}{if $availableBox->isDisabled} <span class="icon icon16 fa-exclamation-triangle red jsTooltip" title="{lang}wcf.acp.box.isDisabled{/lang}"></span>{/if}</label>
                                                                </li>
                                                        {/foreach}
                                                </ul>
index 683507f95aa348cb39f92d2561b7fa7a9a8314ab..e223de7cd418246b969769058a13bc6a0e7f2b0b 100644 (file)
 <script data-relocate="true">
        require(['Dictionary', 'Language', 'WoltLabSuite/Core/Acp/Ui/Page/BoxOrder'], function (Dictionary, Language, AcpUiPageBoxOrder) {
                Language.addObject({
+                       'wcf.acp.box.isDisabled': '{lang}wcf.acp.box.isDisabled{/lang}',
                        'wcf.acp.page.boxOrder.discard.confirmMessage': '{lang}wcf.acp.page.boxOrder.discard.confirmMessage{/lang}'
                });
                
                var boxes = new Dictionary();
                {foreach from=$boxes key=position item=boxData}
                        {if $position != 'mainMenu'}
-                               boxes.set('{$position}', [{implode from=$boxData item=box}{ boxID: {@$box->boxID}, name: '{$box->name|encodeJS}' }{/implode}]);
+                               boxes.set('{$position}', [{implode from=$boxData item=box}{ boxID: {@$box->boxID}, name: '{$box->name|encodeJS}', isDisabled: {if $box->isDisabled}true{else}false{/if} }{/implode}]);
                        {/if}
                {/foreach}
                
index cfa93daa1b2060a0a649f08d43f84051a5158db5..28083f857dc3516c1c2107cfdd9a5734204b8e7f 100644 (file)
@@ -6,7 +6,7 @@
  * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
  * @module      WoltLabSuite/Core/Acp/Ui/Page/BoxOrder
  */
-define(['Ajax', 'Language', 'Ui/Confirmation', 'Ui/Notification'], function (Ajax, Language, UiConfirmation, UiNotification) {
+define(['Ajax', 'Language', 'Dom/ChangeListener', 'Ui/Confirmation', 'Ui/Notification'], function (Ajax, Language, DomChangeListener, UiConfirmation, UiNotification) {
        "use strict";
        
        var _pageId = 0;
@@ -30,7 +30,13 @@ define(['Ajax', 'Language', 'Ui/Confirmation', 'Ui/Notification'], function (Aja
                                boxData.forEach(function(box) {
                                        var item = elCreate('li');
                                        elData(item, 'box-id', box.boxID);
-                                       item.innerHTML = box.name;
+                                       
+                                       var icon = '';
+                                       if (box.isDisabled) {
+                                               icon = ' <span class="icon icon16 fa-exclamation-triangle red jsTooltip" title="' + Language.get('wcf.acp.box.isDisabled') + '"></span>';
+                                       }
+                                       
+                                       item.innerHTML = box.name + icon;
                                        
                                        container.appendChild(item);
                                });
@@ -49,6 +55,8 @@ define(['Ajax', 'Language', 'Ui/Confirmation', 'Ui/Notification'], function (Aja
                        
                        var buttonDiscard = elBySel('.jsButtonCustomShowOrder');
                        if (buttonDiscard) buttonDiscard.addEventListener(WCF_CLICK_EVENT, this._discard.bind(this));
+                       
+                       DomChangeListener.trigger();
                },
                
                /**
@@ -124,4 +132,4 @@ define(['Ajax', 'Language', 'Ui/Confirmation', 'Ui/Notification'], function (Aja
                        };
                }
        };
-});
\ No newline at end of file
+});
index 6482616700d914a0dc83074db959dd683a054456..856f41e5c752c269d0e9217da39123bf19b8560d 100644 (file)
@@ -49,6 +49,7 @@ use wcf\system\WCF;
  * @property-read      integer|null    $limit                  number of objects shown in the box for `AbstractDatabaseObjectListBoxController` controllers or `null` otherwise
  * @property-read      string|null     $sortField              sort field of the objects shown in the box for `AbstractDatabaseObjectListBoxController` controllers or `null` otherwise
  * @property-read      string|null     $sortOrder              sort order of the objects shown in the box for `AbstractDatabaseObjectListBoxController` controllers or `null` otherwise
+ * @property-read      integer         $isDisabled             is `1` if the box is disabled and thus is not displayed, otherwise `0`
  */
 class Box extends DatabaseObject {
        /**
index 4e3312f7d612b55f01fecd5a1a8234b5dfa2dc4b..5fd2d27ac5fa8d25a657ba0d37a13180826419cd 100644 (file)
@@ -2,9 +2,11 @@
 namespace wcf\data\box;
 use wcf\data\box\content\BoxContent;
 use wcf\data\box\content\BoxContentEditor;
+use wcf\data\IToggleAction;
 use wcf\data\object\type\ObjectType;
 use wcf\data\object\type\ObjectTypeCache;
 use wcf\data\AbstractDatabaseObjectAction;
+use wcf\data\TDatabaseObjectToggle;
 use wcf\system\box\IConditionBoxController;
 use wcf\system\exception\PermissionDeniedException;
 use wcf\system\exception\UserInputException;
@@ -25,7 +27,9 @@ use wcf\system\WCF;
  * @method     BoxEditor[]     getObjects()
  * @method     BoxEditor       getSingleObject()
  */
-class BoxAction extends AbstractDatabaseObjectAction {
+class BoxAction extends AbstractDatabaseObjectAction implements IToggleAction {
+       use TDatabaseObjectToggle;
+       
        /**
         * @inheritDoc
         */
index a7ecf83bbd02a218c395393c49a600e66b70d8aa..1efaf6b511e0568cfaafd7f0209cf6894e08d848 100644 (file)
@@ -223,20 +223,23 @@ class BoxHandler extends SingletonFactory {
        public static function loadBoxes($pageID, $forDisplay) {
                // load box layout for active page
                $boxList = new BoxList();
+               if ($forDisplay) $boxList->getConditionBuilder()->add("box.isDisabled = ?", [0]);
                if ($pageID) {
                        $boxList->getConditionBuilder()->add('
-                               (box.visibleEverywhere = ?
-                               AND boxID NOT IN (
-                                       SELECT  boxID
-                                       FROM    wcf'.WCF_N.'_box_to_page
-                                       WHERE   pageID = ?
-                                               AND visible = ?
-                               )) OR
-                               boxID IN (
-                                       SELECT  boxID
-                                       FROM    wcf'.WCF_N.'_box_to_page
-                                       WHERE   pageID = ?
-                                               AND visible = ?
+                               (
+                                       (box.visibleEverywhere = ?
+                                       AND boxID NOT IN (
+                                               SELECT  boxID
+                                               FROM    wcf'.WCF_N.'_box_to_page
+                                               WHERE   pageID = ?
+                                                       AND visible = ?
+                                       )) OR
+                                       boxID IN (
+                                               SELECT  boxID
+                                               FROM    wcf'.WCF_N.'_box_to_page
+                                               WHERE   pageID = ?
+                                                       AND visible = ?
+                                       )
                                )',
                                [1, $pageID, 0, $pageID, 1]
                        );
index 88807b3be408b1c0a10566d4ded49d29491602ca..618b0b8bf212aa25f1c9d9e525a03649bd881662 100644 (file)
                <item name="wcf.acp.box.linkPageObjectID.error.invalid"><![CDATA[Die eingetragene ID ist ungültig.]]></item>
                <item name="wcf.acp.box.lastVersion"><![CDATA[Es gibt <a href="{link controller='VersionTrackerList' objectType='com.woltlab.wcf.box' objectID=$box->boxID}{/link}">vorherige Versionen</a> dieser Box, die letzte Änderung erfolgte durch <a href="{link controller='UserEdit' id=$lastVersion->userID}{/link}">{$lastVersion->username}</a> ({@$lastVersion->time|time}).]]></item>
                <item name="wcf.acp.box.originIsNotSystem"><![CDATA[Eigene Boxen]]></item>
+               <item name="wcf.acp.box.isDisabled"><![CDATA[Box ist deaktiviert]]></item>
        </category>
        <category name="wcf.acp.cache">
                <item name="wcf.acp.cache.button.clear"><![CDATA[Cache leeren]]></item>
index 764f4c0f0b0558b2f357415c37d6e4675c66ddeb..ff671477b30aebf001ecf894df99704aaed357a9 100644 (file)
                <item name="wcf.acp.box.linkPageObjectID.error.invalid"><![CDATA[ID is invalid.]]></item>
                <item name="wcf.acp.box.lastVersion"><![CDATA[There are <a href="{link controller='VersionTrackerList' objectType='com.woltlab.wcf.box' objectID=$box->boxID}{/link}">previous versions</a> of this box, the last change was by <a href="{link controller='UserEdit' id=$lastVersion->userID}{/link}">{$lastVersion->username}</a> ({@$lastVersion->time|time}).]]></item>
                <item name="wcf.acp.box.originIsNotSystem"><![CDATA[Custom boxes only]]></item>
+               <item name="wcf.acp.box.isDisabled"><![CDATA[Box is disabled]]></item>
        </category>
        <category name="wcf.acp.cache">
                <item name="wcf.acp.cache.button.clear"><![CDATA[Clear Cache]]></item>
index 7b44e8f4907cae292b07a47502021bba2a78ea95..fc2aaab3005e5354f170d3a881ddca6da87b9030 100644 (file)
@@ -307,6 +307,7 @@ CREATE TABLE wcf1_box (
        linkPageID INT(10),
        linkPageObjectID INT(10) NOT NULL DEFAULT 0,
        externalURL VARCHAR(255) NOT NULL DEFAULT '',
+       isDisabled TINYINT(1) NOT NULL DEFAULT 0,
        additionalData TEXT
 );