diff --git a/composer.lock b/composer.lock index ce988ad1d36f03d522086951b1e57d4c00b77573..decd0300483d90dd7a4b0ed5ad24c66f2f979816 100644 --- a/composer.lock +++ b/composer.lock @@ -3,7 +3,7 @@ "This file locks the dependencies of your project to a known state", "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" ], - "hash": "eb2c59507a34a3831afe33b16c4d5775", + "hash": "204b3755db988998bcc618e71b2f235c", "packages": [ { "name": "doctrine/annotations", @@ -1166,24 +1166,24 @@ }, { "name": "symfony/class-loader", - "version": "v2.3.1", + "version": "v2.3.4", "target-dir": "Symfony/Component/ClassLoader", "source": { "type": "git", "url": "https://github.com/symfony/ClassLoader.git", - "reference": "v2.3.1" + "reference": "622d370a07321329f5259c6f96d5c636104ad46b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/622d370a07321329f5259c6f96d5c636104ad46b", + "reference": "622d370a07321329f5259c6f96d5c636104ad46b", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "symfony/finder": ">=2.0,<3.0" + "symfony/finder": "~2.0" }, "type": "library", "extra": { @@ -1212,29 +1212,29 @@ ], "description": "Symfony ClassLoader Component", "homepage": "http://symfony.com", - "time": "2013-05-24 17:54:44" + "time": "2013-08-13 20:18:00" }, { "name": "symfony/debug", - "version": "v2.3.1", + "version": "v2.3.4", "target-dir": "Symfony/Component/Debug", "source": { "type": "git", "url": "https://github.com/symfony/Debug.git", - "reference": "v2.3.1" + "reference": "729f6d19cfc401c4942e43fcc1059103bd6df130" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Debug/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony/Debug/zipball/729f6d19cfc401c4942e43fcc1059103bd6df130", + "reference": "729f6d19cfc401c4942e43fcc1059103bd6df130", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "symfony/http-foundation": ">=2.1,<3.0", - "symfony/http-kernel": ">=2.1,<3.0" + "symfony/http-foundation": "~2.1", + "symfony/http-kernel": "~2.1" }, "suggest": { "symfony/class-loader": "", @@ -1268,29 +1268,29 @@ ], "description": "Symfony Debug Component", "homepage": "http://symfony.com", - "time": "2013-06-02 11:58:44" + "time": "2013-08-08 14:16:10" }, { "name": "symfony/dependency-injection", - "version": "v2.3.1", + "version": "v2.3.4", "target-dir": "Symfony/Component/DependencyInjection", "source": { "type": "git", "url": "https://github.com/symfony/DependencyInjection.git", - "reference": "v2.3.1" + "reference": "3678aa969e5bfeb8515a1f3047c63e8104723f5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/3678aa969e5bfeb8515a1f3047c63e8104723f5c", + "reference": "3678aa969e5bfeb8515a1f3047c63e8104723f5c", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "symfony/config": ">=2.2,<3.0", - "symfony/yaml": ">=2.0,<3.0" + "symfony/config": "~2.2", + "symfony/yaml": "~2.0" }, "suggest": { "symfony/config": "", @@ -1324,28 +1324,28 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "http://symfony.com", - "time": "2013-06-05 09:51:05" + "time": "2013-07-25 17:13:25" }, { "name": "symfony/event-dispatcher", - "version": "v2.3.0", + "version": "v2.3.4", "target-dir": "Symfony/Component/EventDispatcher", "source": { "type": "git", "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "v2.3.0-RC1" + "reference": "41c9826457c65fa3cf746f214985b7ca9cba42f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/v2.3.0-RC1", - "reference": "v2.3.0-RC1", + "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/41c9826457c65fa3cf746f214985b7ca9cba42f8", + "reference": "41c9826457c65fa3cf746f214985b7ca9cba42f8", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "symfony/dependency-injection": ">=2.0,<3.0" + "symfony/dependency-injection": "~2.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1378,21 +1378,21 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "http://symfony.com", - "time": "2013-05-13 14:36:40" + "time": "2013-07-21 12:12:18" }, { "name": "symfony/http-foundation", - "version": "v2.3.1", + "version": "v2.3.4", "target-dir": "Symfony/Component/HttpFoundation", "source": { "type": "git", "url": "https://github.com/symfony/HttpFoundation.git", - "reference": "v2.3.1" + "reference": "fdf130fe65457aedbc4639a22f4ef9d3be5c002c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/fdf130fe65457aedbc4639a22f4ef9d3be5c002c", + "reference": "fdf130fe65457aedbc4639a22f4ef9d3be5c002c", "shasum": "" }, "require": { @@ -1428,40 +1428,41 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "http://symfony.com", - "time": "2013-05-10 06:00:03" + "time": "2013-08-26 05:49:51" }, { "name": "symfony/http-kernel", - "version": "v2.3.0", + "version": "v2.3.4", "target-dir": "Symfony/Component/HttpKernel", "source": { "type": "git", "url": "https://github.com/symfony/HttpKernel.git", - "reference": "v2.3.0" + "reference": "9d35da40f07bbe7a4f8dfbc41555d2b69de674bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/v2.3.0", - "reference": "v2.3.0", + "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/9d35da40f07bbe7a4f8dfbc41555d2b69de674bf", + "reference": "9d35da40f07bbe7a4f8dfbc41555d2b69de674bf", "shasum": "" }, "require": { "php": ">=5.3.3", - "psr/log": ">=1.0,<2.0", - "symfony/debug": ">=2.3,<3.0", - "symfony/event-dispatcher": ">=2.1,<3.0", - "symfony/http-foundation": ">=2.2,<3.0" + "psr/log": "~1.0", + "symfony/debug": "~2.3", + "symfony/event-dispatcher": "~2.1", + "symfony/http-foundation": "~2.2" }, "require-dev": { - "symfony/browser-kit": "2.2.*", - "symfony/class-loader": ">=2.1,<3.0", - "symfony/config": ">=2.0,<3.0", - "symfony/console": "2.2.*", - "symfony/dependency-injection": ">=2.0,<3.0", - "symfony/finder": ">=2.0,<3.0", - "symfony/process": ">=2.0,<3.0", - "symfony/routing": ">=2.2,<3.0", - "symfony/stopwatch": ">=2.2,<3.0" + "symfony/browser-kit": "~2.2", + "symfony/class-loader": "~2.1", + "symfony/config": "~2.0", + "symfony/console": "~2.2", + "symfony/dependency-injection": "~2.0", + "symfony/finder": "~2.0", + "symfony/process": "~2.0", + "symfony/routing": "~2.2", + "symfony/stopwatch": "~2.2", + "symfony/templating": "~2.2" }, "suggest": { "symfony/browser-kit": "", @@ -1498,21 +1499,21 @@ ], "description": "Symfony HttpKernel Component", "homepage": "http://symfony.com", - "time": "2013-06-03 14:13:35" + "time": "2013-08-27 08:58:24" }, { "name": "symfony/process", - "version": "v2.3.1", + "version": "v2.3.4", "target-dir": "Symfony/Component/Process", "source": { "type": "git", "url": "https://github.com/symfony/Process.git", - "reference": "v2.3.1" + "reference": "1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony/Process/zipball/1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b", + "reference": "1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b", "shasum": "" }, "require": { @@ -1545,31 +1546,31 @@ ], "description": "Symfony Process Component", "homepage": "http://symfony.com", - "time": "2013-05-06 20:03:44" + "time": "2013-08-22 06:42:25" }, { "name": "symfony/routing", - "version": "v2.3.0", + "version": "v2.3.4", "target-dir": "Symfony/Component/Routing", "source": { "type": "git", "url": "https://github.com/symfony/Routing.git", - "reference": "v2.3.0" + "reference": "69af3f07dbf3ae93dd513dbc373f561cb2e7f143" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Routing/zipball/v2.3.0", - "reference": "v2.3.0", + "url": "https://api.github.com/repos/symfony/Routing/zipball/69af3f07dbf3ae93dd513dbc373f561cb2e7f143", + "reference": "69af3f07dbf3ae93dd513dbc373f561cb2e7f143", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "doctrine/common": ">=2.2,<3.0", - "psr/log": ">=1.0,<2.0", - "symfony/config": ">=2.2,<3.0", - "symfony/yaml": ">=2.0,<3.0" + "doctrine/common": "~2.2", + "psr/log": "~1.0", + "symfony/config": "~2.2", + "symfony/yaml": "~2.0" }, "suggest": { "doctrine/common": "", @@ -1603,21 +1604,21 @@ ], "description": "Symfony Routing Component", "homepage": "http://symfony.com", - "time": "2013-05-20 08:57:26" + "time": "2013-08-23 15:14:07" }, { "name": "symfony/serializer", - "version": "v2.3.1", + "version": "v2.3.4", "target-dir": "Symfony/Component/Serializer", "source": { "type": "git", "url": "https://github.com/symfony/Serializer.git", - "reference": "v2.3.1" + "reference": "457ba76395955926a67ea692957b0872dead5278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Serializer/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony/Serializer/zipball/457ba76395955926a67ea692957b0872dead5278", + "reference": "457ba76395955926a67ea692957b0872dead5278", "shasum": "" }, "require": { @@ -1650,29 +1651,29 @@ ], "description": "Symfony Serializer Component", "homepage": "http://symfony.com", - "time": "2013-05-10 18:12:13" + "time": "2013-07-21 12:12:18" }, { "name": "symfony/translation", - "version": "v2.3.0", + "version": "v2.3.4", "target-dir": "Symfony/Component/Translation", "source": { "type": "git", "url": "https://github.com/symfony/Translation.git", - "reference": "v2.3.0-RC1" + "reference": "65f888291f0896ad492f9abc6dc05c998373aded" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Translation/zipball/v2.3.0-RC1", - "reference": "v2.3.0-RC1", + "url": "https://api.github.com/repos/symfony/Translation/zipball/65f888291f0896ad492f9abc6dc05c998373aded", + "reference": "65f888291f0896ad492f9abc6dc05c998373aded", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "symfony/config": ">=2.0,<3.0", - "symfony/yaml": ">=2.2,<3.0" + "symfony/config": "~2.0", + "symfony/yaml": "~2.2" }, "suggest": { "symfony/config": "", @@ -1705,32 +1706,32 @@ ], "description": "Symfony Translation Component", "homepage": "http://symfony.com", - "time": "2013-05-13 14:36:40" + "time": "2013-08-26 05:49:51" }, { "name": "symfony/validator", - "version": "v2.3.1", + "version": "v2.3.4", "target-dir": "Symfony/Component/Validator", "source": { "type": "git", "url": "https://github.com/symfony/Validator.git", - "reference": "v2.3.1" + "reference": "8f6f6be47fb8e1179cd225b1f949630e26221e42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Validator/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony/Validator/zipball/8f6f6be47fb8e1179cd225b1f949630e26221e42", + "reference": "8f6f6be47fb8e1179cd225b1f949630e26221e42", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/translation": ">=2.0,<3.0" + "symfony/translation": "~2.0" }, "require-dev": { - "symfony/config": ">=2.2,<3.0", - "symfony/http-foundation": ">=2.1,<3.0", - "symfony/intl": ">=2.3,<3.0", - "symfony/yaml": ">=2.0,<3.0" + "symfony/config": "~2.2", + "symfony/http-foundation": "~2.1", + "symfony/intl": "~2.3", + "symfony/yaml": "~2.0" }, "suggest": { "doctrine/common": "", @@ -1766,21 +1767,21 @@ ], "description": "Symfony Validator Component", "homepage": "http://symfony.com", - "time": "2013-06-10 16:23:25" + "time": "2013-08-24 15:26:22" }, { "name": "symfony/yaml", - "version": "v2.3.1", + "version": "v2.3.4", "target-dir": "Symfony/Component/Yaml", "source": { "type": "git", "url": "https://github.com/symfony/Yaml.git", - "reference": "v2.3.1" + "reference": "5a279f1b5f5e1045a6c432354d9ea727ff3a9847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony/Yaml/zipball/5a279f1b5f5e1045a6c432354d9ea727ff3a9847", + "reference": "5a279f1b5f5e1045a6c432354d9ea727ff3a9847", "shasum": "" }, "require": { @@ -1813,7 +1814,7 @@ ], "description": "Symfony Yaml Component", "homepage": "http://symfony.com", - "time": "2013-05-10 18:12:13" + "time": "2013-08-24 15:26:22" }, { "name": "twig/twig", diff --git a/core/vendor/autoload.php b/core/vendor/autoload.php index 2c0fbf3c9150b2359b6182a0d4ede158e8b29999..a391d4ec49dd4cde0d3d7410e854d540ed6825ea 100644 --- a/core/vendor/autoload.php +++ b/core/vendor/autoload.php @@ -1,7 +1,7 @@ <?php -// autoload.php generated by Composer +// autoload.php @generated by Composer require_once __DIR__ . '/composer' . '/autoload_real.php'; -return ComposerAutoloaderInit3a4905090abf2f2252330204ffd02eb8::getLoader(); +return ComposerAutoloaderInit0b93b0210b8b39c2a0b13410cd082de9::getLoader(); diff --git a/core/vendor/composer/autoload_classmap.php b/core/vendor/composer/autoload_classmap.php index fe65adea6b374fb1f149242402532da3f7cf38d2..96f77f2d4929111dccd0f8fc4fc9a5820570d72f 100644 --- a/core/vendor/composer/autoload_classmap.php +++ b/core/vendor/composer/autoload_classmap.php @@ -1,6 +1,6 @@ <?php -// autoload_classmap.php generated by Composer +// autoload_classmap.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname(dirname($vendorDir)); diff --git a/core/vendor/composer/autoload_files.php b/core/vendor/composer/autoload_files.php new file mode 100644 index 0000000000000000000000000000000000000000..09fe0fce76cdd3eb3799799d367a617e11e3bce0 --- /dev/null +++ b/core/vendor/composer/autoload_files.php @@ -0,0 +1,11 @@ +<?php + +// autoload_files.php @generated by Composer + +$vendorDir = dirname(dirname(__FILE__)); +$baseDir = dirname(dirname($vendorDir)); + +return array( + $vendorDir . '/kriswallsmith/assetic/src/functions.php', + $baseDir . '/core/lib/Drupal.php', +); \ No newline at end of file diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php index 44f503d36fc4b207ddf3999883aa50dd0f0e3cd7..926818b9888c61a839fc08ef210e0cd495259d35 100644 --- a/core/vendor/composer/autoload_namespaces.php +++ b/core/vendor/composer/autoload_namespaces.php @@ -1,6 +1,6 @@ <?php -// autoload_namespaces.php generated by Composer +// autoload_namespaces.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname(dirname($vendorDir)); diff --git a/core/vendor/composer/autoload_real.php b/core/vendor/composer/autoload_real.php index c63bb824eeb2d9045a8a2c79b08e18986d8b34ea..6bb9081ce43c0e63a0b07d2841ce722d78ac683d 100644 --- a/core/vendor/composer/autoload_real.php +++ b/core/vendor/composer/autoload_real.php @@ -1,8 +1,8 @@ <?php -// autoload_real.php generated by Composer +// autoload_real.php @generated by Composer -class ComposerAutoloaderInit3a4905090abf2f2252330204ffd02eb8 +class ComposerAutoloaderInit0b93b0210b8b39c2a0b13410cd082de9 { private static $loader; @@ -19,9 +19,9 @@ public static function getLoader() return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit3a4905090abf2f2252330204ffd02eb8', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit0b93b0210b8b39c2a0b13410cd082de9', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit3a4905090abf2f2252330204ffd02eb8', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit0b93b0210b8b39c2a0b13410cd082de9', 'loadClassLoader')); $vendorDir = dirname(__DIR__); $baseDir = dirname(dirname($vendorDir)); @@ -42,8 +42,10 @@ public static function getLoader() $loader->register(true); - require $vendorDir . '/kriswallsmith/assetic/src/functions.php'; - require $baseDir . '/core/lib/Drupal.php'; + $includeFiles = require __DIR__ . '/autoload_files.php'; + foreach ($includeFiles as $file) { + require $file; + } return $loader; } diff --git a/core/vendor/composer/include_paths.php b/core/vendor/composer/include_paths.php index 66f70988d77dd9babc082acaf466338a020ed6fd..771d07b204ee0d73d46337855c3fccda64e34e33 100644 --- a/core/vendor/composer/include_paths.php +++ b/core/vendor/composer/include_paths.php @@ -1,6 +1,6 @@ <?php -// include_paths.php generated by Composer +// include_paths.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname(dirname($vendorDir)); diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json index 65e1fbf1bdf9701332aefbd8c96151f3b50610fd..f5d9d725eb74c8f32fafbaabab081f460dddd280 100644 --- a/core/vendor/composer/installed.json +++ b/core/vendor/composer/installed.json @@ -56,38 +56,26 @@ ] }, { - "name": "symfony/class-loader", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "target-dir": "Symfony/Component/ClassLoader", + "name": "psr/log", + "version": "1.0.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/ClassLoader.git", - "reference": "v2.3.1" + "url": "https://github.com/php-fig/log", + "reference": "1.0.0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://github.com/php-fig/log/archive/1.0.0.zip", + "reference": "1.0.0", "shasum": "" }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/finder": ">=2.0,<3.0" - }, - "time": "2013-05-24 17:54:44", + "time": "2012-12-21 11:40:51", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\ClassLoader\\": "" + "Psr\\Log\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -96,61 +84,51 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony ClassLoader Component", - "homepage": "http://symfony.com" + "description": "Common interface for logging libraries", + "keywords": [ + "log", + "psr", + "psr-3" + ] }, { - "name": "symfony/dependency-injection", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "target-dir": "Symfony/Component/DependencyInjection", + "name": "twig/twig", + "version": "v1.12.3", + "version_normalized": "1.12.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/DependencyInjection.git", - "reference": "v2.3.1" + "url": "https://github.com/fabpot/Twig.git", + "reference": "v1.12.3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/fabpot/Twig/zipball/v1.12.3", + "reference": "v1.12.3", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/config": ">=2.2,<3.0", - "symfony/yaml": ">=2.0,<3.0" - }, - "suggest": { - "symfony/config": "", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" + "php": ">=5.2.4" }, - "time": "2013-06-05 09:51:05", + "time": "2013-04-08 12:40:11", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "1.12-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\DependencyInjection\\": "" + "Twig_": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3" ], "authors": [ { @@ -158,46 +136,68 @@ "email": "fabien@symfony.com" }, { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com" } ], - "description": "Symfony DependencyInjection Component", - "homepage": "http://symfony.com" + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ] }, { - "name": "symfony/http-foundation", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "target-dir": "Symfony/Component/HttpFoundation", + "name": "kriswallsmith/assetic", + "version": "v1.1.1", + "version_normalized": "1.1.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/HttpFoundation.git", - "reference": "v2.3.1" + "url": "https://github.com/kriswallsmith/assetic.git", + "reference": "v1.1.1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/v1.1.1", + "reference": "v1.1.1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.1", + "symfony/process": ">=2.1,<3.0" + }, + "require-dev": { + "cssmin/cssmin": "*", + "joliclic/javascript-packer": "*", + "kamicane/packager": "*", + "leafo/lessphp": "*", + "leafo/scssphp": "*", + "leafo/scssphp-compass": "*", + "mrclay/minify": "*", + "phpunit/phpunit": ">=3.7,<4.0", + "ptachoire/cssembed": "*", + "twig/twig": ">=1.6,<2.0" + }, + "suggest": { + "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler", + "leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler", + "leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin", + "ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris", + "twig/twig": "Assetic provides the integration with the Twig templating engine" }, - "time": "2013-05-10 06:00:03", + "time": "2013-06-01 22:13:43", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "1.1-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\HttpFoundation\\": "" + "Assetic": "src/" }, - "classmap": [ - "Symfony/Component/HttpFoundation/Resources/stubs" + "files": [ + "src/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -206,47 +206,55 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Kris Wallsmith", + "email": "kris.wallsmith@gmail.com", + "homepage": "http://kriswallsmith.net/" } ], - "description": "Symfony HttpFoundation Component", - "homepage": "http://symfony.com" + "description": "Asset Management for PHP", + "homepage": "https://github.com/kriswallsmith/assetic", + "keywords": [ + "assets", + "compression", + "minification" + ] }, { - "name": "symfony/serializer", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "target-dir": "Symfony/Component/Serializer", + "name": "symfony-cmf/routing", + "version": "1.1.0-beta1", + "version_normalized": "1.1.0.0-beta1", + "target-dir": "Symfony/Cmf/Component/Routing", "source": { "type": "git", - "url": "https://github.com/symfony/Serializer.git", - "reference": "v2.3.1" + "url": "https://github.com/symfony-cmf/Routing.git", + "reference": "1.1.0-beta1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Serializer/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/1.1.0-beta1", + "reference": "1.1.0-beta1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.3", + "psr/log": ">=1.0,<2.0", + "symfony/http-kernel": ">=2.2,<3.0", + "symfony/routing": ">=2.2,<3.0" }, - "time": "2013-05-10 18:12:13", + "suggest": { + "symfony/http-foundation": "ChainRouter/DynamicRouter have optional support for Request instances, several enhancers require a Request instances, ~2.2" + }, + "time": "2013-06-03 17:23:01", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "1.1-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\Serializer\\": "" + "Symfony\\Cmf\\Component\\Routing": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -255,632 +263,550 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Symfony CMF Community", + "homepage": "https://github.com/symfony-cmf/Routing/contributors" } ], - "description": "Symfony Serializer Component", - "homepage": "http://symfony.com" + "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers", + "homepage": "http://cmf.symfony.com", + "keywords": [ + "database", + "routing" + ] }, { - "name": "symfony/translation", - "version": "v2.3.0", - "version_normalized": "2.3.0.0", - "target-dir": "Symfony/Component/Translation", + "name": "phpunit/php-text-template", + "version": "1.1.4", + "version_normalized": "1.1.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/Translation.git", - "reference": "v2.3.0-RC1" + "url": "git://github.com/sebastianbergmann/php-text-template.git", + "reference": "1.1.4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Translation/zipball/v2.3.0-RC1", - "reference": "v2.3.0-RC1", + "url": "https://github.com/sebastianbergmann/php-text-template/zipball/1.1.4", + "reference": "1.1.4", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "require-dev": { - "symfony/config": ">=2.0,<3.0", - "symfony/yaml": ">=2.2,<3.0" - }, - "suggest": { - "symfony/config": "", - "symfony/yaml": "" - }, - "time": "2013-05-13 14:36:40", + "time": "2012-10-31 11:15:28", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, "installation-source": "dist", "autoload": { - "psr-0": { - "Symfony\\Component\\Translation\\": "" - } + "classmap": [ + "Text/" + ] }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Symfony Translation Component", - "homepage": "http://symfony.com" + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ] }, { - "name": "psr/log", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "name": "phpunit/phpunit-mock-objects", + "version": "1.2.3", + "version_normalized": "1.2.3.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log", - "reference": "1.0.0" + "url": "git://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "1.2.3" }, "dist": { "type": "zip", - "url": "https://github.com/php-fig/log/archive/1.0.0.zip", - "reference": "1.0.0", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects/archive/1.2.3.zip", + "reference": "1.2.3", "shasum": "" }, - "time": "2012-12-21 11:40:51", + "require": { + "php": ">=5.3.3", + "phpunit/php-text-template": ">=1.1.1@stable" + }, + "suggest": { + "ext-soap": "*" + }, + "time": "2013-01-13 10:24:48", "type": "library", "installation-source": "dist", "autoload": { - "psr-0": { - "Psr\\Log\\": "" - } + "classmap": [ + "PHPUnit/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Common interface for logging libraries", + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", "keywords": [ - "log", - "psr", - "psr-3" + "mock", + "xunit" ] }, { - "name": "twig/twig", - "version": "v1.12.3", - "version_normalized": "1.12.3.0", + "name": "phpunit/php-timer", + "version": "1.0.4", + "version_normalized": "1.0.4.0", "source": { "type": "git", - "url": "https://github.com/fabpot/Twig.git", - "reference": "v1.12.3" + "url": "git://github.com/sebastianbergmann/php-timer.git", + "reference": "1.0.4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fabpot/Twig/zipball/v1.12.3", - "reference": "v1.12.3", + "url": "https://github.com/sebastianbergmann/php-timer/zipball/1.0.4", + "reference": "1.0.4", "shasum": "" }, "require": { - "php": ">=5.2.4" + "php": ">=5.3.3" }, - "time": "2013-04-08 12:40:11", + "time": "2012-10-11 04:45:58", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.12-dev" - } - }, "installation-source": "dist", "autoload": { - "psr-0": { - "Twig_": "lib/" - } + "classmap": [ + "PHP/" + ] }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], "license": [ - "BSD-3" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", + "description": "Utility class for timing", + "homepage": "http://www.phpunit.de/", "keywords": [ - "templating" + "timer" ] }, { - "name": "symfony/validator", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "target-dir": "Symfony/Component/Validator", + "name": "phpunit/php-token-stream", + "version": "1.1.5", + "version_normalized": "1.1.5.0", "source": { "type": "git", - "url": "https://github.com/symfony/Validator.git", - "reference": "v2.3.1" + "url": "git://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1.1.5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Validator/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://github.com/sebastianbergmann/php-token-stream/zipball/1.1.5", + "reference": "1.1.5", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/translation": ">=2.0,<3.0" - }, - "require-dev": { - "symfony/config": ">=2.2,<3.0", - "symfony/http-foundation": ">=2.1,<3.0", - "symfony/intl": ">=2.3,<3.0", - "symfony/yaml": ">=2.0,<3.0" - }, - "suggest": { - "doctrine/common": "", - "symfony/config": "", - "symfony/http-foundation": "", - "symfony/intl": "", - "symfony/yaml": "" + "ext-tokenizer": "*", + "php": ">=5.3.3" }, - "time": "2013-06-10 16:23:25", + "time": "2012-10-11 04:47:14", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, "installation-source": "dist", "autoload": { - "psr-0": { - "Symfony\\Component\\Validator\\": "" - } + "classmap": [ + "PHP/" + ] }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Symfony Validator Component", - "homepage": "http://symfony.com" + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "http://www.phpunit.de/", + "keywords": [ + "tokenizer" + ] }, { - "name": "symfony/event-dispatcher", - "version": "v2.3.0", - "version_normalized": "2.3.0.0", - "target-dir": "Symfony/Component/EventDispatcher", + "name": "phpunit/php-file-iterator", + "version": "1.3.3", + "version_normalized": "1.3.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "v2.3.0-RC1" + "url": "git://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "1.3.3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/v2.3.0-RC1", - "reference": "v2.3.0-RC1", + "url": "https://github.com/sebastianbergmann/php-file-iterator/zipball/1.3.3", + "reference": "1.3.3", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "require-dev": { - "symfony/dependency-injection": ">=2.0,<3.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "time": "2013-05-13 14:36:40", + "time": "2012-10-11 04:44:38", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, "installation-source": "dist", "autoload": { - "psr-0": { - "Symfony\\Component\\EventDispatcher\\": "" - } + "classmap": [ + "File/" + ] }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Symfony EventDispatcher Component", - "homepage": "http://symfony.com" + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "http://www.phpunit.de/", + "keywords": [ + "filesystem", + "iterator" + ] }, { - "name": "symfony/process", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "target-dir": "Symfony/Component/Process", + "name": "phpunit/php-code-coverage", + "version": "1.2.11", + "version_normalized": "1.2.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/Process.git", - "reference": "v2.3.1" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "1.2.11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1.2.11", + "reference": "1.2.11", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.3", + "phpunit/php-file-iterator": ">=1.3.0@stable", + "phpunit/php-text-template": ">=1.1.1@stable", + "phpunit/php-token-stream": ">=1.1.3@stable" }, - "time": "2013-05-06 20:03:44", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.0.5" }, + "time": "2013-05-23 18:23:24", + "type": "library", "installation-source": "dist", "autoload": { - "psr-0": { - "Symfony\\Component\\Process\\": "" - } + "classmap": [ + "PHP/" + ] }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Symfony Process Component", - "homepage": "http://symfony.com" + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ] }, { - "name": "kriswallsmith/assetic", - "version": "v1.1.1", - "version_normalized": "1.1.1.0", + "name": "phpunit/phpunit", + "version": "3.7.21", + "version_normalized": "3.7.21.0", "source": { "type": "git", - "url": "https://github.com/kriswallsmith/assetic.git", - "reference": "v1.1.1" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "3.7.21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/v1.1.1", - "reference": "v1.1.1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3.7.21", + "reference": "3.7.21", "shasum": "" }, "require": { - "php": ">=5.3.1", - "symfony/process": ">=2.1,<3.0" - }, - "require-dev": { - "cssmin/cssmin": "*", - "joliclic/javascript-packer": "*", - "kamicane/packager": "*", - "leafo/lessphp": "*", - "leafo/scssphp": "*", - "leafo/scssphp-compass": "*", - "mrclay/minify": "*", - "phpunit/phpunit": ">=3.7,<4.0", - "ptachoire/cssembed": "*", - "twig/twig": ">=1.6,<2.0" + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpunit/php-code-coverage": ">=1.2.1,<1.3.0", + "phpunit/php-file-iterator": ">=1.3.1", + "phpunit/php-text-template": ">=1.1.1", + "phpunit/php-timer": ">=1.0.2,<1.1.0", + "phpunit/phpunit-mock-objects": ">=1.2.0,<1.3.0", + "symfony/yaml": ">=2.0,<3.0" + }, + "require-dev": { + "pear-pear/pear": "1.9.4" }, "suggest": { - "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler", - "leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler", - "leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin", - "ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris", - "twig/twig": "Assetic provides the integration with the Twig templating engine" + "ext-json": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "phpunit/php-invoker": ">=1.1.0,<1.2.0" }, - "time": "2013-06-01 22:13:43", + "time": "2013-05-23 18:54:29", + "bin": [ + "composer/bin/phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "3.7.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-0": { - "Assetic": "src/" - }, - "files": [ - "src/functions.php" + "classmap": [ + "PHPUnit/" ] }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "", + "../../symfony/yaml/" + ], "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Kris Wallsmith", - "email": "kris.wallsmith@gmail.com", - "homepage": "http://kriswallsmith.net/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Asset Management for PHP", - "homepage": "https://github.com/kriswallsmith/assetic", + "description": "The PHP Unit Testing framework.", + "homepage": "http://www.phpunit.de/", "keywords": [ - "assets", - "compression", - "minification" + "phpunit", + "testing", + "xunit" ] }, { - "name": "symfony/debug", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "target-dir": "Symfony/Component/Debug", + "name": "zendframework/zend-stdlib", + "version": "2.2.1", + "version_normalized": "2.2.1.0", + "target-dir": "Zend/Stdlib", "source": { "type": "git", - "url": "https://github.com/symfony/Debug.git", - "reference": "v2.3.1" + "url": "https://github.com/zendframework/Component_ZendStdlib.git", + "reference": "release-2.2.1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Debug/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/release-2.2.1", + "reference": "release-2.2.1", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "require-dev": { - "symfony/http-foundation": ">=2.1,<3.0", - "symfony/http-kernel": ">=2.1,<3.0" - }, "suggest": { - "symfony/class-loader": "", - "symfony/http-foundation": "", - "symfony/http-kernel": "" + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" }, - "time": "2013-06-02 11:58:44", + "time": "2013-06-12 19:46:58", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "2.2-dev", + "dev-develop": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\Debug\\": "" + "Zend\\Stdlib\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } + "BSD-3-Clause" ], - "description": "Symfony Debug Component", - "homepage": "http://symfony.com" + "keywords": [ + "stdlib", + "zf2" + ] }, { - "name": "symfony/http-kernel", - "version": "v2.3.0", - "version_normalized": "2.3.0.0", - "target-dir": "Symfony/Component/HttpKernel", + "name": "zendframework/zend-escaper", + "version": "2.2.1", + "version_normalized": "2.2.1.0", + "target-dir": "Zend/Escaper", "source": { "type": "git", - "url": "https://github.com/symfony/HttpKernel.git", - "reference": "v2.3.0" + "url": "https://github.com/zendframework/Component_ZendEscaper.git", + "reference": "release-2.2.1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/v2.3.0", - "reference": "v2.3.0", + "url": "https://api.github.com/repos/zendframework/Component_ZendEscaper/zipball/release-2.2.1", + "reference": "release-2.2.1", "shasum": "" }, "require": { - "php": ">=5.3.3", - "psr/log": ">=1.0,<2.0", - "symfony/debug": ">=2.3,<3.0", - "symfony/event-dispatcher": ">=2.1,<3.0", - "symfony/http-foundation": ">=2.2,<3.0" - }, - "require-dev": { - "symfony/browser-kit": "2.2.*", - "symfony/class-loader": ">=2.1,<3.0", - "symfony/config": ">=2.0,<3.0", - "symfony/console": "2.2.*", - "symfony/dependency-injection": ">=2.0,<3.0", - "symfony/finder": ">=2.0,<3.0", - "symfony/process": ">=2.0,<3.0", - "symfony/routing": ">=2.2,<3.0", - "symfony/stopwatch": ">=2.2,<3.0" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/class-loader": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "" + "php": ">=5.3.3" }, - "time": "2013-06-03 14:13:35", + "time": "2013-05-01 21:53:03", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "2.2-dev", + "dev-develop": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\HttpKernel\\": "" + "Zend\\Escaper\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } + "BSD-3-Clause" ], - "description": "Symfony HttpKernel Component", - "homepage": "http://symfony.com" + "keywords": [ + "escaper", + "zf2" + ] }, { - "name": "symfony/routing", - "version": "v2.3.0", - "version_normalized": "2.3.0.0", - "target-dir": "Symfony/Component/Routing", + "name": "zendframework/zend-feed", + "version": "2.2.1", + "version_normalized": "2.2.1.0", + "target-dir": "Zend/Feed", "source": { "type": "git", - "url": "https://github.com/symfony/Routing.git", - "reference": "v2.3.0" + "url": "https://github.com/zendframework/Component_ZendFeed.git", + "reference": "release-2.2.1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Routing/zipball/v2.3.0", - "reference": "v2.3.0", + "url": "https://api.github.com/repos/zendframework/Component_ZendFeed/zipball/release-2.2.1", + "reference": "release-2.2.1", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "doctrine/common": ">=2.2,<3.0", - "psr/log": ">=1.0,<2.0", - "symfony/config": ">=2.2,<3.0", - "symfony/yaml": ">=2.0,<3.0" + "php": ">=5.3.3", + "zendframework/zend-escaper": "self.version", + "zendframework/zend-stdlib": "self.version" }, "suggest": { - "doctrine/common": "", - "symfony/config": "", - "symfony/yaml": "" + "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations", + "zendframework/zend-validator": "Zend\\Validator component" }, - "time": "2013-05-20 08:57:26", + "time": "2013-06-12 19:45:31", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "2.2-dev", + "dev-develop": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\Routing\\": "" + "Zend\\Feed\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } + "BSD-3-Clause" ], - "description": "Symfony Routing Component", - "homepage": "http://symfony.com" + "description": "provides functionality for consuming RSS and Atom feeds", + "keywords": [ + "feed", + "zf2" + ] }, { - "name": "symfony-cmf/routing", - "version": "1.1.0-beta1", - "version_normalized": "1.1.0.0-beta1", - "target-dir": "Symfony/Cmf/Component/Routing", + "name": "doctrine/lexer", + "version": "v1.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "https://github.com/symfony-cmf/Routing.git", - "reference": "1.1.0-beta1" + "url": "https://github.com/doctrine/lexer.git", + "reference": "v1.0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/1.1.0-beta1", - "reference": "1.1.0-beta1", + "url": "https://github.com/doctrine/lexer/archive/v1.0.zip", + "reference": "v1.0", "shasum": "" }, "require": { - "php": ">=5.3.3", - "psr/log": ">=1.0,<2.0", - "symfony/http-kernel": ">=2.2,<3.0", - "symfony/routing": ">=2.2,<3.0" - }, - "suggest": { - "symfony/http-foundation": "ChainRouter/DynamicRouter have optional support for Request instances, several enhancers require a Request instances, ~2.2" + "php": ">=5.3.2" }, - "time": "2013-06-03 17:23:01", + "time": "2013-01-12 18:59:04", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Cmf\\Component\\Routing": "" + "Doctrine\\Common\\Lexer\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -889,47 +815,61 @@ ], "authors": [ { - "name": "Symfony CMF Community", - "homepage": "https://github.com/symfony-cmf/Routing/contributors" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" } ], - "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers", - "homepage": "http://cmf.symfony.com", + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", "keywords": [ - "database", - "routing" + "lexer", + "parser" ] }, { - "name": "symfony/yaml", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "target-dir": "Symfony/Component/Yaml", + "name": "doctrine/annotations", + "version": "v1.1.2", + "version_normalized": "1.1.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "v2.3.1" + "url": "https://github.com/doctrine/annotations.git", + "reference": "v1.1.2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/v2.3.1", - "reference": "v2.3.1", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/v1.1.2", + "reference": "v1.1.2", "shasum": "" }, "require": { - "php": ">=5.3.3" + "doctrine/lexer": "1.*", + "php": ">=5.3.2" }, - "time": "2013-05-10 18:12:13", + "require-dev": { + "doctrine/cache": "1.*" + }, + "time": "2013-06-16 21:33:03", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\Yaml\\": "" + "Doctrine\\Common\\Annotations\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -938,550 +878,666 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" }, { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" } ], - "description": "Symfony Yaml Component", - "homepage": "http://symfony.com" + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ] }, { - "name": "phpunit/php-text-template", - "version": "1.1.4", - "version_normalized": "1.1.4.0", + "name": "doctrine/collections", + "version": "v1.1", + "version_normalized": "1.1.0.0", "source": { "type": "git", - "url": "git://github.com/sebastianbergmann/php-text-template.git", - "reference": "1.1.4" + "url": "https://github.com/doctrine/collections.git", + "reference": "v1.1" }, "dist": { "type": "zip", - "url": "https://github.com/sebastianbergmann/php-text-template/zipball/1.1.4", - "reference": "1.1.4", + "url": "https://api.github.com/repos/doctrine/collections/zipball/v1.1", + "reference": "v1.1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.2" }, - "time": "2012-10-31 11:15:28", + "time": "2013-03-07 12:15:54", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, "installation-source": "dist", "autoload": { - "classmap": [ - "Text/" - ] + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", "keywords": [ - "template" + "array", + "collections", + "iterator" ] }, { - "name": "phpunit/phpunit-mock-objects", - "version": "1.2.3", - "version_normalized": "1.2.3.0", + "name": "doctrine/cache", + "version": "v1.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "git://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "1.2.3" + "url": "https://github.com/doctrine/cache.git", + "reference": "v1.0" }, "dist": { "type": "zip", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects/archive/1.2.3.zip", - "reference": "1.2.3", + "url": "https://github.com/doctrine/cache/archive/v1.0.zip", + "reference": "v1.0", "shasum": "" }, "require": { - "php": ">=5.3.3", - "phpunit/php-text-template": ">=1.1.1@stable" - }, - "suggest": { - "ext-soap": "*" + "php": ">=5.3.2" }, - "time": "2013-01-13 10:24:48", + "time": "2013-01-10 22:43:46", "type": "library", "installation-source": "dist", "autoload": { - "classmap": [ - "PHPUnit/" - ] + "psr-0": { + "Doctrine\\Common\\Cache\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", "keywords": [ - "mock", - "xunit" + "cache", + "caching" ] }, { - "name": "phpunit/php-timer", - "version": "1.0.4", - "version_normalized": "1.0.4.0", + "name": "doctrine/inflector", + "version": "v1.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "git://github.com/sebastianbergmann/php-timer.git", - "reference": "1.0.4" + "url": "https://github.com/doctrine/inflector.git", + "reference": "v1.0" }, "dist": { "type": "zip", - "url": "https://github.com/sebastianbergmann/php-timer/zipball/1.0.4", - "reference": "1.0.4", + "url": "https://github.com/doctrine/inflector/archive/v1.0.zip", + "reference": "v1.0", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.2" }, - "time": "2012-10-11 04:45:58", + "time": "2013-01-10 21:49:15", "type": "library", "installation-source": "dist", "autoload": { - "classmap": [ - "PHP/" - ] + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" } ], - "description": "Utility class for timing", - "homepage": "http://www.phpunit.de/", + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", "keywords": [ - "timer" + "inflection", + "pluarlize", + "singuarlize", + "string" ] }, { - "name": "phpunit/php-token-stream", - "version": "1.1.5", - "version_normalized": "1.1.5.0", + "name": "doctrine/common", + "version": "2.4.0-RC4", + "version_normalized": "2.4.0.0-RC4", "source": { "type": "git", - "url": "git://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1.1.5" + "url": "https://github.com/doctrine/common.git", + "reference": "2.4.0-RC4" }, "dist": { "type": "zip", - "url": "https://github.com/sebastianbergmann/php-token-stream/zipball/1.1.5", - "reference": "1.1.5", + "url": "https://api.github.com/repos/doctrine/common/zipball/2.4.0-RC4", + "reference": "2.4.0-RC4", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": ">=5.3.2" }, - "time": "2012-10-11 04:47:14", + "time": "2013-06-21 12:11:28", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4.x-dev" + } + }, "installation-source": "dist", "autoload": { - "classmap": [ - "PHP/" - ] + "psr-0": { + "Doctrine\\Common\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "http://www.phpunit.de/", + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", "keywords": [ - "tokenizer" + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" ] }, { - "name": "phpunit/php-file-iterator", - "version": "1.3.3", - "version_normalized": "1.3.3.0", + "name": "guzzle/common", + "version": "v3.7.1", + "version_normalized": "3.7.1.0", + "target-dir": "Guzzle/Common", "source": { "type": "git", - "url": "git://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "1.3.3" + "url": "https://github.com/guzzle/common.git", + "reference": "v3.7.1" }, "dist": { "type": "zip", - "url": "https://github.com/sebastianbergmann/php-file-iterator/zipball/1.3.3", - "reference": "1.3.3", + "url": "https://api.github.com/repos/guzzle/common/zipball/v3.7.1", + "reference": "v3.7.1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.2", + "symfony/event-dispatcher": ">=2.1" }, - "time": "2012-10-11 04:44:38", + "time": "2013-07-05 20:17:54", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + }, "installation-source": "dist", "autoload": { - "classmap": [ - "File/" - ] + "psr-0": { + "Guzzle\\Common": "" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } + "MIT" ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "http://www.phpunit.de/", + "description": "Common libraries used by Guzzle", + "homepage": "http://guzzlephp.org/", "keywords": [ - "filesystem", - "iterator" + "collection", + "common", + "event", + "exception" ] }, { - "name": "phpunit/php-code-coverage", - "version": "1.2.11", - "version_normalized": "1.2.11.0", + "name": "guzzle/stream", + "version": "v3.7.1", + "version_normalized": "3.7.1.0", + "target-dir": "Guzzle/Stream", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "1.2.11" + "url": "https://github.com/guzzle/stream.git", + "reference": "v3.7.1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1.2.11", - "reference": "1.2.11", + "url": "https://api.github.com/repos/guzzle/stream/zipball/v3.7.1", + "reference": "v3.7.1", "shasum": "" }, "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": ">=1.3.0@stable", - "phpunit/php-text-template": ">=1.1.1@stable", - "phpunit/php-token-stream": ">=1.1.3@stable" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" + "guzzle/common": "self.version", + "php": ">=5.3.2" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.0.5" + "guzzle/http": "To convert Guzzle request objects to PHP streams" + }, + "time": "2013-06-27 00:50:43", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } }, - "time": "2013-05-23 18:23:24", - "type": "library", "installation-source": "dist", "autoload": { - "classmap": [ - "PHP/" - ] + "psr-0": { + "Guzzle\\Stream": "" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "Guzzle stream wrapper component", + "homepage": "http://guzzlephp.org/", "keywords": [ - "coverage", - "testing", - "xunit" + "Guzzle", + "component", + "stream" ] }, { - "name": "phpunit/phpunit", - "version": "3.7.21", - "version_normalized": "3.7.21.0", + "name": "guzzle/parser", + "version": "v3.7.1", + "version_normalized": "3.7.1.0", + "target-dir": "Guzzle/Parser", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3.7.21" + "url": "https://github.com/guzzle/parser.git", + "reference": "v3.7.1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3.7.21", - "reference": "3.7.21", + "url": "https://api.github.com/repos/guzzle/parser/zipball/v3.7.1", + "reference": "v3.7.1", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpunit/php-code-coverage": ">=1.2.1,<1.3.0", - "phpunit/php-file-iterator": ">=1.3.1", - "phpunit/php-text-template": ">=1.1.1", - "phpunit/php-timer": ">=1.0.2,<1.1.0", - "phpunit/phpunit-mock-objects": ">=1.2.0,<1.3.0", - "symfony/yaml": ">=2.0,<3.0" - }, - "require-dev": { - "pear-pear/pear": "1.9.4" - }, - "suggest": { - "ext-json": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "phpunit/php-invoker": ">=1.1.0,<1.2.0" + "php": ">=5.3.2" }, - "time": "2013-05-23 18:54:29", - "bin": [ - "composer/bin/phpunit" - ], + "time": "2013-06-11 00:24:07", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7.x-dev" + "dev-master": "3.7-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "PHPUnit/" - ] + "psr-0": { + "Guzzle\\Parser": "" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "MIT" ], - "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", + "description": "Interchangeable parsers used by Guzzle", + "homepage": "http://guzzlephp.org/", "keywords": [ - "phpunit", - "testing", - "xunit" + "URI Template", + "cookie", + "http", + "message", + "url" ] }, { - "name": "zendframework/zend-stdlib", - "version": "2.2.1", - "version_normalized": "2.2.1.0", - "target-dir": "Zend/Stdlib", + "name": "guzzle/http", + "version": "v3.7.1", + "version_normalized": "3.7.1.0", + "target-dir": "Guzzle/Http", "source": { "type": "git", - "url": "https://github.com/zendframework/Component_ZendStdlib.git", - "reference": "release-2.2.1" + "url": "https://github.com/guzzle/http.git", + "reference": "v3.7.1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/release-2.2.1", - "reference": "release-2.2.1", + "url": "https://api.github.com/repos/guzzle/http/zipball/v3.7.1", + "reference": "v3.7.1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "guzzle/common": "self.version", + "guzzle/parser": "self.version", + "guzzle/stream": "self.version", + "php": ">=5.3.2" }, "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + "ext-curl": "*" }, - "time": "2013-06-12 19:46:58", + "time": "2013-07-02 19:53:26", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev", - "dev-develop": "2.3-dev" + "dev-master": "3.7-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Zend\\Stdlib\\": "" + "Guzzle\\Http": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } ], + "description": "HTTP libraries used by Guzzle", + "homepage": "http://guzzlephp.org/", "keywords": [ - "stdlib", - "zf2" + "Guzzle", + "client", + "curl", + "http", + "http client" ] }, { - "name": "zendframework/zend-escaper", - "version": "2.2.1", - "version_normalized": "2.2.1.0", - "target-dir": "Zend/Escaper", + "name": "symfony/class-loader", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/ClassLoader", "source": { "type": "git", - "url": "https://github.com/zendframework/Component_ZendEscaper.git", - "reference": "release-2.2.1" + "url": "https://github.com/symfony/ClassLoader.git", + "reference": "622d370a07321329f5259c6f96d5c636104ad46b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendEscaper/zipball/release-2.2.1", - "reference": "release-2.2.1", + "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/622d370a07321329f5259c6f96d5c636104ad46b", + "reference": "622d370a07321329f5259c6f96d5c636104ad46b", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "time": "2013-05-01 21:53:03", + "require-dev": { + "symfony/finder": "~2.0" + }, + "time": "2013-08-13 20:18:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev", - "dev-develop": "2.3-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Zend\\Escaper\\": "" + "Symfony\\Component\\ClassLoader\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "keywords": [ - "escaper", - "zf2" - ] + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony ClassLoader Component", + "homepage": "http://symfony.com" }, { - "name": "zendframework/zend-feed", - "version": "2.2.1", - "version_normalized": "2.2.1.0", - "target-dir": "Zend/Feed", + "name": "symfony/dependency-injection", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/DependencyInjection", "source": { "type": "git", - "url": "https://github.com/zendframework/Component_ZendFeed.git", - "reference": "release-2.2.1" + "url": "https://github.com/symfony/DependencyInjection.git", + "reference": "3678aa969e5bfeb8515a1f3047c63e8104723f5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendFeed/zipball/release-2.2.1", - "reference": "release-2.2.1", + "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/3678aa969e5bfeb8515a1f3047c63e8104723f5c", + "reference": "3678aa969e5bfeb8515a1f3047c63e8104723f5c", "shasum": "" }, "require": { - "php": ">=5.3.3", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/config": "~2.2", + "symfony/yaml": "~2.0" }, "suggest": { - "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations", - "zendframework/zend-validator": "Zend\\Validator component" + "symfony/config": "", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" }, - "time": "2013-06-12 19:45:31", + "time": "2013-07-25 17:13:25", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev", - "dev-develop": "2.3-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Zend\\Feed\\": "" + "Symfony\\Component\\DependencyInjection\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides functionality for consuming RSS and Atom feeds", - "keywords": [ - "feed", - "zf2" - ] + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "http://symfony.com" }, { - "name": "doctrine/lexer", - "version": "v1.0", - "version_normalized": "1.0.0.0", + "name": "symfony/debug", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/Debug", "source": { "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "v1.0" + "url": "https://github.com/symfony/Debug.git", + "reference": "729f6d19cfc401c4942e43fcc1059103bd6df130" }, "dist": { "type": "zip", - "url": "https://github.com/doctrine/lexer/archive/v1.0.zip", - "reference": "v1.0", + "url": "https://api.github.com/repos/symfony/Debug/zipball/729f6d19cfc401c4942e43fcc1059103bd6df130", + "reference": "729f6d19cfc401c4942e43fcc1059103bd6df130", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/http-foundation": "~2.1", + "symfony/http-kernel": "~2.1" + }, + "suggest": { + "symfony/class-loader": "", + "symfony/http-foundation": "", + "symfony/http-kernel": "" }, - "time": "2013-01-12 18:59:04", + "time": "2013-08-08 14:16:10", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, "installation-source": "dist", "autoload": { "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" + "Symfony\\Component\\Debug\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1490,62 +1546,51 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "lexer", - "parser" - ] + "description": "Symfony Debug Component", + "homepage": "http://symfony.com" }, { - "name": "doctrine/annotations", - "version": "v1.1.2", - "version_normalized": "1.1.2.0", + "name": "symfony/http-foundation", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/HttpFoundation", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "v1.1.2" + "url": "https://github.com/symfony/HttpFoundation.git", + "reference": "fdf130fe65457aedbc4639a22f4ef9d3be5c002c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/v1.1.2", - "reference": "v1.1.2", + "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/fdf130fe65457aedbc4639a22f4ef9d3be5c002c", + "reference": "fdf130fe65457aedbc4639a22f4ef9d3be5c002c", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", - "php": ">=5.3.2" - }, - "require-dev": { - "doctrine/cache": "1.*" + "php": ">=5.3.3" }, - "time": "2013-06-16 21:33:03", + "time": "2013-08-26 05:49:51", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Doctrine\\Common\\Annotations\\": "lib/" - } + "Symfony\\Component\\HttpFoundation\\": "" + }, + "classmap": [ + "Symfony/Component/HttpFoundation/Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1553,67 +1598,54 @@ ], "authors": [ { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "docblock", - "parser" - ] + "description": "Symfony HttpFoundation Component", + "homepage": "http://symfony.com" }, { - "name": "doctrine/collections", - "version": "v1.1", - "version_normalized": "1.1.0.0", + "name": "symfony/event-dispatcher", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/EventDispatcher", "source": { "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "v1.1" + "url": "https://github.com/symfony/EventDispatcher.git", + "reference": "41c9826457c65fa3cf746f214985b7ca9cba42f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/v1.1", - "reference": "v1.1", + "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/41c9826457c65fa3cf746f214985b7ca9cba42f8", + "reference": "41c9826457c65fa3cf746f214985b7ca9cba42f8", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=5.3.3" }, - "time": "2013-03-07 12:15:54", + "require-dev": { + "symfony/dependency-injection": "~2.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "time": "2013-07-21 12:12:18", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Doctrine\\Common\\Collections\\": "lib/" + "Symfony\\Component\\EventDispatcher\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1622,62 +1654,71 @@ ], "authors": [ { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], - "description": "Collections Abstraction library", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "array", - "collections", - "iterator" - ] + "description": "Symfony EventDispatcher Component", + "homepage": "http://symfony.com" }, { - "name": "doctrine/cache", - "version": "v1.0", - "version_normalized": "1.0.0.0", + "name": "symfony/http-kernel", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/HttpKernel", "source": { "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "v1.0" + "url": "https://github.com/symfony/HttpKernel.git", + "reference": "9d35da40f07bbe7a4f8dfbc41555d2b69de674bf" }, "dist": { "type": "zip", - "url": "https://github.com/doctrine/cache/archive/v1.0.zip", - "reference": "v1.0", + "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/9d35da40f07bbe7a4f8dfbc41555d2b69de674bf", + "reference": "9d35da40f07bbe7a4f8dfbc41555d2b69de674bf", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=5.3.3", + "psr/log": "~1.0", + "symfony/debug": "~2.3", + "symfony/event-dispatcher": "~2.1", + "symfony/http-foundation": "~2.2" }, - "time": "2013-01-10 22:43:46", + "require-dev": { + "symfony/browser-kit": "~2.2", + "symfony/class-loader": "~2.1", + "symfony/config": "~2.0", + "symfony/console": "~2.2", + "symfony/dependency-injection": "~2.0", + "symfony/finder": "~2.0", + "symfony/process": "~2.0", + "symfony/routing": "~2.2", + "symfony/stopwatch": "~2.2", + "symfony/templating": "~2.2" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/class-loader": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "" + }, + "time": "2013-08-27 08:58:24", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, "installation-source": "dist", "autoload": { "psr-0": { - "Doctrine\\Common\\Cache\\": "lib/" + "Symfony\\Component\\HttpKernel\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1686,136 +1727,107 @@ ], "authors": [ { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], - "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "cache", - "caching" - ] + "description": "Symfony HttpKernel Component", + "homepage": "http://symfony.com" }, { - "name": "doctrine/inflector", - "version": "v1.0", - "version_normalized": "1.0.0.0", + "name": "symfony/routing", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/Routing", "source": { "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "v1.0" + "url": "https://github.com/symfony/Routing.git", + "reference": "69af3f07dbf3ae93dd513dbc373f561cb2e7f143" }, "dist": { "type": "zip", - "url": "https://github.com/doctrine/inflector/archive/v1.0.zip", - "reference": "v1.0", + "url": "https://api.github.com/repos/symfony/Routing/zipball/69af3f07dbf3ae93dd513dbc373f561cb2e7f143", + "reference": "69af3f07dbf3ae93dd513dbc373f561cb2e7f143", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=5.3.3" }, - "time": "2013-01-10 21:49:15", + "require-dev": { + "doctrine/common": "~2.2", + "psr/log": "~1.0", + "symfony/config": "~2.2", + "symfony/yaml": "~2.0" + }, + "suggest": { + "doctrine/common": "", + "symfony/config": "", + "symfony/yaml": "" + }, + "time": "2013-08-23 15:14:07", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, "installation-source": "dist", "autoload": { "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "Symfony\\Component\\Routing\\": "" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluarlize", - "singuarlize", - "string" - ] + "description": "Symfony Routing Component", + "homepage": "http://symfony.com" }, { - "name": "doctrine/common", - "version": "2.4.0-RC4", - "version_normalized": "2.4.0.0-RC4", + "name": "symfony/serializer", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/Serializer", "source": { "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "2.4.0-RC4" + "url": "https://github.com/symfony/Serializer.git", + "reference": "457ba76395955926a67ea692957b0872dead5278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/2.4.0-RC4", - "reference": "2.4.0-RC4", + "url": "https://api.github.com/repos/symfony/Serializer/zipball/457ba76395955926a67ea692957b0872dead5278", + "reference": "457ba76395955926a67ea692957b0872dead5278", "shasum": "" }, "require": { - "doctrine/annotations": "1.*", - "doctrine/cache": "1.*", - "doctrine/collections": "1.*", - "doctrine/inflector": "1.*", - "doctrine/lexer": "1.*", - "php": ">=5.3.2" + "php": ">=5.3.3" }, - "time": "2013-06-21 12:11:28", + "time": "2013-07-21 12:12:18", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4.x-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Doctrine\\Common\\": "lib/" + "Symfony\\Component\\Serializer\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1824,120 +1836,118 @@ ], "authors": [ { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" - ] + "description": "Symfony Serializer Component", + "homepage": "http://symfony.com" }, { - "name": "guzzle/common", - "version": "v3.7.1", - "version_normalized": "3.7.1.0", - "target-dir": "Guzzle/Common", + "name": "symfony/translation", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/Translation", "source": { "type": "git", - "url": "https://github.com/guzzle/common.git", - "reference": "v3.7.1" + "url": "https://github.com/symfony/Translation.git", + "reference": "65f888291f0896ad492f9abc6dc05c998373aded" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/common/zipball/v3.7.1", - "reference": "v3.7.1", + "url": "https://api.github.com/repos/symfony/Translation/zipball/65f888291f0896ad492f9abc6dc05c998373aded", + "reference": "65f888291f0896ad492f9abc6dc05c998373aded", "shasum": "" }, "require": { - "php": ">=5.3.2", - "symfony/event-dispatcher": ">=2.1" + "php": ">=5.3.3" }, - "time": "2013-07-05 20:17:54", + "require-dev": { + "symfony/config": "~2.0", + "symfony/yaml": "~2.2" + }, + "suggest": { + "symfony/config": "", + "symfony/yaml": "" + }, + "time": "2013-08-26 05:49:51", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Guzzle\\Common": "" + "Symfony\\Component\\Translation\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Common libraries used by Guzzle", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "collection", - "common", - "event", - "exception" - ] + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "http://symfony.com" }, { - "name": "guzzle/stream", - "version": "v3.7.1", - "version_normalized": "3.7.1.0", - "target-dir": "Guzzle/Stream", + "name": "symfony/validator", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/Validator", "source": { "type": "git", - "url": "https://github.com/guzzle/stream.git", - "reference": "v3.7.1" + "url": "https://github.com/symfony/Validator.git", + "reference": "8f6f6be47fb8e1179cd225b1f949630e26221e42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/stream/zipball/v3.7.1", - "reference": "v3.7.1", + "url": "https://api.github.com/repos/symfony/Validator/zipball/8f6f6be47fb8e1179cd225b1f949630e26221e42", + "reference": "8f6f6be47fb8e1179cd225b1f949630e26221e42", "shasum": "" }, "require": { - "guzzle/common": "self.version", - "php": ">=5.3.2" + "php": ">=5.3.3", + "symfony/translation": "~2.0" + }, + "require-dev": { + "symfony/config": "~2.2", + "symfony/http-foundation": "~2.1", + "symfony/intl": "~2.3", + "symfony/yaml": "~2.0" }, "suggest": { - "guzzle/http": "To convert Guzzle request objects to PHP streams" + "doctrine/common": "", + "symfony/config": "", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/yaml": "" }, - "time": "2013-06-27 00:50:43", + "time": "2013-08-24 15:26:22", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Guzzle\\Stream": "" + "Symfony\\Component\\Validator\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1946,101 +1956,96 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], - "description": "Guzzle stream wrapper component", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "Guzzle", - "component", - "stream" - ] + "description": "Symfony Validator Component", + "homepage": "http://symfony.com" }, { - "name": "guzzle/parser", - "version": "v3.7.1", - "version_normalized": "3.7.1.0", - "target-dir": "Guzzle/Parser", + "name": "symfony/yaml", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/Yaml", "source": { "type": "git", - "url": "https://github.com/guzzle/parser.git", - "reference": "v3.7.1" + "url": "https://github.com/symfony/Yaml.git", + "reference": "5a279f1b5f5e1045a6c432354d9ea727ff3a9847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/parser/zipball/v3.7.1", - "reference": "v3.7.1", + "url": "https://api.github.com/repos/symfony/Yaml/zipball/5a279f1b5f5e1045a6c432354d9ea727ff3a9847", + "reference": "5a279f1b5f5e1045a6c432354d9ea727ff3a9847", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=5.3.3" }, - "time": "2013-06-11 00:24:07", + "time": "2013-08-24 15:26:22", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Guzzle\\Parser": "" + "Symfony\\Component\\Yaml\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Interchangeable parsers used by Guzzle", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "URI Template", - "cookie", - "http", - "message", - "url" - ] + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "http://symfony.com" }, { - "name": "guzzle/http", - "version": "v3.7.1", - "version_normalized": "3.7.1.0", - "target-dir": "Guzzle/Http", + "name": "symfony/process", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "target-dir": "Symfony/Component/Process", "source": { "type": "git", - "url": "https://github.com/guzzle/http.git", - "reference": "v3.7.1" + "url": "https://github.com/symfony/Process.git", + "reference": "1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/http/zipball/v3.7.1", - "reference": "v3.7.1", + "url": "https://api.github.com/repos/symfony/Process/zipball/1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b", + "reference": "1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b", "shasum": "" }, "require": { - "guzzle/common": "self.version", - "guzzle/parser": "self.version", - "guzzle/stream": "self.version", - "php": ">=5.3.2" - }, - "suggest": { - "ext-curl": "*" + "php": ">=5.3.3" }, - "time": "2013-07-02 19:53:26", + "time": "2013-08-22 06:42:25", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7-dev" + "dev-master": "2.3-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Guzzle\\Http": "" + "Symfony\\Component\\Process\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2049,19 +2054,15 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], - "description": "HTTP libraries used by Guzzle", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "Guzzle", - "client", - "curl", - "http", - "http client" - ] + "description": "Symfony Process Component", + "homepage": "http://symfony.com" } ] diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/.gitignore b/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/.gitignore +++ b/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassLoader.php b/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassLoader.php index 1a359794ab2c507e65915857522b56a662ff1190..00de5b980bdd0ea32501fc826ef1304d183cec6e 100644 --- a/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassLoader.php +++ b/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassLoader.php @@ -177,7 +177,7 @@ public function findFile($class) $classPath .= str_replace('_', DIRECTORY_SEPARATOR, $className).'.php'; foreach ($this->prefixes as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { + if ($class === strstr($class, $prefix)) { foreach ($dirs as $dir) { if (file_exists($dir.DIRECTORY_SEPARATOR.$classPath)) { return $dir.DIRECTORY_SEPARATOR.$classPath; diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php index 07ee7c1b6c97dc63113d2890a27cc4518dbd685d..52fd7a50f7d5517eeab4df3b0333cd22257b631e 100644 --- a/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php +++ b/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php @@ -104,6 +104,7 @@ public function handle($level, $message, $file = 'unknown', $line = 0, $context $stack = array_map( function ($row) { unset($row['args']); + return $row; }, array_slice(debug_backtrace(false), 0, 10) @@ -119,6 +120,11 @@ function ($row) { } if ($this->displayErrors && error_reporting() & $level && $this->level & $level) { + // make sure the ContextErrorException class is loaded (https://bugs.php.net/bug.php?id=65322) + if (!class_exists('Symfony\Component\Debug\Exception\ContextErrorException')) { + require __DIR__.'/Exception/ContextErrorException.php'; + } + throw new ContextErrorException(sprintf('%s: %s in %s line %d', isset($this->levels[$level]) ? $this->levels[$level] : $level, $message, $file, $line), 0, $level, $file, $line, $context); } diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ContextErrorException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ContextErrorException.php index 2e0115f0cfec187dc22488f55cf3dda629e5c910..ea27922808532fe1df586ac8d5c141308cab2de4 100644 --- a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ContextErrorException.php +++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ContextErrorException.php @@ -19,18 +19,18 @@ class ContextErrorException extends \ErrorException { private $context = array(); - + public function __construct($message, $code, $severity, $filename, $lineno, $context = array()) { parent::__construct($message, $code, $severity, $filename, $lineno); $this->context = $context; } - + /** * @return array Array of variables that existed when the exception occured */ public function getContext() { return $this->context; - } + } } diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php index db06f6107e6ecfd0b82166e6bb65a28cb810137a..24c422fe54c8d94168d04ad287f3f43e115314b3 100644 --- a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php +++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php @@ -20,6 +20,31 @@ */ class ErrorHandlerTest extends \PHPUnit_Framework_TestCase { + public function testCompileTimeError() + { + // the ContextErrorException must not be loaded for this test to work + if (class_exists('Symfony\Component\Debug\Exception\ContextErrorException', false)) { + $this->markTestSkipped('The ContextErrorException class is already loaded.'); + } + + $handler = ErrorHandler::register(E_ALL | E_STRICT); + $displayErrors = ini_get('display_errors'); + ini_set('display_errors', '1'); + + try { + // trigger compile time error + eval(<<<'PHP' +class _BaseCompileTimeError { function foo() {} } +class _CompileTimeError extends _BaseCompileTimeError { function foo($invalid) {} } +PHP + ); + } catch(\Exception $e) { + // if an exception is thrown, the test passed + } + + ini_set('display_errors', $displayErrors); + restore_error_handler(); + } public function testConstruct() { diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/.gitignore b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/.gitignore +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php index 4fb5b0d3bf0c612a43a8aa146bc94d80b8aff244..c5187f3b91d1f600085121ae566b4bed35d957bc 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php @@ -87,6 +87,7 @@ private function resolveDefinition($id, DefinitionDecorator $definition) $def->setConfigurator($parentDef->getConfigurator()); $def->setFile($parentDef->getFile()); $def->setPublic($parentDef->isPublic()); + $def->setLazy($parentDef->isLazy()); // overwrite with values specified in the decorator $changes = $definition->getChanges(); @@ -111,6 +112,9 @@ private function resolveDefinition($id, DefinitionDecorator $definition) if (isset($changes['public'])) { $def->setPublic($definition->isPublic()); } + if (isset($changes['lazy'])){ + $def->setLazy($definition->isLazy()); + } // merge arguments foreach ($definition->getArguments() as $k => $v) { diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Container.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Container.php index ef561e1dedca24831c9d616fd63b685d4bc61415..ab0abf316fc9ade238e4bf6926c3c606f5188887 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Container.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Container.php @@ -88,6 +88,7 @@ public function __construct(ParameterBagInterface $parameterBag = null) $this->parameterBag = null === $parameterBag ? new ParameterBag() : $parameterBag; $this->services = array(); + $this->aliases = array(); $this->scopes = array(); $this->scopeChildren = array(); $this->scopedServices = array(); @@ -183,6 +184,9 @@ public function setParameter($name, $value) /** * Sets a service. * + * Setting a service to null resets the service: has() returns false and get() + * behaves in the same way as if the service was never created. + * * @param string $id The service identifier * @param object $service The service instance * @param string $scope The scope of the service @@ -213,6 +217,14 @@ public function set($id, $service, $scope = self::SCOPE_CONTAINER) if (method_exists($this, $method = 'synchronize'.strtr($id, array('_' => '', '.' => '_')).'Service')) { $this->$method(); } + + if (self::SCOPE_CONTAINER !== $scope && null === $service) { + unset($this->scopedServices[$scope][$id]); + } + + if (null === $service) { + unset($this->services[$id]); + } } /** @@ -228,7 +240,10 @@ public function has($id) { $id = strtolower($id); - return array_key_exists($id, $this->services) || method_exists($this, 'get'.strtr($id, array('_' => '', '.' => '_')).'Service'); + return array_key_exists($id, $this->services) + || array_key_exists($id, $this->aliases) + || method_exists($this, 'get'.strtr($id, array('_' => '', '.' => '_')).'Service') + ; } /** @@ -509,7 +524,7 @@ public function isScopeActive($name) */ public static function camelize($id) { - return preg_replace_callback('/(^|_|\.)+(.)/', function ($match) { return ('.' === $match[1] ? '_' : '').strtoupper($match[2]); }, $id); + return strtr(ucwords(strtr($id, array('_' => ' ', '.' => '_ '))), array(' ' => '')); } /** diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/DefinitionDecorator.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/DefinitionDecorator.php index ad3c3c1dd03aa922b66a6b79b714fc2e44ffc13e..1f72b8f16b2e8d277770e5658a389cb67e255cdc 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/DefinitionDecorator.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/DefinitionDecorator.php @@ -149,6 +149,18 @@ public function setPublic($boolean) return parent::setPublic($boolean); } + /** + * {@inheritDoc} + * + * @api + */ + public function setLazy($boolean) + { + $this->changes['lazy'] = true; + + return parent::setLazy($boolean); + } + /** * Gets an argument to pass to the service constructor/factory method. * diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 0c622747cc54e1d0b2b33069915cc3a442a33864..8888d3f3f433aa26b5e0609edb00693fae7b6645 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -490,7 +490,6 @@ private function addServiceConfigurator($id, $definition, $variableName = 'insta */ private function addService($id, $definition) { - $name = Container::camelize($id); $this->definitionVariables = new \SplObjectStorage(); $this->referenceVariables = array(); $this->variableCount = 0; @@ -555,7 +554,7 @@ private function addService($id, $definition) *$lazyInitializationDoc * $return */ - {$visibility} function get{$name}Service($lazyInitialization) + {$visibility} function get{$this->camelize($id)}Service($lazyInitialization) { EOF; @@ -656,14 +655,12 @@ private function addServiceSynchronizer($id, Definition $definition) return; } - $name = Container::camelize($id); - return <<<EOF /** * Updates the '$id' service. */ - protected function synchronize{$name}Service() + protected function synchronize{$this->camelize($id)}Service() { $code } @@ -835,7 +832,7 @@ private function addMethodMap() $code = " \$this->methodMap = array(\n"; ksort($definitions); foreach ($definitions as $id => $definition) { - $code .= ' '.var_export($id, true).' => '.var_export('get'.Container::camelize($id).'Service', true).",\n"; + $code .= ' '.var_export($id, true).' => '.var_export('get'.$this->camelize($id).'Service', true).",\n"; } return $code . " );\n"; @@ -849,7 +846,11 @@ private function addMethodMap() private function addAliases() { if (!$aliases = $this->container->getAliases()) { - return ''; + if ($this->container->isFrozen()) { + return "\n \$this->aliases = array();\n"; + } else { + return ''; + } } $code = " \$this->aliases = array(\n"; @@ -1256,6 +1257,26 @@ private function getServiceCall($id, Reference $reference = null) } } + /** + * Convert a service id to a valid PHP method name. + * + * @param string $id + * + * @return string + * + * @throws InvalidArgumentException + */ + private function camelize($id) + { + $name = Container::camelize($id); + + if (!preg_match('/^[a-zA-Z0-9_\x7f-\xff]+$/', $name)) { + throw new InvalidArgumentException(sprintf('Service id "%s" cannot be converted to a valid PHP method name.', $id)); + } + + return $name; + } + /** * Returns the next name to use * diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/DumperInterface.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/DumperInterface.php index d8d5dac47095c712bd496e3110b893d0ef8ea418..475d26f3a1c64d613a2c026a74f32c14e8fedc78 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/DumperInterface.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/DumperInterface.php @@ -11,7 +11,6 @@ namespace Symfony\Component\DependencyInjection\LazyProxy\PhpDumper; -use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; /** diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/NullDumper.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/NullDumper.php index e1d4ff4dea900323611c6574f459134b2085e446..83a2909fc2c7a5bee36a21136fa1650bb52cd7fb 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/NullDumper.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/LazyProxy/PhpDumper/NullDumper.php @@ -11,7 +11,6 @@ namespace Symfony\Component\DependencyInjection\LazyProxy\PhpDumper; -use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; /** diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php index f3c5b1544d88bb759426eae45914d71d9b947b4c..98e0c871e02a1d98fc8183b67c3108059a85d4ff 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php @@ -143,6 +143,36 @@ public function testProcessHandlesMultipleInheritance() $this->assertEquals('foo', $def->getClass()); } + public function testSetLazyOnServiceHasParent() + { + $container = new ContainerBuilder(); + + $container->register('parent','stdClass'); + + $container->setDefinition('child1',new DefinitionDecorator('parent')) + ->setLazy(true) + ; + + $this->process($container); + + $this->assertTrue($container->getDefinition('child1')->isLazy()); + } + + public function testSetLazyOnServiceIsParent() + { + $container = new ContainerBuilder(); + + $container->register('parent','stdClass') + ->setLazy(true) + ; + + $container->setDefinition('child1',new DefinitionDecorator('parent')); + + $this->process($container); + + $this->assertTrue($container->getDefinition('child1')->isLazy()); + } + protected function process(ContainerBuilder $container) { $pass = new ResolveDefinitionTemplatesPass(); diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerTest.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerTest.php index f49a567f527fc0cb56f6f0c8aaf07c1d774b9909..6c49982bea6c0510240c3fd5779f284cafd8e658 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerTest.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerTest.php @@ -31,6 +31,29 @@ public function testConstructor() $this->assertEquals(array('foo' => 'bar'), $sc->getParameterBag()->all(), '__construct() takes an array of parameters as its first argument'); } + /** + * @dataProvider dataForTestCamelize + */ + public function testCamelize($id, $expected) + { + $this->assertEquals($expected, Container::camelize($id), sprintf('Container::camelize("%s")', $id)); + } + + public function dataForTestCamelize() + { + return array( + array('foo_bar', 'FooBar'), + array('foo.bar', 'Foo_Bar'), + array('foo.bar_baz', 'Foo_BarBaz'), + array('foo._bar', 'Foo_Bar'), + array('foo_.bar', 'Foo_Bar'), + array('_foo', 'Foo'), + array('.foo', '_Foo'), + array('foo_', 'Foo'), + array('foo.', 'Foo_'), + ); + } + /** * @covers Symfony\Component\DependencyInjection\Container::compile */ @@ -112,6 +135,16 @@ public function testSet() $this->assertEquals($foo, $sc->get('foo'), '->set() sets a service'); } + /** + * @covers Symfony\Component\DependencyInjection\Container::set + */ + public function testSetWithNullResetTheService() + { + $sc = new Container(); + $sc->set('foo', null); + $this->assertFalse($sc->has('foo')); + } + /** * @expectedException \InvalidArgumentException */ @@ -477,6 +510,14 @@ protected function getField($obj, $field) return $reflection->getValue($obj); } + + public function testAlias() + { + $c = new ProjectServiceContainer(); + + $this->assertTrue($c->has('alias')); + $this->assertSame($c->get('alias'), $c->get('bar')); + } } class ProjectServiceContainer extends Container @@ -490,6 +531,7 @@ public function __construct() $this->__bar = new \stdClass(); $this->__foo_bar = new \stdClass(); $this->__foo_baz = new \stdClass(); + $this->aliases = array('alias' => 'bar'); } protected function getScopedService() diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionDecoratorTest.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionDecoratorTest.php index bf1bab1e298e05ab4b32ce950e0db5408bced4fd..8be8b64230ef2166e2df9ffeed70c55dcc93de82 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionDecoratorTest.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/DefinitionDecoratorTest.php @@ -61,6 +61,16 @@ public function testSetPublic() $this->assertEquals(array('public' => true), $def->getChanges()); } + public function testSetLazy() + { + $def = new DefinitionDecorator('foo'); + + $this->assertFalse($def->isLazy()); + $this->assertSame($def, $def->setLazy(false)); + $this->assertFalse($def->isLazy()); + $this->assertEquals(array('lazy' => true), $def->getChanges()); + } + public function testSetArgument() { $def = new DefinitionDecorator('foo'); diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php index 0ea42d473b0f221d7af02b23f3616d8ad13aae34..8bd31b076c398094a75ba910ac3c1432b3c94d5d 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php @@ -120,6 +120,18 @@ public function testAddService() } } + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Service id "bar$" cannot be converted to a valid PHP method name. + */ + public function testAddServiceInvalidServiceId() + { + $container = new ContainerBuilder(); + $container->register('bar$', 'FooClass'); + $dumper = new PhpDumper($container); + $dumper->dump(); + } + public function testAliases() { $container = include self::$fixturesPath.'/containers/container9.php'; @@ -134,6 +146,18 @@ public function testAliases() $this->assertSame($foo, $container->get('alias_for_alias')); } + public function testFrozenContainerWithoutAliases() + { + $container = new ContainerBuilder(); + $container->compile(); + + $dumper = new PhpDumper($container); + eval('?>'.$dumper->dump(array('class' => 'Symfony_DI_PhpDumper_Test_Frozen_No_Aliases'))); + + $container = new \Symfony_DI_PhpDumper_Test_Frozen_No_Aliases(); + $this->assertFalse($container->has('foo')); + } + public function testOverrideServiceWhenUsingADumpedContainer() { require_once self::$fixturesPath.'/php/services9.php'; diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php index 15c16709d325135f149974ab9abfbd2ec957a5b8..8796df8ae53957c5db307a168e78aecdf3bc5d27 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php @@ -36,6 +36,8 @@ public function __construct() $this->methodMap = array( 'test' => 'getTestService', ); + + $this->aliases = array(); } /** diff --git a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/IniFileLoaderTest.php b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/IniFileLoaderTest.php index bba9c8c85feb978fe3738ae13b18b35720b1020f..220ad7fe4d871cd025944bf74d2b40c24e49a434 100644 --- a/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/IniFileLoaderTest.php +++ b/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/IniFileLoaderTest.php @@ -50,31 +50,25 @@ public function testIniFileCanBeLoaded() /** * @covers Symfony\Component\DependencyInjection\Loader\IniFileLoader::__construct * @covers Symfony\Component\DependencyInjection\Loader\IniFileLoader::load + * + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage The file "foo.ini" does not exist (in: */ public function testExceptionIsRaisedWhenIniFileDoesNotExist() { - try { - $this->loader->load('foo.ini'); - $this->fail('->load() throws an InvalidArgumentException if the loaded file does not exist'); - } catch (\Exception $e) { - $this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the loaded file does not exist'); - $this->assertStringStartsWith('The file "foo.ini" does not exist (in: ', $e->getMessage(), '->load() throws an InvalidArgumentException if the loaded file does not exist'); - } + $this->loader->load('foo.ini'); } /** * @covers Symfony\Component\DependencyInjection\Loader\IniFileLoader::__construct * @covers Symfony\Component\DependencyInjection\Loader\IniFileLoader::load + * + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage The "nonvalid.ini" file is not valid. */ public function testExceptionIsRaisedWhenIniFileCannotBeParsed() { - try { - @$this->loader->load('nonvalid.ini'); - $this->fail('->load() throws an InvalidArgumentException if the loaded file is not parseable'); - } catch (\Exception $e) { - $this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the loaded file is not parseable'); - $this->assertEquals('The "nonvalid.ini" file is not valid.', $e->getMessage(), '->load() throws an InvalidArgumentException if the loaded file is not parseable'); - } + @$this->loader->load('nonvalid.ini'); } /** diff --git a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/.gitignore b/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/.gitignore +++ b/core/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/.gitignore b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/.gitignore +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php index 756e4847d8d4437036e2853669beb5a39f9a015c..4641eadab132fb285603229a4058075ce210519a 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php @@ -37,6 +37,16 @@ class Request protected static $trustedProxies = array(); + /** + * @var string[] + */ + protected static $trustedHostPatterns = array(); + + /** + * @var string[] + */ + protected static $trustedHosts = array(); + /** * Names for headers that can be trusted when * using trusted proxies. @@ -394,6 +404,10 @@ public function duplicate(array $query = null, array $request = null, array $att $dup->method = null; $dup->format = null; + if (!$dup->get('_format')) { + $dup->setRequestFormat($this->getRequestFormat()); + } + return $dup; } @@ -486,6 +500,32 @@ public static function getTrustedProxies() return self::$trustedProxies; } + /** + * Sets a list of trusted host patterns. + * + * You should only list the hosts you manage using regexs. + * + * @param array $hostPatterns A list of trusted host patterns + */ + public static function setTrustedHosts(array $hostPatterns) + { + self::$trustedHostPatterns = array_map(function ($hostPattern) { + return sprintf('{%s}i', str_replace('}', '\\}', $hostPattern)); + }, $hostPatterns); + // we need to reset trusted hosts on trusted host patterns change + self::$trustedHosts = array(); + } + + /** + * Gets the list of trusted host patterns. + * + * @return array An array of trusted host patterns. + */ + public static function getTrustedHosts() + { + return self::$trustedHostPatterns; + } + /** * Sets the name for trusted headers. * @@ -1065,7 +1105,25 @@ public function getHost() // as the host can come from the user (HTTP_HOST and depending on the configuration, SERVER_NAME too can come from the user) // check that it does not contain forbidden characters (see RFC 952 and RFC 2181) if ($host && !preg_match('/^\[?(?:[a-zA-Z0-9-:\]_]+\.?)+$/', $host)) { - throw new \UnexpectedValueException('Invalid Host'); + throw new \UnexpectedValueException('Invalid Host "'.$host.'"'); + } + + if (count(self::$trustedHostPatterns) > 0) { + // to avoid host header injection attacks, you should provide a list of trusted host patterns + + if (in_array($host, self::$trustedHosts)) { + return $host; + } + + foreach (self::$trustedHostPatterns as $pattern) { + if (preg_match($pattern, $host)) { + self::$trustedHosts[] = $host; + + return $host; + } + } + + throw new \UnexpectedValueException('Untrusted Host "'.$host.'"'); } return $host; diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcher.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcher.php index 769ca66ecd4894064a0594edd8fea8247550f88b..da95c3acc14d89226a306ab54d9712e8115d6787 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcher.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcher.php @@ -155,7 +155,6 @@ public function matches(Request $request) // Note to future implementors: add additional checks above the // foreach above or else your check might not be run! - return count($this->ips) === 0; } } diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php index c4c5a53da6df8f067c1c40e42e454a6bd2c66103..25c49c9419d84ec9229482fa77a5054a9c699c90 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php @@ -321,8 +321,16 @@ public function send() $obStatus = ob_get_status(1); while (($level = ob_get_level()) > 0 && $level !== $previous) { $previous = $level; - if ($obStatus[$level - 1] && isset($obStatus[$level - 1]['del']) && $obStatus[$level - 1]['del']) { - ob_end_flush(); + if ($obStatus[$level - 1]) { + if (version_compare(PHP_VERSION, '5.4', '>=')) { + if (isset($obStatus[$level - 1]['flags']) && ($obStatus[$level - 1]['flags'] & PHP_OUTPUT_HANDLER_REMOVABLE)) { + ob_end_flush(); + } + } else { + if (isset($obStatus[$level - 1]['del']) && $obStatus[$level - 1]['del']) { + ob_end_flush(); + } + } } } flush(); diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php index 25dcd228694c943facf2db9c1c285ee656281005..c0dd358e85117884be151fedcf1810fc58eb9909 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php @@ -86,7 +86,7 @@ public function remove($name) $retval = null; $attributes = & $this->resolveAttributePath($name); $name = $this->resolveKey($name); - if (array_key_exists($name, $attributes)) { + if (null !== $attributes && array_key_exists($name, $attributes)) { $retval = $attributes[$name]; unset($attributes[$name]); } diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockFileSessionStorage.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockFileSessionStorage.php index 280630914a6ce5a1ce4bc297477c64fabceb5f33..f1a699b6971764171f7830a766d29fb59bde34f6 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockFileSessionStorage.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockFileSessionStorage.php @@ -29,11 +29,6 @@ class MockFileSessionStorage extends MockArraySessionStorage */ private $savePath; - /** - * @var array - */ - private $sessionData; - /** * Constructor. * diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php index 36d87a707e3f562e27f190811042c71eaaa5c1df..d86ff33d1db0aee5c8ff2f670d6660b2518aa140 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php @@ -207,7 +207,21 @@ public function regenerate($destroy = false, $lifetime = null) $this->metadataBag->stampNew(); } - return session_regenerate_id($destroy); + $ret = session_regenerate_id($destroy); + + // workaround for https://bugs.php.net/bug.php?id=61470 as suggested by David Grudl + if ('files' === $this->getSaveHandler()->getSaveHandlerName()) { + session_write_close(); + if (isset($_SESSION)) { + $backup = $_SESSION; + session_start(); + $_SESSION = $backup; + } else { + session_start(); + } + } + + return $ret; } /** diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestTest.php index 5ba94f7ed750fbac0104f01002865444430c9c99..ba95c4aea965d0adbd4cdeb6d0c74f4cf70ed7cc 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestTest.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/RequestTest.php @@ -1501,6 +1501,37 @@ public function iisRequestUriProvider() ) ); } + + public function testTrustedHosts() + { + // create a request + $request = Request::create('/'); + + // no trusted host set -> no host check + $request->headers->set('host', 'evil.com'); + $this->assertEquals('evil.com', $request->getHost()); + + // add a trusted domain and all its subdomains + Request::setTrustedHosts(array('.*\.?trusted.com$')); + + // untrusted host + $request->headers->set('host', 'evil.com'); + try { + $request->getHost(); + $this->fail('Request::getHost() should throw an exception when host is not trusted.'); + } catch (\UnexpectedValueException $e) { + $this->assertEquals('Untrusted Host "evil.com"', $e->getMessage()); + } + + // trusted hosts + $request->headers->set('host', 'trusted.com'); + $this->assertEquals('trusted.com', $request->getHost()); + $request->headers->set('host', 'subdomain.trusted.com'); + $this->assertEquals('subdomain.trusted.com', $request->getHost()); + + // reset request for following tests + Request::setTrustedHosts(array()); + } } class RequestContentProxy extends Request diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/NamespacedAttributeBagTest.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/NamespacedAttributeBagTest.php index c11d0d65136fbc23e7a26ed020913e26fb264433..0c46a515a0c2b06d76d563b5f21011158ec2bf31 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/NamespacedAttributeBagTest.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Attribute/NamespacedAttributeBagTest.php @@ -143,6 +143,16 @@ public function testRemove() $this->assertNull($this->bag->get('user.login')); } + public function testRemoveExistingNamespacedAttribute() + { + $this->assertSame('cod', $this->bag->remove('category/fishing/first')); + } + + public function testRemoveNonexistingNamespacedAttribute() + { + $this->assertNull($this->bag->remove('foo/bar/baz')); + } + public function testClear() { $this->bag->clear(); diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php index 7fbfd0a479f1dabebf3e275a871abc3ea769ec65..985fae488877178a0d840c21338c7907072435be 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php @@ -28,7 +28,7 @@ class MemcachedSessionHandlerTest extends \PHPUnit_Framework_TestCase protected function setUp() { if (!class_exists('Memcached')) { - $this->markTestSkipped('Skipped tests Memcache class is not present'); + $this->markTestSkipped('Skipped tests Memcached class is not present'); } $this->memcached = $this->getMock('Memcached'); diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php index bf515c79a6265d25bf39915ae9195dde8744c2de..14ae52f97be356a126af5f9783dc8499bd1c4b43 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php @@ -13,11 +13,8 @@ use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler; use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage; -use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler; -use Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler; use Symfony\Component\HttpFoundation\Session\Flash\FlashBag; use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag; -use Symfony\Component\HttpFoundation\Session\Storage\Proxy\AbstractProxy; use Symfony\Component\HttpFoundation\Session\Storage\Proxy\NativeProxy; use Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy; diff --git a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php index a0663910cab00e3bbb8c7a84bf50d23ecb192637..d5a66d61efc5f3c61dbfc9c54e8d973baef9fc73 100644 --- a/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php +++ b/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php @@ -11,7 +11,6 @@ namespace Symfony\Component\HttpFoundation\Tests\Session\Storage; -use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler; use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage; use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag; diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/.gitignore b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/.gitignore index 38c15605edbfd823e61afbdf31e7152fcd2b5f6f..22450b759c2a324997440048ce46ffb2cc1685a5 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/.gitignore +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/.gitignore @@ -2,4 +2,4 @@ vendor/ composer.lock phpunit.xml Tests/ProjectContainer.php -Tests/classes.map \ No newline at end of file +Tests/classes.map diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/Bundle.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/Bundle.php index c4ba0d1aab0c46283bfa81f817f9fbe0db2104a0..215d1e1862d9bd419be7352a5ab37469bf1d960b 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/Bundle.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Bundle/Bundle.php @@ -189,7 +189,7 @@ public function registerCommands(Application $application) $ns .= '\\'.strtr($relativePath, '/', '\\'); } $r = new \ReflectionClass($ns.'\\'.$file->getBasename('.php')); - if ($r->isSubclassOf('Symfony\\Component\\Console\\Command\\Command') && !$r->isAbstract()) { + if ($r->isSubclassOf('Symfony\\Component\\Console\\Command\\Command') && !$r->isAbstract() && !$r->getConstructor()->getNumberOfRequiredParameters()) { $application->add($r->newInstance()); } } diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php index b9a20aded5a49665f2c6d4c8dfdd5d899a6708f1..74d7616bf9cfc31a64cd4fe49940e84d61720167 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php @@ -78,6 +78,10 @@ public function getEvents() */ public function getDuration() { + if (!isset($this->data['events']['__section__'])) { + return 0; + } + $lastEvent = $this->data['events']['__section__']; return $lastEvent->getOrigin() + $lastEvent->getDuration() - $this->getStartTime(); @@ -92,6 +96,10 @@ public function getDuration() */ public function getInitTime() { + if (!isset($this->data['events']['__section__'])) { + return 0; + } + return $this->data['events']['__section__']->getOrigin() - $this->getStartTime(); } diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ConfigurableExtension.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ConfigurableExtension.php index 7e036fdf0f74f941e4215ef02ddd233d82d3c266..1a24da02706e4b4c20fbc085cb1364c4ad4bffaf 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ConfigurableExtension.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ConfigurableExtension.php @@ -32,7 +32,7 @@ abstract class ConfigurableExtension extends Extension */ final public function load(array $configs, ContainerBuilder $container) { - $this->loadInternal($this->processConfiguration($this->getConfiguration(array(), $container), $configs), $container); + $this->loadInternal($this->processConfiguration($this->getConfiguration($configs, $container), $configs), $container); } /** diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php index 18ca8ef2f7bf7f04e28bbf11e5e3e582c8bdc4e2..c9b8a211d429163a12c67f3411d44a94b16166aa 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php @@ -12,7 +12,6 @@ namespace Symfony\Component\HttpKernel\DependencyInjection; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/EsiListener.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/EsiListener.php index 1176a73b4d7f7be11aa61f7ad9304d1ee88cd0a2..b90562b5d386c661e64d264059b32cdd4bba9f82 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/EsiListener.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/EsiListener.php @@ -11,7 +11,6 @@ namespace Symfony\Component\HttpKernel\EventListener; -use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php index 4ee5df4534bdc8d4c45dc86224848162eb3b552c..55950b29edace05e2e366e03bc1e24d8d7fdab18 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php @@ -55,6 +55,9 @@ public function onKernelException(GetResponseForExceptionEvent $event) '_controller' => $this->controller, 'exception' => FlattenException::create($exception), 'logger' => $this->logger instanceof DebugLoggerInterface ? $this->logger : null, + // keep for BC -- as $format can be an argument of the controller callable + // see src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php + // @deprecated in 2.4, to be removed in 3.0 'format' => $request->getRequestFormat(), ); diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/HIncludeFragmentRenderer.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/HIncludeFragmentRenderer.php index 1f059da94ad29ea45124cfff15d2207c9dba4359..882bc2b0f28a69a976edbf289941f1cc814d7751 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/HIncludeFragmentRenderer.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/HIncludeFragmentRenderer.php @@ -110,7 +110,7 @@ public function render($uri, Request $request, array $options = array()) } $renderedAttributes = ''; if (count($attributes) > 0) { - foreach($attributes as $attribute => $value) { + foreach ($attributes as $attribute => $value) { $renderedAttributes .= sprintf( ' %s="%s"', htmlspecialchars($attribute, ENT_QUOTES | ENT_SUBSTITUTE, $this->charset, false), @@ -130,7 +130,11 @@ public function render($uri, Request $request, array $options = array()) private function templateExists($template) { if ($this->templating instanceof EngineInterface) { - return $this->templating->exists($template); + try { + return $this->templating->exists($template); + } catch (\InvalidArgumentException $e) { + return false; + } } $loader = $this->templating->getLoader(); diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php index 1cbdeab18ea0298f58d2c7374e2677982b94ef94..a3f37c359ae7c768018fa2bfaa9f014d545fb78f 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php @@ -52,7 +52,23 @@ public function render($uri, Request $request, array $options = array()) $reference = null; if ($uri instanceof ControllerReference) { $reference = $uri; + + // Remove attributes from the generated URI because if not, the Symfony + // routing system will use them to populate the Request attributes. We don't + // want that as we want to preserve objects (so we manually set Request attributes + // below instead) + $attributes = $reference->attributes; + $reference->attributes = array(); + + // The request format and locale might have been overriden by the user + foreach (array('_format', '_locale') as $key) { + if (isset($attributes[$key])) { + $reference->attributes[$key] = $attributes[$key]; + } + } + $uri = $this->generateFragmentUri($uri, $request); + $reference->attributes = array_merge($attributes, $reference->attributes); } $subRequest = $this->createSubRequest($uri, $request); @@ -103,10 +119,11 @@ protected function createSubRequest($uri, Request $request) // Sub-request object will point to localhost as client ip and real client ip // will be included into trusted header for client ip try { - $trustedHeaderName = Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP); - $currentXForwardedFor = $request->headers->get($trustedHeaderName, ''); + if ($trustedHeaderName = Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) { + $currentXForwardedFor = $request->headers->get($trustedHeaderName, ''); - $server['HTTP_'.$trustedHeaderName] = ($currentXForwardedFor ? $currentXForwardedFor.', ' : '').$request->getClientIp(); + $server['HTTP_'.$trustedHeaderName] = ($currentXForwardedFor ? $currentXForwardedFor.', ' : '').$request->getClientIp(); + } } catch (\InvalidArgumentException $e) { // Do nothing } diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php index 879a0bb7ac5e4e31ebea51da6886303378b68675..1f3b84f6190417431b196dd691dccc7f7e59d554 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php @@ -46,9 +46,17 @@ public function setFragmentPath($path) */ protected function generateFragmentUri(ControllerReference $reference, Request $request) { + // We need to forward the current _format and _locale values as we don't have + // a proper routing pattern to do the job for us. + // This makes things inconsistent if you switch from rendering a controller + // to rendering a route if the route pattern does not contain the special + // _format and _locale placeholders. if (!isset($reference->attributes['_format'])) { $reference->attributes['_format'] = $request->getRequestFormat(); } + if (!isset($reference->attributes['_locale'])) { + $reference->attributes['_locale'] = $request->getLocale(); + } $reference->attributes['_controller'] = $reference->controller; diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php index ae7a44cd4d4f6cee432a5e371fd077e1b241d651..837a16ff370e936dec4247f7f1b29937b2dd803f 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php @@ -52,7 +52,7 @@ public function __construct(EventDispatcherInterface $dispatcher, ControllerReso /** * {@inheritdoc} - * + * * @api */ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Kernel.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Kernel.php index 33acb24166ddc710632d1fb961f8c2df3c6c2353..96a746ee8007325dbacec85556d338ac3dcde3c3 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Kernel.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Kernel.php @@ -58,14 +58,14 @@ abstract class Kernel implements KernelInterface, TerminableInterface protected $booted; protected $name; protected $startTime; - protected $classes; protected $loadClassCache; + protected $errorReportingLevel; - const VERSION = '2.3.0'; - const VERSION_ID = '20300'; + const VERSION = '2.3.4'; + const VERSION_ID = '20304'; const MAJOR_VERSION = '2'; const MINOR_VERSION = '3'; - const RELEASE_VERSION = '0'; + const RELEASE_VERSION = '4'; const EXTRA_VERSION = ''; /** @@ -83,7 +83,6 @@ public function __construct($environment, $debug) $this->booted = false; $this->rootDir = $this->getRootDir(); $this->name = $this->getName(); - $this->classes = array(); $this->bundles = array(); if ($this->debug) { diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/ProfilerStorageInterface.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/ProfilerStorageInterface.php index 3bb0d68ffdee30b5af315a14d8e5f1b618d0d373..f4b9e5e212c19134d5998bd81ac45ff1be59c773 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/ProfilerStorageInterface.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Profiler/ProfilerStorageInterface.php @@ -35,7 +35,7 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null); /** * Reads data associated with the given token. * - * The method returns false if the token does not exists in the storage. + * The method returns false if the token does not exist in the storage. * * @param string $token A token * diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Config/FileLocatorTest.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Config/FileLocatorTest.php old mode 100755 new mode 100644 diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php index c6efa91b768dbd412bbd99671c1c11422bccffb5..a5f507cd4eeaa35cafdf644939ffdc27fa33f0fc 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Debug/TraceableEventDispatcherTest.php @@ -16,9 +16,6 @@ use Symfony\Component\EventDispatcher\Event; use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher; use Symfony\Component\HttpKernel\HttpKernel; -use Symfony\Component\HttpKernel\HttpKernelInterface; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Stopwatch\Stopwatch; @@ -194,7 +191,6 @@ public function testStopwatchCheckControllerOnRequestEvent() ->method('isStarted') ->will($this->returnValue(false)); - $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch); $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); }); diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php index 41b3dec0f528511767503408f0a1b3b92eee6c62..c6a01281a7d5cdb8db6cacea6f0cdf2d46c68f14 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php @@ -111,6 +111,25 @@ public function provider() array($event, $event2) ); } + + public function testSubRequestFormat() + { + $listener = new ExceptionListener('foo', $this->getMock('Psr\Log\LoggerInterface')); + + $kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'); + $kernel->expects($this->once())->method('handle')->will($this->returnCallback(function (Request $request) { + return new Response($request->getRequestFormat()); + })); + + $request = Request::create('/'); + $request->setRequestFormat('xml'); + + $event = new GetResponseForExceptionEvent($kernel, $request, 'foo', new \Exception('foo')); + $listener->onKernelException($event); + + $response = $event->getResponse(); + $this->assertEquals('xml', $response->getContent()); + } } class TestLogger extends Logger implements DebugLoggerInterface diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php new file mode 100644 index 0000000000000000000000000000000000000000..b9a5417d945a67364535ac2231ce7945ee9da6ae --- /dev/null +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php @@ -0,0 +1,18 @@ +<?php + +namespace Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionPresentBundle\Command; + +use Symfony\Component\Console\Command\Command; + +/** + * This command has a required parameter on the constructor and will be ignored by the default Bundle implementation. + * + * @see Symfony\Component\HttpKernel\Bundle\Bundle::registerCommands + */ +class BarCommand extends Command +{ + public function __construct($example, $name = 'bar') + { + + } +} diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/EsiFragmentRendererTest.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/EsiFragmentRendererTest.php index 34e68a7436008025fd9e03edf65b49aff9a00c01..5bbfdace9bde80643660c1cb2faf5a4c9080f615 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/EsiFragmentRendererTest.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/EsiFragmentRendererTest.php @@ -42,12 +42,13 @@ public function testRender() $strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy()); $request = Request::create('/'); + $request->setLocale('fr'); $request->headers->set('Surrogate-Capability', 'ESI/1.0'); $this->assertEquals('<esi:include src="/" />', $strategy->render('/', $request)->getContent()); $this->assertEquals("<esi:comment text=\"This is a comment\" />\n<esi:include src=\"/\" />", $strategy->render('/', $request, array('comment' => 'This is a comment'))->getContent()); $this->assertEquals('<esi:include src="/" alt="foo" />', $strategy->render('/', $request, array('alt' => 'foo'))->getContent()); - $this->assertEquals('<esi:include src="http://localhost/_fragment?_path=_format%3Dhtml%26_controller%3Dmain_controller" alt="http://localhost/_fragment?_path=_format%3Dhtml%26_controller%3Dalt_controller" />', $strategy->render(new ControllerReference('main_controller', array(), array()), $request, array('alt' => new ControllerReference('alt_controller', array(), array())))->getContent()); + $this->assertEquals('<esi:include src="http://localhost/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3Dmain_controller" alt="http://localhost/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3Dalt_controller" />', $strategy->render(new ControllerReference('main_controller', array(), array()), $request, array('alt' => new ControllerReference('alt_controller', array(), array())))->getContent()); } private function getInlineStrategy($called = false) diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/HIncludeFragmentRendererTest.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/HIncludeFragmentRendererTest.php index 53baf5ab51f333c5a509c75ffcd6db047b44fac0..20840f35e0e7783e372b97464acefaadd4488296 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/HIncludeFragmentRendererTest.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/HIncludeFragmentRendererTest.php @@ -38,7 +38,7 @@ public function testRenderWithControllerAndSigner() { $strategy = new HIncludeFragmentRenderer(null, new UriSigner('foo')); - $this->assertEquals('<hx:include src="http://localhost/_fragment?_path=_format%3Dhtml%26_controller%3Dmain_controller&_hash=VI25qJj8J0qveB3bGKPhsJtexKg%3D"></hx:include>', $strategy->render(new ControllerReference('main_controller', array(), array()), Request::create('/'))->getContent()); + $this->assertEquals('<hx:include src="http://localhost/_fragment?_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dmain_controller&_hash=g4b3vtCnhkZBFKrciEFwG7fucVo%3D"></hx:include>', $strategy->render(new ControllerReference('main_controller', array(), array()), Request::create('/'))->getContent()); } public function testRenderWithUri() @@ -50,7 +50,7 @@ public function testRenderWithUri() $this->assertEquals('<hx:include src="/foo"></hx:include>', $strategy->render('/foo', Request::create('/'))->getContent()); } - public function testRenderWhithDefault() + public function testRenderWithDefault() { // only default $strategy = new HIncludeFragmentRenderer(); @@ -79,4 +79,17 @@ public function testRenderWithAttributesOptions() $strategy = new HIncludeFragmentRenderer(); $this->assertEquals('<hx:include src="/foo" p1="v1" p2="v2" id="bar">default</hx:include>', $strategy->render('/foo', Request::create('/'), array('default' => 'default', 'id' => 'bar', 'attributes' => array('p1' => 'v1', 'p2' => 'v2')))->getContent()); } + + public function testRenderWithDefaultText() + { + $engine = $this->getMock('Symfony\\Component\\Templating\\EngineInterface'); + $engine->expects($this->once()) + ->method('exists') + ->with('default') + ->will($this->throwException(new \InvalidArgumentException())); + + // only default + $strategy = new HIncludeFragmentRenderer($engine); + $this->assertEquals('<hx:include src="/foo">default</hx:include>', $strategy->render('/foo', Request::create('/'), array('default' => 'default'))->getContent()); + } } diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php index c7ae7dd9aabc26f59dfdf2fa4d4ed60f498e8215..ffc0c0aab09caca62908df2775249baaa3deba78 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php @@ -50,12 +50,8 @@ public function testRenderWithObjectsAsAttributes() { $object = new \stdClass(); - $subRequest = Request::create('/_fragment?_path=_format%3Dhtml%26_controller%3Dmain_controller'); - $subRequest->attributes->replace(array( - 'object' => $object, - '_format' => 'html', - '_controller' => 'main_controller', - )); + $subRequest = Request::create('/_fragment?_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dmain_controller'); + $subRequest->attributes->replace(array('object' => $object, '_format' => 'html', '_controller' => 'main_controller', '_locale' => 'en')); $subRequest->headers->set('x-forwarded-for', array('127.0.0.1')); $subRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1'); @@ -71,6 +67,26 @@ public function testRenderWithObjectsAsAttributes() $strategy->render(new ControllerReference('main_controller', array('object' => $object), array()), Request::create('/')); } + public function testRenderWithTrustedHeaderDisabled() + { + $trustedHeaderName = Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP); + + Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, ''); + + $kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'); + $kernel + ->expects($this->any()) + ->method('handle') + ->with(Request::create('/')) + ; + + $strategy = new InlineFragmentRenderer($kernel); + + $strategy->render('/', Request::create('/')); + + Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, $trustedHeaderName); + } + /** * @expectedException \RuntimeException */ @@ -151,8 +167,11 @@ public function testESIHeaderIsKeptInSubrequest() { $expectedSubRequest = Request::create('/'); $expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"'); - $expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1')); - $expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1'); + + if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) { + $expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1')); + $expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1'); + } $kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'); $kernel @@ -167,4 +186,14 @@ public function testESIHeaderIsKeptInSubrequest() $request->headers->set('Surrogate-Capability', 'abc="ESI/1.0"'); $strategy->render('/', $request); } + + public function testESIHeaderIsKeptInSubrequestWithTrustedHeaderDisabled() + { + $trustedHeaderName = Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP); + Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, ''); + + $this->testESIHeaderIsKeptInSubrequest(); + + Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, $trustedHeaderName); + } } diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php index 2106f9de753e5b291c61d7b25b64f1988961eb3d..69385dccbd2f83c5f290af416df2a85d13aeb405 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php @@ -28,11 +28,11 @@ public function testGenerateFragmentUri($uri, $controller) public function getGenerateFragmentUriData() { return array( - array('http://localhost/_fragment?_path=_format%3Dhtml%26_controller%3Dcontroller', new ControllerReference('controller', array(), array())), - array('http://localhost/_fragment?_path=_format%3Dxml%26_controller%3Dcontroller', new ControllerReference('controller', array('_format' => 'xml'), array())), - array('http://localhost/_fragment?_path=foo%3Dfoo%26_format%3Djson%26_controller%3Dcontroller', new ControllerReference('controller', array('foo' => 'foo', '_format' => 'json'), array())), - array('http://localhost/_fragment?bar=bar&_path=foo%3Dfoo%26_format%3Dhtml%26_controller%3Dcontroller', new ControllerReference('controller', array('foo' => 'foo'), array('bar' => 'bar'))), - array('http://localhost/_fragment?foo=foo&_path=_format%3Dhtml%26_controller%3Dcontroller', new ControllerReference('controller', array(), array('foo' => 'foo'))), + array('http://localhost/_fragment?_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', array(), array())), + array('http://localhost/_fragment?_path=_format%3Dxml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', array('_format' => 'xml'), array())), + array('http://localhost/_fragment?_path=foo%3Dfoo%26_format%3Djson%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', array('foo' => 'foo', '_format' => 'json'), array())), + array('http://localhost/_fragment?bar=bar&_path=foo%3Dfoo%26_format%3Dhtml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', array('foo' => 'foo'), array('bar' => 'bar'))), + array('http://localhost/_fragment?foo=foo&_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', array(), array('foo' => 'foo'))), ); } @@ -40,9 +40,10 @@ public function testGenerateFragmentUriWithARequest() { $request = Request::create('/'); $request->attributes->set('_format', 'json'); + $request->setLocale('fr'); $controller = new ControllerReference('controller', array(), array()); - $this->assertEquals('http://localhost/_fragment?_path=_format%3Djson%26_controller%3Dcontroller', $this->getRenderer()->doGenerateFragmentUri($controller, $request)); + $this->assertEquals('http://localhost/_fragment?_path=_format%3Djson%26_locale%3Dfr%26_controller%3Dcontroller', $this->getRenderer()->doGenerateFragmentUri($controller, $request)); } private function getRenderer() diff --git a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/composer.json b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/composer.json index 6cccbc747b8284e8138163b51fd3f5af2b9b8919..af659da9040924f3d34ea05fa8ad4d23832f39fb 100644 --- a/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/composer.json +++ b/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/composer.json @@ -23,15 +23,16 @@ "psr/log": "~1.0" }, "require-dev": { - "symfony/browser-kit": "2.2.*", + "symfony/browser-kit": "~2.2", "symfony/class-loader": "~2.1", "symfony/config": "~2.0", - "symfony/console": "2.2.*", + "symfony/console": "~2.2", "symfony/dependency-injection": "~2.0", "symfony/finder": "~2.0", "symfony/process": "~2.0", "symfony/routing": "~2.2", - "symfony/stopwatch": "~2.2" + "symfony/stopwatch": "~2.2", + "symfony/templating": "~2.2" }, "suggest": { "symfony/browser-kit": "", diff --git a/core/vendor/symfony/process/Symfony/Component/Process/.gitignore b/core/vendor/symfony/process/Symfony/Component/Process/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/.gitignore +++ b/core/vendor/symfony/process/Symfony/Component/Process/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php b/core/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php index 8f63c2dd32928db6bdf51d8f6b912b51d68e4364..6c9b8a1149a19728751f07e8072e6b71f8cb4b6f 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php @@ -34,7 +34,7 @@ public function __construct() public function find() { // PHP_BINARY return the current sapi executable - if (defined('PHP_BINARY') && PHP_BINARY && ('cli' === PHP_SAPI)) { + if (defined('PHP_BINARY') && PHP_BINARY && ('cli' === PHP_SAPI) && is_file(PHP_BINARY)) { return PHP_BINARY; } diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Process.php b/core/vendor/symfony/process/Symfony/Component/Process/Process.php index 4822e8863ee84a672721dd882daef442fe0df6a1..6d0b3c537b4e67440386b6b19cbc49babf17c03b 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/Process.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/Process.php @@ -39,6 +39,7 @@ class Process // Timeout Precision in seconds. const TIMEOUT_PRECISION = 0.2; + private $callback; private $commandline; private $cwd; private $env; @@ -147,10 +148,7 @@ public function __construct($commandline, $cwd = null, array $env = null, $stdin $this->cwd = getcwd(); } if (null !== $env) { - $this->env = array(); - foreach ($env as $key => $value) { - $this->env[(binary) $key] = (binary) $value; - } + $this->setEnv($env); } else { $this->env = null; } @@ -169,16 +167,7 @@ public function __destruct() public function __clone() { - $this->exitcode = null; - $this->fallbackExitcode = null; - $this->processInformation = null; - $this->stdout = null; - $this->stderr = null; - $this->pipes = null; - $this->process = null; - $this->status = self::STATUS_READY; - $this->fileHandles = null; - $this->readBytes = null; + $this->resetProcessData(); } /** @@ -204,7 +193,7 @@ public function run($callback = null) { $this->start($callback); - return $this->wait($callback); + return $this->wait(); } /** @@ -234,12 +223,9 @@ public function start($callback = null) throw new RuntimeException('Process is already running'); } + $this->resetProcessData(); $this->starttime = microtime(true); - $this->stdout = ''; - $this->stderr = ''; - $this->incrementalOutputOffset = 0; - $this->incrementalErrorOutputOffset = 0; - $callback = $this->buildCallback($callback); + $this->callback = $this->buildCallback($callback); $descriptors = $this->getDescriptors(); $commandline = $this->commandline; @@ -262,71 +248,9 @@ public function start($callback = null) stream_set_blocking($pipe, false); } - - if ($this->tty) { - $this->status = self::STATUS_TERMINATED; - return; - } - - if (null === $this->stdin) { - fclose($this->pipes[0]); - unset($this->pipes[0]); - - return; - } - - $writePipes = array($this->pipes[0]); - unset($this->pipes[0]); - $stdinLen = strlen($this->stdin); - $stdinOffset = 0; - - while ($writePipes) { - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - $this->processFileHandles($callback); - } - - $r = $this->pipes; - $w = $writePipes; - $e = null; - - $n = @stream_select($r, $w, $e, 0, ceil(static::TIMEOUT_PRECISION * 1E6)); - - if (false === $n) { - break; - } - if ($n === 0) { - proc_terminate($this->process); - - throw new RuntimeException('The process timed out.'); - } - - if ($w) { - $written = fwrite($writePipes[0], (binary) substr($this->stdin, $stdinOffset), 8192); - if (false !== $written) { - $stdinOffset += $written; - } - if ($stdinOffset >= $stdinLen) { - fclose($writePipes[0]); - $writePipes = null; - } - } - - foreach ($r as $pipe) { - $type = array_search($pipe, $this->pipes); - $data = fread($pipe, 8192); - if (strlen($data) > 0) { - call_user_func($callback, $type == 1 ? self::OUT : self::ERR, $data); - } - if (false === $data || feof($pipe)) { - fclose($pipe); - unset($this->pipes[$type]); - } - } - - $this->checkTimeout(); - } - - $this->updateStatus(); + $this->writePipes(); + $this->updateStatus(false); + $this->checkTimeout(); } /** @@ -372,56 +296,15 @@ public function restart($callback = null) */ public function wait($callback = null) { - $this->updateStatus(); - $callback = $this->buildCallback($callback); + $this->updateStatus(false); + if (null !== $callback) { + $this->callback = $this->buildCallback($callback); + } while ($this->pipes || (defined('PHP_WINDOWS_VERSION_BUILD') && $this->fileHandles)) { - if (defined('PHP_WINDOWS_VERSION_BUILD') && $this->fileHandles) { - $this->processFileHandles($callback, !$this->pipes); - } $this->checkTimeout(); - - if ($this->pipes) { - $r = $this->pipes; - $w = null; - $e = null; - - // let's have a look if something changed in streams - if (false === $n = @stream_select($r, $w, $e, 0, ceil(static::TIMEOUT_PRECISION * 1E6))) { - $lastError = error_get_last(); - - // stream_select returns false when the `select` system call is interrupted by an incoming signal - if (isset($lastError['message']) && false === stripos($lastError['message'], 'interrupted system call')) { - $this->pipes = array(); - } - - continue; - } - - // nothing has changed - if (0 === $n) { - continue; - } - - foreach ($r as $pipe) { - $type = array_search($pipe, $this->pipes); - $data = fread($pipe, 8192); - - if (strlen($data) > 0) { - // last exit code is output and caught to work around --enable-sigchild - if (3 == $type) { - $this->fallbackExitcode = (int) $data; - } else { - call_user_func($callback, $type == 1 ? self::OUT : self::ERR, $data); - } - } - if (false === $data || feof($pipe)) { - fclose($pipe); - unset($this->pipes[$type]); - } - } - } + $this->readPipes(true); } - $this->updateStatus(); + $this->updateStatus(false); if ($this->processInformation['signaled']) { if ($this->isSigchildEnabled()) { throw new RuntimeException('The process has been signaled.'); @@ -436,8 +319,6 @@ public function wait($callback = null) usleep(1000); } - $exitcode = proc_close($this->process); - if ($this->processInformation['signaled']) { if ($this->isSigchildEnabled()) { throw new RuntimeException('The process has been signaled.'); @@ -446,12 +327,6 @@ public function wait($callback = null) throw new RuntimeException(sprintf('The process has been signaled with signal "%s".', $this->processInformation['termsig'])); } - $this->exitcode = $this->processInformation['running'] ? $exitcode : $this->processInformation['exitcode']; - - if (-1 == $this->exitcode && null !== $this->fallbackExitcode) { - $this->exitcode = $this->fallbackExitcode; - } - return $this->exitcode; } @@ -468,7 +343,7 @@ public function getPid() throw new RuntimeException('This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.'); } - $this->updateStatus(); + $this->updateStatus(false); return $this->isRunning() ? $this->processInformation['pid'] : null; } @@ -509,7 +384,7 @@ public function signal($signal) */ public function getOutput() { - $this->updateOutput(); + $this->readPipes(false); return $this->stdout; } @@ -541,7 +416,7 @@ public function getIncrementalOutput() */ public function getErrorOutput() { - $this->updateErrorOutput(); + $this->readPipes(false); return $this->stderr; } @@ -580,7 +455,7 @@ public function getExitCode() throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method'); } - $this->updateStatus(); + $this->updateStatus(false); return $this->exitcode; } @@ -612,7 +487,7 @@ public function getExitCodeText() */ public function isSuccessful() { - return 0 == $this->getExitCode(); + return 0 === $this->getExitCode(); } /** @@ -632,7 +507,7 @@ public function hasBeenSignaled() throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved'); } - $this->updateStatus(); + $this->updateStatus(false); return $this->processInformation['signaled']; } @@ -654,7 +529,7 @@ public function getTermSignal() throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved'); } - $this->updateStatus(); + $this->updateStatus(false); return $this->processInformation['termsig']; } @@ -670,7 +545,7 @@ public function getTermSignal() */ public function hasBeenStopped() { - $this->updateStatus(); + $this->updateStatus(false); return $this->processInformation['stopped']; } @@ -686,7 +561,7 @@ public function hasBeenStopped() */ public function getStopSignal() { - $this->updateStatus(); + $this->updateStatus(false); return $this->processInformation['stopsig']; } @@ -702,7 +577,7 @@ public function isRunning() return false; } - $this->updateStatus(); + $this->updateStatus(false); return $this->processInformation['running']; } @@ -724,7 +599,7 @@ public function isStarted() */ public function isTerminated() { - $this->updateStatus(); + $this->updateStatus(false); return $this->status == self::STATUS_TERMINATED; } @@ -738,7 +613,7 @@ public function isTerminated() */ public function getStatus() { - $this->updateStatus(); + $this->updateStatus(false); return $this->status; } @@ -755,14 +630,12 @@ public function getStatus() */ public function stop($timeout = 10, $signal = null) { - $timeoutMicro = (int) $timeout*1E6; + $timeoutMicro = microtime(true) + $timeout; if ($this->isRunning()) { proc_terminate($this->process); - $time = 0; - while (1 == $this->isRunning() && $time < $timeoutMicro) { - $time += 1000; + do { usleep(1000); - } + } while ($this->isRunning() && microtime(true) < $timeoutMicro); if ($this->isRunning() && !$this->isSigchildEnabled()) { if (null !== $signal || defined('SIGKILL')) { @@ -770,20 +643,7 @@ public function stop($timeout = 10, $signal = null) } } - foreach ($this->pipes as $pipe) { - fclose($pipe); - } - $this->pipes = array(); - - $exitcode = proc_close($this->process); - $this->exitcode = -1 === $this->processInformation['exitcode'] ? $exitcode : $this->processInformation['exitcode']; - - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - foreach ($this->fileHandles as $fileHandle) { - fclose($fileHandle); - } - $this->fileHandles = array(); - } + $this->updateStatus(false); } $this->status = self::STATUS_TERMINATED; @@ -942,13 +802,25 @@ public function getEnv() /** * Sets the environment variables. * + * An environment variable value should be a string. + * If it is an array, the variable is ignored. + * + * That happens in PHP when 'argv' is registered into + * the $_ENV array for instance. + * * @param array $env The new environment variables * * @return self The current Process instance */ public function setEnv(array $env) { - $this->env = $env; + // Process can not handle env values that are arrays + $env = array_filter($env, function ($value) { if (!is_array($value)) { return true; } }); + + $this->env = array(); + foreach ($env as $key => $value) { + $this->env[(binary) $key] = (binary) $value; + } return $this; } @@ -1092,9 +964,9 @@ private function getDescriptors() $this->readBytes = array( self::STDOUT => 0, ); - + return array(array('pipe', 'r'), $this->fileHandles[self::STDOUT], array('pipe', 'w')); - } + } if ($this->tty) { $descriptors = array( @@ -1151,43 +1023,23 @@ protected function buildCallback($callback) } /** - * Updates the status of the process. + * Updates the status of the process, reads pipes. + * + * @param Boolean $blocking Whether to use a clocking read call. */ - protected function updateStatus() + protected function updateStatus($blocking) { if (self::STATUS_STARTED !== $this->status) { return; } + $this->readPipes($blocking); + $this->processInformation = proc_get_status($this->process); + $this->captureExitCode(); if (!$this->processInformation['running']) { + $this->close(); $this->status = self::STATUS_TERMINATED; - if (-1 !== $this->processInformation['exitcode']) { - $this->exitcode = $this->processInformation['exitcode']; - } - } - } - - /** - * Updates the current error output of the process (STDERR). - */ - protected function updateErrorOutput() - { - if (isset($this->pipes[self::STDERR]) && is_resource($this->pipes[self::STDERR])) { - $this->addErrorOutput(stream_get_contents($this->pipes[self::STDERR])); - } - } - - /** - * Updates the current output of the process (STDOUT). - */ - protected function updateOutput() - { - if (defined('PHP_WINDOWS_VERSION_BUILD') && isset($this->fileHandles[self::STDOUT]) && is_resource($this->fileHandles[self::STDOUT])) { - fseek($this->fileHandles[self::STDOUT], $this->readBytes[self::STDOUT]); - $this->addOutput(stream_get_contents($this->fileHandles[self::STDOUT])); - } elseif (isset($this->pipes[self::STDOUT]) && is_resource($this->pipes[self::STDOUT])) { - $this->addOutput(stream_get_contents($this->pipes[self::STDOUT])); } } @@ -1211,10 +1063,9 @@ protected function isSigchildEnabled() /** * Handles the windows file handles fallbacks. * - * @param callable $callback A valid PHP callback * @param Boolean $closeEmptyHandles if true, handles that are empty will be assumed closed */ - private function processFileHandles($callback, $closeEmptyHandles = false) + private function processFileHandles($closeEmptyHandles = false) { $fh = $this->fileHandles; foreach ($fh as $type => $fileHandle) { @@ -1222,7 +1073,7 @@ private function processFileHandles($callback, $closeEmptyHandles = false) $data = fread($fileHandle, 8192); if (strlen($data) > 0) { $this->readBytes[$type] += strlen($data); - call_user_func($callback, $type == 1 ? self::OUT : self::ERR, $data); + call_user_func($this->callback, $type == 1 ? self::OUT : self::ERR, $data); } if (false === $data || ($closeEmptyHandles && '' === $data && feof($fileHandle))) { fclose($fileHandle); @@ -1230,4 +1081,211 @@ private function processFileHandles($callback, $closeEmptyHandles = false) } } } + + /** + * Returns true if a system call has been interrupted. + * + * @return Boolean + */ + private function hasSystemCallBeenInterrupted() + { + $lastError = error_get_last(); + + // stream_select returns false when the `select` system call is interrupted by an incoming signal + return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call'); + } + + /** + * Reads pipes, executes callback. + * + * @param Boolean $blocking Whether to use blocking calls or not. + */ + private function readPipes($blocking) + { + if (defined('PHP_WINDOWS_VERSION_BUILD') && $this->fileHandles) { + $this->processFileHandles(!$this->pipes); + } + + if ($this->pipes) { + $r = $this->pipes; + $w = null; + $e = null; + + // let's have a look if something changed in streams + if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? ceil(self::TIMEOUT_PRECISION * 1E6) : 0)) { + // if a system call has been interrupted, forget about it, let's try again + // otherwise, an error occured, let's reset pipes + if (!$this->hasSystemCallBeenInterrupted()) { + $this->pipes = array(); + } + + return; + } + + // nothing has changed + if (0 === $n) { + return; + } + + $this->processReadPipes($r); + } + } + + /** + * Writes data to pipes. + * + * @param Boolean $blocking Whether to use blocking calls or not. + */ + private function writePipes() + { + if ($this->tty) { + $this->status = self::STATUS_TERMINATED; + + return; + } + + if (null === $this->stdin) { + fclose($this->pipes[0]); + unset($this->pipes[0]); + + return; + } + + $writePipes = array($this->pipes[0]); + unset($this->pipes[0]); + $stdinLen = strlen($this->stdin); + $stdinOffset = 0; + + while ($writePipes) { + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $this->processFileHandles(); + } + + $r = $this->pipes; + $w = $writePipes; + $e = null; + + if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? ceil(static::TIMEOUT_PRECISION * 1E6) : 0)) { + // if a system call has been interrupted, forget about it, let's try again + if ($this->hasSystemCallBeenInterrupted()) { + continue; + } + break; + } + + // nothing has changed, let's wait until the process is ready + if (0 === $n) { + continue; + } + + if ($w) { + $written = fwrite($writePipes[0], (binary) substr($this->stdin, $stdinOffset), 8192); + if (false !== $written) { + $stdinOffset += $written; + } + if ($stdinOffset >= $stdinLen) { + fclose($writePipes[0]); + $writePipes = null; + } + } + + $this->processReadPipes($r); + } + } + + /** + * Processes read pipes, executes callback on it. + * + * @param array $pipes + */ + private function processReadPipes(array $pipes) + { + foreach ($pipes as $pipe) { + $type = array_search($pipe, $this->pipes); + $data = fread($pipe, 8192); + + if (strlen($data) > 0) { + // last exit code is output and caught to work around --enable-sigchild + if (3 == $type) { + $this->fallbackExitcode = (int) $data; + } else { + call_user_func($this->callback, $type == 1 ? self::OUT : self::ERR, $data); + } + } + if (false === $data || feof($pipe)) { + fclose($pipe); + unset($this->pipes[$type]); + } + } + } + + /** + * Captures the exitcode if mentioned in the process informations. + */ + private function captureExitCode() + { + if (isset($this->processInformation['exitcode']) && -1 != $this->processInformation['exitcode']) { + $this->exitcode = $this->processInformation['exitcode']; + } + } + + + /** + * Closes process resource, closes file handles, sets the exitcode. + * + * @return Integer The exitcode + */ + private function close() + { + foreach ($this->pipes as $pipe) { + fclose($pipe); + } + + $this->pipes = null; + $exitcode = -1; + + if (is_resource($this->process)) { + $exitcode = proc_close($this->process); + } + + $this->exitcode = $this->exitcode !== null ? $this->exitcode : -1; + $this->exitcode = -1 != $exitcode ? $exitcode : $this->exitcode; + + if (-1 == $this->exitcode && null !== $this->fallbackExitcode) { + $this->exitcode = $this->fallbackExitcode; + } elseif (-1 === $this->exitcode && $this->processInformation['signaled'] && 0 < $this->processInformation['termsig']) { + // if process has been signaled, no exitcode but a valid termsig, apply unix convention + $this->exitcode = 128 + $this->processInformation['termsig']; + } + + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + foreach ($this->fileHandles as $fileHandle) { + fclose($fileHandle); + } + $this->fileHandles = array(); + } + + return $this->exitcode; + } + + /** + * Resets data related to the latest run of the process. + */ + private function resetProcessData() + { + $this->starttime = null; + $this->callback = null; + $this->exitcode = null; + $this->fallbackExitcode = null; + $this->processInformation = null; + $this->stdout = null; + $this->stderr = null; + $this->pipes = null; + $this->process = null; + $this->status = self::STATUS_READY; + $this->fileHandles = null; + $this->readBytes = null; + $this->incrementalOutputOffset = 0; + $this->incrementalErrorOutputOffset = 0; + } } diff --git a/core/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php b/core/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php index 73380be84d4ec1f77b349bcfeb54f89b84297a4b..4a5b7d60731a7102f3f59cd044cfdc1cc90ef2d9 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php @@ -41,11 +41,15 @@ public static function escapeArgument($argument) //@see https://bugs.php.net/bug.php?id=43784 //@see https://bugs.php.net/bug.php?id=49446 if (defined('PHP_WINDOWS_VERSION_BUILD')) { + if ('' === $argument) { + return escapeshellarg($argument); + } + $escapedArgument = ''; - foreach(preg_split('/([%"])/i', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) { - if ('"' == $part) { + foreach (preg_split('/([%"])/i', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) { + if ('"' === $part) { $escapedArgument .= '\\"'; - } elseif ('%' == $part) { + } elseif ('%' === $part) { $escapedArgument .= '^%'; } else { $escapedArgument .= escapeshellarg($part); diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php b/core/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php index 5cd52efbd9bbb215e1346e5394413199ab9ce0f3..d0228f0e5517fa52b0c8e11b8a265f6f93ce17af 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php @@ -47,9 +47,7 @@ public function testNullTimeout() public function testStopWithTimeoutIsActuallyWorking() { - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - $this->markTestSkipped('Stop with timeout does not work on windows, it requires posix signals'); - } + $this->verifyPosixIsEnabled(); // exec is mandatory here since we send a signal to the process // see https://github.com/symfony/symfony/issues/5030 about prepending @@ -64,7 +62,24 @@ public function testStopWithTimeoutIsActuallyWorking() } $duration = microtime(true) - $start; - $this->assertLessThan(1.3, $duration); + $this->assertLessThan(1.8, $duration); + } + + public function testCallbacksAreExecutedWithStart() + { + $data = ''; + + $process = $this->getProcess('echo "foo";sleep 1;echo "foo"'); + $process->start(function ($type, $buffer) use (&$data) { + $data .= $buffer; + }); + + $start = microtime(true); + while ($process->isRunning()) { + usleep(10000); + } + + $this->assertEquals("foo\nfoo\n", $data); } /** @@ -228,6 +243,27 @@ public function testUpdateStatus() $this->assertTrue(strlen($process->getOutput()) > 0); } + public function testGetExitCodeIsNullOnStart() + { + $process = $this->getProcess('php -r "usleep(200000);"'); + $this->assertNull($process->getExitCode()); + $process->start(); + $this->assertNull($process->getExitCode()); + $process->wait(); + $this->assertEquals(0, $process->getExitCode()); + } + + public function testGetExitCodeIsNullOnWhenStartingAgain() + { + $process = $this->getProcess('php -r "usleep(200000);"'); + $process->run(); + $this->assertEquals(0, $process->getExitCode()); + $process->start(); + $this->assertNull($process->getExitCode()); + $process->wait(); + $this->assertEquals(0, $process->getExitCode()); + } + public function testGetExitCode() { $process = $this->getProcess('php -m'); @@ -256,7 +292,7 @@ public function testStatus() public function testStop() { - $process = $this->getProcess('php -r "while (true) {}"'); + $process = $this->getProcess('php -r "sleep(4);"'); $process->start(); $this->assertTrue($process->isRunning()); $process->stop(); @@ -270,9 +306,21 @@ public function testIsSuccessful() $this->assertTrue($process->isSuccessful()); } + public function testIsSuccessfulOnlyAfterTerminated() + { + $process = $this->getProcess('sleep 1'); + $process->start(); + while ($process->isRunning()) { + $this->assertFalse($process->isSuccessful()); + usleep(300000); + } + + $this->assertTrue($process->isSuccessful()); + } + public function testIsNotSuccessful() { - $process = $this->getProcess('php -r "while (true) {}"'); + $process = $this->getProcess('php -r "sleep(4);"'); $process->start(); $this->assertTrue($process->isRunning()); $process->stop(); @@ -318,7 +366,7 @@ public function testProcessIsSignaledIfStopped() $this->markTestSkipped('Windows does not support POSIX signals'); } - $process = $this->getProcess('php -r "while (true) {}"'); + $process = $this->getProcess('php -r "sleep(4);"'); $process->start(); $process->stop(); $this->assertTrue($process->hasBeenSignaled()); @@ -333,7 +381,7 @@ public function testProcessWithTermSignal() // SIGTERM is only defined if pcntl extension is present $termSignal = defined('SIGTERM') ? SIGTERM : 15; - $process = $this->getProcess('php -r "while (true) {}"'); + $process = $this->getProcess('php -r "sleep(4);"'); $process->start(); $process->stop(); @@ -429,6 +477,7 @@ public function testCheckTimeoutOnStartedProcess() $duration = microtime(true) - $start; $this->assertLessThan($timeout + $precision, $duration); + $this->assertFalse($process->isSuccessful()); } public function testGetPid() @@ -454,9 +503,7 @@ public function testGetPidIsNullAfterRun() public function testSignal() { - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - $this->markTestSkipped('POSIX signals do not work on windows'); - } + $this->verifyPosixIsEnabled(); $process = $this->getProcess('exec php -f ' . __DIR__ . '/SignalListener.php'); $process->start(); @@ -470,17 +517,42 @@ public function testSignal() $this->assertEquals('Caught SIGUSR1', $process->getOutput()); } + public function testExitCodeIsAvailableAfterSignal() + { + $this->verifyPosixIsEnabled(); + + $process = $this->getProcess('sleep 4'); + $process->start(); + $process->signal(SIGKILL); + + while ($process->isRunning()) { + usleep(10000); + } + + $this->assertFalse($process->isRunning()); + $this->assertTrue($process->hasBeenSignaled()); + $this->assertFalse($process->isSuccessful()); + $this->assertEquals(137, $process->getExitCode()); + } + /** * @expectedException Symfony\Component\Process\Exception\LogicException */ public function testSignalProcessNotRunning() + { + $this->verifyPosixIsEnabled(); + $process = $this->getProcess('php -m'); + $process->signal(SIGHUP); + } + + private function verifyPosixIsEnabled() { if (defined('PHP_WINDOWS_VERSION_BUILD')) { $this->markTestSkipped('POSIX signals do not work on windows'); } - - $process = $this->getProcess('php -m'); - $process->signal(SIGHUP); + if (!defined('SIGUSR1')) { + $this->markTestSkipped('The pcntl extension is not enabled'); + } } /** diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php b/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php index 1f9539689141ba490ea8df2aa47a33f8071eed6a..4c88b55ce110a21a103f5b061013322b92aea8bc 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php @@ -45,6 +45,22 @@ public function testProcessShouldInheritAndOverrideEnvironmentVars() $_ENV = $snapshot; } + public function testProcessBuilderShouldNotPassEnvArrays() + { + $snapshot = $_ENV; + $_ENV = array('a' => array('b', 'c'), 'd' => 'e', 'f' => 'g'); + $expected = array('d' => 'e', 'f' => 'g'); + + $pb = new ProcessBuilder(); + $pb->add('a')->inheritEnvironmentVariables() + ->setEnv('d', 'e'); + $proc = $pb->getProcess(); + + $this->assertEquals($expected, $proc->getEnv(), '->inheritEnvironmentVariables() removes array values from $_ENV'); + + $_ENV = $snapshot; + } + public function testInheritEnvironmentVarsByDefault() { $pb = new ProcessBuilder(); diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php b/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php index e51da5a5e22a8e4614ca86c849f2cb1584ab6991..603fac53e7877d03ccf95a59264282e608dd3e96 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php @@ -30,6 +30,7 @@ public function dataArguments() array('"foo bar"', 'foo bar'), array('^%"path"^%', '%path%'), array('"<|>"\\"" "\\""\'f"', '<|>" "\'f'), + array('""', ''), ); } @@ -37,6 +38,7 @@ public function dataArguments() array("'foo bar'", 'foo bar'), array("'%path%'", '%path%'), array("'<|>\" \"'\\''f'", '<|>" "\'f'), + array("''", ''), ); } } diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php b/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php index 2e364d6392b97c202c195ea2bf22eae5437fb8f0..29f3cd9a04da9a974fde732963854e59d53f4229 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php @@ -21,6 +21,22 @@ public function testGetExitCode() parent::testGetExitCode(); } + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testGetExitCodeIsNullOnStart() + { + parent::testGetExitCodeIsNullOnStart(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testGetExitCodeIsNullOnWhenStartingAgain() + { + parent::testGetExitCodeIsNullOnWhenStartingAgain(); + } + /** * @expectedException \Symfony\Component\Process\Exception\RuntimeException */ @@ -61,6 +77,14 @@ public function testProcessWithoutTermSignal() parent::testProcessWithoutTermSignal(); } + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testCheckTimeoutOnStartedProcess() + { + parent::testCheckTimeoutOnStartedProcess(); + } + /** * @expectedException \Symfony\Component\Process\Exception\RuntimeException */ @@ -104,6 +128,14 @@ public function testIsSuccessful() parent::testIsSuccessful(); } + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testIsSuccessfulOnlyAfterTerminated() + { + parent::testIsSuccessfulOnlyAfterTerminated(); + } + /** * @expectedException \Symfony\Component\Process\Exception\RuntimeException */ @@ -138,6 +170,11 @@ public function testProcessThrowsExceptionWhenExternallySignaled() $this->markTestSkipped('Retrieving Pid is not supported in sigchild environment'); } + public function testExitCodeIsAvailableAfterSignal() + { + $this->markTestSkipped('Signal is not supported in sigchild environment'); + } + /** * {@inheritdoc} */ diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php b/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php index 40ffb772b7fbc3edcf4488b3986b202d669fe02e..296b00dfcbe0d6938f91cbed9bc82dd223c00214 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php @@ -98,6 +98,11 @@ public function testProcessThrowsExceptionWhenExternallySignaled() $this->markTestSkipped('Retrieving Pid is not supported in sigchild environment'); } + public function testExitCodeIsAvailableAfterSignal() + { + $this->markTestSkipped('Signal is not supported in sigchild environment'); + } + /** * {@inheritdoc} */ diff --git a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php b/core/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php index 8ba167c3317b45e68cb38ad9b3e90055c09d2ad6..0bf191e37170e260633dbdd451d7492b2c994593 100644 --- a/core/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php +++ b/core/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php @@ -8,9 +8,9 @@ $n=0; // ticks require activity to work - sleep(4); does not work -while($n < 400) { +while ($n < 400) { usleep(10000); $n++; } -return; \ No newline at end of file +return; diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/.gitignore b/core/vendor/symfony/routing/Symfony/Component/Routing/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/routing/Symfony/Component/Routing/.gitignore +++ b/core/vendor/symfony/routing/Symfony/Component/Routing/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/RouteNotFoundException.php b/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/RouteNotFoundException.php index 4d5f288e7edf0cd6d16b8d0fccf65f9ab5b676dd..fd275bebe92c4a8e6fd7d6c601f91e93a2999f3c 100644 --- a/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/RouteNotFoundException.php +++ b/core/vendor/symfony/routing/Symfony/Component/Routing/Exception/RouteNotFoundException.php @@ -12,7 +12,7 @@ namespace Symfony\Component\Routing\Exception; /** - * Exception thrown when a route does not exists + * Exception thrown when a route does not exist * * @author Alexandre Salomé <alexandre.salome@gmail.com> * diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/UrlGenerator.php b/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/UrlGenerator.php index 69e3ea832e942a0fce7643972b531802975b7bb4..f224cb3f6d9f63da4b0d0f0b2cb53cb7e2949c87 100644 --- a/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/UrlGenerator.php +++ b/core/vendor/symfony/routing/Symfony/Component/Routing/Generator/UrlGenerator.php @@ -141,7 +141,7 @@ public function generate($name, $parameters = array(), $referenceType = self::AB } /** - * @throws MissingMandatoryParametersException When some parameters are missing that mandatory for the route + * @throws MissingMandatoryParametersException When some parameters are missing that are mandatory for the route * @throws InvalidParameterException When a parameter value for a placeholder is not correct because * it does not match the requirement */ diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/ApacheUrlMatcher.php b/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/ApacheUrlMatcher.php index 76612e6184ae3355727b36c3750f22fe82876b6e..55aac6b7079dccc1c357d1e685a273ce55ea4361 100644 --- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/ApacheUrlMatcher.php +++ b/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/ApacheUrlMatcher.php @@ -39,7 +39,7 @@ public function match($pathinfo) $allow = array(); $route = null; - foreach ($_SERVER as $key => $value) { + foreach ($this->denormalizeValues($_SERVER) as $key => $value) { $name = $key; // skip non-routing variables @@ -91,4 +91,28 @@ public function match($pathinfo) return parent::match($pathinfo); } } + + /** + * Denormalizes an array of values. + * + * @param string[] $values + * + * @return array + */ + private function denormalizeValues(array $values) + { + $normalizedValues = array(); + foreach ($values as $key => $value) { + if (preg_match('~^(.*)\[(\d+)\]$~', $key, $matches)) { + if (!isset($normalizedValues[$matches[1]])) { + $normalizedValues[$matches[1]] = array(); + } + $normalizedValues[$matches[1]][(int) $matches[2]] = $value; + } else { + $normalizedValues[$key] = $value; + } + } + + return $normalizedValues; + } } diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/ApacheMatcherDumper.php b/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/ApacheMatcherDumper.php index 804da19d54ecd54e5956e53545e66df7e2de8836..01d8c035894763d966691575f02c22e5cac0f740 100644 --- a/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/ApacheMatcherDumper.php +++ b/core/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/ApacheMatcherDumper.php @@ -132,7 +132,7 @@ private function dumpRoute($name, $route, array $options, $hostRegexUnique) foreach ($compiledRoute->getPathVariables() as $i => $variable) { $variables[] = 'E=_ROUTING_param_'.$variable.':%'.($i + 1); } - foreach ($route->getDefaults() as $key => $value) { + foreach ($this->normalizeValues($route->getDefaults()) as $key => $value) { $variables[] = 'E=_ROUTING_default_'.$key.':'.strtr($value, array( ':' => '\\:', '=' => '\\=', @@ -151,7 +151,7 @@ private function dumpRoute($name, $route, array $options, $hostRegexUnique) $allow[] = 'E=_ROUTING_allow_'.$method.':1'; } - if ($hostRegex = $compiledRoute->getHostRegex()) { + if ($compiledRoute->getHostRegex()) { $rule[] = sprintf("RewriteCond %%{ENV:__ROUTING_host_%s} =1", $hostRegexUnique); } @@ -162,8 +162,7 @@ private function dumpRoute($name, $route, array $options, $hostRegexUnique) // redirect with trailing slash appended if ($hasTrailingSlash) { - - if ($hostRegex = $compiledRoute->getHostRegex()) { + if ($compiledRoute->getHostRegex()) { $rule[] = sprintf("RewriteCond %%{ENV:__ROUTING_host_%s} =1", $hostRegexUnique); } @@ -173,7 +172,7 @@ private function dumpRoute($name, $route, array $options, $hostRegexUnique) // the main rule - if ($hostRegex = $compiledRoute->getHostRegex()) { + if ($compiledRoute->getHostRegex()) { $rule[] = sprintf("RewriteCond %%{ENV:__ROUTING_host_%s} =1", $hostRegexUnique); } @@ -249,4 +248,27 @@ private static function escape($string, $char, $with) return $output; } + + /** + * Normalizes an array of values. + * + * @param array $values + * + * @return string[] + */ + private function normalizeValues(array $values) + { + $normalizedValues = array(); + foreach ($values as $key => $value) { + if (is_array($value)) { + foreach ($value as $index => $bit) { + $normalizedValues[sprintf('%s[%s]', $key, $index)] = $bit; + } + } else { + $normalizedValues[$key] = (string) $value; + } + } + + return $normalizedValues; + } } diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Route.php b/core/vendor/symfony/routing/Symfony/Component/Routing/Route.php index 060e978116c7eb20b24934b08493f2b52d32ace8..5bc535c683ed295ec1f3717b03f3991d01a56719 100644 --- a/core/vendor/symfony/routing/Symfony/Component/Routing/Route.php +++ b/core/vendor/symfony/routing/Symfony/Component/Routing/Route.php @@ -57,7 +57,7 @@ class Route implements \Serializable private $options = array(); /** - * @var null|RouteCompiler + * @var null|CompiledRoute */ private $compiled; diff --git a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/ApacheUrlMatcherTest.php b/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/ApacheUrlMatcherTest.php index 6550911eb7b24ff3d39aa125ea8ae2e70bc6faa5..2810cbad51bdce30327c6fadefe6d91cb5519930 100644 --- a/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/ApacheUrlMatcherTest.php +++ b/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/Matcher/ApacheUrlMatcherTest.php @@ -90,6 +90,21 @@ public function getMatchData() '_route' => 'hello', ), ), + array( + 'Redirect with many ignored attributes', + '/legacy/{cat1}/{cat2}/{id}.html', + array( + '_ROUTING_route' => 'product_view', + '_ROUTING_param__controller' => 'FrameworkBundle:Redirect:redirect', + '_ROUTING_default_ignoreAttributes[0]' => 'attr_a', + '_ROUTING_default_ignoreAttributes[1]' => 'attr_b', + ), + array( + 'ignoreAttributes' => array('attr_a', 'attr_b'), + '_controller' => 'FrameworkBundle:Redirect:redirect', + '_route' => 'product_view', + ) + ), array( 'REDIRECT_ envs', '/hello/world', @@ -131,7 +146,7 @@ public function getMatchData() 'name' => 'world', '_route' => 'hello', ), - ), + ) ); } } diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitignore b/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitignore +++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php index ca00aa37194b3e50e4260d44106890856d0a428e..d616286aef40c3c55ec11694d0420273838b80c1 100644 --- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php +++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php @@ -44,7 +44,7 @@ class JsonDecode implements DecoderInterface public function __construct($associative = false, $depth = 512) { $this->associative = $associative; - $this->recursionDepth = (int)$depth; + $this->recursionDepth = (int) $depth; } /** diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php index 6ba30ac2a745240b0d663077e20b7d4be43f77f3..54854c6cf499e2f6f6ead368a18d9a936c795c36 100644 --- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php +++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php @@ -165,8 +165,8 @@ protected function formatAttribute($attributeName) { if (in_array($attributeName, $this->camelizedAttributes)) { return preg_replace_callback( - '/(^|_|\.)+(.)/', function ($match) { - return ('.' === $match[1] ? '_' : '').strtoupper($match[2]); + '/(^|_|\.)+(.)/', function ($match) { + return ('.' === $match[1] ? '_' : '').strtoupper($match[2]); }, $attributeName ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/.gitignore b/core/vendor/symfony/validator/Symfony/Component/Validator/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/.gitignore +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php b/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php index f297cc8758c382cd85d0afaa9c4c7b6c133d44e6..88b5cefdc2c7bf0cc5b5bccb64935217c5ba5b7b 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php @@ -32,7 +32,7 @@ public function getInstance(Constraint $constraint) { $className = $constraint->validatedBy(); - if (!isset($this->validators[$className])) { + if (!isset($this->validators[$className]) || $className === 'Symfony\Component\Validator\Constraints\CollectionValidator') { $this->validators[$className] = new $className(); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php index 929283eaebfd2e4bd23319aa5664b63343c4bbab..6b76fc80b2a215a7018a7fd7b7d3c92411c38159 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php @@ -26,6 +26,10 @@ abstract class AbstractComparisonValidator extends ConstraintValidator */ public function validate($value, Constraint $constraint) { + if (null === $value) { + return; + } + if (!$this->compareValues($value, $constraint->value, $constraint)) { $this->context->addViolation($constraint->message, array( '{{ value }}' => $this->valueToString($constraint->value), diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php index 956c14ac483d6a694ba42f0646d79af2feddc898..d60f0c273d13b5a95e856973ac3655161580ed84 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/Collection.php @@ -49,6 +49,12 @@ public function __construct($options = null) } foreach ($this->fields as $fieldName => $field) { + // the XmlFileLoader and YamlFileLoader pass the field Optional + // and Required constraint as an array with exactly one element + if (is_array($field) && count($field) == 1) { + $this->fields[$fieldName] = $field = $field[0]; + } + if (!$field instanceof Optional && !$field instanceof Required) { $this->fields[$fieldName] = $field = new Required($field); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php index fa6f0b559f136cd3ef15873c64dd71861247c5d8..1afc8f01b7118ef2bddbda8bf6a8b4b0978f7919 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/IbanValidator.php @@ -56,6 +56,7 @@ public function validate($value, Constraint $constraint) if ($rest != 1) { $this->context->addViolation($constraint->message, array('{{ value }}' => $value)); + return; } } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php index 64d3df75545000026f28f14272bfd3ac820072c1..d8086b2b9c8d30f6f191d73dd67357fa0cda8a8d 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php @@ -34,6 +34,10 @@ public function loadClassMetadata(ClassMetadata $metadata) if (!$reflClass->isInterface() && $reflClass->hasMethod($this->methodName)) { $reflMethod = $reflClass->getMethod($this->methodName); + if ($reflMethod->isAbstract()) { + return false; + } + if (!$reflMethod->isStatic()) { throw new MappingException(sprintf('The method %s::%s should be static', $reflClass->name, $this->methodName)); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php index 6b25f18817afee5e8a6c94e824128d0a2774d022..a9ae39677775bbc3a9df74e2480319abdce7fd4d 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php @@ -166,7 +166,10 @@ protected function parseOptions(\SimpleXMLElement $nodes) $value = array(); } } else { - $value = trim($node); + $value = XmlUtils::phpize($node); + if (is_string($value)) { + $value = trim($value); + } } $options[(string) $node['name']] = $value; diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php index 954083acf75f640886a3e4d8604f75369e24549a..c30a87ee0626939b44dbfddc30b2f97630cfd847 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php @@ -86,7 +86,9 @@ public function __sleep() 'class', 'name', 'property', - 'cascaded', // TESTME + 'cascaded', + 'collectionCascaded', + 'collectionCascadedDeeply', )); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php index e7fed4bf7f2a12ca68e68009b28374dd18bb6340..da868d3cfdd1fab40273feaef2f00e2e08135e74 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/CollectionTest.php @@ -14,6 +14,7 @@ use Symfony\Component\Validator\Constraints\Collection; use Symfony\Component\Validator\Constraints\Required; use Symfony\Component\Validator\Constraints\Optional; +use Symfony\Component\Validator\Constraints\Email; use Symfony\Component\Validator\Constraints\Valid; /** @@ -70,4 +71,42 @@ public function testRejectValidConstraintWithinRequired() 'foo' => new Required(new Valid()), )); } + + public function testAcceptOptionalConstraintAsOneElementArray() + { + $collection1 = new Collection(array( + "fields" => array( + "alternate_email" => array( + new Optional(new Email()), + ), + ), + )); + + $collection2 = new Collection(array( + "fields" => array( + "alternate_email" => new Optional(new Email()), + ), + )); + + $this->assertEquals($collection1, $collection2); + } + + public function testAcceptRequiredConstraintAsOneElementArray() + { + $collection1 = new Collection(array( + "fields" => array( + "alternate_email" => array( + new Required(new Email()), + ), + ), + )); + + $collection2 = new Collection(array( + "fields" => array( + "alternate_email" => new Required(new Email()), + ), + )); + + $this->assertEquals($collection1, $collection2); + } } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php index 61189ed780b1909d44e9baef73e0db46762592a7..b47d9e6750bed5e150f3be72e10e59704322e2a9 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/EqualToValidatorTest.php @@ -39,7 +39,8 @@ public function provideValidComparisons() array(3, 3), array(3, '3'), array('a', 'a'), - array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')) + array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')), + array(null, 1), ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php index 71bcd7195492facc15a469b57101446c5157a5f3..2f97b03eb4389b2b6cfc4cd5c519a5343c140d84 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanOrEqualValidatorTest.php @@ -41,6 +41,7 @@ public function provideValidComparisons() array(new \DateTime('2000/01/01'), new \DateTime('2000/01/01')), array('a', 'a'), array('z', 'a'), + array(null, 1), ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php index a838c58b7c65df6b04eb0e8f448e97d2e14bee07..72087fab83e34e8cab56e9f2668e1c0f141fac3d 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/GreaterThanValidatorTest.php @@ -37,7 +37,8 @@ public function provideValidComparisons() return array( array(2, 1), array(new \DateTime('2005/01/01'), new \DateTime('2001/01/01')), - array('333', '22') + array('333', '22'), + array(null, 1), ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php index 58fdb7e5895beb9b38d259e429e82c2093ec73ba..a1f6a69f4ac17cb0b678690248da3c687db2d76b 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IdenticalToValidatorTest.php @@ -40,7 +40,8 @@ public function provideValidComparisons() return array( array(3, 3), array('a', 'a'), - array($date, $date) + array($date, $date), + array(null, 1), ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php index dceb86cf3d96d2dcd8a088901cc65b471dd0965e..7f0859b999e0865f93740847c4c6721cd4315a66 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php @@ -163,7 +163,7 @@ public function testInvalidIsbn10($isbn) ->expects($this->once()) ->method('addViolation') ->with($constraint->isbn10Message); - + $this->validator->validate($isbn, $constraint); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php index 2614905a88b5a1b179b717e3dff056499d6407da..406e222119e26407fa175afe5445600e7aefc3f5 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanOrEqualValidatorTest.php @@ -41,6 +41,7 @@ public function provideValidComparisons() array(new \DateTime('2000-01-01'), new \DateTime('2020-01-01')), array('a', 'a'), array('a', 'z'), + array(null, 1), ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php index 61af9c6a2e69e2d11a56b669b7f2e43f04872860..f26269b3c23bfbfc4aa2d47163f7c8ef1bb6ef43 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/LessThanValidatorTest.php @@ -37,7 +37,8 @@ public function provideValidComparisons() return array( array(1, 2), array(new \DateTime('2000-01-01'), new \DateTime('2010-01-01')), - array('22', '333') + array('22', '333'), + array(null, 1), ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php index d7c446a1e277e54c794dcec6484aeffb8da2b7f7..0122643a7e86e9a829bdaa8b7112296f6fcff144 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotEqualToValidatorTest.php @@ -38,7 +38,8 @@ public function provideValidComparisons() return array( array(1, 2), array('22', '333'), - array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01')) + array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01')), + array(null, 1), ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php index 48b1931d9f1939a0e37177ed9cb4ce78f6b52c39..462202dd5a414bf1ff6e5a1536c4622efe284d80 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Constraints/NotIdenticalToValidatorTest.php @@ -40,7 +40,8 @@ public function provideValidComparisons() array('2', 2), array('22', '333'), array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01')), - array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')) + array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')), + array(null, 1), ); } diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ExecutionContextTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ExecutionContextTest.php index 354a2463cf5d723c1d25e6112b20533b98cf8c57..dcc9c027bf75b014252f86058ae0c9920a2ef1b3 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ExecutionContextTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/ExecutionContextTest.php @@ -14,6 +14,10 @@ use Symfony\Component\Validator\ConstraintViolation; use Symfony\Component\Validator\ConstraintViolationList; use Symfony\Component\Validator\ExecutionContext; +use Symfony\Component\Validator\Constraints\Collection; +use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; +use Symfony\Component\Validator\ValidationVisitor; +use Symfony\Component\Validator\ConstraintValidatorFactory; class ExecutionContextTest extends \PHPUnit_Framework_TestCase { @@ -272,6 +276,24 @@ public function testGetPropertyPathWithEmptyCurrentPropertyPath() $this->assertEquals('bam.baz', $this->context->getPropertyPath('bam.baz')); } + + public function testGetPropertyPathWithNestedCollectionsMixed() + { + $constraints = new Collection(array( + 'foo' => new Collection(array( + 'foo' => new ConstraintA(), + 'bar' => new ConstraintA(), + )), + 'name' => new ConstraintA() + )); + + $visitor = new ValidationVisitor('Root', $this->metadataFactory, new ConstraintValidatorFactory(), $this->translator); + $context = new ExecutionContext($visitor, $this->translator, self::TRANS_DOMAIN); + $context->validateValue(array('foo' => array('foo' => 'VALID')), $constraints); + $violations = $context->getViolations(); + + $this->assertEquals('[name]', $violations[1]->getPropertyPath()); + } } class ExecutionContextTest_TestClass diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php index 6549bc8b992763bfe2351d40f682f34dd9fa03df..1ce83e9159768b89a8738cfe107cdf16163d95a7 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php @@ -28,7 +28,7 @@ public function testInvalidPropertyName() public function testGetPropertyValueFromPublicGetter() { // private getters don't work yet because ReflectionMethod::setAccessible() - // does not exists yet in a stable PHP release + // does not exist yet in a stable PHP release $entity = new Entity('foobar'); $metadata = new GetterMetadata(self::CLASSNAME, 'internal'); diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractMethodStaticLoader.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractMethodStaticLoader.php new file mode 100644 index 0000000000000000000000000000000000000000..3a1416cfc56e9c8bf7cae94bb1c1ec8e05948134 --- /dev/null +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/AbstractMethodStaticLoader.php @@ -0,0 +1,10 @@ +<?php + +namespace Symfony\Component\Validator\Tests\Mapping\Loader; + +use Symfony\Component\Validator\Mapping\ClassMetadata; + +abstract class AbstractMethodStaticLoader +{ + abstract public static function loadMetadata(ClassMetadata $metadata); +} \ No newline at end of file diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php index 4fc18c16fef1720bc003d69264f375dfdc03d439..f90310cd2687542e788687dfffbc84a7b0fcf34f 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/StaticMethodLoaderTest.php @@ -48,12 +48,12 @@ public function testLoadClassMetadataDoesNotRepeatLoadWithParentClasses() $loader = new StaticMethodLoader('loadMetadata'); $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderDocument'); $loader->loadClassMetadata($metadata); - $this->assertSame(0, count($metadata->getConstraints())); + $this->assertCount(0, $metadata->getConstraints()); $loader = new StaticMethodLoader('loadMetadata'); $metadata = new ClassMetadata(__NAMESPACE__.'\BaseStaticLoaderDocument'); $loader->loadClassMetadata($metadata); - $this->assertSame(1, count($metadata->getConstraints())); + $this->assertCount(1, $metadata->getConstraints()); } public function testLoadClassMetadataIgnoresInterfaces() @@ -63,7 +63,32 @@ public function testLoadClassMetadataIgnoresInterfaces() $loader->loadClassMetadata($metadata); - $this->assertSame(0, count($metadata->getConstraints())); + $this->assertCount(0, $metadata->getConstraints()); + } + + public function testLoadClassMetadataInAbstractClasses() + { + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractStaticLoader'); + + $loader->loadClassMetadata($metadata); + + $this->assertCount(1, $metadata->getConstraints()); + } + + public function testLoadClassMetadataIgnoresAbstractMethods() + { + $loader = new StaticMethodLoader('loadMetadata'); + try { + include __DIR__ . '/AbstractMethodStaticLoader.php'; + $this->fail('AbstractMethodStaticLoader should produce a strict standard error.'); + } catch (\Exception $e) { + } + + $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractMethodStaticLoader'); + $loader->loadClassMetadata($metadata); + + $this->assertCount(0, $metadata->getConstraints()); } } @@ -72,6 +97,14 @@ interface StaticLoaderInterface public static function loadMetadata(ClassMetadata $metadata); } +abstract class AbstractStaticLoader +{ + public static function loadMetadata(ClassMetadata $metadata) + { + $metadata->addConstraint(new ConstraintA()); + } +} + class StaticLoaderEntity { public static $invokedWith = null; diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php index 1677b81b1f62c8c4d5e5ce764eb13743427feaf9..7c6e355bd171ff7d3fd0f63fa7d878e5fa987190 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php @@ -16,6 +16,7 @@ use Symfony\Component\Validator\Constraints\NotNull; use Symfony\Component\Validator\Constraints\Range; use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\Regex; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader; use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; @@ -68,6 +69,22 @@ public function testLoadClassMetadata() $this->assertEquals($expected, $metadata); } + public function testLoadClassMetadataWithNonStrings() + { + $loader = new XmlFileLoader(__DIR__.'/constraint-mapping-non-strings.xml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + $expected->addPropertyConstraint('firstName', new Regex(array('pattern' => '/^1/', 'match' => false))); + + $properties = $metadata->getPropertyMetadata('firstName'); + $constraints = $properties[0]->getConstraints(); + + $this->assertFalse($constraints[0]->match); + } + public function testLoadGroupSequenceProvider() { $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..dfd5edddc5ecadbd147359734a7ffc79fdce87ca --- /dev/null +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" ?> + +<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> + + <namespace prefix="custom">Symfony\Component\Validator\Tests\Fixtures\</namespace> + + <class name="Symfony\Component\Validator\Tests\Fixtures\Entity"> + <property name="firstName"> + <!-- Constraint with a Boolean --> + <constraint name="Regex"> + <option name="pattern">/^1/</option> + <option name="match">false</option> + </constraint> + </property> + </class> + +</constraint-mapping> diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml index 946200ba11ca6bce98b1f945e3c7cac013789d2e..dfac70d9cf6e2dfaa66a201e4e1763db5c076d1b 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml @@ -78,7 +78,7 @@ <!-- Constraint with options --> <constraint name="Choice"> <!-- Option with single value --> - <option name="message">Must be one of %choices%</option> + <option name="message"> Must be one of %choices% </option> <!-- Option with multiple values --> <option name="choices"> <value>A</value> diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php index 1abe58de72384dde7ddc2e931e507884a80f5ccf..bfb402cdee2bea2a5db1b85363af26bfd9fba652 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php @@ -69,6 +69,33 @@ public function testSerialize() $this->assertEquals($this->metadata, $metadata); } + + public function testSerializeCollectionCascaded() + { + $this->metadata->addConstraint(new Valid(array('traverse' => true, 'deep' => false))); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } + + public function testSerializeCollectionCascadedDeeply() + { + $this->metadata->addConstraint(new Valid(array('traverse' => true, 'deep' => true))); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } + + public function testSerializeCollectionNotCascaded() + { + $this->metadata->addConstraint(new Valid(array('traverse' => false))); + + $metadata = unserialize(serialize($this->metadata)); + + $this->assertEquals($this->metadata, $metadata); + } } class TestMemberMetadata extends MemberMetadata diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Validator.php index 21abd59f03bdaab4b4cc4d4f9e9ea7ca6e81b3c4..476c8141bc949aee91e68b3de6e274aab3d93d06 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Validator.php @@ -186,7 +186,7 @@ public function validateValue($value, $constraints, $groups = null) ); } - $context->validateValue($value, $constraint, $groups); + $context->validateValue($value, $constraint, '', $groups); } return $context->getViolations(); diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/.gitignore b/core/vendor/symfony/yaml/Symfony/Component/Yaml/.gitignore index 44de97a36a6dff061b100cb131df52b07aeabde8..c49a5d8df5c6548379f00c77fe572a7217bce218 100644 --- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/.gitignore +++ b/core/vendor/symfony/yaml/Symfony/Component/Yaml/.gitignore @@ -1,4 +1,3 @@ vendor/ composer.lock phpunit.xml - diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php b/core/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php index 680b50349c92e166ad8dd10f07cd862728013c84..d852cbf9bcf1f260bd89036904ad68ea76b108b6 100644 --- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php +++ b/core/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php @@ -19,6 +19,8 @@ */ class Parser { + const FOLDED_SCALAR_PATTERN = '(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?'; + private $offset = 0; private $lines = array(); private $currentLineNb = -1; @@ -111,7 +113,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport); } } - } elseif (preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $this->currentLine, $values)) { + } elseif (preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $this->currentLine, $values) && false === strpos($values['key'],' #')) { if ($context && 'sequence' == $context) { throw new ParseException('You cannot define a mapping item when in a sequence'); } @@ -304,14 +306,21 @@ private function getNextEmbedBlock($indentation = null) $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem($this->currentLine); + // Comments must not be removed inside a string block (ie. after a line ending with "|") + $removeCommentsPattern = '~'.self::FOLDED_SCALAR_PATTERN.'$~'; + $removeComments = !preg_match($removeCommentsPattern, $this->currentLine); + while ($this->moveToNextLine()) { + if ($this->getCurrentLineIndentation() === $newIndent) { + $removeComments = !preg_match($removeCommentsPattern, $this->currentLine); + } if ($isItUnindentedCollection && !$this->isStringUnIndentedCollectionItem($this->currentLine)) { $this->moveToPreviousLine(); break; } - if ($this->isCurrentLineEmpty()) { + if ($removeComments && $this->isCurrentLineEmpty() || $this->isCurrentLineBlank()) { if ($this->isCurrentLineBlank()) { $data[] = substr($this->currentLine, $newIndent); } @@ -389,7 +398,7 @@ private function parseValue($value, $exceptionOnInvalidType, $objectSupport) return $this->refs[$value]; } - if (preg_match('/^(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?$/', $value, $matches)) { + if (preg_match('/^'.self::FOLDED_SCALAR_PATTERN.'$/', $value, $matches)) { $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : ''; return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers))); diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfComments.yml b/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfComments.yml index 34225e11e0a9f44c856eb863ed849cd56fa9484f..46addfcd3da0493e6630933eb4dbd4f1c6192b0f 100644 --- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfComments.yml +++ b/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/sfComments.yml @@ -49,3 +49,17 @@ yaml: | foo: bar # a comment php: | array('foo' => 'bar') +--- +test: Comment containing a colon on a hash line +brief: > + Comment containing a colon on a scalar line +yaml: 'foo # comment: this is also part of the comment' +php: | + 'foo' +--- +test: 'Hash key containing a #' +brief: > + 'Hash key containing a #' +yaml: 'foo#bar: baz' +php: | + array('foo#bar' => 'baz') diff --git a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php b/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php index a8d28b9131de703173773c500258adbfeb3da080..c7d3b071e6dbe91bb2305c2df684bdd9fdba64e9 100644 --- a/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php +++ b/core/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php @@ -522,6 +522,95 @@ public function testEmptyValue() $this->assertEquals(array('hash' => null), Yaml::parse($input)); } + + public function testStringBlockWithComments() + { + $this->assertEquals(array('content' => <<<EOT +# comment 1 +header + + # comment 2 + <body> + <h1>title</h1> + </body> + +footer # comment3 +EOT + ), Yaml::parse(<<<EOF +content: | + # comment 1 + header + + # comment 2 + <body> + <h1>title</h1> + </body> + + footer # comment3 +EOF + )); + } + + public function testFoldedStringBlockWithComments() + { + $this->assertEquals(array(array('content' => <<<EOT +# comment 1 +header + + # comment 2 + <body> + <h1>title</h1> + </body> + +footer # comment3 +EOT + )), Yaml::parse(<<<EOF +- + content: | + # comment 1 + header + + # comment 2 + <body> + <h1>title</h1> + </body> + + footer # comment3 +EOF + )); + } + + public function testNestedFoldedStringBlockWithComments() + { + $this->assertEquals(array(array( + 'title' => 'some title', + 'content' => <<<EOT +# comment 1 +header + + # comment 2 + <body> + <h1>title</h1> + </body> + +footer # comment3 +EOT + )), Yaml::parse(<<<EOF +- + title: some title + content: | + # comment 1 + header + + # comment 2 + <body> + <h1>title</h1> + </body> + + footer # comment3 +EOF + )); + } } class B