protected function _runOnce() { $this->_checkJustInstalled(); $this->_rebuildLoadClassHintsCache(); $this->_checkCopyrightModification(); $cpdListeners = XenForo_CodeEvent::getEventListeners('controller_pre_dispatch'); if ($cpdListeners) { $this->_getLibraryListenerFileVersion('ControllerPreDispatch'); } self::$_runOnce = true; }
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; }
/** * * @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'); }
/** * * @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; }
/** * 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); } } } }