Example #1
0
 protected function _runOnce()
 {
     $this->_checkJustInstalled();
     $this->_rebuildLoadClassHintsCache();
     $this->_checkCopyrightModification();
     $cpdListeners = XenForo_CodeEvent::getEventListeners('controller_pre_dispatch');
     if ($cpdListeners) {
         $this->_getLibraryListenerFileVersion('ControllerPreDispatch');
     }
     self::$_runOnce = true;
 }
Example #2
0
 protected function _runOnce()
 {
     $this->_checkJustInstalled();
     $this->_rebuildLoadClassHintsCache();
     $this->_checkCopyrightModification();
     $cpdListeners = XenForo_CodeEvent::getEventListeners('controller_pre_dispatch');
     if ($cpdListeners) {
         $this->_getLibraryListenerFileVersion('ControllerPreDispatch');
     }
     $options = XenForo_Application::get('options');
     $newOptions = XenForo_Application::get('config')->options;
     if ($newOptions) {
         foreach ($newOptions as $optionName => $optionValue) {
             $options->set($optionName, $optionValue);
         }
         XenForo_Application::set('options', $options);
     }
     self::$_runOnce = true;
 }
 public static function navigationTabs(array &$extraTabs, $selectedTabId)
 {
     $xenOptions = XenForo_Application::get('options');
     $listeners = XenForo_CodeEvent::getEventListeners('navigation_tabs');
     foreach ($listeners['_'] as $key => $callback) {
         if ($callback[0] == __CLASS__) {
             $listeners['_'] = array_slice($listeners['_'], $key + 1);
         }
     }
     if (!$listeners) {
         return true;
     }
     foreach ($listeners as $callbacks) {
         foreach ($callbacks as $callback) {
             if (is_callable($callback)) {
                 $return = call_user_func_array($callback, array(&$extraTabs, $selectedTabId));
                 foreach ($extraTabs as $key => $extraTab) {
                     if (!isset($extraTab['priority']) && isset($xenOptions->th_navigationTabs_priority[$callback[0] . '::' . $callback[1]])) {
                         $extraTabs[$key]['priority'] = $xenOptions->th_navigationTabs_priority[$callback[0] . '::' . $callback[1]];
                     }
                 }
                 if ($return === false) {
                     return false;
                 }
             }
         }
     }
     foreach ($extraTabs as $tabKey => $extraTab) {
         if (isset($extraTab['nodeTab']['nat_display_order'])) {
             $extraTabs[$tabKey]['priority'] = $extraTab['nodeTab']['nat_display_order'];
         } elseif (!isset($extraTab['priority'])) {
             $extraTabs[$tabKey]['priority'] = 10;
         }
     }
     uasort($extraTabs, array('self', 'comparePriority'));
     return false;
 }
Example #4
0
 /**
  *
  * @param string $hint
  */
 protected static function _fetchDisabledInstallerWaindigoListeners($hint = '')
 {
     /* @var $codeEventModel XenForo_Model_CodeEvent */
     $codeEventModel = XenForo_Model::create('XenForo_Model_CodeEvent');
     $listeners = $codeEventModel->getAllEventListeners();
     $installerWaindigoListeners = XenForo_CodeEvent::getEventListeners('load_class_installer_waindigo');
     if (XenForo_Application::$versionId > 1020000) {
         if (isset($installerWaindigoListeners['_'])) {
             $installerWaindigoListeners = $installerWaindigoListeners['_'];
         } else {
             $installerWaindigoListeners = array();
         }
         if ($hint) {
             if (isset($installerWaindigoListeners[$hint])) {
                 $installerWaindigoListeners = array_merge($installerWaindigoListeners, $installerWaindigoListeners[$hint]);
             }
         }
     }
     foreach ($listeners as $listener) {
         if ($listener['event_id'] == 'load_class_installer_waindigo') {
             if ($installerWaindigoListeners) {
                 foreach ($installerWaindigoListeners as $installerWaindigoListener) {
                     list($callbackClass, $callbackMethod) = $installerWaindigoListener;
                     if ($listener['callback_class'] == $callbackClass && $listener['callback_method'] == $callbackMethod) {
                         continue 2;
                     }
                 }
             }
             if ($listener['active']) {
                 XenForo_CodeEvent::addListener('load_class_installer_waindigo', array($listener['callback_class'], $listener['callback_method']), $hint);
             }
         }
     }
     $installerWaindigoListeners = XenForo_CodeEvent::getEventListeners('load_class_installer_waindigo');
 }
