svn: /pear2/Templates_Savant/trunk/ src/Templates/Savant/Main.php src/Templates/Savant/ObjectProxy.php tests/globals/basic.phpt tests/globals/basic.tpl.php tests/globals/escape.arrays.phpt tests/globals/escape.nestedarrays.phpt tests/globals/escape.phpt

[email protected] (Brett Bieber) Wed, 12 Jan 2011 20:40:06 +0000
Newsgroups php.pear.cvs,php.pear.core
Message-ID <[email protected]>
saltybeagle                              Wed, 12 Jan 2011 20:40:06 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=307417

Log:
Improve escaping of arrays. Add tests for setting and getting globals.

Changed paths:
    U   pear2/Templates_Savant/trunk/src/Templates/Savant/Main.php
    U   pear2/Templates_Savant/trunk/src/Templates/Savant/ObjectProxy.php
    A   pear2/Templates_Savant/trunk/tests/globals/
    A   pear2/Templates_Savant/trunk/tests/globals/basic.phpt
    A   pear2/Templates_Savant/trunk/tests/globals/basic.tpl.php
    A   pear2/Templates_Savant/trunk/tests/globals/escape.arrays.phpt
    A   pear2/Templates_Savant/trunk/tests/globals/escape.nestedarrays.phpt
    A   pear2/Templates_Savant/trunk/tests/globals/escape.phpt

Modified: pear2/Templates_Savant/trunk/src/Templates/Savant/Main.php
===================================================================
--- pear2/Templates_Savant/trunk/src/Templates/Savant/Main.php	2011-01-12 19:50:09 UTC (rev 307416)
+++ pear2/Templates_Savant/trunk/src/Templates/Savant/Main.php	2011-01-12 20:40:06 UTC (rev 307417)
@@ -234,9 +234,7 @@
                     $value = $this->escape($value);
                     break;
                 case 'array':
-                    foreach ($value as $key=>$sub_value) {
-                        $value[$key] = $this->escape($sub_value);
-                    }
+                    $value = new ObjectProxy\ArrayAccess(new \ArrayIterator($value), $this);
                     break;
             }
         }

Modified: pear2/Templates_Savant/trunk/src/Templates/Savant/ObjectProxy.php
===================================================================
--- pear2/Templates_Savant/trunk/src/Templates/Savant/ObjectProxy.php	2011-01-12 19:50:09 UTC (rev 307416)
+++ pear2/Templates_Savant/trunk/src/Templates/Savant/ObjectProxy.php	2011-01-12 20:40:06 UTC (rev 307417)
@@ -82,9 +82,10 @@
             return self::factory($var, $this->savant);
         case 'string':
         case 'int':
-        case 'bool':
         case 'double':
             return $this->savant->escape($var);
+        case 'array':
+            return new ObjectProxy\ArrayAccess(new \ArrayIterator($var), $this->savant);
         }
         return $var;
     }

Added: pear2/Templates_Savant/trunk/tests/globals/basic.phpt
===================================================================
--- pear2/Templates_Savant/trunk/tests/globals/basic.phpt	                        (rev 0)
+++ pear2/Templates_Savant/trunk/tests/globals/basic.phpt	2011-01-12 20:40:06 UTC (rev 307417)
@@ -0,0 +1,15 @@
+--TEST--
+\PEAR2\Templates\Savant\Main::addGlobal() basic test
+--FILE--
+<?php
+require dirname(__FILE__) . '/../test_framework.php.inc';
+chdir(__DIR__);
+$savvy = new \PEAR2\Templates\Savant\Main();
+
+$savvy->addGlobal('foo', true);
+
+echo $savvy->render(null, 'basic.tpl.php');
+
+?>
+--EXPECT--
+===DONE===
\ No newline at end of file

Added: pear2/Templates_Savant/trunk/tests/globals/basic.tpl.php
===================================================================
--- pear2/Templates_Savant/trunk/tests/globals/basic.tpl.php	                        (rev 0)
+++ pear2/Templates_Savant/trunk/tests/globals/basic.tpl.php	2011-01-12 20:40:06 UTC (rev 307417)
@@ -0,0 +1,6 @@
+<?php
+    if (isset($foo)
+        && true === $foo) {
+        echo '===DONE===';
+    }
+?>
\ No newline at end of file

Added: pear2/Templates_Savant/trunk/tests/globals/escape.arrays.phpt
===================================================================
--- pear2/Templates_Savant/trunk/tests/globals/escape.arrays.phpt	                        (rev 0)
+++ pear2/Templates_Savant/trunk/tests/globals/escape.arrays.phpt	2011-01-12 20:40:06 UTC (rev 307417)
@@ -0,0 +1,23 @@
+--TEST--
+\PEAR2\Templates\Savant\Main::addGlobal() Escape added global array
+--FILE--
+<?php
+require dirname(__FILE__) . '/../test_framework.php.inc';
+chdir(__DIR__);
+$savvy = new \PEAR2\Templates\Savant\Main();
+
+$savvy->setEscape('htmlspecialchars');
+
+$unescaped = array(
+    '<a href="Blah">Blah</a>'
+);
+
+$savvy->addGlobal('foo', $unescaped);
+
+$escaped = $savvy->getGlobals();
+
+echo $escaped['foo'][0];
+
+?>
+--EXPECT--
+&lt;a href=&quot;Blah&quot;&gt;Blah&lt;/a&gt;
\ No newline at end of file

Added: pear2/Templates_Savant/trunk/tests/globals/escape.nestedarrays.phpt
===================================================================
--- pear2/Templates_Savant/trunk/tests/globals/escape.nestedarrays.phpt	                        (rev 0)
+++ pear2/Templates_Savant/trunk/tests/globals/escape.nestedarrays.phpt	2011-01-12 20:40:06 UTC (rev 307417)
@@ -0,0 +1,23 @@
+--TEST--
+\PEAR2\Templates\Savant\Main::addGlobal() Escape added global array
+--FILE--
+<?php
+require dirname(__FILE__) . '/../test_framework.php.inc';
+chdir(__DIR__);
+$savvy = new \PEAR2\Templates\Savant\Main();
+
+$savvy->setEscape('htmlspecialchars');
+
+$unescaped = array(
+    '<a href="Blah">Blah</a>'
+);
+
+$savvy->addGlobal('foo', array($unescaped));
+
+$escaped = $savvy->getGlobals();
+
+echo $escaped['foo'][0][0];
+
+?>
+--EXPECT--
+&lt;a href=&quot;Blah&quot;&gt;Blah&lt;/a&gt;
\ No newline at end of file

Added: pear2/Templates_Savant/trunk/tests/globals/escape.phpt
===================================================================
--- pear2/Templates_Savant/trunk/tests/globals/escape.phpt	                        (rev 0)
+++ pear2/Templates_Savant/trunk/tests/globals/escape.phpt	2011-01-12 20:40:06 UTC (rev 307417)
@@ -0,0 +1,21 @@
+--TEST--
+\PEAR2\Templates\Savant\Main::addGlobal() Escape added globals test
+--FILE--
+<?php
+require dirname(__FILE__) . '/../test_framework.php.inc';
+chdir(__DIR__);
+$savvy = new \PEAR2\Templates\Savant\Main();
+
+function myEscape($var)
+{
+    echo '===DONE===';
+    return $var;
+}
+
+$savvy->setEscape('myEscape');
+
+$savvy->addGlobal('foo', 'lalalala');
+
+?>
+--EXPECT--
+===DONE===
\ No newline at end of file