X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Ftemplate_processor.php;h=b4d444e1c622ee7d472d00d990ba8fbb3369531c;hb=c462ed9fc50e2c2a60e8cb01314a7d5fa498b412;hp=3f79ed5933925e731e724fdd1468fb5813107226;hpb=b61a7158da4c8a0b41651a082f0ce2f9ad431f14;p=friendica.git diff --git a/include/template_processor.php b/include/template_processor.php old mode 100644 new mode 100755 index 3f79ed5933..b4d444e1c6 --- a/include/template_processor.php +++ b/include/template_processor.php @@ -1,5 +1,6 @@
"; + debug_print_backtrace(); + die(); } private function _build_replace($r, $prefix){ if(is_array($r) && count($r)) { foreach ($r as $k => $v ) { - if (is_array($v)) + if (is_array($v)) { $this->_build_replace($v, "$prefix$k."); - - $this->search[] = $prefix . $k; - $this->replace[] = $v; + } else { + $this->search[] = $prefix . $k; + $this->replace[] = $v; + } } } } @@ -38,13 +47,14 @@ } private function _pop_stack(){ list($this->r, $this->search, $this->replace, $this->nodes) = array_pop($this->stack); + } private function _get_var($name){ - $keys = array_map('trim',explode(".",$name)); + $keys = array_map('trim',explode(".",$name)); $val = $this->r; foreach($keys as $k) { - $val = $val[$k]; + $val = (isset($val[$k]) ? $val[$k] : null); } return $val; } @@ -57,7 +67,6 @@ * {{ if <$var>!=}}...[{{ else }} ...]{{ endif }} */ private function _replcb_if($args){ - if (strpos($args[2],"==")>0){ list($a,$b) = array_map("trim",explode("==",$args[2])); $a = $this->_get_var($a); @@ -71,9 +80,8 @@ } else { $val = $this->_get_var($args[2]); } - list($strue, $sfalse)= preg_split("|{{ *else *}}|", $args[3]); - - return ($val?$strue:$sfalse); + $x = preg_split("|{{ *else *}}|", $args[3]); + return ( $val ? $x[0] : (isset($x[1]) ? $x[1] : "")); } /** @@ -108,7 +116,15 @@ * {{ inc [with $var1=$var2] }}{{ endinc }} */ private function _replcb_inc($args){ - list($tplfile, $newctx) = array_map('trim', explode("with",$args[2])); + if (strpos($args[2],"with")) { + list($tplfile, $newctx) = array_map('trim', explode("with",$args[2])); + } else { + $tplfile = trim($args[2]); + $newctx = null; + } + + if ($tplfile[0]=="$") $tplfile = $this->_get_var($tplfile); + $this->_push_stack(); $r = $this->r; if (!is_null($newctx)) { @@ -153,21 +169,74 @@ return $s; } + /* + private function _str_replace($str){ + #$this->search,$this->replace, + $searchs = $this->search; + foreach($searchs as $search){ + $search = "|".preg_quote($search)."(\|[a-zA-Z0-9_]*)*|"; + $m = array(); + if (preg_match_all($search, $str,$m)){ + foreach ($m[0] as $match){ + $toks = explode("|",$match); + $val = $this->_get_var($toks[0]); + for($k=1; $k 1){ + $str = str_replace( $match, $val, $str); + } + } + } + + } + return str_replace($this->search,$this->replace, $str); + }*/ + + public function replace($s, $r) { $this->r = $r; $this->search = array(); $this->replace = array(); - + $this->_build_replace($r, ""); #$s = str_replace(array("\n","\r"),array("§n§","§r§"),$s); $s = $this->_build_nodes($s); + $s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s); if ($s==Null) $this->_preg_error(); - $s = str_replace($this->search,$this->replace, $s); - return $s; + // remove comments block + $s = preg_replace('/{#[^#]*#}/', "" , $s); + // replace strings recursively (limit to 10 loops) + $os = ""; $count=0; + while($os!=$s && $count<10){ + $os=$s; $count++; + //$s = $this->_str_replace($s); + $s = str_replace($this->search, $this->replace, $s); + } + return template_unescape($s); } } $t = new Template; + + + + +function template_escape($s) { + + return str_replace(array('$','{{'),array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),$s); + + +} + +function template_unescape($s) { + + return str_replace(array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),array('$','{{'),$s); + + + +}