From: Alexander Ebert Date: Wed, 19 Oct 2011 14:38:23 +0000 (+0200) Subject: Moved collapsible handler into user namespace X-Git-Tag: 2.0.0_Beta_1~1676^2 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=a8e8aa218d63e4cf8b821ad00ece1d3065b521c0;p=GitHub%2FWoltLab%2FWCF.git Moved collapsible handler into user namespace Renamed to reflect the user-related behavior --- diff --git a/wcfsetup/install/files/lib/system/user/UserCollapsibleContentHandler.class.php b/wcfsetup/install/files/lib/system/user/UserCollapsibleContentHandler.class.php deleted file mode 100644 index abc0a8fed3..0000000000 --- a/wcfsetup/install/files/lib/system/user/UserCollapsibleContentHandler.class.php +++ /dev/null @@ -1,182 +0,0 @@ - - * @package com.woltlab.wcf - * @subpackage system.user - * @category Community Framework - */ -class UserCollapsibleContentHandler extends SingletonFactory { - /** - * object type cache - * @var array - */ - protected $cache = null; - - /** - * list of collapsed object ids per object type id - * @var array - */ - protected $collapsedContent = array(); - - /** - * @see wcf\system\SingletonFactory::init() - */ - protected function init() { - $this->cache = array( - 'objectTypes' => array(), - 'objectTypeIDs' => array() - ); - - $objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.collapsibleContent'); - foreach ($objectTypes as $objectType) { - $this->cache['objectTypes'][$objectType->objectTypeID] = $objectType; - $this->cache['objectTypeIDs'][$objectType->objectType] = $objectType->objectTypeID; - } - } - - /** - * Returns the object type id based upon specified object type name. Returns - * null, if object type is unknown. - * - * @param string $objectType - * @return integer - */ - public function getObjectTypeID($objectType) { - if (isset($this->cache['objectTypeIDs'][$objectType])) { - return $this->cache['objectTypeIDs'][$objectType]; - } - - return null; - } - - /** - * Returns a list of object ids being collapsed by current user. - * - * @param integer $objectTypeID - * @return array - */ - public function getCollapsedContent($objectTypeID) { - if (!isset($this->collapsedContent[$objectTypeID])) { - $this->collapsedContent[$objectTypeID] = array(); - - if (WCF::getUser()->userID) { - $sql = "SELECT objectID - FROM wcf".WCF_N."_collapsible_content - WHERE objectTypeID = ? - AND userID = ?"; - $statement = WCF::getDB()->prepareStatement($sql); - $statement->execute(array( - $objectTypeID, - WCF::getUser()->userID - )); - while ($row = $statement->fetchArray()) { - $this->collapsedContent[$objectTypeID][] = $row['objectID']; - } - } - else { - $collapsedContent = WCF::getSession()->getVar('collapsedContent'); - if ($collapsedContent !== null && is_array($collapsedContent)) { - if (isset($collapsedContent[$objectTypeID])) { - $this->collapsedContent[$objectTypeID] = $collapsedContent[$objectTypeID]; - } - } - } - } - - return $this->collapsedContent[$objectTypeID]; - } - - /** - * Marks content as collapsed. - * - * @param integer $objectTypeID - * @param integer $objectID - */ - public function markAsCollapsed($objectTypeID, $objectID) { - if (WCF::getUser()->userID) { - $sql = "SELECT * - FROM wcf".WCF_N."_collapsible_content - WHERE objectTypeID = ? - AND objectID = ? - AND userID = ?"; - $statement = WCF::getDB()->prepareStatement($sql); - $statement->execute(array( - $objectTypeID, - $objectID, - WCF::getUser()->userID - )); - $row = $statement->fetchArray(); - - if (!$row) { - $sql = "INSERT INTO wcf".WCF_N."_collapsible_content - (objectTypeID, objectID, userID) - VALUES (?, ?, ?)"; - $statement = WCF::getDB()->prepareStatement($sql); - $statement->execute(array( - $objectTypeID, - $objectID, - WCF::getUser()->userID - )); - } - } - else { - $collapsedContent = WCF::getSession()->getVar('collapsedContent'); - if ($collapsedContent === null || !is_array($collapsedContent)) { - $collapsedContent = array(); - } - - if (!in_array($objectID, $collapsedContent)) { - $collapsedContent[$objectTypeID] = array(); - } - - $collapsedContent[$objectTypeID][] = $objectID; - WCF::getSession()->register('collapsedContent', $collapsedContent); - } - } - - /** - * Marks content as opened, thus removing the collapsed marking. - * - * @param integer $objectTypeID - * @param integer $objectID - */ - public function markAsOpened($objectTypeID, $objectID) { - if (WCF::getUser()->userID) { - $sql = "DELETE FROM wcf".WCF_N."_collapsible_content - WHERE objectTypeID = ? - AND objectID = ? - AND userID = ?"; - $statement = WCF::getDB()->prepareStatement($sql); - $statement->execute(array( - $objectTypeID, - $objectID, - WCF::getUser()->userID - )); - } - else { - $collapsedContent = WCF::getSession()->getVar('collapsedContent'); - if ($collapsedContent === null || !is_array($collapsedContent)) { - $collapsedContent = array(); - } - - if (isset($collapsedContent[$objectTypeID])) { - foreach ($collapsedContent[$objectTypeID] as $index => $collapsedObjectID) { - if ($collapsedObjectID == $objectID) { - unset($collapsedContent[$objectTypeID][$index]); - } - } - } - - WCF::getSession()->register('collapsedContent', $collapsedContent); - } - } -} diff --git a/wcfsetup/install/files/lib/system/user/collapsible/content/ICollapsibleContentAction.class.php b/wcfsetup/install/files/lib/system/user/collapsible/content/ICollapsibleContentAction.class.php new file mode 100644 index 0000000000..6d80be29d6 --- /dev/null +++ b/wcfsetup/install/files/lib/system/user/collapsible/content/ICollapsibleContentAction.class.php @@ -0,0 +1,24 @@ + + * @package com.woltlab.wcf + * @subpackage system.user.collapsible.content + * @category Community Framework + */ +interface ICollapsibleContentAction { + /** + * Validates required parameters. + */ + public function validateToggleContainer(); + + /** + * Toggles the visibility of container content. + */ + public function toggleContainer(); +} diff --git a/wcfsetup/install/files/lib/system/user/collapsible/content/UserCollapsibleContentHandler.class.php b/wcfsetup/install/files/lib/system/user/collapsible/content/UserCollapsibleContentHandler.class.php new file mode 100644 index 0000000000..6463bf8c16 --- /dev/null +++ b/wcfsetup/install/files/lib/system/user/collapsible/content/UserCollapsibleContentHandler.class.php @@ -0,0 +1,182 @@ + + * @package com.woltlab.wcf + * @subpackage system.user.collapsible.content + * @category Community Framework + */ +class UserCollapsibleContentHandler extends SingletonFactory { + /** + * object type cache + * @var array + */ + protected $cache = null; + + /** + * list of collapsed object ids per object type id + * @var array + */ + protected $collapsedContent = array(); + + /** + * @see wcf\system\SingletonFactory::init() + */ + protected function init() { + $this->cache = array( + 'objectTypes' => array(), + 'objectTypeIDs' => array() + ); + + $objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.collapsibleContent'); + foreach ($objectTypes as $objectType) { + $this->cache['objectTypes'][$objectType->objectTypeID] = $objectType; + $this->cache['objectTypeIDs'][$objectType->objectType] = $objectType->objectTypeID; + } + } + + /** + * Returns the object type id based upon specified object type name. Returns + * null, if object type is unknown. + * + * @param string $objectType + * @return integer + */ + public function getObjectTypeID($objectType) { + if (isset($this->cache['objectTypeIDs'][$objectType])) { + return $this->cache['objectTypeIDs'][$objectType]; + } + + return null; + } + + /** + * Returns a list of object ids being collapsed by current user. + * + * @param integer $objectTypeID + * @return array + */ + public function getCollapsedContent($objectTypeID) { + if (!isset($this->collapsedContent[$objectTypeID])) { + $this->collapsedContent[$objectTypeID] = array(); + + if (WCF::getUser()->userID) { + $sql = "SELECT objectID + FROM wcf".WCF_N."_user_collapsible_content + WHERE objectTypeID = ? + AND userID = ?"; + $statement = WCF::getDB()->prepareStatement($sql); + $statement->execute(array( + $objectTypeID, + WCF::getUser()->userID + )); + while ($row = $statement->fetchArray()) { + $this->collapsedContent[$objectTypeID][] = $row['objectID']; + } + } + else { + $collapsedContent = WCF::getSession()->getVar('collapsedContent'); + if ($collapsedContent !== null && is_array($collapsedContent)) { + if (isset($collapsedContent[$objectTypeID])) { + $this->collapsedContent[$objectTypeID] = $collapsedContent[$objectTypeID]; + } + } + } + } + + return $this->collapsedContent[$objectTypeID]; + } + + /** + * Marks content as collapsed. + * + * @param integer $objectTypeID + * @param integer $objectID + */ + public function markAsCollapsed($objectTypeID, $objectID) { + if (WCF::getUser()->userID) { + $sql = "SELECT * + FROM wcf".WCF_N."_user_collapsible_content + WHERE objectTypeID = ? + AND objectID = ? + AND userID = ?"; + $statement = WCF::getDB()->prepareStatement($sql); + $statement->execute(array( + $objectTypeID, + $objectID, + WCF::getUser()->userID + )); + $row = $statement->fetchArray(); + + if (!$row) { + $sql = "INSERT INTO wcf".WCF_N."_user_collapsible_content + (objectTypeID, objectID, userID) + VALUES (?, ?, ?)"; + $statement = WCF::getDB()->prepareStatement($sql); + $statement->execute(array( + $objectTypeID, + $objectID, + WCF::getUser()->userID + )); + } + } + else { + $collapsedContent = WCF::getSession()->getVar('collapsedContent'); + if ($collapsedContent === null || !is_array($collapsedContent)) { + $collapsedContent = array(); + } + + if (!in_array($objectID, $collapsedContent)) { + $collapsedContent[$objectTypeID] = array(); + } + + $collapsedContent[$objectTypeID][] = $objectID; + WCF::getSession()->register('collapsedContent', $collapsedContent); + } + } + + /** + * Marks content as opened, thus removing the collapsed marking. + * + * @param integer $objectTypeID + * @param integer $objectID + */ + public function markAsOpened($objectTypeID, $objectID) { + if (WCF::getUser()->userID) { + $sql = "DELETE FROM wcf".WCF_N."_user_collapsible_content + WHERE objectTypeID = ? + AND objectID = ? + AND userID = ?"; + $statement = WCF::getDB()->prepareStatement($sql); + $statement->execute(array( + $objectTypeID, + $objectID, + WCF::getUser()->userID + )); + } + else { + $collapsedContent = WCF::getSession()->getVar('collapsedContent'); + if ($collapsedContent === null || !is_array($collapsedContent)) { + $collapsedContent = array(); + } + + if (isset($collapsedContent[$objectTypeID])) { + foreach ($collapsedContent[$objectTypeID] as $index => $collapsedObjectID) { + if ($collapsedObjectID == $objectID) { + unset($collapsedContent[$objectTypeID][$index]); + } + } + } + + WCF::getSession()->register('collapsedContent', $collapsedContent); + } + } +} diff --git a/wcfsetup/setup/db/install.sql b/wcfsetup/setup/db/install.sql index f91162fb3f..94e0b5c36f 100644 --- a/wcfsetup/setup/db/install.sql +++ b/wcfsetup/setup/db/install.sql @@ -133,14 +133,6 @@ CREATE TABLE wcf1_clipboard_page ( actionID INT(10) NOT NULL DEFAULT 0 ); -DROP TABLE IF EXISTS wcf1_collapsible_content; -CREATE TABLE wcf1_collapsible_content ( - objectTypeID INT(10) NOT NULL, - objectID INT(10) NOT NULL, - userID INT(10) NOT NULL, - UNIQUE KEY (objectTypeID, objectID, userID) -); - DROP TABLE IF EXISTS wcf1_core_object; CREATE TABLE wcf1_core_object ( objectID INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, @@ -616,6 +608,14 @@ CREATE TABLE wcf1_user ( KEY styleID (styleID) ); +DROP TABLE IF EXISTS wcf1_user_collapsible_content; +CREATE TABLE wcf1_user_collapsible_content ( + objectTypeID INT(10) NOT NULL, + objectID INT(10) NOT NULL, + userID INT(10) NOT NULL, + UNIQUE KEY (objectTypeID, objectID, userID) +); + DROP TABLE IF EXISTS wcf1_user_group; CREATE TABLE wcf1_user_group ( groupID INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, @@ -758,9 +758,6 @@ ALTER TABLE wcf1_clipboard_item_type ADD FOREIGN KEY (packageID) REFERENCES wcf1 ALTER TABLE wcf1_clipboard_page ADD FOREIGN KEY (actionID) REFERENCES wcf1_clipboard_action (actionID) ON DELETE CASCADE; ALTER TABLE wcf1_clipboard_page ADD FOREIGN KEY (packageID) REFERENCES wcf1_package (packageID) ON DELETE CASCADE; -ALTER TABLE wcf1_collapsible_content ADD FOREIGN KEY (objectTypeID) REFERENCES wcf1_object_type (objectTypeID) ON DELETE CASCADE; -ALTER TABLE wcf1_collapsible_content ADD FOREIGN KEY (userID) REFERENCES wcf1_user (userID) ON DELETE CASCADE; - ALTER TABLE wcf1_core_object ADD FOREIGN KEY (packageID) REFERENCES wcf1_package (packageID) ON DELETE CASCADE; ALTER TABLE wcf1_cronjob ADD FOREIGN KEY (packageID) REFERENCES wcf1_package (packageID) ON DELETE CASCADE; @@ -845,6 +842,9 @@ ALTER TABLE wcf1_template ADD FOREIGN KEY (templateGroupID) REFERENCES wcf1_temp ALTER TABLE wcf1_template_listener ADD FOREIGN KEY (packageID) REFERENCES wcf1_package (packageID) ON DELETE CASCADE; +ALTER TABLE wcf1_user_collapsible_content ADD FOREIGN KEY (objectTypeID) REFERENCES wcf1_object_type (objectTypeID) ON DELETE CASCADE; +ALTER TABLE wcf1_user_collapsible_content ADD FOREIGN KEY (userID) REFERENCES wcf1_user (userID) ON DELETE CASCADE; + ALTER TABLE wcf1_user_group_option ADD FOREIGN KEY (packageID) REFERENCES wcf1_package (packageID) ON DELETE CASCADE; ALTER TABLE wcf1_user_group_option_category ADD FOREIGN KEY (packageID) REFERENCES wcf1_package (packageID) ON DELETE CASCADE;