<instruction type="userOption" />
<instruction type="bbcode" />
<instruction type="smiley" />
- <instruction type="pageMenu" />
<instruction type="sitemap" />
<instruction type="dashboardBox" />
<instruction type="userProfileMenu" />
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/maelstrom/pageMenu.xsd">
- <import>
- <pagemenuitem name="wcf.user.dashboard">
- <controller><![CDATA[wcf\page\DashboardPage]]></controller>
- <position>header</position>
- <options>module_dashboard_page</options>
- </pagemenuitem>
-
- <pagemenuitem name="wcf.user.members">
- <controller><![CDATA[wcf\page\MembersListPage]]></controller>
- <position>header</position>
- <permissions>user.profile.canViewMembersList</permissions>
- <options>module_members_list</options>
- </pagemenuitem>
-
- <pagemenuitem name="wcf.user.recentActivity">
- <controller><![CDATA[wcf\page\RecentActivityListPage]]></controller>
- <position>header</position>
- <parent>wcf.user.members</parent>
- </pagemenuitem>
-
- <pagemenuitem name="wcf.user.usersOnline">
- <controller><![CDATA[wcf\page\UsersOnlineListPage]]></controller>
- <position>header</position>
- <parent>wcf.user.members</parent>
- <permissions>user.profile.canViewUsersOnlineList</permissions>
- <options>module_users_online</options>
- </pagemenuitem>
-
- <pagemenuitem name="wcf.user.team">
- <controller><![CDATA[wcf\page\TeamPage]]></controller>
- <position>header</position>
- <parent>wcf.user.members</parent>
- <permissions>user.profile.canViewMembersList</permissions>
- <options>module_team_page</options>
- </pagemenuitem>
-
- <pagemenuitem name="wcf.user.search">
- <controller><![CDATA[wcf\form\UserSearchForm]]></controller>
- <position>header</position>
- <parent>wcf.user.members</parent>
- <permissions>user.profile.canViewMembersList</permissions>
- <options>module_members_list</options>
- </pagemenuitem>
-
- <pagemenuitem name="wcf.page.privacyPolicy">
- <controller><![CDATA[wcf\page\PrivacyPolicyPage]]></controller>
- <position>footer</position>
- <options>module_privacy_policy_page</options>
- </pagemenuitem>
- </import>
-</data>
\ No newline at end of file
+++ /dev/null
-{include file='header' pageTitle='wcf.acp.pageMenu.'|concat:$action}
-
-<script data-relocate="true">
- //<![CDATA[
- $(function() {
- var $menuPosition = $('#menuPosition');
- var $parentMenuItemContainer = $('#parentMenuItemContainer');
- var $isInternalLink = $('input[name=isInternalLink]').filter('[value=1]');
- var $menuItemControllerContainer = $('#menuItemControllerContainer');
- var $menuItemLinkContainer = $('#menuItemLinkContainer');
- var $menuItemParametersContainer = $('#menuItemParametersContainer');
- var $menuItemPageContainer = $('#menuItemPageContainer');
- var $menuItemPage = $('#menuItemPage');
-
- function handleMenuPosition() {
- if ($menuPosition.val() === 'header') {
- $parentMenuItemContainer.show();
- }
- else {
- $parentMenuItemContainer.hide();
- }
- }
-
- function handleIsInternalLink() {
- if ($isInternalLink.is(':checked')) {
- $menuItemPageContainer.show();
- $menuItemControllerContainer.show();
- $menuItemParametersContainer.show();
- $menuItemLinkContainer.hide();
- }
- else {
- $menuItemPageContainer.hide();
- $menuItemControllerContainer.hide();
- $menuItemParametersContainer.hide();
- $menuItemLinkContainer.show();
- }
- }
-
- function handleMenuPage() {
- if ($menuItemPage.val() != '0') {
- $menuItemControllerContainer.addClass('disabled');
- $menuItemControllerContainer.find('input').disable();
- }
- else {
- $menuItemControllerContainer.removeClass('disabled');
- $menuItemControllerContainer.find('input').enable();
- }
- }
-
- $menuPosition.change(handleMenuPosition);
- $('input[name=isInternalLink]').change(handleIsInternalLink);
- $menuItemPage.change(handleMenuPage);
-
- handleMenuPosition();
- handleIsInternalLink();
- handleMenuPage();
- });
- //]]>
-</script>
-
-<header class="contentHeader">
- <h1 class="contentTitle">{lang}wcf.acp.pageMenu.{$action}{/lang}</h1>
-</header>
-
-{include file='formError'}
-
-{if $success|isset}
- <p class="success">{lang}wcf.global.success.{$action}{/lang}</p>
-{/if}
-
-<div class="contentNavigation">
- <nav>
- <ul>
- <li><a href="{link controller='PageMenuItemList'}{/link}" class="button"><span class="icon icon16 fa-list"></span> <span>{lang}wcf.acp.pageMenu.list{/lang}</span></a></li>
-
- {event name='contentNavigationButtons'}
- </ul>
- </nav>
-</div>
-
-<form method="post" action="{if $action == 'add'}{link controller='PageMenuItemAdd'}{/link}{else}{link controller='PageMenuItemEdit' id=$menuItem->menuItemID}{/link}{/if}">
- <div class="section">
- <dl{if $errorField == 'menuPosition'} class="formError"{/if}>
- <dt><label for="menuPosition">{lang}wcf.acp.pageMenu.menuPosition{/lang}</label></dt>
- <dd>
- <select name="menuPosition" id="menuPosition">
- <option value="header"{if $menuPosition == 'header'} selected="selected"{/if}>{lang}wcf.acp.pageMenu.menuPosition.header{/lang}</option>
- <option value="footer"{if $menuPosition == 'footer'} selected="selected"{/if}>{lang}wcf.acp.pageMenu.menuPosition.footer{/lang}</option>
- </select>
- {if $errorField == 'menuPosition'}
- <small class="innerError">
- {if $errorType == 'empty'}
- {lang}wcf.global.form.error.empty{/lang}
- {else}
- {lang}wcf.acp.pageMenu.menuPosition.error.{$errorType}{/lang}
- {/if}
- </small>
- {/if}
- </dd>
- </dl>
-
- <dl id="parentMenuItemContainer"{if $errorField == 'parentMenuItem'} class="formError"{/if}>
- <dt><label for="parentMenuItem">{lang}wcf.acp.pageMenu.parentMenuItem{/lang}</label></dt>
- <dd>
- <select name="parentMenuItem" id="parentMenuItem">
- <option value=""{if $parentMenuItem == ''} selected="selected"{/if}>{lang}wcf.global.noSelection{/lang}</option>
- {foreach from=$availableParentMenuItems item=availableParentMenuItem}
- <option value="{$availableParentMenuItem->menuItem}"{if $parentMenuItem == $availableParentMenuItem->menuItem} selected="selected"{/if}>{$availableParentMenuItem}</option>
- {/foreach}
- </select>
- {if $errorField == 'parentMenuItem'}
- <small class="innerError">
- {if $errorType == 'empty'}
- {lang}wcf.global.form.error.empty{/lang}
- {else}
- {lang}wcf.acp.pageMenu.parentMenuItem.error.{$errorType}{/lang}
- {/if}
- </small>
- {/if}
- </dd>
- </dl>
-
- <dl{if $errorField == 'pageMenuItem'} class="formError"{/if}>
- <dt><label for="pageMenuItem">{lang}wcf.acp.pageMenu.pageMenuItem{/lang}</label></dt>
- <dd>
- <input type="text" name="pageMenuItem" id="pageMenuItem" value="{$i18nPlainValues['pageMenuItem']}" class="long" required="required" />
- {if $errorField == 'pageMenuItem'}
- <small class="innerError">
- {if $errorType == 'multilingual'}
- {lang}wcf.global.form.error.multilingual{/lang}
- {else}
- {lang}wcf.acp.pageMenu.pageMenuItem.error.{$errorType}{/lang}
- {/if}
- </small>
- {/if}
-
- {include file='multipleLanguageInputJavascript' elementIdentifier='pageMenuItem' forceSelection=true}
- </dd>
- </dl>
-
- {event name='dataFields'}
- </div>
-
- <section class="section">
- <h2 class="sectionTitle">{lang}wcf.acp.pageMenu.link{/lang}</h2>
-
- <dl>
- <dt></dt>
- <dd class="floated">
- <label><input type="radio" name="isInternalLink" value="1"{if $isInternalLink} checked="checked"{/if} /> {lang}wcf.acp.pageMenu.link.internal{/lang}</label>
- <label><input type="radio" name="isInternalLink" value="0"{if !$isInternalLink} checked="checked"{/if} /> {lang}wcf.acp.pageMenu.link.external{/lang}</label>
- </dd>
- </dl>
-
- <dl id="menuItemPageContainer"{if $errorField == 'menuItemPage'} class="formError"{/if}>
- <dt><label for="menuItemPage">{lang}wcf.acp.pageMenu.menuItemPage{/lang}</label></dt>
- <dd>
- <select name="menuItemPage" id="menuItemPage">
- <option value="0">{lang}wcf.global.noSelection{/lang}</option>
- {htmlOptions options=$pages selected=$menuItemPage}
- </select>
- {if $errorField == 'menuItemPage'}
- <small class="innerError">
- {if $errorType == 'empty'}
- {lang}wcf.global.form.error.empty{/lang}
- {elseif $errorType == 'noValidSelection'}
- {lang}wcf.global.form.error.noValidSelection{/lang}
- {else}
- {lang}wcf.acp.pageMenu.menuItemPage.error.{$errorType}{/lang}
- {/if}
- </small>
- {/if}
- <small>{lang}wcf.acp.pageMenu.menuItemPage.description{/lang}</small>
- </dd>
- </dl>
-
- <dl id="menuItemControllerContainer"{if $errorField == 'menuItemController'} class="formError"{/if}>
- <dt><label for="menuItemController">{lang}wcf.acp.pageMenu.menuItemController{/lang}</label></dt>
- <dd>
- <input type="text" name="menuItemController" id="menuItemController" value="{if !$pages[$menuItemPage]|isset}{$menuItemController}{/if}" class="long" />
- {if $errorField == 'menuItemController'}
- <small class="innerError">
- {if $errorType == 'empty'}
- {lang}wcf.global.form.error.empty{/lang}
- {else}
- {lang}wcf.acp.pageMenu.menuItemController.error.{$errorType}{/lang}
- {/if}
- </small>
- {/if}
- <small>{lang}wcf.acp.pageMenu.menuItemController.description{/lang}</small>
- </dd>
- </dl>
-
- <dl id="menuItemParametersContainer"{if $errorField == 'menuItemParameters'} class="formError"{/if}>
- <dt><label for="menuItemParameters">{lang}wcf.acp.pageMenu.menuItemParameters{/lang}</label></dt>
- <dd>
- <input type="text" name="menuItemParameters" id="menuItemParameters" value="{$menuItemParameters}" class="long" />
- {if $errorField == 'menuItemParameters'}
- <small class="innerError">
- {if $errorType == 'empty'}
- {lang}wcf.global.form.error.empty{/lang}
- {else}
- {lang}wcf.acp.pageMenu.menuItemParameters.error.{$errorType}{/lang}
- {/if}
- </small>
- {/if}
- </dd>
- </dl>
-
- <dl id="menuItemLinkContainer"{if $errorField == 'menuItemLink'} class="formError"{/if}>
- <dt><label for="menuItemLink">{lang}wcf.acp.pageMenu.menuItemLink{/lang}</label></dt>
- <dd>
- <input type="text" name="menuItemLink" id="menuItemLink" value="{$menuItemLink}" class="long" />
- {if $errorField == 'menuItemLink'}
- <small class="innerError">
- {if $errorType == 'empty'}
- {lang}wcf.global.form.error.empty{/lang}
- {else}
- {lang}wcf.acp.pageMenu.menuItemLink.error.{$errorType}{/lang}
- {/if}
- </small>
- {/if}
-
- {include file='multipleLanguageInputJavascript' elementIdentifier='menuItemLink' forceSelection=false}
- </dd>
- </dl>
-
- {event name='linkFields'}
- </section>
-
- <section class="section">
- <h2 class="sectionTitle">{lang}wcf.acp.pageMenu.advanced{/lang}</h2>
-
- <dl>
- <dt><label for="showOrder">{lang}wcf.acp.pageMenu.showOrder{/lang}</label></dt>
- <dd>
- <input type="number" name="showOrder" id="showOrder" value="{@$showOrder}" class="tiny" min="0" />
- </dd>
- </dl>
-
- {if $action == 'add' || !$menuItem->isLandingPage}
- <dl>
- <dt></dt>
- <dd>
- <label><input type="checkbox" name="isDisabled" id="isDisabled" value="1"{if $isDisabled} checked="checked"{/if} /> <span>{lang}wcf.acp.pageMenu.isDisabled{/lang}</span></label>
- </dd>
- </dl>
- {/if}
-
- {event name='advancedFields'}
- </section>
-
- {event name='sections'}
-
- <div class="formSubmit">
- <input type="submit" value="{lang}wcf.global.button.submit{/lang}" />
- {@SECURITY_TOKEN_INPUT_TAG}
- </div>
-</form>
-
-{include file='footer'}
+++ /dev/null
-{include file='header' pageTitle='wcf.acp.pageMenu.list'}
-
-<script data-relocate="true">
- //<![CDATA[
- $(function() {
- new WCF.Action.Delete('wcf\\data\\page\\menu\\item\\PageMenuItemAction', '.sortableNode', '> .sortableNodeLabel .jsDeleteButton');
- new WCF.Action.Toggle('wcf\\data\\page\\menu\\item\\PageMenuItemAction', '.sortableNode', '> .sortableNodeLabel .jsToggleButton');
-
- {if $headerItems|count}
- new WCF.Sortable.List('pageMenuItemHeaderList', 'wcf\\data\\page\\menu\\item\\PageMenuItemAction', undefined, { protectRoot: true }, false, { menuPosition: 'header' });
- {/if}
- {if $footerItems|count}
- new WCF.Sortable.List('pageMenuItemFooterList', 'wcf\\data\\page\\menu\\item\\PageMenuItemAction', undefined, { }, true, { menuPosition: 'footer' });
- {/if}
- });
- //]]>
-</script>
-
-<header class="contentHeader">
- <h1 class="contentTitle">{lang}wcf.acp.pageMenu.list{/lang}</h1>
-</header>
-
-<p class="info">{lang}wcf.acp.pageMenu.landingPage.description{/lang}</p>
-
-<div class="contentNavigation">
- <nav>
- <ul>
- <li><a href="{link controller='PageMenuItemAdd'}{/link}" class="button"><span class="icon icon16 fa-plus"></span> <span>{lang}wcf.acp.pageMenu.add{/lang}</span></a></li>
-
- {event name='contentNavigationButtonsTop'}
- </ul>
- </nav>
-</div>
-
-{hascontent}
- <section class="section">
- <h2 class="sectionTitle">{lang}wcf.acp.pageMenu.header{/lang}</h2>
-
- <div id="pageMenuItemHeaderList" class="sortableListContainer">
- <ol class="sortableList" data-object-id="0">
- {content}
- {foreach from=$headerItems item=menuItem}
- <li class="sortableNode" data-object-id="{@$menuItem->menuItemID}">
- <span class="sortableNodeLabel">
- <a href="{link controller='PageMenuItemEdit' id=$menuItem->menuItemID}{/link}">{lang}{$menuItem->menuItem}{/lang}</a>
- <span class="statusDisplay sortableButtonContainer">
- {if $menuItem->canDisable()}
- <span class="icon icon16 fa-{if !$menuItem->isDisabled}check-{/if}square-o jsToggleButton jsTooltip pointer" title="{lang}wcf.global.button.{if $menuItem->isDisabled}enable{else}disable{/if}{/lang}" data-object-id="{@$menuItem->menuItemID}"></span>
- {else}
- <span class="icon icon16 fa-{if !$menuItem->isDisabled}check-{/if}square-o disabled" title="{lang}wcf.global.button.{if $menuItem->isDisabled}enable{else}disable{/if}{/lang}"></span>
- {/if}
- <a href="{link controller='PageMenuItemEdit' id=$menuItem->menuItemID}{/link}" class="jsTooltip" title="{lang}wcf.global.button.edit{/lang}"><span class="icon icon16 fa-pencil"></span></a>
- {if $menuItem->canDelete()}
- <span class="icon icon16 fa-times jsDeleteButton jsTooltip pointer" title="{lang}wcf.global.button.delete{/lang}" data-object-id="{@$menuItem->menuItemID}" data-confirm-message="{lang __menuItem=$menuItem}wcf.acp.pageMenu.delete.sure{/lang}"></span>
- {else}
- <span class="icon icon16 fa-times disabled" title="{lang}wcf.global.button.delete{/lang}"></span>
- {/if}
-
- {event name='headerItemButtons'}
- </span>
- </span>
- {if $menuItem|count}
- <ol class="sortableList" data-object-id="{@$menuItem->menuItemID}">
- {foreach from=$menuItem item=childMenuItem}
- <li class="sortableNode sortableNoNesting" data-object-id="{@$childMenuItem->menuItemID}">
- <span class="sortableNodeLabel">
- <a href="{link controller='PageMenuItemEdit' id=$childMenuItem->menuItemID}{/link}">{lang}{$childMenuItem->menuItem}{/lang}</a>
- <span class="statusDisplay sortableButtonContainer">
- <span class="icon icon16 fa-{if !$childMenuItem->isDisabled}check-{/if}square-o jsToggleButton jsTooltip pointer" title="{lang}wcf.global.button.{if $childMenuItem->isDisabled}enable{else}disable{/if}{/lang}" data-object-id="{@$childMenuItem->menuItemID}"></span>
- <a href="{link controller='PageMenuItemEdit' id=$childMenuItem->menuItemID}{/link}" class="jsTooltip" title="{lang}wcf.global.button.edit{/lang}"><span class="icon icon16 fa-pencil"></span></a>
- {if $childMenuItem->canDelete()}
- <span class="icon icon16 fa-times jsDeleteButton jsTooltip pointer" title="{lang}wcf.global.button.delete{/lang}" data-object-id="{@$childMenuItem->menuItemID}" data-confirm-message="{lang __menuItem=$childMenuItem}wcf.acp.pageMenu.delete.sure{/lang}"></span>
- {else}
- <span class="icon icon16 fa-times disabled" title="{lang}wcf.global.button.delete{/lang}"></span>
- {/if}
-
- {event name='subHeaderItemButtons'}
- </span>
- </span>
- </li>
- {/foreach}
- </ol>
- {/if}
- </li>
- {/foreach}
- {/content}
- </ol>
-
- <div class="formSubmit">
- <button data-type="submit">{lang}wcf.global.button.saveSorting{/lang}</button>
- </div>
- </div>
- </section>
-{/hascontent}
-
-{hascontent}
- <section class="section">
- <h2 class="sectionTitle">{lang}wcf.acp.pageMenu.footer{/lang}</h2>
-
- <div id="pageMenuItemFooterList" class="sortableListContainer">
- <ol class="sortableList simpleSortableList" data-object-id="0">
- {content}
- {foreach from=$footerItems item=menuItem}
- <li class="sortableNode" data-object-id="{@$menuItem->menuItemID}">
- <span class="sortableNodeLabel">
- <a href="{link controller='PageMenuItemEdit' id=$menuItem->menuItemID}{/link}">{lang}{$menuItem->menuItem}{/lang}</a>
- <span class="statusDisplay sortableButtonContainer">
- <span class="icon icon16 fa-{if !$menuItem->isDisabled}check-{/if}square-o jsToggleButton jsTooltip pointer" title="{lang}wcf.global.button.{if $menuItem->isDisabled}enable{else}disable{/if}{/lang}" data-object-id="{@$menuItem->menuItemID}"></span>
- <a href="{link controller='PageMenuItemEdit' id=$menuItem->menuItemID}{/link}" class="jsTooltip" title="{lang}wcf.global.button.edit{/lang}"><span class="icon icon16 fa-pencil"></span></a>
- {if $menuItem->canDelete()}
- <span class="icon icon16 fa-times jsDeleteButton jsTooltip pointer" title="{lang}wcf.global.button.delete{/lang}" data-object-id="{@$menuItem->menuItemID}" data-confirm-message="{lang __menuItem=$menuItem}wcf.acp.pageMenu.delete.sure{/lang}"></span>
- {else}
- <span class="icon icon16 fa-times disabled" title="{lang}wcf.global.button.delete{/lang}"></span>
- {/if}
-
- {event name='footerItemButtons'}
- </span>
- </span>
- </li>
- {/foreach}
- {/content}
- </ol>
-
- <div class="formSubmit">
- <button data-type="submit">{lang}wcf.global.button.saveSorting{/lang}</button>
- </div>
- </div>
- </section>
-{/hascontent}
-
-<div class="contentNavigation">
- <nav>
- <ul>
- <li><a href="{link controller='PageMenuItemAdd'}{/link}" class="button"><span class="icon icon16 fa-plus"></span> <span>{lang}wcf.acp.pageMenu.add{/lang}</span></a></li>
-
- {event name='contentNavigationButtonsBottom'}
- </ul>
- </nav>
-</div>
-
-{include file='footer'}
+++ /dev/null
-<?php
-namespace wcf\acp\form;
-use wcf\data\page\menu\item\PageMenuItemAction;
-use wcf\data\page\menu\item\PageMenuItemEditor;
-use wcf\data\page\menu\item\PageMenuItemList;
-use wcf\form\AbstractForm;
-use wcf\system\exception\UserInputException;
-use wcf\system\language\I18nHandler;
-use wcf\system\page\PageManager;
-use wcf\system\WCF;
-use wcf\util\StringUtil;
-
-/**
- * Shows the page menu item add form.
- *
- * @author Alexander Ebert
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage acp.form
- * @category Community Framework
- */
-class PageMenuItemAddForm extends AbstractForm {
- /**
- * @see \wcf\page\AbstractPage::$activeMenuItem
- */
- public $activeMenuItem = 'wcf.acp.menu.link.pageMenu.add';
-
- /**
- * list of available parent menu items
- * @var \wcf\data\page\menu\item\PageMenuItemList
- */
- public $availableParentMenuItems = null;
-
- /**
- * activation state
- * @var boolean
- */
- public $isDisabled = false;
-
- /**
- * internal link
- * @var boolean
- */
- public $isInternalLink = false;
-
- /**
- * menu item controller
- * @var string
- */
- public $menuItemController = '';
-
- /**
- * menu item parameters
- * @var string
- */
- public $menuItemParameters = '';
-
- /**
- * menu item link
- * @var string
- */
- public $menuItemLink = '';
-
- /**
- * menu item position
- * @var string
- */
- public $menuPosition = 'header';
-
- /**
- * @see \wcf\page\AbstractPage::$neededPermissions
- */
- public $neededPermissions = array('admin.content.cms.canManageMenu');
-
- /**
- * page menu item name
- * @var string
- */
- public $pageMenuItem = '';
-
- /**
- * parent menu item
- * @var string
- */
- public $parentMenuItem = '';
-
- /**
- * show order
- * @var integer
- */
- public $showOrder = 0;
-
- /**
- * available page object types
- * @var array<\wcf\data\object\type\ObjectType>
- */
- public $pageObjectTypes = array();
-
- /**
- * id of the page object type that belongs to the menu item's controller
- * @var integer
- */
- public $menuItemPage = 0;
-
- /**
- * @see \wcf\page\IPage::readParameters()
- */
- public function readParameters() {
- parent::readParameters();
-
- I18nHandler::getInstance()->register('menuItemLink');
- I18nHandler::getInstance()->register('pageMenuItem');
-
- $this->readAvailableParentMenuItems();
-
- $this->pageObjectTypes = PageManager::getInstance()->getObjectTypes();
- }
-
- /**
- * Prepares list object to read available parent menu items.
- */
- protected function initAvailableParentMenuItems() {
- $this->availableParentMenuItems = new PageMenuItemList();
- $this->availableParentMenuItems->getConditionBuilder()->add("page_menu_item.parentMenuItem = ''");
- $this->availableParentMenuItems->getConditionBuilder()->add('page_menu_item.menuPosition = ?', array('header'));
- $this->availableParentMenuItems->sqlOrderBy = "page_menu_item.showOrder ASC";
- }
-
- /**
- * Reads a list of available parent menu items.
- */
- protected function readAvailableParentMenuItems() {
- $this->initAvailableParentMenuItems();
-
- $this->availableParentMenuItems->readObjects();
- }
-
- /**
- * @see \wcf\form\IForm::readFormParameters()
- */
- public function readFormParameters() {
- parent::readFormParameters();
-
- I18nHandler::getInstance()->readValues();
- if (I18nHandler::getInstance()->isPlainValue('menuItemLink')) $this->menuItemLink = I18nHandler::getInstance()->getValue('menuItemLink');
- if (I18nHandler::getInstance()->isPlainValue('pageMenuItem')) $this->pageMenuItem = I18nHandler::getInstance()->getValue('pageMenuItem');
-
- if (isset($_POST['isDisabled'])) $this->isDisabled = true;
- if (isset($_POST['isInternalLink'])) $this->isInternalLink = (bool) $_POST['isInternalLink'];
- if (isset($_POST['menuItemController'])) $this->menuItemController = StringUtil::trim($_POST['menuItemController']);
- if (isset($_POST['menuItemPage'])) $this->menuItemPage = intval($_POST['menuItemPage']);
- if (isset($_POST['menuItemParameters'])) $this->menuItemParameters = StringUtil::trim($_POST['menuItemParameters']);
- if (isset($_POST['menuPosition'])) $this->menuPosition = StringUtil::trim($_POST['menuPosition']);
- if (isset($_POST['parentMenuItem'])) $this->parentMenuItem = StringUtil::trim($_POST['parentMenuItem']);
- if (isset($_POST['showOrder'])) $this->showOrder = intval($_POST['showOrder']);
- }
-
- /**
- * @see \wcf\form\IForm::validate()
- */
- public function validate() {
- parent::validate();
-
- // validate menu position
- if (empty($this->menuPosition)) {
- throw new UserInputException('menuPosition');
- }
- else if ($this->menuPosition != 'header' && $this->menuPosition != 'footer') {
- throw new UserInputException('menuPosition', 'notValid');
- }
-
- // validate menu item controller
- if ($this->isInternalLink) {
- if ($this->menuItemPage) {
- $valid = false;
- foreach ($this->pageObjectTypes as $page) {
- if ($page->objectTypeID == $this->menuItemPage) {
- $this->menuItemController = $page->className;
- $valid = true;
- break;
- }
- }
-
- if (!$valid) {
- throw new UserInputException('menuItemPage', 'noValidSelection');
- }
- }
- else if (empty($this->menuItemController)) {
- throw new UserInputException('menuItemPage');
- }
-
- if (!class_exists($this->menuItemController)) {
- throw new UserInputException('menuItemController', 'notValid');
- }
-
- // validate menu item link
- if (!I18nHandler::getInstance()->validateValue('menuItemLink', false, true)) {
- throw new UserInputException('menuItemLink');
- }
- }
- else {
- $this->menuItemController = '';
-
- // validate menu item link
- if (!I18nHandler::getInstance()->validateValue('menuItemLink')) {
- throw new UserInputException('menuItemLink');
- }
- }
-
- // validate page menu item name
- if (!I18nHandler::getInstance()->validateValue('pageMenuItem', true)) {
- throw new UserInputException('pageMenuItem', 'multilingual');
- }
-
- // validate parent menu item
- if ($this->menuPosition == 'footer') {
- $this->parentMenuItem = '';
- }
- else if (!empty($this->parentMenuItem)) {
- $valid = false;
- foreach ($this->availableParentMenuItems as $menuItem) {
- if ($menuItem->menuItem == $this->parentMenuItem) {
- $valid = true;
- break;
- }
- }
-
- if (!$valid) {
- throw new UserInputException('parentMenuItem', 'notValid');
- }
- }
- }
-
- /**
- * @see \wcf\form\IForm::save()
- */
- public function save() {
- parent::save();
-
- $this->objectAction = new PageMenuItemAction(array(), 'create', array('data' => array_merge($this->additionalFields, array(
- 'isDisabled' => ($this->isDisabled) ? 1 : 0,
- 'menuItem' => $this->pageMenuItem,
- 'menuItemController' => $this->menuItemController,
- 'menuItemLink' => ($this->menuItemController ? $this->menuItemParameters : $this->menuItemLink),
- 'menuPosition' => $this->menuPosition,
- 'parentMenuItem' => $this->parentMenuItem,
- 'showOrder' => $this->showOrder,
- 'menuItem' => StringUtil::getRandomID()
- ))));
- $this->objectAction->executeAction();
-
- $returnValues = $this->objectAction->getReturnValues();
- $menuItem = $returnValues['returnValues'];
- $data = array();
- if (!I18nHandler::getInstance()->isPlainValue('menuItemLink')) {
- I18nHandler::getInstance()->save('menuItemLink', 'wcf.page.menuItemLink'.$menuItem->menuItemID, 'wcf.page');
- $data['menuItemLink'] = 'wcf.page.menuItemLink'.$menuItem->menuItemID;
- }
-
- // save menu item
- I18nHandler::getInstance()->save('pageMenuItem', 'wcf.page.menuItem'.$menuItem->menuItemID, 'wcf.page');
- $data['menuItem'] = 'wcf.page.menuItem'.$menuItem->menuItemID;
-
- // update i18n values
- $menuItemEditor = new PageMenuItemEditor($menuItem);
- $menuItemEditor->update($data);
- PageMenuItemEditor::resetCache();
-
- // call saved event
- $this->saved();
-
- // show success
- WCF::getTPL()->assign('success', true);
-
- // reset variables
- $this->isDisabled = $this->isInternalLink = false;
- $this->menuPosition = 'header';
- $this->menuItemController = $this->menuItemLink = $this->pageMenuItem = $this->parentMenuItem = $this->menuItemParameters = '';
- $this->showOrder = 0;
-
- I18nHandler::getInstance()->reset();
-
- // reload parent menu items
- if ($menuItem->menuPosition == 'header' && $menuItem->parentMenuItem == '') {
- $this->readAvailableParentMenuItems();
- }
- }
-
- /**
- * @see \wcf\page\IPage::assignVariables()
- */
- public function assignVariables() {
- parent::assignVariables();
-
- I18nHandler::getInstance()->assignVariables();
-
- WCF::getTPL()->assign(array(
- 'action' => 'add',
- 'availableParentMenuItems' => $this->availableParentMenuItems,
- 'isDisabled' => $this->isDisabled,
- 'isInternalLink' => $this->isInternalLink,
- 'menuItemController' => $this->menuItemPage ? '' : $this->menuItemController,
- 'menuItemParameters' => $this->menuItemParameters,
- 'menuItemLink' => $this->menuItemLink,
- 'menuItemPage' => $this->menuItemPage,
- 'menuPosition' => $this->menuPosition,
- 'pages' => PageManager::getInstance()->getSelection(),
- 'pageMenuItem' => $this->pageMenuItem,
- 'parentMenuItem' => $this->parentMenuItem,
- 'showOrder' => $this->showOrder
- ));
- }
-}
+++ /dev/null
-<?php
-namespace wcf\acp\form;
-use wcf\data\page\menu\item\PageMenuItem;
-use wcf\data\page\menu\item\PageMenuItemAction;
-use wcf\form\AbstractForm;
-use wcf\system\exception\IllegalLinkException;
-use wcf\system\language\I18nHandler;
-use wcf\system\WCF;
-
-/**
- * Shows the page menu item edit form.
- *
- * @author Alexander Ebert
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage acp.form
- * @category Community Framework
- */
-class PageMenuItemEditForm extends PageMenuItemAddForm {
- /**
- * @see \wcf\page\AbstractPage::$activeMenuItem
- */
- public $activeMenuItem = 'wcf.acp.menu.link.pageMenu';
-
- /**
- * page menu item object
- * @var \wcf\data\page\menu\item\PageMenuItem
- */
- public $menuItem = null;
-
- /**
- * menu item id
- * @var integer
- */
- public $menuItemID = 0;
-
- /**
- * @see \wcf\page\IPage::readParameters()
- */
- public function readParameters() {
- if (isset($_REQUEST['id'])) $this->menuItemID = intval($_REQUEST['id']);
- $this->menuItem = new PageMenuItem($this->menuItemID);
- if (!$this->menuItem->menuItemID) {
- throw new IllegalLinkException();
- }
-
- parent::readParameters();
- }
-
- /**
- * @see \wcf\acp\form\PageMenuItemAddForm::initAvailableParentMenuItems()
- */
- protected function initAvailableParentMenuItems() {
- parent::initAvailableParentMenuItems();
-
- // remove current item as valid parent menu item
- $this->availableParentMenuItems->getConditionBuilder()->add("page_menu_item.menuItem <> ?", array($this->menuItem->menuItem));
- }
-
- /**
- * @see \wcf\page\IPage::readData()
- */
- public function readData() {
- parent::readData();
-
- I18nHandler::getInstance()->setOptions('menuItemLink', PACKAGE_ID, $this->menuItem->menuItemLink, 'wcf.page.menuItemLink\d+');
- I18nHandler::getInstance()->setOptions('pageMenuItem', PACKAGE_ID, $this->menuItem->menuItem, 'wcf.page.menuItem\d+');
-
- if (empty($_POST)) {
- $this->isDisabled = ($this->menuItem->isDisabled) ? true : false;
- $this->isInternalLink = ($this->menuItem->menuItemController) ? true : false;
- $this->menuItemController = $this->menuItem->menuItemController;
- if ($this->isInternalLink) {
- $this->menuItemParameters = $this->menuItem->menuItemLink;
- }
- else {
- $this->menuItemLink = $this->menuItem->menuItemLink;
- }
- $this->menuPosition = $this->menuItem->menuPosition;
- $this->pageMenuItem = $this->menuItem->menuItem;
- $this->parentMenuItem = $this->menuItem->parentMenuItem;
- $this->showOrder = $this->menuItem->showOrder;
-
- foreach ($this->pageObjectTypes as $page) {
- if ($page->className == $this->menuItemController) {
- $this->menuItemPage = $page->objectTypeID;
- }
- }
- }
- }
-
- /**
- * @see \wcf\form\IForm::save()
- */
- public function save() {
- AbstractForm::save();
-
- // save menu item
- I18nHandler::getInstance()->save('pageMenuItem', $this->menuItem->menuItem, 'wcf.page');
-
- // save menu item link
- $this->menuItemLink = 'wcf.page.menuItemLink'.$this->menuItem->menuItemID;
- if (I18nHandler::getInstance()->isPlainValue('menuItemLink')) {
- I18nHandler::getInstance()->remove($this->menuItemLink);
- $this->menuItemLink= I18nHandler::getInstance()->getValue('menuItemLink');
- }
- else {
- I18nHandler::getInstance()->save('menuItemLink', $this->menuItemLink, 'wcf.page');
- }
-
- // save menu item
- $this->objectAction = new PageMenuItemAction(array($this->menuItem), 'update', array('data' => array_merge($this->additionalFields, array(
- 'isDisabled' => ($this->isDisabled) ? 1 : 0,
- 'menuItemController' => $this->menuItemController,
- 'menuItemLink' => ($this->menuItemController ? $this->menuItemParameters : $this->menuItemLink),
- 'parentMenuItem' => ($this->menuPosition == 'header' ? $this->parentMenuItem : ''),
- 'menuPosition' => $this->menuPosition,
- 'showOrder' => $this->showOrder
- ))));
- $this->objectAction->executeAction();
-
- // update children
- if ($this->menuItem->menuPosition == 'header' && $this->menuPosition != 'header') {
- $sql = "UPDATE wcf".WCF_N."_page_menu_item
- SET parentMenuItem = ''
- WHERE parentMenuItem = ?";
- $statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute(array($this->menuItem->menuItem));
- }
- $this->saved();
-
- WCF::getTPL()->assign('success', true);
- }
-
- /**
- * @see \wcf\page\IPage::assignVariables()
- */
- public function assignVariables() {
- parent::assignVariables();
-
- I18nHandler::getInstance()->assignVariables(!empty($_POST));
-
- WCF::getTPL()->assign(array(
- 'action' => 'edit',
- 'menuItem' => $this->menuItem,
- 'menuItemID' => $this->menuItemID
- ));
- }
-}
+++ /dev/null
-<?php
-namespace wcf\acp\page;
-use wcf\data\page\menu\item\PageMenuItemList;
-use wcf\data\page\menu\item\ViewablePageMenuItem;
-use wcf\page\AbstractPage;
-use wcf\system\WCF;
-
-/**
- * Shows a list of page menu items.
- *
- * @author Alexander Ebert
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage acp.page
- * @category Community Framework
- */
-class PageMenuItemListPage extends AbstractPage {
- /**
- * @see \wcf\page\AbstractPage::$activeMenuItem
- */
- public $activeMenuItem = 'wcf.acp.menu.link.pageMenu.list';
-
- /**
- * list of footer page menu items
- * @var array<\wcf\data\page\menu\item\PageMenuItem>
- */
- public $footerItems = array();
-
- /**
- * list of header page menu items
- * @var array<\wcf\data\page\menu\item\PageMenuItem>
- */
- public $headerItems = array();
-
- /**
- * @see \wcf\page\AbstractPage::$neededPermissions
- */
- public $neededPermissions = array('admin.content.cms.canManageMenu');
-
- /**
- * @see \wcf\page\IPage::readData()
- */
- public function readData() {
- parent::readData();
-
- $menuItemList = new PageMenuItemList();
- $menuItemList->sqlOrderBy = "page_menu_item.parentMenuItem ASC, page_menu_item.showOrder ASC";
- $menuItemList->readObjects();
-
- foreach ($menuItemList as $menuItem) {
- if ($menuItem->menuPosition == 'footer') {
- if ($menuItem->parentMenuItem) {
- $this->footerItems[$menuItem->parentMenuItem]->addChild($menuItem);
- }
- else {
- $this->footerItems[$menuItem->menuItem] = $menuItem;
- }
- }
- else {
- if ($menuItem->parentMenuItem) {
- if (isset($this->headerItems[$menuItem->parentMenuItem])) {
- $this->headerItems[$menuItem->parentMenuItem]->addChild($menuItem);
- }
- }
- else {
- $this->headerItems[$menuItem->menuItem] = new ViewablePageMenuItem($menuItem);
- }
- }
- }
- }
-
- /**
- * @see \wcf\page\IPage::assignVariables()
- */
- public function assignVariables() {
- parent::assignVariables();
-
- WCF::getTPL()->assign(array(
- 'footerItems' => $this->footerItems,
- 'headerItems' => $this->headerItems
- ));
- }
-}
+++ /dev/null
-<?php
-namespace wcf\data\page\menu\item;
-use wcf\data\ProcessibleDatabaseObject;
-use wcf\system\menu\page\DefaultPageMenuItemProvider;
-use wcf\system\menu\ITreeMenuItem;
-use wcf\system\request\LinkHandler;
-use wcf\system\Regex;
-use wcf\system\WCF;
-
-/**
- * Represents a page menu item.
- *
- * @author Alexander Ebert
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage data.page.menu.item
- * @category Community Framework
- *
- * @property-read integer $menuItemID
- * @property-read integer $packageID
- * @property-read string $menuItem
- * @property-read string $parentMenuItem
- * @property-read string $menuItemController
- * @property-read string $menuItemLink
- * @property-read string $menuPosition
- * @property-read integer $showOrder
- * @property-read string $permissions
- * @property-read string $options
- * @property-read integer $isDisabled
- * @property-read string $className
- * @property-read integer $isLandingPage
- * @property-read integer $originIsSystem
- */
-class PageMenuItem extends ProcessibleDatabaseObject implements ITreeMenuItem {
- /**
- * @see \wcf\data\DatabaseObject::$databaseTableName
- */
- protected static $databaseTableName = 'page_menu_item';
-
- /**
- * @see \wcf\data\DatabaseObject::$databaseTableIndexName
- */
- protected static $databaseTableIndexName = 'menuItemID';
-
- /**
- * @see \wcf\data\ProcessibleDatabaseObject::$processorInterface
- */
- protected static $processorInterface = 'wcf\system\menu\page\IPageMenuItemProvider';
-
- /**
- * application abbreviation
- * @var string
- */
- protected $application = '';
-
- /**
- * menu item controller
- * @var string
- */
- protected $controller = null;
-
- /**
- * @see \wcf\data\ProcessibleDatabaseObject::getProcessor()
- */
- public function getProcessor() {
- if (parent::getProcessor() === null) {
- $this->processor = new DefaultPageMenuItemProvider($this);
- }
-
- return $this->processor;
- }
-
- /**
- * @see \wcf\system\menu\ITreeMenuItem::getLink()
- */
- public function getLink() {
- // external link
- if (!$this->menuItemController) {
- return WCF::getLanguage()->get($this->menuItemLink);
- }
-
- $this->parseController();
- return LinkHandler::getInstance()->getLink($this->controller, array('application' => $this->application, 'forceFrontend' => true), WCF::getLanguage()->get($this->menuItemLink));
- }
-
- /**
- * Returns true if current menu item may be set as landing page.
- *
- * @return boolean
- */
- public function isValidLandingPage() {
- // item must be a top header menu item without parents
- if ($this->menuPosition != 'header' || $this->parentMenuItem) {
- return false;
- }
-
- // external links are not valid
- if (!$this->menuItemController) {
- return false;
- }
-
- // already is landing page
- if ($this->isLandingPage) {
- return false;
- }
-
- // disabled items cannot be a landing page
- if ($this->isDisabled) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Returns true if this item can be deleted.
- *
- * @return boolean
- */
- public function canDelete() {
- if ($this->originIsSystem || $this->isLandingPage) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Returns true if this item can be disabled.
- *
- * @return boolean
- */
- public function canDisable() {
- return ($this->isLandingPage ? false : true);
- }
-
- /**
- * Returns application abbreviation.
- *
- * @return string
- */
- public function getApplication() {
- $this->parseController();
-
- return $this->application;
- }
-
- /**
- * Returns controller name.
- *
- * @return string
- */
- public function getController() {
- $this->parseController();
-
- return $this->controller;
- }
-
- /**
- * Parses controller name.
- */
- protected function parseController() {
- if ($this->controller === null) {
- $this->controller = '';
-
- // resolve application and controller
- if ($this->menuItemController) {
- $parts = explode('\\', $this->menuItemController);
- $this->application = array_shift($parts);
- $menuItemController = array_pop($parts);
-
- // drop controller suffix
- $this->controller = Regex::compile('(Action|Form|Page)$')->replace($menuItemController, '');
- }
- }
- }
-
- /**
- * Returns the menu item name.
- *
- * @return string
- */
- public function __toString() {
- return WCF::getLanguage()->getDynamicVariable($this->menuItem);
- }
-}
+++ /dev/null
-<?php
-namespace wcf\data\page\menu\item;
-use wcf\data\AbstractDatabaseObjectAction;
-use wcf\data\ISortableAction;
-use wcf\data\IToggleAction;
-use wcf\system\exception\PermissionDeniedException;
-use wcf\system\exception\UserInputException;
-use wcf\system\WCF;
-
-/**
- * Executes page menu item-related actions.
- *
- * @author Alexander Ebert
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage data.page.menu.item
- * @category Community Framework
- */
-class PageMenuItemAction extends AbstractDatabaseObjectAction implements ISortableAction, IToggleAction {
- /**
- * @see \wcf\data\AbstractDatabaseObjectAction::$className
- */
- protected $className = 'wcf\data\page\menu\item\PageMenuItemEditor';
-
- /**
- * page menu item editor
- * @var \wcf\data\page\menu\item\PageMenuItemEditor
- */
- public $menuItemEditor = null;
-
- /**
- * list of menu items
- * @var array<\wcf\data\page\menu\item\PageMenuItem>
- */
- public $menuItems = array();
-
- /**
- * @see \wcf\data\AbstractDatabaseObjectAction::$permissionsDelete
- */
- protected $permissionsDelete = array('admin.content.cms.canManageMenu');
-
- /**
- * @see \wcf\data\AbstractDatabaseObjectAction::$permissionsUpdate
- */
- protected $permissionsUpdate = array('admin.content.cms.canManageMenu');
-
- /**
- * @see \wcf\data\AbstractDatabaseObjectAction::$requireACP
- */
- protected $requireACP = array('delete', 'toggle', 'update', 'updatePosition');
-
- /**
- * @see \wcf\data\IDatabaseObjectAction::create()
- */
- public function create() {
- if (!isset($this->parameters['data']['packageID'])) {
- $this->parameters['data']['packageID'] = PACKAGE_ID;
- }
-
- // calculate show order
- $this->parameters['data']['showOrder'] = PageMenuItemEditor::getShowOrder($this->parameters['data']['showOrder'], $this->parameters['data']['menuPosition'], $this->parameters['data']['parentMenuItem']);
-
- $menuItem = parent::create();
-
- if ($menuItem->menuPosition == 'header') {
- PageMenuItemEditor::updateLandingPage();
- }
-
- return $menuItem;
- }
-
- /**
- * @see \wcf\data\AbstractDatabaseObjectAction::delete()
- */
- public function delete() {
- $returnValues = parent::delete();
-
- PageMenuItemEditor::updateLandingPage();
-
- return $returnValues;
- }
-
- /**
- * @see \wcf\data\AbstractDatabaseObjectAction::update()
- */
- public function update() {
- parent::update();
-
- PageMenuItemEditor::updateLandingPage();
- }
-
- /**
- * @see \wcf\data\ISortableAction::validateUpdatePosition()
- */
- public function validateUpdatePosition() {
- WCF::getSession()->checkPermissions(array('admin.content.cms.canManageMenu'));
-
- if (!isset($this->parameters['data']) || !isset($this->parameters['data']['structure']) || !is_array($this->parameters['data']['structure'])) {
- throw new UserInputException('structure');
- }
-
- if (!isset($this->parameters['menuPosition']) || !in_array($this->parameters['menuPosition'], array('footer', 'header'))) {
- throw new UserInputException('structure');
- }
-
- if ($this->parameters['menuPosition'] == 'footer') {
- if (count($this->parameters['data']['structure']) > 1 || !isset($this->parameters['data']['structure'][0])) {
- throw new UserInputException('structure');
- }
- }
-
- $menuItemIDs = array();
- foreach ($this->parameters['data']['structure'] as $menuItems) {
- $menuItemIDs = array_merge($menuItemIDs, $menuItems);
- }
-
- $menuItemList = new PageMenuItemList();
- $menuItemList->getConditionBuilder()->add("page_menu_item.menuItemID IN (?)", array($menuItemIDs));
- $menuItemList->getConditionBuilder()->add("page_menu_item.menuPosition = ?", array($this->parameters['menuPosition']));
- $menuItemList->readObjects();
- $this->menuItems = $menuItemList->getObjects();
-
- if (count($this->menuItems) != count($menuItemIDs)) {
- throw new UserInputException('structure');
- }
-
- foreach ($this->parameters['data']['structure'] as $parentMenuItemID => $menuItems) {
- if ($parentMenuItemID && !isset($this->menuItems[$parentMenuItemID])) {
- throw new UserInputException('structure');
- }
- }
- }
-
- /**
- * @see \wcf\data\ISortableAction::updatePosition()
- */
- public function updatePosition() {
- $sql = "UPDATE wcf".WCF_N."_page_menu_item
- SET parentMenuItem = ?,
- showOrder = ?
- WHERE menuItemID = ?";
- $statement = WCF::getDB()->prepareStatement($sql);
-
- WCF::getDB()->beginTransaction();
- foreach ($this->parameters['data']['structure'] as $parentMenuItemID => $menuItems) {
- foreach ($menuItems as $showOrder => $menuItemID) {
- $statement->execute(array(
- ($parentMenuItemID ? $this->menuItems[$parentMenuItemID]->menuItem : ''),
- $showOrder + 1,
- $menuItemID
- ));
- }
- }
- WCF::getDB()->commitTransaction();
-
- // update landing page
- if ($this->parameters['menuPosition'] == 'header') {
- PageMenuItemEditor::updateLandingPage();
- }
- }
-
- /**
- * @see \wcf\data\AbstractDatabaseObjectAction::validateDelete()
- */
- public function validateDelete() {
- parent::validateDelete();
-
- foreach ($this->objects as $pageMenuItem) {
- if (!$pageMenuItem->canDelete()) {
- throw new PermissionDeniedException();
- }
- }
- }
-
- /**
- * @see \wcf\data\IToggleAction::validateToggle()
- */
- public function validateToggle() {
- $this->menuItemEditor = $this->getSingleObject();
- if ($this->menuItemEditor->isLandingPage) {
- throw new PermissionDeniedException();
- }
-
- WCF::getSession()->checkPermissions($this->permissionsUpdate);
- }
-
- /**
- * @see \wcf\data\IToggleAction::toggle()
- */
- public function toggle() {
- $this->menuItemEditor->update(array(
- 'isDisabled' => ($this->menuItemEditor->isDisabled ? 0 : 1)
- ));
- }
-}
+++ /dev/null
-<?php
-namespace wcf\data\page\menu\item;
-use wcf\data\DatabaseObjectEditor;
-use wcf\data\IEditableCachedObject;
-use wcf\system\cache\builder\PageMenuCacheBuilder;
-use wcf\system\WCF;
-
-/**
- * Provides functions to edit page menu items.
- *
- * @author Alexander Ebert
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage data.page.menu.item
- * @category Community Framework
- */
-class PageMenuItemEditor extends DatabaseObjectEditor implements IEditableCachedObject {
- /**
- * @see \wcf\data\DatabaseObjectDecorator::$baseClass
- */
- protected static $baseClass = 'wcf\data\page\menu\item\PageMenuItem';
-
- /**
- * @see \wcf\data\IEditableObject::delete()
- */
- public function delete() {
- // update show order
- $sql = "UPDATE wcf".WCF_N."_page_menu_item
- SET showOrder = showOrder - 1
- WHERE showOrder >= ?
- AND menuPosition = ?";
- $statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute(array(
- $this->showOrder,
- $this->menuPosition
- ));
-
- parent::delete();
- }
-
- /**
- * Sets first top header menu item as landing page.
- */
- public static function updateLandingPage() {
- $sql = "UPDATE wcf".WCF_N."_page_menu_item
- SET isLandingPage = 0";
- $statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute();
-
- $sql = "UPDATE wcf".WCF_N."_page_menu_item
- SET isLandingPage = ?,
- isDisabled = ?
- WHERE menuPosition = ?
- AND parentMenuItem = ?
- AND menuItemController <> ?
- ORDER BY showOrder ASC";
- $statement = WCF::getDB()->prepareStatement($sql, 1);
- $statement->execute(array(
- 1,
- 0,
- 'header',
- '',
- ''
- ));
-
- self::resetCache();
- }
-
- /**
- * Updates the positions of a page menu item directly.
- *
- * @param integer $menuItemID
- * @param string $menuPosition
- * @param integer $showOrder
- */
- public static function setShowOrder($menuItemID, $menuPosition = 'header', $showOrder = 1) {
- // Update
- $sql = "UPDATE wcf".WCF_N."_page_menu_item
- SET showOrder = ?,
- menuPosition = ?
- WHERE menuItemID = ?";
- $statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute(array(
- $showOrder,
- $menuPosition,
- $menuItemID
- ));
- }
-
- /**
- * Returns show order for a new menu item.
- *
- * @param integer $showOrder
- * @param string $menuPosition
- * @return integer
- */
- public static function getShowOrder($showOrder, $menuPosition, $parentMenuItem = '') {
- if ($showOrder == 0) {
- // get next number in row
- $sql = "SELECT MAX(showOrder) AS showOrder
- FROM wcf".WCF_N."_page_menu_item
- WHERE parentMenuItem = ?
- AND menuPosition = ?";
- $statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute(array(
- $parentMenuItem,
- $menuPosition
- ));
- $row = $statement->fetchArray();
- if (!empty($row)) $showOrder = intval($row['showOrder']) + 1;
- else $showOrder = 1;
- }
- else {
- $sql = "UPDATE wcf".WCF_N."_page_menu_item
- SET showOrder = showOrder + 1
- WHERE parentMenuItem = ?
- AND menuPosition = ?
- AND showOrder >= ?";
- $statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute(array(
- $parentMenuItem,
- $menuPosition,
- $showOrder
- ));
- }
-
- return $showOrder;
- }
-
- /**
- * @see \wcf\data\IEditableCachedObject::resetCache()
- */
- public static function resetCache() {
- PageMenuCacheBuilder::getInstance()->reset();
- }
-}
+++ /dev/null
-<?php
-namespace wcf\data\page\menu\item;
-use wcf\data\DatabaseObjectList;
-
-/**
- * Represents a list of page menu items.
- *
- * @author Alexander Ebert
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage data.page.menu.item
- * @category Community Framework
- */
-class PageMenuItemList extends DatabaseObjectList {
- /**
- * @see \wcf\data\DatabaseObjectList::$className
- */
- public $className = 'wcf\data\page\menu\item\PageMenuItem';
-}
+++ /dev/null
-<?php
-namespace wcf\data\page\menu\item;
-use wcf\data\DatabaseObjectDecorator;
-
-/**
- * Provides a viewable page menu item with children support.
- *
- * @author Alexander Ebert
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage data.page.menu.item
- * @category Community Framework
- */
-class ViewablePageMenuItem extends DatabaseObjectDecorator implements \Countable, \Iterator {
- /**
- * @see \wcf\data\DatabaseObjectDecorator::$baseClass
- */
- protected static $baseClass = 'wcf\data\page\menu\item\PageMenuItem';
-
- /**
- * current iterator index
- * @var integer
- */
- protected $index = 0;
-
- /**
- * list of page menu items
- * @var array<\wcf\data\page\menu\item\PageMenuItem>
- */
- protected $objects = array();
-
- /**
- * Adds a page menu item to collection.
- *
- * @param \wcf\data\page\menu\item\PageMenuItem $menuItem
- */
- public function addChild(PageMenuItem $menuItem) {
- if ($menuItem->parentMenuItem == $this->menuItem) {
- $this->objects[] = $menuItem;
- }
- }
-
- /**
- * @see \Countable::count()
- */
- public function count() {
- return count($this->objects);
- }
-
- /**
- * @see \Iterator::current()
- */
- public function current() {
- return $this->objects[$this->index];
- }
-
- /**
- * @see \Iterator::key()
- */
- public function key() {
- return $this->index;
- }
-
- /**
- * @see \Iterator::next()
- */
- public function next() {
- ++$this->index;
- }
-
- /**
- * @see \Iterator::rewind()
- */
- public function rewind() {
- $this->index = 0;
- }
-
- /**
- * @see \Iterator::valid()
- */
- public function valid() {
- return isset($this->objects[$this->index]);
- }
-}
* @category Community Framework
*/
class UserSearchForm extends UserOptionListForm {
- /**
- * @inheritDoc
- */
- public $activeMenuItem = 'wcf.user.search';
-
/**
* @inheritDoc
*/
use wcf\system\exception\IllegalLinkException;
use wcf\system\exception\PermissionDeniedException;
use wcf\system\menu\acp\ACPMenu;
-use wcf\system\menu\page\PageMenu;
use wcf\system\request\RequestHandler;
use wcf\system\WCF;
use wcf\util\HeaderUtil;
if (RequestHandler::getInstance()->isACPRequest()) {
ACPMenu::getInstance()->setActiveMenuItem($this->activeMenuItem);
}
- else {
- PageMenu::getInstance()->setActiveMenuItem($this->activeMenuItem);
- }
}
}
<?php
namespace wcf\page;
use wcf\system\dashboard\DashboardHandler;
-use wcf\system\menu\page\PageMenu;
use wcf\system\user\collapsible\content\UserCollapsibleContentHandler;
use wcf\system\WCF;
* @category Community Framework
*/
class DashboardPage extends AbstractPage {
- /**
- * @see \wcf\page\AbstractPage::$activeMenuItem
- */
- public $activeMenuItem = 'wcf.user.dashboard';
-
/**
* @see \wcf\page\AbstractPage::$neededModules
*/
*/
public $enableTracking = true;
- /**
- * @see \wcf\page\IPage::readData()
- */
- public function readData() {
- parent::readData();
-
- // remove default breadcrumb entry
- if (PageMenu::getInstance()->getLandingPage()->menuItem == 'wcf.user.dashboard') {
- WCF::getBreadcrumbs()->remove(0);
- }
- }
-
/**
* @see \wcf\page\AbstractPage::assignVariables()
*/
$this->object = $processor->getObjectByID($this->objectID);
if (!$this->object->getObjectID()) throw new IllegalLinkException();
$processor->checkPermissions($this->object);
- $this->activeMenuItem = $processor->getActivePageMenuItem();
+ //$this->activeMenuItem = $processor->getActivePageMenuItem(); @todo
$this->object->addBreadcrumbs();
if (isset($_REQUEST['newID']) && !$this->new) {
* @category Community Framework
*/
class MembersListPage extends SortablePage {
- /**
- * @see \wcf\page\AbstractPage::$activeMenuItem
- */
- public $activeMenuItem = 'wcf.user.members';
-
/**
* available letters
* @var string
* @category Community Framework
*/
class RecentActivityListPage extends AbstractPage {
- /**
- * @see \wcf\page\AbstractPage::$activeMenuItem
- */
- public $activeMenuItem = 'wcf.user.recentActivity';
-
/**
* viewable user activity event list
* @var \wcf\data\user\activity\event\ViewableUserActivityEventList
use wcf\system\event\EventHandler;
use wcf\system\exception\IllegalLinkException;
use wcf\system\exception\SystemException;
-use wcf\system\menu\page\PageMenu;
use wcf\system\request\LinkHandler;
use wcf\system\search\SearchEngine;
use wcf\system\WCF;
// set active menu item
if (isset($this->searchData['selectedObjectTypes']) && count($this->searchData['selectedObjectTypes']) == 1) {
$objectType = SearchEngine::getInstance()->getObjectType(reset($this->searchData['selectedObjectTypes']));
- if (($activeMenuItem = $objectType->getActiveMenuItem())) {
+ /*if (($activeMenuItem = $objectType->getActiveMenuItem())) { @todo
PageMenu::getInstance()->setActiveMenuItem($activeMenuItem);
- }
+ }*/
}
// add breadcrumbs
* @category Community Framework
*/
class TeamPage extends MultipleLinkPage {
- /**
- * @see \wcf\page\AbstractPage::$activeMenuItem
- */
- public $activeMenuItem = 'wcf.user.team';
-
/**
* @see \wcf\page\AbstractPage::$neededPermissions
*/
* @category Community Framework
*/
class UserPage extends AbstractPage {
- /**
- * @see \wcf\page\AbstractPage::$activeMenuItem
- */
- public $activeMenuItem = 'wcf.user.members';
-
/**
* @see \wcf\page\AbstractPage::$enableTracking
*/
* @category Community Framework
*/
class UsersOnlineListPage extends SortablePage {
- /**
- * @inheritDoc
- */
- public $activeMenuItem = 'wcf.user.usersOnline';
-
/**
* @inheritDoc
*/
+++ /dev/null
-<?php
-namespace wcf\system\cache\builder;
-use wcf\data\page\menu\item\PageMenuItemList;
-
-/**
- * Caches the page menu items.
- *
- * @author Marcel Werk
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage system.cache.builder
- * @category Community Framework
- */
-class PageMenuCacheBuilder extends AbstractCacheBuilder {
- /**
- * @see \wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
- */
- public function rebuild(array $parameters) {
- $data = array();
-
- $menuItemList = new PageMenuItemList();
- $menuItemList->getConditionBuilder()->add("(page_menu_item.isDisabled = ? OR page_menu_item.isLandingPage = ?)", array(0, 1));
- $menuItemList->sqlOrderBy = "page_menu_item.showOrder ASC";
- $menuItemList->readObjects();
-
- foreach ($menuItemList as $menuItem) {
- $index = ($menuItem->parentMenuItem) ? $menuItem->parentMenuItem : $menuItem->menuPosition;
- $data[$index][] = $menuItem;
- }
-
- return $data;
- }
-}
+++ /dev/null
-<?php
-namespace wcf\system\menu\page;
-use wcf\data\DatabaseObjectDecorator;
-
-/**
- * Provides default implementations for page menu item providers.
- *
- * @author Marcel Werk
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage system.menu.page
- * @category Community Framework
- */
-class DefaultPageMenuItemProvider extends DatabaseObjectDecorator implements IPageMenuItemProvider {
- /**
- * @see \wcf\data\DatabaseObjectDecorator::$baseClass
- */
- protected static $baseClass = 'wcf\data\page\menu\item\PageMenuItem';
-
- /**
- * @see \wcf\system\menu\page\IPageMenuItemProvider::isVisible()
- */
- public function isVisible() {
- return true;
- }
-
- /**
- * @see \wcf\system\menu\page\IPageMenuItemProvider::getNotifications()
- */
- public function getNotifications() {
- return 0;
- }
-
- /**
- * @see \wcf\system\menu\page\IPageMenuItemProvider::getLink()
- */
- public function getLink() {
- // explicit call to satisfy our interface
- return $this->getDecoratedObject()->getLink();
- }
-}
+++ /dev/null
-<?php
-namespace wcf\system\menu\page;
-use wcf\data\IDatabaseObjectProcessor;
-
-/**
- * Any page menu item provider should implement this interface.
- *
- * @author Marcel Werk
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage system.menu.page
- * @category Community Framework
- */
-interface IPageMenuItemProvider extends IDatabaseObjectProcessor {
- /**
- * Returns true if the associated menu item should be visible for the active user.
- *
- * @return boolean
- */
- public function isVisible();
-
- /**
- * Returns the number of notifications for the associated menu item.
- *
- * @return integer
- */
- public function getNotifications();
-
- /**
- * Returns the href of the associated menu item.
- *
- * @return string
- */
- public function getLink();
-}
+++ /dev/null
-<?php
-namespace wcf\system\menu\page;
-use wcf\data\ProcessibleDatabaseObject;
-use wcf\system\cache\builder\PageMenuCacheBuilder;
-use wcf\system\event\EventHandler;
-use wcf\system\exception\SystemException;
-use wcf\system\menu\ITreeMenuItem;
-use wcf\system\menu\TreeMenu;
-
-/**
- * Builds the page menu.
- *
- * @author Marcel Werk
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage system.menu.page
- * @category Community Framework
- */
-class PageMenu extends TreeMenu {
- /**
- * @inheritDoc
- * @throws SystemException
- */
- protected function init() {
- // get menu items from cache
- $this->loadCache();
-
- // check menu items
- $this->checkMenuItems('header');
- $this->checkMenuItems('footer');
-
- // build plain menu item list
- $this->buildMenuItemList('header');
- $this->buildMenuItemList('footer');
-
- // call init event
- EventHandler::getInstance()->fireAction($this, 'init');
- }
-
- /**
- * @inheritDoc
- */
- protected function loadCache() {
- parent::loadCache();
-
- // get cache
- $this->menuItems = PageMenuCacheBuilder::getInstance()->getData();
- }
-
- /**
- * @inheritDoc
- */
- protected function checkMenuItem(ITreeMenuItem $item) {
- if (!parent::checkMenuItem($item)) return false;
-
- if ($item instanceof ProcessibleDatabaseObject && $item->getProcessor() instanceof IPageMenuItemProvider) {
- return $item->getProcessor()->isVisible();
- }
-
- return true;
- }
-
- /**
- * @inheritDoc
- */
- public function setActiveMenuItem($menuItem) {
- if (isset($this->menuItemList[$menuItem]) && $this->menuItemList[$menuItem]->menuPosition == 'footer') {
- // ignore footer items
- return;
- }
-
- parent::setActiveMenuItem($menuItem);
- }
-}
namespace wcf\system\menu\user;
use wcf\data\ProcessibleDatabaseObject;
use wcf\system\cache\builder\UserMenuCacheBuilder;
-use wcf\system\menu\page\IPageMenuItemProvider;
use wcf\system\menu\ITreeMenuItem;
use wcf\system\menu\TreeMenu;
protected function checkMenuItem(ITreeMenuItem $item) {
if (!parent::checkMenuItem($item)) return false;
- if ($item instanceof ProcessibleDatabaseObject && $item->getProcessor() instanceof IPageMenuItemProvider) {
+ /*if ($item instanceof ProcessibleDatabaseObject && $item->getProcessor() instanceof IPageMenuItemProvider) { @todo
return $item->getProcessor()->isVisible();
- }
+ }*/
return true;
}
+++ /dev/null
-<?php
-namespace wcf\system\package\plugin;
-use wcf\data\page\menu\item\PageMenuItemEditor;
-use wcf\system\database\util\PreparedStatementConditionBuilder;
-use wcf\system\exception\SystemException;
-use wcf\system\WCF;
-
-/**
- * Installs, updates and deletes page page menu items.
- *
- * @author Marcel Werk
- * @copyright 2001-2015 WoltLab GmbH
- * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf
- * @subpackage system.package.plugin
- * @category Community Framework
- */
-class PageMenuPackageInstallationPlugin extends AbstractMenuPackageInstallationPlugin {
- /**
- * @see \wcf\system\package\plugin\AbstractXMLPackageInstallationPlugin::$className
- */
- public $className = 'wcf\data\page\menu\item\PageMenuItemEditor';
-
- /**
- * @see \wcf\system\package\plugin\AbstractXMLPackageInstallationPlugin::prepareImport()
- */
- protected function prepareImport(array $data) {
- $result = parent::prepareImport($data);
-
- // position
- $result['menuPosition'] = (!empty($data['elements']['position']) && $data['elements']['position'] == 'footer') ? 'footer' : 'header';
-
- // class name
- if (!empty($data['elements']['classname'])) {
- $result['className'] = $data['elements']['classname'];
- }
-
- // validate controller and link (cannot be empty at the same time)
- if (empty($result['menuItemLink']) && empty($result['menuItemController'])) {
- throw new SystemException("Menu item '".$result['menuItem']."' neither has a link nor a controller given");
- }
-
- $result['originIsSystem'] = 1;
-
- return $result;
- }
-
- /**
- * @see \wcf\system\package\plugin\AbstractXMLPackageInstallationPlugin::cleanup()
- */
- protected function cleanup() {
- PageMenuItemEditor::updateLandingPage();
- }
-
- /**
- * @see \wcf\system\package\plugin\AbstractXMLPackageInstallationPlugin::import()
- */
- protected function import(array $row, array $data) {
- if (!empty($row)) {
- // ignore show order if null
- if ($data['showOrder'] === null) {
- unset($data['showOrder']);
- }
- else if ($data['showOrder'] != $row['showOrder']) {
- $data['showOrder'] = $this->getMenuItemPosition($data);
- }
- }
- else {
- $data['showOrder'] = $this->getMenuItemPosition($data);
- }
-
- parent::import($row, $data);
- }
-
- /**
- * @see \wcf\system\package\plugin\AbstractXMLPackageInstallationPlugin::getShowOrder()
- */
- protected function getShowOrder($showOrder, $parentName = null, $columnName = null, $tableNameExtension = '') {
- // will be recalculated anyway
- return $showOrder;
- }
-
- /**
- * Returns menu item position.
- *
- * @param array $data
- * @return integer
- */
- protected function getMenuItemPosition(array $data) {
- if ($data['showOrder'] === null) {
- // get greatest showOrder value
- $conditions = new PreparedStatementConditionBuilder();
- $conditions->add("menuPosition = ?", array($data['menuPosition']));
- if ($data['parentMenuItem']) $conditions->add("parentMenuItem = ?", array($data['parentMenuItem']));
-
- $sql = "SELECT MAX(showOrder) AS showOrder
- FROM wcf".WCF_N."_".$this->tableName."
- ".$conditions;
- $statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute($conditions->getParameters());
- $maxShowOrder = $statement->fetchArray();
- return (!$maxShowOrder) ? 1 : ($maxShowOrder['showOrder'] + 1);
- }
- else {
- // increase all showOrder values which are >= $showOrder
- $sql = "UPDATE wcf".WCF_N."_".$this->tableName."
- SET showOrder = showOrder + 1
- WHERE showOrder >= ?
- AND menuPosition = ?
- AND parentMenuItem = ".($data['parentMenuItem'] ? "?" : "''");
- $statement = WCF::getDB()->prepareStatement($sql);
-
- $parameters = array(
- $data['showOrder'],
- $data['menuPosition']
- );
- if ($data['parentMenuItem']) $parameters[] = $data['parentMenuItem'];
-
- $statement->execute($parameters);
-
- // return the wanted showOrder level
- return $data['showOrder'];
- }
- }
-}
<?php
namespace wcf\system\request;
-use wcf\system\menu\page\PageMenu;
/**
* Flexible route implementation to resolve HTTP requests.
$ignoreController = false;
if (!RequestHandler::getInstance()->isACPRequest()) {
- $landingPage = PageMenu::getInstance()->getLandingPage();
+ // TODO
+ //$landingPage = PageMenu::getInstance()->getLandingPage();
+ $landingPage = null;
// check if this is the default controller
if (strcasecmp(RouteHandler::getInstance()->getDefaultController($application), $components['controller']) === 0) {
use wcf\data\DatabaseObjectDecorator;
use wcf\system\application\ApplicationHandler;
use wcf\system\language\LanguageFactory;
-use wcf\system\menu\page\PageMenu;
use wcf\system\Regex;
use wcf\system\SingletonFactory;
use wcf\system\WCF;
namespace wcf\system\request;
use wcf\system\application\ApplicationHandler;
use wcf\system\exception\SystemException;
-use wcf\system\menu\page\PageMenu;
use wcf\system\WCF;
/**
$ignoreController = true;
}
else if (!RequestHandler::getInstance()->isACPRequest()) {
+ /* TODO:
$landingPage = PageMenu::getInstance()->getLandingPage();
if ($landingPage !== null && strcasecmp($landingPage->getController(), $components['controller']) == 0) {
$ignoreController = true;
- }
+ }*/
// check if this is the default controller of the requested application
/*
<item name="wcf.acp.menu.link.package.install"><![CDATA[Paket installieren]]></item>
<item name="wcf.acp.menu.link.package.server.list"><![CDATA[Paket-Server]]></item>
<item name="wcf.acp.menu.link.package.list"><![CDATA[Pakete]]></item>
- <item name="wcf.acp.menu.link.pageMenu"><![CDATA[Seitenmenü]]></item>
- <item name="wcf.acp.menu.link.pageMenu.add"><![CDATA[Menüpunkt hinzufügen]]></item>
- <item name="wcf.acp.menu.link.pageMenu.list"><![CDATA[Menüpunkte]]></item>
<item name="wcf.acp.menu.link.style"><![CDATA[Stile]]></item>
<item name="wcf.acp.menu.link.style.add"><![CDATA[Stil hinzufügen]]></item>
<item name="wcf.acp.menu.link.style.import"><![CDATA[Stil importieren]]></item>
<item name="wcf.acp.paidSubscription.delete.confirmMessage"><![CDATA[Wollen Sie die bezahlte Mitgliedschaft „{$subscription->title|language}“ wirklich löschen?]]></item>
</category>
- <category name="wcf.acp.pageMenu">
- <item name="wcf.acp.pageMenu.add"><![CDATA[Menüpunkt hinzufügen]]></item>
- <item name="wcf.acp.pageMenu.advanced"><![CDATA[Erweitert]]></item>
- <item name="wcf.acp.pageMenu.data"><![CDATA[Allgemein]]></item>
- <item name="wcf.acp.pageMenu.delete.sure"><![CDATA[Wollen Sie den Menüpunkt „{$__menuItem}“ und alle Untermenüpunkte wirklich löschen?]]></item>
- <item name="wcf.acp.pageMenu.edit"><![CDATA[Menüpunkt bearbeiten]]></item>
- <item name="wcf.acp.pageMenu.footer"><![CDATA[Fußzeile]]></item>
- <item name="wcf.acp.pageMenu.header"><![CDATA[Hauptmenü]]></item>
- <item name="wcf.acp.pageMenu.isDisabled"><![CDATA[Menüpunkt deaktivieren]]></item>
- <item name="wcf.acp.pageMenu.landingPage.description"><![CDATA[Sie können mittels Sortierung die Startseite Ihrer Website festlegen, es wird immer der erste Eintrag aus dem Hauptmenü verwendet.]]></item>
- <item name="wcf.acp.pageMenu.link"><![CDATA[Link]]></item>
- <item name="wcf.acp.pageMenu.link.external"><![CDATA[Externer Link]]></item>
- <item name="wcf.acp.pageMenu.link.internal"><![CDATA[Interner Link]]></item>
- <item name="wcf.acp.pageMenu.list"><![CDATA[Menüpunkte auflisten]]></item>
- <item name="wcf.acp.pageMenu.menuItemController"><![CDATA[Controller]]></item>
- <item name="wcf.acp.pageMenu.menuItemController.description"><![CDATA[Sollte die gewünschte Seite in der obigen Auswahl nicht vorhanden sein, können Sie manuell den entsprechenden Controller angeben. Bitte geben Sie dabei den vollständigen Klassennamen inklusive Namespace an, zum Beispiel „wcf\page\DashboardPage“.]]></item>
- <item name="wcf.acp.pageMenu.menuItemController.error.notValid"><![CDATA[Die angegebene Klasse konnte nicht gefunden werden]]></item>
- <item name="wcf.acp.pageMenu.menuItemLink"><![CDATA[Link]]></item>
- <item name="wcf.acp.pageMenu.menuPosition"><![CDATA[Position]]></item>
- <item name="wcf.acp.pageMenu.menuPosition.footer"><![CDATA[Fußzeile]]></item>
- <item name="wcf.acp.pageMenu.menuPosition.header"><![CDATA[Hauptmenü]]></item>
- <item name="wcf.acp.pageMenu.pageMenuItem"><![CDATA[Name]]></item>
- <item name="wcf.acp.pageMenu.parentMenuItem"><![CDATA[Übergeordneter Menüpunkt]]></item>
- <item name="wcf.acp.pageMenu.showOrder"><![CDATA[Reihenfolge]]></item>
- <item name="wcf.acp.pageMenu.menuItemParameters"><![CDATA[Parameter]]></item>
- <item name="wcf.acp.pageMenu.menuItemPage"><![CDATA[Seite]]></item>
- <item name="wcf.acp.pageMenu.menuItemPage.description"><![CDATA[Wählen Sie die interne Seite aus, die Sie verlinken möchten.]]></item>
- </category>
-
<category name="wcf.acp.pluginStore">
<item name="wcf.acp.pluginStore.api.error"><![CDATA[Fehler {@$status}: Der Server konnte die Anfrage nicht erfolgreich bearbeiten.]]></item>
<item name="wcf.acp.pluginStore.api.noSSL"><![CDATA[Die Abfrage der erworbenen Produkte aus dem Plugin-Store kann nur über eine sichere Verbindung erfolgen.<br /><br />Ihre PHP-Version wurde ohne Unterstützung für OpenSSL kompiliert und kann daher keine sicheren Verbindungen aufbauen, bitte wenden Sie sich an Ihren Anbieter oder System-Administrator um diesen Umstand zu korrigieren.]]></item>
<item name="wcf.acp.menu.link.package.install"><![CDATA[Install Package]]></item>
<item name="wcf.acp.menu.link.package.server.list"><![CDATA[Package Servers]]></item>
<item name="wcf.acp.menu.link.package.list"><![CDATA[Packages]]></item>
- <item name="wcf.acp.menu.link.pageMenu"><![CDATA[Page Menu]]></item>
- <item name="wcf.acp.menu.link.pageMenu.add"><![CDATA[Add Menu Item]]></item>
- <item name="wcf.acp.menu.link.pageMenu.list"><![CDATA[Menu Items]]></item>
<item name="wcf.acp.menu.link.style"><![CDATA[Styles]]></item>
<item name="wcf.acp.menu.link.style.add"><![CDATA[Add Style]]></item>
<item name="wcf.acp.menu.link.style.import"><![CDATA[Import Style]]></item>
<item name="wcf.acp.paidSubscription.delete.confirmMessage"><![CDATA[Do you really want to delete the paid subscription “{$subscription->title|language}”?]]></item>
</category>
- <category name="wcf.acp.pageMenu">
- <item name="wcf.acp.pageMenu.add"><![CDATA[Add Menu Item]]></item>
- <item name="wcf.acp.pageMenu.advanced"><![CDATA[Advanced]]></item>
- <item name="wcf.acp.pageMenu.data"><![CDATA[General]]></item>
- <item name="wcf.acp.pageMenu.delete.sure"><![CDATA[Do you really want to delete the menu item “{$__menuItem}” and all its descendants?]]></item>
- <item name="wcf.acp.pageMenu.edit"><![CDATA[Edit Menu Item]]></item>
- <item name="wcf.acp.pageMenu.footer"><![CDATA[Footer]]></item>
- <item name="wcf.acp.pageMenu.header"><![CDATA[Header]]></item>
- <item name="wcf.acp.pageMenu.isDisabled"><![CDATA[Disable menu item]]></item>
- <item name="wcf.acp.pageMenu.landingPage.description"><![CDATA[The first menu item is always the website’s landing page, sort items to change it.]]></item>
- <item name="wcf.acp.pageMenu.link"><![CDATA[Link]]></item>
- <item name="wcf.acp.pageMenu.link.external"><![CDATA[External link]]></item>
- <item name="wcf.acp.pageMenu.link.internal"><![CDATA[Internal link]]></item>
- <item name="wcf.acp.pageMenu.list"><![CDATA[List Menu Items]]></item>
- <item name="wcf.acp.pageMenu.menuItemController"><![CDATA[Controller]]></item>
- <item name="wcf.acp.pageMenu.menuItemController.description"><![CDATA[If a page is not available in the selection above, you can enter the related controller manually. Enter the PHP class name including namespace, e.g. “wcf\page\DashboardPage”.]]></item>
- <item name="wcf.acp.pageMenu.menuItemController.error.notValid"><![CDATA[Unable to find the provided class name]]></item>
- <item name="wcf.acp.pageMenu.menuItemLink"><![CDATA[Link]]></item>
- <item name="wcf.acp.pageMenu.menuPosition"><![CDATA[Position]]></item>
- <item name="wcf.acp.pageMenu.menuPosition.footer"><![CDATA[Footer]]></item>
- <item name="wcf.acp.pageMenu.menuPosition.header"><![CDATA[Header]]></item>
- <item name="wcf.acp.pageMenu.pageMenuItem"><![CDATA[Title]]></item>
- <item name="wcf.acp.pageMenu.parentMenuItem"><![CDATA[Parent Menu Item]]></item>
- <item name="wcf.acp.pageMenu.showOrder"><![CDATA[Display Order]]></item>
- <item name="wcf.acp.pageMenu.menuItemParameters"><![CDATA[Parameters]]></item>
- <item name="wcf.acp.pageMenu.menuItemPage"><![CDATA[Page]]></item>
- <item name="wcf.acp.pageMenu.menuItemPage.description"><![CDATA[Choose the internal page you want to link.]]></item>
- </category>
-
<category name="wcf.acp.pluginStore">
<item name="wcf.acp.pluginStore.api.error"><![CDATA[Error {@$status}: The server was unable to process your request.]]></item>
<item name="wcf.acp.pluginStore.api.noSSL"><![CDATA[Querying the Plugin-Store to fetch the purchased products requires a secure connection.<br /><br />Your PHP version has been compiled without OpenSSL support required to establish secure connections, please contact your hosting company or system-administrator to resolve this shortcoming.]]></item>
UNIQUE KEY (pageID, languageID)
);
-DROP TABLE IF EXISTS wcf1_page_menu_item;
-CREATE TABLE wcf1_page_menu_item (
- menuItemID INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
- packageID INT(10) NOT NULL,
- menuItem VARCHAR(255) NOT NULL DEFAULT '',
- parentMenuItem VARCHAR(255) NOT NULL DEFAULT '',
- menuItemController VARCHAR(255) NOT NULL DEFAULT '',
- menuItemLink VARCHAR(255) NOT NULL DEFAULT '',
- menuPosition ENUM('header', 'footer') NOT NULL DEFAULT 'header',
- showOrder INT(10) NOT NULL DEFAULT 0,
- permissions TEXT NULL,
- options TEXT NULL,
- isDisabled TINYINT(1) NOT NULL DEFAULT 0,
- className VARCHAR(255) NOT NULL DEFAULT '',
- isLandingPage TINYINT(1) NOT NULL DEFAULT 0,
- originIsSystem TINYINT(1) NOT NULL DEFAULT 0,
- UNIQUE KEY (packageID, menuItem)
-);
-
DROP TABLE IF EXISTS wcf1_paid_subscription;
CREATE TABLE wcf1_paid_subscription (
subscriptionID INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
ALTER TABLE wcf1_page_content ADD FOREIGN KEY (pageID) REFERENCES wcf1_page (pageID) ON DELETE CASCADE;
ALTER TABLE wcf1_page_content ADD FOREIGN KEY (languageID) REFERENCES wcf1_language (languageID) ON DELETE CASCADE;
-ALTER TABLE wcf1_page_menu_item ADD FOREIGN KEY (packageID) REFERENCES wcf1_package (packageID) ON DELETE CASCADE;
-
ALTER TABLE wcf1_search ADD FOREIGN KEY (userID) REFERENCES wcf1_user (userID) ON DELETE CASCADE;
ALTER TABLE wcf1_session ADD FOREIGN KEY (userID) REFERENCES wcf1_user (userID) ON DELETE CASCADE;