false, 'display' => true, 'metas' => array('', '', '', '') ); /** * @var mixed[] */ protected static $defineBlocks = array('head' => array()); protected function buildHead() { return $this->block('head'); } protected function buildBody() { return $this->children(); } protected function build() { global $lang, $config, $app; $setXuanClass = str_contains($_SERVER['HTTP_USER_AGENT'], 'xuanxuan') ? setClass('xxc-embed') : null; $zui = $this->prop('zui'); $head = $this->buildHead(); $body = $this->buildBody(); $context = context(); $jsConfig = \js::getJSConfigVars(); $bodyProps = $this->prop('bodyProps'); $bodyClass = $this->prop('bodyClass'); $metas = $this->prop('metas'); $rawContent = $this->prop('rawContent', !$context->rawContentCalled); $hookContent = $this->prop('hookContent', !$context->hookContentCalled); $title = $this->props->get('title', data('title')) . " - $lang->zentaoPMS"; $attrs = $this->getRestProps(); $css = array(data('pageCSS'), '/*{{ZIN_PAGE_CSS}}*/'); $js = array('/*{{ZIN_PAGE_JS}}*/', data('pageJS')); $imports = $context->getImports(); $webRoot = $app->getWebRoot(); $themeName = $app->cookie->theme; $zuiPath = $config->zin->zuiPath; $pageID = $jsConfig->currentModule . '-' . $jsConfig->currentMethod; $zinMode = isset($config->zin->mode) ? $config->zin->mode : ''; $jsConfig->zin = !empty($zinMode) ? $zinMode : true; $jsConfig->maxUploadSize = ini_get('upload_max_filesize'); $headImports = array(); $headImports[] = h::favicon($webRoot . 'favicon.ico'); $headImports[] = h::jsVar('window.config', $jsConfig, setID('configJS')); if($zui) { $headImports[] = h::importCss($zuiPath . 'zui.zentao.css', setID('zuiCSS')); $headImports[] = h::importCss($zuiPath . 'themes/' . $themeName . '.css', setID('zuiTheme')); $headImports[] = h::importJs($zuiPath . 'zui.zentao.js', setID('zuiJS')); $headImports[] = h::jsCall('$.setLibRoot', $zuiPath); $extraCSS = isset($config->zin->extraCSS) ? $config->zin->extraCSS : ''; if(!empty($extraCSS)) $headImports[] = h::importCss($webRoot . 'js/zui3/' . $extraCSS); } if($config->debug) { $zinDebugData = array('config' => jsRaw('window.config')); if($config->debug > 4) { $zinDebugData['zinTool'] = isset($config->zinTool) ? $config->zinTool : false; if($config->debug > 5) { $zinDebugData['page'] = $this->toJSON(); $zinDebugData['definedProps'] = wg::$definedPropsMap; $zinDebugData['wgBlockMap'] = wg::$blockMap; } } $headImports[] = h::js('window.zin = ' . js::value($zinDebugData) . ';'); } else { $headImports[] = h::js('window.zin = {};'); } if($setXuanClass) $headImports[] = h::importCss($config->webRoot . 'zentaoclient.css', setID('zentaoclient')); if($zui) { $extraJS = isset($config->zin->extraJS) ? $config->zin->extraJS : 'zin.js'; if(!empty($extraJS)) $headImports[] = h::importJs($webRoot . 'js/zui3/' . $extraJS); array_unshift($js, 'zui.defineFn();'); } $currentLang = $this->props->get('lang'); if(empty($currentLang)) $currentLang = $app->getClientLang(); return h::html ( before(html('')), set($attrs), set::className("theme-$themeName", $this->prop('class')), set::lang($currentLang), $setXuanClass, h::head ( html($metas), h::title(html(html_entity_decode($title))), $this->block('headBefore'), $headImports, $head ), h::body ( set($bodyProps), set::className($bodyClass), $setXuanClass, empty($imports) ? null : h::import($imports), h::css($css, setClass('zin-page-css'), setData('id', $pageID)), $body, $rawContent ? rawContent() : null, $hookContent ? hookContent() : null, h::js($js, setClass('zin-page-js'), setData('id', $pageID)) ) ); } }