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(); }