diff --git a/composer.json b/composer.json index 130fda34945..8d82f530df8 100644 --- a/composer.json +++ b/composer.json @@ -35,7 +35,7 @@ "nnnick/chartjs" : "^2.9", "stripe/stripe-php" : "6.43.1", "maximebf/debugbar" : "1.15.1", - "symfony/var-dumper" : "3" + "symfony/var-dumper" : "3.2" }, "require-dev" : { "php-parallel-lint/php-parallel-lint" : "^0", diff --git a/composer.lock b/composer.lock index 3e867f8f186..5f761cb63fe 100644 --- a/composer.lock +++ b/composer.lock @@ -591,7 +591,7 @@ }, { "name": "symfony/var-dumper", - "version": "v3.0.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", @@ -616,7 +616,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { diff --git a/htdocs/includes/symfony/var-dumper/Caster/AmqpCaster.php b/htdocs/includes/symfony/var-dumper/Caster/AmqpCaster.php index 4e9b351c181..4f1aa18a053 100644 --- a/htdocs/includes/symfony/var-dumper/Caster/AmqpCaster.php +++ b/htdocs/includes/symfony/var-dumper/Caster/AmqpCaster.php @@ -20,145 +20,191 @@ use Symfony\Component\VarDumper\Cloner\Stub; */ class AmqpCaster { - private static $flags = array( - AMQP_DURABLE => 'AMQP_DURABLE', - AMQP_PASSIVE => 'AMQP_PASSIVE', - AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE', - AMQP_AUTODELETE => 'AMQP_AUTODELETE', - AMQP_INTERNAL => 'AMQP_INTERNAL', - AMQP_NOLOCAL => 'AMQP_NOLOCAL', - AMQP_AUTOACK => 'AMQP_AUTOACK', - AMQP_IFEMPTY => 'AMQP_IFEMPTY', - AMQP_IFUNUSED => 'AMQP_IFUNUSED', - AMQP_MANDATORY => 'AMQP_MANDATORY', - AMQP_IMMEDIATE => 'AMQP_IMMEDIATE', - AMQP_MULTIPLE => 'AMQP_MULTIPLE', - AMQP_NOWAIT => 'AMQP_NOWAIT', - AMQP_REQUEUE => 'AMQP_REQUEUE', - ); + private static $flags = array( + AMQP_DURABLE => 'AMQP_DURABLE', + AMQP_PASSIVE => 'AMQP_PASSIVE', + AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE', + AMQP_AUTODELETE => 'AMQP_AUTODELETE', + AMQP_INTERNAL => 'AMQP_INTERNAL', + AMQP_NOLOCAL => 'AMQP_NOLOCAL', + AMQP_AUTOACK => 'AMQP_AUTOACK', + AMQP_IFEMPTY => 'AMQP_IFEMPTY', + AMQP_IFUNUSED => 'AMQP_IFUNUSED', + AMQP_MANDATORY => 'AMQP_MANDATORY', + AMQP_IMMEDIATE => 'AMQP_IMMEDIATE', + AMQP_MULTIPLE => 'AMQP_MULTIPLE', + AMQP_NOWAIT => 'AMQP_NOWAIT', + AMQP_REQUEUE => 'AMQP_REQUEUE', + ); - private static $exchangeTypes = array( - AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT', - AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT', - AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC', - AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS', - ); + private static $exchangeTypes = array( + AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT', + AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT', + AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC', + AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS', + ); - public static function castConnection(\AMQPConnection $c, array $a, Stub $stub, $isNested) - { - $prefix = Caster::PREFIX_VIRTUAL; + public static function castConnection(\AMQPConnection $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; - // BC layer in the ampq lib - if (method_exists($c, 'getReadTimeout')) { - $timeout = $c->getReadTimeout(); - } else { - $timeout = $c->getTimeout(); - } + $a += array( + $prefix.'is_connected' => $c->isConnected(), + ); - $a += array( - $prefix.'isConnected' => $c->isConnected(), - $prefix.'login' => $c->getLogin(), - $prefix.'password' => $c->getPassword(), - $prefix.'host' => $c->getHost(), - $prefix.'port' => $c->getPort(), - $prefix.'vhost' => $c->getVhost(), - $prefix.'readTimeout' => $timeout, - ); + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPConnection\x00login"])) { + return $a; + } - return $a; - } + // BC layer in the amqp lib + if (method_exists($c, 'getReadTimeout')) { + $timeout = $c->getReadTimeout(); + } else { + $timeout = $c->getTimeout(); + } - public static function castChannel(\AMQPChannel $c, array $a, Stub $stub, $isNested) - { - $prefix = Caster::PREFIX_VIRTUAL; + $a += array( + $prefix.'is_connected' => $c->isConnected(), + $prefix.'login' => $c->getLogin(), + $prefix.'password' => $c->getPassword(), + $prefix.'host' => $c->getHost(), + $prefix.'vhost' => $c->getVhost(), + $prefix.'port' => $c->getPort(), + $prefix.'read_timeout' => $timeout, + ); - $a += array( - $prefix.'isConnected' => $c->isConnected(), - $prefix.'channelId' => $c->getChannelId(), - $prefix.'prefetchSize' => $c->getPrefetchSize(), - $prefix.'prefetchCount' => $c->getPrefetchCount(), - $prefix.'connection' => $c->getConnection(), - ); + return $a; + } - return $a; - } + public static function castChannel(\AMQPChannel $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; - public static function castQueue(\AMQPQueue $c, array $a, Stub $stub, $isNested) - { - $prefix = Caster::PREFIX_VIRTUAL; + $a += array( + $prefix.'is_connected' => $c->isConnected(), + $prefix.'channel_id' => $c->getChannelId(), + ); - $a += array( - $prefix.'name' => $c->getName(), - $prefix.'flags' => self::extractFlags($c->getFlags()), - $prefix.'arguments' => $c->getArguments(), - $prefix.'connection' => $c->getConnection(), - $prefix.'channel' => $c->getChannel(), - ); + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPChannel\x00connection"])) { + return $a; + } - return $a; - } + $a += array( + $prefix.'connection' => $c->getConnection(), + $prefix.'prefetch_size' => $c->getPrefetchSize(), + $prefix.'prefetch_count' => $c->getPrefetchCount(), + ); - public static function castExchange(\AMQPExchange $c, array $a, Stub $stub, $isNested) - { - $prefix = Caster::PREFIX_VIRTUAL; + return $a; + } - $a += array( - $prefix.'name' => $c->getName(), - $prefix.'flags' => self::extractFlags($c->getFlags()), - $prefix.'type' => isset(self::$exchangeTypes[$c->getType()]) ? new ConstStub(self::$exchangeTypes[$c->getType()], $c->getType()) : $c->getType(), - $prefix.'arguments' => $c->getArguments(), - $prefix.'channel' => $c->getChannel(), - $prefix.'connection' => $c->getConnection(), - ); + public static function castQueue(\AMQPQueue $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; - return $a; - } + $a += array( + $prefix.'flags' => self::extractFlags($c->getFlags()), + ); - public static function castEnvelope(\AMQPEnvelope $c, array $a, Stub $stub, $isNested, $filter = 0) - { - $prefix = Caster::PREFIX_VIRTUAL; + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPQueue\x00name"])) { + return $a; + } - if (!($filter & Caster::EXCLUDE_VERBOSE)) { - $a += array($prefix.'body' => $c->getBody()); - } + $a += array( + $prefix.'connection' => $c->getConnection(), + $prefix.'channel' => $c->getChannel(), + $prefix.'name' => $c->getName(), + $prefix.'arguments' => $c->getArguments(), + ); - $a += array( - $prefix.'routingKey' => $c->getRoutingKey(), - $prefix.'deliveryTag' => $c->getDeliveryTag(), - $prefix.'deliveryMode' => new ConstStub($c->getDeliveryMode().(2 === $c->getDeliveryMode() ? ' (persistent)' : ' (non-persistent)'), $c->getDeliveryMode()), - $prefix.'exchangeName' => $c->getExchangeName(), - $prefix.'isRedelivery' => $c->isRedelivery(), - $prefix.'contentType' => $c->getContentType(), - $prefix.'contentEncoding' => $c->getContentEncoding(), - $prefix.'type' => $c->getType(), - $prefix.'timestamp' => $c->getTimestamp(), - $prefix.'priority' => $c->getPriority(), - $prefix.'expiration' => $c->getExpiration(), - $prefix.'userId' => $c->getUserId(), - $prefix.'appId' => $c->getAppId(), - $prefix.'messageId' => $c->getMessageId(), - $prefix.'replyTo' => $c->getReplyTo(), - $prefix.'correlationId' => $c->getCorrelationId(), - $prefix.'headers' => $c->getHeaders(), - ); + return $a; + } - return $a; - } + public static function castExchange(\AMQPExchange $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; - private static function extractFlags($flags) - { - $flagsArray = array(); + $a += array( + $prefix.'flags' => self::extractFlags($c->getFlags()), + ); - foreach (self::$flags as $value => $name) { - if ($flags & $value) { - $flagsArray[] = $name; - } - } + $type = isset(self::$exchangeTypes[$c->getType()]) ? new ConstStub(self::$exchangeTypes[$c->getType()], $c->getType()) : $c->getType(); - if (!$flagsArray) { - $flagsArray = array('AMQP_NOPARAM'); - } + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPExchange\x00name"])) { + $a["\x00AMQPExchange\x00type"] = $type; - return new ConstStub(implode('|', $flagsArray), $flags); - } + return $a; + } + + $a += array( + $prefix.'connection' => $c->getConnection(), + $prefix.'channel' => $c->getChannel(), + $prefix.'name' => $c->getName(), + $prefix.'type' => $type, + $prefix.'arguments' => $c->getArguments(), + ); + + return $a; + } + + public static function castEnvelope(\AMQPEnvelope $c, array $a, Stub $stub, $isNested, $filter = 0) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $deliveryMode = new ConstStub($c->getDeliveryMode().(2 === $c->getDeliveryMode() ? ' (persistent)' : ' (non-persistent)'), $c->getDeliveryMode()); + + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPEnvelope\x00body"])) { + $a["\0AMQPEnvelope\0delivery_mode"] = $deliveryMode; + + return $a; + } + + if (!($filter & Caster::EXCLUDE_VERBOSE)) { + $a += array($prefix.'body' => $c->getBody()); + } + + $a += array( + $prefix.'delivery_tag' => $c->getDeliveryTag(), + $prefix.'is_redelivery' => $c->isRedelivery(), + $prefix.'exchange_name' => $c->getExchangeName(), + $prefix.'routing_key' => $c->getRoutingKey(), + $prefix.'content_type' => $c->getContentType(), + $prefix.'content_encoding' => $c->getContentEncoding(), + $prefix.'headers' => $c->getHeaders(), + $prefix.'delivery_mode' => $deliveryMode, + $prefix.'priority' => $c->getPriority(), + $prefix.'correlation_id' => $c->getCorrelationId(), + $prefix.'reply_to' => $c->getReplyTo(), + $prefix.'expiration' => $c->getExpiration(), + $prefix.'message_id' => $c->getMessageId(), + $prefix.'timestamp' => $c->getTimeStamp(), + $prefix.'type' => $c->getType(), + $prefix.'user_id' => $c->getUserId(), + $prefix.'app_id' => $c->getAppId(), + ); + + return $a; + } + + private static function extractFlags($flags) + { + $flagsArray = array(); + + foreach (self::$flags as $value => $name) { + if ($flags & $value) { + $flagsArray[] = $name; + } + } + + if (!$flagsArray) { + $flagsArray = array('AMQP_NOPARAM'); + } + + return new ConstStub(implode('|', $flagsArray), $flags); + } } diff --git a/htdocs/includes/symfony/var-dumper/Caster/ArgsStub.php b/htdocs/includes/symfony/var-dumper/Caster/ArgsStub.php new file mode 100644 index 00000000000..0fa2e17fa5e --- /dev/null +++ b/htdocs/includes/symfony/var-dumper/Caster/ArgsStub.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Represents a list of function arguments. + * + * @author Nicolas Grekas
+ */ +class ArgsStub extends EnumStub +{ + private static $parameters = array(); + + public function __construct(array $args, $function, $class) + { + list($variadic, $params) = self::getParameters($function, $class); + + $values = array(); + foreach ($args as $k => $v) { + $values[$k] = !is_scalar($v) && !$v instanceof Stub ? new CutStub($v) : $v; + } + if (null === $params) { + parent::__construct($values, false); + + return; + } + if (count($values) < count($params)) { + $params = array_slice($params, 0, count($values)); + } elseif (count($values) > count($params)) { + $values[] = new EnumStub(array_splice($values, count($params)), false); + $params[] = $variadic; + } + if (array('...') === $params) { + $this->dumpKeys = false; + $this->value = $values[0]->value; + } else { + $this->value = array_combine($params, $values); + } + } + + private static function getParameters($function, $class) + { + if (isset(self::$parameters[$k = $class.'::'.$function])) { + return self::$parameters[$k]; + } + + try { + $r = null !== $class ? new \ReflectionMethod($class, $function) : new \ReflectionFunction($function); + } catch (\ReflectionException $e) { + return array(null, null); + } + + $variadic = '...'; + $params = array(); + foreach ($r->getParameters() as $v) { + $k = '$'.$v->name; + if ($v->isPassedByReference()) { + $k = '&'.$k; + } + if (method_exists($v, 'isVariadic') && $v->isVariadic()) { + $variadic .= $k; + } else { + $params[] = $k; + } + } + + return self::$parameters[$k] = array($variadic, $params); + } +} diff --git a/htdocs/includes/symfony/var-dumper/Caster/Caster.php b/htdocs/includes/symfony/var-dumper/Caster/Caster.php index 23e72e87701..701c83a599e 100644 --- a/htdocs/includes/symfony/var-dumper/Caster/Caster.php +++ b/htdocs/includes/symfony/var-dumper/Caster/Caster.php @@ -11,6 +11,8 @@ namespace Symfony\Component\VarDumper\Caster; +use Symfony\Component\VarDumper\Cloner\Stub; + /** * Helper for filtering out properties in casters. * @@ -18,99 +20,123 @@ namespace Symfony\Component\VarDumper\Caster; */ class Caster { - const EXCLUDE_VERBOSE = 1; - const EXCLUDE_VIRTUAL = 2; - const EXCLUDE_DYNAMIC = 4; - const EXCLUDE_PUBLIC = 8; - const EXCLUDE_PROTECTED = 16; - const EXCLUDE_PRIVATE = 32; - const EXCLUDE_NULL = 64; - const EXCLUDE_EMPTY = 128; - const EXCLUDE_NOT_IMPORTANT = 256; - const EXCLUDE_STRICT = 512; + const EXCLUDE_VERBOSE = 1; + const EXCLUDE_VIRTUAL = 2; + const EXCLUDE_DYNAMIC = 4; + const EXCLUDE_PUBLIC = 8; + const EXCLUDE_PROTECTED = 16; + const EXCLUDE_PRIVATE = 32; + const EXCLUDE_NULL = 64; + const EXCLUDE_EMPTY = 128; + const EXCLUDE_NOT_IMPORTANT = 256; + const EXCLUDE_STRICT = 512; - const PREFIX_VIRTUAL = "\0~\0"; - const PREFIX_DYNAMIC = "\0+\0"; - const PREFIX_PROTECTED = "\0*\0"; + const PREFIX_VIRTUAL = "\0~\0"; + const PREFIX_DYNAMIC = "\0+\0"; + const PREFIX_PROTECTED = "\0*\0"; - /** - * Casts objects to arrays and adds the dynamic property prefix. - * - * @param object $obj The object to cast. - * @param \ReflectionClass $reflector The class reflector to use for inspecting the object definition. - * - * @return array The array-cast of the object, with prefixed dynamic properties. - */ - public static function castObject($obj, \ReflectionClass $reflector) - { - if ($reflector->hasMethod('__debugInfo')) { - $a = $obj->__debugInfo(); - } else { - $a = (array) $obj; - } + /** + * Casts objects to arrays and adds the dynamic property prefix. + * + * @param object $obj The object to cast + * @param \ReflectionClass $reflector The class reflector to use for inspecting the object definition + * + * @return array The array-cast of the object, with prefixed dynamic properties + */ + public static function castObject($obj, \ReflectionClass $reflector) + { + if ($reflector->hasMethod('__debugInfo')) { + $a = $obj->__debugInfo(); + } elseif ($obj instanceof \Closure) { + $a = array(); + } else { + $a = (array) $obj; + } + if ($obj instanceof \__PHP_Incomplete_Class) { + return $a; + } - if ($a) { - $p = array_keys($a); - foreach ($p as $i => $k) { - if (!isset($k[0]) || ("\0" !== $k[0] && !$reflector->hasProperty($k))) { - $p[$i] = self::PREFIX_DYNAMIC.$k; - } elseif (isset($k[16]) && "\0" === $k[16] && 0 === strpos($k, "\0class@anonymous\0")) { - $p[$i] = "\0".$reflector->getParentClass().'@anonymous'.strrchr($k, "\0"); - } - } - $a = array_combine($p, $a); - } + if ($a) { + $combine = false; + $p = array_keys($a); + foreach ($p as $i => $k) { + if (isset($k[0]) ? "\0" !== $k[0] && !$reflector->hasProperty($k) : \PHP_VERSION_ID >= 70200) { + $combine = true; + $p[$i] = self::PREFIX_DYNAMIC.$k; + } elseif (isset($k[16]) && "\0" === $k[16] && 0 === strpos($k, "\0class@anonymous\0")) { + $combine = true; + $p[$i] = "\0".$reflector->getParentClass().'@anonymous'.strrchr($k, "\0"); + } + } + if ($combine) { + $a = array_combine($p, $a); + } + } - return $a; - } + return $a; + } - /** - * Filters out the specified properties. - * - * By default, a single match in the $filter bit field filters properties out, following an "or" logic. - * When EXCLUDE_STRICT is set, an "and" logic is applied: all bits must match for a property to be removed. - * - * @param array $a The array containing the properties to filter. - * @param int $filter A bit field of Caster::EXCLUDE_* constants specifying which properties to filter out. - * @param string[] $listedProperties List of properties to exclude when Caster::EXCLUDE_VERBOSE is set, and to preserve when Caster::EXCLUDE_NOT_IMPORTANT is set. - * - * @return array The filtered array - */ - public static function filter(array $a, $filter, array $listedProperties = array()) - { - foreach ($a as $k => $v) { - $type = self::EXCLUDE_STRICT & $filter; + /** + * Filters out the specified properties. + * + * By default, a single match in the $filter bit field filters properties out, following an "or" logic. + * When EXCLUDE_STRICT is set, an "and" logic is applied: all bits must match for a property to be removed. + * + * @param array $a The array containing the properties to filter + * @param int $filter A bit field of Caster::EXCLUDE_* constants specifying which properties to filter out + * @param string[] $listedProperties List of properties to exclude when Caster::EXCLUDE_VERBOSE is set, and to preserve when Caster::EXCLUDE_NOT_IMPORTANT is set + * @param int &$count Set to the number of removed properties + * + * @return array The filtered array + */ + public static function filter(array $a, $filter, array $listedProperties = array(), &$count = 0) + { + $count = 0; - if (null === $v) { - $type |= self::EXCLUDE_NULL & $filter; - } - if (empty($v)) { - $type |= self::EXCLUDE_EMPTY & $filter; - } - if ((self::EXCLUDE_NOT_IMPORTANT & $filter) && !in_array($k, $listedProperties, true)) { - $type |= self::EXCLUDE_NOT_IMPORTANT; - } - if ((self::EXCLUDE_VERBOSE & $filter) && in_array($k, $listedProperties, true)) { - $type |= self::EXCLUDE_VERBOSE; - } + foreach ($a as $k => $v) { + $type = self::EXCLUDE_STRICT & $filter; - if (!isset($k[1]) || "\0" !== $k[0]) { - $type |= self::EXCLUDE_PUBLIC & $filter; - } elseif ('~' === $k[1]) { - $type |= self::EXCLUDE_VIRTUAL & $filter; - } elseif ('+' === $k[1]) { - $type |= self::EXCLUDE_DYNAMIC & $filter; - } elseif ('*' === $k[1]) { - $type |= self::EXCLUDE_PROTECTED & $filter; - } else { - $type |= self::EXCLUDE_PRIVATE & $filter; - } + if (null === $v) { + $type |= self::EXCLUDE_NULL & $filter; + } + if (empty($v)) { + $type |= self::EXCLUDE_EMPTY & $filter; + } + if ((self::EXCLUDE_NOT_IMPORTANT & $filter) && !in_array($k, $listedProperties, true)) { + $type |= self::EXCLUDE_NOT_IMPORTANT; + } + if ((self::EXCLUDE_VERBOSE & $filter) && in_array($k, $listedProperties, true)) { + $type |= self::EXCLUDE_VERBOSE; + } - if ((self::EXCLUDE_STRICT & $filter) ? $type === $filter : $type) { - unset($a[$k]); - } - } + if (!isset($k[1]) || "\0" !== $k[0]) { + $type |= self::EXCLUDE_PUBLIC & $filter; + } elseif ('~' === $k[1]) { + $type |= self::EXCLUDE_VIRTUAL & $filter; + } elseif ('+' === $k[1]) { + $type |= self::EXCLUDE_DYNAMIC & $filter; + } elseif ('*' === $k[1]) { + $type |= self::EXCLUDE_PROTECTED & $filter; + } else { + $type |= self::EXCLUDE_PRIVATE & $filter; + } - return $a; - } + if ((self::EXCLUDE_STRICT & $filter) ? $type === $filter : $type) { + unset($a[$k]); + ++$count; + } + } + + return $a; + } + + public static function castPhpIncompleteClass(\__PHP_Incomplete_Class $c, array $a, Stub $stub, $isNested) + { + if (isset($a['__PHP_Incomplete_Class_Name'])) { + $stub->class .= '('.$a['__PHP_Incomplete_Class_Name'].')'; + unset($a['__PHP_Incomplete_Class_Name']); + } + + return $a; + } } diff --git a/htdocs/includes/symfony/var-dumper/Caster/ClassStub.php b/htdocs/includes/symfony/var-dumper/Caster/ClassStub.php new file mode 100644 index 00000000000..6acb22d665c --- /dev/null +++ b/htdocs/includes/symfony/var-dumper/Caster/ClassStub.php @@ -0,0 +1,87 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +/** + * Represents a PHP class identifier. + * + * @author Nicolas Grekas
+ */ +class ClassStub extends ConstStub +{ + /** + * Constructor. + * + * @param string A PHP identifier, e.g. a class, method, interface, etc. name + * @param callable The callable targeted by the identifier when it is ambiguous or not a real PHP identifier + */ + public function __construct($identifier, $callable = null) + { + $this->value = $identifier; + + if (0 < $i = strrpos($identifier, '\\')) { + $this->attr['ellipsis'] = strlen($identifier) - $i; + } + + try { + if (null !== $callable) { + if ($callable instanceof \Closure) { + $r = new \ReflectionFunction($callable); + } elseif (is_object($callable)) { + $r = array($callable, '__invoke'); + } elseif (is_array($callable)) { + $r = $callable; + } elseif (false !== $i = strpos($callable, '::')) { + $r = array(substr($callable, 0, $i), substr($callable, 2 + $i)); + } else { + $r = new \ReflectionFunction($callable); + } + } elseif (false !== $i = strpos($identifier, '::')) { + $r = array(substr($identifier, 0, $i), substr($identifier, 2 + $i)); + } else { + $r = new \ReflectionClass($identifier); + } + + if (is_array($r)) { + try { + $r = new \ReflectionMethod($r[0], $r[1]); + } catch (\ReflectionException $e) { + $r = new \ReflectionClass($r[0]); + } + } + } catch (\ReflectionException $e) { + return; + } + + if ($f = $r->getFileName()) { + $this->attr['file'] = $f; + $this->attr['line'] = $r->getStartLine(); + } + } + + public static function wrapCallable($callable) + { + if (is_object($callable) || !is_callable($callable)) { + return $callable; + } + + if (!is_array($callable)) { + $callable = new static($callable); + } elseif (is_string($callable[0])) { + $callable[0] = new static($callable[0]); + } else { + $callable[1] = new static($callable[1], $callable); + } + + return $callable; + } +} diff --git a/htdocs/includes/symfony/var-dumper/Caster/ConstStub.php b/htdocs/includes/symfony/var-dumper/Caster/ConstStub.php index f20e03cdf0d..64766c3ba4f 100644 --- a/htdocs/includes/symfony/var-dumper/Caster/ConstStub.php +++ b/htdocs/includes/symfony/var-dumper/Caster/ConstStub.php @@ -20,9 +20,14 @@ use Symfony\Component\VarDumper\Cloner\Stub; */ class ConstStub extends Stub { - public function __construct($name, $value) - { - $this->class = $name; - $this->value = $value; - } + public function __construct($name, $value) + { + $this->class = $name; + $this->value = $value; + } + + public function __toString() + { + return (string) $this->value; + } } diff --git a/htdocs/includes/symfony/var-dumper/Caster/CutStub.php b/htdocs/includes/symfony/var-dumper/Caster/CutStub.php index 8781f5cf3c6..c8f51970abe 100644 --- a/htdocs/includes/symfony/var-dumper/Caster/CutStub.php +++ b/htdocs/includes/symfony/var-dumper/Caster/CutStub.php @@ -20,37 +20,40 @@ use Symfony\Component\VarDumper\Cloner\Stub; */ class CutStub extends Stub { - public function __construct($value) - { - $this->value = $value; + public function __construct($value) + { + $this->value = $value; - switch (gettype($value)) { - case 'object': - $this->type = self::TYPE_OBJECT; - $this->class = get_class($value); - $this->cut = -1; - break; + switch (gettype($value)) { + case 'object': + $this->type = self::TYPE_OBJECT; + $this->class = get_class($value); + $this->cut = -1; + break; - case 'array': - $this->type = self::TYPE_ARRAY; - $this->class = self::ARRAY_ASSOC; - $this->cut = $this->value = count($value); - break; + case 'array': + $this->type = self::TYPE_ARRAY; + $this->class = self::ARRAY_ASSOC; + $this->cut = $this->value = count($value); + break; - case 'resource': - case 'unknown type': - $this->type = self::TYPE_RESOURCE; - $this->handle = (int) $value; - $this->class = @get_resource_type($value); - $this->cut = -1; - break; + case 'resource': + case 'unknown type': + case 'resource (closed)': + $this->type = self::TYPE_RESOURCE; + $this->handle = (int) $value; + if ('Unknown' === $this->class = @get_resource_type($value)) { + $this->class = 'Closed'; + } + $this->cut = -1; + break; - case 'string': - $this->type = self::TYPE_STRING; - $this->class = preg_match('//u', $value) ? self::STRING_UTF8 : self::STRING_BINARY; - $this->cut = self::STRING_BINARY === $this->class ? strlen($value) : mb_strlen($value, 'UTF-8'); - $this->value = ''; - break; - } - } + case 'string': + $this->type = self::TYPE_STRING; + $this->class = preg_match('//u', $value) ? self::STRING_UTF8 : self::STRING_BINARY; + $this->cut = self::STRING_BINARY === $this->class ? strlen($value) : mb_strlen($value, 'UTF-8'); + $this->value = ''; + break; + } + } } diff --git a/htdocs/includes/symfony/var-dumper/Caster/DOMCaster.php b/htdocs/includes/symfony/var-dumper/Caster/DOMCaster.php index e04cf9534b3..c35c1965b8d 100644 --- a/htdocs/includes/symfony/var-dumper/Caster/DOMCaster.php +++ b/htdocs/includes/symfony/var-dumper/Caster/DOMCaster.php @@ -20,283 +20,283 @@ use Symfony\Component\VarDumper\Cloner\Stub; */ class DOMCaster { - private static $errorCodes = array( - DOM_PHP_ERR => 'DOM_PHP_ERR', - DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR', - DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR', - DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR', - DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR', - DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR', - DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR', - DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR', - DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR', - DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR', - DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR', - DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR', - DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR', - DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR', - DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR', - DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR', - DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR', - ); + private static $errorCodes = array( + DOM_PHP_ERR => 'DOM_PHP_ERR', + DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR', + DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR', + DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR', + DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR', + DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR', + DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR', + DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR', + DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR', + DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR', + DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR', + DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR', + DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR', + DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR', + DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR', + DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR', + DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR', + ); - private static $nodeTypes = array( - XML_ELEMENT_NODE => 'XML_ELEMENT_NODE', - XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE', - XML_TEXT_NODE => 'XML_TEXT_NODE', - XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE', - XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE', - XML_ENTITY_NODE => 'XML_ENTITY_NODE', - XML_PI_NODE => 'XML_PI_NODE', - XML_COMMENT_NODE => 'XML_COMMENT_NODE', - XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE', - XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE', - XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE', - XML_NOTATION_NODE => 'XML_NOTATION_NODE', - XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE', - XML_DTD_NODE => 'XML_DTD_NODE', - XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE', - XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE', - XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE', - XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE', - ); + private static $nodeTypes = array( + XML_ELEMENT_NODE => 'XML_ELEMENT_NODE', + XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE', + XML_TEXT_NODE => 'XML_TEXT_NODE', + XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE', + XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE', + XML_ENTITY_NODE => 'XML_ENTITY_NODE', + XML_PI_NODE => 'XML_PI_NODE', + XML_COMMENT_NODE => 'XML_COMMENT_NODE', + XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE', + XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE', + XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE', + XML_NOTATION_NODE => 'XML_NOTATION_NODE', + XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE', + XML_DTD_NODE => 'XML_DTD_NODE', + XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE', + XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE', + XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE', + XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE', + ); - public static function castException(\DOMException $e, array $a, Stub $stub, $isNested) - { - $k = Caster::PREFIX_PROTECTED.'code'; - if (isset($a[$k], self::$errorCodes[$a[$k]])) { - $a[$k] = new ConstStub(self::$errorCodes[$a[$k]], $a[$k]); - } + public static function castException(\DOMException $e, array $a, Stub $stub, $isNested) + { + $k = Caster::PREFIX_PROTECTED.'code'; + if (isset($a[$k], self::$errorCodes[$a[$k]])) { + $a[$k] = new ConstStub(self::$errorCodes[$a[$k]], $a[$k]); + } - return $a; - } + return $a; + } - public static function castLength($dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'length' => $dom->length, - ); + public static function castLength($dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'length' => $dom->length, + ); - return $a; - } + return $a; + } - public static function castImplementation($dom, array $a, Stub $stub, $isNested) - { - $a += array( - Caster::PREFIX_VIRTUAL.'Core' => '1.0', - Caster::PREFIX_VIRTUAL.'XML' => '2.0', - ); + public static function castImplementation($dom, array $a, Stub $stub, $isNested) + { + $a += array( + Caster::PREFIX_VIRTUAL.'Core' => '1.0', + Caster::PREFIX_VIRTUAL.'XML' => '2.0', + ); - return $a; - } + return $a; + } - public static function castNode(\DOMNode $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'nodeName' => $dom->nodeName, - 'nodeValue' => new CutStub($dom->nodeValue), - 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType), - 'parentNode' => new CutStub($dom->parentNode), - 'childNodes' => $dom->childNodes, - 'firstChild' => new CutStub($dom->firstChild), - 'lastChild' => new CutStub($dom->lastChild), - 'previousSibling' => new CutStub($dom->previousSibling), - 'nextSibling' => new CutStub($dom->nextSibling), - 'attributes' => $dom->attributes, - 'ownerDocument' => new CutStub($dom->ownerDocument), - 'namespaceURI' => $dom->namespaceURI, - 'prefix' => $dom->prefix, - 'localName' => $dom->localName, - 'baseURI' => $dom->baseURI, - 'textContent' => new CutStub($dom->textContent), - ); + public static function castNode(\DOMNode $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'nodeName' => $dom->nodeName, + 'nodeValue' => new CutStub($dom->nodeValue), + 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType), + 'parentNode' => new CutStub($dom->parentNode), + 'childNodes' => $dom->childNodes, + 'firstChild' => new CutStub($dom->firstChild), + 'lastChild' => new CutStub($dom->lastChild), + 'previousSibling' => new CutStub($dom->previousSibling), + 'nextSibling' => new CutStub($dom->nextSibling), + 'attributes' => $dom->attributes, + 'ownerDocument' => new CutStub($dom->ownerDocument), + 'namespaceURI' => $dom->namespaceURI, + 'prefix' => $dom->prefix, + 'localName' => $dom->localName, + 'baseURI' => $dom->baseURI ? new LinkStub($dom->baseURI) : $dom->baseURI, + 'textContent' => new CutStub($dom->textContent), + ); - return $a; - } + return $a; + } - public static function castNameSpaceNode(\DOMNameSpaceNode $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'nodeName' => $dom->nodeName, - 'nodeValue' => new CutStub($dom->nodeValue), - 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType), - 'prefix' => $dom->prefix, - 'localName' => $dom->localName, - 'namespaceURI' => $dom->namespaceURI, - 'ownerDocument' => new CutStub($dom->ownerDocument), - 'parentNode' => new CutStub($dom->parentNode), - ); + public static function castNameSpaceNode(\DOMNameSpaceNode $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'nodeName' => $dom->nodeName, + 'nodeValue' => new CutStub($dom->nodeValue), + 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType), + 'prefix' => $dom->prefix, + 'localName' => $dom->localName, + 'namespaceURI' => $dom->namespaceURI, + 'ownerDocument' => new CutStub($dom->ownerDocument), + 'parentNode' => new CutStub($dom->parentNode), + ); - return $a; - } + return $a; + } - public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, $isNested, $filter = 0) - { - $a += array( - 'doctype' => $dom->doctype, - 'implementation' => $dom->implementation, - 'documentElement' => new CutStub($dom->documentElement), - 'actualEncoding' => $dom->actualEncoding, - 'encoding' => $dom->encoding, - 'xmlEncoding' => $dom->xmlEncoding, - 'standalone' => $dom->standalone, - 'xmlStandalone' => $dom->xmlStandalone, - 'version' => $dom->version, - 'xmlVersion' => $dom->xmlVersion, - 'strictErrorChecking' => $dom->strictErrorChecking, - 'documentURI' => $dom->documentURI, - 'config' => $dom->config, - 'formatOutput' => $dom->formatOutput, - 'validateOnParse' => $dom->validateOnParse, - 'resolveExternals' => $dom->resolveExternals, - 'preserveWhiteSpace' => $dom->preserveWhiteSpace, - 'recover' => $dom->recover, - 'substituteEntities' => $dom->substituteEntities, - ); + public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, $isNested, $filter = 0) + { + $a += array( + 'doctype' => $dom->doctype, + 'implementation' => $dom->implementation, + 'documentElement' => new CutStub($dom->documentElement), + 'actualEncoding' => $dom->actualEncoding, + 'encoding' => $dom->encoding, + 'xmlEncoding' => $dom->xmlEncoding, + 'standalone' => $dom->standalone, + 'xmlStandalone' => $dom->xmlStandalone, + 'version' => $dom->version, + 'xmlVersion' => $dom->xmlVersion, + 'strictErrorChecking' => $dom->strictErrorChecking, + 'documentURI' => $dom->documentURI ? new LinkStub($dom->documentURI) : $dom->documentURI, + 'config' => $dom->config, + 'formatOutput' => $dom->formatOutput, + 'validateOnParse' => $dom->validateOnParse, + 'resolveExternals' => $dom->resolveExternals, + 'preserveWhiteSpace' => $dom->preserveWhiteSpace, + 'recover' => $dom->recover, + 'substituteEntities' => $dom->substituteEntities, + ); - if (!($filter & Caster::EXCLUDE_VERBOSE)) { - $formatOutput = $dom->formatOutput; - $dom->formatOutput = true; - $a += array(Caster::PREFIX_VIRTUAL.'xml' => $dom->saveXML()); - $dom->formatOutput = $formatOutput; - } + if (!($filter & Caster::EXCLUDE_VERBOSE)) { + $formatOutput = $dom->formatOutput; + $dom->formatOutput = true; + $a += array(Caster::PREFIX_VIRTUAL.'xml' => $dom->saveXML()); + $dom->formatOutput = $formatOutput; + } - return $a; - } + return $a; + } - public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'data' => $dom->data, - 'length' => $dom->length, - ); + public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'data' => $dom->data, + 'length' => $dom->length, + ); - return $a; - } + return $a; + } - public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'name' => $dom->name, - 'specified' => $dom->specified, - 'value' => $dom->value, - 'ownerElement' => $dom->ownerElement, - 'schemaTypeInfo' => $dom->schemaTypeInfo, - ); + public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'name' => $dom->name, + 'specified' => $dom->specified, + 'value' => $dom->value, + 'ownerElement' => $dom->ownerElement, + 'schemaTypeInfo' => $dom->schemaTypeInfo, + ); - return $a; - } + return $a; + } - public static function castElement(\DOMElement $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'tagName' => $dom->tagName, - 'schemaTypeInfo' => $dom->schemaTypeInfo, - ); + public static function castElement(\DOMElement $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'tagName' => $dom->tagName, + 'schemaTypeInfo' => $dom->schemaTypeInfo, + ); - return $a; - } + return $a; + } - public static function castText(\DOMText $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'wholeText' => $dom->wholeText, - ); + public static function castText(\DOMText $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'wholeText' => $dom->wholeText, + ); - return $a; - } + return $a; + } - public static function castTypeinfo(\DOMTypeinfo $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'typeName' => $dom->typeName, - 'typeNamespace' => $dom->typeNamespace, - ); + public static function castTypeinfo(\DOMTypeinfo $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'typeName' => $dom->typeName, + 'typeNamespace' => $dom->typeNamespace, + ); - return $a; - } + return $a; + } - public static function castDomError(\DOMDomError $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'severity' => $dom->severity, - 'message' => $dom->message, - 'type' => $dom->type, - 'relatedException' => $dom->relatedException, - 'related_data' => $dom->related_data, - 'location' => $dom->location, - ); + public static function castDomError(\DOMDomError $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'severity' => $dom->severity, + 'message' => $dom->message, + 'type' => $dom->type, + 'relatedException' => $dom->relatedException, + 'related_data' => $dom->related_data, + 'location' => $dom->location, + ); - return $a; - } + return $a; + } - public static function castLocator(\DOMLocator $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'lineNumber' => $dom->lineNumber, - 'columnNumber' => $dom->columnNumber, - 'offset' => $dom->offset, - 'relatedNode' => $dom->relatedNode, - 'uri' => $dom->uri, - ); + public static function castLocator(\DOMLocator $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'lineNumber' => $dom->lineNumber, + 'columnNumber' => $dom->columnNumber, + 'offset' => $dom->offset, + 'relatedNode' => $dom->relatedNode, + 'uri' => $dom->uri ? new LinkStub($dom->uri, $dom->lineNumber) : $dom->uri, + ); - return $a; - } + return $a; + } - public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'name' => $dom->name, - 'entities' => $dom->entities, - 'notations' => $dom->notations, - 'publicId' => $dom->publicId, - 'systemId' => $dom->systemId, - 'internalSubset' => $dom->internalSubset, - ); + public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'name' => $dom->name, + 'entities' => $dom->entities, + 'notations' => $dom->notations, + 'publicId' => $dom->publicId, + 'systemId' => $dom->systemId, + 'internalSubset' => $dom->internalSubset, + ); - return $a; - } + return $a; + } - public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'publicId' => $dom->publicId, - 'systemId' => $dom->systemId, - ); + public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'publicId' => $dom->publicId, + 'systemId' => $dom->systemId, + ); - return $a; - } + return $a; + } - public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'publicId' => $dom->publicId, - 'systemId' => $dom->systemId, - 'notationName' => $dom->notationName, - 'actualEncoding' => $dom->actualEncoding, - 'encoding' => $dom->encoding, - 'version' => $dom->version, - ); + public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'publicId' => $dom->publicId, + 'systemId' => $dom->systemId, + 'notationName' => $dom->notationName, + 'actualEncoding' => $dom->actualEncoding, + 'encoding' => $dom->encoding, + 'version' => $dom->version, + ); - return $a; - } + return $a; + } - public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'target' => $dom->target, - 'data' => $dom->data, - ); + public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'target' => $dom->target, + 'data' => $dom->data, + ); - return $a; - } + return $a; + } - public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, $isNested) - { - $a += array( - 'document' => $dom->document, - ); + public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, $isNested) + { + $a += array( + 'document' => $dom->document, + ); - return $a; - } + return $a; + } } diff --git a/htdocs/includes/symfony/var-dumper/Caster/EnumStub.php b/htdocs/includes/symfony/var-dumper/Caster/EnumStub.php index 67bb2e16390..66d8bc219de 100644 --- a/htdocs/includes/symfony/var-dumper/Caster/EnumStub.php +++ b/htdocs/includes/symfony/var-dumper/Caster/EnumStub.php @@ -20,8 +20,11 @@ use Symfony\Component\VarDumper\Cloner\Stub; */ class EnumStub extends Stub { - public function __construct(array $values) - { - $this->value = $values; - } + public $dumpKeys = true; + + public function __construct(array $values, $dumpKeys = true) + { + $this->value = $values; + $this->dumpKeys = $dumpKeys; + } } diff --git a/htdocs/includes/symfony/var-dumper/Caster/ExceptionCaster.php b/htdocs/includes/symfony/var-dumper/Caster/ExceptionCaster.php index a5a8773e859..daf7cebe83f 100644 --- a/htdocs/includes/symfony/var-dumper/Caster/ExceptionCaster.php +++ b/htdocs/includes/symfony/var-dumper/Caster/ExceptionCaster.php @@ -21,218 +21,278 @@ use Symfony\Component\VarDumper\Cloner\Stub; */ class ExceptionCaster { - public static $srcContext = 1; - public static $traceArgs = true; - public static $errorTypes = array( - E_DEPRECATED => 'E_DEPRECATED', - E_USER_DEPRECATED => 'E_USER_DEPRECATED', - E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', - E_ERROR => 'E_ERROR', - E_WARNING => 'E_WARNING', - E_PARSE => 'E_PARSE', - E_NOTICE => 'E_NOTICE', - E_CORE_ERROR => 'E_CORE_ERROR', - E_CORE_WARNING => 'E_CORE_WARNING', - E_COMPILE_ERROR => 'E_COMPILE_ERROR', - E_COMPILE_WARNING => 'E_COMPILE_WARNING', - E_USER_ERROR => 'E_USER_ERROR', - E_USER_WARNING => 'E_USER_WARNING', - E_USER_NOTICE => 'E_USER_NOTICE', - E_STRICT => 'E_STRICT', - ); + public static $srcContext = 1; + public static $traceArgs = true; + public static $errorTypes = array( + E_DEPRECATED => 'E_DEPRECATED', + E_USER_DEPRECATED => 'E_USER_DEPRECATED', + E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', + E_ERROR => 'E_ERROR', + E_WARNING => 'E_WARNING', + E_PARSE => 'E_PARSE', + E_NOTICE => 'E_NOTICE', + E_CORE_ERROR => 'E_CORE_ERROR', + E_CORE_WARNING => 'E_CORE_WARNING', + E_COMPILE_ERROR => 'E_COMPILE_ERROR', + E_COMPILE_WARNING => 'E_COMPILE_WARNING', + E_USER_ERROR => 'E_USER_ERROR', + E_USER_WARNING => 'E_USER_WARNING', + E_USER_NOTICE => 'E_USER_NOTICE', + E_STRICT => 'E_STRICT', + ); - public static function castError(\Error $e, array $a, Stub $stub, $isNested, $filter = 0) - { - return self::filterExceptionArray($stub->class, $a, "\0Error\0", $filter); - } + private static $framesCache = array(); - public static function castException(\Exception $e, array $a, Stub $stub, $isNested, $filter = 0) - { - return self::filterExceptionArray($stub->class, $a, "\0Exception\0", $filter); - } + public static function castError(\Error $e, array $a, Stub $stub, $isNested, $filter = 0) + { + return self::filterExceptionArray($stub->class, $a, "\0Error\0", $filter); + } - public static function castErrorException(\ErrorException $e, array $a, Stub $stub, $isNested) - { - if (isset($a[$s = Caster::PREFIX_PROTECTED.'severity'], self::$errorTypes[$a[$s]])) { - $a[$s] = new ConstStub(self::$errorTypes[$a[$s]], $a[$s]); - } + public static function castException(\Exception $e, array $a, Stub $stub, $isNested, $filter = 0) + { + return self::filterExceptionArray($stub->class, $a, "\0Exception\0", $filter); + } - return $a; - } + public static function castErrorException(\ErrorException $e, array $a, Stub $stub, $isNested) + { + if (isset($a[$s = Caster::PREFIX_PROTECTED.'severity'], self::$errorTypes[$a[$s]])) { + $a[$s] = new ConstStub(self::$errorTypes[$a[$s]], $a[$s]); + } - public static function castThrowingCasterException(ThrowingCasterException $e, array $a, Stub $stub, $isNested) - { - $prefix = Caster::PREFIX_PROTECTED; - $xPrefix = "\0Exception\0"; + return $a; + } - if (isset($a[$xPrefix.'previous'], $a[$xPrefix.'trace'])) { - $b = (array) $a[$xPrefix.'previous']; - array_unshift($b[$xPrefix.'trace'], array( - 'function' => 'new '.get_class($a[$xPrefix.'previous']), - 'file' => $b[$prefix.'file'], - 'line' => $b[$prefix.'line'], - )); - $a[$xPrefix.'trace'] = new TraceStub($b[$xPrefix.'trace'], false, 0, -1 - count($a[$xPrefix.'trace']->value)); - } + public static function castThrowingCasterException(ThrowingCasterException $e, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_PROTECTED; + $xPrefix = "\0Exception\0"; - unset($a[$xPrefix.'previous'], $a[$prefix.'code'], $a[$prefix.'file'], $a[$prefix.'line']); + if (isset($a[$xPrefix.'previous'], $a[$xPrefix.'trace']) && $a[$xPrefix.'previous'] instanceof \Exception) { + $b = (array) $a[$xPrefix.'previous']; + self::traceUnshift($b[$xPrefix.'trace'], get_class($a[$xPrefix.'previous']), $b[$prefix.'file'], $b[$prefix.'line']); + $a[$xPrefix.'trace'] = new TraceStub($b[$xPrefix.'trace'], false, 0, -1 - count($a[$xPrefix.'trace']->value)); + } - return $a; - } + unset($a[$xPrefix.'previous'], $a[$prefix.'code'], $a[$prefix.'file'], $a[$prefix.'line']); - public static function castTraceStub(TraceStub $trace, array $a, Stub $stub, $isNested) - { - if (!$isNested) { - return $a; - } - $stub->class = ''; - $stub->handle = 0; - $frames = $trace->value; + return $a; + } - $a = array(); - $j = count($frames); - if (0 > $i = $trace->sliceOffset) { - $i = max(0, $j + $i); - } - if (!isset($trace->value[$i])) { - return array(); - } - $lastCall = isset($frames[$i]['function']) ? ' ==> '.(isset($frames[$i]['class']) ? $frames[0]['class'].$frames[$i]['type'] : '').$frames[$i]['function'].'()' : ''; + public static function castTraceStub(TraceStub $trace, array $a, Stub $stub, $isNested) + { + if (!$isNested) { + return $a; + } + $stub->class = ''; + $stub->handle = 0; + $frames = $trace->value; + $prefix = Caster::PREFIX_VIRTUAL; - for ($j += $trace->numberingOffset - $i++; isset($frames[$i]); ++$i, --$j) { - $call = isset($frames[$i]['function']) ? (isset($frames[$i]['class']) ? $frames[$i]['class'].$frames[$i]['type'] : '').$frames[$i]['function'].'()' : '???'; + $a = array(); + $j = count($frames); + if (0 > $i = $trace->sliceOffset) { + $i = max(0, $j + $i); + } + if (!isset($trace->value[$i])) { + return array(); + } + $lastCall = isset($frames[$i]['function']) ? (isset($frames[$i]['class']) ? $frames[0]['class'].$frames[$i]['type'] : '').$frames[$i]['function'].'()' : ''; + $frames[] = array('function' => ''); - $a[Caster::PREFIX_VIRTUAL.$j.'. '.$call.$lastCall] = new FrameStub( - array( - 'object' => isset($frames[$i]['object']) ? $frames[$i]['object'] : null, - 'class' => isset($frames[$i]['class']) ? $frames[$i]['class'] : null, - 'type' => isset($frames[$i]['type']) ? $frames[$i]['type'] : null, - 'function' => isset($frames[$i]['function']) ? $frames[$i]['function'] : null, - ) + $frames[$i - 1], - $trace->keepArgs, - true - ); + for ($j += $trace->numberingOffset - $i++; isset($frames[$i]); ++$i, --$j) { + $f = $frames[$i]; + $call = isset($f['function']) ? (isset($f['class']) ? $f['class'].$f['type'] : '').$f['function'].'()' : '???'; - $lastCall = ' ==> '.$call; - } - $a[Caster::PREFIX_VIRTUAL.$j.'. {main}'.$lastCall] = new FrameStub( - array( - 'object' => null, - 'class' => null, - 'type' => null, - 'function' => '{main}', - ) + $frames[$i - 1], - $trace->keepArgs, - true - ); - if (null !== $trace->sliceLength) { - $a = array_slice($a, 0, $trace->sliceLength, true); - } + $label = substr_replace($prefix, "title=Stack level $j.", 2, 0).$lastCall; + $frame = new FrameStub( + array( + 'object' => isset($f['object']) ? $f['object'] : null, + 'class' => isset($f['class']) ? $f['class'] : null, + 'type' => isset($f['type']) ? $f['type'] : null, + 'function' => isset($f['function']) ? $f['function'] : null, + ) + $frames[$i - 1], + false, + true + ); + $f = self::castFrameStub($frame, array(), $frame, true); + if (isset($f[$prefix.'src'])) { + foreach ($f[$prefix.'src']->value as $label => $frame) { + $label = substr_replace($label, "title=Stack level $j.&", 2, 0); + } + $f = $frames[$i - 1]; + if ($trace->keepArgs && !empty($f['args']) && $frame instanceof EnumStub) { + $frame->value['arguments'] = new ArgsStub($f['args'], isset($f['function']) ? $f['function'] : null, isset($f['class']) ? $f['class'] : null); + } + } + $a[$label] = $frame; - return $a; - } + $lastCall = $call; + } + if (null !== $trace->sliceLength) { + $a = array_slice($a, 0, $trace->sliceLength, true); + } - public static function castFrameStub(FrameStub $frame, array $a, Stub $stub, $isNested) - { - if (!$isNested) { - return $a; - } - $f = $frame->value; - $prefix = Caster::PREFIX_VIRTUAL; + return $a; + } - if (isset($f['file'], $f['line'])) { - if (preg_match('/\((\d+)\)(?:\([\da-f]{32}\))? : (?:eval\(\)\'d code|runtime-created function)$/', $f['file'], $match)) { - $f['file'] = substr($f['file'], 0, -strlen($match[0])); - $f['line'] = (int) $match[1]; - } - if (file_exists($f['file']) && 0 <= self::$srcContext) { - $src[$f['file'].':'.$f['line']] = self::extractSource(explode("\n", file_get_contents($f['file'])), $f['line'], self::$srcContext); + public static function castFrameStub(FrameStub $frame, array $a, Stub $stub, $isNested) + { + if (!$isNested) { + return $a; + } + $f = $frame->value; + $prefix = Caster::PREFIX_VIRTUAL; - if (!empty($f['class']) && is_subclass_of($f['class'], 'Twig_Template') && method_exists($f['class'], 'getDebugInfo')) { - $template = isset($f['object']) ? $f['object'] : new $f['class'](new \Twig_Environment(new \Twig_Loader_Filesystem())); + if (isset($f['file'], $f['line'])) { + $cacheKey = $f; + unset($cacheKey['object'], $cacheKey['args']); + $cacheKey[] = self::$srcContext; + $cacheKey = implode('-', $cacheKey); - try { - $templateName = $template->getTemplateName(); - $templateSrc = explode("\n", method_exists($template, 'getSource') ? $template->getSource() : $template->getEnvironment()->getLoader()->getSource($templateName)); - $templateInfo = $template->getDebugInfo(); - if (isset($templateInfo[$f['line']])) { - $src[$templateName.':'.$templateInfo[$f['line']]] = self::extractSource($templateSrc, $templateInfo[$f['line']], self::$srcContext); - } - } catch (\Twig_Error_Loader $e) { - } - } - } else { - $src[$f['file']] = $f['line']; - } - $a[$prefix.'src'] = new EnumStub($src); - } + if (isset(self::$framesCache[$cacheKey])) { + $a[$prefix.'src'] = self::$framesCache[$cacheKey]; + } else { + if (preg_match('/\((\d+)\)(?:\([\da-f]{32}\))? : (?:eval\(\)\'d code|runtime-created function)$/', $f['file'], $match)) { + $f['file'] = substr($f['file'], 0, -strlen($match[0])); + $f['line'] = (int) $match[1]; + } + $caller = isset($f['function']) ? sprintf('in %s() on line %d', (isset($f['class']) ? $f['class'].$f['type'] : '').$f['function'], $f['line']) : null; + $src = $f['line']; + $srcKey = $f['file']; + $ellipsis = explode(DIRECTORY_SEPARATOR, $srcKey); + $ellipsis = 3 < count($ellipsis) ? 2 + strlen(implode(array_slice($ellipsis, -2))) : 0; - unset($a[$prefix.'args'], $a[$prefix.'line'], $a[$prefix.'file']); - if ($frame->inTraceStub) { - unset($a[$prefix.'class'], $a[$prefix.'type'], $a[$prefix.'function']); - } - foreach ($a as $k => $v) { - if (!$v) { - unset($a[$k]); - } - } - if ($frame->keepArgs && isset($f['args'])) { - $a[$prefix.'args'] = $f['args']; - } + if (file_exists($f['file']) && 0 <= self::$srcContext) { + if (!empty($f['class']) && (is_subclass_of($f['class'], 'Twig\Template') || is_subclass_of($f['class'], 'Twig_Template')) && method_exists($f['class'], 'getDebugInfo')) { + $template = isset($f['object']) ? $f['object'] : unserialize(sprintf('O:%d:"%s":0:{}', strlen($f['class']), $f['class'])); - return $a; - } + $ellipsis = 0; + $templateSrc = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getCode() : (method_exists($template, 'getSource') ? $template->getSource() : ''); + $templateInfo = $template->getDebugInfo(); + if (isset($templateInfo[$f['line']])) { + if (!method_exists($template, 'getSourceContext') || !file_exists($templatePath = $template->getSourceContext()->getPath())) { + $templatePath = null; + } + if ($templateSrc) { + $src = self::extractSource($templateSrc, $templateInfo[$f['line']], self::$srcContext, $caller, 'twig', $templatePath); + $srcKey = ($templatePath ?: $template->getTemplateName()).':'.$templateInfo[$f['line']]; + } + } + } + if ($srcKey == $f['file']) { + $src = self::extractSource(file_get_contents($f['file']), $f['line'], self::$srcContext, $caller, 'php', $f['file']); + $srcKey .= ':'.$f['line']; + if ($ellipsis) { + $ellipsis += 1 + strlen($f['line']); + } + } + } + $srcAttr = $ellipsis ? 'ellipsis='.$ellipsis : ''; + self::$framesCache[$cacheKey] = $a[$prefix.'src'] = new EnumStub(array("\0~$srcAttr\0$srcKey" => $src)); + } + } - private static function filterExceptionArray($xClass, array $a, $xPrefix, $filter) - { - if (isset($a[$xPrefix.'trace'])) { - $trace = $a[$xPrefix.'trace']; - unset($a[$xPrefix.'trace']); // Ensures the trace is always last - } else { - $trace = array(); - } + unset($a[$prefix.'args'], $a[$prefix.'line'], $a[$prefix.'file']); + if ($frame->inTraceStub) { + unset($a[$prefix.'class'], $a[$prefix.'type'], $a[$prefix.'function']); + } + foreach ($a as $k => $v) { + if (!$v) { + unset($a[$k]); + } + } + if ($frame->keepArgs && !empty($f['args'])) { + $a[$prefix.'arguments'] = new ArgsStub($f['args'], $f['function'], $f['class']); + } - if (!($filter & Caster::EXCLUDE_VERBOSE)) { - array_unshift($trace, array( - 'function' => $xClass ? 'new '.$xClass : null, - 'file' => $a[Caster::PREFIX_PROTECTED.'file'], - 'line' => $a[Caster::PREFIX_PROTECTED.'line'], - )); - $a[$xPrefix.'trace'] = new TraceStub($trace); - } - if (empty($a[$xPrefix.'previous'])) { - unset($a[$xPrefix.'previous']); - } - unset($a[$xPrefix.'string'], $a[Caster::PREFIX_DYNAMIC.'xdebug_message'], $a[Caster::PREFIX_DYNAMIC.'__destructorException']); + return $a; + } - return $a; - } + private static function filterExceptionArray($xClass, array $a, $xPrefix, $filter) + { + if (isset($a[$xPrefix.'trace'])) { + $trace = $a[$xPrefix.'trace']; + unset($a[$xPrefix.'trace']); // Ensures the trace is always last + } else { + $trace = array(); + } - private static function extractSource(array $srcArray, $line, $srcContext) - { - $src = array(); + if (!($filter & Caster::EXCLUDE_VERBOSE)) { + if (isset($a[Caster::PREFIX_PROTECTED.'file'], $a[Caster::PREFIX_PROTECTED.'line'])) { + self::traceUnshift($trace, $xClass, $a[Caster::PREFIX_PROTECTED.'file'], $a[Caster::PREFIX_PROTECTED.'line']); + } + $a[$xPrefix.'trace'] = new TraceStub($trace, self::$traceArgs); + } + if (empty($a[$xPrefix.'previous'])) { + unset($a[$xPrefix.'previous']); + } + unset($a[$xPrefix.'string'], $a[Caster::PREFIX_DYNAMIC.'xdebug_message'], $a[Caster::PREFIX_DYNAMIC.'__destructorException']); - for ($i = $line - 1 - $srcContext; $i <= $line - 1 + $srcContext; ++$i) { - $src[] = (isset($srcArray[$i]) ? $srcArray[$i] : '')."\n"; - } + if (isset($a[Caster::PREFIX_PROTECTED.'file'], $a[Caster::PREFIX_PROTECTED.'line'])) { + $a[Caster::PREFIX_PROTECTED.'file'] = new LinkStub($a[Caster::PREFIX_PROTECTED.'file'], $a[Caster::PREFIX_PROTECTED.'line']); + } - $ltrim = 0; - while (' ' === $src[0][$ltrim] || "\t" === $src[0][$ltrim]) { - $i = $srcContext << 1; - while ($i > 0 && $src[0][$ltrim] === $src[$i][$ltrim]) { - --$i; - } - if ($i) { - break; - } - ++$ltrim; - } - if ($ltrim) { - foreach ($src as $i => $line) { - $src[$i] = substr($line, $ltrim); - } - } + return $a; + } - return implode('', $src); - } + private static function traceUnshift(&$trace, $class, $file, $line) + { + if (isset($trace[0]['file'], $trace[0]['line']) && $trace[0]['file'] === $file && $trace[0]['line'] === $line) { + return; + } + array_unshift($trace, array( + 'function' => $class ? 'new '.$class : null, + 'file' => $file, + 'line' => $line, + )); + } + + private static function extractSource($srcLines, $line, $srcContext, $title, $lang, $file = null) + { + $srcLines = explode("\n", $srcLines); + $src = array(); + + for ($i = $line - 1 - $srcContext; $i <= $line - 1 + $srcContext; ++$i) { + $src[] = (isset($srcLines[$i]) ? $srcLines[$i] : '')."\n"; + } + + $srcLines = array(); + $ltrim = 0; + do { + $pad = null; + for ($i = $srcContext << 1; $i >= 0; --$i) { + if (isset($src[$i][$ltrim]) && "\r" !== ($c = $src[$i][$ltrim]) && "\n" !== $c) { + if (null === $pad) { + $pad = $c; + } + if ((' ' !== $c && "\t" !== $c) || $pad !== $c) { + break; + } + } + } + ++$ltrim; + } while (0 > $i && null !== $pad); + + --$ltrim; + + foreach ($src as $i => $c) { + if ($ltrim) { + $c = isset($c[$ltrim]) && "\r" !== $c[$ltrim] ? substr($c, $ltrim) : ltrim($c, " \t"); + } + $c = substr($c, 0, -1); + if ($i !== $srcContext) { + $c = new ConstStub('default', $c); + } else { + $c = new ConstStub($c, $title); + if (null !== $file) { + $c->attr['file'] = $file; + $c->attr['line'] = $line; + } + } + $c->attr['lang'] = $lang; + $srcLines[sprintf("\0~%d\0", $i + $line - $srcContext)] = $c; + } + + return new EnumStub($srcLines); + } } diff --git a/htdocs/includes/symfony/var-dumper/Caster/LinkStub.php b/htdocs/includes/symfony/var-dumper/Caster/LinkStub.php new file mode 100644 index 00000000000..d275379c2a9 --- /dev/null +++ b/htdocs/includes/symfony/var-dumper/Caster/LinkStub.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +/** + * Represents a file or a URL. + * + * @author Nicolas Grekas
+ */ +class LinkStub extends ConstStub +{ + public function __construct($label, $line = 0, $href = null) + { + $this->value = $label; + + if (null === $href) { + $href = $label; + } + if (is_string($href)) { + if (0 === strpos($href, 'file://')) { + if ($href === $label) { + $label = substr($label, 7); + } + $href = substr($href, 7); + } elseif (false !== strpos($href, '://')) { + $this->attr['href'] = $href; + + return; + } + if (file_exists($href)) { + if ($line) { + $this->attr['line'] = $line; + } + $this->attr['file'] = realpath($href) ?: $href; + + if ($this->attr['file'] === $label && 3 < count($ellipsis = explode(DIRECTORY_SEPARATOR, $href))) { + $this->attr['ellipsis'] = 2 + strlen(implode(array_slice($ellipsis, -2))); + } + } + } + } +} diff --git a/htdocs/includes/symfony/var-dumper/Caster/PdoCaster.php b/htdocs/includes/symfony/var-dumper/Caster/PdoCaster.php index e60b9275fd8..782101a90a7 100644 --- a/htdocs/includes/symfony/var-dumper/Caster/PdoCaster.php +++ b/htdocs/includes/symfony/var-dumper/Caster/PdoCaster.php @@ -20,95 +20,101 @@ use Symfony\Component\VarDumper\Cloner\Stub; */ class PdoCaster { - private static $pdoAttributes = array( - 'CASE' => array( - \PDO::CASE_LOWER => 'LOWER', - \PDO::CASE_NATURAL => 'NATURAL', - \PDO::CASE_UPPER => 'UPPER', - ), - 'ERRMODE' => array( - \PDO::ERRMODE_SILENT => 'SILENT', - \PDO::ERRMODE_WARNING => 'WARNING', - \PDO::ERRMODE_EXCEPTION => 'EXCEPTION', - ), - 'TIMEOUT', - 'PREFETCH', - 'AUTOCOMMIT', - 'PERSISTENT', - 'DRIVER_NAME', - 'SERVER_INFO', - 'ORACLE_NULLS' => array( - \PDO::NULL_NATURAL => 'NATURAL', - \PDO::NULL_EMPTY_STRING => 'EMPTY_STRING', - \PDO::NULL_TO_STRING => 'TO_STRING', - ), - 'CLIENT_VERSION', - 'SERVER_VERSION', - 'STATEMENT_CLASS', - 'EMULATE_PREPARES', - 'CONNECTION_STATUS', - 'STRINGIFY_FETCHES', - 'DEFAULT_FETCH_MODE' => array( - \PDO::FETCH_ASSOC => 'ASSOC', - \PDO::FETCH_BOTH => 'BOTH', - \PDO::FETCH_LAZY => 'LAZY', - \PDO::FETCH_NUM => 'NUM', - \PDO::FETCH_OBJ => 'OBJ', - ), - ); + private static $pdoAttributes = array( + 'CASE' => array( + \PDO::CASE_LOWER => 'LOWER', + \PDO::CASE_NATURAL => 'NATURAL', + \PDO::CASE_UPPER => 'UPPER', + ), + 'ERRMODE' => array( + \PDO::ERRMODE_SILENT => 'SILENT', + \PDO::ERRMODE_WARNING => 'WARNING', + \PDO::ERRMODE_EXCEPTION => 'EXCEPTION', + ), + 'TIMEOUT', + 'PREFETCH', + 'AUTOCOMMIT', + 'PERSISTENT', + 'DRIVER_NAME', + 'SERVER_INFO', + 'ORACLE_NULLS' => array( + \PDO::NULL_NATURAL => 'NATURAL', + \PDO::NULL_EMPTY_STRING => 'EMPTY_STRING', + \PDO::NULL_TO_STRING => 'TO_STRING', + ), + 'CLIENT_VERSION', + 'SERVER_VERSION', + 'STATEMENT_CLASS', + 'EMULATE_PREPARES', + 'CONNECTION_STATUS', + 'STRINGIFY_FETCHES', + 'DEFAULT_FETCH_MODE' => array( + \PDO::FETCH_ASSOC => 'ASSOC', + \PDO::FETCH_BOTH => 'BOTH', + \PDO::FETCH_LAZY => 'LAZY', + \PDO::FETCH_NUM => 'NUM', + \PDO::FETCH_OBJ => 'OBJ', + ), + ); - public static function castPdo(\PDO $c, array $a, Stub $stub, $isNested) - { - $attr = array(); - $errmode = $c->getAttribute(\PDO::ATTR_ERRMODE); - $c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + public static function castPdo(\PDO $c, array $a, Stub $stub, $isNested) + { + $attr = array(); + $errmode = $c->getAttribute(\PDO::ATTR_ERRMODE); + $c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); - foreach (self::$pdoAttributes as $k => $v) { - if (!isset($k[0])) { - $k = $v; - $v = array(); - } + foreach (self::$pdoAttributes as $k => $v) { + if (!isset($k[0])) { + $k = $v; + $v = array(); + } - try { - $attr[$k] = 'ERRMODE' === $k ? $errmode : $c->getAttribute(constant('PDO::ATTR_'.$k)); - if ($v && isset($v[$attr[$k]])) { - $attr[$k] = new ConstStub($v[$attr[$k]], $attr[$k]); - } - } catch (\Exception $e) { - } - } + try { + $attr[$k] = 'ERRMODE' === $k ? $errmode : $c->getAttribute(constant('PDO::ATTR_'.$k)); + if ($v && isset($v[$attr[$k]])) { + $attr[$k] = new ConstStub($v[$attr[$k]], $attr[$k]); + } + } catch (\Exception $e) { + } + } + if (isset($attr[$k = 'STATEMENT_CLASS'][1])) { + if ($attr[$k][1]) { + $attr[$k][1] = new ArgsStub($attr[$k][1], '__construct', $attr[$k][0]); + } + $attr[$k][0] = new ClassStub($attr[$k][0]); + } - $prefix = Caster::PREFIX_VIRTUAL; - $a += array( - $prefix.'inTransaction' => method_exists($c, 'inTransaction'), - $prefix.'errorInfo' => $c->errorInfo(), - $prefix.'attributes' => new EnumStub($attr), - ); + $prefix = Caster::PREFIX_VIRTUAL; + $a += array( + $prefix.'inTransaction' => method_exists($c, 'inTransaction'), + $prefix.'errorInfo' => $c->errorInfo(), + $prefix.'attributes' => new EnumStub($attr), + ); - if ($a[$prefix.'inTransaction']) { - $a[$prefix.'inTransaction'] = $c->inTransaction(); - } else { - unset($a[$prefix.'inTransaction']); - } + if ($a[$prefix.'inTransaction']) { + $a[$prefix.'inTransaction'] = $c->inTransaction(); + } else { + unset($a[$prefix.'inTransaction']); + } - if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) { - unset($a[$prefix.'errorInfo']); - } + if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) { + unset($a[$prefix.'errorInfo']); + } - $c->setAttribute(\PDO::ATTR_ERRMODE, $errmode); + $c->setAttribute(\PDO::ATTR_ERRMODE, $errmode); - return $a; - } + return $a; + } - public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, $isNested) - { - $prefix = Caster::PREFIX_VIRTUAL; - $a[$prefix.'errorInfo'] = $c->errorInfo(); + public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + $a[$prefix.'errorInfo'] = $c->errorInfo(); - if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) { - unset($a[$prefix.'errorInfo']); - } + if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) { + unset($a[$prefix.'errorInfo']); + } - return $a; - } + return $a; + } } diff --git a/htdocs/includes/symfony/var-dumper/Caster/RedisCaster.php b/htdocs/includes/symfony/var-dumper/Caster/RedisCaster.php new file mode 100644 index 00000000000..b0e567fcf96 --- /dev/null +++ b/htdocs/includes/symfony/var-dumper/Caster/RedisCaster.php @@ -0,0 +1,77 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts Redis class from ext-redis to array representation. + * + * @author Nicolas Grekas
+ */
+class RedisCaster
+{
+ private static $serializer = array(
+ \Redis::SERIALIZER_NONE => 'NONE',
+ \Redis::SERIALIZER_PHP => 'PHP',
+ 2 => 'IGBINARY', // Optional Redis::SERIALIZER_IGBINARY
+ );
+
+ public static function castRedis(\Redis $c, array $a, Stub $stub, $isNested)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
+
+ if (defined('HHVM_VERSION_ID')) {
+ if (isset($a[Caster::PREFIX_PROTECTED.'serializer'])) {
+ $ser = $a[Caster::PREFIX_PROTECTED.'serializer'];
+ $a[Caster::PREFIX_PROTECTED.'serializer'] = isset(self::$serializer[$ser]) ? new ConstStub(self::$serializer[$ser], $ser) : $ser;
+ }
+
+ return $a;
+ }
+
+ if (!$connected = $c->isConnected()) {
+ return $a + array(
+ $prefix.'isConnected' => $connected,
+ );
+ }
+
+ $ser = $c->getOption(\Redis::OPT_SERIALIZER);
+ $retry = defined('Redis::OPT_SCAN') ? $c->getOption(\Redis::OPT_SCAN) : 0;
+
+ return $a + array(
+ $prefix.'isConnected' => $connected,
+ $prefix.'host' => $c->getHost(),
+ $prefix.'port' => $c->getPort(),
+ $prefix.'auth' => $c->getAuth(),
+ $prefix.'dbNum' => $c->getDbNum(),
+ $prefix.'timeout' => $c->getTimeout(),
+ $prefix.'persistentId' => $c->getPersistentID(),
+ $prefix.'options' => new EnumStub(array(
+ 'READ_TIMEOUT' => $c->getOption(\Redis::OPT_READ_TIMEOUT),
+ 'SERIALIZER' => isset(self::$serializer[$ser]) ? new ConstStub(self::$serializer[$ser], $ser) : $ser,
+ 'PREFIX' => $c->getOption(\Redis::OPT_PREFIX),
+ 'SCAN' => new ConstStub($retry ? 'RETRY' : 'NORETRY', $retry),
+ )),
+ );
+ }
+
+ public static function castRedisArray(\RedisArray $c, array $a, Stub $stub, $isNested)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
+
+ return $a + array(
+ $prefix.'hosts' => $c->_hosts(),
+ $prefix.'function' => ClassStub::wrapCallable($c->_function()),
+ );
+ }
+}
diff --git a/htdocs/includes/symfony/var-dumper/Caster/ReflectionCaster.php b/htdocs/includes/symfony/var-dumper/Caster/ReflectionCaster.php
index 936e11982ee..6a53bd2b61b 100644
--- a/htdocs/includes/symfony/var-dumper/Caster/ReflectionCaster.php
+++ b/htdocs/includes/symfony/var-dumper/Caster/ReflectionCaster.php
@@ -20,291 +20,313 @@ use Symfony\Component\VarDumper\Cloner\Stub;
*/
class ReflectionCaster
{
- private static $extraMap = array(
- 'docComment' => 'getDocComment',
- 'extension' => 'getExtensionName',
- 'isDisabled' => 'isDisabled',
- 'isDeprecated' => 'isDeprecated',
- 'isInternal' => 'isInternal',
- 'isUserDefined' => 'isUserDefined',
- 'isGenerator' => 'isGenerator',
- 'isVariadic' => 'isVariadic',
- );
+ private static $extraMap = array(
+ 'docComment' => 'getDocComment',
+ 'extension' => 'getExtensionName',
+ 'isDisabled' => 'isDisabled',
+ 'isDeprecated' => 'isDeprecated',
+ 'isInternal' => 'isInternal',
+ 'isUserDefined' => 'isUserDefined',
+ 'isGenerator' => 'isGenerator',
+ 'isVariadic' => 'isVariadic',
+ );
- public static function castClosure(\Closure $c, array $a, Stub $stub, $isNested)
- {
- $prefix = Caster::PREFIX_VIRTUAL;
- $c = new \ReflectionFunction($c);
+ public static function castClosure(\Closure $c, array $a, Stub $stub, $isNested)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
+ $c = new \ReflectionFunction($c);
- $stub->class = 'Closure'; // HHVM generates unique class names for closures
- $a = static::castFunctionAbstract($c, $a, $stub, $isNested);
+ $stub->class = 'Closure'; // HHVM generates unique class names for closures
+ $a = static::castFunctionAbstract($c, $a, $stub, $isNested);
- if (isset($a[$prefix.'parameters'])) {
- foreach ($a[$prefix.'parameters']->value as &$v) {
- $param = $v;
- $v = new EnumStub(array());
- foreach (static::castParameter($param, array(), $stub, true) as $k => $param) {
- if ("\0" === $k[0]) {
- $v->value[substr($k, 3)] = $param;
- }
- }
- unset($v->value['position'], $v->value['isVariadic'], $v->value['byReference'], $v);
- }
- }
+ if (isset($a[$prefix.'parameters'])) {
+ foreach ($a[$prefix.'parameters']->value as &$v) {
+ $param = $v;
+ $v = new EnumStub(array());
+ foreach (static::castParameter($param, array(), $stub, true) as $k => $param) {
+ if ("\0" === $k[0]) {
+ $v->value[substr($k, 3)] = $param;
+ }
+ }
+ unset($v->value['position'], $v->value['isVariadic'], $v->value['byReference'], $v);
+ }
+ }
- if ($f = $c->getFileName()) {
- $a[$prefix.'file'] = $f;
- $a[$prefix.'line'] = $c->getStartLine().' to '.$c->getEndLine();
- }
+ if ($f = $c->getFileName()) {
+ $a[$prefix.'file'] = new LinkStub($f, $c->getStartLine());
+ $a[$prefix.'line'] = $c->getStartLine().' to '.$c->getEndLine();
+ }
- $prefix = Caster::PREFIX_DYNAMIC;
- unset($a['name'], $a[$prefix.'0'], $a[$prefix.'this'], $a[$prefix.'parameter'], $a[Caster::PREFIX_VIRTUAL.'extra']);
+ $prefix = Caster::PREFIX_DYNAMIC;
+ unset($a['name'], $a[$prefix.'this'], $a[$prefix.'parameter'], $a[Caster::PREFIX_VIRTUAL.'extra']);
- return $a;
- }
+ return $a;
+ }
- public static function castGenerator(\Generator $c, array $a, Stub $stub, $isNested)
- {
- return class_exists('ReflectionGenerator', false) ? self::castReflectionGenerator(new \ReflectionGenerator($c), $a, $stub, $isNested) : $a;
- }
+ public static function castGenerator(\Generator $c, array $a, Stub $stub, $isNested)
+ {
+ if (!class_exists('ReflectionGenerator', false)) {
+ return $a;
+ }
- public static function castType(\ReflectionType $c, array $a, Stub $stub, $isNested)
- {
- $prefix = Caster::PREFIX_VIRTUAL;
+ // Cannot create ReflectionGenerator based on a terminated Generator
+ try {
+ $reflectionGenerator = new \ReflectionGenerator($c);
+ } catch (\Exception $e) {
+ $a[Caster::PREFIX_VIRTUAL.'closed'] = true;
- $a += array(
- $prefix.'type' => $c->__toString(),
- $prefix.'allowsNull' => $c->allowsNull(),
- $prefix.'isBuiltin' => $c->isBuiltin(),
- );
+ return $a;
+ }
- return $a;
- }
+ return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested);
+ }
- public static function castReflectionGenerator(\ReflectionGenerator $c, array $a, Stub $stub, $isNested)
- {
- $prefix = Caster::PREFIX_VIRTUAL;
+ public static function castType(\ReflectionType $c, array $a, Stub $stub, $isNested)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
- if ($c->getThis()) {
- $a[$prefix.'this'] = new CutStub($c->getThis());
- }
- $x = $c->getFunction();
- $frame = array(
- 'class' => isset($x->class) ? $x->class : null,
- 'type' => isset($x->class) ? ($x->isStatic() ? '::' : '->') : null,
- 'function' => $x->name,
- 'file' => $c->getExecutingFile(),
- 'line' => $c->getExecutingLine(),
- );
- if ($trace = $c->getTrace(DEBUG_BACKTRACE_IGNORE_ARGS)) {
- $x = new \ReflectionGenerator($c->getExecutingGenerator());
- array_unshift($trace, array(
- 'function' => 'yield',
- 'file' => $x->getExecutingFile(),
- 'line' => $x->getExecutingLine() - 1,
- ));
- $trace[] = $frame;
- $a[$prefix.'trace'] = new TraceStub($trace, false, 0, -1, -1);
- } else {
- $x = new FrameStub($frame, false, true);
- $x = ExceptionCaster::castFrameStub($x, array(), $x, true);
- $a[$prefix.'executing'] = new EnumStub(array(
- $frame['class'].$frame['type'].$frame['function'].'()' => $x[$prefix.'src'],
- ));
- }
+ $a += array(
+ $prefix.'name' => $c instanceof \ReflectionNamedType ? $c->getName() : $c->__toString(),
+ $prefix.'allowsNull' => $c->allowsNull(),
+ $prefix.'isBuiltin' => $c->isBuiltin(),
+ );
- return $a;
- }
+ return $a;
+ }
- public static function castClass(\ReflectionClass $c, array $a, Stub $stub, $isNested, $filter = 0)
- {
- $prefix = Caster::PREFIX_VIRTUAL;
+ public static function castReflectionGenerator(\ReflectionGenerator $c, array $a, Stub $stub, $isNested)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
- if ($n = \Reflection::getModifierNames($c->getModifiers())) {
- $a[$prefix.'modifiers'] = implode(' ', $n);
- }
+ if ($c->getThis()) {
+ $a[$prefix.'this'] = new CutStub($c->getThis());
+ }
+ $function = $c->getFunction();
+ $frame = array(
+ 'class' => isset($function->class) ? $function->class : null,
+ 'type' => isset($function->class) ? ($function->isStatic() ? '::' : '->') : null,
+ 'function' => $function->name,
+ 'file' => $c->getExecutingFile(),
+ 'line' => $c->getExecutingLine(),
+ );
+ if ($trace = $c->getTrace(DEBUG_BACKTRACE_IGNORE_ARGS)) {
+ $function = new \ReflectionGenerator($c->getExecutingGenerator());
+ array_unshift($trace, array(
+ 'function' => 'yield',
+ 'file' => $function->getExecutingFile(),
+ 'line' => $function->getExecutingLine() - 1,
+ ));
+ $trace[] = $frame;
+ $a[$prefix.'trace'] = new TraceStub($trace, false, 0, -1, -1);
+ } else {
+ $function = new FrameStub($frame, false, true);
+ $function = ExceptionCaster::castFrameStub($function, array(), $function, true);
+ $a[$prefix.'executing'] = new EnumStub(array(
+ $frame['class'].$frame['type'].$frame['function'].'()' => $function[$prefix.'src'],
+ ));
+ }
- self::addMap($a, $c, array(
- 'extends' => 'getParentClass',
- 'implements' => 'getInterfaceNames',
- 'constants' => 'getConstants',
- ));
+ $a[Caster::PREFIX_VIRTUAL.'closed'] = false;
- foreach ($c->getProperties() as $n) {
- $a[$prefix.'properties'][$n->name] = $n;
- }
+ return $a;
+ }
- foreach ($c->getMethods() as $n) {
- $a[$prefix.'methods'][$n->name] = $n;
- }
+ public static function castClass(\ReflectionClass $c, array $a, Stub $stub, $isNested, $filter = 0)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
- if (!($filter & Caster::EXCLUDE_VERBOSE) && !$isNested) {
- self::addExtra($a, $c);
- }
+ if ($n = \Reflection::getModifierNames($c->getModifiers())) {
+ $a[$prefix.'modifiers'] = implode(' ', $n);
+ }
- return $a;
- }
+ self::addMap($a, $c, array(
+ 'extends' => 'getParentClass',
+ 'implements' => 'getInterfaceNames',
+ 'constants' => 'getConstants',
+ ));
- public static function castFunctionAbstract(\ReflectionFunctionAbstract $c, array $a, Stub $stub, $isNested, $filter = 0)
- {
- $prefix = Caster::PREFIX_VIRTUAL;
+ foreach ($c->getProperties() as $n) {
+ $a[$prefix.'properties'][$n->name] = $n;
+ }
- self::addMap($a, $c, array(
- 'returnsReference' => 'returnsReference',
- 'returnType' => 'getReturnType',
- 'class' => 'getClosureScopeClass',
- 'this' => 'getClosureThis',
- ));
+ foreach ($c->getMethods() as $n) {
+ $a[$prefix.'methods'][$n->name] = $n;
+ }
- if (isset($a[$prefix.'returnType'])) {
- $a[$prefix.'returnType'] = (string) $a[$prefix.'returnType'];
- }
- if (isset($a[$prefix.'this'])) {
- $a[$prefix.'this'] = new CutStub($a[$prefix.'this']);
- }
+ if (!($filter & Caster::EXCLUDE_VERBOSE) && !$isNested) {
+ self::addExtra($a, $c);
+ }
- foreach ($c->getParameters() as $v) {
- $k = '$'.$v->name;
- if ($v->isPassedByReference()) {
- $k = '&'.$k;
- }
- if (method_exists($v, 'isVariadic') && $v->isVariadic()) {
- $k = '...'.$k;
- }
- $a[$prefix.'parameters'][$k] = $v;
- }
- if (isset($a[$prefix.'parameters'])) {
- $a[$prefix.'parameters'] = new EnumStub($a[$prefix.'parameters']);
- }
+ return $a;
+ }
- if ($v = $c->getStaticVariables()) {
- foreach ($v as $k => &$v) {
- $a[$prefix.'use']['$'.$k] = &$v;
- }
- unset($v);
- $a[$prefix.'use'] = new EnumStub($a[$prefix.'use']);
- }
+ public static function castFunctionAbstract(\ReflectionFunctionAbstract $c, array $a, Stub $stub, $isNested, $filter = 0)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
- if (!($filter & Caster::EXCLUDE_VERBOSE) && !$isNested) {
- self::addExtra($a, $c);
- }
+ self::addMap($a, $c, array(
+ 'returnsReference' => 'returnsReference',
+ 'returnType' => 'getReturnType',
+ 'class' => 'getClosureScopeClass',
+ 'this' => 'getClosureThis',
+ ));
- // Added by HHVM
- unset($a[Caster::PREFIX_DYNAMIC.'static']);
+ if (isset($a[$prefix.'returnType'])) {
+ $v = $a[$prefix.'returnType'];
+ $v = $v instanceof \ReflectionNamedType ? $v->getName() : $v->__toString();
+ $a[$prefix.'returnType'] = new ClassStub($a[$prefix.'returnType']->allowsNull() ? '?'.$v : $v, array(class_exists($v, false) || interface_exists($v, false) || trait_exists($v, false) ? $v : '', ''));
+ }
+ if (isset($a[$prefix.'class'])) {
+ $a[$prefix.'class'] = new ClassStub($a[$prefix.'class']);
+ }
+ if (isset($a[$prefix.'this'])) {
+ $a[$prefix.'this'] = new CutStub($a[$prefix.'this']);
+ }
- return $a;
- }
+ foreach ($c->getParameters() as $v) {
+ $k = '$'.$v->name;
+ if (method_exists($v, 'isVariadic') && $v->isVariadic()) {
+ $k = '...'.$k;
+ }
+ if ($v->isPassedByReference()) {
+ $k = '&'.$k;
+ }
+ $a[$prefix.'parameters'][$k] = $v;
+ }
+ if (isset($a[$prefix.'parameters'])) {
+ $a[$prefix.'parameters'] = new EnumStub($a[$prefix.'parameters']);
+ }
- public static function castMethod(\ReflectionMethod $c, array $a, Stub $stub, $isNested)
- {
- $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers()));
+ if ($v = $c->getStaticVariables()) {
+ foreach ($v as $k => &$v) {
+ $a[$prefix.'use']['$'.$k] = &$v;
+ }
+ unset($v);
+ $a[$prefix.'use'] = new EnumStub($a[$prefix.'use']);
+ }
- return $a;
- }
+ if (!($filter & Caster::EXCLUDE_VERBOSE) && !$isNested) {
+ self::addExtra($a, $c);
+ }
- public static function castParameter(\ReflectionParameter $c, array $a, Stub $stub, $isNested)
- {
- $prefix = Caster::PREFIX_VIRTUAL;
+ // Added by HHVM
+ unset($a[Caster::PREFIX_DYNAMIC.'static']);
- // Added by HHVM
- unset($a['info']);
+ return $a;
+ }
- self::addMap($a, $c, array(
- 'position' => 'getPosition',
- 'isVariadic' => 'isVariadic',
- 'byReference' => 'isPassedByReference',
- ));
+ public static function castMethod(\ReflectionMethod $c, array $a, Stub $stub, $isNested)
+ {
+ $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers()));
- try {
- if (method_exists($c, 'hasType')) {
- if ($c->hasType()) {
- $a[$prefix.'typeHint'] = $c->getType()->__toString();
- }
- } elseif ($c->isArray()) {
- $a[$prefix.'typeHint'] = 'array';
- } elseif (method_exists($c, 'isCallable') && $c->isCallable()) {
- $a[$prefix.'typeHint'] = 'callable';
- } elseif ($v = $c->getClass()) {
- $a[$prefix.'typeHint'] = $v->name;
- }
- } catch (\ReflectionException $e) {
- if (preg_match('/^Class ([^ ]++) does not exist$/', $e->getMessage(), $m)) {
- $a[$prefix.'typeHint'] = $m[1];
- }
- }
+ return $a;
+ }
- try {
- $a[$prefix.'default'] = $v = $c->getDefaultValue();
- if (method_exists($c, 'isDefaultValueConstant') && $c->isDefaultValueConstant()) {
- $a[$prefix.'default'] = new ConstStub($c->getDefaultValueConstantName(), $v);
- }
- } catch (\ReflectionException $e) {
- if (isset($a[$prefix.'typeHint']) && $c->allowsNull()) {
- $a[$prefix.'default'] = null;
- }
- }
+ public static function castParameter(\ReflectionParameter $c, array $a, Stub $stub, $isNested)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
- return $a;
- }
+ // Added by HHVM
+ unset($a['info']);
- public static function castProperty(\ReflectionProperty $c, array $a, Stub $stub, $isNested)
- {
- $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers()));
- self::addExtra($a, $c);
+ self::addMap($a, $c, array(
+ 'position' => 'getPosition',
+ 'isVariadic' => 'isVariadic',
+ 'byReference' => 'isPassedByReference',
+ 'allowsNull' => 'allowsNull',
+ ));
- return $a;
- }
+ if (method_exists($c, 'getType')) {
+ if ($v = $c->getType()) {
+ $a[$prefix.'typeHint'] = $v instanceof \ReflectionNamedType ? $v->getName() : $v->__toString();
+ }
+ } elseif (preg_match('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/', $c, $v)) {
+ $a[$prefix.'typeHint'] = $v[1];
+ }
- public static function castExtension(\ReflectionExtension $c, array $a, Stub $stub, $isNested)
- {
- self::addMap($a, $c, array(
- 'version' => 'getVersion',
- 'dependencies' => 'getDependencies',
- 'iniEntries' => 'getIniEntries',
- 'isPersistent' => 'isPersistent',
- 'isTemporary' => 'isTemporary',
- 'constants' => 'getConstants',
- 'functions' => 'getFunctions',
- 'classes' => 'getClasses',
- ));
+ if (isset($a[$prefix.'typeHint'])) {
+ $v = $a[$prefix.'typeHint'];
+ $a[$prefix.'typeHint'] = new ClassStub($v, array(class_exists($v, false) || interface_exists($v, false) || trait_exists($v, false) ? $v : '', ''));
+ } else {
+ unset($a[$prefix.'allowsNull']);
+ }
- return $a;
- }
+ try {
+ $a[$prefix.'default'] = $v = $c->getDefaultValue();
+ if (method_exists($c, 'isDefaultValueConstant') && $c->isDefaultValueConstant()) {
+ $a[$prefix.'default'] = new ConstStub($c->getDefaultValueConstantName(), $v);
+ }
+ if (null === $v) {
+ unset($a[$prefix.'allowsNull']);
+ }
+ } catch (\ReflectionException $e) {
+ if (isset($a[$prefix.'typeHint']) && $c->allowsNull() && !class_exists('ReflectionNamedType', false)) {
+ $a[$prefix.'default'] = null;
+ unset($a[$prefix.'allowsNull']);
+ }
+ }
- public static function castZendExtension(\ReflectionZendExtension $c, array $a, Stub $stub, $isNested)
- {
- self::addMap($a, $c, array(
- 'version' => 'getVersion',
- 'author' => 'getAuthor',
- 'copyright' => 'getCopyright',
- 'url' => 'getURL',
- ));
+ return $a;
+ }
- return $a;
- }
+ public static function castProperty(\ReflectionProperty $c, array $a, Stub $stub, $isNested)
+ {
+ $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers()));
+ self::addExtra($a, $c);
- private static function addExtra(&$a, \Reflector $c)
- {
- $x = isset($a[Caster::PREFIX_VIRTUAL.'extra']) ? $a[Caster::PREFIX_VIRTUAL.'extra']->value : array();
+ return $a;
+ }
- if (method_exists($c, 'getFileName') && $m = $c->getFileName()) {
- $x['file'] = $m;
- $x['line'] = $c->getStartLine().' to '.$c->getEndLine();
- }
+ public static function castExtension(\ReflectionExtension $c, array $a, Stub $stub, $isNested)
+ {
+ self::addMap($a, $c, array(
+ 'version' => 'getVersion',
+ 'dependencies' => 'getDependencies',
+ 'iniEntries' => 'getIniEntries',
+ 'isPersistent' => 'isPersistent',
+ 'isTemporary' => 'isTemporary',
+ 'constants' => 'getConstants',
+ 'functions' => 'getFunctions',
+ 'classes' => 'getClasses',
+ ));
- self::addMap($x, $c, self::$extraMap, '');
+ return $a;
+ }
- if ($x) {
- $a[Caster::PREFIX_VIRTUAL.'extra'] = new EnumStub($x);
- }
- }
+ public static function castZendExtension(\ReflectionZendExtension $c, array $a, Stub $stub, $isNested)
+ {
+ self::addMap($a, $c, array(
+ 'version' => 'getVersion',
+ 'author' => 'getAuthor',
+ 'copyright' => 'getCopyright',
+ 'url' => 'getURL',
+ ));
- private static function addMap(&$a, \Reflector $c, $map, $prefix = Caster::PREFIX_VIRTUAL)
- {
- foreach ($map as $k => $m) {
- if (method_exists($c, $m) && false !== ($m = $c->$m()) && null !== $m) {
- $a[$prefix.$k] = $m instanceof \Reflector ? $m->name : $m;
- }
- }
- }
+ return $a;
+ }
+
+ private static function addExtra(&$a, \Reflector $c)
+ {
+ $x = isset($a[Caster::PREFIX_VIRTUAL.'extra']) ? $a[Caster::PREFIX_VIRTUAL.'extra']->value : array();
+
+ if (method_exists($c, 'getFileName') && $m = $c->getFileName()) {
+ $x['file'] = new LinkStub($m, $c->getStartLine());
+ $x['line'] = $c->getStartLine().' to '.$c->getEndLine();
+ }
+
+ self::addMap($x, $c, self::$extraMap, '');
+
+ if ($x) {
+ $a[Caster::PREFIX_VIRTUAL.'extra'] = new EnumStub($x);
+ }
+ }
+
+ private static function addMap(&$a, \Reflector $c, $map, $prefix = Caster::PREFIX_VIRTUAL)
+ {
+ foreach ($map as $k => $m) {
+ if (method_exists($c, $m) && false !== ($m = $c->$m()) && null !== $m) {
+ $a[$prefix.$k] = $m instanceof \Reflector ? $m->name : $m;
+ }
+ }
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Caster/ResourceCaster.php b/htdocs/includes/symfony/var-dumper/Caster/ResourceCaster.php
index 903641f69c6..0b189d4d9b5 100644
--- a/htdocs/includes/symfony/var-dumper/Caster/ResourceCaster.php
+++ b/htdocs/includes/symfony/var-dumper/Caster/ResourceCaster.php
@@ -20,48 +20,53 @@ use Symfony\Component\VarDumper\Cloner\Stub;
*/
class ResourceCaster
{
- public static function castCurl($h, array $a, Stub $stub, $isNested)
- {
- return curl_getinfo($h);
- }
+ public static function castCurl($h, array $a, Stub $stub, $isNested)
+ {
+ return curl_getinfo($h);
+ }
- public static function castDba($dba, array $a, Stub $stub, $isNested)
- {
- $list = dba_list();
- $a['file'] = $list[(int) $dba];
+ public static function castDba($dba, array $a, Stub $stub, $isNested)
+ {
+ $list = dba_list();
+ $a['file'] = $list[(int) $dba];
- return $a;
- }
+ return $a;
+ }
- public static function castProcess($process, array $a, Stub $stub, $isNested)
- {
- return proc_get_status($process);
- }
+ public static function castProcess($process, array $a, Stub $stub, $isNested)
+ {
+ return proc_get_status($process);
+ }
- public static function castStream($stream, array $a, Stub $stub, $isNested)
- {
- return stream_get_meta_data($stream) + static::castStreamContext($stream, $a, $stub, $isNested);
- }
+ public static function castStream($stream, array $a, Stub $stub, $isNested)
+ {
+ $a = stream_get_meta_data($stream) + static::castStreamContext($stream, $a, $stub, $isNested);
+ if (isset($a['uri'])) {
+ $a['uri'] = new LinkStub($a['uri']);
+ }
- public static function castStreamContext($stream, array $a, Stub $stub, $isNested)
- {
- return stream_context_get_params($stream);
- }
+ return $a;
+ }
- public static function castGd($gd, array $a, Stub $stub, $isNested)
- {
- $a['size'] = imagesx($gd).'x'.imagesy($gd);
- $a['trueColor'] = imageistruecolor($gd);
+ public static function castStreamContext($stream, array $a, Stub $stub, $isNested)
+ {
+ return @stream_context_get_params($stream) ?: $a;
+ }
- return $a;
- }
+ public static function castGd($gd, array $a, Stub $stub, $isNested)
+ {
+ $a['size'] = imagesx($gd).'x'.imagesy($gd);
+ $a['trueColor'] = imageistruecolor($gd);
- public static function castMysqlLink($h, array $a, Stub $stub, $isNested)
- {
- $a['host'] = mysql_get_host_info($h);
- $a['protocol'] = mysql_get_proto_info($h);
- $a['server'] = mysql_get_server_info($h);
+ return $a;
+ }
- return $a;
- }
+ public static function castMysqlLink($h, array $a, Stub $stub, $isNested)
+ {
+ $a['host'] = mysql_get_host_info($h);
+ $a['protocol'] = mysql_get_proto_info($h);
+ $a['server'] = mysql_get_server_info($h);
+
+ return $a;
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Caster/SplCaster.php b/htdocs/includes/symfony/var-dumper/Caster/SplCaster.php
index 97f21463821..176e7f2ae48 100644
--- a/htdocs/includes/symfony/var-dumper/Caster/SplCaster.php
+++ b/htdocs/includes/symfony/var-dumper/Caster/SplCaster.php
@@ -20,184 +20,188 @@ use Symfony\Component\VarDumper\Cloner\Stub;
*/
class SplCaster
{
- private static $splFileObjectFlags = array(
- \SplFileObject::DROP_NEW_LINE => 'DROP_NEW_LINE',
- \SplFileObject::READ_AHEAD => 'READ_AHEAD',
- \SplFileObject::SKIP_EMPTY => 'SKIP_EMPTY',
- \SplFileObject::READ_CSV => 'READ_CSV',
- );
+ private static $splFileObjectFlags = array(
+ \SplFileObject::DROP_NEW_LINE => 'DROP_NEW_LINE',
+ \SplFileObject::READ_AHEAD => 'READ_AHEAD',
+ \SplFileObject::SKIP_EMPTY => 'SKIP_EMPTY',
+ \SplFileObject::READ_CSV => 'READ_CSV',
+ );
- public static function castArrayObject(\ArrayObject $c, array $a, Stub $stub, $isNested)
- {
- $prefix = Caster::PREFIX_VIRTUAL;
- $class = $stub->class;
- $flags = $c->getFlags();
+ public static function castArrayObject(\ArrayObject $c, array $a, Stub $stub, $isNested)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
+ $class = $stub->class;
+ $flags = $c->getFlags();
- $b = array(
- $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST),
- $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS),
- $prefix.'iteratorClass' => $c->getIteratorClass(),
- $prefix.'storage' => $c->getArrayCopy(),
- );
+ $b = array(
+ $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST),
+ $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS),
+ $prefix.'iteratorClass' => new ClassStub($c->getIteratorClass()),
+ $prefix.'storage' => $c->getArrayCopy(),
+ );
- if ($class === 'ArrayObject') {
- $a = $b;
- } else {
- if (!($flags & \ArrayObject::STD_PROP_LIST)) {
- $c->setFlags(\ArrayObject::STD_PROP_LIST);
- $a = Caster::castObject($c, new \ReflectionClass($class));
- $c->setFlags($flags);
- }
+ if ($class === 'ArrayObject') {
+ $a = $b;
+ } else {
+ if (!($flags & \ArrayObject::STD_PROP_LIST)) {
+ $c->setFlags(\ArrayObject::STD_PROP_LIST);
+ $a = Caster::castObject($c, new \ReflectionClass($class));
+ $c->setFlags($flags);
+ }
- $a += $b;
- }
+ $a += $b;
+ }
- return $a;
- }
+ return $a;
+ }
- public static function castHeap(\Iterator $c, array $a, Stub $stub, $isNested)
- {
- $a += array(
- Caster::PREFIX_VIRTUAL.'heap' => iterator_to_array(clone $c),
- );
+ public static function castHeap(\Iterator $c, array $a, Stub $stub, $isNested)
+ {
+ $a += array(
+ Caster::PREFIX_VIRTUAL.'heap' => iterator_to_array(clone $c),
+ );
- return $a;
- }
+ return $a;
+ }
- public static function castDoublyLinkedList(\SplDoublyLinkedList $c, array $a, Stub $stub, $isNested)
- {
- $prefix = Caster::PREFIX_VIRTUAL;
- $mode = $c->getIteratorMode();
- $c->setIteratorMode(\SplDoublyLinkedList::IT_MODE_KEEP | $mode & ~\SplDoublyLinkedList::IT_MODE_DELETE);
+ public static function castDoublyLinkedList(\SplDoublyLinkedList $c, array $a, Stub $stub, $isNested)
+ {
+ $prefix = Caster::PREFIX_VIRTUAL;
+ $mode = $c->getIteratorMode();
+ $c->setIteratorMode(\SplDoublyLinkedList::IT_MODE_KEEP | $mode & ~\SplDoublyLinkedList::IT_MODE_DELETE);
- $a += array(
- $prefix.'mode' => new ConstStub((($mode & \SplDoublyLinkedList::IT_MODE_LIFO) ? 'IT_MODE_LIFO' : 'IT_MODE_FIFO').' | '.(($mode & \SplDoublyLinkedList::IT_MODE_KEEP) ? 'IT_MODE_KEEP' : 'IT_MODE_DELETE'), $mode),
- $prefix.'dllist' => iterator_to_array($c),
- );
- $c->setIteratorMode($mode);
+ $a += array(
+ $prefix.'mode' => new ConstStub((($mode & \SplDoublyLinkedList::IT_MODE_LIFO) ? 'IT_MODE_LIFO' : 'IT_MODE_FIFO').' | '.(($mode & \SplDoublyLinkedList::IT_MODE_DELETE) ? 'IT_MODE_DELETE' : 'IT_MODE_KEEP'), $mode),
+ $prefix.'dllist' => iterator_to_array($c),
+ );
+ $c->setIteratorMode($mode);
- return $a;
- }
+ return $a;
+ }
- public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, $isNested)
- {
- static $map = array(
- 'path' => 'getPath',
- 'filename' => 'getFilename',
- 'basename' => 'getBasename',
- 'pathname' => 'getPathname',
- 'extension' => 'getExtension',
- 'realPath' => 'getRealPath',
- 'aTime' => 'getATime',
- 'mTime' => 'getMTime',
- 'cTime' => 'getCTime',
- 'inode' => 'getInode',
- 'size' => 'getSize',
- 'perms' => 'getPerms',
- 'owner' => 'getOwner',
- 'group' => 'getGroup',
- 'type' => 'getType',
- 'writable' => 'isWritable',
- 'readable' => 'isReadable',
- 'executable' => 'isExecutable',
- 'file' => 'isFile',
- 'dir' => 'isDir',
- 'link' => 'isLink',
- 'linkTarget' => 'getLinkTarget',
- );
+ public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, $isNested)
+ {
+ static $map = array(
+ 'path' => 'getPath',
+ 'filename' => 'getFilename',
+ 'basename' => 'getBasename',
+ 'pathname' => 'getPathname',
+ 'extension' => 'getExtension',
+ 'realPath' => 'getRealPath',
+ 'aTime' => 'getATime',
+ 'mTime' => 'getMTime',
+ 'cTime' => 'getCTime',
+ 'inode' => 'getInode',
+ 'size' => 'getSize',
+ 'perms' => 'getPerms',
+ 'owner' => 'getOwner',
+ 'group' => 'getGroup',
+ 'type' => 'getType',
+ 'writable' => 'isWritable',
+ 'readable' => 'isReadable',
+ 'executable' => 'isExecutable',
+ 'file' => 'isFile',
+ 'dir' => 'isDir',
+ 'link' => 'isLink',
+ 'linkTarget' => 'getLinkTarget',
+ );
- $prefix = Caster::PREFIX_VIRTUAL;
+ $prefix = Caster::PREFIX_VIRTUAL;
- foreach ($map as $key => $accessor) {
- try {
- $a[$prefix.$key] = $c->$accessor();
- } catch (\Exception $e) {
- }
- }
+ foreach ($map as $key => $accessor) {
+ try {
+ $a[$prefix.$key] = $c->$accessor();
+ } catch (\Exception $e) {
+ }
+ }
- if (isset($a[$prefix.'perms'])) {
- $a[$prefix.'perms'] = new ConstStub(sprintf('0%o', $a[$prefix.'perms']), $a[$prefix.'perms']);
- }
+ if (isset($a[$prefix.'realPath'])) {
+ $a[$prefix.'realPath'] = new LinkStub($a[$prefix.'realPath']);
+ }
- static $mapDate = array('aTime', 'mTime', 'cTime');
- foreach ($mapDate as $key) {
- if (isset($a[$prefix.$key])) {
- $a[$prefix.$key] = new ConstStub(date('Y-m-d H:i:s', $a[$prefix.$key]), $a[$prefix.$key]);
- }
- }
+ if (isset($a[$prefix.'perms'])) {
+ $a[$prefix.'perms'] = new ConstStub(sprintf('0%o', $a[$prefix.'perms']), $a[$prefix.'perms']);
+ }
- return $a;
- }
+ static $mapDate = array('aTime', 'mTime', 'cTime');
+ foreach ($mapDate as $key) {
+ if (isset($a[$prefix.$key])) {
+ $a[$prefix.$key] = new ConstStub(date('Y-m-d H:i:s', $a[$prefix.$key]), $a[$prefix.$key]);
+ }
+ }
- public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, $isNested)
- {
- static $map = array(
- 'csvControl' => 'getCsvControl',
- 'flags' => 'getFlags',
- 'maxLineLen' => 'getMaxLineLen',
- 'fstat' => 'fstat',
- 'eof' => 'eof',
- 'key' => 'key',
- );
+ return $a;
+ }
- $prefix = Caster::PREFIX_VIRTUAL;
+ public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, $isNested)
+ {
+ static $map = array(
+ 'csvControl' => 'getCsvControl',
+ 'flags' => 'getFlags',
+ 'maxLineLen' => 'getMaxLineLen',
+ 'fstat' => 'fstat',
+ 'eof' => 'eof',
+ 'key' => 'key',
+ );
- foreach ($map as $key => $accessor) {
- try {
- $a[$prefix.$key] = $c->$accessor();
- } catch (\Exception $e) {
- }
- }
+ $prefix = Caster::PREFIX_VIRTUAL;
- if (isset($a[$prefix.'flags'])) {
- $flagsArray = array();
- foreach (self::$splFileObjectFlags as $value => $name) {
- if ($a[$prefix.'flags'] & $value) {
- $flagsArray[] = $name;
- }
- }
- $a[$prefix.'flags'] = new ConstStub(implode('|', $flagsArray), $a[$prefix.'flags']);
- }
+ foreach ($map as $key => $accessor) {
+ try {
+ $a[$prefix.$key] = $c->$accessor();
+ } catch (\Exception $e) {
+ }
+ }
- if (isset($a[$prefix.'fstat'])) {
- $a[$prefix.'fstat'] = new CutArrayStub($a[$prefix.'fstat'], array('dev', 'ino', 'nlink', 'rdev', 'blksize', 'blocks'));
- }
+ if (isset($a[$prefix.'flags'])) {
+ $flagsArray = array();
+ foreach (self::$splFileObjectFlags as $value => $name) {
+ if ($a[$prefix.'flags'] & $value) {
+ $flagsArray[] = $name;
+ }
+ }
+ $a[$prefix.'flags'] = new ConstStub(implode('|', $flagsArray), $a[$prefix.'flags']);
+ }
- return $a;
- }
+ if (isset($a[$prefix.'fstat'])) {
+ $a[$prefix.'fstat'] = new CutArrayStub($a[$prefix.'fstat'], array('dev', 'ino', 'nlink', 'rdev', 'blksize', 'blocks'));
+ }
- public static function castFixedArray(\SplFixedArray $c, array $a, Stub $stub, $isNested)
- {
- $a += array(
- Caster::PREFIX_VIRTUAL.'storage' => $c->toArray(),
- );
+ return $a;
+ }
- return $a;
- }
+ public static function castFixedArray(\SplFixedArray $c, array $a, Stub $stub, $isNested)
+ {
+ $a += array(
+ Caster::PREFIX_VIRTUAL.'storage' => $c->toArray(),
+ );
- public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $stub, $isNested)
- {
- $storage = array();
- unset($a[Caster::PREFIX_DYNAMIC."\0gcdata"]); // Don't hit https://bugs.php.net/65967
+ return $a;
+ }
- foreach ($c as $obj) {
- $storage[spl_object_hash($obj)] = array(
- 'object' => $obj,
- 'info' => $c->getInfo(),
- );
- }
+ public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $stub, $isNested)
+ {
+ $storage = array();
+ unset($a[Caster::PREFIX_DYNAMIC."\0gcdata"]); // Don't hit https://bugs.php.net/65967
- $a += array(
- Caster::PREFIX_VIRTUAL.'storage' => $storage,
- );
+ foreach (clone $c as $obj) {
+ $storage[spl_object_hash($obj)] = array(
+ 'object' => $obj,
+ 'info' => $c->getInfo(),
+ );
+ }
- return $a;
- }
+ $a += array(
+ Caster::PREFIX_VIRTUAL.'storage' => $storage,
+ );
- public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub, $isNested)
- {
- $a[Caster::PREFIX_VIRTUAL.'innerIterator'] = $c->getInnerIterator();
+ return $a;
+ }
- return $a;
- }
+ public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub, $isNested)
+ {
+ $a[Caster::PREFIX_VIRTUAL.'innerIterator'] = $c->getInnerIterator();
+
+ return $a;
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Caster/StubCaster.php b/htdocs/includes/symfony/var-dumper/Caster/StubCaster.php
index ebad5ba9844..83fde9eba3c 100644
--- a/htdocs/includes/symfony/var-dumper/Caster/StubCaster.php
+++ b/htdocs/includes/symfony/var-dumper/Caster/StubCaster.php
@@ -20,53 +20,63 @@ use Symfony\Component\VarDumper\Cloner\Stub;
*/
class StubCaster
{
- public static function castStub(Stub $c, array $a, Stub $stub, $isNested)
- {
- if ($isNested) {
- $stub->type = $c->type;
- $stub->class = $c->class;
- $stub->value = $c->value;
- $stub->handle = $c->handle;
- $stub->cut = $c->cut;
+ public static function castStub(Stub $c, array $a, Stub $stub, $isNested)
+ {
+ if ($isNested) {
+ $stub->type = $c->type;
+ $stub->class = $c->class;
+ $stub->value = $c->value;
+ $stub->handle = $c->handle;
+ $stub->cut = $c->cut;
+ $stub->attr = $c->attr;
- return array();
- }
- }
+ if (Stub::TYPE_REF === $c->type && !$c->class && is_string($c->value) && !preg_match('//u', $c->value)) {
+ $stub->type = Stub::TYPE_STRING;
+ $stub->class = Stub::STRING_BINARY;
+ }
- public static function castCutArray(CutArrayStub $c, array $a, Stub $stub, $isNested)
- {
- return $isNested ? $c->preservedSubset : $a;
- }
+ $a = array();
+ }
- public static function cutInternals($obj, array $a, Stub $stub, $isNested)
- {
- if ($isNested) {
- $stub->cut += count($a);
+ return $a;
+ }
- return array();
- }
+ public static function castCutArray(CutArrayStub $c, array $a, Stub $stub, $isNested)
+ {
+ return $isNested ? $c->preservedSubset : $a;
+ }
- return $a;
- }
+ public static function cutInternals($obj, array $a, Stub $stub, $isNested)
+ {
+ if ($isNested) {
+ $stub->cut += count($a);
- public static function castEnum(EnumStub $c, array $a, Stub $stub, $isNested)
- {
- if ($isNested) {
- $stub->class = '';
- $stub->handle = 0;
- $stub->value = null;
+ return array();
+ }
- $a = array();
+ return $a;
+ }
- if ($c->value) {
- foreach (array_keys($c->value) as $k) {
- $keys[] = Caster::PREFIX_VIRTUAL.$k;
- }
- // Preserve references with array_combine()
- $a = array_combine($keys, $c->value);
- }
- }
+ public static function castEnum(EnumStub $c, array $a, Stub $stub, $isNested)
+ {
+ if ($isNested) {
+ $stub->class = $c->dumpKeys ? '' : null;
+ $stub->handle = 0;
+ $stub->value = null;
+ $stub->cut = $c->cut;
+ $stub->attr = $c->attr;
- return $a;
- }
+ $a = array();
+
+ if ($c->value) {
+ foreach (array_keys($c->value) as $k) {
+ $keys[] = !isset($k[0]) || "\0" !== $k[0] ? Caster::PREFIX_VIRTUAL.$k : $k;
+ }
+ // Preserve references with array_combine()
+ $a = array_combine($keys, $c->value);
+ }
+ }
+
+ return $a;
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Caster/XmlReaderCaster.php b/htdocs/includes/symfony/var-dumper/Caster/XmlReaderCaster.php
new file mode 100644
index 00000000000..bbd4645c8e5
--- /dev/null
+++ b/htdocs/includes/symfony/var-dumper/Caster/XmlReaderCaster.php
@@ -0,0 +1,77 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\VarDumper\Caster;
+
+use Symfony\Component\VarDumper\Cloner\Stub;
+
+/**
+ * Casts XmlReader class to array representation.
+ *
+ * @author Baptiste Clavié
*/
class Data
{
- private $data;
- private $maxDepth = 20;
- private $maxItemsPerDepth = -1;
- private $useRefHandles = -1;
+ private $data;
+ private $position = 0;
+ private $key = 0;
+ private $maxDepth = 20;
+ private $maxItemsPerDepth = -1;
+ private $useRefHandles = -1;
- /**
- * @param array $data A array as returned by ClonerInterface::cloneVar().
- */
- public function __construct(array $data)
- {
- $this->data = $data;
- }
+ /**
+ * @param array $data A array as returned by ClonerInterface::cloneVar()
+ */
+ public function __construct(array $data)
+ {
+ $this->data = $data;
+ }
- /**
- * @return array The raw data structure.
- */
- public function getRawData()
- {
- return $this->data;
- }
+ /**
+ * @return array The raw data structure
+ */
+ public function getRawData()
+ {
+ return $this->data;
+ }
- /**
- * Returns a depth limited clone of $this.
- *
- * @param int $maxDepth The max dumped depth level.
- *
- * @return self A clone of $this.
- */
- public function withMaxDepth($maxDepth)
- {
- $data = clone $this;
- $data->maxDepth = (int) $maxDepth;
+ /**
+ * Returns a depth limited clone of $this.
+ *
+ * @param int $maxDepth The max dumped depth level
+ *
+ * @return self A clone of $this
+ */
+ public function withMaxDepth($maxDepth)
+ {
+ $data = clone $this;
+ $data->maxDepth = (int) $maxDepth;
- return $data;
- }
+ return $data;
+ }
- /**
- * Limits the numbers of elements per depth level.
- *
- * @param int $maxItemsPerDepth The max number of items dumped per depth level.
- *
- * @return self A clone of $this.
- */
- public function withMaxItemsPerDepth($maxItemsPerDepth)
- {
- $data = clone $this;
- $data->maxItemsPerDepth = (int) $maxItemsPerDepth;
+ /**
+ * Limits the number of elements per depth level.
+ *
+ * @param int $maxItemsPerDepth The max number of items dumped per depth level
+ *
+ * @return self A clone of $this
+ */
+ public function withMaxItemsPerDepth($maxItemsPerDepth)
+ {
+ $data = clone $this;
+ $data->maxItemsPerDepth = (int) $maxItemsPerDepth;
- return $data;
- }
+ return $data;
+ }
- /**
- * Enables/disables objects' identifiers tracking.
- *
- * @param bool $useRefHandles False to hide global ref. handles.
- *
- * @return self A clone of $this.
- */
- public function withRefHandles($useRefHandles)
- {
- $data = clone $this;
- $data->useRefHandles = $useRefHandles ? -1 : 0;
+ /**
+ * Enables/disables objects' identifiers tracking.
+ *
+ * @param bool $useRefHandles False to hide global ref. handles
+ *
+ * @return self A clone of $this
+ */
+ public function withRefHandles($useRefHandles)
+ {
+ $data = clone $this;
+ $data->useRefHandles = $useRefHandles ? -1 : 0;
- return $data;
- }
+ return $data;
+ }
- /**
- * Dumps data with a DumperInterface dumper.
- */
- public function dump(DumperInterface $dumper)
- {
- $refs = array(0);
- $this->dumpItem($dumper, new Cursor(), $refs, $this->data[0][0]);
- }
+ /**
+ * Seeks to a specific key in nested data structures.
+ *
+ * @param string|int $key The key to seek to
+ *
+ * @return self|null A clone of $this of null if the key is not set
+ */
+ public function seek($key)
+ {
+ $item = $this->data[$this->position][$this->key];
- /**
- * Depth-first dumping of items.
- *
- * @param DumperInterface $dumper The dumper being used for dumping.
- * @param Cursor $cursor A cursor used for tracking dumper state position.
- * @param array &$refs A map of all references discovered while dumping.
- * @param mixed $item A Stub object or the original value being dumped.
- */
- private function dumpItem($dumper, $cursor, &$refs, $item)
- {
- $cursor->refIndex = 0;
- $cursor->softRefTo = $cursor->softRefHandle = $cursor->softRefCount = 0;
- $cursor->hardRefTo = $cursor->hardRefHandle = $cursor->hardRefCount = 0;
- $firstSeen = true;
+ if (!$item instanceof Stub || !$item->position) {
+ return;
+ }
+ $keys = array($key);
- if (!$item instanceof Stub) {
- $type = gettype($item);
- } elseif (Stub::TYPE_REF === $item->type) {
- if ($item->handle) {
- if (!isset($refs[$r = $item->handle - (PHP_INT_MAX >> 1)])) {
- $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0];
- } else {
- $firstSeen = false;
- }
- $cursor->hardRefTo = $refs[$r];
- $cursor->hardRefHandle = $this->useRefHandles & $item->handle;
- $cursor->hardRefCount = $item->refCount;
- }
- $type = $item->class ?: gettype($item->value);
- $item = $item->value;
- }
- if ($item instanceof Stub) {
- if ($item->refCount) {
- if (!isset($refs[$r = $item->handle])) {
- $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0];
- } else {
- $firstSeen = false;
- }
- $cursor->softRefTo = $refs[$r];
- }
- $cursor->softRefHandle = $this->useRefHandles & $item->handle;
- $cursor->softRefCount = $item->refCount;
- $cut = $item->cut;
+ switch ($item->type) {
+ case Stub::TYPE_OBJECT:
+ $keys[] = Caster::PREFIX_DYNAMIC.$key;
+ $keys[] = Caster::PREFIX_PROTECTED.$key;
+ $keys[] = Caster::PREFIX_VIRTUAL.$key;
+ $keys[] = "\0$item->class\0$key";
+ case Stub::TYPE_ARRAY:
+ case Stub::TYPE_RESOURCE:
+ break;
+ default:
+ return;
+ }
- if ($item->position && $firstSeen) {
- $children = $this->data[$item->position];
+ $data = null;
+ $children = $this->data[$item->position];
- if ($cursor->stop) {
- if ($cut >= 0) {
- $cut += count($children);
- }
- $children = array();
- }
- } else {
- $children = array();
- }
- switch ($item->type) {
- case Stub::TYPE_STRING:
- $dumper->dumpString($cursor, $item->value, Stub::STRING_BINARY === $item->class, $cut);
- break;
+ foreach ($keys as $key) {
+ if (isset($children[$key]) || array_key_exists($key, $children)) {
+ $data = clone $this;
+ $data->key = $key;
+ $data->position = $item->position;
+ break;
+ }
+ }
- case Stub::TYPE_ARRAY:
- $item = clone $item;
- $item->type = $item->class;
- $item->class = $item->value;
- // No break;
- case Stub::TYPE_OBJECT:
- case Stub::TYPE_RESOURCE:
- $withChildren = $children && $cursor->depth !== $this->maxDepth && $this->maxItemsPerDepth;
- $dumper->enterHash($cursor, $item->type, $item->class, $withChildren);
- if ($withChildren) {
- $cut = $this->dumpChildren($dumper, $cursor, $refs, $children, $cut, $item->type);
- } elseif ($children && 0 <= $cut) {
- $cut += count($children);
- }
- $dumper->leaveHash($cursor, $item->type, $item->class, $withChildren, $cut);
- break;
+ return $data;
+ }
- default:
- throw new \RuntimeException(sprintf('Unexpected Stub type: %s', $item->type));
- }
- } elseif ('array' === $type) {
- $dumper->enterHash($cursor, Cursor::HASH_INDEXED, 0, false);
- $dumper->leaveHash($cursor, Cursor::HASH_INDEXED, 0, false, 0);
- } elseif ('string' === $type) {
- $dumper->dumpString($cursor, $item, false, 0);
- } else {
- $dumper->dumpScalar($cursor, $type, $item);
- }
- }
+ /**
+ * Dumps data with a DumperInterface dumper.
+ */
+ public function dump(DumperInterface $dumper)
+ {
+ $refs = array(0);
+ $this->dumpItem($dumper, new Cursor(), $refs, $this->data[$this->position][$this->key]);
+ }
- /**
- * Dumps children of hash structures.
- *
- * @param DumperInterface $dumper
- * @param Cursor $parentCursor The cursor of the parent hash.
- * @param array &$refs A map of all references discovered while dumping.
- * @param array $children The children to dump.
- * @param int $hashCut The number of items removed from the original hash.
- * @param string $hashType A Cursor::HASH_* const.
- *
- * @return int The final number of removed items.
- */
- private function dumpChildren($dumper, $parentCursor, &$refs, $children, $hashCut, $hashType)
- {
- $cursor = clone $parentCursor;
- ++$cursor->depth;
- $cursor->hashType = $hashType;
- $cursor->hashIndex = 0;
- $cursor->hashLength = count($children);
- $cursor->hashCut = $hashCut;
- foreach ($children as $key => $child) {
- $cursor->hashKeyIsBinary = isset($key[0]) && !preg_match('//u', $key);
- $cursor->hashKey = $key;
- $this->dumpItem($dumper, $cursor, $refs, $child);
- if (++$cursor->hashIndex === $this->maxItemsPerDepth || $cursor->stop) {
- $parentCursor->stop = true;
+ /**
+ * Depth-first dumping of items.
+ *
+ * @param DumperInterface $dumper The dumper being used for dumping
+ * @param Cursor $cursor A cursor used for tracking dumper state position
+ * @param array &$refs A map of all references discovered while dumping
+ * @param mixed $item A Stub object or the original value being dumped
+ */
+ private function dumpItem($dumper, $cursor, &$refs, $item)
+ {
+ $cursor->refIndex = 0;
+ $cursor->softRefTo = $cursor->softRefHandle = $cursor->softRefCount = 0;
+ $cursor->hardRefTo = $cursor->hardRefHandle = $cursor->hardRefCount = 0;
+ $firstSeen = true;
- return $hashCut >= 0 ? $hashCut + $cursor->hashLength - $cursor->hashIndex : $hashCut;
- }
- }
+ if (!$item instanceof Stub) {
+ $cursor->attr = array();
+ $type = gettype($item);
+ } elseif (Stub::TYPE_REF === $item->type) {
+ if ($item->handle) {
+ if (!isset($refs[$r = $item->handle - (PHP_INT_MAX >> 1)])) {
+ $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0];
+ } else {
+ $firstSeen = false;
+ }
+ $cursor->hardRefTo = $refs[$r];
+ $cursor->hardRefHandle = $this->useRefHandles & $item->handle;
+ $cursor->hardRefCount = $item->refCount;
+ }
+ $cursor->attr = $item->attr;
+ $type = $item->class ?: gettype($item->value);
+ $item = $item->value;
+ }
+ if ($item instanceof Stub) {
+ if ($item->refCount) {
+ if (!isset($refs[$r = $item->handle])) {
+ $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0];
+ } else {
+ $firstSeen = false;
+ }
+ $cursor->softRefTo = $refs[$r];
+ }
+ $cursor->softRefHandle = $this->useRefHandles & $item->handle;
+ $cursor->softRefCount = $item->refCount;
+ $cursor->attr = $item->attr;
+ $cut = $item->cut;
- return $hashCut;
- }
+ if ($item->position && $firstSeen) {
+ $children = $this->data[$item->position];
+
+ if ($cursor->stop) {
+ if ($cut >= 0) {
+ $cut += count($children);
+ }
+ $children = array();
+ }
+ } else {
+ $children = array();
+ }
+ switch ($item->type) {
+ case Stub::TYPE_STRING:
+ $dumper->dumpString($cursor, $item->value, Stub::STRING_BINARY === $item->class, $cut);
+ break;
+
+ case Stub::TYPE_ARRAY:
+ $item = clone $item;
+ $item->type = $item->class;
+ $item->class = $item->value;
+ // No break;
+ case Stub::TYPE_OBJECT:
+ case Stub::TYPE_RESOURCE:
+ $withChildren = $children && $cursor->depth !== $this->maxDepth && $this->maxItemsPerDepth;
+ $dumper->enterHash($cursor, $item->type, $item->class, $withChildren);
+ if ($withChildren) {
+ $cut = $this->dumpChildren($dumper, $cursor, $refs, $children, $cut, $item->type, null !== $item->class);
+ } elseif ($children && 0 <= $cut) {
+ $cut += count($children);
+ }
+ $dumper->leaveHash($cursor, $item->type, $item->class, $withChildren, $cut);
+ break;
+
+ default:
+ throw new \RuntimeException(sprintf('Unexpected Stub type: %s', $item->type));
+ }
+ } elseif ('array' === $type) {
+ $dumper->enterHash($cursor, Cursor::HASH_INDEXED, 0, false);
+ $dumper->leaveHash($cursor, Cursor::HASH_INDEXED, 0, false, 0);
+ } elseif ('string' === $type) {
+ $dumper->dumpString($cursor, $item, false, 0);
+ } else {
+ $dumper->dumpScalar($cursor, $type, $item);
+ }
+ }
+
+ /**
+ * Dumps children of hash structures.
+ *
+ * @param DumperInterface $dumper
+ * @param Cursor $parentCursor The cursor of the parent hash
+ * @param array &$refs A map of all references discovered while dumping
+ * @param array $children The children to dump
+ * @param int $hashCut The number of items removed from the original hash
+ * @param string $hashType A Cursor::HASH_* const
+ * @param bool $dumpKeys Whether keys should be dumped or not
+ *
+ * @return int The final number of removed items
+ */
+ private function dumpChildren($dumper, $parentCursor, &$refs, $children, $hashCut, $hashType, $dumpKeys)
+ {
+ $cursor = clone $parentCursor;
+ ++$cursor->depth;
+ $cursor->hashType = $hashType;
+ $cursor->hashIndex = 0;
+ $cursor->hashLength = count($children);
+ $cursor->hashCut = $hashCut;
+ foreach ($children as $key => $child) {
+ $cursor->hashKeyIsBinary = isset($key[0]) && !preg_match('//u', $key);
+ $cursor->hashKey = $dumpKeys ? $key : null;
+ $this->dumpItem($dumper, $cursor, $refs, $child);
+ if (++$cursor->hashIndex === $this->maxItemsPerDepth || $cursor->stop) {
+ $parentCursor->stop = true;
+
+ return $hashCut >= 0 ? $hashCut + $cursor->hashLength - $cursor->hashIndex : $hashCut;
+ }
+ }
+
+ return $hashCut;
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Cloner/DumperInterface.php b/htdocs/includes/symfony/var-dumper/Cloner/DumperInterface.php
index eba23d42297..8f647a7e5a7 100644
--- a/htdocs/includes/symfony/var-dumper/Cloner/DumperInterface.php
+++ b/htdocs/includes/symfony/var-dumper/Cloner/DumperInterface.php
@@ -18,43 +18,43 @@ namespace Symfony\Component\VarDumper\Cloner;
*/
interface DumperInterface
{
- /**
- * Dumps a scalar value.
- *
- * @param Cursor $cursor The Cursor position in the dump.
- * @param string $type The PHP type of the value being dumped.
- * @param scalar $value The scalar value being dumped.
- */
- public function dumpScalar(Cursor $cursor, $type, $value);
+ /**
+ * Dumps a scalar value.
+ *
+ * @param Cursor $cursor The Cursor position in the dump
+ * @param string $type The PHP type of the value being dumped
+ * @param scalar $value The scalar value being dumped
+ */
+ public function dumpScalar(Cursor $cursor, $type, $value);
- /**
- * Dumps a string.
- *
- * @param Cursor $cursor The Cursor position in the dump.
- * @param string $str The string being dumped.
- * @param bool $bin Whether $str is UTF-8 or binary encoded.
- * @param int $cut The number of characters $str has been cut by.
- */
- public function dumpString(Cursor $cursor, $str, $bin, $cut);
+ /**
+ * Dumps a string.
+ *
+ * @param Cursor $cursor The Cursor position in the dump
+ * @param string $str The string being dumped
+ * @param bool $bin Whether $str is UTF-8 or binary encoded
+ * @param int $cut The number of characters $str has been cut by
+ */
+ public function dumpString(Cursor $cursor, $str, $bin, $cut);
- /**
- * Dumps while entering an hash.
- *
- * @param Cursor $cursor The Cursor position in the dump.
- * @param int $type A Cursor::HASH_* const for the type of hash.
- * @param string $class The object class, resource type or array count.
- * @param bool $hasChild When the dump of the hash has child item.
- */
- public function enterHash(Cursor $cursor, $type, $class, $hasChild);
+ /**
+ * Dumps while entering an hash.
+ *
+ * @param Cursor $cursor The Cursor position in the dump
+ * @param int $type A Cursor::HASH_* const for the type of hash
+ * @param string $class The object class, resource type or array count
+ * @param bool $hasChild When the dump of the hash has child item
+ */
+ public function enterHash(Cursor $cursor, $type, $class, $hasChild);
- /**
- * Dumps while leaving an hash.
- *
- * @param Cursor $cursor The Cursor position in the dump.
- * @param int $type A Cursor::HASH_* const for the type of hash.
- * @param string $class The object class, resource type or array count.
- * @param bool $hasChild When the dump of the hash has child item.
- * @param int $cut The number of items the hash has been cut by.
- */
- public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut);
+ /**
+ * Dumps while leaving an hash.
+ *
+ * @param Cursor $cursor The Cursor position in the dump
+ * @param int $type A Cursor::HASH_* const for the type of hash
+ * @param string $class The object class, resource type or array count
+ * @param bool $hasChild When the dump of the hash has child item
+ * @param int $cut The number of items the hash has been cut by
+ */
+ public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut);
}
diff --git a/htdocs/includes/symfony/var-dumper/Cloner/Stub.php b/htdocs/includes/symfony/var-dumper/Cloner/Stub.php
index f58a57a7276..8ee0f23b75e 100644
--- a/htdocs/includes/symfony/var-dumper/Cloner/Stub.php
+++ b/htdocs/includes/symfony/var-dumper/Cloner/Stub.php
@@ -18,23 +18,24 @@ namespace Symfony\Component\VarDumper\Cloner;
*/
class Stub
{
- const TYPE_REF = 'ref';
- const TYPE_STRING = 'string';
- const TYPE_ARRAY = 'array';
- const TYPE_OBJECT = 'object';
- const TYPE_RESOURCE = 'resource';
+ const TYPE_REF = 'ref';
+ const TYPE_STRING = 'string';
+ const TYPE_ARRAY = 'array';
+ const TYPE_OBJECT = 'object';
+ const TYPE_RESOURCE = 'resource';
- const STRING_BINARY = 'bin';
- const STRING_UTF8 = 'utf8';
+ const STRING_BINARY = 'bin';
+ const STRING_UTF8 = 'utf8';
- const ARRAY_ASSOC = 'assoc';
- const ARRAY_INDEXED = 'indexed';
+ const ARRAY_ASSOC = 'assoc';
+ const ARRAY_INDEXED = 'indexed';
- public $type = self::TYPE_REF;
- public $class = '';
- public $value;
- public $cut = 0;
- public $handle = 0;
- public $refCount = 0;
- public $position = 0;
+ public $type = self::TYPE_REF;
+ public $class = '';
+ public $value;
+ public $cut = 0;
+ public $handle = 0;
+ public $refCount = 0;
+ public $position = 0;
+ public $attr = array();
}
diff --git a/htdocs/includes/symfony/var-dumper/Cloner/VarCloner.php b/htdocs/includes/symfony/var-dumper/Cloner/VarCloner.php
index 98d6e9e51c1..caadfe05e7d 100644
--- a/htdocs/includes/symfony/var-dumper/Cloner/VarCloner.php
+++ b/htdocs/includes/symfony/var-dumper/Cloner/VarCloner.php
@@ -16,285 +16,311 @@ namespace Symfony\Component\VarDumper\Cloner;
*/
class VarCloner extends AbstractCloner
{
- private static $hashMask = 0;
- private static $hashOffset = 0;
+ private static $hashMask = 0;
+ private static $hashOffset = 0;
- /**
- * {@inheritdoc}
- */
- protected function doClone($var)
- {
- $useExt = $this->useExt;
- $i = 0; // Current iteration position in $queue
- $len = 1; // Length of $queue
- $pos = 0; // Number of cloned items past the first level
- $refs = 0; // Hard references counter
- $queue = array(array($var)); // This breadth-first queue is the return value
- $arrayRefs = array(); // Map of queue indexes to stub array objects
- $hardRefs = array(); // Map of original zval hashes to stub objects
- $objRefs = array(); // Map of original object handles to their stub object couterpart
- $resRefs = array(); // Map of original resource handles to their stub object couterpart
- $values = array(); // Map of stub objects' hashes to original values
- $maxItems = $this->maxItems;
- $maxString = $this->maxString;
- $cookie = (object) array(); // Unique object used to detect hard references
- $gid = uniqid(mt_rand(), true); // Unique string used to detect the special $GLOBALS variable
- $a = null; // Array cast for nested structures
- $stub = null; // Stub capturing the main properties of an original item value
- // or null if the original value is used directly
- $zval = array( // Main properties of the current value
- 'type' => null,
- 'zval_isref' => null,
- 'zval_hash' => null,
- 'array_count' => null,
- 'object_class' => null,
- 'object_handle' => null,
- 'resource_type' => null,
- );
- if (!self::$hashMask) {
- self::initHashMask();
- }
- $hashMask = self::$hashMask;
- $hashOffset = self::$hashOffset;
+ /**
+ * {@inheritdoc}
+ */
+ protected function doClone($var)
+ {
+ $useExt = $this->useExt;
+ $len = 1; // Length of $queue
+ $pos = 0; // Number of cloned items past the first level
+ $refsCounter = 0; // Hard references counter
+ $queue = array(array($var)); // This breadth-first queue is the return value
+ $arrayRefs = array(); // Map of queue indexes to stub array objects
+ $hardRefs = array(); // Map of original zval hashes to stub objects
+ $objRefs = array(); // Map of original object handles to their stub object couterpart
+ $resRefs = array(); // Map of original resource handles to their stub object couterpart
+ $values = array(); // Map of stub objects' hashes to original values
+ $maxItems = $this->maxItems;
+ $maxString = $this->maxString;
+ $cookie = (object) array(); // Unique object used to detect hard references
+ $gid = uniqid(mt_rand(), true); // Unique string used to detect the special $GLOBALS variable
+ $a = null; // Array cast for nested structures
+ $stub = null; // Stub capturing the main properties of an original item value
+ // or null if the original value is used directly
+ $zval = array( // Main properties of the current value
+ 'type' => null,
+ 'zval_isref' => null,
+ 'zval_hash' => null,
+ 'array_count' => null,
+ 'object_class' => null,
+ 'object_handle' => null,
+ 'resource_type' => null,
+ );
+ if (!self::$hashMask) {
+ self::initHashMask();
+ }
+ $hashMask = self::$hashMask;
+ $hashOffset = self::$hashOffset;
- for ($i = 0; $i < $len; ++$i) {
- $indexed = true; // Whether the currently iterated array is numerically indexed or not
- $j = -1; // Position in the currently iterated array
- $step = $queue[$i]; // Copy of the currently iterated array used for hard references detection
- foreach ($step as $k => $v) {
- // $k is the original key
- // $v is the original value or a stub object in case of hard references
- if ($indexed && $k !== ++$j) {
- $indexed = false;
- }
- if ($useExt) {
- $zval = symfony_zval_info($k, $step);
- } else {
- $step[$k] = $cookie;
- if ($zval['zval_isref'] = $queue[$i][$k] === $cookie) {
- $zval['zval_hash'] = $v instanceof Stub ? spl_object_hash($v) : null;
- }
- $zval['type'] = gettype($v);
- }
- if ($zval['zval_isref']) {
- $queue[$i][$k] = &$stub; // Break hard references to make $queue completely
- unset($stub); // independent from the original structure
- if (isset($hardRefs[$zval['zval_hash']])) {
- $queue[$i][$k] = $useExt ? ($v = $hardRefs[$zval['zval_hash']]) : ($step[$k] = $v);
- if ($v->value instanceof Stub && (Stub::TYPE_OBJECT === $v->value->type || Stub::TYPE_RESOURCE === $v->value->type)) {
- ++$v->value->refCount;
- }
- ++$v->refCount;
- continue;
- }
- }
- // Create $stub when the original value $v can not be used directly
- // If $v is a nested structure, put that structure in array $a
- switch ($zval['type']) {
- case 'string':
- if (isset($v[0]) && !preg_match('//u', $v)) {
- $stub = new Stub();
- $stub->type = Stub::TYPE_STRING;
- $stub->class = Stub::STRING_BINARY;
- if (0 <= $maxString && 0 < $cut = strlen($v) - $maxString) {
- $stub->cut = $cut;
- $stub->value = substr($v, 0, -$cut);
- } else {
- $stub->value = $v;
- }
- } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = iconv_strlen($v, 'UTF-8') - $maxString) {
- $stub = new Stub();
- $stub->type = Stub::TYPE_STRING;
- $stub->class = Stub::STRING_UTF8;
- $stub->cut = $cut;
- $stub->value = iconv_substr($v, 0, $maxString, 'UTF-8');
- }
- break;
+ for ($i = 0; $i < $len; ++$i) {
+ $indexed = true; // Whether the currently iterated array is numerically indexed or not
+ $j = -1; // Position in the currently iterated array
+ $fromObjCast = array_keys($queue[$i]);
+ $fromObjCast = array_keys(array_flip($fromObjCast)) !== $fromObjCast;
+ $refs = $vals = $fromObjCast ? array_values($queue[$i]) : $queue[$i];
+ foreach ($queue[$i] as $k => $v) {
+ // $k is the original key
+ // $v is the original value or a stub object in case of hard references
+ if ($k !== ++$j) {
+ $indexed = false;
+ }
+ if ($fromObjCast) {
+ $k = $j;
+ }
+ if ($useExt) {
+ $zval = symfony_zval_info($k, $refs);
+ } else {
+ $refs[$k] = $cookie;
+ if ($zval['zval_isref'] = $vals[$k] === $cookie) {
+ $zval['zval_hash'] = $v instanceof Stub ? spl_object_hash($v) : null;
+ }
+ $zval['type'] = gettype($v);
+ }
+ if ($zval['zval_isref']) {
+ $vals[$k] = &$stub; // Break hard references to make $queue completely
+ unset($stub); // independent from the original structure
+ if (isset($hardRefs[$zval['zval_hash']])) {
+ $vals[$k] = $useExt ? ($v = $hardRefs[$zval['zval_hash']]) : ($refs[$k] = $v);
+ if ($v->value instanceof Stub && (Stub::TYPE_OBJECT === $v->value->type || Stub::TYPE_RESOURCE === $v->value->type)) {
+ ++$v->value->refCount;
+ }
+ ++$v->refCount;
+ continue;
+ }
+ }
+ // Create $stub when the original value $v can not be used directly
+ // If $v is a nested structure, put that structure in array $a
+ switch ($zval['type']) {
+ case 'string':
+ if (isset($v[0]) && !preg_match('//u', $v)) {
+ $stub = new Stub();
+ $stub->type = Stub::TYPE_STRING;
+ $stub->class = Stub::STRING_BINARY;
+ if (0 <= $maxString && 0 < $cut = strlen($v) - $maxString) {
+ $stub->cut = $cut;
+ $stub->value = substr($v, 0, -$cut);
+ } else {
+ $stub->value = $v;
+ }
+ } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = mb_strlen($v, 'UTF-8') - $maxString) {
+ $stub = new Stub();
+ $stub->type = Stub::TYPE_STRING;
+ $stub->class = Stub::STRING_UTF8;
+ $stub->cut = $cut;
+ $stub->value = mb_substr($v, 0, $maxString, 'UTF-8');
+ }
+ break;
- case 'integer':
- break;
+ case 'integer':
+ break;
- case 'array':
- if ($v) {
- $stub = $arrayRefs[$len] = new Stub();
- $stub->type = Stub::TYPE_ARRAY;
- $stub->class = Stub::ARRAY_ASSOC;
+ case 'array':
+ if ($v) {
+ $stub = $arrayRefs[$len] = new Stub();
+ $stub->type = Stub::TYPE_ARRAY;
+ $stub->class = Stub::ARRAY_ASSOC;
- // Copies of $GLOBALS have very strange behavior,
- // let's detect them with some black magic
- $a = $v;
- $a[$gid] = true;
+ // Copies of $GLOBALS have very strange behavior,
+ // let's detect them with some black magic
+ $a = $v;
+ $a[$gid] = true;
- // Happens with copies of $GLOBALS
- if (isset($v[$gid])) {
- unset($v[$gid]);
- $a = array();
- foreach ($v as $gk => &$gv) {
- $a[$gk] = &$gv;
- }
- } else {
- $a = $v;
- }
+ // Happens with copies of $GLOBALS
+ if (isset($v[$gid])) {
+ unset($v[$gid]);
+ $a = array();
+ foreach ($v as $gk => &$gv) {
+ $a[$gk] = &$gv;
+ }
+ } else {
+ $a = $v;
+ }
- $stub->value = $zval['array_count'] ?: count($a);
- }
- break;
+ $stub->value = $zval['array_count'] ?: count($a);
+ }
+ break;
- case 'object':
- if (empty($objRefs[$h = $zval['object_handle'] ?: ($hashMask ^ hexdec(substr(spl_object_hash($v), $hashOffset, PHP_INT_SIZE)))])) {
- $stub = new Stub();
- $stub->type = Stub::TYPE_OBJECT;
- $stub->class = $zval['object_class'] ?: get_class($v);
- $stub->value = $v;
- $stub->handle = $h;
- $a = $this->castObject($stub, 0 < $i);
- if ($v !== $stub->value) {
- if (Stub::TYPE_OBJECT !== $stub->type || null === $stub->value) {
- break;
- }
- if ($useExt) {
- $zval['type'] = $stub->value;
- $zval = symfony_zval_info('type', $zval);
- $h = $zval['object_handle'];
- } else {
- $h = $hashMask ^ hexdec(substr(spl_object_hash($stub->value), $hashOffset, PHP_INT_SIZE));
- }
- $stub->handle = $h;
- }
- $stub->value = null;
- if (0 <= $maxItems && $maxItems <= $pos) {
- $stub->cut = count($a);
- $a = null;
- }
- }
- if (empty($objRefs[$h])) {
- $objRefs[$h] = $stub;
- } else {
- $stub = $objRefs[$h];
- ++$stub->refCount;
- $a = null;
- }
- break;
+ case 'object':
+ if (empty($objRefs[$h = $zval['object_handle'] ?: ($hashMask ^ hexdec(substr(spl_object_hash($v), $hashOffset, PHP_INT_SIZE)))])) {
+ $stub = new Stub();
+ $stub->type = Stub::TYPE_OBJECT;
+ $stub->class = $zval['object_class'] ?: get_class($v);
+ $stub->value = $v;
+ $stub->handle = $h;
+ $a = $this->castObject($stub, 0 < $i);
+ if ($v !== $stub->value) {
+ if (Stub::TYPE_OBJECT !== $stub->type || null === $stub->value) {
+ break;
+ }
+ if ($useExt) {
+ $zval['type'] = $stub->value;
+ $zval = symfony_zval_info('type', $zval);
+ $h = $zval['object_handle'];
+ } else {
+ $h = $hashMask ^ hexdec(substr(spl_object_hash($stub->value), $hashOffset, PHP_INT_SIZE));
+ }
+ $stub->handle = $h;
+ }
+ $stub->value = null;
+ if (0 <= $maxItems && $maxItems <= $pos) {
+ $stub->cut = count($a);
+ $a = null;
+ }
+ }
+ if (empty($objRefs[$h])) {
+ $objRefs[$h] = $stub;
+ } else {
+ $stub = $objRefs[$h];
+ ++$stub->refCount;
+ $a = null;
+ }
+ break;
- case 'resource':
- case 'unknown type':
- if (empty($resRefs[$h = (int) $v])) {
- $stub = new Stub();
- $stub->type = Stub::TYPE_RESOURCE;
- $stub->class = $zval['resource_type'] ?: get_resource_type($v);
- $stub->value = $v;
- $stub->handle = $h;
- $a = $this->castResource($stub, 0 < $i);
- $stub->value = null;
- if (0 <= $maxItems && $maxItems <= $pos) {
- $stub->cut = count($a);
- $a = null;
- }
- }
- if (empty($resRefs[$h])) {
- $resRefs[$h] = $stub;
- } else {
- $stub = $resRefs[$h];
- ++$stub->refCount;
- $a = null;
- }
- break;
- }
+ case 'resource':
+ case 'unknown type':
+ case 'resource (closed)':
+ if (empty($resRefs[$h = (int) $v])) {
+ $stub = new Stub();
+ $stub->type = Stub::TYPE_RESOURCE;
+ if ('Unknown' === $stub->class = $zval['resource_type'] ?: @get_resource_type($v)) {
+ $stub->class = 'Closed';
+ }
+ $stub->value = $v;
+ $stub->handle = $h;
+ $a = $this->castResource($stub, 0 < $i);
+ $stub->value = null;
+ if (0 <= $maxItems && $maxItems <= $pos) {
+ $stub->cut = count($a);
+ $a = null;
+ }
+ }
+ if (empty($resRefs[$h])) {
+ $resRefs[$h] = $stub;
+ } else {
+ $stub = $resRefs[$h];
+ ++$stub->refCount;
+ $a = null;
+ }
+ break;
+ }
- if (isset($stub)) {
- if ($zval['zval_isref']) {
- if ($useExt) {
- $queue[$i][$k] = $hardRefs[$zval['zval_hash']] = $v = new Stub();
- $v->value = $stub;
- } else {
- $step[$k] = new Stub();
- $step[$k]->value = $stub;
- $h = spl_object_hash($step[$k]);
- $queue[$i][$k] = $hardRefs[$h] = &$step[$k];
- $values[$h] = $v;
- }
- $queue[$i][$k]->handle = ++$refs;
- } else {
- $queue[$i][$k] = $stub;
- }
+ if (isset($stub)) {
+ if ($zval['zval_isref']) {
+ if ($useExt) {
+ $vals[$k] = $hardRefs[$zval['zval_hash']] = $v = new Stub();
+ $v->value = $stub;
+ } else {
+ $refs[$k] = new Stub();
+ $refs[$k]->value = $stub;
+ $h = spl_object_hash($refs[$k]);
+ $vals[$k] = $hardRefs[$h] = &$refs[$k];
+ $values[$h] = $v;
+ }
+ $vals[$k]->handle = ++$refsCounter;
+ } else {
+ $vals[$k] = $stub;
+ }
- if ($a) {
- if ($i && 0 <= $maxItems) {
- $k = count($a);
- if ($pos < $maxItems) {
- if ($maxItems < $pos += $k) {
- $a = array_slice($a, 0, $maxItems - $pos);
- if ($stub->cut >= 0) {
- $stub->cut += $pos - $maxItems;
- }
- }
- } else {
- if ($stub->cut >= 0) {
- $stub->cut += $k;
- }
- $stub = $a = null;
- unset($arrayRefs[$len]);
- continue;
- }
- }
- $queue[$len] = $a;
- $stub->position = $len++;
- }
- $stub = $a = null;
- } elseif ($zval['zval_isref']) {
- if ($useExt) {
- $queue[$i][$k] = $hardRefs[$zval['zval_hash']] = new Stub();
- $queue[$i][$k]->value = $v;
- } else {
- $step[$k] = $queue[$i][$k] = new Stub();
- $step[$k]->value = $v;
- $h = spl_object_hash($step[$k]);
- $hardRefs[$h] = &$step[$k];
- $values[$h] = $v;
- }
- $queue[$i][$k]->handle = ++$refs;
- }
- }
+ if ($a) {
+ if ($i && 0 <= $maxItems) {
+ $k = count($a);
+ if ($pos < $maxItems) {
+ if ($maxItems < $pos += $k) {
+ $a = array_slice($a, 0, $maxItems - $pos);
+ if ($stub->cut >= 0) {
+ $stub->cut += $pos - $maxItems;
+ }
+ }
+ } else {
+ if ($stub->cut >= 0) {
+ $stub->cut += $k;
+ }
+ $stub = $a = null;
+ unset($arrayRefs[$len]);
+ continue;
+ }
+ }
+ $queue[$len] = $a;
+ $stub->position = $len++;
+ }
+ $stub = $a = null;
+ } elseif ($zval['zval_isref']) {
+ if ($useExt) {
+ $vals[$k] = $hardRefs[$zval['zval_hash']] = new Stub();
+ $vals[$k]->value = $v;
+ } else {
+ $refs[$k] = $vals[$k] = new Stub();
+ $refs[$k]->value = $v;
+ $h = spl_object_hash($refs[$k]);
+ $hardRefs[$h] = &$refs[$k];
+ $values[$h] = $v;
+ }
+ $vals[$k]->handle = ++$refsCounter;
+ }
+ }
- if (isset($arrayRefs[$i])) {
- if ($indexed) {
- $arrayRefs[$i]->class = Stub::ARRAY_INDEXED;
- }
- unset($arrayRefs[$i]);
- }
- }
+ if ($fromObjCast) {
+ $refs = $vals;
+ $vals = array();
+ $j = -1;
+ foreach ($queue[$i] as $k => $v) {
+ foreach (array($k => $v) as $a => $v) {
+ }
+ if ($a !== $k) {
+ $vals = (object) $vals;
+ $vals->{$k} = $refs[++$j];
+ $vals = (array) $vals;
+ } else {
+ $vals[$k] = $refs[++$j];
+ }
+ }
+ }
- foreach ($values as $h => $v) {
- $hardRefs[$h] = $v;
- }
+ $queue[$i] = $vals;
- return $queue;
- }
+ if (isset($arrayRefs[$i])) {
+ if ($indexed) {
+ $arrayRefs[$i]->class = Stub::ARRAY_INDEXED;
+ }
+ unset($arrayRefs[$i]);
+ }
+ }
- private static function initHashMask()
- {
- $obj = (object) array();
- self::$hashOffset = 16 - PHP_INT_SIZE;
- self::$hashMask = -1;
+ foreach ($values as $h => $v) {
+ $hardRefs[$h] = $v;
+ }
- if (defined('HHVM_VERSION')) {
- self::$hashOffset += 16;
- } else {
- // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below
- $obFuncs = array('ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush');
- foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) {
- if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && in_array($frame['function'], $obFuncs)) {
- $frame['line'] = 0;
- break;
- }
- }
- if (!empty($frame['line'])) {
- ob_start();
- debug_zval_dump($obj);
- self::$hashMask = substr(ob_get_clean(), 17);
- }
- }
+ return $queue;
+ }
- self::$hashMask ^= hexdec(substr(spl_object_hash($obj), self::$hashOffset, PHP_INT_SIZE));
- }
+ private static function initHashMask()
+ {
+ $obj = (object) array();
+ self::$hashOffset = 16 - PHP_INT_SIZE;
+ self::$hashMask = -1;
+
+ if (defined('HHVM_VERSION')) {
+ self::$hashOffset += 16;
+ } else {
+ // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below
+ $obFuncs = array('ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush');
+ foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) {
+ if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && in_array($frame['function'], $obFuncs)) {
+ $frame['line'] = 0;
+ break;
+ }
+ }
+ if (!empty($frame['line'])) {
+ ob_start();
+ debug_zval_dump($obj);
+ self::$hashMask = (int) substr(ob_get_clean(), 17);
+ }
+ }
+
+ self::$hashMask ^= hexdec(substr(spl_object_hash($obj), self::$hashOffset, PHP_INT_SIZE));
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Dumper/AbstractDumper.php b/htdocs/includes/symfony/var-dumper/Dumper/AbstractDumper.php
index f8b9c107779..fb68a8908c4 100644
--- a/htdocs/includes/symfony/var-dumper/Dumper/AbstractDumper.php
+++ b/htdocs/includes/symfony/var-dumper/Dumper/AbstractDumper.php
@@ -21,156 +21,181 @@ use Symfony\Component\VarDumper\Cloner\DumperInterface;
*/
abstract class AbstractDumper implements DataDumperInterface, DumperInterface
{
- public static $defaultOutput = 'php://output';
+ const DUMP_LIGHT_ARRAY = 1;
+ const DUMP_STRING_LENGTH = 2;
- protected $line = '';
- protected $lineDumper;
- protected $outputStream;
- protected $decimalPoint; // This is locale dependent
- protected $indentPad = ' ';
+ public static $defaultOutput = 'php://output';
- private $charset;
+ protected $line = '';
+ protected $lineDumper;
+ protected $outputStream;
+ protected $decimalPoint; // This is locale dependent
+ protected $indentPad = ' ';
+ protected $flags;
- /**
- * @param callable|resource|string|null $output A line dumper callable, an opened stream or an output path, defaults to static::$defaultOutput.
- * @param string $charset The default character encoding to use for non-UTF8 strings.
- */
- public function __construct($output = null, $charset = null)
- {
- $this->setCharset($charset ?: ini_get('php.output_encoding') ?: ini_get('default_charset') ?: 'UTF-8');
- $this->decimalPoint = (string) 0.5;
- $this->decimalPoint = $this->decimalPoint[1];
- $this->setOutput($output ?: static::$defaultOutput);
- if (!$output && is_string(static::$defaultOutput)) {
- static::$defaultOutput = $this->outputStream;
- }
- }
+ private $charset;
- /**
- * Sets the output destination of the dumps.
- *
- * @param callable|resource|string $output A line dumper callable, an opened stream or an output path.
- *
- * @return callable|resource|string The previous output destination.
- */
- public function setOutput($output)
- {
- $prev = null !== $this->outputStream ? $this->outputStream : $this->lineDumper;
+ /**
+ * @param callable|resource|string|null $output A line dumper callable, an opened stream or an output path, defaults to static::$defaultOutput
+ * @param string $charset The default character encoding to use for non-UTF8 strings
+ * @param int $flags A bit field of static::DUMP_* constants to fine tune dumps representation
+ */
+ public function __construct($output = null, $charset = null, $flags = 0)
+ {
+ $this->flags = (int) $flags;
+ $this->setCharset($charset ?: ini_get('php.output_encoding') ?: ini_get('default_charset') ?: 'UTF-8');
+ $this->decimalPoint = localeconv();
+ $this->decimalPoint = $this->decimalPoint['decimal_point'];
+ $this->setOutput($output ?: static::$defaultOutput);
+ if (!$output && is_string(static::$defaultOutput)) {
+ static::$defaultOutput = $this->outputStream;
+ }
+ }
- if (is_callable($output)) {
- $this->outputStream = null;
- $this->lineDumper = $output;
- } else {
- if (is_string($output)) {
- $output = fopen($output, 'wb');
- }
- $this->outputStream = $output;
- $this->lineDumper = array($this, 'echoLine');
- }
+ /**
+ * Sets the output destination of the dumps.
+ *
+ * @param callable|resource|string $output A line dumper callable, an opened stream or an output path
+ *
+ * @return callable|resource|string The previous output destination
+ */
+ public function setOutput($output)
+ {
+ $prev = null !== $this->outputStream ? $this->outputStream : $this->lineDumper;
- return $prev;
- }
+ if (is_callable($output)) {
+ $this->outputStream = null;
+ $this->lineDumper = $output;
+ } else {
+ if (is_string($output)) {
+ $output = fopen($output, 'wb');
+ }
+ $this->outputStream = $output;
+ $this->lineDumper = array($this, 'echoLine');
+ }
- /**
- * Sets the default character encoding to use for non-UTF8 strings.
- *
- * @param string $charset The default character encoding to use for non-UTF8 strings.
- *
- * @return string The previous charset.
- */
- public function setCharset($charset)
- {
- $prev = $this->charset;
+ return $prev;
+ }
- $charset = strtoupper($charset);
- $charset = null === $charset || 'UTF-8' === $charset || 'UTF8' === $charset ? 'CP1252' : $charset;
+ /**
+ * Sets the default character encoding to use for non-UTF8 strings.
+ *
+ * @param string $charset The default character encoding to use for non-UTF8 strings
+ *
+ * @return string The previous charset
+ */
+ public function setCharset($charset)
+ {
+ $prev = $this->charset;
- $this->charset = $charset;
+ $charset = strtoupper($charset);
+ $charset = null === $charset || 'UTF-8' === $charset || 'UTF8' === $charset ? 'CP1252' : $charset;
- return $prev;
- }
+ $this->charset = $charset;
- /**
- * Sets the indentation pad string.
- *
- * @param string $pad A string the will be prepended to dumped lines, repeated by nesting level.
- *
- * @return string The indent pad.
- */
- public function setIndentPad($pad)
- {
- $prev = $this->indentPad;
- $this->indentPad = $pad;
+ return $prev;
+ }
- return $prev;
- }
+ /**
+ * Sets the indentation pad string.
+ *
+ * @param string $pad A string the will be prepended to dumped lines, repeated by nesting level
+ *
+ * @return string The indent pad
+ */
+ public function setIndentPad($pad)
+ {
+ $prev = $this->indentPad;
+ $this->indentPad = $pad;
- /**
- * Dumps a Data object.
- *
- * @param Data $data A Data object.
- * @param callable|resource|string|null $output A line dumper callable, an opened stream or an output path.
- */
- public function dump(Data $data, $output = null)
- {
- $exception = null;
- if ($output) {
- $prevOutput = $this->setOutput($output);
- }
- try {
- $data->dump($this);
- $this->dumpLine(-1);
- } catch (\Exception $exception) {
- // Re-thrown below
- }
- if ($output) {
- $this->setOutput($prevOutput);
- }
- if (null !== $exception) {
- throw $exception;
- }
- }
+ return $prev;
+ }
- /**
- * Dumps the current line.
- *
- * @param int $depth The recursive depth in the dumped structure for the line being dumped.
- */
- protected function dumpLine($depth)
- {
- call_user_func($this->lineDumper, $this->line, $depth, $this->indentPad);
- $this->line = '';
- }
+ /**
+ * Dumps a Data object.
+ *
+ * @param Data $data A Data object
+ * @param callable|resource|string|true|null $output A line dumper callable, an opened stream, an output path or true to return the dump
+ *
+ * @return string|null The dump as string when $output is true
+ */
+ public function dump(Data $data, $output = null)
+ {
+ $this->decimalPoint = localeconv();
+ $this->decimalPoint = $this->decimalPoint['decimal_point'];
- /**
- * Generic line dumper callback.
- *
- * @param string $line The line to write.
- * @param int $depth The recursive depth in the dumped structure.
- */
- protected function echoLine($line, $depth, $indentPad)
- {
- if (-1 !== $depth) {
- fwrite($this->outputStream, str_repeat($indentPad, $depth).$line."\n");
- }
- }
+ if ($returnDump = true === $output) {
+ $output = fopen('php://memory', 'r+b');
+ }
+ if ($output) {
+ $prevOutput = $this->setOutput($output);
+ }
+ try {
+ $data->dump($this);
+ $this->dumpLine(-1);
- /**
- * Converts a non-UTF-8 string to UTF-8.
- *
- * @param string $s The non-UTF-8 string to convert.
- *
- * @return string The string converted to UTF-8.
- */
- protected function utf8Encode($s)
- {
- if (false !== $c = @iconv($this->charset, 'UTF-8', $s)) {
- return $c;
- }
- if ('CP1252' !== $this->charset && false !== $c = @iconv('CP1252', 'UTF-8', $s)) {
- return $c;
- }
+ if ($returnDump) {
+ $result = stream_get_contents($output, -1, 0);
+ fclose($output);
- return iconv('CP850', 'UTF-8', $s);
- }
+ return $result;
+ }
+ } finally {
+ if ($output) {
+ $this->setOutput($prevOutput);
+ }
+ }
+ }
+
+ /**
+ * Dumps the current line.
+ *
+ * @param int $depth The recursive depth in the dumped structure for the line being dumped
+ */
+ protected function dumpLine($depth)
+ {
+ call_user_func($this->lineDumper, $this->line, $depth, $this->indentPad);
+ $this->line = '';
+ }
+
+ /**
+ * Generic line dumper callback.
+ *
+ * @param string $line The line to write
+ * @param int $depth The recursive depth in the dumped structure
+ * @param string $indentPad The line indent pad
+ */
+ protected function echoLine($line, $depth, $indentPad)
+ {
+ if (-1 !== $depth) {
+ fwrite($this->outputStream, str_repeat($indentPad, $depth).$line."\n");
+ }
+ }
+
+ /**
+ * Converts a non-UTF-8 string to UTF-8.
+ *
+ * @param string $s The non-UTF-8 string to convert
+ *
+ * @return string The string converted to UTF-8
+ */
+ protected function utf8Encode($s)
+ {
+ if (preg_match('//u', $s)) {
+ return $s;
+ }
+
+ if (!function_exists('iconv')) {
+ throw new \RuntimeException('Unable to convert a non-UTF-8 string to UTF-8: required function iconv() does not exist. You should install ext-iconv or symfony/polyfill-iconv.');
+ }
+
+ if (false !== $c = @iconv($this->charset, 'UTF-8', $s)) {
+ return $c;
+ }
+ if ('CP1252' !== $this->charset && false !== $c = @iconv('CP1252', 'UTF-8', $s)) {
+ return $c;
+ }
+
+ return iconv('CP850', 'UTF-8', $s);
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Dumper/CliDumper.php b/htdocs/includes/symfony/var-dumper/Dumper/CliDumper.php
index bca2abcb3d0..95304b92817 100644
--- a/htdocs/includes/symfony/var-dumper/Dumper/CliDumper.php
+++ b/htdocs/includes/symfony/var-dumper/Dumper/CliDumper.php
@@ -20,452 +20,470 @@ use Symfony\Component\VarDumper\Cloner\Cursor;
*/
class CliDumper extends AbstractDumper
{
- public static $defaultColors;
- public static $defaultOutput = 'php://stdout';
+ public static $defaultColors;
+ public static $defaultOutput = 'php://stdout';
- protected $colors;
- protected $maxStringWidth = 0;
- protected $styles = array(
- // See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
- 'default' => '38;5;208',
- 'num' => '1;38;5;38',
- 'const' => '1;38;5;208',
- 'str' => '1;38;5;113',
- 'note' => '38;5;38',
- 'ref' => '38;5;247',
- 'public' => '',
- 'protected' => '',
- 'private' => '',
- 'meta' => '38;5;170',
- 'key' => '38;5;113',
- 'index' => '38;5;38',
- );
+ protected $colors;
+ protected $maxStringWidth = 0;
+ protected $styles = array(
+ // See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+ 'default' => '38;5;208',
+ 'num' => '1;38;5;38',
+ 'const' => '1;38;5;208',
+ 'str' => '1;38;5;113',
+ 'note' => '38;5;38',
+ 'ref' => '38;5;247',
+ 'public' => '',
+ 'protected' => '',
+ 'private' => '',
+ 'meta' => '38;5;170',
+ 'key' => '38;5;113',
+ 'index' => '38;5;38',
+ );
- protected static $controlCharsRx = '/[\x00-\x1F\x7F]+/';
- protected static $controlCharsMap = array(
- "\t" => '\t',
- "\n" => '\n',
- "\v" => '\v',
- "\f" => '\f',
- "\r" => '\r',
- "\033" => '\e',
- );
+ protected static $controlCharsRx = '/[\x00-\x1F\x7F]+/';
+ protected static $controlCharsMap = array(
+ "\t" => '\t',
+ "\n" => '\n',
+ "\v" => '\v',
+ "\f" => '\f',
+ "\r" => '\r',
+ "\033" => '\e',
+ );
- /**
- * {@inheritdoc}
- */
- public function __construct($output = null, $charset = null)
- {
- parent::__construct($output, $charset);
+ /**
+ * {@inheritdoc}
+ */
+ public function __construct($output = null, $charset = null, $flags = 0)
+ {
+ parent::__construct($output, $charset, $flags);
- if ('\\' === DIRECTORY_SEPARATOR && false !== @getenv('ANSICON')) {
- // Use only the base 16 xterm colors when using ANSICON
- $this->setStyles(array(
- 'default' => '31',
- 'num' => '1;34',
- 'const' => '1;31',
- 'str' => '1;32',
- 'note' => '34',
- 'ref' => '1;30',
- 'meta' => '35',
- 'key' => '32',
- 'index' => '34',
- ));
- }
- }
+ if ('\\' === DIRECTORY_SEPARATOR && 'ON' !== @getenv('ConEmuANSI') && 'xterm' !== @getenv('TERM')) {
+ // Use only the base 16 xterm colors when using ANSICON or standard Windows 10 CLI
+ $this->setStyles(array(
+ 'default' => '31',
+ 'num' => '1;34',
+ 'const' => '1;31',
+ 'str' => '1;32',
+ 'note' => '34',
+ 'ref' => '1;30',
+ 'meta' => '35',
+ 'key' => '32',
+ 'index' => '34',
+ ));
+ }
+ }
- /**
- * Enables/disables colored output.
- *
- * @param bool $colors
- */
- public function setColors($colors)
- {
- $this->colors = (bool) $colors;
- }
+ /**
+ * Enables/disables colored output.
+ *
+ * @param bool $colors
+ */
+ public function setColors($colors)
+ {
+ $this->colors = (bool) $colors;
+ }
- /**
- * Sets the maximum number of characters per line for dumped strings.
- *
- * @param int $maxStringWidth
- */
- public function setMaxStringWidth($maxStringWidth)
- {
- $this->maxStringWidth = (int) $maxStringWidth;
- }
+ /**
+ * Sets the maximum number of characters per line for dumped strings.
+ *
+ * @param int $maxStringWidth
+ */
+ public function setMaxStringWidth($maxStringWidth)
+ {
+ $this->maxStringWidth = (int) $maxStringWidth;
+ }
- /**
- * Configures styles.
- *
- * @param array $styles A map of style names to style definitions.
- */
- public function setStyles(array $styles)
- {
- $this->styles = $styles + $this->styles;
- }
+ /**
+ * Configures styles.
+ *
+ * @param array $styles A map of style names to style definitions
+ */
+ public function setStyles(array $styles)
+ {
+ $this->styles = $styles + $this->styles;
+ }
- /**
- * {@inheritdoc}
- */
- public function dumpScalar(Cursor $cursor, $type, $value)
- {
- $this->dumpKey($cursor);
+ /**
+ * {@inheritdoc}
+ */
+ public function dumpScalar(Cursor $cursor, $type, $value)
+ {
+ $this->dumpKey($cursor);
- $style = 'const';
- $attr = array();
+ $style = 'const';
+ $attr = $cursor->attr;
- switch ($type) {
- case 'integer':
- $style = 'num';
- break;
+ switch ($type) {
+ case 'default':
+ $style = 'default';
+ break;
- case 'double':
- $style = 'num';
+ case 'integer':
+ $style = 'num';
+ break;
- switch (true) {
- case INF === $value: $value = 'INF'; break;
- case -INF === $value: $value = '-INF'; break;
- case is_nan($value): $value = 'NAN'; break;
- default:
- $value = (string) $value;
- if (false === strpos($value, $this->decimalPoint)) {
- $value .= $this->decimalPoint.'0';
- }
- break;
- }
- break;
+ case 'double':
+ $style = 'num';
- case 'NULL':
- $value = 'null';
- break;
+ switch (true) {
+ case INF === $value: $value = 'INF'; break;
+ case -INF === $value: $value = '-INF'; break;
+ case is_nan($value): $value = 'NAN'; break;
+ default:
+ $value = (string) $value;
+ if (false === strpos($value, $this->decimalPoint)) {
+ $value .= $this->decimalPoint.'0';
+ }
+ break;
+ }
+ break;
- case 'boolean':
- $value = $value ? 'true' : 'false';
- break;
+ case 'NULL':
+ $value = 'null';
+ break;
- default:
- $attr['value'] = isset($value[0]) && !preg_match('//u', $value) ? $this->utf8Encode($value) : $value;
- $value = isset($type[0]) && !preg_match('//u', $type) ? $this->utf8Encode($type) : $type;
- break;
- }
+ case 'boolean':
+ $value = $value ? 'true' : 'false';
+ break;
- $this->line .= $this->style($style, $value, $attr);
+ default:
+ $attr += array('value' => $this->utf8Encode($value));
+ $value = $this->utf8Encode($type);
+ break;
+ }
- $this->dumpLine($cursor->depth, true);
- }
+ $this->line .= $this->style($style, $value, $attr);
- /**
- * {@inheritdoc}
- */
- public function dumpString(Cursor $cursor, $str, $bin, $cut)
- {
- $this->dumpKey($cursor);
+ $this->dumpLine($cursor->depth, true);
+ }
- if ($bin) {
- $str = $this->utf8Encode($str);
- }
- if ('' === $str) {
- $this->line .= '""';
- $this->dumpLine($cursor->depth, true);
- } else {
- $attr = array(
- 'length' => 0 <= $cut ? iconv_strlen($str, 'UTF-8') + $cut : 0,
- 'binary' => $bin,
- );
- $str = explode("\n", $str);
- if (isset($str[1]) && !isset($str[2]) && !isset($str[1][0])) {
- unset($str[1]);
- $str[0] .= "\n";
- }
- $m = count($str) - 1;
- $i = $lineCut = 0;
+ /**
+ * {@inheritdoc}
+ */
+ public function dumpString(Cursor $cursor, $str, $bin, $cut)
+ {
+ $this->dumpKey($cursor);
+ $attr = $cursor->attr;
- if ($bin) {
- $this->line .= 'b';
- }
+ if ($bin) {
+ $str = $this->utf8Encode($str);
+ }
+ if ('' === $str) {
+ $this->line .= '""';
+ $this->dumpLine($cursor->depth, true);
+ } else {
+ $attr += array(
+ 'length' => 0 <= $cut ? mb_strlen($str, 'UTF-8') + $cut : 0,
+ 'binary' => $bin,
+ );
+ $str = explode("\n", $str);
+ if (isset($str[1]) && !isset($str[2]) && !isset($str[1][0])) {
+ unset($str[1]);
+ $str[0] .= "\n";
+ }
+ $m = count($str) - 1;
+ $i = $lineCut = 0;
- if ($m) {
- $this->line .= '"""';
- $this->dumpLine($cursor->depth);
- } else {
- $this->line .= '"';
- }
+ if (self::DUMP_STRING_LENGTH & $this->flags) {
+ $this->line .= '('.$attr['length'].') ';
+ }
+ if ($bin) {
+ $this->line .= 'b';
+ }
- foreach ($str as $str) {
- if ($i < $m) {
- $str .= "\n";
- }
- if (0 < $this->maxStringWidth && $this->maxStringWidth < $len = iconv_strlen($str, 'UTF-8')) {
- $str = iconv_substr($str, 0, $this->maxStringWidth, 'UTF-8');
- $lineCut = $len - $this->maxStringWidth;
- }
- if ($m && 0 < $cursor->depth) {
- $this->line .= $this->indentPad;
- }
- if ('' !== $str) {
- $this->line .= $this->style('str', $str, $attr);
- }
- if ($i++ == $m) {
- if ($m) {
- if ('' !== $str) {
- $this->dumpLine($cursor->depth);
- if (0 < $cursor->depth) {
- $this->line .= $this->indentPad;
- }
- }
- $this->line .= '"""';
- } else {
- $this->line .= '"';
- }
- if ($cut < 0) {
- $this->line .= '…';
- $lineCut = 0;
- } elseif ($cut) {
- $lineCut += $cut;
- }
- }
- if ($lineCut) {
- $this->line .= '…'.$lineCut;
- $lineCut = 0;
- }
+ if ($m) {
+ $this->line .= '"""';
+ $this->dumpLine($cursor->depth);
+ } else {
+ $this->line .= '"';
+ }
- $this->dumpLine($cursor->depth, $i > $m);
- }
- }
- }
+ foreach ($str as $str) {
+ if ($i < $m) {
+ $str .= "\n";
+ }
+ if (0 < $this->maxStringWidth && $this->maxStringWidth < $len = mb_strlen($str, 'UTF-8')) {
+ $str = mb_substr($str, 0, $this->maxStringWidth, 'UTF-8');
+ $lineCut = $len - $this->maxStringWidth;
+ }
+ if ($m && 0 < $cursor->depth) {
+ $this->line .= $this->indentPad;
+ }
+ if ('' !== $str) {
+ $this->line .= $this->style('str', $str, $attr);
+ }
+ if ($i++ == $m) {
+ if ($m) {
+ if ('' !== $str) {
+ $this->dumpLine($cursor->depth);
+ if (0 < $cursor->depth) {
+ $this->line .= $this->indentPad;
+ }
+ }
+ $this->line .= '"""';
+ } else {
+ $this->line .= '"';
+ }
+ if ($cut < 0) {
+ $this->line .= '…';
+ $lineCut = 0;
+ } elseif ($cut) {
+ $lineCut += $cut;
+ }
+ }
+ if ($lineCut) {
+ $this->line .= '…'.$lineCut;
+ $lineCut = 0;
+ }
- /**
- * {@inheritdoc}
- */
- public function enterHash(Cursor $cursor, $type, $class, $hasChild)
- {
- $this->dumpKey($cursor);
+ $this->dumpLine($cursor->depth, $i > $m);
+ }
+ }
+ }
- if (!preg_match('//u', $class)) {
- $class = $this->utf8Encode($class);
- }
- if (Cursor::HASH_OBJECT === $type) {
- $prefix = $class && 'stdClass' !== $class ? $this->style('note', $class).' {' : '{';
- } elseif (Cursor::HASH_RESOURCE === $type) {
- $prefix = $this->style('note', $class.' resource').($hasChild ? ' {' : ' ');
- } else {
- $prefix = $class ? $this->style('note', 'array:'.$class).' [' : '[';
- }
+ /**
+ * {@inheritdoc}
+ */
+ public function enterHash(Cursor $cursor, $type, $class, $hasChild)
+ {
+ $this->dumpKey($cursor);
- if ($cursor->softRefCount || 0 < $cursor->softRefHandle) {
- $prefix .= $this->style('ref', (Cursor::HASH_RESOURCE === $type ? '@' : '#').(0 < $cursor->softRefHandle ? $cursor->softRefHandle : $cursor->softRefTo), array('count' => $cursor->softRefCount));
- } elseif ($cursor->hardRefTo && !$cursor->refIndex && $class) {
- $prefix .= $this->style('ref', '&'.$cursor->hardRefTo, array('count' => $cursor->hardRefCount));
- } elseif (!$hasChild && Cursor::HASH_RESOURCE === $type) {
- $prefix = substr($prefix, 0, -1);
- }
+ $class = $this->utf8Encode($class);
+ if (Cursor::HASH_OBJECT === $type) {
+ $prefix = $class && 'stdClass' !== $class ? $this->style('note', $class).' {' : '{';
+ } elseif (Cursor::HASH_RESOURCE === $type) {
+ $prefix = $this->style('note', $class.' resource').($hasChild ? ' {' : ' ');
+ } else {
+ $prefix = $class && !(self::DUMP_LIGHT_ARRAY & $this->flags) ? $this->style('note', 'array:'.$class).' [' : '[';
+ }
- $this->line .= $prefix;
+ if ($cursor->softRefCount || 0 < $cursor->softRefHandle) {
+ $prefix .= $this->style('ref', (Cursor::HASH_RESOURCE === $type ? '@' : '#').(0 < $cursor->softRefHandle ? $cursor->softRefHandle : $cursor->softRefTo), array('count' => $cursor->softRefCount));
+ } elseif ($cursor->hardRefTo && !$cursor->refIndex && $class) {
+ $prefix .= $this->style('ref', '&'.$cursor->hardRefTo, array('count' => $cursor->hardRefCount));
+ } elseif (!$hasChild && Cursor::HASH_RESOURCE === $type) {
+ $prefix = substr($prefix, 0, -1);
+ }
- if ($hasChild) {
- $this->dumpLine($cursor->depth);
- }
- }
+ $this->line .= $prefix;
- /**
- * {@inheritdoc}
- */
- public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut)
- {
- $this->dumpEllipsis($cursor, $hasChild, $cut);
- $this->line .= Cursor::HASH_OBJECT === $type ? '}' : (Cursor::HASH_RESOURCE !== $type ? ']' : ($hasChild ? '}' : ''));
- $this->dumpLine($cursor->depth, true);
- }
+ if ($hasChild) {
+ $this->dumpLine($cursor->depth);
+ }
+ }
- /**
- * Dumps an ellipsis for cut children.
- *
- * @param Cursor $cursor The Cursor position in the dump.
- * @param bool $hasChild When the dump of the hash has child item.
- * @param int $cut The number of items the hash has been cut by.
- */
- protected function dumpEllipsis(Cursor $cursor, $hasChild, $cut)
- {
- if ($cut) {
- $this->line .= ' …';
- if (0 < $cut) {
- $this->line .= $cut;
- }
- if ($hasChild) {
- $this->dumpLine($cursor->depth + 1);
- }
- }
- }
+ /**
+ * {@inheritdoc}
+ */
+ public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut)
+ {
+ $this->dumpEllipsis($cursor, $hasChild, $cut);
+ $this->line .= Cursor::HASH_OBJECT === $type ? '}' : (Cursor::HASH_RESOURCE !== $type ? ']' : ($hasChild ? '}' : ''));
+ $this->dumpLine($cursor->depth, true);
+ }
- /**
- * Dumps a key in a hash structure.
- *
- * @param Cursor $cursor The Cursor position in the dump.
- */
- protected function dumpKey(Cursor $cursor)
- {
- if (null !== $key = $cursor->hashKey) {
- if ($cursor->hashKeyIsBinary) {
- $key = $this->utf8Encode($key);
- }
- $attr = array('binary' => $cursor->hashKeyIsBinary);
- $bin = $cursor->hashKeyIsBinary ? 'b' : '';
- $style = 'key';
- switch ($cursor->hashType) {
- default:
- case Cursor::HASH_INDEXED:
- $style = 'index';
- case Cursor::HASH_ASSOC:
- if (is_int($key)) {
- $this->line .= $this->style($style, $key).' => ';
- } else {
- $this->line .= $bin.'"'.$this->style($style, $key).'" => ';
- }
- break;
+ /**
+ * Dumps an ellipsis for cut children.
+ *
+ * @param Cursor $cursor The Cursor position in the dump
+ * @param bool $hasChild When the dump of the hash has child item
+ * @param int $cut The number of items the hash has been cut by
+ */
+ protected function dumpEllipsis(Cursor $cursor, $hasChild, $cut)
+ {
+ if ($cut) {
+ $this->line .= ' …';
+ if (0 < $cut) {
+ $this->line .= $cut;
+ }
+ if ($hasChild) {
+ $this->dumpLine($cursor->depth + 1);
+ }
+ }
+ }
- case Cursor::HASH_RESOURCE:
- $key = "\0~\0".$key;
- // No break;
- case Cursor::HASH_OBJECT:
- if (!isset($key[0]) || "\0" !== $key[0]) {
- $this->line .= '+'.$bin.$this->style('public', $key).': ';
- } elseif (0 < strpos($key, "\0", 1)) {
- $key = explode("\0", substr($key, 1), 2);
+ /**
+ * Dumps a key in a hash structure.
+ *
+ * @param Cursor $cursor The Cursor position in the dump
+ */
+ protected function dumpKey(Cursor $cursor)
+ {
+ if (null !== $key = $cursor->hashKey) {
+ if ($cursor->hashKeyIsBinary) {
+ $key = $this->utf8Encode($key);
+ }
+ $attr = array('binary' => $cursor->hashKeyIsBinary);
+ $bin = $cursor->hashKeyIsBinary ? 'b' : '';
+ $style = 'key';
+ switch ($cursor->hashType) {
+ default:
+ case Cursor::HASH_INDEXED:
+ if (self::DUMP_LIGHT_ARRAY & $this->flags) {
+ break;
+ }
+ $style = 'index';
+ case Cursor::HASH_ASSOC:
+ if (is_int($key)) {
+ $this->line .= $this->style($style, $key).' => ';
+ } else {
+ $this->line .= $bin.'"'.$this->style($style, $key).'" => ';
+ }
+ break;
- switch ($key[0]) {
- case '+': // User inserted keys
- $attr['dynamic'] = true;
- $this->line .= '+'.$bin.'"'.$this->style('public', $key[1], $attr).'": ';
- break 2;
- case '~':
- $style = 'meta';
- break;
- case '*':
- $style = 'protected';
- $bin = '#'.$bin;
- break;
- default:
- $attr['class'] = $key[0];
- $style = 'private';
- $bin = '-'.$bin;
- break;
- }
+ case Cursor::HASH_RESOURCE:
+ $key = "\0~\0".$key;
+ // No break;
+ case Cursor::HASH_OBJECT:
+ if (!isset($key[0]) || "\0" !== $key[0]) {
+ $this->line .= '+'.$bin.$this->style('public', $key).': ';
+ } elseif (0 < strpos($key, "\0", 1)) {
+ $key = explode("\0", substr($key, 1), 2);
- $this->line .= $bin.$this->style($style, $key[1], $attr).': ';
- } else {
- // This case should not happen
- $this->line .= '-'.$bin.'"'.$this->style('private', $key, array('class' => '')).'": ';
- }
- break;
- }
+ switch ($key[0][0]) {
+ case '+': // User inserted keys
+ $attr['dynamic'] = true;
+ $this->line .= '+'.$bin.'"'.$this->style('public', $key[1], $attr).'": ';
+ break 2;
+ case '~':
+ $style = 'meta';
+ if (isset($key[0][1])) {
+ parse_str(substr($key[0], 1), $attr);
+ $attr += array('binary' => $cursor->hashKeyIsBinary);
+ }
+ break;
+ case '*':
+ $style = 'protected';
+ $bin = '#'.$bin;
+ break;
+ default:
+ $attr['class'] = $key[0];
+ $style = 'private';
+ $bin = '-'.$bin;
+ break;
+ }
- if ($cursor->hardRefTo) {
- $this->line .= $this->style('ref', '&'.($cursor->hardRefCount ? $cursor->hardRefTo : ''), array('count' => $cursor->hardRefCount)).' ';
- }
- }
- }
+ $this->line .= $bin.$this->style($style, $key[1], $attr).': ';
+ } else {
+ // This case should not happen
+ $this->line .= '-'.$bin.'"'.$this->style('private', $key, array('class' => '')).'": ';
+ }
+ break;
+ }
- /**
- * Decorates a value with some style.
- *
- * @param string $style The type of style being applied.
- * @param string $value The value being styled.
- * @param array $attr Optional context information.
- *
- * @return string The value with style decoration.
- */
- protected function style($style, $value, $attr = array())
- {
- if (null === $this->colors) {
- $this->colors = $this->supportsColors();
- }
+ if ($cursor->hardRefTo) {
+ $this->line .= $this->style('ref', '&'.($cursor->hardRefCount ? $cursor->hardRefTo : ''), array('count' => $cursor->hardRefCount)).' ';
+ }
+ }
+ }
- $style = $this->styles[$style];
+ /**
+ * Decorates a value with some style.
+ *
+ * @param string $style The type of style being applied
+ * @param string $value The value being styled
+ * @param array $attr Optional context information
+ *
+ * @return string The value with style decoration
+ */
+ protected function style($style, $value, $attr = array())
+ {
+ if (null === $this->colors) {
+ $this->colors = $this->supportsColors();
+ }
- $map = static::$controlCharsMap;
- $startCchr = $this->colors ? "\033[m\033[{$this->styles['default']}m" : '';
- $endCchr = $this->colors ? "\033[m\033[{$style}m" : '';
- $value = preg_replace_callback(static::$controlCharsRx, function ($c) use ($map, $startCchr, $endCchr) {
- $s = $startCchr;
- $c = $c[$i = 0];
- do {
- $s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', ord($c[$i]));
- } while (isset($c[++$i]));
+ $style = $this->styles[$style];
- return $s.$endCchr;
- }, $value, -1, $cchrCount);
+ $map = static::$controlCharsMap;
+ $startCchr = $this->colors ? "\033[m\033[{$this->styles['default']}m" : '';
+ $endCchr = $this->colors ? "\033[m\033[{$style}m" : '';
+ $value = preg_replace_callback(static::$controlCharsRx, function ($c) use ($map, $startCchr, $endCchr) {
+ $s = $startCchr;
+ $c = $c[$i = 0];
+ do {
+ $s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', ord($c[$i]));
+ } while (isset($c[++$i]));
- if ($this->colors) {
- if ($cchrCount && "\033" === $value[0]) {
- $value = substr($value, strlen($startCchr));
- } else {
- $value = "\033[{$style}m".$value;
- }
- if ($cchrCount && $endCchr === substr($value, -strlen($endCchr))) {
- $value = substr($value, 0, -strlen($endCchr));
- } else {
- $value .= "\033[{$this->styles['default']}m";
- }
- }
+ return $s.$endCchr;
+ }, $value, -1, $cchrCount);
- return $value;
- }
+ if ($this->colors) {
+ if ($cchrCount && "\033" === $value[0]) {
+ $value = substr($value, strlen($startCchr));
+ } else {
+ $value = "\033[{$style}m".$value;
+ }
+ if ($cchrCount && $endCchr === substr($value, -strlen($endCchr))) {
+ $value = substr($value, 0, -strlen($endCchr));
+ } else {
+ $value .= "\033[{$this->styles['default']}m";
+ }
+ }
- /**
- * @return bool Tells if the current output stream supports ANSI colors or not.
- */
- protected function supportsColors()
- {
- if ($this->outputStream !== static::$defaultOutput) {
- return @(is_resource($this->outputStream) && function_exists('posix_isatty') && posix_isatty($this->outputStream));
- }
- if (null !== static::$defaultColors) {
- return static::$defaultColors;
- }
- if (isset($_SERVER['argv'][1])) {
- $colors = $_SERVER['argv'];
- $i = count($colors);
- while (--$i > 0) {
- if (isset($colors[$i][5])) {
- switch ($colors[$i]) {
- case '--ansi':
- case '--color':
- case '--color=yes':
- case '--color=force':
- case '--color=always':
- return static::$defaultColors = true;
+ return $value;
+ }
- case '--no-ansi':
- case '--color=no':
- case '--color=none':
- case '--color=never':
- return static::$defaultColors = false;
- }
- }
- }
- }
+ /**
+ * @return bool Tells if the current output stream supports ANSI colors or not
+ */
+ protected function supportsColors()
+ {
+ if ($this->outputStream !== static::$defaultOutput) {
+ return @(is_resource($this->outputStream) && function_exists('posix_isatty') && posix_isatty($this->outputStream));
+ }
+ if (null !== static::$defaultColors) {
+ return static::$defaultColors;
+ }
+ if (isset($_SERVER['argv'][1])) {
+ $colors = $_SERVER['argv'];
+ $i = count($colors);
+ while (--$i > 0) {
+ if (isset($colors[$i][5])) {
+ switch ($colors[$i]) {
+ case '--ansi':
+ case '--color':
+ case '--color=yes':
+ case '--color=force':
+ case '--color=always':
+ return static::$defaultColors = true;
- if ('\\' === DIRECTORY_SEPARATOR) {
- static::$defaultColors = @(false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM'));
- } elseif (function_exists('posix_isatty')) {
- $h = stream_get_meta_data($this->outputStream) + array('wrapper_type' => null);
- $h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'wb') : $this->outputStream;
- static::$defaultColors = @posix_isatty($h);
- } else {
- static::$defaultColors = false;
- }
+ case '--no-ansi':
+ case '--color=no':
+ case '--color=none':
+ case '--color=never':
+ return static::$defaultColors = false;
+ }
+ }
+ }
+ }
- return static::$defaultColors;
- }
+ if ('\\' === DIRECTORY_SEPARATOR) {
+ static::$defaultColors = @(
+ '10.0.10586' === PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD
+ || false !== getenv('ANSICON')
+ || 'ON' === getenv('ConEmuANSI')
+ || 'xterm' === getenv('TERM')
+ );
+ } elseif (function_exists('posix_isatty')) {
+ $h = stream_get_meta_data($this->outputStream) + array('wrapper_type' => null);
+ $h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'wb') : $this->outputStream;
+ static::$defaultColors = @posix_isatty($h);
+ } else {
+ static::$defaultColors = false;
+ }
- /**
- * {@inheritdoc}
- */
- protected function dumpLine($depth, $endOfValue = false)
- {
- if ($this->colors) {
- $this->line = sprintf("\033[%sm%s\033[m", $this->styles['default'], $this->line);
- }
- parent::dumpLine($depth);
- }
+ return static::$defaultColors;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function dumpLine($depth, $endOfValue = false)
+ {
+ if ($this->colors) {
+ $this->line = sprintf("\033[%sm%s\033[m", $this->styles['default'], $this->line);
+ }
+ parent::dumpLine($depth);
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Dumper/DataDumperInterface.php b/htdocs/includes/symfony/var-dumper/Dumper/DataDumperInterface.php
index ee6060cebf6..abaa85c19bd 100644
--- a/htdocs/includes/symfony/var-dumper/Dumper/DataDumperInterface.php
+++ b/htdocs/includes/symfony/var-dumper/Dumper/DataDumperInterface.php
@@ -20,10 +20,10 @@ use Symfony\Component\VarDumper\Cloner\Data;
*/
interface DataDumperInterface
{
- /**
- * Dumps a Data object.
- *
- * @param Data $data A Data object.
- */
- public function dump(Data $data);
+ /**
+ * Dumps a Data object.
+ *
+ * @param Data $data A Data object
+ */
+ public function dump(Data $data);
}
diff --git a/htdocs/includes/symfony/var-dumper/Dumper/HtmlDumper.php b/htdocs/includes/symfony/var-dumper/Dumper/HtmlDumper.php
index 28af8e4cb22..10a3ffa41c0 100644
--- a/htdocs/includes/symfony/var-dumper/Dumper/HtmlDumper.php
+++ b/htdocs/includes/symfony/var-dumper/Dumper/HtmlDumper.php
@@ -21,103 +21,114 @@ use Symfony\Component\VarDumper\Cloner\Data;
*/
class HtmlDumper extends CliDumper
{
- public static $defaultOutput = 'php://output';
+ public static $defaultOutput = 'php://output';
- protected $dumpHeader;
- protected $dumpPrefix = '
*/
-class CasterTest extends \PHPUnit_Framework_TestCase
+class CasterTest extends TestCase
{
- use VarDumperTestTrait;
+ use VarDumperTestTrait;
- private $referenceArray = array(
- 'null' => null,
- 'empty' => false,
- 'public' => 'pub',
- "\0~\0virtual" => 'virt',
- "\0+\0dynamic" => 'dyn',
- "\0*\0protected" => 'prot',
- "\0Foo\0private" => 'priv',
- );
+ private $referenceArray = array(
+ 'null' => null,
+ 'empty' => false,
+ 'public' => 'pub',
+ "\0~\0virtual" => 'virt',
+ "\0+\0dynamic" => 'dyn',
+ "\0*\0protected" => 'prot',
+ "\0Foo\0private" => 'priv',
+ );
- /**
- * @dataProvider provideFilter
- */
- public function testFilter($filter, $expectedDiff, $listedProperties = null)
- {
- if (null === $listedProperties) {
- $filteredArray = Caster::filter($this->referenceArray, $filter);
- } else {
- $filteredArray = Caster::filter($this->referenceArray, $filter, $listedProperties);
- }
+ /**
+ * @dataProvider provideFilter
+ */
+ public function testFilter($filter, $expectedDiff, $listedProperties = null)
+ {
+ if (null === $listedProperties) {
+ $filteredArray = Caster::filter($this->referenceArray, $filter);
+ } else {
+ $filteredArray = Caster::filter($this->referenceArray, $filter, $listedProperties);
+ }
- $this->assertSame($expectedDiff, array_diff_assoc($this->referenceArray, $filteredArray));
- }
+ $this->assertSame($expectedDiff, array_diff_assoc($this->referenceArray, $filteredArray));
+ }
- public function provideFilter()
- {
- return array(
- array(
- 0,
- array(),
- ),
- array(
- Caster::EXCLUDE_PUBLIC,
- array(
- 'null' => null,
- 'empty' => false,
- 'public' => 'pub',
- ),
- ),
- array(
- Caster::EXCLUDE_NULL,
- array(
- 'null' => null,
- ),
- ),
- array(
- Caster::EXCLUDE_EMPTY,
- array(
- 'null' => null,
- 'empty' => false,
- ),
- ),
- array(
- Caster::EXCLUDE_VIRTUAL,
- array(
- "\0~\0virtual" => 'virt',
- ),
- ),
- array(
- Caster::EXCLUDE_DYNAMIC,
- array(
- "\0+\0dynamic" => 'dyn',
- ),
- ),
- array(
- Caster::EXCLUDE_PROTECTED,
- array(
- "\0*\0protected" => 'prot',
- ),
- ),
- array(
- Caster::EXCLUDE_PRIVATE,
- array(
- "\0Foo\0private" => 'priv',
- ),
- ),
- array(
- Caster::EXCLUDE_VERBOSE,
- array(
- 'public' => 'pub',
- "\0*\0protected" => 'prot',
- ),
- array('public', "\0*\0protected"),
- ),
- array(
- Caster::EXCLUDE_NOT_IMPORTANT,
- array(
- 'null' => null,
- 'empty' => false,
- "\0~\0virtual" => 'virt',
- "\0+\0dynamic" => 'dyn',
- "\0Foo\0private" => 'priv',
- ),
- array('public', "\0*\0protected"),
- ),
- array(
- Caster::EXCLUDE_VIRTUAL | Caster::EXCLUDE_DYNAMIC,
- array(
- "\0~\0virtual" => 'virt',
- "\0+\0dynamic" => 'dyn',
- ),
- ),
- array(
- Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_VERBOSE,
- $this->referenceArray,
- array('public', "\0*\0protected"),
- ),
- array(
- Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_EMPTY,
- array(
- 'null' => null,
- 'empty' => false,
- "\0~\0virtual" => 'virt',
- "\0+\0dynamic" => 'dyn',
- "\0*\0protected" => 'prot',
- "\0Foo\0private" => 'priv',
- ),
- array('public', 'empty'),
- ),
- array(
- Caster::EXCLUDE_VERBOSE | Caster::EXCLUDE_EMPTY | Caster::EXCLUDE_STRICT,
- array(
- 'empty' => false,
- ),
- array('public', 'empty'),
- ),
- );
- }
+ public function provideFilter()
+ {
+ return array(
+ array(
+ 0,
+ array(),
+ ),
+ array(
+ Caster::EXCLUDE_PUBLIC,
+ array(
+ 'null' => null,
+ 'empty' => false,
+ 'public' => 'pub',
+ ),
+ ),
+ array(
+ Caster::EXCLUDE_NULL,
+ array(
+ 'null' => null,
+ ),
+ ),
+ array(
+ Caster::EXCLUDE_EMPTY,
+ array(
+ 'null' => null,
+ 'empty' => false,
+ ),
+ ),
+ array(
+ Caster::EXCLUDE_VIRTUAL,
+ array(
+ "\0~\0virtual" => 'virt',
+ ),
+ ),
+ array(
+ Caster::EXCLUDE_DYNAMIC,
+ array(
+ "\0+\0dynamic" => 'dyn',
+ ),
+ ),
+ array(
+ Caster::EXCLUDE_PROTECTED,
+ array(
+ "\0*\0protected" => 'prot',
+ ),
+ ),
+ array(
+ Caster::EXCLUDE_PRIVATE,
+ array(
+ "\0Foo\0private" => 'priv',
+ ),
+ ),
+ array(
+ Caster::EXCLUDE_VERBOSE,
+ array(
+ 'public' => 'pub',
+ "\0*\0protected" => 'prot',
+ ),
+ array('public', "\0*\0protected"),
+ ),
+ array(
+ Caster::EXCLUDE_NOT_IMPORTANT,
+ array(
+ 'null' => null,
+ 'empty' => false,
+ "\0~\0virtual" => 'virt',
+ "\0+\0dynamic" => 'dyn',
+ "\0Foo\0private" => 'priv',
+ ),
+ array('public', "\0*\0protected"),
+ ),
+ array(
+ Caster::EXCLUDE_VIRTUAL | Caster::EXCLUDE_DYNAMIC,
+ array(
+ "\0~\0virtual" => 'virt',
+ "\0+\0dynamic" => 'dyn',
+ ),
+ ),
+ array(
+ Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_VERBOSE,
+ $this->referenceArray,
+ array('public', "\0*\0protected"),
+ ),
+ array(
+ Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_EMPTY,
+ array(
+ 'null' => null,
+ 'empty' => false,
+ "\0~\0virtual" => 'virt',
+ "\0+\0dynamic" => 'dyn',
+ "\0*\0protected" => 'prot',
+ "\0Foo\0private" => 'priv',
+ ),
+ array('public', 'empty'),
+ ),
+ array(
+ Caster::EXCLUDE_VERBOSE | Caster::EXCLUDE_EMPTY | Caster::EXCLUDE_STRICT,
+ array(
+ 'empty' => false,
+ ),
+ array('public', 'empty'),
+ ),
+ );
+ }
- /**
- * @requires PHP 7.0
- */
- public function testAnonymousClass()
- {
- $c = eval('return new class extends stdClass { private $foo = "foo"; };');
+ /**
+ * @requires PHP 7.0
+ */
+ public function testAnonymousClass()
+ {
+ $c = eval('return new class extends stdClass { private $foo = "foo"; };');
- $this->assertDumpMatchesFormat(
- <<<'EOTXT'
+ $this->assertDumpMatchesFormat(
+ <<<'EOTXT'
stdClass@anonymous {
-foo: "foo"
}
EOTXT
- , $c
- );
+ , $c
+ );
- $c = eval('return new class { private $foo = "foo"; };');
+ $c = eval('return new class { private $foo = "foo"; };');
- $this->assertDumpMatchesFormat(
- <<<'EOTXT'
+ $this->assertDumpMatchesFormat(
+ <<<'EOTXT'
@anonymous {
-foo: "foo"
}
EOTXT
- , $c
- );
- }
+ , $c
+ );
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php b/htdocs/includes/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php
new file mode 100644
index 00000000000..2e348040f31
--- /dev/null
+++ b/htdocs/includes/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php
@@ -0,0 +1,225 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\VarDumper\Tests\Caster;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\VarDumper\Caster\ExceptionCaster;
+use Symfony\Component\VarDumper\Caster\FrameStub;
+use Symfony\Component\VarDumper\Cloner\VarCloner;
+use Symfony\Component\VarDumper\Dumper\HtmlDumper;
+use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
+
+class ExceptionCasterTest extends TestCase
+{
+ use VarDumperTestTrait;
+
+ private function getTestException($msg, &$ref = null)
+ {
+ return new \Exception(''.$msg);
+ }
+
+ protected function tearDown()
+ {
+ ExceptionCaster::$srcContext = 1;
+ ExceptionCaster::$traceArgs = true;
+ }
+
+ public function testDefaultSettings()
+ {
+ $ref = array('foo');
+ $e = $this->getTestException('foo', $ref);
+
+ $expectedDump = <<<'EODUMP'
+Exception {
+ #message: "foo"
+ #code: 0
+ #file: "%sExceptionCasterTest.php"
+ #line: 27
+ -trace: {
+ %sExceptionCasterTest.php:27: {
+ : {
+ : return new \Exception(''.$msg);
+ : }
+ }
+ %sExceptionCasterTest.php:%d: {
+ : $ref = array('foo');
+ : $e = $this->getTestException('foo', $ref);
+ :
+ arguments: {
+ $msg: "foo"
+ &$ref: array:1 [ …1]
+ }
+ }
+%A
+EODUMP;
+
+ $this->assertDumpMatchesFormat($expectedDump, $e);
+ $this->assertSame(array('foo'), $ref);
+ }
+
+ public function testSeek()
+ {
+ $e = $this->getTestException(2);
+
+ $expectedDump = <<<'EODUMP'
+{
+ %sExceptionCasterTest.php:27: {
+ : {
+ : return new \Exception(''.$msg);
+ : }
+ }
+ %sExceptionCasterTest.php:%d: {
+ : {
+ : $e = $this->getTestException(2);
+ :
+ arguments: {
+ $msg: 2
+ }
+ }
+%A
+EODUMP;
+
+ $this->assertStringMatchesFormat($expectedDump, $this->getDump($e, 'trace'));
+ }
+
+ public function testNoArgs()
+ {
+ $e = $this->getTestException(1);
+ ExceptionCaster::$traceArgs = false;
+
+ $expectedDump = <<<'EODUMP'
+Exception {
+ #message: "1"
+ #code: 0
+ #file: "%sExceptionCasterTest.php"
+ #line: 27
+ -trace: {
+ %sExceptionCasterTest.php:27: {
+ : {
+ : return new \Exception(''.$msg);
+ : }
+ }
+ %sExceptionCasterTest.php:%d: {
+ : {
+ : $e = $this->getTestException(1);
+ : ExceptionCaster::$traceArgs = false;
+ }
+%A
+EODUMP;
+
+ $this->assertDumpMatchesFormat($expectedDump, $e);
+ }
+
+ public function testNoSrcContext()
+ {
+ $e = $this->getTestException(1);
+ ExceptionCaster::$srcContext = -1;
+
+ $expectedDump = <<<'EODUMP'
+Exception {
+ #message: "1"
+ #code: 0
+ #file: "%sExceptionCasterTest.php"
+ #line: 27
+ -trace: {
+ %sExceptionCasterTest.php: 27
+ %sExceptionCasterTest.php: %d
+%A
+EODUMP;
+
+ $this->assertDumpMatchesFormat($expectedDump, $e);
+ }
+
+ public function testHtmlDump()
+ {
+ $e = $this->getTestException(1);
+ ExceptionCaster::$srcContext = -1;
+
+ $cloner = new VarCloner();
+ $cloner->setMaxItems(1);
+ $dumper = new HtmlDumper();
+ $dumper->setDumpHeader('
*/
-class PdoCasterTest extends \PHPUnit_Framework_TestCase
+class PdoCasterTest extends TestCase
{
- /**
- * @requires extension pdo_sqlite
- */
- public function testCastPdo()
- {
- $pdo = new \PDO('sqlite::memory:');
- $pdo->setAttribute(\PDO::ATTR_STATEMENT_CLASS, array('PDOStatement', array($pdo)));
+ use VarDumperTestTrait;
- $cast = PdoCaster::castPdo($pdo, array(), new Stub(), false);
+ /**
+ * @requires extension pdo_sqlite
+ */
+ public function testCastPdo()
+ {
+ $pdo = new \PDO('sqlite::memory:');
+ $pdo->setAttribute(\PDO::ATTR_STATEMENT_CLASS, array('PDOStatement', array($pdo)));
- $this->assertInstanceOf('Symfony\Component\VarDumper\Caster\EnumStub', $cast["\0~\0attributes"]);
+ $cast = PdoCaster::castPdo($pdo, array(), new Stub(), false);
- $attr = $cast["\0~\0attributes"] = $cast["\0~\0attributes"]->value;
- $this->assertInstanceOf('Symfony\Component\VarDumper\Caster\ConstStub', $attr['CASE']);
- $this->assertSame('NATURAL', $attr['CASE']->class);
- $this->assertSame('BOTH', $attr['DEFAULT_FETCH_MODE']->class);
+ $this->assertInstanceOf('Symfony\Component\VarDumper\Caster\EnumStub', $cast["\0~\0attributes"]);
- $xCast = array(
- "\0~\0inTransaction" => $pdo->inTransaction(),
- "\0~\0attributes" => array(
- 'CASE' => $attr['CASE'],
- 'ERRMODE' => $attr['ERRMODE'],
- 'PERSISTENT' => false,
- 'DRIVER_NAME' => 'sqlite',
- 'ORACLE_NULLS' => $attr['ORACLE_NULLS'],
- 'CLIENT_VERSION' => $pdo->getAttribute(\PDO::ATTR_CLIENT_VERSION),
- 'SERVER_VERSION' => $pdo->getAttribute(\PDO::ATTR_SERVER_VERSION),
- 'STATEMENT_CLASS' => array('PDOStatement'),
- 'DEFAULT_FETCH_MODE' => $attr['DEFAULT_FETCH_MODE'],
- ),
- );
- unset($cast["\0~\0attributes"]['STATEMENT_CLASS'][1]);
+ $attr = $cast["\0~\0attributes"] = $cast["\0~\0attributes"]->value;
+ $this->assertInstanceOf('Symfony\Component\VarDumper\Caster\ConstStub', $attr['CASE']);
+ $this->assertSame('NATURAL', $attr['CASE']->class);
+ $this->assertSame('BOTH', $attr['DEFAULT_FETCH_MODE']->class);
- $this->assertSame($xCast, $cast);
- }
+ $xDump = <<<'EODUMP'
+array:2 [
+ "\x00~\x00inTransaction" => false
+ "\x00~\x00attributes" => array:9 [
+ "CASE" => NATURAL
+ "ERRMODE" => SILENT
+ "PERSISTENT" => false
+ "DRIVER_NAME" => "sqlite"
+ "ORACLE_NULLS" => NATURAL
+ "CLIENT_VERSION" => "%s"
+ "SERVER_VERSION" => "%s"
+ "STATEMENT_CLASS" => array:%d [
+ 0 => "PDOStatement"%A
+ ]
+ "DEFAULT_FETCH_MODE" => BOTH
+ ]
+]
+EODUMP;
+
+ $this->assertDumpMatchesFormat($xDump, $cast);
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Tests/Caster/RedisCasterTest.php b/htdocs/includes/symfony/var-dumper/Tests/Caster/RedisCasterTest.php
new file mode 100644
index 00000000000..b096dfe7b6f
--- /dev/null
+++ b/htdocs/includes/symfony/var-dumper/Tests/Caster/RedisCasterTest.php
@@ -0,0 +1,85 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\VarDumper\Tests\Caster;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
+
+/**
+ * @author Nicolas Grekas
+ * @requires extension redis
+ */
+class RedisCasterTest extends TestCase
+{
+ use VarDumperTestTrait;
+
+ public function testNotConnected()
+ {
+ $redis = new \Redis();
+
+ if (defined('HHVM_VERSION_ID')) {
+ $xCast = <<<'EODUMP'
+Redis {
+ #host: ""
+%A
+}
+EODUMP;
+ } else {
+ $xCast = <<<'EODUMP'
+Redis {
+ isConnected: false
+}
+EODUMP;
+ }
+
+ $this->assertDumpMatchesFormat($xCast, $redis);
+ }
+
+ public function testConnected()
+ {
+ $redis = new \Redis();
+ if (!@$redis->connect('127.0.0.1')) {
+ $e = error_get_last();
+ self::markTestSkipped($e['message']);
+ }
+
+ if (defined('HHVM_VERSION_ID')) {
+ $xCast = <<<'EODUMP'
+Redis {
+ #host: "127.0.0.1"
+%A
+}
+EODUMP;
+ } else {
+ $xCast = <<<'EODUMP'
+Redis {
+ +"socket": Redis Socket Buffer resource
+ isConnected: true
+ host: "127.0.0.1"
+ port: 6379
+ auth: null
+ dbNum: 0
+ timeout: 0.0
+ persistentId: null
+ options: {
+ READ_TIMEOUT: 0.0
+ SERIALIZER: NONE
+ PREFIX: null
+ SCAN: NORETRY
+ }
+}
+EODUMP;
+ }
+
+ $this->assertDumpMatchesFormat($xCast, $redis);
+ }
+}
diff --git a/htdocs/includes/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php b/htdocs/includes/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
index 0d7147fbcd2..63500b9ef4d 100644
--- a/htdocs/includes/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
+++ b/htdocs/includes/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
@@ -11,22 +11,24 @@
namespace Symfony\Component\VarDumper\Tests\Caster;
+use PHPUnit\Framework\TestCase;
use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
use Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo;
+use Symfony\Component\VarDumper\Tests\Fixtures\NotLoadableClass;
/**
* @author Nicolas Grekas
*/
-class ReflectionCasterTest extends \PHPUnit_Framework_TestCase
+class ReflectionCasterTest extends TestCase
{
- use VarDumperTestTrait;
+ use VarDumperTestTrait;
- public function testReflectionCaster()
- {
- $var = new \ReflectionClass('ReflectionClass');
+ public function testReflectionCaster()
+ {
+ $var = new \ReflectionClass('ReflectionClass');
- $this->assertDumpMatchesFormat(
- <<<'EOTXT'
+ $this->assertDumpMatchesFormat(
+ <<<'EOTXT'
ReflectionClass {
+name: "ReflectionClass"
%Aimplements: array:%d [
@@ -49,23 +51,23 @@ ReflectionClass {
"export" => ReflectionMethod {
+name: "export"
+class: "ReflectionClass"
- parameters: {
+%A parameters: {
$%s: ReflectionParameter {
%A position: 0
%A
}
EOTXT
- , $var
- );
- }
+ , $var
+ );
+ }
- public function testClosureCaster()
- {
- $a = $b = 123;
- $var = function ($x) use ($a, &$b) {};
+ public function testClosureCaster()
+ {
+ $a = $b = 123;
+ $var = function ($x) use ($a, &$b) {};
- $this->assertDumpMatchesFormat(
- <<
*/
-class CliDumperTest extends \PHPUnit_Framework_TestCase
+class CliDumperTest extends TestCase
{
- use VarDumperTestTrait;
+ use VarDumperTestTrait;
- public function testGet()
- {
- require __DIR__.'/Fixtures/dumb-var.php';
+ public function testGet()
+ {
+ require __DIR__.'/Fixtures/dumb-var.php';
- $dumper = new CliDumper('php://output');
- $dumper->setColors(false);
- $cloner = new VarCloner();
- $cloner->addCasters(array(
- ':stream' => function ($res, $a) {
- unset($a['uri'], $a['wrapper_data']);
+ $dumper = new CliDumper('php://output');
+ $dumper->setColors(false);
+ $cloner = new VarCloner();
+ $cloner->addCasters(array(
+ ':stream' => function ($res, $a) {
+ unset($a['uri'], $a['wrapper_data']);
- return $a;
- },
- ));
- $data = $cloner->cloneVar($var);
+ return $a;
+ },
+ ));
+ $data = $cloner->cloneVar($var);
- ob_start();
- $dumper->dump($data);
- $out = ob_get_clean();
- $out = preg_replace('/[ \t]+$/m', '', $out);
- $intMax = PHP_INT_MAX;
- $res = (int) $var['res'];
+ ob_start();
+ $dumper->dump($data);
+ $out = ob_get_clean();
+ $out = preg_replace('/[ \t]+$/m', '', $out);
+ $intMax = PHP_INT_MAX;
+ $res = (int) $var['res'];
- $r = defined('HHVM_VERSION') ? '' : '#%d';
- $this->assertStringMatchesFormat(
- <<
*/
-class HtmlDumperTest extends \PHPUnit_Framework_TestCase
+class HtmlDumperTest extends TestCase
{
- public function testGet()
- {
- require __DIR__.'/Fixtures/dumb-var.php';
+ public function testGet()
+ {
+ require __DIR__.'/Fixtures/dumb-var.php';
- $dumper = new HtmlDumper('php://output');
- $dumper->setDumpHeader('
*/
-class VarClonerTest extends \PHPUnit_Framework_TestCase
+class VarClonerTest extends TestCase
{
- public function testMaxIntBoundary()
- {
- $data = array(PHP_INT_MAX => 123);
+ public function testMaxIntBoundary()
+ {
+ $data = array(PHP_INT_MAX => 123);
- $cloner = new VarCloner();
- $clone = $cloner->cloneVar($data);
+ $cloner = new VarCloner();
+ $clone = $cloner->cloneVar($data);
- $expected = <<';
- protected $dumpSuffix = '
';
- protected $dumpId = 'sf-dump';
- protected $colors = true;
- protected $headerIsDumped = false;
- protected $lastDepth = -1;
- protected $styles = array(
- 'default' => 'background-color:#18171B; color:#FF8400; line-height:1.2em; font:12px Menlo, Monaco, Consolas, monospace; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:100000; word-break: normal',
- 'num' => 'font-weight:bold; color:#1299DA',
- 'const' => 'font-weight:bold',
- 'str' => 'font-weight:bold; color:#56DB3A',
- 'note' => 'color:#1299DA',
- 'ref' => 'color:#A0A0A0',
- 'public' => 'color:#FFFFFF',
- 'protected' => 'color:#FFFFFF',
- 'private' => 'color:#FFFFFF',
- 'meta' => 'color:#B729D9',
- 'key' => 'color:#56DB3A',
- 'index' => 'color:#1299DA',
- );
+ protected $dumpHeader;
+ protected $dumpPrefix = '';
+ protected $dumpSuffix = '
';
+ protected $dumpId = 'sf-dump';
+ protected $colors = true;
+ protected $headerIsDumped = false;
+ protected $lastDepth = -1;
+ protected $styles = array(
+ 'default' => 'background-color:#18171B; color:#FF8400; line-height:1.2em; font:12px Menlo, Monaco, Consolas, monospace; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:99999; word-break: normal',
+ 'num' => 'font-weight:bold; color:#1299DA',
+ 'const' => 'font-weight:bold',
+ 'str' => 'font-weight:bold; color:#56DB3A',
+ 'note' => 'color:#1299DA',
+ 'ref' => 'color:#A0A0A0',
+ 'public' => 'color:#FFFFFF',
+ 'protected' => 'color:#FFFFFF',
+ 'private' => 'color:#FFFFFF',
+ 'meta' => 'color:#B729D9',
+ 'key' => 'color:#56DB3A',
+ 'index' => 'color:#1299DA',
+ 'ellipsis' => 'color:#FF8400',
+ );
- /**
- * {@inheritdoc}
- */
- public function __construct($output = null, $charset = null)
- {
- AbstractDumper::__construct($output, $charset);
- $this->dumpId = 'sf-dump-'.mt_rand();
- }
+ private $displayOptions = array(
+ 'maxDepth' => 1,
+ 'maxStringLength' => 160,
+ 'fileLinkFormat' => null,
+ );
+ private $extraDisplayOptions = array();
- /**
- * {@inheritdoc}
- */
- public function setOutput($output)
- {
- if ($output !== $prev = parent::setOutput($output)) {
- $this->headerIsDumped = false;
- }
+ /**
+ * {@inheritdoc}
+ */
+ public function __construct($output = null, $charset = null, $flags = 0)
+ {
+ AbstractDumper::__construct($output, $charset, $flags);
+ $this->dumpId = 'sf-dump-'.mt_rand();
+ $this->displayOptions['fileLinkFormat'] = ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
+ }
- return $prev;
- }
+ /**
+ * {@inheritdoc}
+ */
+ public function setStyles(array $styles)
+ {
+ $this->headerIsDumped = false;
+ $this->styles = $styles + $this->styles;
+ }
- /**
- * {@inheritdoc}
- */
- public function setStyles(array $styles)
- {
- $this->headerIsDumped = false;
- $this->styles = $styles + $this->styles;
- }
+ /**
+ * Configures display options.
+ *
+ * @param array $displayOptions A map of display options to customize the behavior
+ */
+ public function setDisplayOptions(array $displayOptions)
+ {
+ $this->headerIsDumped = false;
+ $this->displayOptions = $displayOptions + $this->displayOptions;
+ }
- /**
- * Sets an HTML header that will be dumped once in the output stream.
- *
- * @param string $header An HTML string.
- */
- public function setDumpHeader($header)
- {
- $this->dumpHeader = $header;
- }
+ /**
+ * Sets an HTML header that will be dumped once in the output stream.
+ *
+ * @param string $header An HTML string
+ */
+ public function setDumpHeader($header)
+ {
+ $this->dumpHeader = $header;
+ }
- /**
- * Sets an HTML prefix and suffix that will encapse every single dump.
- *
- * @param string $prefix The prepended HTML string.
- * @param string $suffix The appended HTML string.
- */
- public function setDumpBoundaries($prefix, $suffix)
- {
- $this->dumpPrefix = $prefix;
- $this->dumpSuffix = $suffix;
- }
+ /**
+ * Sets an HTML prefix and suffix that will encapse every single dump.
+ *
+ * @param string $prefix The prepended HTML string
+ * @param string $suffix The appended HTML string
+ */
+ public function setDumpBoundaries($prefix, $suffix)
+ {
+ $this->dumpPrefix = $prefix;
+ $this->dumpSuffix = $suffix;
+ }
- /**
- * {@inheritdoc}
- */
- public function dump(Data $data, $output = null)
- {
- parent::dump($data, $output);
- $this->dumpId = 'sf-dump-'.mt_rand();
- }
+ /**
+ * {@inheritdoc}
+ */
+ public function dump(Data $data, $output = null, array $extraDisplayOptions = array())
+ {
+ $this->extraDisplayOptions = $extraDisplayOptions;
+ $result = parent::dump($data, $output);
+ $this->dumpId = 'sf-dump-'.mt_rand();
- /**
- * Dumps the HTML header.
- */
- protected function getDumpHeader()
- {
- $this->headerIsDumped = true;
+ return $result;
+ }
- if (null !== $this->dumpHeader) {
- return $this->dumpHeader;
- }
+ /**
+ * Dumps the HTML header.
+ */
+ protected function getDumpHeader()
+ {
+ $this->headerIsDumped = null !== $this->outputStream ? $this->outputStream : $this->lineDumper;
- $line = <<<'EOHTML'
+ if (null !== $this->dumpHeader) {
+ return $this->dumpHeader;
+ }
+
+ $line = str_replace('{$options}', json_encode($this->displayOptions, JSON_FORCE_OBJECT), <<<'EOHTML'
-'.$this->dumpHeader;
- }
-
- /**
- * {@inheritdoc}
- */
- public function enterHash(Cursor $cursor, $type, $class, $hasChild)
- {
- parent::enterHash($cursor, $type, $class, false);
-
- if ($hasChild) {
- if ($cursor->refIndex) {
- $r = Cursor::HASH_OBJECT !== $type ? 1 - (Cursor::HASH_RESOURCE !== $type) : 2;
- $r .= $r && 0 < $cursor->softRefHandle ? $cursor->softRefHandle : $cursor->refIndex;
-
- $this->line .= sprintf('', $this->dumpId, $r);
- } else {
- $this->line .= '';
- }
- $this->dumpLine($cursor->depth);
- }
- }
-
- /**
- * {@inheritdoc}
- */
- public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut)
- {
- $this->dumpEllipsis($cursor, $hasChild, $cut);
- if ($hasChild) {
- $this->line .= '';
- }
- parent::leaveHash($cursor, $type, $class, $hasChild, 0);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function style($style, $value, $attr = array())
- {
- if ('' === $value) {
- return '';
- }
-
- $v = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
-
- if ('ref' === $style) {
- if (empty($attr['count'])) {
- return sprintf('%s', $v);
- }
- $r = ('#' !== $v[0] ? 1 - ('@' !== $v[0]) : 2).substr($value, 1);
-
- return sprintf('%s', $this->dumpId, $r, 1 + $attr['count'], $v);
- }
-
- if ('const' === $style && array_key_exists('value', $attr)) {
- $style .= sprintf(' title="%s"', htmlspecialchars(json_encode($attr['value']), ENT_QUOTES, 'UTF-8'));
- } elseif ('public' === $style) {
- $style .= sprintf(' title="%s"', empty($attr['dynamic']) ? 'Public property' : 'Runtime added dynamic property');
- } elseif ('str' === $style && 1 < $attr['length']) {
- $style .= sprintf(' title="%s%s characters"', $attr['length'], $attr['binary'] ? ' binary or non-UTF-8' : '');
- } elseif ('note' === $style && false !== $c = strrpos($v, '\\')) {
- return sprintf('%s', $v, $style, substr($v, $c + 1));
- } elseif ('protected' === $style) {
- $style .= ' title="Protected property"';
- } elseif ('private' === $style) {
- $style .= sprintf(' title="Private property defined in class:
`%s`"', $attr['class']);
- }
-
- $map = static::$controlCharsMap;
- $style = "";
- $v = preg_replace_callback(static::$controlCharsRx, function ($c) use ($map, $style) {
- $s = '';
- $c = $c[$i = 0];
- do {
- $s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', ord($c[$i]));
- } while (isset($c[++$i]));
-
- return $s.$style;
- }, $v, -1, $cchrCount);
-
- if ($cchrCount && '<' === $v[0]) {
- $v = substr($v, 7);
- } else {
- $v = $style.$v;
- }
- if ($cchrCount && '>' === substr($v, -1)) {
- $v = substr($v, 0, -strlen($style));
- } else {
- $v .= '';
- }
-
- return $v;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function dumpLine($depth, $endOfValue = false)
- {
- if (-1 === $this->lastDepth) {
- $this->line = sprintf($this->dumpPrefix, $this->dumpId, $this->indentPad).$this->line;
- }
- if (!$this->headerIsDumped) {
- $this->line = $this->getDumpHeader().$this->line;
- }
-
- if (-1 === $depth) {
- $this->line .= sprintf($this->dumpSuffix, $this->dumpId);
- }
- $this->lastDepth = $depth;
-
- $this->line = mb_convert_encoding($this->line, 'HTML-ENTITIES', 'UTF-8');
-
- if (-1 === $depth) {
- AbstractDumper::dumpLine(0);
- }
- AbstractDumper::dumpLine($depth);
- }
+pre.sf-dump .sf-dump-ellipsis {
+ display: inline-block;
+ overflow: visible;
+ text-overflow: ellipsis;
+ max-width: 5em;
+ white-space: nowrap;
+ overflow: hidden;
+ vertical-align: top;
+}
+pre.sf-dump code {
+ display:inline;
+ padding:0;
+ background:none;
+}
+.sf-dump-str-collapse .sf-dump-str-collapse {
+ display: none;
+}
+.sf-dump-str-expand .sf-dump-str-expand {
+ display: none;
+}
+EOHTML
+ );
+
+ foreach ($this->styles as $class => $style) {
+ $line .= 'pre.sf-dump'.('default' === $class ? ', pre.sf-dump' : '').' .sf-dump-'.$class.'{'.$style.'}';
+ }
+
+ return $this->dumpHeader = preg_replace('/\s+/', ' ', $line).''.$this->dumpHeader;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function enterHash(Cursor $cursor, $type, $class, $hasChild)
+ {
+ parent::enterHash($cursor, $type, $class, false);
+
+ if ($hasChild) {
+ if ($cursor->refIndex) {
+ $r = Cursor::HASH_OBJECT !== $type ? 1 - (Cursor::HASH_RESOURCE !== $type) : 2;
+ $r .= $r && 0 < $cursor->softRefHandle ? $cursor->softRefHandle : $cursor->refIndex;
+
+ $this->line .= sprintf('', $this->dumpId, $r);
+ } else {
+ $this->line .= '';
+ }
+ $this->dumpLine($cursor->depth);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut)
+ {
+ $this->dumpEllipsis($cursor, $hasChild, $cut);
+ if ($hasChild) {
+ $this->line .= '';
+ }
+ parent::leaveHash($cursor, $type, $class, $hasChild, 0);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function style($style, $value, $attr = array())
+ {
+ if ('' === $value) {
+ return '';
+ }
+
+ $v = esc($value);
+
+ if ('ref' === $style) {
+ if (empty($attr['count'])) {
+ return sprintf('%s', $v);
+ }
+ $r = ('#' !== $v[0] ? 1 - ('@' !== $v[0]) : 2).substr($value, 1);
+
+ return sprintf('%s', $this->dumpId, $r, 1 + $attr['count'], $v);
+ }
+
+ if ('const' === $style && isset($attr['value'])) {
+ $style .= sprintf(' title="%s"', esc(is_scalar($attr['value']) ? $attr['value'] : json_encode($attr['value'])));
+ } elseif ('public' === $style) {
+ $style .= sprintf(' title="%s"', empty($attr['dynamic']) ? 'Public property' : 'Runtime added dynamic property');
+ } elseif ('str' === $style && 1 < $attr['length']) {
+ $style .= sprintf(' title="%d%s characters"', $attr['length'], $attr['binary'] ? ' binary or non-UTF-8' : '');
+ } elseif ('note' === $style && false !== $c = strrpos($v, '\\')) {
+ return sprintf('%s', $v, $style, substr($v, $c + 1));
+ } elseif ('protected' === $style) {
+ $style .= ' title="Protected property"';
+ } elseif ('meta' === $style && isset($attr['title'])) {
+ $style .= sprintf(' title="%s"', esc($this->utf8Encode($attr['title'])));
+ } elseif ('private' === $style) {
+ $style .= sprintf(' title="Private property defined in class:
`%s`"', esc($this->utf8Encode($attr['class'])));
+ }
+ $map = static::$controlCharsMap;
+
+ if (isset($attr['ellipsis'])) {
+ $label = esc(substr($value, -$attr['ellipsis']));
+ $style = str_replace(' title="', " title=\"$v\n", $style);
+ $v = sprintf('%s%s', substr($v, 0, -strlen($label)), $label);
+ }
+
+ $v = "".preg_replace_callback(static::$controlCharsRx, function ($c) use ($map) {
+ $s = '';
+ $c = $c[$i = 0];
+ do {
+ $s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', ord($c[$i]));
+ } while (isset($c[++$i]));
+
+ return $s.'';
+ }, $v).'';
+
+ if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], isset($attr['line']) ? $attr['line'] : 0)) {
+ $attr['href'] = $href;
+ }
+ if (isset($attr['href'])) {
+ $v = sprintf('%s', esc($this->utf8Encode($attr['href'])), $v);
+ }
+ if (isset($attr['lang'])) {
+ $v = sprintf('%s', esc($attr['lang']), $v);
+ }
+
+ return $v;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function dumpLine($depth, $endOfValue = false)
+ {
+ if (-1 === $this->lastDepth) {
+ $this->line = sprintf($this->dumpPrefix, $this->dumpId, $this->indentPad).$this->line;
+ }
+ if ($this->headerIsDumped !== (null !== $this->outputStream ? $this->outputStream : $this->lineDumper)) {
+ $this->line = $this->getDumpHeader().$this->line;
+ }
+
+ if (-1 === $depth) {
+ $args = array('"'.$this->dumpId.'"');
+ if ($this->extraDisplayOptions) {
+ $args[] = json_encode($this->extraDisplayOptions, JSON_FORCE_OBJECT);
+ }
+ // Replace is for BC
+ $this->line .= sprintf(str_replace('"%s"', '%s', $this->dumpSuffix), implode(', ', $args));
+ }
+ $this->lastDepth = $depth;
+
+ $this->line = mb_convert_encoding($this->line, 'HTML-ENTITIES', 'UTF-8');
+
+ if (-1 === $depth) {
+ AbstractDumper::dumpLine(0);
+ }
+ AbstractDumper::dumpLine($depth);
+ }
+
+ private function getSourceLink($file, $line)
+ {
+ $options = $this->extraDisplayOptions + $this->displayOptions;
+
+ if ($fmt = $options['fileLinkFormat']) {
+ return is_string($fmt) ? strtr($fmt, array('%f' => $file, '%l' => $line)) : $fmt->format($file, $line);
+ }
+
+ return false;
+ }
+}
+
+function esc($str)
+{
+ return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
diff --git a/htdocs/includes/symfony/var-dumper/LICENSE b/htdocs/includes/symfony/var-dumper/LICENSE
index ef1cde91a61..207646a052d 100644
--- a/htdocs/includes/symfony/var-dumper/LICENSE
+++ b/htdocs/includes/symfony/var-dumper/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014-2015 Fabien Potencier
+Copyright (c) 2014-2017 Fabien Potencier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/htdocs/includes/symfony/var-dumper/README.md b/htdocs/includes/symfony/var-dumper/README.md
index 71bff335a70..3b5d55f5f5b 100644
--- a/htdocs/includes/symfony/var-dumper/README.md
+++ b/htdocs/includes/symfony/var-dumper/README.md
@@ -1,14 +1,15 @@
-Symfony mechanism for exploring and dumping PHP variables
-=========================================================
+VarDumper Component
+===================
-This component provides a mechanism that allows exploring then dumping
-any PHP variable.
+The VarDumper component provides mechanisms for walking through any arbitrary
+PHP variable. Built on top, it provides a better `dump()` function that you
+can use instead of `var_dump`.
-It handles scalars, objects and resources properly, taking hard and soft
-references into account. More than being immune to infinite recursion
-problems, it allows dumping where references link to each other.
-It explores recursive structures using a breadth-first algorithm.
+Resources
+---------
-The component exposes all the parts involved in the different steps of
-cloning then dumping a PHP variable, while applying size limits and having
-specialized output formats and methods.
+ * [Documentation](https://symfony.com/doc/current/components/var_dumper/introduction.html)
+ * [Contributing](https://symfony.com/doc/current/contributing/index.html)
+ * [Report issues](https://github.com/symfony/symfony/issues) and
+ [send Pull Requests](https://github.com/symfony/symfony/pulls)
+ in the [main Symfony repository](https://github.com/symfony/symfony)
diff --git a/htdocs/includes/symfony/var-dumper/Test/VarDumperTestTrait.php b/htdocs/includes/symfony/var-dumper/Test/VarDumperTestTrait.php
index e5f6bf5b98e..b05e272d23b 100644
--- a/htdocs/includes/symfony/var-dumper/Test/VarDumperTestTrait.php
+++ b/htdocs/includes/symfony/var-dumper/Test/VarDumperTestTrait.php
@@ -19,27 +19,30 @@ use Symfony\Component\VarDumper\Dumper\CliDumper;
*/
trait VarDumperTestTrait
{
- public function assertDumpEquals($dump, $data, $message = '')
- {
- $this->assertSame(rtrim($dump), $this->getDump($data), $message);
- }
+ public function assertDumpEquals($dump, $data, $message = '')
+ {
+ $this->assertSame(rtrim($dump), $this->getDump($data), $message);
+ }
- public function assertDumpMatchesFormat($dump, $data, $message = '')
- {
- $this->assertStringMatchesFormat(rtrim($dump), $this->getDump($data), $message);
- }
+ public function assertDumpMatchesFormat($dump, $data, $message = '')
+ {
+ $this->assertStringMatchesFormat(rtrim($dump), $this->getDump($data), $message);
+ }
- protected function getDump($data)
- {
- $h = fopen('php://memory', 'r+b');
- $cloner = new VarCloner();
- $cloner->setMaxItems(-1);
- $dumper = new CliDumper($h);
- $dumper->setColors(false);
- $dumper->dump($cloner->cloneVar($data)->withRefHandles(false));
- $data = stream_get_contents($h, -1, 0);
- fclose($h);
+ protected function getDump($data, $key = null)
+ {
+ $flags = getenv('DUMP_LIGHT_ARRAY') ? CliDumper::DUMP_LIGHT_ARRAY : 0;
+ $flags |= getenv('DUMP_STRING_LENGTH') ? CliDumper::DUMP_STRING_LENGTH : 0;
- return rtrim($data);
- }
+ $cloner = new VarCloner();
+ $cloner->setMaxItems(-1);
+ $dumper = new CliDumper(null, null, $flags);
+ $dumper->setColors(false);
+ $data = $cloner->cloneVar($data)->withRefHandles(false);
+ if (null !== $key && null === $data = $data->seek($key)) {
+ return;
+ }
+
+ return rtrim($dumper->dump($data, true));
+ }
}
diff --git a/htdocs/includes/symfony/var-dumper/Tests/Caster/CasterTest.php b/htdocs/includes/symfony/var-dumper/Tests/Caster/CasterTest.php
index 43d389ce1c0..d1f09841ea3 100644
--- a/htdocs/includes/symfony/var-dumper/Tests/Caster/CasterTest.php
+++ b/htdocs/includes/symfony/var-dumper/Tests/Caster/CasterTest.php
@@ -11,170 +11,171 @@
namespace Symfony\Component\VarDumper\Tests\Caster;
+use PHPUnit\Framework\TestCase;
use Symfony\Component\VarDumper\Caster\Caster;
use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
/**
* @author Nicolas Grekas