Пример #1
0
 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;
 }
Пример #2
0
 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;
     }
 }