<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>
<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>
<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}
* @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;
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);
});
var buttonDiscard = elBySel('.jsButtonCustomShowOrder');
if (buttonDiscard) buttonDiscard.addEventListener(WCF_CLICK_EVENT, this._discard.bind(this));
+
+ DomChangeListener.trigger();
},
/**
};
}
};
-});
\ No newline at end of file
+});
* @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 {
/**
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;
* @method BoxEditor[] getObjects()
* @method BoxEditor getSingleObject()
*/
-class BoxAction extends AbstractDatabaseObjectAction {
+class BoxAction extends AbstractDatabaseObjectAction implements IToggleAction {
+ use TDatabaseObjectToggle;
+
/**
* @inheritDoc
*/
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]
);
<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>
<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>
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
);