Add trophy category object
authorJoshua Rüsweg <josh@bastelstu.be>
Wed, 28 Jun 2017 13:46:28 +0000 (15:46 +0200)
committerJoshua Rüsweg <josh@bastelstu.be>
Wed, 28 Jun 2017 13:46:28 +0000 (15:46 +0200)
See #2315

com.woltlab.wcf/objectType.xml
wcfsetup/install/files/lib/data/trophy/category/TrophyCategory.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/data/trophy/category/TrophyCategoryCache.class.php [new file with mode: 0644]

index f2eb5de0bc3473d1b96beedbd8b08627f18e9586..c6ecef933cda784642da2319a03146dd042b05bb 100644 (file)
                </type>
                <!-- /sitemap -->
                
+               <!-- trophy -->
+               <type>
+                       <name>com.woltlab.wcf.trophy.category</name>
+                       <definitionname>com.woltlab.wcf.category</definitionname>
+                       <classname>wcf\system\category\TrophyCategoryType</classname>
+               </type>
+               <!-- /trophy -->
+               
                <!-- deprecated -->
                <type>
                        <name>com.woltlab.wcf.page.controller</name>
diff --git a/wcfsetup/install/files/lib/data/trophy/category/TrophyCategory.class.php b/wcfsetup/install/files/lib/data/trophy/category/TrophyCategory.class.php
new file mode 100644 (file)
index 0000000..a47df07
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+namespace wcf\data\trophy\category;
+use wcf\data\category\AbstractDecoratedCategory;
+use wcf\data\trophy\Trophy;
+use wcf\data\trophy\TrophyCache;
+use wcf\data\user\User;
+use wcf\data\ITitledLinkObject;
+use wcf\system\request\LinkHandler;
+use wcf\system\WCF;
+
+/**
+ * Represents a trophy category.
+ *
+ * @author     Joshua Ruesweg
+ * @copyright  2001-2017 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    WoltLabSuite\Core\Data\Trophy\Category
+ * @since      3.1
+ *
+ * @method             TrophyCategory[]        getChildCategories()
+ * @method             TrophyCategory[]        getAllChildCategories()
+ * @method             TrophyCategory          getParentCategory()
+ * @method             TrophyCategory[]        getParentCategories()
+ * @method static      TrophyCategory|null     getCategory($categoryID)
+ */
+class TrophyCategory extends AbstractDecoratedCategory implements ITitledLinkObject {
+       /**
+        * object type name of the trophy categories
+        * @var string
+        */
+       const OBJECT_TYPE_NAME = 'com.woltlab.wcf.trophy.category';
+       
+       /**
+        * @inheritDoc
+        */
+       public function isAccessible(User $user = null) {
+               if ($this->getObjectType()->objectType != self::OBJECT_TYPE_NAME) return false;
+               
+               if ($this->getDecoratedObject()->isDisabled) {
+                       return false; 
+               }
+               
+               return true; 
+       }
+       
+       /**
+        * @inheritDoc
+        */
+       public function getLink() {
+               return LinkHandler::getInstance()->getLink('TrophyList', [
+                       'forceFrontend' => true,
+                       'object' => $this->getDecoratedObject()
+               ]);
+       }
+       
+       /** @noinspection PhpMissingParentCallCommonInspection */
+       /**
+        * @inheritDoc
+        */
+       public function getTitle() {
+               return WCF::getLanguage()->get($this->title);
+       }
+}
diff --git a/wcfsetup/install/files/lib/data/trophy/category/TrophyCategoryCache.class.php b/wcfsetup/install/files/lib/data/trophy/category/TrophyCategoryCache.class.php
new file mode 100644 (file)
index 0000000..a1f320c
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+namespace wcf\data\trophy\category;
+use wcf\system\cache\builder\CategoryCacheBuilder;
+use wcf\system\SingletonFactory;
+
+/**
+ * Trophy category cache management.
+ *
+ * @author     Joshua Ruesweg
+ * @copyright  2001-2017 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    WoltLabSuite\Core\Data\Trophy\Category
+ * @since      3.1
+ */
+class TrophyCategoryCache extends SingletonFactory {
+       /**
+        * All categories for trophies. 
+        * @var TrophyCategory[]
+        */
+       protected $categories = [];
+       
+       /**
+        * All enabled categories for trophies.
+        * @var TrophyCategory[]
+        */
+       protected $enabledCategories = [];
+       
+       /**
+        * @inheritDoc
+        */
+       public function init() {
+               $categoryData = CategoryCacheBuilder::getInstance()->getData();
+               if (isset($categoryData['objectTypeCategoryIDs'][TrophyCategory::OBJECT_TYPE_NAME])) {
+                       $categoryIDs = $categoryData['objectTypeCategoryIDs'][TrophyCategory::OBJECT_TYPE_NAME];
+                       
+                       foreach ($categoryIDs as $categoryID) {
+                               $this->categories[$categoryID] = new TrophyCategory($categoryData['categories'][$categoryID]);
+                               
+                               if (!$categoryData['categories'][$categoryID]->isDisabled) {
+                                       $this->enabledCategories[$categoryID] = $this->categories[$categoryID];
+                               }
+                       }
+               }
+       }
+       
+       /**
+        * Returns the trophy category with the given id.
+        *
+        * @param       integer         $categoryID
+        * @return      TrophyCategory|null
+        */
+       public function getCategoryByID($categoryID) {
+               if (isset($this->categories[$categoryID])) {
+                       return $this->categories[$categoryID];
+               }
+               
+               return null;
+       }
+       
+       /**
+        * Returns the categories with the given id.
+        *
+        * @param       integer[]       $categoryID
+        * @return      TrophyCategory[]
+        */
+       public function getCategoriesByID(array $categoryID) {
+               $returnValues = [];
+               
+               foreach ($categoryID as $categoryID) {
+                       $returnValues[] = $this->getCategoryByID($categoryID);
+               }
+               
+               return $returnValues;
+       }
+       
+       /**
+        * Return all categories.
+        *
+        * @return      TrophyCategory[]
+        */
+       public function getCategories() {
+               return $this->categories;
+       }
+       
+       /**
+        * Return all enabled categories.
+        *
+        * @return      TrophyCategory[]
+        */
+       public function getEnabledCategories() {
+               return $this->enabledCategories;
+       }
+}