web/lib/Zend/Json/Encoder.php
changeset 807 877f952ae2bd
parent 207 621fa6caec0c
child 1230 68c69c656a2c
--- a/web/lib/Zend/Json/Encoder.php	Thu Mar 21 17:31:31 2013 +0100
+++ b/web/lib/Zend/Json/Encoder.php	Thu Mar 21 19:50:53 2013 +0100
@@ -14,9 +14,9 @@
  *
  * @category   Zend
  * @package    Zend_Json
- * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  * @license    http://framework.zend.com/license/new-bsd     New BSD License
- * @version    $Id: Encoder.php 22452 2010-06-18 18:13:23Z ralph $
+ * @version    $Id: Encoder.php 25059 2012-11-02 21:01:06Z rob $
  */
 
 /**
@@ -24,7 +24,7 @@
  *
  * @category   Zend
  * @package    Zend_Json
- * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  * @license    http://framework.zend.com/license/new-bsd     New BSD License
  */
 class Zend_Json_Encoder
@@ -74,7 +74,6 @@
     public static function encode($value, $cycleCheck = false, $options = array())
     {
         $encoder = new self(($cycleCheck) ? true : false, $options);
-
         return $encoder->_encodeValue($value);
     }
 
@@ -85,7 +84,7 @@
      *    - arrays (returns from {@link _encodeArray()})
      *    - basic datums (e.g. numbers or strings) (returns from {@link _encodeDatum()})
      *
-     * @param $value mixed The value to be encoded
+     * @param mixed $value The value to be encoded
      * @return string Encoded value
      */
     protected function _encodeValue(&$value)
@@ -108,7 +107,7 @@
      * that contains the name of the class of $value. This is used to decode
      * the object on the client into a specific class.
      *
-     * @param $value object
+     * @param object $value
      * @return string
      * @throws Zend_Json_Exception If recursive checks are enabled and the object has been serialized previously
      */
@@ -135,23 +134,28 @@
         }
 
         $props = '';
-
-        if ($value instanceof Iterator) {
-            $propCollection = $value;
+        if (method_exists($value, 'toJson')) {
+            $props =',' . preg_replace("/^\{(.*)\}$/","\\1",$value->toJson());
         } else {
-            $propCollection = get_object_vars($value);
-        }
+            if ($value instanceof IteratorAggregate) {
+                $propCollection = $value->getIterator();
+            } elseif ($value instanceof Iterator) {
+                $propCollection = $value;
+            } else {
+                $propCollection = get_object_vars($value);
+            }
 
-        foreach ($propCollection as $name => $propValue) {
-            if (isset($propValue)) {
-                $props .= ','
-                        . $this->_encodeString($name)
-                        . ':'
-                        . $this->_encodeValue($propValue);
+            foreach ($propCollection as $name => $propValue) {
+                if (isset($propValue)) {
+                    $props .= ','
+                            . $this->_encodeString($name)
+                            . ':'
+                            . $this->_encodeValue($propValue);
+                }
             }
         }
-
-        return '{"__className":"' . get_class($value) . '"'
+        $className = get_class($value);
+        return '{"__className":' . $this->_encodeString($className)
                 . $props . '}';
     }
 
@@ -182,7 +186,7 @@
      * the last index is (count($array) -1); any deviation from that is
      * considered an associative array, and will be encoded as such.
      *
-     * @param $array array
+     * @param array& $array
      * @return string
      */
     protected function _encodeArray(&$array)
@@ -222,7 +226,7 @@
      * If value type is not a string, number, boolean, or null, the string
      * 'null' is returned.
      *
-     * @param $value mixed
+     * @param mixed& $value
      * @return string
      */
     protected function _encodeDatum(&$value)
@@ -245,7 +249,7 @@
     /**
      * JSON encode a string value by escaping characters as necessary
      *
-     * @param $value string
+     * @param string& $value
      * @return string
      */
     protected function _encodeString(&$string)
@@ -270,7 +274,7 @@
      * Encode the constants associated with the ReflectionClass
      * parameter. The encoding format is based on the class2 format
      *
-     * @param $cls ReflectionClass
+     * @param ReflectionClass $cls
      * @return string Encoded constant block in class2 format
      */
     private static function _encodeConstants(ReflectionClass $cls)
@@ -295,7 +299,7 @@
      * Encode the public methods of the ReflectionClass in the
      * class2 format
      *
-     * @param $cls ReflectionClass
+     * @param ReflectionClass $cls
      * @return string Encoded method fragment
      *
      */
@@ -359,7 +363,7 @@
      * Encode the public properties of the ReflectionClass in the class2
      * format.
      *
-     * @param $cls ReflectionClass
+     * @param ReflectionClass $cls
      * @return string Encode properties list
      *
      */
@@ -391,10 +395,10 @@
      * NOTE: Currently only public methods and variables are proxied onto
      * the client machine
      *
-     * @param $className string The name of the class, the class must be
-     * instantiable using a null constructor
-     * @param $package string Optional package name appended to JavaScript
-     * proxy class name
+     * @param string $className The name of the class, the class must be
+     *  instantiable using a null constructor
+     * @param string $package Optional package name appended to JavaScript
+     *  proxy class name
      * @return string The class2 (JavaScript) encoding of the class
      * @throws Zend_Json_Exception
      */