Esempio n. 1
0
 public function run()
 {
     if (!isset(self::$_checkForUpdates)) {
         self::$_checkForUpdates = true;
         $lastXMLUploadDate = $this->_getLastXmlUploadDate();
         $addOns = array();
         try {
             $installDataDir = XenForo_Application::getInstance()->getRootDir() . '/install/data/';
             if (is_dir($installDataDir)) {
                 /* @var $dir Directory */
                 $dir = dir($installDataDir);
                 if (XenForo_Application::$versionId >= 1020000) {
                     $allAddOns = XenForo_Application::get('addOns');
                 }
                 while ($entry = $dir->read()) {
                     if (strlen($entry) > strlen('addon-.xml') && substr($entry, 0, strlen('addon-')) == 'addon-') {
                         $addOnId = substr($entry, strlen('addon-'), strlen($entry) - strlen('addon-.xml'));
                         if (XenForo_Application::$versionId >= 1020000) {
                             if (empty($allAddOns[$addOnId])) {
                                 continue;
                             }
                         }
                         if (filemtime(XenForo_Application::getInstance()->getRootDir() . '/install/data/' . $entry) > $lastXMLUploadDate) {
                             $addOns[] = $addOnId;
                         }
                     }
                 }
             }
         } catch (Exception $e) {
             // do nothing
         }
         $addOnsNeedUpgrading = $this->_checkAddOnsNeedUpgrading($addOns);
         if (is_subclass_of(self::$_controller, 'XenForo_ControllerAdmin_Abstract')) {
             $controllerName = self::$_controller->getRequest()->getParam('_controllerName');
             $action = self::$_controller->getRequest()->getParam('_action');
             if ($controllerName == 'XenForo_ControllerAdmin_AddOn' && $action == 'UpgradeAllFromXml') {
                 $this->_upgradeAddOns();
             }
         } elseif ($addOnsNeedUpgrading) {
             $upgradeAddOns = $this->getUpgradeAddOns();
             if (!empty($upgradeAddOns)) {
                 XenForo_Application::get('options')->set('boardActive', false);
                 if (!XenForo_Visitor::getInstance()->get('is_admin')) {
                     try {
                         self::$_controller->preDispatch(self::$_action, self::$_controllerName);
                     } catch (XenForo_ControllerResponse_Exception $exception) {
                         $controllerResponse = $exception->getControllerResponse();
                         if ($controllerResponse instanceof XenForo_ControllerResponse_Message) {
                             $controllerResponse->message = new XenForo_Phrase('board_currently_being_upgraded');
                         }
                         throw $exception;
                     }
                 }
             }
         }
     }
     $this->_run();
 }