Example #5
0
 /**
  *
  * @param array $addOns
  */
 protected function _checkAddOnsNeedUpgrading(array $addOns, $checkDisabled = false)
 {
     if (empty($addOns)) {
         return false;
     }
     if (XenForo_Application::$versionId < 1020000 || $checkDisabled) {
         /* @var $addOnModel XenForo_Model_AddOn */
         $addOnModel = XenForo_Model::create('XenForo_Model_AddOn');
         $allAddOns = $addOnModel->getAllAddOns();
     } else {
         $allAddOns = XenForo_Application::get('addOns');
     }
     $lastXmlUploadDate = $this->_getLastXmlUploadDate();
     foreach ($addOns as $addOnId) {
         if (isset($allAddOns[$addOnId])) {
             $addOn = $allAddOns[$addOnId];
             try {
                 $addOnXML = new SimpleXMLElement(file_get_contents(XenForo_Application::getInstance()->getRootDir() . '/install/data/addon-' . $addOnId . '.xml'));
                 $versionId = (string) $addOnXML->attributes()->version_id;
             } catch (Exception $e) {
                 $versionId = '';
             }
             if (is_array($addOn) && $versionId > $addOn['version_id'] || !is_array($addOn) && $versionId > $addOn) {
                 self::$_upgradeAddOns[$addOnId] = $addOn;
             } else {
                 $xmlUploadDate = filemtime(XenForo_Application::getInstance()->getRootDir() . '/install/data/addon-' . $addOnId . '.xml');
                 if ($xmlUploadDate > $lastXmlUploadDate) {
                     $lastXmlUploadDate = $xmlUploadDate;
                 }
             }
         }
     }
     eval('
         class Waindigo_Listener_ControllerPreDispatch_TemplatePostRender
         {
         	public static function templatePostRender($templateName, &$content, array &$containerData, XenForo_Template_Abstract $template)
         	{
         		if ($templateName == "PAGE_CONTAINER") {
         			$upgradeAddOns = Waindigo_Listener_ControllerPreDispatch::getUpgradeAddOns();
         			if (!empty($upgradeAddOns)) {
         			    $params = $template->getParams();
         			    if (!$params[\'showUpgradePendingNotice\']) {
             			    $pattern = \'#<noscript><p class="importantMessage">.*</p></noscript>#U\';
                             $replacement = \'<p class="importantMessage"><a href="\'.XenForo_Link::buildAdminLink(\'add-ons/upgrade-all-from-xml\').\'">\' . new XenForo_Phrase(\'upgrade_add_on\') . \'</a></p>\';
             			    $content = preg_replace($pattern, \'${1}\' . $replacement, $content);
         			    }
         			}
         		}
         	}
         }');
     $tprListeners = XenForo_CodeEvent::getEventListeners('template_post_render');
     if (!$tprListeners || XenForo_Application::$versionId >= 1020052) {
         $tprListeners = array();
     }
     $newListener = array('Waindigo_Listener_ControllerPreDispatch_TemplatePostRender', 'templatePostRender');
     if (XenForo_Application::$versionId < 1020000) {
         $tprListeners[] = $newListener;
     } else {
         $tprListeners['_'][] = $newListener;
     }
     XenForo_CodeEvent::setListeners(array('template_post_render' => $tprListeners));
     if (empty(self::$_upgradeAddOns)) {
         $this->_setLastXmlUploadDate($lastXmlUploadDate);
         return false;
     }
     return true;
 }
Example #6
0
 /**
  * This is to ensure copyright notices don't display on every page if all
  * add-ons are newer than 15 September 2012 (unless explicitly set).
  *
  * This code is redundant if all add-ons are newer than 25 June 2013.
  */
 protected function _removeUnwantedCopyrightNotice()
 {
     $thListeners = XenForo_CodeEvent::getEventListeners('template_hook');
     $tprListeners = XenForo_CodeEvent::getEventListeners('template_post_render');
     if (!empty($thListeners) || !empty($tprListeners)) {
         $this->_getLibraryListenerFileVersion('Template');
         if (!empty($thListeners)) {
             $templateHookVersion = $this->_getLibraryListenerFileVersion('TemplateHook');
         }
         if (!empty($tprListeners)) {
             $templatePostRenderVersion = $this->_getLibraryListenerFileVersion('TemplatePostRender');
         }
     }
     $tcListeners = XenForo_CodeEvent::getEventListeners('template_create');
     if (!empty($tcListeners)) {
         $this->_getLibraryListenerFileVersion('TemplateCreate');
     }
     $lccListeners = XenForo_CodeEvent::getEventListeners('load_class_controller');
     if (!empty($lccListeners)) {
         $loadClassVersion = $this->_getLibraryListenerFileVersion('LoadClass', false);
     }
     if (defined(Waindigo_Listener_InitDependencies::COPYRIGHT_MODIFICATION_SIMPLE_CACHE_KEY) && !XenForo_Application::getSimpleCacheData(self::COPYRIGHT_MODIFICATION_SIMPLE_CACHE_KEY)) {
         return;
     }
     if (XenForo_Application::$versionId < 1020000 && self::$_showCopyright) {
         return;
     }
     $className = get_class(self::$_controller);
     if (XenForo_Application::$versionId < 1020000 && strpos($className, 'Waindigo') === 0) {
         return;
     }
     if (XenForo_Application::get('options')->waindigo_loadClassHints) {
         $controllers = XenForo_Application::get('options')->waindigo_loadClassHints;
     } else {
         $controllers = array('XenForo_ControllerPublic_Misc' => array());
     }
     $addOns = array();
     if (XenForo_Application::$versionId < 1020000 || !array_key_exists($className, $controllers)) {
         if (XenForo_Application::$versionId >= 1020000) {
             if (!empty($thListeners['_'])) {
                 $thListeners = $thListeners['_'];
             } else {
                 $thListeners = array();
             }
         }
         if (!empty($thListeners)) {
             foreach ($thListeners as $templateHook) {
                 if (strlen($templateHook[0]) > strlen('Waindigo_') && substr($templateHook[0], 0, strlen('Waindigo_')) == 'Waindigo_') {
                     if ($templateHookVersion < '20120715') {
                         return;
                     }
                     $addOns[] = substr($templateHook[0], 0, strlen($templateHook[0]) - strlen('_Listener_TemplateHook'));
                 }
             }
         }
         if (XenForo_Application::$versionId >= 1020000) {
             if (!empty($tprListeners['_'])) {
                 $tprListeners = $tprListeners['_'];
             } else {
                 $tprListeners = array();
             }
         }
         if (!empty($tprListeners)) {
             foreach ($tprListeners as $templatePostRender) {
                 if (strlen($templatePostRender[0]) > strlen('Waindigo_') && substr($templatePostRender[0], 0, strlen('Waindigo_')) == 'Waindigo_') {
                     $addOnId = substr($templatePostRender[0], 0, strlen($templatePostRender[0]) - strlen('_Listener_TemplatePostRender'));
                     if (in_array($addOnId, $addOns)) {
                         continue;
                     }
                     if ($templatePostRenderVersion < '20120715') {
                         return;
                     }
                     $addOns[] = $addOnId;
                 }
             }
         }
         if (XenForo_Application::$versionId >= 1020000) {
             if (!empty($lccListeners['_'])) {
                 $lccListeners = $lccListeners['_'];
             } else {
                 $lccListeners = array();
             }
         }
         if (!empty($lccListeners)) {
             foreach ($lccListeners as $loadClassController) {
                 if (strlen($loadClassController[0]) > strlen('Waindigo_') && substr($loadClassController[0], 0, strlen('Waindigo_')) == 'Waindigo_') {
                     if (strpos($loadClassController[0], '_Listener_LoadClassController') > 0) {
                         $addOnId = substr($loadClassController[0], 0, strlen($loadClassController[0]) - strlen('_Listener_LoadClassController'));
                     } else {
                         $addOnId = substr($loadClassController[0], 0, strlen($loadClassController[0]) - strlen('_Listener_LoadClass'));
                     }
                     if ($loadClassVersion >= '20121018') {
                         $loadClassController = Waindigo_Listener_LoadClass::create($loadClassController[0]);
                         if (method_exists($loadClassController, 'getExtendedClass')) {
                             $extendedClasses = $loadClassController->getExtendedClasses();
                             if (in_array(get_class(self::$_controller), $extendedClasses)) {
                                 return;
                             }
                         }
                     }
                     if (!in_array($addOnId, $addOns)) {
                         $addOns[] = $addOnId;
                     }
                 }
             }
         }
         if (!empty($addOns) && XenForo_Application::$versionId >= 1020000) {
             $enabledAddOns = XenForo_Application::get('addOns');
             foreach ($enabledAddOns as $addOnId => $addOn) {
                 if ($addOn > 1372118400) {
                     $addOnKey = array_search($addOnId, $addOns);
                     if ($addOnKey !== FALSE) {
                         unset($addOns[$addOnKey]);
                     }
                 }
             }
         }
         if (!empty($addOns)) {
             $cpdListeners = XenForo_CodeEvent::getEventListeners('controller_pre_dispatch');
             if (XenForo_Application::$versionId >= 1020000) {
                 $cpdListeners = $cpdListeners['_'];
             }
             foreach ($cpdListeners as $controllerPreDispatch) {
                 if (strlen($controllerPreDispatch[0]) > strlen('Waindigo_') && substr($controllerPreDispatch[0], 0, strlen('Waindigo_')) == 'Waindigo_') {
                     if ($controllerPreDispatch[0] != 'Waindigo_Listener_ControllerPreDispatch') {
                         $addOnId = substr($controllerPreDispatch[0], 0, strlen($controllerPreDispatch[0]) - strlen('_Listener_ControllerPreDispatch'));
                         $addOnKey = array_search($addOnId, $addOns);
                         if ($addOnKey !== FALSE) {
                             unset($addOns[$addOnKey]);
                         }
                     }
                 }
             }
         }
     }
     if (self::$_showCopyright && !array_key_exists($className, $controllers) && strpos($className, 'Waindigo') !== 0) {
         return;
     }
     if (empty($addOns) && (!empty($thListeners) || !empty($tprListeners))) {
         if (class_exists('Waindigo_Listener_Template')) {
             if (method_exists('Waindigo_Listener_Template', 'setCopyrightNotice')) {
                 Waindigo_Listener_Template::setCopyrightNotice(true);
             } else {
                 $addOnId = reset($addOns);
                 eval('
                     class ' . $addOnId . '_Listener_Template extends Waindigo_Listener_Template
                     {
                     	public static function setCopyrightNotice($copyrightNotice)
                     	{
                     		self::$_copyrightNotice = $copyrightNotice;
                     	}
                     }');
                 call_user_func(array($addOnId . '_Listener_Template', 'setCopyrightNotice'), true);
             }
         }
     }
 }