$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()); $this->assign_function("Step","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 bulk_assign( $arr ) { foreach($arr as $key => $value) { $this->xt_vars[$key] = $value; } } 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] = $this->create_function_assignment( $func,$params ); } static function create_function_assignment($func,$params) { return array( "func" => $func, "params" => $params ); } function assign_method($name,&$object,$method,$params = null) { $this->xt_vars[$name] = $this->create_method_assignment( $method, $object, $params ); } static function create_method_assignment( $method, &$object, $params = null ) { return array( "method"=>$method, "params"=>$params, "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) { global $page_layouts; // 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"); $this->layout =&$page_layouts[$this->template_file]; } 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) { if( !isset($this->xt_vars[ $filtertag ]) || $this->xt_vars[ $filtertag ] === false ) return; $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) { $savedTemplate = $this->template; $this->display( $template ); $this->template = $savedTemplate; } 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 bricks with names listed in the arra passed as hidden * @param Array bricks */ function displayBricksHidden($bricks) { foreach($bricks as $name) { $this->hiddenBricks[$name] = true; } } /** * 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){ foreach($this->layout->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) { foreach($this->layout->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) { foreach($this->layout->containers as $cname=>$container) { foreach($container as $brick) { if ($brick["name"] == $name) { return true; } } } return false; } private function setContainerDisplayed($cname, $show, $firstContainerSubstyle, $lastContainerSubstyle) { $this->prepareContainerAttrs( $cname ); if( $show ) { $styleString = $this->preparedContainers[ $cname ]["showString"]; $this->unassign("wrapperclass_".$cname); } else { $styleString = $this->preparedContainers[ $cname ]["hideString"]; $this->assign("wrapperclass_".$cname,"rnr-hiddencontainer"); } $this->assign_section("container_".$cname,"