/** * Initialize object oriented module. * * @param string $moduleName Module name. * * @return boolean */ public static function initOOModule($moduleName) { if (self::isInitialized($moduleName)) { return true; } $modinfo = self::getInfo(self::getIdFromName($moduleName)); if (!$modinfo) { return false; } $modpath = $modinfo['type'] == self::TYPE_SYSTEM ? 'system' : 'modules'; $osdir = DataUtil::formatForOS($modinfo['directory']); ZLoader::addAutoloader($moduleName, realpath("{$modpath}/{$osdir}/lib")); // load optional bootstrap $bootstrap = "{$modpath}/{$osdir}/bootstrap.php"; if (file_exists($bootstrap)) { include_once $bootstrap; } // register any event handlers. // module handlers must be attached from the bootstrap. if (is_dir("config/EventHandlers/{$osdir}")) { EventUtil::attachCustomHandlers("config/EventHandlers/{$osdir}"); } // load any plugins PluginUtil::loadPlugins("{$modpath}/{$osdir}/plugins", "ModulePlugin_{$osdir}"); self::$ooModules[$moduleName]['initialized'] = true; return true; }
/** * Constructor. * * @param Zikula_ServiceManager $serviceManager ServiceManager. * @param string $themeName Theme name. */ public function __construct(Zikula_ServiceManager $serviceManager, $themeName) { // store our theme information $this->themeinfo = ThemeUtil::getInfo(ThemeUtil::getIDFromName($themeName)); // prevents any case mismatch $themeName = $this->themeinfo['name']; foreach (array('name', 'directory', 'version', 'state', 'xhtml') as $key) { $this->{$key} = $this->themeinfo[$key]; } parent::__construct($serviceManager); if ($this->themeinfo['i18n']) { ZLanguage::bindThemeDomain($this->name); // property for {gt} template plugin to detect language domain $this->domain = ZLanguage::getThemeDomain($this->name); } else { $this->domain = null; } EventUtil::attachCustomHandlers("themes/{$themeName}/EventHandlers"); EventUtil::attachCustomHandlers("themes/{$themeName}/lib/{$themeName}/EventHandlers"); $event = new \Zikula\Core\Event\GenericEvent($this); $this->eventManager->dispatch('theme.preinit', $event); // change some base settings from our parent class // template compilation $this->compile_dir = CacheUtil::getLocalDir('Theme_compiled'); $this->compile_check = ModUtil::getVar('ZikulaThemeModule', 'compile_check'); $this->force_compile = ModUtil::getVar('ZikulaThemeModule', 'force_compile'); // template caching $this->cache_dir = CacheUtil::getLocalDir('Theme_cache'); $this->caching = (int) ModUtil::getVar('ZikulaThemeModule', 'enablecache'); //if ($this->caching) { // $this->cache_modified_check = true; //} // if caching and is not an admin controller if ($this->caching && strpos($this->type, 'admin') !== 0) { $modulesnocache = array_filter(explode(',', ModUtil::getVar('ZikulaThemeModule', 'modulesnocache'))); if (in_array($this->toplevelmodule, $modulesnocache)) { $this->caching = Zikula_View::CACHE_DISABLED; } } else { $this->caching = Zikula_View::CACHE_DISABLED; } // halt caching for write operations to prevent strange things happening if (isset($_POST) && count($_POST) != 0) { $this->caching = Zikula_View::CACHE_DISABLED; } // and also for GET operations with csrftoken/authkey if (isset($_GET['csrftoken']) || isset($_GET['authkey'])) { $this->caching = Zikula_View::CACHE_DISABLED; } $this->cache_lifetime = ModUtil::getVar('ZikulaThemeModule', 'cache_lifetime'); if (!$this->homepage) { $this->cache_lifetime = ModUtil::getVar('ZikulaThemeModule', 'cache_lifetime_mods'); } // assign all our base template variables $this->_base_vars(); // define the plugin directories $this->_plugin_dirs(); // load the theme configuration $this->load_config(); // check for cached output // turn on caching, check for cached output and then disable caching // to prevent blocks from being cached if ($this->caching && $this->is_cached($this->themeconfig['page'], $this->cache_id)) { $this->display($this->themeconfig['page'], $this->cache_id); System::shutdown(); } // register page vars output filter $this->load_filter('output', 'pagevars'); // register short urls output filter if (System::getVar('shorturls')) { $this->load_filter('output', 'shorturls'); } // register trim whitespace output filter if requried if (ModUtil::getVar('ZikulaThemeModule', 'trimwhitespace')) { $this->load_filter('output', 'trimwhitespace'); } $this->load_filter('output', 'asseturls'); $event = new \Zikula\Core\Event\GenericEvent($this); $this->eventManager->dispatch('theme.init', $event); $this->startOutputBuffering(); }