Example #1
0
 /**
  * Loads an application.
  * 
  * @param	\wcf\data\application\Application		$application
  * @param	boolean						$isDependentApplication
  * @return	\wcf\system\application\IApplication
  */
 protected function loadApplication(Application $application, $isDependentApplication = false)
 {
     $applicationObject = null;
     $package = PackageCache::getInstance()->getPackage($application->packageID);
     // package cache might be outdated
     if ($package === null) {
         $package = new Package($application->packageID);
         // package cache is outdated, discard cache
         if ($package->packageID) {
             PackageEditor::resetCache();
         } else {
             // package id is invalid
             throw new SystemException("application identified by package id '" . $application->packageID . "' is unknown");
         }
     }
     $abbreviation = ApplicationHandler::getInstance()->getAbbreviation($application->packageID);
     $packageDir = FileUtil::getRealPath(WCF_DIR . $package->packageDir);
     self::$autoloadDirectories[$abbreviation] = $packageDir . 'lib/';
     $className = $abbreviation . '\\system\\' . strtoupper($abbreviation) . 'Core';
     if (class_exists($className) && ClassUtil::isInstanceOf($className, 'wcf\\system\\application\\IApplication')) {
         // include config file
         $configPath = $packageDir . PackageInstallationDispatcher::CONFIG_FILE;
         if (file_exists($configPath)) {
             require_once $configPath;
         } else {
             throw new SystemException('Unable to load configuration for ' . $package->package);
         }
         // register template path if not within ACP
         if (!class_exists('wcf\\system\\WCFACP', false)) {
             // add template path and abbreviation
             $this->getTPL()->addApplication($abbreviation, $packageDir . 'templates/');
         }
         // init application and assign it as template variable
         self::$applicationObjects[$application->packageID] = call_user_func(array($className, 'getInstance'));
         $this->getTPL()->assign('__' . $abbreviation, self::$applicationObjects[$application->packageID]);
     } else {
         unset(self::$autoloadDirectories[$abbreviation]);
         throw new SystemException("Unable to run '" . $package->package . "', '" . $className . "' is missing or does not implement 'wcf\\system\\application\\IApplication'.");
     }
     // register template path in ACP
     if (class_exists('wcf\\system\\WCFACP', false)) {
         $this->getTPL()->addApplication($abbreviation, $packageDir . 'acp/templates/');
     } else {
         if (!$isDependentApplication) {
             // assign base tag
             $this->getTPL()->assign('baseHref', $application->getPageURL());
         }
     }
     // register application
     self::$applications[$abbreviation] = $application;
     return self::$applicationObjects[$application->packageID];
 }