/** * Returns the toolbar data in json format * * @return string */ public function asJSON() { $serviceManager = $this->eventManager->getServiceManager(); $request = $serviceManager->getService('request'); // check if security key is defined $secKey = isset($serviceManager['log.to_debug_toolbar_seckey']) ? $serviceManager['log.to_debug_toolbar_seckey'] : false; // if so - get client seckey from http header if (!empty($secKey)) { $requestSecKey = $request->getServer()->get('HTTP_X_ZIKULA_DEBUGTOOLBAR'); // if client seckey is not valid - do not return data if ($secKey != $requestSecKey) { return ''; } } $data = array(); $data['__meta'] = array('realpath' => realpath('.')); $data['http_request'] = array('method' => $request->getMethod(), 'get' => (array) $request->query->getCollection(), 'post' => (array) $request->request->getCollection(), 'files' => (array) $request->files->getCollection(), 'cookie' => (array) $request->getCookie()->getCollection(), 'server' => (array) $request->server->getCollection(), 'env' => (array) $request->getEnv()->getCollection()); foreach ($this->_panels as $name => $panel) { $title = $panel->getPanelTitle(); $data[$name] = array('title' => $title ? $title : $name, 'content' => $panel->getPaneldata()); } // need to suppress errors due to recursion warrnings $data = @json_encode($data); $html = "<script type=\"text/javascript\">/* <![CDATA[ */ \nZikula.DebugToolbarData = {$data}\n /* ]]> */</script>"; return $html; }
/** * Initialise Zikula. * * Carries out a number of initialisation tasks to get Zikula up and * running. * * @param integer $stage Stage to load. * * @return boolean True initialisation successful false otherwise. */ public function init($stage = self::STAGE_ALL) { $coreInitEvent = new Zikula_Event('core.init', $this); // store the load stages in a global so other API's can check whats loaded $this->stage = $this->stage | $stage; if ($stage & self::STAGE_PRE && $this->stage & ~self::STAGE_PRE) { ModUtil::flushCache(); System::flushCache(); $this->eventManager->notify(new Zikula_Event('core.preinit', $this)); } // Initialise and load configuration if ($stage & self::STAGE_CONFIG) { if (System::isLegacyMode()) { require_once 'lib/legacy/Compat.php'; } // error reporting if (!System::isInstalling()) { // this is here because it depends on the config.php loading. $event = new Zikula_Event('setup.errorreporting', null, array('stage' => $stage)); $this->eventManager->notify($event); } // initialise custom event listeners from config.php settings $coreInitEvent->setArg('stage', self::STAGE_CONFIG); $this->eventManager->notify($coreInitEvent); } // Check that Zikula is installed before continuing if (System::getVar('installed') == 0 && !System::isInstalling()) { System::redirect(System::getBaseUrl() . 'install.php?notinstalled'); System::shutDown(); } if ($stage & self::STAGE_DB) { try { $dbEvent = new Zikula_Event('core.init', $this, array('stage' => self::STAGE_DB)); $this->eventManager->notify($dbEvent); } catch (PDOException $e) { if (!System::isInstalling()) { header('HTTP/1.1 503 Service Unavailable'); require_once System::getSystemErrorTemplate('dbconnectionerror.tpl'); System::shutDown(); } else { return false; } } } if ($stage & self::STAGE_TABLES) { // Initialise dbtables ModUtil::dbInfoLoad('Extensions', 'Extensions'); ModUtil::initCoreVars(); ModUtil::dbInfoLoad('Settings', 'Settings'); ModUtil::dbInfoLoad('Theme', 'Theme'); ModUtil::dbInfoLoad('Users', 'Users'); ModUtil::dbInfoLoad('Groups', 'Groups'); ModUtil::dbInfoLoad('Permissions', 'Permissions'); ModUtil::dbInfoLoad('Categories', 'Categories'); if (!System::isInstalling()) { ModUtil::registerAutoloaders(); } $coreInitEvent->setArg('stage', self::STAGE_TABLES); $this->eventManager->notify($coreInitEvent); } if ($stage & self::STAGE_SESSIONS) { SessionUtil::requireSession(); $coreInitEvent->setArg('stage', self::STAGE_SESSIONS); $this->eventManager->notify($coreInitEvent); } // Have to load in this order specifically since we cant setup the languages until we've decoded the URL if required (drak) // start block if ($stage & self::STAGE_LANGS) { $lang = ZLanguage::getInstance(); } if ($stage & self::STAGE_DECODEURLS) { System::queryStringDecode(); $coreInitEvent->setArg('stage', self::STAGE_DECODEURLS); $this->eventManager->notify($coreInitEvent); } if ($stage & self::STAGE_LANGS) { $lang->setup(); $coreInitEvent->setArg('stage', self::STAGE_LANGS); $this->eventManager->notify($coreInitEvent); } // end block if ($stage & self::STAGE_MODS) { // Set compression on if desired if (System::getVar('UseCompression') == 1) { //ob_start("ob_gzhandler"); } ModUtil::load('SecurityCenter'); $coreInitEvent->setArg('stage', self::STAGE_MODS); $this->eventManager->notify($coreInitEvent); } if ($stage & self::STAGE_THEME) { // register default page vars PageUtil::registerVar('title'); PageUtil::setVar('title', System::getVar('defaultpagetitle')); PageUtil::registerVar('keywords', true); PageUtil::registerVar('stylesheet', true); PageUtil::registerVar('javascript', true); PageUtil::registerVar('jsgettext', true); PageUtil::registerVar('body', true); PageUtil::registerVar('header', true); PageUtil::registerVar('footer', true); $theme = Zikula_View_Theme::getInstance(); // set some defaults // Metadata for SEO $this->serviceManager['zikula_view.metatags']['description'] = System::getVar('defaultmetadescription'); $this->serviceManager['zikula_view.metatags']['keywords'] = System::getVar('metakeywords'); $coreInitEvent->setArg('stage', self::STAGE_THEME); $this->eventManager->notify($coreInitEvent); } // check the users status, if not 1 then log him out if (UserUtil::isLoggedIn()) { $userstatus = UserUtil::getVar('activated'); if ($userstatus != Users_Constant::ACTIVATED_ACTIVE) { UserUtil::logout(); // TODO - When getting logged out this way, the existing session is destroyed and // then a new one is created on the reentry into index.php. The message // set by the registerStatus call below gets lost. LogUtil::registerStatus(__('You have been logged out.')); System::redirect(ModUtil::url('Users', 'user', 'login')); } } if ($stage & self::STAGE_POST && $this->stage & ~self::STAGE_POST) { $this->eventManager->notify(new Zikula_Event('core.postinit', $this, array('stages' => $stage))); } }
/** * Flush and reload handers. */ private function reload() { $this->eventManager->flushHandlers(); $this->loadRuntimeHandlers(); }
/** * Loader for custom handlers. * * @param string $dir Path to the folder holding the eventhandler classes. * * @return void */ public static function attachCustomHandlers($dir) { self::$eventManager->getServiceManager()->getService('zikula')->attachHandlers($dir); }
/** * Executes & returns the template results. * * This returns the template output instead of displaying it. * Supply a valid template name. * As an optional second parameter, you can pass a cache id. * As an optional third parameter, you can pass a compile id. * * @param string $template The name of the template. * @param string $cache_id The cache ID (optional). * @param string $compile_id The compile ID (optional). * @param boolean $display Whether or not to display directly (optional). * @param boolean $reset Reset singleton defaults (optional). deprecated. * * @return string The template output. */ public function fetch($template, $cache_id = null, $compile_id = null, $display = false, $reset = true) { $this->_setup_template($template); if (is_null($cache_id)) { $cache_id = $this->cache_id; } if (is_null($compile_id)) { $compile_id = $this->compile_id; } $this->template = $this->template_dir . '/' . $template; $output = $this->_fetch($template, $cache_id, $compile_id, $display); if ($this->expose_template == true) { $template = DataUtil::formatForDisplay($template); $output = "\n<!-- Start " . $this->template_dir . "/$template -->\n" . $output . "\n<!-- End " . $this->template_dir . "/$template -->\n"; } $event = new Zikula_Event('view.postfetch', $this, array('template' => $template), $output); return $this->eventManager->notify($event)->getData(); }
/** * Detach event from EventManager. * * @return void */ public function detach() { foreach ($this->eventNames as $callable) { $this->eventManager->detach($callable['name'], array($this, $callable['method'])); } }