Major overhaul of caching system (work in progress)
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / package / PackageInstallationDispatcher.class.php
index 79f1d68d26578a3ef960ecc8402eaa6ca62dac9d..aab03e29ba889f1e09bf8526a351dc3183c7c46a 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 namespace wcf\system\package;
-use wcf\system\style\StyleHandler;
+use wcf\system\cache\builder\TemplateListenerCodeCacheBuilder;
+
+use wcf\system\cache\builder\TemplateListenerCacheBuilder;
 
 use wcf\data\application\Application;
 use wcf\data\application\ApplicationEditor;
@@ -17,16 +19,20 @@ use wcf\system\cache\CacheHandler;
 use wcf\system\database\statement\PreparedStatement;
 use wcf\system\database\util\PreparedStatementConditionBuilder;
 use wcf\system\exception\SystemException;
-use wcf\system\form\container;
-use wcf\system\form\element;
+use wcf\system\form\container\GroupFormElementContainer;
+use wcf\system\form\container\MultipleSelectionFormElementContainer;
+use wcf\system\form\element\MultipleSelectionFormElement;
+use wcf\system\form\element\TextInputFormElement;
 use wcf\system\form\FormDocument;
-use wcf\system\form;
 use wcf\system\language\LanguageFactory;
 use wcf\system\package\plugin\IPackageInstallationPlugin;
 use wcf\system\package\plugin\ObjectTypePackageInstallationPlugin;
 use wcf\system\package\plugin\SQLPackageInstallationPlugin;
 use wcf\system\request\LinkHandler;
 use wcf\system\request\RouteHandler;
+use wcf\system\setup\Installer;
+use wcf\system\style\StyleHandler;
+use wcf\system\version\VersionHandler;
 use wcf\system\WCF;
 use wcf\util\FileUtil;
 use wcf\util\HeaderUtil;
@@ -36,7 +42,7 @@ use wcf\util\StringUtil;
  * PackageInstallationDispatcher handles the whole installation process.
  * 
  * @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.package
@@ -152,7 +158,7 @@ class PackageInstallationDispatcher {
                                
                                // remove all cache files after WCFSetup
                                if (!PACKAGE_ID) {
-                                       CacheHandler::getInstance()->clear(WCF_DIR.'cache/', 'cache.*.php');
+                                       CacheHandler::getInstance()->flushAll();
                                }
                                
                                // rebuild application paths
@@ -161,7 +167,8 @@ class PackageInstallationDispatcher {
                        }
                        
                        // remove template listener cache
-                       CacheHandler::getInstance()->clear(WCF_DIR.'cache/templateListener/', '*.php');
+                       TemplateListenerCacheBuilder::getInstance()->reset();
+                       TemplateListenerCodeCacheBuilder::getInstance()->reset();
                                
                        // reset language cache
                        LanguageFactory::getInstance()->clearCache();
@@ -292,9 +299,6 @@ class PackageInstallationDispatcher {
                                }
                        }
                        
-                       // build requirement map
-                       Package::rebuildPackageRequirementMap($package->packageID);
-                       
                        // reload queue
                        $this->queue = new PackageInstallationQueue($this->queue->queueID);
                        $this->package = null;
