]> git.mxchange.org Git - friendica.git/blobdiff - include/template_processor.php
Some Bugfixes, and variable checks
[friendica.git] / include / template_processor.php
old mode 100755 (executable)
new mode 100644 (file)
index 9ac0a13..46252c3
                var $debug=false;
                
                private function _preg_error(){
+                       
                        switch(preg_last_error()){
                            case PREG_INTERNAL_ERROR: echo('PREG_INTERNAL_ERROR'); break;
                            case PREG_BACKTRACK_LIMIT_ERROR: echo('PREG_BACKTRACK_LIMIT_ERROR'); break;
                            case PREG_RECURSION_LIMIT_ERROR: echo('PREG_RECURSION_LIMIT_ERROR'); break;
                            case PREG_BAD_UTF8_ERROR: echo('PREG_BAD_UTF8_ERROR'); break;
-                           case PREG_BAD_UTF8_OFFSET_ERROR: echo('PREG_BAD_UTF8_OFFSET_ERROR'); break;
+// This is only valid for php > 5.3, not certain how to code around it for unit tests
+//                         case PREG_BAD_UTF8_OFFSET_ERROR: echo('PREG_BAD_UTF8_OFFSET_ERROR'); break;
                            default:
                                        //die("Unknown preg error.");
                                        return;
                 */
                private function _replcb_for($args){
                        $m = array_map('trim', explode(" as ", $args[2]));
-                       list($keyname, $varname) = explode("=>",$m[1]);
-                       if (is_null($varname)) { $varname=$keyname; $keyname=""; }
+                       $x = explode("=>",$m[1]);
+                       if (count($x) == 1) {
+                               $varname = $x[0];
+                               $keyname = "";
+                       } else {
+                               list($keyname, $varname) = $x;
+                       }
                        if ($m[0]=="" || $varname=="" || is_null($varname)) die("template error: 'for ".$m[0]." as ".$varname."'") ;
                        //$vals = $this->r[$m[0]];
                        $vals = $this->_get_var($m[0]);
@@ -91,7 +98,7 @@
                                $this->_push_stack();
                                $r = $this->r;
                                $r[$varname] = $v;
-                               if ($keyname!='') $r[$keyname] = $k;
+                               if ($keyname!='') $r[$keyname] = (($k === 0) ? '0' : $k);
                                $ret .=  $this->replace($args[3], $r);
                                $this->_pop_stack();
                        }
 
                private function var_replace($s){
                        $m = array();
-                       if (preg_match_all('/\$([a-zA-Z0-9-_]+\.*)+/', $s,$m)){
+                       /** regexp:
+                        * \$                                           literal $
+                        * (\[)?                                        optional open square bracket
+                        * ([a-zA-Z0-9-_]+\.?)+         var name, followed by optional
+                        *                                                      dot, repeated at least 1 time
+                        * (?(1)\])                                     if there was opened square bracket
+                        *                                                      (subgrup 1), match close bracket
+                        */
+                       if (preg_match_all('/\$(\[)?([a-zA-Z0-9-_]+\.?)+(?(1)\])/', $s,$m)){
+                               
                                foreach($m[0] as $var){
-                                       $val = $this->_get_var($var, true);
+                                       $varn = str_replace(array("[","]"), array("",""), $var);
+                                       $val = $this->_get_var($varn, true);
                                        if ($val!=KEY_NOT_EXISTS)
                                                $s = str_replace($var, $val, $s);
                                }
                        }
+                       
                        return $s;
                }
        
                                $os=$s; $count++;
                                $s = $this->var_replace($s);
                        }
-                       return template_unescape($s);
+                       return $s;
                }
        }