$v) if(is_array($v)) $this->recTesting($arr[$k]); else if(isset($testingLinks[$k])) $arr[$k].=" func=\"".$testingLinks[$k]."\""; } function Testing() { if(!$this->testingFlag) return; $this->recTesting($this->xt_vars); } function report_error($message) { echo $message; exit(); } /** * @param Boolean hideAddedCharts (optional) #9607 1. */ function XTempl( $hideAddedCharts = false ) { global $mlang_charsets; $this->xt_vars=array(); $this->xt_stack=array(); $this->xt_stack[]=&$this->xt_vars; if (!isMobile()) { xtempl_include_header($this,"header","include/header.php"); xtempl_include_header($this,"footer","include/footer.php"); } else { xtempl_include_header($this,"header","include/mheader.php"); xtempl_include_header($this,"footer","include/mfooter.php"); } $this->assign_method("event",$this, "xt_doevent",array()); $this->assign_function("label","xt_label",array()); $this->assign_function("custom","xt_custom",array()); $this->assign_function("caption","xt_caption",array()); $this->assign_function("pagetitlelabel", "xt_pagetitlelabel", array()); $this->assign_method("mainmenu",$this,"xt_displaymainmenu",array()); $this->assign_method("menu",$this,"xt_displaymenu",array()); $this->assign_function("TabGroup","xt_displaytabs",array()); $this->assign_function("Section","xt_displaytabs",array()); if( !$hideAddedCharts ) //#9607 1. Temporary fix { } $mlang_charsets=array(); $mlang_charsets["Chinese (Hong Kong S.A.R.)"]="big5"; $mlang_charsets["English"]="Windows-1252";; $this->charsets = &$mlang_charsets; $html_attrs = ''; if(isRTL()) { $this->assign("RTL_block",true); $this->assign("rtlCSS",true); $html_attrs .= 'dir="RTL" '; } else $this->assign("LTR_block",true); if(mlang_getcurrentlang() == 'English') $html_attrs .= 'lang="en"'; $this->assign("html_attrs",$html_attrs); $this->assign("menu_block",true); } /** * Assign value to name. * @intellisense */ function assign($name,$val) { $this->xt_vars[$name]=$val; } /** * Assign value to name by reference. * @intellisense */ function assignbyref($name,&$var) { $this->xt_vars[$name]=&$var; } function enable_section($name) { if(!isset($this->xt_vars[$name])) { $this->xt_vars[$name] = true; } elseif($this->xt_vars[$name] == false) { $this->xt_vars[$name] = true; } } function assign_section($name,$begin,$end) { $arr = array(); $arr["begin"]=$begin; $arr["end"]=$end; $this->xt_vars[$name]=&$arr; } function assign_loopsection($name,&$data) { $arr = array(); $arr["data"]=&$data; $this->xt_vars[$name]=&$arr; } function assign_array($name,$innername,$_arr) { $arr = array(); foreach($_arr as $a) $arr[] = array($innername => $a); $this->xt_vars[$name]=array("data" => $arr); } function assign_loopsection_byValue($name, $data) { $arr = array(); $arr["data"] = $data; $this->xt_vars[$name] = &$arr; } function assign_function($name,$func,$params) { $this->xt_vars[$name]=array("func"=>$func,"params"=>$params); } function assign_method($name,&$object,$method,$params) { $this->xt_vars[$name]=array("method"=>$method,"params"=>$params); $this->xt_vars[$name]["object"]=&$object; } /** * Remove assigned element * @param string - name of assigned element * @intellisense */ function unassign($name){ unset($this->xt_vars[$name]); } function assign_event($name,&$object,$method,$params) { $this->xt_events[$name]=array("method"=>$method,"params"=>$params); $this->xt_events[$name]["object"]=&$object; } function xt_doevent($params) { if (isset($this->xt_events[@$params["custom1"]])) { $eventArr = $this->xt_events[@$params["custom1"]]; if(isset($eventArr["method"])) { $params=array(); if(isset($eventArr["params"])) $params=$eventArr["params"]; $method=$eventArr["method"]; $eventArr["object"]->$method($params); return; } } global $strTableName, $globalEvents; if($this->eventsObject) $eventObj = &$this->eventsObject; elseif(strlen($strTableName)) $eventObj = getEventObject($strTableName); else $eventObj = &$globalEvents; if(!$eventObj) return; $eventName = $params["custom1"]; if(!$eventObj->exists($eventName)) return; $eventObj->$eventName($params); } function fetchVar($varName) { ob_start(); $varParams = array(); $this->processVar($this->getVar($varName), $varParams); $out=ob_get_contents(); ob_end_clean(); return $out; } function fetch_loaded($filtertag="") { ob_start(); $this->display_loaded($filtertag); $out=ob_get_contents(); ob_end_clean(); return $out; } function fetch_loaded_before($filtertag) { $pos1=strpos($this->template,"{BEGIN ".$filtertag."}"); if($pos1===false) return; $str=substr($this->template,0,$pos1); ob_start(); $this->Testing(); xt_process_template($this,$str); $out=ob_get_contents(); ob_end_clean(); return $out; } function fetch_loaded_after($filtertag) { $pos2=strpos($this->template,"{END ".$filtertag."}"); if($pos2===false) return; $str=substr($this->template,$pos2+strlen("{END ".$filtertag."}")); ob_start(); $this->Testing(); xt_process_template($this,$str); $out=ob_get_contents(); ob_end_clean(); return $out; } function call_func($var) { return xtempl_get_func_output($var); } function set_template($template) { // read template file $templatesPath = "templates/"; if (isMobile()) $templatesPath = "mobile/"; if(file_exists(getabspath($templatesPath.$template))) $this->template = myfile_get_contents(getabspath($templatesPath.$template)); if (isMobile() && $this->template==''){ $templatesPath = "templates/"; $this->template = myfile_get_contents(getabspath($templatesPath.$template)); } $this->template_file = basename($template,".htm"); } function prepare_template($template) { $this->prepareContainers(); } function load_template($template) { $this->set_template($template); $this->prepareContainers(); } function display_loaded($filtertag = "") { $str = $this->template; if($filtertag) { $pos1 = strpos($this->template, "{BEGIN ".$filtertag."}"); $pos2 = strpos($this->template, "{END ".$filtertag."}"); if($pos1 === false || $pos2 === false) return; $pos2 += strlen("{END ".$filtertag."}"); $str = substr($this->template,$pos1,$pos2-$pos1); } $this->Testing(); xt_process_template($this,$str); } function display($template) { $this->load_template($template); $this->Testing(); xt_process_template($this,$this->template); } function displayPartial($template) { $this->display($template); } function processVar(&$var, &$varparams) { if(!is_array($var)) { // just display a value echo $var; } elseif(isset($var["func"])) { // call a function $params = array(); if(isset($var["params"])) $params = $var["params"]; $key=1; foreach($varparams as $val) { if( strlen($val) ) $params["custom".($key++)] = $val; } $func = $var["func"]; xtempl_call_func($func,$params); } elseif(isset($var["method"])) { $params = array(); if(isset($var["params"])) $params = $var["params"]; $key=1; foreach($varparams as $val) { if( strlen($val) ) $params["custom".($key++)] = $val; } $method = $var["method"]; // if(method_exists($var["object"],$method)) $var["object"]->$method($params); } else { $this->report_error("Incorrect variable value"); return; } } /** * Display brick hidden * @param {string} brick name * @intellisense */ function displayBrickHidden($name) { $this->hiddenBricks[$name] = true; } /** * Hide All bricks on the page * @param {array} of excepted bricks * @intellisense */ function hideAllBricksExcept($arrExceptBricks){ global $page_layouts; foreach($page_layouts[$this->template_file]->containers as $cname=>$container) { foreach($container as $brick) { if (!in_array($brick["name"],$arrExceptBricks)){ $this->assign($brick["block"],false); } } } } /** * Show brick on the page * @param {string} name of brick * @intellisense */ function showBrick($name) { global $page_layouts; foreach($page_layouts[$this->template_file]->containers as $cname=>$container) { foreach($container as $brick) { if ($brick["name"]==$name){ $this->assign($brick["block"],true); } } } } /** * Check are bricks exist on page * If not pass param "all" then check if any brick from array is exist * @param {array} names of bricks * @param {boolean} check all bricks on exist or not * @return {boolean} * @intellisense */ function isExistBricks($names, $all = false) { $exist = false; foreach($names as $name) { if($this->isExistBrick($name)) { if(!$all) { return true; } $exist = true; } elseif($all) { $exist = false; } } return $exist; } /** * Check is brick exist on page * @param {string} name of brick * @return {boolean} * @intellisense */ function isExistBrick($name) { global $page_layouts; if (isset($page_layouts[$this->template_file])) { foreach($page_layouts[$this->template_file]->containers as $cname=>$container) { foreach($container as $brick) { if ($brick["name"] == $name) { return true; } } } } return false; } /** * Prepare containers for show on page * @intellisense */ function prepareContainers() { global $page_layouts, $bUseMobileStyleOnly; if(!isset($page_layouts[$this->template_file])) return; // set page style $clayout =& $page_layouts[$this->template_file]; $pageStyle = $clayout->style; if(isMobile() && $bUseMobileStyleOnly) { $pageStyle = $clayout->styleMobile; } else if(postvalue("pdf")) { $pageStyle = $clayout->pdfStyle(); } $classPrefix = "rnr-"; if($clayout->version == 1) { $classPrefix = "runner-"; } $this->assign("stylename",$pageStyle." page-".$clayout->name); $this->assign("pageStyleName",$pageStyle); $displayed_containers = array(); $hidden_containers = array(); // run reverse loop for proper processing of nested containers $containersNames = array_keys($clayout->containers); $containersNames = array_reverse($containersNames); foreach($containersNames as $cname) { $container = $clayout->containers[$cname]; if(isset($this->xt_vars["container_".$cname]) && $this->xt_vars["container_".$cname] == false) continue; $firstContainerSubstyle = ""; $lastContainerSubstyle = ""; $show = false; $hide = true; foreach($container as $brick) { if(!strlen($brick["block"])) { $show = true; } elseif(!isset($this->xt_vars[$brick["block"]])) { continue; } elseif(!$this->xt_vars[$brick["block"]]) { continue; } if(!$firstContainerSubstyle) { $firstContainerSubstyle = "runner-toprow style".$brick["substyle"]; if($brick["name"] == "vmenu") $firstContainerSubstyle = "runner-toprow runner-vmenu"; } $lastContainerSubstyle = "runner-bottomrow style".$brick["substyle"]; if($brick["name"] == "vmenu") $lastContainerSubstyle = "runner-bottomrow runner-vmenu"; $show = true; if($this->hiddenBricks[$brick["name"]] || $brick["name"] == "wrapper" && (isset($hidden_containers[$brick["container"]]) || !isset($displayed_containers[$brick["container"]]))){ $this->assign("brickclass_".$brick["name"], $classPrefix."hiddenbrick"); }else{ $hide = false; } } if($show) { $styleString = ""; if(isset($clayout->skins[$cname])) { $skin = @$clayout->skins[$cname]; $buttonsType = $clayout->skinsparams[$skin]["button"]; $buttonsClass = $buttonsType == "button2" ? " aslinks" : " asbuttons"; if($clayout->version == 1) { $styleString = " class=\"rnr-cw-".$cname." runner-s-".$skin." ".$pageStyle; } else { $styleString = " class=\"rnr-cw-".$cname." rnr-s-".$skin.$buttonsClass." ".$pageStyle; } if($hide) { $styleString .= " ".$classPrefix."hiddencontainer"; $hidden_containers[$cname] = true; $this->assign("wrapperclass_".$cname,$classPrefix."hiddencontainer"); } $styleString.= "\""; } $this->assign_section("container_".$cname,"