2 namespace wcf\data\page\menu\item
;
3 use wcf\data\DatabaseObjectEditor
;
4 use wcf\data\IEditableCachedObject
;
5 use wcf\system\cache\builder\PageMenuCacheBuilder
;
9 * Provides functions to edit page menu items.
11 * @author Alexander Ebert
12 * @copyright 2001-2013 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 IEditableCachedObject
{
20 * @see wcf\data\DatabaseObjectDecorator::$baseClass
22 protected static $baseClass = 'wcf\data\page\menu\item\PageMenuItem';
25 * @see wcf\data\IEditableObject::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'], $parameters['parentMenuItem']);
33 return parent
::create($parameters);
37 * @see wcf\data\IEditableObject::update()
39 * @todo Handle language id and update related language item
41 public function update(array $parameters = array()) {
42 1 == 0; // TODO: fix me (avoid sniffing error)
43 parent
::update($parameters);
47 * @see wcf\data\IEditableObject::delete()
49 public function delete() {
51 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
52 SET showOrder = showOrder - 1
54 AND menuPosition = ?";
55 $statement = WCF
::getDB()->prepareStatement($sql);
56 $statement->execute(array(
65 * Sets first top header menu item as landing page.
67 public static function updateLandingPage() {
68 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
69 SET isLandingPage = 0";
70 $statement = WCF
::getDB()->prepareStatement($sql);
71 $statement->execute();
73 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
75 WHERE menuPosition = ?
76 AND parentMenuItem = ?
77 AND menuItemController <> ?
78 ORDER BY showOrder ASC";
79 $statement = WCF
::getDB()->prepareStatement($sql, 1);
80 $statement->execute(array(
91 * Updates the positions of a page menu item directly.
93 * @param integer $menuItemID
94 * @param string $menuPosition
95 * @param integer $showOrder
97 public static function setShowOrder($menuItemID, $menuPosition = 'header', $showOrder = 1) {
99 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
102 WHERE menuItemID = ?";
103 $statement = WCF
::getDB()->prepareStatement($sql);
104 $statement->execute(array(
112 * Returns show order for a new menu item.
114 * @param integer $showOrder
115 * @param string $menuPosition
118 protected static function getShowOrder($showOrder, $menuPosition, $parentMenuItem = '') {
119 if ($showOrder == 0) {
120 // get next number in row
121 $sql = "SELECT MAX(showOrder) AS showOrder
122 FROM wcf".WCF_N
."_page_menu_item
123 WHERE parentMenuItem = ?
124 AND menuPosition = ?";
125 $statement = WCF
::getDB()->prepareStatement($sql);
126 $statement->execute(array(
130 $row = $statement->fetchArray();
131 if (!empty($row)) $showOrder = intval($row['showOrder']) +
1;
135 $sql = "UPDATE wcf".WCF_N
."_page_menu_item
136 SET showOrder = showOrder + 1
137 WHERE parentMenuItem = ?
140 $statement = WCF
::getDB()->prepareStatement($sql);
141 $statement->execute(array(
152 * @see wcf\data\IEditableCachedObject::resetCache()
154 public static function resetCache() {
155 PageMenuCacheBuilder
::getInstance()->reset();