getTemplatePath(); if(!is_dir($template_path)) { if ($oModule->module_info->module == $oModule->module) $skin = $oModule->origin_module_info->skin; else $skin = $oModule->module_config->skin; if(Context::get('module')!='admin' && strpos(Context::get('act'),'Admin') === false) { if ($skin && is_string($skin)) { $theme_skin = explode('|@|', $skin); $template_path = $oModule->getTemplatePath(); if(count($theme_skin) == 2) { $theme_path = sprintf('./themes/%s',$theme_skin[0]); if(substr($theme_path,0,strlen($theme_path)) != $theme_path) { $template_path = sprintf('%s/modules/%s/', $theme_path, $theme_skin[1]); } } } else { $template_path = $oModule->getTemplatePath(); } } else { $template_path = $oModule->getTemplatePath(); } } $tpl_file = $oModule->getTemplateFile(); $output = $oTemplate->compile($template_path, $tpl_file); // add .x div for adminitration pages if(Context::getResponseMethod() == 'HTML') { if(Context::get('module')!='admin' && strpos(Context::get('act'),'Admin')>0) $output = '
'.$output.'
'; if(Context::get('layout') != 'none') { if(__DEBUG__==3) $start = getMicroTime(); Context::set('content', $output, false); $layout_path = $oModule->getLayoutPath(); $layout_file = $oModule->getLayoutFile(); $edited_layout_file = $oModule->getEditedLayoutFile(); // get the layout information currently requested $oLayoutModel = &getModel('layout'); $layout_info = Context::get('layout_info'); $layout_srl = $layout_info->layout_srl; // compile if connected to the layout if($layout_srl > 0) { // handle separately if the layout is faceoff if($layout_info && $layout_info->type == 'faceoff') { $oLayoutModel->doActivateFaceOff($layout_info); Context::set('layout_info', $layout_info); } // search if the changes CSS exists in the admin layout edit window $edited_layout_css = $oLayoutModel->getUserLayoutCss($layout_srl); if(file_exists($edited_layout_css)) Context::loadFile(array($edited_layout_css,'all','',100)); } if(!$layout_path) $layout_path = './common/tpl'; if(!$layout_file) $layout_file = 'default_layout'; $output = $oTemplate->compile($layout_path, $layout_file, $edited_layout_file); if(__DEBUG__==3) $GLOBALS['__layout_compile_elapsed__'] = getMicroTime()-$start; if(preg_match('/MSIE/i',$_SERVER['HTTP_USER_AGENT']) && (Context::get('_use_ssl') == 'optional' || Context::get('_use_ssl') == 'always')) { Context::addHtmlFooter(''); } } } return $output; } /** * when display mode is HTML, prepare code before print. * @param string $output compiled template string * @return void */ function prepareToPrint(&$output) { if(Context::getResponseMethod() != 'HTML') return; if(__DEBUG__==3) $start = getMicroTime(); // move in body to the header $output = preg_replace_callback('!!is', array($this,'_moveStyleToHeader'), $output); // move in body to the header $output = preg_replace_callback('!!is', array($this,'_moveMetaToHeader'), $output); // change a meta fine(widget often put the tag like to the content because of caching) $output = preg_replace_callback('//is', array($this,'_transMeta'), $output); // handles a relative path generated by using the rewrite module if(Context::isAllowRewrite()) { $url = parse_url(Context::getRequestUri()); $real_path = $url['path']; $pattern = '/src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/s'; $output = preg_replace($pattern, 'src=$1'.$real_path.'$3/$4.$5$6', $output); $pattern = '/href=("|\'){1}(\?[^"\']+)/s'; $output = preg_replace($pattern, 'href=$1'.$real_path.'$2', $output); if(Context::get('vid')) { $pattern = '/\/'.Context::get('vid').'\?([^=]+)=/is'; $output = preg_replace($pattern, '/?$1=', $output); } } // prevent the 2nd request due to url(none) of the background-image $output = preg_replace('/url\((["\']?)none(["\']?)\)/is', 'none', $output); if(is_array(Context::get('INPUT_ERROR'))) { $INPUT_ERROR = Context::get('INPUT_ERROR'); $keys = array_keys($INPUT_ERROR); $keys = '('.implode('|', $keys).')'; $output = preg_replace_callback('@(]*?)\sname="'.$keys.'"([^>]*?)/?>@is', array(&$this, '_preserveValue'), $output); $output = preg_replace_callback('@]*\sname="'.$keys.'".+@isU', array(&$this, '_preserveSelectValue'), $output); $output = preg_replace_callback('@]*\sname="'.$keys.'".+@isU', array(&$this, '_preserveTextAreaValue'), $output); } if(__DEBUG__==3) $GLOBALS['__trans_content_elapsed__'] = getMicroTime()-$start; // Remove unnecessary information $output = preg_replace('/member\_\-([0-9]+)/s','member_0',$output); // set icon $oAdminModel = &getAdminModel('admin'); $favicon_url = $oAdminModel->getFaviconUrl(); $mobicon_url = $oAdminModel->getMobileIconUrl(); Context::set('favicon_url', $favicon_url); Context::set('mobicon_url', $mobicon_url); // convert the final layout Context::set('content', $output); $oTemplate = &TemplateHandler::getInstance(); if(Mobile::isFromMobilePhone()) { $output = $oTemplate->compile('./common/tpl', 'mobile_layout'); } else { $this->_loadJSCSS(); $this->_addMetaTag(); $output = $oTemplate->compile('./common/tpl', 'common_layout'); } // replace the user-defined-language $oModuleController = &getController('module'); $oModuleController->replaceDefinedLangCode($output); } /** * when display mode is HTML, prepare code before print about tag value. * @param array $match input value. * @return string input value. */ function _preserveValue($match) { $INPUT_ERROR = Context::get('INPUT_ERROR'); $str = $match[1].$match[2].' name="'.$match[3].'"'.$match[4]; // get type $type = 'text'; if(preg_match('/\stype="([a-z]+)"/i', $str, $m)) $type = strtolower($m[1]); switch($type) { case 'text': case 'hidden': $str = preg_replace('@\svalue="[^"]*?"@', ' ', $str).' value="'.@htmlspecialchars($INPUT_ERROR[$match[3]]).'"'; break; case 'password': $str = preg_replace('@\svalue="[^"]*?"@', ' ', $str); break; case 'radio': case 'checkbox': $str = preg_replace('@\schecked(="[^"]*?")?@', ' ', $str); if(@preg_match('@\s(?i:value)="'.$INPUT_ERROR[$match[3]].'"@', $str)) { $str .= ' checked="checked"'; } break; } return $str.' />'; } /** * when display mode is HTML, prepare code before print about '; } /** * when display mode is HTML, prepare code before print about '; } /** * add html style code extracted from html body to Context, which will be * printed inside
later. * @param array $matches * @return void */ function _moveStyleToHeader($matches) { Context::addHtmlHeader($matches[0]); } /** * add meta code extracted from html body to Context, which will be * printed inside
later. * @param array $matches * @return void */ function _moveMetaToHeader($matches) { Context::addHtmlHeader($matches[0]); } /** * add given .css or .js file names in widget code to Context * @param array $matches * @return void */ function _transMeta($matches) { if($matches[1]) return ''; Context::loadFile($matches[2]); } /** * import basic .js files. * @return void */ function _loadJSCSS() { $oContext =& Context::getInstance(); $lang_type = Context::getLangType(); // add common JS/CSS files if(__DEBUG__) { $oContext->loadFile(array('./common/js/jquery.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/js/x.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/js/common.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/js/js_app.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/js/xml_handler.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/js/xml_js_filter.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/css/xe.css', '', '', -100000), true); } else { $oContext->loadFile(array('./common/js/jquery.min.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/js/x.min.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/js/xe.min.js', 'head', '', -100000), true); $oContext->loadFile(array('./common/css/xe.min.css', '', '', -100000), true); } // for admin page, add admin css if(Context::get('module')=='admin' || strpos(Context::get('act'),'Admin')>0) { if(__DEBUG__) { $oContext->loadFile(array('./modules/admin/tpl/css/admin.css', '', '', 10), true); $oContext->loadFile(array("./modules/admin/tpl/css/admin_{$lang_type}.css", '', '', 10), true); $oContext->loadFile(array("./modules/admin/tpl/css/admin.iefix.css", '', 'ie', 10), true); $oContext->loadFile('./modules/admin/tpl/js/admin.js', true); $oContext->loadFile(array('./common/css/bootstrap.css', '', '', 1), true); } else { $oContext->loadFile(array('./modules/admin/tpl/css/admin.min.css', '', '', 10), true); $oContext->loadFile(array("./modules/admin/tpl/css/admin_{$lang_type}.css", '', '',10), true); $oContext->loadFile(array("./modules/admin/tpl/css/admin.iefix.min.css", '', 'ie', 10), true); $oContext->loadFile('./modules/admin/tpl/js/admin.min.js', true); $oContext->loadFile(array('./common/css/bootstrap.min.css', '', '', 1), true); } } } /** * add meta tag. * @return void */ function _addMetaTag() { $oContext =& Context::getInstance(); $oContext->addMetaTag('Content-Type', 'text/html; charset=UTF-8', true); $oContext->addMetaTag('imagetoolbar', 'no'); } } /* End of file HTMLDisplayHandler.class.php */ /* Location: ./classes/display/HTMLDisplayHandler.class.php */