Add support for callback when converting URL to string.
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 13 Jul 2010 01:49:03 +0000 (19:49 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 13 Jul 2010 01:54:08 +0000 (19:54 -0600)
framework/Url/lib/Horde/Url.php
framework/Url/package.xml
framework/Url/test/Horde/Url/CallbackTest.php [new file with mode: 0644]

index 75201ea..9ba6adb 100644 (file)
@@ -64,6 +64,13 @@ class Horde_Url
     public $anchor = '';
 
     /**
+     * A callback function to use when converting to a string.
+     *
+     * @var callback
+     */
+    public $toStringCallback;
+
+    /**
      * Constructor.
      *
      * @param string $url   The basic URL, with or without query parameters.
@@ -200,6 +207,14 @@ class Horde_Url
      */
     public function toString($raw = false)
     {
+        if ($this->toStringCallback) {
+            $callback = $this->toStringCallback;
+            $this->toStringCallback = null;
+            $ret = call_user_func($callback, $this);
+            $this->toStringCallback = $callback;
+            return $ret;
+        }
+
         $url_params = array();
         foreach ($this->parameters as $parameter => $value) {
             if (is_array($value)) {
index ab63d51..7f3a43f 100644 (file)
@@ -29,7 +29,8 @@ http://pear.php.net/dtd/package-2.0.xsd">
   <api>beta</api>
  </stability>
  <license uri="http://www.gnu.org/copyleft/lesser.html">LGPL</license>
- <notes>* Add support for URL anchors.
+ <notes>* Add support for callback function for toString conversion.
+ * Add support for URL anchors.
  * Added Horde_Url::uriB64Encode() and Horde_Url::uriB64Decode().
  * Initial package.
  </notes>
diff --git a/framework/Url/test/Horde/Url/CallbackTest.php b/framework/Url/test/Horde/Url/CallbackTest.php
new file mode 100644 (file)
index 0000000..1d7c11a
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+/**
+ * @author     Michael Slusarz <slusarz@horde.org>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @category   Horde
+ * @package    Url
+ * @subpackage UnitTests
+ */
+
+class Horde_Url_CallbackTest extends PHPUnit_Framework_TestCase
+{
+    public function testRemoveRaw()
+    {
+        $url = new Horde_Url('test?bar=2');
+        $url->toStringCallback = array($this, 'callbackToString');
+        $this->assertEquals('FOOtest?bar=2BAR', (string)$url);
+    }
+
+    public function callbackToString($url)
+    {
+        return 'FOO' . (string)$url . 'BAR';
+    }
+
+}