Пример #1
0
 /**
  * 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)));
     }
 }
Пример #2
0
 /**
  * Initialise Zikula.
  *
  * Carries out a number of initialisation tasks to get Zikula up and
  * running.
  *
  * @param integer             $stage Stage to load.
  * @param Zikula_Request_Http $request
  *
  * @return boolean True initialisation successful false otherwise.
  */
 public function init($stage = self::STAGE_ALL, Request $request)
 {
     $GLOBALS['__request'] = $request;
     // hack for pre 1.5.0 - drak
     $coreInitEvent = new GenericEvent($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();
         $args = !System::isInstalling() ? array('lazy' => true) : array();
         $this->dispatcher->dispatch('core.preinit', new GenericEvent($this, $args));
     }
     // Initialise and load configuration
     if ($stage & self::STAGE_CONFIG) {
         // for BC only. remove this code in 2.0.0
         if (!System::isInstalling()) {
             $this->dispatcher->dispatch('setup.errorreporting', new GenericEvent(null, array('stage' => $stage)));
         }
         // initialise custom event listeners from config.php settings
         $coreInitEvent->setArgument('stage', self::STAGE_CONFIG);
         /***************************************************
          * NOTE: this event is monitored by
          * \Zikula\Bundle\CoreInstallerBundle\EventListener\InstallUpgradeCheckListener
          * to see if install or upgrade is needed
          ***************************************************/
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     if ($stage & self::STAGE_DB) {
         try {
             $dbEvent = new GenericEvent($this, array('stage' => self::STAGE_DB));
             $this->dispatcher->dispatch('core.init', $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('ZikulaExtensionsModule', 'ZikulaExtensionsModule');
         ModUtil::initCoreVars();
         ModUtil::dbInfoLoad('ZikulaSettingsModule', 'ZikulaSettingsModule');
         ModUtil::dbInfoLoad('ZikulaThemeModule', 'ZikulaThemeModule');
         ModUtil::dbInfoLoad('ZikulaUsersModule', 'ZikulaUsersModule');
         ModUtil::dbInfoLoad('ZikulaGroupsModule', 'ZikulaGroupsModule');
         ModUtil::dbInfoLoad('ZikulaPermissionsModule', 'ZikulaPermissionsModule');
         ModUtil::dbInfoLoad('ZikulaCategoriesModule', 'ZikulaCategoriesModule');
         // Add AutoLoading for non-symfony 1.3 modules in /modules
         if (!System::isInstalling()) {
             ModUtil::registerAutoloaders();
         }
         $coreInitEvent->setArgument('stage', self::STAGE_TABLES);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     if ($stage & self::STAGE_SESSIONS) {
         //            SessionUtil::requireSession();
         $coreInitEvent->setArgument('stage', self::STAGE_SESSIONS);
         $this->dispatcher->dispatch('core.init', $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($request);
         $coreInitEvent->setArgument('stage', self::STAGE_DECODEURLS);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     if ($stage & self::STAGE_LANGS) {
         $lang->setup($request);
         $coreInitEvent->setArgument('stage', self::STAGE_LANGS);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     // end block
     if ($stage & self::STAGE_MODS) {
         if (!System::isInstalling()) {
             ModUtil::load('ZikulaSecurityCenterModule');
         }
         $coreInitEvent->setArgument('stage', self::STAGE_MODS);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     if ($stage & self::STAGE_THEME) {
         // register default page vars
         PageUtil::registerVar('polyfill_features', true);
         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);
         // set some defaults
         // Metadata for SEO
         $this->container->setParameter('zikula_view.metatags', array('description' => System::getVar('defaultmetadescription'), 'keywords' => System::getVar('metakeywords')));
         $coreInitEvent->setArgument('stage', self::STAGE_THEME);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     // check the users status, if not 1 then log him out
     if (!System::isInstalling() && 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('ZikulaUsersModule', 'user', 'login'));
         }
     }
     if ($stage & self::STAGE_POST && $this->stage & ~self::STAGE_POST) {
         $this->dispatcher->dispatch('core.postinit', new GenericEvent($this, array('stages' => $stage)));
     }
 }
Пример #3
0
 /**
  * Regenerate modules list.
  *
  * @param array $args All parameters passed to this function.
  *                      array $args['filemodules'] An array of modules in the filesystem, as would be returned by
  *                                                  {@link getfilemodules()}; optional, defaults to the results of
  *                                                  $this->getfilemodules().
  *
  * @return boolean True on success, false on failure.
  */
 public function regenerate($args)
 {
     // Security check
     if (!System::isInstalling()) {
         if (!SecurityUtil::checkPermission('Extensions::', '::', ACCESS_ADMIN)) {
             return LogUtil::registerPermissionError();
         }
     }
     // Argument check
     if (!isset($args['filemodules']) || !is_array($args['filemodules'])) {
         return LogUtil::registerArgsError();
     }
     // default action
     $filemodules = $args['filemodules'];
     $defaults = isset($args['defaults']) ? $args['defaults'] : false;
     // Get all modules in DB
     $dbmodules = DBUtil::selectObjectArray('modules', '', '', -1, -1, 'name');
     if (!$dbmodules) {
         return LogUtil::registerError($this->__('Error! Could not load data.'));
     }
     // build a list of found modules and dependencies
     $module_names = array();
     $moddependencies = array();
     foreach ($filemodules as $modinfo) {
         $module_names[] = $modinfo['name'];
         if (isset($modinfo['dependencies']) && !empty($modinfo['dependencies'])) {
             $moddependencies[$modinfo['name']] = unserialize($modinfo['dependencies']);
         }
     }
     // see if any modules have changed name since last generation
     foreach ($filemodules as $name => $modinfo) {
         if (isset($modinfo['oldnames']) || !empty($modinfo['oldnames'])) {
             $tables = DBUtil::getTables();
             foreach ($dbmodules as $dbname => $dbmodinfo) {
                 if (in_array($dbmodinfo['name'], (array) $modinfo['oldnames'])) {
                     // migrate its modvars
                     $cols = $tables['module_vars_column'];
                     $save = array('modname' => $modinfo['name']);
                     DBUtil::updateObject($save, 'module_vars', "{$cols['modname']} = '{$dbname}'");
                     // rename the module register
                     $save = $dbmodules[$dbname];
                     $save['name'] = $modinfo['name'];
                     unset($dbmodules[$dbname]);
                     $dbname = $modinfo['name'];
                     $dbmodules[$dbname] = $save;
                     DBUtil::updateObject($dbmodules[$dbname], 'modules');
                     // rename hooks in the hooks table.
                     $hooksColumns = $tables['hooks_column'];
                     $hooks = DBUtil::selectObjectArray('hooks', "{$hooksColumns['smodule']} = '{$save['name']}'");
                     if ($hooks) {
                         foreach ($hooks as $hook) {
                             $hook['smodule'] = $dbmodinfo['name'];
                             DBUtil::updateObject($hook, 'hooks');
                         }
                     }
                     $hooks = DBUtil::selectObjectArray('hooks', "{$hooksColumns['tmodule']} = '{$save['name']}'");
                     if ($hooks) {
                         foreach ($hooks as $hook) {
                             $hook['tmodule'] = $dbmodinfo['name'];
                             DBUtil::updateObject($hook, 'hooks');
                         }
                     }
                     DBUtil::deleteObjectByID('hooks', $modinfo['name'], 'tmodule');
                 }
             }
             unset($tables);
         }
         if (isset($dbmodules[$name]) && $dbmodules[$name]['state'] > 10) {
             $dbmodules[$name]['state'] = $dbmodules[$name]['state'] - 20;
             $this->setState(array('id' => $dbmodules[$name]['id'], 'state' => $dbmodules[$name]['state']));
         }
         if (isset($dbmodules[$name]['id'])) {
             $modinfo['id'] = $dbmodules[$name]['id'];
             if ($dbmodules[$name]['state'] != ModUtil::STATE_UNINITIALISED && $dbmodules[$name]['state'] != ModUtil::STATE_INVALID) {
                 unset($modinfo['version']);
             }
             if (!$defaults) {
                 unset($modinfo['displayname']);
                 unset($modinfo['description']);
                 unset($modinfo['url']);
             }
             DBUtil::updateObject($modinfo, 'modules');
         }
         // check core version is compatible with current
         $minok = 0;
         $maxok = 0;
         // strip any -dev, -rcN etc from version number
         $coreVersion = preg_replace('#(\\d+\\.\\d+\\.\\d+).*#', '$1', Zikula_Core::VERSION_NUM);
         if (!empty($filemodules[$name]['core_min'])) {
             $minok = version_compare($coreVersion, $filemodules[$name]['core_min']);
         }
         if (!empty($filemodules[$name]['core_max'])) {
             $maxok = version_compare($filemodules[$name]['core_max'], $coreVersion);
         }
         if ($minok == -1 || $maxok == -1) {
             $dbmodules[$name]['state'] = $dbmodules[$name]['state'] + 20;
             $this->setState(array('id' => $dbmodules[$name]['id'], 'state' => $dbmodules[$name]['state']));
         }
         if (isset($dbmodules[$name]['state'])) {
             $filemodules[$name]['state'] = $dbmodules[$name]['state'];
         }
     }
     // See if we have lost any modules since last generation
     foreach ($dbmodules as $name => $modinfo) {
         if (!in_array($name, $module_names)) {
             $result = DBUtil::selectObjectByID('modules', $name, 'name');
             if ($result === false) {
                 return LogUtil::registerError($this->__('Error! Could not load data.'));
             }
             if (empty($result)) {
                 die($this->__('Error! Could not retrieve module ID.'));
             }
             if ($dbmodules[$name]['state'] == ModUtil::STATE_INVALID) {
                 // module was invalid and now it was removed, delete it
                 $this->remove(array('id' => $dbmodules[$name]['id']));
             } elseif ($dbmodules[$name]['state'] == ModUtil::STATE_UNINITIALISED) {
                 // module was uninitialised and subsequently removed, delete it
                 $this->remove(array('id' => $dbmodules[$name]['id']));
             } else {
                 // Set state of module to 'missing'
                 $this->setState(array('id' => $result['id'], 'state' => ModUtil::STATE_MISSING));
             }
             unset($dbmodules[$name]);
         }
     }
     // See if we have gained any modules since last generation,
     // or if any current modules have been upgraded
     foreach ($filemodules as $name => $modinfo) {
         if (empty($dbmodules[$name])) {
             // New module
             // RNG: set state to invalid if we can't determine an ID
             $modinfo['state'] = ModUtil::STATE_UNINITIALISED;
             if (!$modinfo['version']) {
                 $modinfo['state'] = ModUtil::STATE_INVALID;
             }
             if ($this->serviceManager['multisites.enabled'] == 1) {
                 // only the main site can regenerate the modules list
                 if ($this->serviceManager['multisites.mainsiteurl'] == FormUtil::getPassedValue('sitedns', null, 'GET') && $this->serviceManager['multisites.based_on_domains'] == 0 || $this->serviceManager['multisites.mainsiteurl'] == $_SERVER['HTTP_HOST'] && $this->serviceManager['multisites.based_on_domains'] == 1) {
                     DBUtil::insertObject($modinfo, 'modules');
                 }
             } else {
                 DBUtil::insertObject($modinfo, 'modules');
             }
         } else {
             // module is in the db already
             if ($dbmodules[$name]['state'] == ModUtil::STATE_MISSING) {
                 // module was lost, now it is here again
                 $this->setState(array('id' => $dbmodules[$name]['id'], 'state' => ModUtil::STATE_INACTIVE));
             } elseif ($dbmodules[$name]['state'] == ModUtil::STATE_INVALID && $modinfo['version']) {
                 // module was invalid, now it is valid
                 $modinfo = array_merge($modinfo, array('id' => $dbmodules[$name]['id'], 'state' => ModUtil::STATE_UNINITIALISED));
                 DBUtil::updateObject($modinfo, 'modules');
             }
             if ($dbmodules[$name]['version'] != $modinfo['version']) {
                 if ($dbmodules[$name]['state'] != ModUtil::STATE_UNINITIALISED && $dbmodules[$name]['state'] != ModUtil::STATE_INVALID) {
                     $this->setState(array('id' => $dbmodules[$name]['id'], 'state' => ModUtil::STATE_UPGRADED));
                 }
             }
         }
     }
     // now clear re-load the dependencies table with all current dependencies
     DBUtil::truncateTable('module_deps');
     // loop round dependences adding the module id - we do this now rather than
     // earlier since we won't have the id's for new modules at that stage
     $dependencies = array();
     ModUtil::flushCache();
     foreach ($moddependencies as $modname => $moddependency) {
         $modid = ModUtil::getIdFromName($modname);
         // each module may have multiple dependencies
         foreach ($moddependency as $dependency) {
             $dependency['modid'] = $modid;
             $dependencies[] = $dependency;
         }
     }
     DBUtil::insertObjectArray($dependencies, 'module_deps');
     return true;
 }
Пример #4
0
 /**
  * Initialise Zikula.
  *
  * Carries out a number of initialisation tasks to get Zikula up and
  * running.
  *
  * @param integer             $stage Stage to load.
  * @param Zikula_Request_Http $request
  *
  * @return boolean True initialisation successful false otherwise.
  */
 public function init($stage = self::STAGE_ALL, Request $request)
 {
     $GLOBALS['__request'] = $request;
     // hack for pre 1.5.0 - drak
     $coreInitEvent = new GenericEvent($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();
         $args = !System::isInstalling() ? array('lazy' => true) : array();
         $this->dispatcher->dispatch('core.preinit', new GenericEvent($this, $args));
     }
     // Initialise and load configuration
     if ($stage & self::STAGE_CONFIG) {
         // for BC only. remove this code in 2.0.0
         if (!System::isInstalling()) {
             $this->dispatcher->dispatch('setup.errorreporting', new GenericEvent(null, array('stage' => $stage)));
         }
         // initialise custom event listeners from config.php settings
         $coreInitEvent->setArgument('stage', self::STAGE_CONFIG);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     // create several booleans to test condition of request regrading install/upgrade
     $installed = $this->getContainer()->getParameter('installed');
     if ($installed) {
         self::defineCurrentInstalledCoreVersion($this->getContainer());
     }
     $requiresUpgrade = $installed && version_compare(ZIKULACORE_CURRENT_INSTALLED_VERSION, self::VERSION_NUM, '<');
     // can't use $request->get('_route') to get any of the following
     // all these routes are hard-coded in xml files
     $uriContainsInstall = strpos($request->getRequestUri(), '/install') !== false;
     $uriContainsUpgrade = strpos($request->getRequestUri(), '/upgrade') !== false;
     $uriContainsDoc = strpos($request->getRequestUri(), '/installdoc') !== false;
     $uriContainsWdt = strpos($request->getRequestUri(), '/_wdt') !== false;
     $uriContainsProfiler = strpos($request->getRequestUri(), '/_profiler') !== false;
     $uriContainsRouter = strpos($request->getRequestUri(), '/js/routing?callback=fos.Router.setData') !== false;
     $doNotRedirect = $uriContainsProfiler || $uriContainsWdt || $uriContainsRouter || $request->isXmlHttpRequest();
     // check if Zikula Core is not installed
     if (!$installed && !$uriContainsDoc && !$uriContainsInstall && !$doNotRedirect) {
         $this->container->get('router')->getContext()->setBaseUrl($request->getBasePath());
         // compensate for sub-directory installs
         $url = $this->container->get('router')->generate('install');
         $response = new RedirectResponse($url);
         $response->send();
         System::shutDown();
     }
     // check if Zikula Core requires upgrade
     if ($requiresUpgrade && !$uriContainsDoc && !$uriContainsUpgrade && !$doNotRedirect) {
         $this->container->get('router')->getContext()->setBaseUrl($request->getBasePath());
         // compensate for sub-directory installs
         $url = $this->container->get('router')->generate('upgrade');
         $response = new RedirectResponse($url);
         $response->send();
         System::shutDown();
     }
     if (!$installed || $requiresUpgrade || $this->getContainer()->hasParameter('upgrading')) {
         System::setInstalling(true);
     }
     if ($stage & self::STAGE_DB) {
         try {
             $dbEvent = new GenericEvent($this, array('stage' => self::STAGE_DB));
             $this->dispatcher->dispatch('core.init', $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('ZikulaExtensionsModule', 'ZikulaExtensionsModule');
         ModUtil::initCoreVars();
         ModUtil::dbInfoLoad('ZikulaSettingsModule', 'ZikulaSettingsModule');
         ModUtil::dbInfoLoad('ZikulaThemeModule', 'ZikulaThemeModule');
         ModUtil::dbInfoLoad('ZikulaUsersModule', 'ZikulaUsersModule');
         ModUtil::dbInfoLoad('ZikulaGroupsModule', 'ZikulaGroupsModule');
         ModUtil::dbInfoLoad('ZikulaPermissionsModule', 'ZikulaPermissionsModule');
         ModUtil::dbInfoLoad('ZikulaCategoriesModule', 'ZikulaCategoriesModule');
         // Add AutoLoading for non-symfony 1.3 modules in /modules
         if (!System::isInstalling()) {
             ModUtil::registerAutoloaders();
         }
         $coreInitEvent->setArgument('stage', self::STAGE_TABLES);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     if ($stage & self::STAGE_SESSIONS) {
         //            SessionUtil::requireSession();
         $coreInitEvent->setArgument('stage', self::STAGE_SESSIONS);
         $this->dispatcher->dispatch('core.init', $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($request);
         $coreInitEvent->setArgument('stage', self::STAGE_DECODEURLS);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     if ($stage & self::STAGE_LANGS) {
         $lang->setup($request);
         $coreInitEvent->setArgument('stage', self::STAGE_LANGS);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     // end block
     if ($stage & self::STAGE_MODS) {
         if (!System::isInstalling()) {
             ModUtil::load('ZikulaSecurityCenterModule');
         }
         $coreInitEvent->setArgument('stage', self::STAGE_MODS);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     if ($stage & self::STAGE_THEME) {
         // register default page vars
         PageUtil::registerVar('polyfill_features', true);
         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);
         // set some defaults
         // Metadata for SEO
         $this->container->setParameter('zikula_view.metatags', array('description' => System::getVar('defaultmetadescription'), 'keywords' => System::getVar('metakeywords')));
         $coreInitEvent->setArgument('stage', self::STAGE_THEME);
         $this->dispatcher->dispatch('core.init', $coreInitEvent);
     }
     // check the users status, if not 1 then log him out
     if (!System::isInstalling() && 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('ZikulaUsersModule', 'user', 'login'));
         }
     }
     if ($stage & self::STAGE_POST && $this->stage & ~self::STAGE_POST) {
         $this->dispatcher->dispatch('core.postinit', new GenericEvent($this, array('stages' => $stage)));
     }
 }