2 namespace wcf\data\page\menu\item
;
3 use wcf\data\DatabaseObjectEditor
;
4 use wcf\data\EditableCachedObject
;
5 use wcf\system\cache\CacheHandler
;
9 * Provides functions to edit page menu items.
11 * @author Alexander Ebert
12 * @copyright 2001-2011 WoltLab GmbH
13 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
14 * @package com.woltlab.wcf
15 * @subpackage data.page.menu.item
16 * @category Community Framework
18 class PageMenuItemEditor
extends DatabaseObjectEditor
implements EditableCachedObject
{
20 * @see DatabaseObjectEditor::$baseClass
22 protected static $baseClass = 'wcf\data\page\menu\item\PageMenuItem';
25 * @see EditableObject::create()
27 * @todo Handle language id and create related language item
29 public static function create(array $parameters = array()) {
30 // calculate show order
31 $parameters['showOrder'] = self
::getShowOrder($parameters['showOrder'], $parameters['menuPosition']);
33 return parent
::create($parameters);
37 * @see EditableObject::update()
39 * @todo Handle language id and update related language item
41 public function update(array $parameters = array()) {
42 if (isset($parameters['menuPosition']) && isset($parameters['showOrder'])) {
43 $this->updateShowOrder($parameters['showOrder'], $parameters['menuPosition']);
46 parent
::update($parameters);
50 * @see EditableObject::delete()
52 public function delete() {
54 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
55 SET showOrder = showOrder - 1
57 AND menuPosition = ?";
58 $statement = WCF
::getDB()->prepareStatement($sql);
59 $statement->execute(array(
68 * Updates the positions of a page menu item directly.
70 * @param integer $menuItemID
71 * @param string $menuPosition
72 * @param integer $showOrder
74 public static function setShowOrder($menuItemID, $menuPosition = 'header', $showOrder = 1) {
76 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
79 WHERE menuItemID = ?";
80 $statement = WCF
::getDB()->prepareStatement($sql);
81 $statement->execute(array(
89 * Updates show order for current menu item.
91 * @param integer $showOrder
92 * @param string $menuPosition
94 protected function updateShowOrder($showOrder, $menuPosition) {
95 if ($menuPosition == $this->menuPosition
) {
96 if ($this->showOrder
!= $showOrder) {
97 if ($showOrder < $this->showOrder
) {
98 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
99 SET showOrder = showOrder + 1
102 AND menuPosition = ?";
103 $statement = WCF
::getDB()->prepareStatement($sql);
104 $statement->execute(array(
110 else if ($showOrder > $this->showOrder
) {
111 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
112 SET showOrder = showOrder - 1
115 AND menuPosition = ?";
116 $statement = WCF
::getDB()->prepareStatement($sql);
117 $statement->execute(array(
126 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
127 SET showOrder = showOrder - 1
129 AND menuPosition = ?";
130 $statement = WCF
::getDB()->prepareStatement($sql);
131 $statement->execute(array(
136 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
137 SET showOrder = showOrder + 1
139 AND menuPosition = ?";
140 $statement = WCF
::getDB()->prepareStatement($sql);
141 $statement->execute(array(
149 * Returns show order for a new menu item.
151 * @param integer $showOrder
152 * @param string $menuPosition
155 protected static function getShowOrder($showOrder, $menuPosition) {
156 if ($showOrder == 0) {
157 // get next number in row
158 $sql = "SELECT MAX(showOrder) AS showOrder
159 FROM wcf".WCF_N
."_page_menu_item
160 WHERE menuPosition = ?";
161 $statement = WCF
::getDB()->prepareStatement($sql);
162 $statement->execute(array($menuPosition));
163 $row = $statement->fetchArray();
164 if (!empty($row)) $showOrder = intval($row['showOrder']) +
1;
168 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
169 SET showOrder = showOrder + 1
171 AND menuPosition = ?";
172 $statement = WCF
::getDB()->prepareStatement($sql);
173 $statement->execute(array(
183 * Clears the page menu cache.
185 public static function resetCache() {
186 CacheHandler
::getInstance()->clear(WCF_DIR
.'cache', 'cache.pageMenu-*.php');