Major overhaul of caching system (work in progress)
authorAlexander Ebert <ebert@woltlab.com>
Sun, 3 Feb 2013 23:58:22 +0000 (00:58 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Sun, 3 Feb 2013 23:58:22 +0000 (00:58 +0100)
See #1124

29 files changed:
wcfsetup/install/files/lib/system/cache/builder/ACLOptionCategoryCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/ACPMenuCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/ACPSearchProviderCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/ApplicationCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/CategoryACLOptionCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/CategoryCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/CleanupAdapterCacheBuilder.class.php [deleted file]
wcfsetup/install/files/lib/system/cache/builder/ClipboardActionCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/ClipboardPageCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/CoreObjectCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/CronjobCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/EventListenerCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/LanguageCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/ObjectTypeCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/OptionCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/PackageCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/PageMenuCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/SitemapCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/SpiderCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/StyleCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/TemplateCacheBuilder.class.php [deleted file]
wcfsetup/install/files/lib/system/cache/builder/TemplateGroupCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/TemplateListenerCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/TemplateListenerCodeCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/UserGroupCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/UserGroupOptionCacheBuilder.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/cache/builder/UserGroupPermissionCacheBuilder.class.php
wcfsetup/install/files/lib/system/cache/builder/UserOptionCacheBuilder.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/cache/builder/VersionCacheBuilder.class.php

index 4b6bf9df599bfaedf613abc770705bebccdd2d64..d3d156533a7896a150650b8a5fe5fbca5d7a40ac 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\acl\option\category\ACLOptionCategoryList;
  * Caches the acl categories for a certain package.
  * 
  * @author     Matthias Schmidt
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 ACLOptionCategoryCacheBuilder implements ICacheBuilder {
+class ACLOptionCategoryCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $list = new ACLOptionCategoryList();
                $list->readObjects();
                
index 829971ac149b84b0f1e7398c4ca821f2319e3227..edcbf5b4b69f4f5a00d11997c64cc5d7440ac1d6 100644 (file)
@@ -11,13 +11,13 @@ use wcf\system\request\LinkHandler;
  * Caches the ACP menu items.
  * 
  * @author     Matthias Schmidt, Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 ACPMenuCacheBuilder implements ICacheBuilder {
+class ACPMenuCacheBuilder extends AbstractCacheBuilder {
        /**
         * list of option categories which directly contain options
         * @var array<string>
@@ -31,9 +31,9 @@ class ACPMenuCacheBuilder implements ICacheBuilder {
        protected $categoryStructure = array();
        
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) { 
+       public function rebuild(array $parameters) { 
                $data = array();
                
                // get "real" menu items
index 1ceefce60d6e9e5794804beb95d6fded3ae7e5ad..222b7c0f7873f52f86364d49a8fdce5b27559f3d 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\acp\search\provider\ACPSearchProviderList;
  * Caches the ACP search providers.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 ACPSearchProviderCacheBuilder implements ICacheBuilder {
+class ACPSearchProviderCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $providerList = new ACPSearchProviderList();
                $providerList->sqlOrderBy = "acp_search_provider.showOrder ASC";
                $providerList->readObjects();
index d5cefaa718b8d6ddf8f2ed677fc2dbdccf27da38..96bc91056526c940c9d00d0fdbd8037d57833fd0 100644 (file)
@@ -8,17 +8,17 @@ use wcf\data\package\PackageList;
  * Caches applications.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 ApplicationCacheBuilder implements ICacheBuilder {
+class ApplicationCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array(
                        'abbreviation' => array(),
                        'application' => array(),
index b99d6e135dd3416008147cb76c32d2ee191aa231..30c5e04a44a172c78f8b1b022e4a6637915bd870 100644 (file)
@@ -7,17 +7,17 @@ use wcf\system\category\CategoryHandler;
  * Caches the acl options of categories.
  *
  * @author     Matthias Schmidt
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 CategoryACLOptionCacheBuilder implements ICacheBuilder {
+class CategoryACLOptionCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array();
                foreach (CategoryHandler::getInstance()->getCategories() as $objectTypeName => $categories) {
                        $objectType = CategoryHandler::getInstance()->getObjectTypeByName($objectTypeName);
index 2616eeaf3253671d0f187205295d8c267c0dd718..e272e362c8b3b07a82b3f371bc0e406ab17bab76 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\category\CategoryList;
  * Caches the categories for the active application.
  * 
  * @author     Matthias Schmidt
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 CategoryCacheBuilder implements ICacheBuilder {
+class CategoryCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $list = new CategoryList();
                $list->sqlSelects = "object_type.objectType";
                $list->sqlJoins = "LEFT JOIN wcf".WCF_N."_object_type object_type ON (object_type.objectTypeID = category.objectTypeID)";
diff --git a/wcfsetup/install/files/lib/system/cache/builder/CleanupAdapterCacheBuilder.class.php b/wcfsetup/install/files/lib/system/cache/builder/CleanupAdapterCacheBuilder.class.php
deleted file mode 100644 (file)
index c8ae3ce..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-namespace wcf\system\cache\builder;
-use wcf\system\WCF;
-
-/**
- * Caches cleanup adapters.
- * 
- * @author     Alexander Ebert
- * @copyright  2001-2011 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 CleanupAdapterCacheBuilder implements ICacheBuilder {
-       /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
-        */
-       public function getData(array $cacheResource) {
-               $data = array(
-                       'adapters' => array(),
-                       'objectTypes' => array(),
-                       'packageIDs' => array()
-               );
-               
-               $sql = "SELECT          listener.*, package.packageDir
-                       FROM            wcf".WCF_N."_cleanup_listener listener
-                       LEFT JOIN       wcf".WCF_N."_package package
-                       ON              (package.packageID = listener.packageID)";
-               $statement = WCF::getDB()->prepareStatement($sql);
-               $statement->execute();
-               while ($row = $statement->fetchArray()) {
-                       if (!is_array($data['adapters'][$row['objectType']])) $data['adapters'][$row['objectType']] = array();
-                       $data['adapters'][$row['objectType']][] = $row;
-                       
-                       if (!is_array($data['objectTypes'][$row['objectType']])) $data['objectTypes'][$row['objectType']] = array();
-                       $data['objectTypes'][$row['objectType']][] = $row['packageID'];
-               }
-               
-               $data['objectTypes'] = array_unique($data['objectTypes']);
-               $data['packageIDs'] = array_unique($data['packageIDs']);
-               
-               return $data;
-       }
-}
index 53550d6ec5f4a9d9356c253b68ca5f3eedd7b3c0..7c613ea0d15953980d7b4f78c0f455247079cf8e 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\clipboard\action\ClipboardActionList;
  * Caches clipboard actions.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 ClipboardActionCacheBuilder implements ICacheBuilder {
+class ClipboardActionCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $actionList = new ClipboardActionList();
                $actionList->readObjects();
                
index eeede22ee11f54beec0328b9c265a0f78c81a0e4..3d1c8be374079e5f6b7e3f5e5eb30f24ce428ff9 100644 (file)
@@ -6,17 +6,17 @@ use wcf\system\WCF;
  * Caches clipboard pages.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 ClipboardPageCacheBuilder implements ICacheBuilder {
+class ClipboardPageCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $sql = "SELECT  pageClassName, actionID
                        FROM    wcf".WCF_N."_clipboard_page";
                $statement = WCF::getDB()->prepareStatement($sql);
index 36ae1b99c1beba3aaf26dce27b6059d71c107145..4af26d90040372653fc25f403cfd8518cd2a2f4a 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\core\object\CoreObjectList;
  * Caches the core objects.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 CoreObjectCacheBuilder implements ICacheBuilder {
+class CoreObjectCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array();
                
                $coreObjectList = new CoreObjectList();
index f4dd35be827a104e9edb229c278cd5bb46e6a7c4..1df0ffd9ddb86a3bd6ce3b0fab2e3306ead5a006 100644 (file)
@@ -6,17 +6,17 @@ use wcf\system\WCF;
  * Caches cronjob information.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 CronjobCacheBuilder implements ICacheBuilder {
+class CronjobCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $sql = "SELECT          MIN(nextExec) AS nextExec,
                                        MIN(afterNextExec) AS afterNextExec
                        FROM            wcf".WCF_N."_cronjob";
index 7768ca1b9738a28506183cf424e609e3148a4062..f202e77d3ea9efccb9174dadbc07b1920811d37a 100644 (file)
@@ -7,17 +7,17 @@ use wcf\system\WCF;
  * Caches the event listeners.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 EventListenerCacheBuilder implements ICacheBuilder {
+class EventListenerCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array(
                        'actions' => array('user' => array(), 'admin' => array()),
                        'inheritedActions' => array('user' => array(), 'admin' => array())
index 5dbbd6ab2dfa782e9d229024e9c62cda4d0dec35..1a90d52ad16b91627cb3563b8c3f593947328c20 100644 (file)
@@ -6,21 +6,20 @@ use wcf\data\DatabaseObject;
 use wcf\system\WCF;
 
 /**
- * Caches languages, language to packages relation, package to languages relation
- * and the id of the default language. 
+ * Caches languages and the id of the default language. 
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 LanguageCacheBuilder implements ICacheBuilder {
+class LanguageCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array(
                        'codes' => array(),
                        'countryCodes' => array(),
index 6ba7adca8cd2ac9949dd9aa67aff283eb959c650..7fd7c5f1696045ac36b88dc897b54d3df7a19df5 100644 (file)
@@ -8,17 +8,17 @@ use wcf\system\WCF;
  * Caches object types and object type definitions.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 ObjectTypeCacheBuilder implements ICacheBuilder {
+class ObjectTypeCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array(
                        'categories' => array(),
                        'definitions' => array(),
index 8239b3e5c4504d0f3d0b5a9648199a9a27b1cf64..d89358db9cf5f3aaa86975bd065f411841f8bd80 100644 (file)
@@ -6,36 +6,32 @@ use wcf\system\Regex;
 use wcf\system\WCF;
 
 /**
- * Caches the options and option categories
+ * Caches options and option categories
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 OptionCacheBuilder implements ICacheBuilder {
+class OptionCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * option class name
+        * @var string
         */
-       public function getData(array $cacheResource) {
-               $tableName = '';
-               $type = $cacheResource['cache'];
-               
-               $regEx = new Regex('((?:^|[A-Z])[a-z]+)');
-               $regEx->match($cacheResource['cache'], true);
-               $matches = $regEx->getMatches();
-               if (isset($matches[1])) {
-                       for ($i = 0, $length = count($matches[1]); $i < $length; $i++) {
-                               if (!empty($tableName)) {
-                                       $tableName .= '_';
-                               }
-                               
-                               $tableName .= strtolower($matches[1][$i]);
-                       }
-               }
-               
+       protected $optionClassName = 'wcf\data\option\Option';
+       
+       /**
+        * database table name
+        * @var string
+        */
+       protected $tableName = 'option';
+       
+       /**
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
+        */
+       public function rebuild(array $parameters) {
                $data = array(
                        'categories' => array(),
                        'options' => array(),
@@ -46,7 +42,7 @@ class OptionCacheBuilder implements ICacheBuilder {
                // option categories
                // get all option categories and sort categories by priority
                $sql = "SELECT  categoryName, categoryID 
-                       FROM    wcf".WCF_N."_".$tableName."_category";
+                       FROM    wcf".WCF_N."_".$this->tableName."_category";
                $statement = WCF::getDB()->prepareStatement($sql);
                $statement->execute();
                $optionCategories = array();
@@ -60,7 +56,7 @@ class OptionCacheBuilder implements ICacheBuilder {
                        $conditions->add("categoryID IN (?)", array($optionCategories));
                        
                        $sql = "SELECT          option_category.*, package.packageDir
-                               FROM            wcf".WCF_N."_".$tableName."_category option_category
+                               FROM            wcf".WCF_N."_".$this->tableName."_category option_category
                                LEFT JOIN       wcf".WCF_N."_package package
                                ON              (package.packageID = option_category.packageID)
                                ".$conditions."
@@ -81,7 +77,7 @@ class OptionCacheBuilder implements ICacheBuilder {
                // get all options and sort options by priority
                $optionIDs = array();
                $sql = "SELECT          optionName, optionID 
-                       FROM            wcf".WCF_N."_".$tableName;
+                       FROM            wcf".WCF_N."_".$this->tableName;
                $statement = WCF::getDB()->prepareStatement($sql);
                $statement->execute();
                while ($row = $statement->fetchArray()) {
@@ -89,33 +85,19 @@ class OptionCacheBuilder implements ICacheBuilder {
                }
                
                if (!empty($optionIDs)) {
-                       // get option class from type
-                       $className = 'wcf\data\option\Option';
-                       if (!empty($type)) {
-                               // strip trailing underscore
-                               preg_match_all('~((?:^|[A-Z])[a-z]+)~', $type, $matches);
-                               
-                               if (isset($matches[1])) {
-                                       $className = 'wcf\data\\';
-                                       for ($i = 0, $length = count($matches[1]); $i < $length; $i++) {
-                                               $className .= strtolower($matches[1][$i] . '\\');
-                                       }
-                                       $className .= ucfirst($type);
-                               }
-                       }
-                       
                        // get needed options
                        $conditions = new PreparedStatementConditionBuilder();
                        $conditions->add("optionID IN (?)", array($optionIDs));
                        
                        $sql = "SELECT          *
-                               FROM            wcf".WCF_N."_".$tableName."
+                               FROM            wcf".WCF_N."_".$this->tableName."
                                ".$conditions."
                                ORDER BY        showOrder ASC";
                        $statement = WCF::getDB()->prepareStatement($sql);
                        $statement->execute($conditions->getParameters());
+                       $optionClassName = $this->optionClassName;
                        while ($row = $statement->fetchArray()) {
-                               $data['options'][$row['optionName']] = new $className(null, $row);
+                               $data['options'][$row['optionName']] = new $optionClassName(null, $row);
                                if (!isset($data['optionToCategories'][$row['categoryName']])) {
                                        $data['optionToCategories'][$row['categoryName']] = array();
                                }
index 42a71db69cf9e29b28de8f1cd4c24ea29f5edb2a..61b6208977564b8e6b7e4962790be870a371d313 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\package\PackageList;
  * Caches all installed packages.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 PackageCacheBuilder implements ICacheBuilder {
+class PackageCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array(
                        'packages' => array(),
                        'packageIDs' => array()
index 3664a083477a0e6ee8902e5836bdec5c4e5da605..29503a1b0506be774f82de28ea8f0417ee09010a 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\page\menu\item\PageMenuItemList;
  * Caches the page menu items.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 implements ICacheBuilder {
+class PageMenuCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) { 
+       public function rebuild(array $parameters) { 
                $data = array();
                
                $menuItemList = new PageMenuItemList();
index 53fb8b7f6fdf5be56b511cab7770f6780382ce8e..505b8d37d464073752d3639a005f6e2562d01e41 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\sitemap\SitemapList;
  * Caches sitemap structure.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 SitemapCacheBuilder implements ICacheBuilder {
+class SitemapCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $sitemapList = new SitemapList();
                $sitemapList->sqlOrderBy = "sitemap.showOrder ASC";
                $sitemapList->readObjects();
index b3967f3619c81da241d3f34f357315e0ebb773d9..6d765d4b2dba2df1b36a52d79a225263fecf9f66 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\spider\SpiderList;
  * Caches the list of search engine spiders.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 SpiderCacheBuilder implements ICacheBuilder {
+class SpiderCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $spiderList = new SpiderList();
                $spiderList->sqlOrderBy = "spider.spiderID ASC";
                $spiderList->readObjects();
index 0972ccb9beec62869228892c5b548d46f034ab84..815178ef0577acc31512bc7a26a31b08149802f4 100644 (file)
@@ -7,17 +7,17 @@ use wcf\system\WCF;
  * Caches the styles and style variables.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 StyleCacheBuilder implements ICacheBuilder {
+class StyleCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array(
                        'default' => 0,
                        'styles' => array()
diff --git a/wcfsetup/install/files/lib/system/cache/builder/TemplateCacheBuilder.class.php b/wcfsetup/install/files/lib/system/cache/builder/TemplateCacheBuilder.class.php
deleted file mode 100644 (file)
index 4b4e462..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-namespace wcf\system\cache\builder;
-use wcf\system\WCF;
-
-/**
- * Caches the structure of templates.
- * 
- * @author     Marcel Werk
- * @copyright  2001-2012 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 TemplateCacheBuilder implements ICacheBuilder {
-       /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
-        */
-       public function getData(array $cacheResource) {
-               $information = explode('-', $cacheResource['cache']);
-               if (count($information) == 3) {
-                       $prefix = $information[0].'_';
-               }
-               else {
-                       $prefix = '';
-               }
-               
-               $data = array();
-               
-               // get all templates and filter options with low priority
-               $sql = "SELECT          templateName, template.packageID 
-                       FROM            wcf".WCF_N."_".$prefix."template";
-               $statement = WCF::getDB()->prepareStatement($sql);
-               $statement->execute();
-               while ($row = $statement->fetchArray()) {
-                       if (!isset($data[$row['templateName']])) {
-                               $data[$row['templateName']] = $row['packageID'];
-                       }
-               }
-               
-               return $data;
-       }
-}
index 2f675190915f89ef84d93e4c825f00e19f97970c..a85108ddd61f115edc1d4c38d6d4b55153acdae6 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\template\group\TemplateGroupList;
  * Caches template groups.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 TemplateGroupCacheBuilder implements ICacheBuilder {
+class TemplateGroupCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $templateGroupList = new TemplateGroupList();
                $templateGroupList->readObjects();
                
index 624885670f685e695f1ac1d837c34fd0ca94a1a6..72e3133c2058b0e157f8791d69f6ceb92eace1cf 100644 (file)
@@ -6,22 +6,20 @@ use wcf\data\template\listener\TemplateListenerList;
  * Caches template listener information.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 TemplateListenerCacheBuilder implements ICacheBuilder {
+class TemplateListenerCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
-               list(, $environment) = explode('-', $cacheResource['cache']);
-               
+       public function rebuild(array $parameters) {
                // get templates for current package id
                $templateListenerList = new TemplateListenerList();
-               $templateListenerList->getConditionBuilder()->add("template_listener.environment = ?", array($environment));
+               $templateListenerList->getConditionBuilder()->add("template_listener.environment = ?", array($parameters['environment']));
                $templateListenerList->readObjects();
                
                $data = array();
index 19328b959410ced9881c2ba65ea3790d3d33ce3f..f90b7792d8f063e4084006a0da7a6ea5d4077ff5 100644 (file)
@@ -6,23 +6,21 @@ use wcf\data\template\listener\TemplateListenerList;
  * Caches the template listener code for a certain template in a certain environment.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 TemplateListenerCodeCacheBuilder implements ICacheBuilder {
+class TemplateListenerCodeCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
-               list($environment, $templateName) = explode('-', $cacheResource['cache']);
-               
+       public function rebuild(array $parameters) {
                // get template codes for specified template
                $templateListenerList = new TemplateListenerList();
-               $templateListenerList->getConditionBuilder()->add("template_listener.environment = ?", array($environment));
-               $templateListenerList->getConditionBuilder()->add("template_listener.templateName = ?", array($templateName));
+               $templateListenerList->getConditionBuilder()->add("template_listener.environment = ?", array($parameters['environment']));
+               $templateListenerList->getConditionBuilder()->add("template_listener.templateName = ?", array($parameters['templateName']));
                $templateListenerList->readObjects();
                
                $data = array();
index 867ab476b80c5f51776bb86e61ef7c13133aa480..35636a13f0a65715223db0e920693f23a183799a 100644 (file)
@@ -6,17 +6,17 @@ use wcf\data\user\group\UserGroupList;
  * Caches all user groups.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 UserGroupCacheBuilder implements ICacheBuilder {
+class UserGroupCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
+       public function rebuild(array $parameters) {
                $data = array(
                        'types' => array(),
                        'groups' => array()
diff --git a/wcfsetup/install/files/lib/system/cache/builder/UserGroupOptionCacheBuilder.class.php b/wcfsetup/install/files/lib/system/cache/builder/UserGroupOptionCacheBuilder.class.php
new file mode 100644 (file)
index 0000000..e679635
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+namespace wcf\system\cache\builder;
+
+/**
+ * Caches user group options and categories
+ * 
+ * @author     Alexander Ebert
+ * @copyright  2001-2013 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 UserGroupOptionCacheBuilder extends OptionCacheBuilder {
+       /**
+        * @see wcf\system\cache\builder\OptionCacheBuilder::$optionClassName
+        */
+       protected $optionClassName = 'wcf\data\user\group\option\UserGroupOption';
+       
+       /**
+        * @see wcf\system\cache\builder\OptionCacheBuilder::$tableName
+        */
+       protected $tableName = 'user_group_option';
+}
index 6f03e2c1a7a94f66073b209ae8278cc953e5b4ea..d76f94217ad14d55b3e74a097b7e691cce658795 100644 (file)
@@ -10,13 +10,13 @@ use wcf\util\StringUtil;
  * Caches the merged user group options for a certain user group combination.
  * 
  * @author     Marcel Werk
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 UserGroupPermissionCacheBuilder implements ICacheBuilder {
+class UserGroupPermissionCacheBuilder extends AbstractCacheBuilder {
        /**
         * list of used group option type objects
         * @var array<wcf\system\option\group\IGroupOptionType>
@@ -24,10 +24,9 @@ class UserGroupPermissionCacheBuilder implements ICacheBuilder {
        protected $typeObjects = array();
        
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) {
-               list(, $groupIDs) = explode('-', $cacheResource['cache']);
+       public function rebuild(array $parameters) {
                $data = array();
                
                // get all options
@@ -44,7 +43,7 @@ class UserGroupPermissionCacheBuilder implements ICacheBuilder {
                if (!empty($options)) {
                        // get needed options
                        $conditions = new PreparedStatementConditionBuilder();
-                       $conditions->add("option_value.groupID IN (?)", array(explode(',', $groupIDs)));
+                       $conditions->add("option_value.groupID IN (?)", array($parameters));
                        $conditions->add("option_value.optionID IN (?)", array($options));
                        
                        $sql = "SELECT          option_table.optionName, option_table.optionType, option_value.optionValue
@@ -88,7 +87,7 @@ class UserGroupPermissionCacheBuilder implements ICacheBuilder {
                        }
                }
                
-               $data['groupIDs'] = $groupIDs;
+               $data['groupIDs'] = $parameters;
                return $data;
        }
        
diff --git a/wcfsetup/install/files/lib/system/cache/builder/UserOptionCacheBuilder.class.php b/wcfsetup/install/files/lib/system/cache/builder/UserOptionCacheBuilder.class.php
new file mode 100644 (file)
index 0000000..dc7b251
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+namespace wcf\system\cache\builder;
+
+/**
+ * Caches user options and categories
+ * 
+ * @author     Alexander Ebert
+ * @copyright  2001-2013 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 UserOptionCacheBuilder extends OptionCacheBuilder {
+       /**
+        * @see wcf\system\cache\builder\OptionCacheBuilder::$optionClassName
+        */
+       protected $optionClassName = 'wcf\data\user\option\UserOption';
+       
+       /**
+        * @see wcf\system\cache\builder\OptionCacheBuilder::$tableName
+        */
+       protected $tableName = 'user_option';
+}
index 6f47ae304a1ad7f1285e41593a9e152fedd8ae40..79853226b558d88fef459be6a9eaf8cc7bf921c9 100644 (file)
@@ -8,17 +8,17 @@ use wcf\system\WCF;
  * Caches the versions for a certain package and object type.
  * 
  * @author     Jeffrey Reichardt
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 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 VersionCacheBuilder implements ICacheBuilder {
+class VersionCacheBuilder extends AbstractCacheBuilder {
        /**
-        * @see wcf\system\cache\ICacheBuilder::getData()
+        * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild()
         */
-       public function getData(array $cacheResource) { 
+       public function rebuild(array $parameters) {    
                // get object types
                $objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.versionableObject');