public function dispatch() { $cacheType = 'widgets'; $request = $this->_request; /** * XML */ $xmlFilename = array($this->_module, $this->_widget, $this->_action); $xmlFilename = implode('_', $xmlFilename); /** * Check file html cache */ $globalConfig = Gio_Core_Config_Xml::getConfig(); $configs = Gio_Core_Config_Xml::getConfig('cache'); $checkCache = false; if ($configs->enable == 'true' && $this->_cacheEnable == true) { $cacheName = $xmlFilename; $postParams = $request->getPostParams(); $getParams = $request->getParams(); $widgetParams = $this->_params; $json = new Services_JSON(); $cacheParams = !empty($postParams) ? base64_encode($json->encodeUnsafe($postParams)) : null; $cacheParams = !empty($getParams) ? base64_encode($json->encodeUnsafe($getParams)) : null; $cacheParams = !empty($widgetParams) ? base64_encode($json->encodeUnsafe($widgetParams)) : null; $cacheKey = md5($cacheName . $this->_template . $cacheParams . base64_encode($json->encodeUnsafe($globalConfig))); $cacheTimeout = $this->_cacheTimeout ? $this->_cacheTimeout : 3600; /** * Create html file cache */ if ($checkCache = Gio_Core_Cache::isCached($cacheType, $cacheKey, $cacheTimeout)) { $html = $this->view->render(Gio_Core_Cache::_generateFileName($cacheType, $cacheKey)); return $html; } } /** * Localization config */ $aboutFile = ROOT_DIR . DS . 'modules' . DS . $this->_module . DS . 'widgets' . DS . $this->_widget . DS . 'about.xml'; if (file_exists($aboutFile)) { $info = @simplexml_load_file($aboutFile); $localization = $info->localization['enable']; if ($localization != null && 'true' == (string) $localization) { $idClass = (string) $info->localization->identifier['class']; $idParam = (string) $info->localization->identifier['param']; $this->_params[$idParam] = isset($this->_params[$idParam]) ? $this->_params[$idParam] : null; $conn = Gio_Db_Connection::getConnection(); $this->_translationDao->setConnection($conn); $items = $this->_translationDao->getItems($this->_params[$idParam], $idClass, $request->getParam('lang')); if ($items != null && 1 == count($items)) { $this->_params[$idParam] = $items[0]['item_id']; } } } $ucfModule = ucfirst($this->_module); $ucfWidget = ucfirst($this->_widget); $widgetClassName = array('Modules', $ucfModule, 'Widgets', $ucfWidget, 'Widget'); $widgetClassName = implode('_', $widgetClassName); $widgetClass = new $widgetClassName(); if (!method_exists($widgetClass, $this->_action . 'Action')) { return; } $widgetClass->setParams($this->_params); call_user_func(array($widgetClass, $this->_action . 'Action')); $widgetDefaultViewFile = MOD_DIR . DS . $this->_module . DS . 'widgets' . DS . $this->_widget . DS . $this->_action . '.phtml'; $widgetViewFile = TEMPLATE_DIR . DS . $this->_template . DS . 'modules' . DS . $this->_module . DS . 'widgets' . DS . $this->_widget . DS . $this->_action . '.phtml'; $widgetViewFile = file_exists($widgetViewFile) ? $widgetViewFile : $widgetDefaultViewFile; $widgetClass->view->cacheEnable = $this->_cacheEnable; $widgetClass->view->cacheTimeout = $this->_cacheTimeout; $return = $widgetClass->view->render($widgetViewFile); if (!isset($this->_params['load']) || $this->_params['load'] != 'ajax') { $jsCss = array('cssFiles' => array(), 'jsFiles' => array()); $search = array('{APP_WEB_URL}', '{APP_STATIC_SERVER}', '{WIDGET_URL}'); $replace = array($this->view->APP_WEB_URL, $this->view->APP_STATIC_SERVER, $this->view->APP_STATIC_SERVER . DS . 'modules' . DS . strtolower($this->_module) . DS . 'widgets' . DS . strtolower($this->_widget)); $configFile = ROOT_DIR . DS . 'modules' . DS . strtolower($this->_module) . DS . 'widgets' . DS . strtolower($this->_widget) . DS . 'about.xml'; if (file_exists($configFile)) { $widgetConfig = @simplexml_load_file($configFile); if ($resources = $widgetConfig->resources) { if ($resources = $resources->resource) { foreach ($resources as $resource) { $attr = $resource->attributes(); switch ((string) $attr['type']) { case 'css': $jsCss['cssFiles'][] = str_replace($search, $replace, (string) $attr['src']); break; case 'javascript': $jsCss['jsFiles'][] = str_replace($search, $replace, (string) $attr['src']); break; } } } } } if ($jsCss['cssFiles']) { foreach ($jsCss['cssFiles'] as $index => $file) { Gio_Core_View::getInstance()->headStyle($file); } } if ($jsCss['jsFiles']) { foreach ($jsCss['jsFiles'] as $index => $file) { Gio_Core_View::getInstance()->headScript($file); } } } if (!$checkCache && $configs->enable == 'true' && $this->_cacheEnable == true) { $cacheCompress = isset($configs->compress) && $configs->compress == 'true' ? true : false; $cacheContent = Gio_Core_View::getInstance()->generateScripts() . Gio_Core_View::getInstance()->generateStyles() . $return; /** * HTML Compress */ if (isset($configs->compress) && $configs->compress == 'true') { $cacheContent = Gio_Core_HtmlCompress::compress($cacheContent); } Gio_Core_Cache::cache($cacheType, $cacheKey, $cacheContent, $cacheCompress); } return $return; }
public function dispatch() { $this->view = Gio_Core_View::getInstance(); $controllerFront = Gio_Core_Controller::getIntance(); /** * XML */ $xmlFilename = array($this->_module, $this->_controller, $this->_action); $xmlFilename = implode('_', $xmlFilename); $blocksData = array(); $xmlFile = TEMPLATE_DIR . DS . $this->view->APP_TEMPLATE . DS . 'data' . DS . $xmlFilename . '.xml'; if ($this->view->getAdminSection()) { $xmlFile = TEMPLATE_DIR . DS . $this->view->APP_TEMPLATE . DS . 'data' . DS . $this->view->APP_TEMPLATE . '.xml'; } if (file_exists($xmlFile)) { $xmlData = simplexml_load_file($xmlFile); $blocksData = $xmlData->block; } /** * Check file html cache */ $globalConfig = Gio_Core_Config_Xml::getConfig(); $configs = Gio_Core_Config_Xml::getConfig('cache'); $checkCache = false; if ($configs->enable == 'true' && !$this->view->getAdminSection()) { $cacheName = $xmlFilename; $postParams = $this->_request->getPostParams(); $getParams = $this->_request->getParams(); $json = new Services_JSON(); $cacheParams = !empty($postParams) ? base64_encode($json->encodeUnsafe($postParams)) : null; $cacheParams .= !empty($getParams) ? base64_encode($json->encodeUnsafe($getParams)) : null; $cacheKey = md5($cacheName . $this->view->APP_TEMPLATE . $cacheParams . base64_encode($json->encodeUnsafe($globalConfig))); $cacheType = 'actions'; $cacheTimeout = isset($configs->timeout) ? $configs->timeout : 3600; if ($blocksData) { foreach ($blocksData as $index => $block) { if ($block->block_name == 'MAIN_CONTENT' && isset($block->cache->enable) && $block->cache->enable == 'true') { $cacheTimeout = isset($block->cache->timeout) ? $block->cache->timeout : 3600; /** * Create html file cache */ if ($checkCache = Gio_Core_Cache::isCached($cacheType, $cacheKey, $cacheTimeout)) { $html = $this->view->render(Gio_Core_Cache::_generateFileName($cacheType, $cacheKey)); return $html; } } } } } $ucfModule = ucfirst($this->_module); $ucfController = ucfirst($this->_controller); $controllerClassName = array('Modules', $ucfModule, 'Controllers', $ucfController); $controllerClassName = implode('_', $controllerClassName); if (!class_exists($controllerClassName)) { Modules_Core_Services_Exception::error('CLASS_NOT_FOUND', $controllerClassName); } $controllerClass = new $controllerClassName(); /** * Call init function */ if (method_exists($controllerClass, 'init')) { $controllerClass->init(); } self::$_instance = $controllerClass; if (!method_exists($controllerClass, $this->_action . 'Action')) { Modules_Core_Services_Exception::error('ACTION_NOT_FOUND', $controllerClassName . '::' . $this->_action . 'Action'); return; } call_user_func(array($controllerClass, $this->_action . 'Action')); $actionCache = array('enable' => false, 'timeout' => 0); if (!Gio_Core_Controller::getIntance()->getDisableLayout()) { $widgetObject = Gio_Core_Widget::getIntance(); if ($blocksData) { foreach ($blocksData as $index => $block) { if (!isset($block->visible) || (string) $block->visible != 'false') { if ($block->type == 'widget') { /** * Set Widget User Params */ $userParams = isset($block->params) ? (array) $block->params : null; $paramString = null; if ($userParams) { $request = $widgetObject->getRequest(); foreach ($userParams as $paramIndex => $param) { switch ($param) { case 'GLOBAL': $userParams[$paramIndex] = $request->getParam($paramIndex); $param = $request->getParam($paramIndex); break; default: //$request->setParam($paramIndex, $param); break; } $paramString .= $paramString ? '|' : null; $paramString .= $paramIndex . '=' . $param; } } $userParams['module'] = $block->module; $userParams['widget'] = $block->name; if (isset($block->load) && $block->load == 'ajax') { $this->view->module = $block->module; $this->view->widget = $block->name; $this->view->action = $block->action; $this->view->cacheEnable = isset($block->cache->enable) && $block->cache->enable == 'true' ? true : false; $this->view->cacheTimeout = isset($block->cache->timeout) && $block->cache->timeout > 0 ? $block->cache->timeout : 3600; $this->view->params = $paramString; $this->view->uuid = uniqid(); /** * Loading Js & Css */ $widgetViewFile = TEMPLATE_DIR . DS . $this->view->APP_TEMPLATE . DS . 'modules' . DS . $block->module . DS . 'widgets' . DS . $block->name . DS . $block->action . '.phtml'; if (file_exists($widgetViewFile)) { $jsCss = $this->view->render($widgetViewFile); } /** * Render Ajax Script */ $widgetViewFile = ROOT_DIR . DS . 'modules' . DS . 'core' . DS . 'views' . DS . 'core' . DS . 'widgets' . DS . 'ajax.phtml'; $this->view->{$block->block_name} = $this->view->render($widgetViewFile); } else { $cacheEnable = isset($block->cache->enable) && $block->cache->enable == 'true' ? true : false; $cacheTimeout = isset($block->cache->timeout) && $block->cache->timeout > 0 ? $block->cache->timeout : 0; $widgetObject->setTemplate($this->view->APP_TEMPLATE)->setModuleName($block->module)->setWidgetName($block->name)->setActionName($block->action)->setCacheEnable($cacheEnable)->setCacheTimeout($cacheTimeout)->setParams($userParams); $this->view->{$block->block_name} = $widgetObject->dispatch(); } } elseif ($block->block_name == 'MAIN_CONTENT') { $actionCache['enable'] = isset($block->cache->enable) && $block->cache->enable == 'true' ? true : false; $actionCache['timeout'] = isset($block->cache->timeout) && $block->cache->timeout > 0 ? $block->cache->timeout : 0; } } } } } $actionViewFile = TEMPLATE_DIR . DS . $this->view->APP_TEMPLATE . DS . 'modules' . DS . $this->_module . DS . $this->_controller . DS . $this->_action . '.phtml'; if (!file_exists($actionViewFile)) { /** * Default action view file */ $actionViewFile = ROOT_DIR . DS . 'modules' . DS . $this->_module . DS . 'views' . DS . $this->_controller . DS . $this->_action . '.phtml'; } if (!Gio_Core_Controller::getIntance()->getNoRender()) { $content = $controllerClass->view->render($actionViewFile); $this->view->MAIN_CONTENT = $content; } if (!Gio_Core_Controller::getIntance()->getDisableLayout()) { $xmlFilename = isset($this->view->APP_LAYOUT) && $this->view->APP_LAYOUT ? $this->view->APP_LAYOUT : $xmlFilename; $layoutFile = TEMPLATE_DIR . DS . $this->view->APP_TEMPLATE . DS . 'layouts' . DS . $xmlFilename . '.phtml'; if ($this->view->getAdminSection()) { $layoutFile = TEMPLATE_DIR . DS . $this->view->APP_TEMPLATE . DS . 'layouts' . DS . $this->view->APP_TEMPLATE . '.phtml'; } /** * Check param __GIOCMS_ERROR__ */ if (Gio_Core_Request::getInstance()->getParam('__GIOCMS_ERROR__') == true) { $layoutFile = TEMPLATE_DIR . DS . $this->_template . DS . 'layouts' . DS . $this->_layout . '.phtml'; } $return = $this->view->render($layoutFile); if (!$checkCache && $configs->enable == 'true' && !$this->view->getAdminSection() && $actionCache['enable'] == true) { $cacheCompress = isset($configs->compress) && $configs->compress == 'true' ? true : false; $cacheContent = $this->view->generateTitle() . $this->view->generateScripts() . $this->view->generateStyles() . $return; Gio_Core_Cache::cache($cacheType, $cacheKey, $cacheContent, $cacheCompress); } return $return; } elseif (!Gio_Core_Controller::getIntance()->getNoRender()) { return $content; } }