@@ -317,7 +321,7 @@ class PackageInstallationDispatcher {
                if ($this->getPackage()->isApplication && $this->getPackage()->package != 'com.woltlab.wcf' && $this->getAction() == 'install') {
                        if (empty($this->getPackage()->packageDir)) {
                                $document = $this->promptPackageDir();
-                               if ($document !== null && $document instanceof form\FormDocument) {
+                               if ($document !== null && $document instanceof FormDocument) {
                                        $installationStep->setDocument($document);
                                }
                                
@@ -344,7 +348,6 @@ class PackageInstallationDispatcher {
                
                // get language list
                $languageList = new LanguageList();
-               $languageList->sqlLimit = 0;
                $languageList->readObjects();
                
                // workaround for WCFSetup
@@ -477,12 +480,18 @@ class PackageInstallationDispatcher {
                return $step;
        }
        
-       // @todo: comment
+       /**
+        * Displays a list to select optional packages or installs selection.
+        * 
+        * @param       string          $currentNode
+        * @param       array           $nodeData
+        * @return      wcf\system\package\PackageInstallationStep
+        */
        protected function selectOptionalPackages($currentNode, array $nodeData) {
                $installationStep = new PackageInstallationStep();
                
                $document = $this->promptOptionalPackages($nodeData);
-               if ($document !== null && $document instanceof form\FormDocument) {
+               if ($document !== null && $document instanceof FormDocument) {
                        $installationStep->setDocument($document);
                        $installationStep->setSplitNode();
                }
@@ -527,7 +536,7 @@ class PackageInstallationDispatcher {
        }
        
        /**
-        * Extracts files from .tar (or .tar.gz) archive and installs them
+        * Extracts files from .tar(.gz) archive and installs them
         * 
         * @param       string                  $targetDir
         * @param       string                  $sourceArchive
@@ -535,7 +544,7 @@ class PackageInstallationDispatcher {
         * @return      wcf\system\setup\Installer
         */
        public function extractFiles($targetDir, $sourceArchive, $fileHandler = null) {
-               return new \wcf\system\setup\Installer($targetDir, $sourceArchive, $fileHandler);
+               return new Installer($targetDir, $sourceArchive, $fileHandler);
        }
        
        /**
@@ -559,8 +568,8 @@ class PackageInstallationDispatcher {
        protected function promptPackageDir() {
                if (!PackageInstallationFormManager::findForm($this->queue, 'packageDir')) {
                        
-                       $container = new container\GroupFormElementContainer();
-                       $packageDir = new element\TextInputFormElement($container);
+                       $container = new GroupFormElementContainer();
+                       $packageDir = new TextInputFormElement($container);
                        $packageDir->setName('packageDir');
                        $packageDir->setLabel(WCF::getLanguage()->get('wcf.acp.package.packageDir.input'));
                        
@@ -569,7 +578,7 @@ class PackageInstallationDispatcher {
                        $packageDir->setValue($defaultPath);
                        $container->appendChild($packageDir);
                        
-                       $document = new form\FormDocument('packageDir');
+                       $document = new FormDocument('packageDir');
                        $document->appendContainer($container);
                        
                        PackageInstallationFormManager::registerForm($this->queue, $document);
@@ -620,14 +629,18 @@ class PackageInstallationDispatcher {
                }
        }
        
-       // @todo: comment
+       /**
+        * Prompts a selection of optional packages.
+        * 
+        * @return      mixed
+        */
        protected function promptOptionalPackages(array $packages) {
                if (!PackageInstallationFormManager::findForm($this->queue, 'optionalPackages')) {
-                       $container = new container\MultipleSelectionFormElementContainer();
+                       $container = new MultipleSelectionFormElementContainer();
                        $container->setName('optionalPackages');
                        
                        foreach ($packages as $package) {
-                               $optionalPackage = new element\MultipleSelectionFormElement($container);
+                               $optionalPackage = new MultipleSelectionFormElement($container);
                                $optionalPackage->setName('optionalPackages');
                                $optionalPackage->setLabel($package['packageName']);
                                $optionalPackage->setValue($package['package']);
@@ -635,7 +648,7 @@ class PackageInstallationDispatcher {
                                $container->appendChild($optionalPackage);
                        }
                        
-                       $document = new form\FormDocument('optionalPackages');
+                       $document = new FormDocument('optionalPackages');
                        $document->appendContainer($container);
                        
                        PackageInstallationFormManager::registerForm($this->queue, $document);
@@ -750,7 +763,7 @@ class PackageInstallationDispatcher {
                LanguageEditor::deleteLanguageFiles();
                
                // reset all caches
-               CacheHandler::getInstance()->clear(WCF_DIR.'cache/', '*');
+               CacheHandler::getInstance()->flushAll();
        }
        
        /**
@@ -948,12 +961,12 @@ class PackageInstallationDispatcher {
                        break;
                }
        }
-
+       
        /*
         * Restructure version tables.
         */
        protected function restructureVersionTables() {
-               $objectTypes = \wcf\system\version\VersionHandler::getInstance()->getObjectTypes();
+               $objectTypes = VersionHandler::getInstance()->getObjectTypes();
                
                if (empty($objectTypes)) {
                        return;
@@ -965,16 +978,16 @@ class PackageInstallationDispatcher {
                $versionTableBaseColumns[] = array('name' => 'versionUserID', 'data' => array('type' => 'INT'));
                $versionTableBaseColumns[] = array('name' => 'versionUsername', 'data' => array('type' => 'VARCHAR', 'length' => 255));
                $versionTableBaseColumns[] = array('name' => 'versionTime', 'data' => array('type' => 'INT'));
-       
-               foreach ($objectTypes as $objectTypeID => $objectType) {                                                
+               
+               foreach ($objectTypes as $objectTypeID => $objectType) {
                        // get structure of base table
                        $baseTableColumns = WCF::getDB()->getEditor()->getColumns($objectType::getDatabaseTableName());
                        // get structure of version table
                        $versionTableColumns = WCF::getDB()->getEditor()->getColumns($objectType::getDatabaseVersionTableName());
                        
-                       if (empty($versionTableColumns)){
+                       if (empty($versionTableColumns)) {
                                $columns = array_merge($versionTableBaseColumns, $baseTableColumns);
-
+                               
                                WCF::getDB()->getEditor()->createTable($objectType::getDatabaseVersionTableName(), $columns);
                        }
                        else {
@@ -995,5 +1008,5 @@ class PackageInstallationDispatcher {
                                }
                        }
                }
-       }       
+       }
 }