Marius Cramer
2014-01-23 ccdf702f14e6b15449a1fa93fb4be815e592028e
server/lib/classes/tpl.inc.php
@@ -932,7 +932,7 @@
            $regex = '/(<|<\/|{|{\/|<!--|<!--\/){1}\s*';
            $regex.= 'tmpl_([\w]+)\s*';
            $regex.= '(?:';
            $regex.= '((?:(?:';
            $regex.=    '(?:';
            $regex.=        '(name|format|escape|op|value|file)';
            $regex.=        '\s*=\s*';
@@ -941,40 +941,9 @@
            $regex.=    '((?<=[\"\'])';
            $regex.=    '[^\"\']*|[a-z0-9_\.]*)';
            $regex.=    '[\"\']?';
            $regex.= ')?\s*';
            $regex.= '(?:';
            $regex.=    '(?:';
            $regex.=        '(name|format|escape|op|value)';
            $regex.=        '\s*=\s*';
            $regex.=    ')';
            $regex.=    '(?:[\"\'])?';
            $regex.=    '((?<=[\"\'])';
            $regex.=    '[^\"\']*|[a-z0-9_\.]*)';
            $regex.=    '[\"\']?';
            $regex.= ')?\s*';
            $regex.= '(?:';
            $regex.=    '(?:';
            $regex.=        '(name|format|escape|op|value)';
            $regex.=        '\s*=\s*';
            $regex.=    ')';
            $regex.=    '(?:[\"\'])?';
            $regex.=    '((?<=[\"\'])';
            $regex.=    '[^\"\']*|[a-z0-9_\.]*)';
            $regex.=    '[\"\']?';
            $regex.= ')?\s*';
            $regex.= '(?:';
            $regex.=    '(?:';
            $regex.=        '(name|format|escape|op|value)';
            $regex.=        '\s*=\s*';
            $regex.=    ')';
            $regex.=    '(?:[\"\'])?';
            $regex.=    '((?<=[\"\'])';
            $regex.=    '[^\"\']*|[a-z0-9_\.]*)';
            $regex.=    '[\"\']?';
            $regex.= ')?\s*';
            $regex.= ')?\s*)*?)';
            $regex.= '(?:>|\/>|}|-->){1}';
            $regex.= '/i';
            //$regex.= '([\r\n|\n|\r])?/ie';
            $data = preg_replace_callback($regex, array($this, '_parseTag'), $data);
            if ($this->_cache) { // add cache if need be
@@ -1300,28 +1269,37 @@
         $wholetag = $args[0];
         $openclose = $args[1];
         $tag = strtolower($args[2]);
         $newline = $args[11];
         //echo "1#$newline#2";
         if ($tag == 'else') return '<?php } else { ?>'.$newline;
         if ($tag == 'else') return '<?php } else { ?>';
         if ($tag == 'tmpl_include') return $wholetag; // ignore tmpl_include tags
         if (preg_match("/^<\/|{\/|<!--\/$/s", $openclose) || preg_match("/^end[if|loop|unless|comment]$/", $tag)) {
            if ($tag == 'loop' || $tag == 'endloop') array_pop($this->_namespace);
            if ($tag == 'comment' || $tag == 'endcomment') {
               return '<?php */ ?>'.$newline;
               return '<?php */ ?>';
            }
            else {
               return '<?php } ?>'.$newline;
               return '<?php } ?>';
            }
         }
         // arrange attributes
         for ($i=3; $i < 10; $i=($i+2)) {
            if (empty($args[$i]) && empty($args[($i+1)])) break;
            $key = (empty($args[$i])) ? 'name' : strtolower($args[$i]);
            if ($key == 'name' && preg_match('/^(php)?include$/', $tag)) $key = 'file';
            $$key = $args[($i+1)];
         $tmp_atts = $args[3];
         $atts = preg_split('/\s+/', $tmp_atts);
         foreach($atts as $att) {
            $regex =    '/(?:';
            $regex.=        '(name|format|escape|op|value|file)';
            $regex.=        '\s*=\s*';
            $regex.=    ')?';
            $regex.=    '(?:[\"\'])?';
            $regex.=    '((?<=[\"\'])';
            $regex.=    '[^\"\']*|[a-z0-9_\.]*)';
            $regex.=    '[\"\']?/';
            if(preg_match($regex, $att, $match)) {
               $key = (empty($match[1])) ? 'name' : strtolower($match[1]);
               if ($key == 'name' && preg_match('/^(php)?include$/', $tag)) $key = 'file';
               $$key = $match[2];
            }
         }
         $var = ($this->OPTIONS['CASELESS']) ? strtolower($name) : $name;
@@ -1345,28 +1323,28 @@
            if (empty($escape) && (!empty($this->OPTIONS['DEFAULT_ESCAPE']) && strtolower($this->OPTIONS['DEFAULT_ESCAPE']) != 'none')) {
               $escape = strtolower($this->OPTIONS['DEFAULT_ESCAPE']);
            }
            return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace).' ?>'.$newline."\n";
            return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace).' ?>'."\n";
            break;
         case 'if':
            return '<?php if ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>'.$newline;
            return '<?php if ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
            break;
         case 'unless':
            return '<?php if (!'. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>'.$newline;
            return '<?php if (!'. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
            break;
         case 'elseif':
            return '<?php } elseif ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>'.$newline;
            return '<?php } elseif ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
            break;
         case 'loop':
            return '<?php '. $this->_parseLoop($var) .'?>'.$newline;
            return '<?php '. $this->_parseLoop($var) .'?>';
            break;
         case 'comment':
            if (empty($var)) { // full open/close style comment
               return '<?php /* ?>'.$newline;
               return '<?php /* ?>';
            }
            else { // just ignore tag if it was a one line comment
               return;
@@ -1375,7 +1353,7 @@
         case 'phpinclude':
            if ($this->OPTIONS['ENABLE_PHPINCLUDE']) {
               return '<?php include(\''.$file.'\'); ?>'.$newline;
               return '<?php include(\''.$file.'\'); ?>';
            }
            break;