diff --git a/composer.lock b/composer.lock index 17ab6fa92b305c32d0220c8e13f916323d7323c6..8e3de74a2f83c55ab04107fb95043b887742087f 100644 --- a/composer.lock +++ b/composer.lock @@ -890,6 +890,48 @@ ], "time": "2016-06-24 23:00:38" }, + { + "name": "ircmaxell/password-compat", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@php.net", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", + "homepage": "https://github.com/ircmaxell/password_compat", + "keywords": [ + "hashing", + "password" + ], + "time": "2014-11-20 16:49:30" + }, { "name": "masterminds/html5", "version": "2.2.1", @@ -1200,32 +1242,29 @@ }, { "name": "symfony/class-loader", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "61de6c27f9d4efe988ea8274f19c2d4e331dd4e4" + "reference": "7d362c22710980730d46a5d039e788946a2938cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/61de6c27f9d4efe988ea8274f19c2d4e331dd4e4", - "reference": "61de6c27f9d4efe988ea8274f19c2d4e331dd4e4", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/7d362c22710980730d46a5d039e788946a2938cb", + "reference": "7d362c22710980730d46a5d039e788946a2938cb", "shasum": "" }, "require": { - "php": ">=5.5.9" - }, - "require-dev": { - "symfony/finder": "~2.8|~3.0", + "php": ">=5.3.9", "symfony/polyfill-apcu": "~1.1" }, - "suggest": { - "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM" + "require-dev": { + "symfony/finder": "~2.0,>=2.0.5|~3.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1252,31 +1291,30 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2016-11-15 12:07:16" + "time": "2016-03-10 19:33:53" }, { "name": "symfony/console", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5be36e1f3ac7ecbe7e34fb641480ad8497b83aa6" + "reference": "9a5aef5fc0d4eff86853d44202b02be8d5a20154" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5be36e1f3ac7ecbe7e34fb641480ad8497b83aa6", - "reference": "5be36e1f3ac7ecbe7e34fb641480ad8497b83aa6", + "url": "https://api.github.com/repos/symfony/console/zipball/9a5aef5fc0d4eff86853d44202b02be8d5a20154", + "reference": "9a5aef5fc0d4eff86853d44202b02be8d5a20154", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", + "php": ">=5.3.9", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" }, "suggest": { "psr/log": "For using the console logger", @@ -1286,7 +1324,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1313,46 +1351,43 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-11-16 22:17:09" + "time": "2016-03-17 09:19:04" }, { "name": "symfony/debug", - "version": "v3.1.7", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "c058661c32f5b462722e36d120905940089cbd9a" + "reference": "fb9e6887db716939f41af0ba8ef38a1582eb501b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/c058661c32f5b462722e36d120905940089cbd9a", - "reference": "c058661c32f5b462722e36d120905940089cbd9a", + "url": "https://api.github.com/repos/symfony/debug/zipball/fb9e6887db716939f41af0ba8ef38a1582eb501b", + "reference": "fb9e6887db716939f41af0ba8ef38a1582eb501b", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": ">=5.3.9", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "symfony/class-loader": "~2.2", + "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.7-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1370,40 +1405,42 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-11-15 12:55:20" + "time": "2015-10-11 09:39:48" }, { "name": "symfony/dependency-injection", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "87598e21bb9020bd9ccd6df6936b9c369c72775d" + "reference": "f7b4a498e679fa440b16facb934680a1527ed48c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/87598e21bb9020bd9ccd6df6936b9c369c72775d", - "reference": "87598e21bb9020bd9ccd6df6936b9c369c72775d", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f7b4a498e679fa440b16facb934680a1527ed48c", + "reference": "f7b4a498e679fa440b16facb934680a1527ed48c", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.3.9" + }, + "conflict": { + "symfony/expression-language": "<2.6" }, "require-dev": { - "symfony/config": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/yaml": "~2.8.7|~3.0.7|~3.1.1|~3.2" + "symfony/config": "~2.2|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/yaml": "~2.1|~3.0.0" }, "suggest": { "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1430,28 +1467,28 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2016-11-18 21:15:08" + "time": "2016-03-21 07:27:21" }, { "name": "symfony/dom-crawler", - "version": "v3.1.7", + "version": "v2.8.13", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "1eb3b4d216e8db117218dd2bb7d23dfe67bdf518" + "reference": "a94f3fe6f179d6453e5ed8188cf4bfdf933d85f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/1eb3b4d216e8db117218dd2bb7d23dfe67bdf518", - "reference": "1eb3b4d216e8db117218dd2bb7d23dfe67bdf518", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/a94f3fe6f179d6453e5ed8188cf4bfdf933d85f4", + "reference": "a94f3fe6f179d6453e5ed8188cf4bfdf933d85f4", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": ">=5.3.9", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0" + "symfony/css-selector": "~2.8|~3.0.0" }, "suggest": { "symfony/css-selector": "" @@ -1459,7 +1496,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1486,31 +1523,31 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2016-11-14 16:20:02" + "time": "2016-10-18 15:35:45" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" + "reference": "47d2d8cade9b1c3987573d2943bb9352536cdb87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/47d2d8cade9b1c3987573d2943bb9352536cdb87", + "reference": "47d2d8cade9b1c3987573d2943bb9352536cdb87", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.3.9" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "symfony/config": "~2.0,>=2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1519,7 +1556,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1546,33 +1583,35 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-10-13 06:28:43" + "time": "2016-03-07 14:04:32" }, { "name": "symfony/http-foundation", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5a4c8099a1547fe451256e056180ad4624177017" + "reference": "06d6b2c755b2f34ce21e688b62072e9c625709c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5a4c8099a1547fe451256e056180ad4624177017", - "reference": "5a4c8099a1547fe451256e056180ad4624177017", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/06d6b2c755b2f34ce21e688b62072e9c625709c4", + "reference": "06d6b2c755b2f34ce21e688b62072e9c625709c4", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.1" + "php": ">=5.3.9", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php54": "~1.0", + "symfony/polyfill-php55": "~1.0" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0" + "symfony/expression-language": "~2.4|~3.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1599,48 +1638,48 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2016-11-16 22:17:09" + "time": "2016-03-27 12:57:53" }, { "name": "symfony/http-kernel", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "674ac403c7b3742c2a988a86e3baf9aca2c696a0" + "reference": "2c45576fee2eb228d4771342a05b0565e4711ba2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/674ac403c7b3742c2a988a86e3baf9aca2c696a0", - "reference": "674ac403c7b3742c2a988a86e3baf9aca2c696a0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2c45576fee2eb228d4771342a05b0565e4711ba2", + "reference": "2c45576fee2eb228d4771342a05b0565e4711ba2", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": ">=5.3.9", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8.13|~3.1.6|~3.2" + "symfony/debug": "~2.6,>=2.6.2", + "symfony/event-dispatcher": "~2.6,>=2.6.7|~3.0.0", + "symfony/http-foundation": "~2.5,>=2.5.4|~3.0.0" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.7" }, "require-dev": { - "symfony/browser-kit": "~2.8|~3.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0", - "symfony/console": "~2.8|~3.0", - "symfony/css-selector": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/dom-crawler": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/finder": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0", - "symfony/routing": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0", - "symfony/templating": "~2.8|~3.0", - "symfony/translation": "~2.8|~3.0", - "symfony/var-dumper": "~2.8|~3.0" + "symfony/browser-kit": "~2.3|~3.0.0", + "symfony/class-loader": "~2.1|~3.0.0", + "symfony/config": "~2.8", + "symfony/console": "~2.3|~3.0.0", + "symfony/css-selector": "~2.0,>=2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.8|~3.0.0", + "symfony/dom-crawler": "~2.0,>=2.0.5|~3.0.0", + "symfony/expression-language": "~2.4|~3.0.0", + "symfony/finder": "~2.0,>=2.0.5|~3.0.0", + "symfony/process": "~2.0,>=2.0.5|~3.0.0", + "symfony/routing": "~2.8|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0", + "symfony/templating": "~2.2|~3.0.0", + "symfony/translation": "~2.0,>=2.0.5|~3.0.0", + "symfony/var-dumper": "~2.6|~3.0.0" }, "suggest": { "symfony/browser-kit": "", @@ -1654,7 +1693,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1681,20 +1720,73 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2016-11-21 02:44:20" + "time": "2016-03-25 01:40:30" + }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "0c901e4e65a2f7ece68f0fd249b56d6ad3adc214" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/0c901e4e65a2f7ece68f0fd249b56d6ad3adc214", + "reference": "0c901e4e65a2f7ece68f0fd249b56d6ad3adc214", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-03-03 16:49:40" }, { "name": "symfony/polyfill-iconv", - "version": "v1.3.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "cba36f3616d9866b3e52662e88da5c090fac1e97" + "reference": "08e3b8768d785ba7f271ef94906d50f7efe72ce8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/cba36f3616d9866b3e52662e88da5c090fac1e97", - "reference": "cba36f3616d9866b3e52662e88da5c090fac1e97", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/08e3b8768d785ba7f271ef94906d50f7efe72ce8", + "reference": "08e3b8768d785ba7f271ef94906d50f7efe72ce8", "shasum": "" }, "require": { @@ -1706,7 +1798,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -1740,20 +1832,20 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-02-26 11:31:02" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "1289d16209491b584839022f29257ad859b8532d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", + "reference": "1289d16209491b584839022f29257ad859b8532d", "shasum": "" }, "require": { @@ -1765,7 +1857,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -1799,29 +1891,143 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-01-20 09:13:37" + }, + { + "name": "symfony/polyfill-php54", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php54.git", + "reference": "74663d5a2ff3c530c1bc0571500e0feec9094054" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/74663d5a2ff3c530c1bc0571500e0feec9094054", + "reference": "74663d5a2ff3c530c1bc0571500e0feec9094054", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php54\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-01-20 09:13:37" + }, + { + "name": "symfony/polyfill-php55", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php55.git", + "reference": "b4f3f07d91702f8f926339fc4fcf81671d8c27e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/b4f3f07d91702f8f926339fc4fcf81671d8c27e6", + "reference": "b4f3f07d91702f8f926339fc4fcf81671d8c27e6", + "shasum": "" + }, + "require": { + "ircmaxell/password-compat": "~1.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php55\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-01-20 09:13:37" }, { "name": "symfony/process", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" + "reference": "fb467471952ef5cf8497c029980e556b47545333" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", + "url": "https://api.github.com/repos/symfony/process/zipball/fb467471952ef5cf8497c029980e556b47545333", + "reference": "fb467471952ef5cf8497c029980e556b47545333", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.3.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1848,7 +2054,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-09-29 14:13:09" + "time": "2016-03-23 13:11:46" }, { "name": "symfony/psr-http-message-bridge", @@ -1906,32 +2112,32 @@ }, { "name": "symfony/routing", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6" + "reference": "d7d4a20cb55a90a06c0070d1a360e5ac606306ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8edf62498a1a4c57ba317664a4b698339c10cdf6", - "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6", + "url": "https://api.github.com/repos/symfony/routing/zipball/d7d4a20cb55a90a06c0070d1a360e5ac606306ef", + "reference": "d7d4a20cb55a90a06c0070d1a360e5ac606306ef", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.3.9" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.7" }, "require-dev": { "doctrine/annotations": "~1.0", "doctrine/common": "~2.2", "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/http-foundation": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/config": "~2.7|~3.0.0", + "symfony/expression-language": "~2.4|~3.0.0", + "symfony/http-foundation": "~2.3|~3.0.0", + "symfony/yaml": "~2.0,>=2.0.5|~3.0.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -1944,7 +2150,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -1977,53 +2183,44 @@ "uri", "url" ], - "time": "2016-08-16 14:58:24" + "time": "2016-03-23 13:11:46" }, { "name": "symfony/serializer", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "e57bb526736d4df8b1a1a998026aefe92f10d780" + "reference": "e848750ceffdc4af374844c338c299627a98196a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/e57bb526736d4df8b1a1a998026aefe92f10d780", - "reference": "e57bb526736d4df8b1a1a998026aefe92f10d780", + "url": "https://api.github.com/repos/symfony/serializer/zipball/e848750ceffdc4af374844c338c299627a98196a", + "reference": "e848750ceffdc4af374844c338c299627a98196a", "shasum": "" }, "require": { - "php": ">=5.5.9" - }, - "conflict": { - "symfony/property-access": ">=3.0,<3.0.4|>=2.8,<2.8.4" + "php": ">=5.3.9", + "symfony/polyfill-php55": "~1.0" }, "require-dev": { "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0", - "phpdocumentor/reflection-docblock": "~3.0", - "symfony/cache": "~3.1", - "symfony/config": "~2.8|~3.0", - "symfony/http-foundation": "~2.8|~3.0", - "symfony/property-access": "~2.8|~3.0", - "symfony/property-info": "~3.1", - "symfony/yaml": "~2.8|~3.0" + "symfony/config": "~2.2|~3.0.0", + "symfony/property-access": "~2.3|~3.0.0", + "symfony/yaml": "~2.0,>=2.0.5|~3.0.0" }, "suggest": { "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", "doctrine/cache": "For using the default cached annotation reader and metadata cache.", - "psr/cache-implementation": "For using the metadata cache.", "symfony/config": "For using the XML mapping loader.", - "symfony/http-foundation": "To use the DataUriNormalizer.", "symfony/property-access": "For using the ObjectNormalizer.", - "symfony/property-info": "To deserialize relations.", "symfony/yaml": "For using the default YAML mapping loader." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -2050,34 +2247,34 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2016-11-15 07:36:22" + "time": "2016-03-07 14:04:32" }, { "name": "symfony/translation", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "2f4b6114b75c506dd1ee7eb485b35facbcb2d873" + "reference": "d60b8e076d22953aabebeebda53bf334438e7aca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/2f4b6114b75c506dd1ee7eb485b35facbcb2d873", - "reference": "2f4b6114b75c506dd1ee7eb485b35facbcb2d873", + "url": "https://api.github.com/repos/symfony/translation/zipball/d60b8e076d22953aabebeebda53bf334438e7aca", + "reference": "d60b8e076d22953aabebeebda53bf334438e7aca", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": ">=5.3.9", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.7" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/intl": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/config": "~2.8", + "symfony/intl": "~2.4|~3.0.0", + "symfony/yaml": "~2.2|~3.0.0" }, "suggest": { "psr/log": "To use logging capability in translator", @@ -2087,7 +2284,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -2114,54 +2311,52 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2016-11-18 21:15:08" + "time": "2016-03-25 01:40:30" }, { "name": "symfony/validator", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "5ba95c69918d98c5691c913ffab3ab1200e1441d" + "reference": "ea0ce99531c9eb82abf21011da4e111932f8ce81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/5ba95c69918d98c5691c913ffab3ab1200e1441d", - "reference": "5ba95c69918d98c5691c913ffab3ab1200e1441d", + "url": "https://api.github.com/repos/symfony/validator/zipball/ea0ce99531c9eb82abf21011da4e111932f8ce81", + "reference": "ea0ce99531c9eb82abf21011da4e111932f8ce81", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation": "~2.8|~3.0" + "php": ">=5.3.9", + "symfony/translation": "~2.4|~3.0.0" }, "require-dev": { "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0", "egulias/email-validator": "~1.2,>=1.2.1", - "symfony/cache": "~3.1", - "symfony/config": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/http-foundation": "~2.8|~3.0", - "symfony/intl": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/config": "~2.2|~3.0.0", + "symfony/expression-language": "~2.4|~3.0.0", + "symfony/http-foundation": "~2.1|~3.0.0", + "symfony/intl": "~2.7.4|~2.8|~3.0.0", + "symfony/property-access": "~2.3|~3.0.0", + "symfony/yaml": "~2.0,>=2.0.5|~3.0.0" }, "suggest": { "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", "doctrine/cache": "For using the default cached annotation reader and metadata cache.", "egulias/email-validator": "Strict (RFC compliant) email validation", - "psr/cache-implementation": "For using the metadata cache.", "symfony/config": "", - "symfony/expression-language": "For using the Expression validator", + "symfony/expression-language": "For using the 2.4 Expression validator", "symfony/http-foundation": "", "symfony/intl": "", - "symfony/property-access": "For using the Expression validator", + "symfony/property-access": "For using the 2.4 Validator API", "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -2188,29 +2383,29 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2016-11-18 21:15:08" + "time": "2016-03-27 12:57:53" }, { "name": "symfony/yaml", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "9da375317228e54f4ea1b013b30fa47417e84943" + "reference": "584e52cb8f788a887553ba82db6caacb1d6260bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/9da375317228e54f4ea1b013b30fa47417e84943", - "reference": "9da375317228e54f4ea1b013b30fa47417e84943", + "url": "https://api.github.com/repos/symfony/yaml/zipball/584e52cb8f788a887553ba82db6caacb1d6260bb", + "reference": "584e52cb8f788a887553ba82db6caacb1d6260bb", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.3.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -2237,7 +2432,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-11-18 21:05:29" + "time": "2016-03-04 07:54:35" }, { "name": "twig/twig", @@ -3904,25 +4099,25 @@ }, { "name": "symfony/browser-kit", - "version": "v3.1.7", + "version": "v2.7.6", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "901319a31c9b3cee7857b4aeeb81b5d64dfa34fc" + "reference": "07d664a052572ccc28eb2ab7dbbe82155b1ad367" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/901319a31c9b3cee7857b4aeeb81b5d64dfa34fc", - "reference": "901319a31c9b3cee7857b4aeeb81b5d64dfa34fc", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/07d664a052572ccc28eb2ab7dbbe82155b1ad367", + "reference": "07d664a052572ccc28eb2ab7dbbe82155b1ad367", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/dom-crawler": "~2.8|~3.0" + "php": ">=5.3.9", + "symfony/dom-crawler": "~2.0,>=2.0.5" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/css-selector": "~2.0,>=2.0.5", + "symfony/process": "~2.3.34|~2.7,>=2.7.6" }, "suggest": { "symfony/process": "" @@ -3930,16 +4125,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.7-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\BrowserKit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3957,29 +4149,29 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2015-10-23 14:47:27" }, { "name": "symfony/css-selector", - "version": "v3.1.7", + "version": "v2.8.4", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "a37b3359566415a91cba55a2d95820b3fa1a9658" + "reference": "07b7ced3ae0c12918477c095453ea8595000810e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/a37b3359566415a91cba55a2d95820b3fa1a9658", - "reference": "a37b3359566415a91cba55a2d95820b3fa1a9658", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/07b7ced3ae0c12918477c095453ea8595000810e", + "reference": "07b7ced3ae0c12918477c095453ea8595000810e", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.3.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -4010,7 +4202,7 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2016-11-03 08:04:31" + "time": "2016-03-04 07:54:35" } ], "aliases": [], diff --git a/core/composer.json b/core/composer.json index 4d9024d92ae660d67c9d5f37e41528d55a574689..7ae0ccf50330be66555579243d6499acb47ae137 100644 --- a/core/composer.json +++ b/core/composer.json @@ -5,20 +5,20 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "symfony/class-loader": "~3.1", - "symfony/console": "~3.1", - "symfony/dependency-injection": "~3.1", - "symfony/dom-crawler": ">=3.1.6 <4.0", - "symfony/event-dispatcher": "~3.1", - "symfony/http-foundation": ">=3.1.6 <4.0", - "symfony/http-kernel": "~3.1", - "symfony/routing": "~3.1", - "symfony/serializer": "~3.1", - "symfony/translation": "~3.1", - "symfony/validator": "~3.1", - "symfony/process": "~3.1", + "symfony/class-loader": "~2.8", + "symfony/console": "~2.8", + "symfony/dependency-injection": "~2.8", + "symfony/dom-crawler": ">=2.8.13 <3.0", + "symfony/event-dispatcher": "~2.8", + "symfony/http-foundation": "~2.8", + "symfony/http-kernel": "~2.8", + "symfony/routing": "~2.8", + "symfony/serializer": "~2.8", + "symfony/translation": "~2.8", + "symfony/validator": "~2.8", + "symfony/process": "~2.8", "symfony/polyfill-iconv": "~1.0", - "symfony/yaml": "~3.1", + "symfony/yaml": "~2.8", "twig/twig": "^1.23.1", "doctrine/common": "2.5.*", "doctrine/annotations": "1.2.*", @@ -42,7 +42,7 @@ "jcalderonzumba/mink-phantomjs-driver": "~0.3.1", "mikey179/vfsStream": "~1.2", "phpunit/phpunit": "~4.8", - "symfony/css-selector": "~3.1" + "symfony/css-selector": "~2.8" }, "replace": { "drupal/action": "self.version", diff --git a/core/lib/Drupal/Component/DependencyInjection/Container.php b/core/lib/Drupal/Component/DependencyInjection/Container.php index 6fde12d1cd9cbdfd7da23fb4e0c1abaf71cad0a8..452a2c84d829facd6b5267316eb756e62ca00c31 100644 --- a/core/lib/Drupal/Component/DependencyInjection/Container.php +++ b/core/lib/Drupal/Component/DependencyInjection/Container.php @@ -3,7 +3,9 @@ namespace Drupal\Component\DependencyInjection; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\DependencyInjection\IntrospectableContainerInterface; use Symfony\Component\DependencyInjection\ResettableContainerInterface; +use Symfony\Component\DependencyInjection\ScopeInterface; use Symfony\Component\DependencyInjection\Exception\LogicException; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; @@ -48,7 +50,7 @@ * * @ingroup container */ -class Container implements ContainerInterface, ResettableContainerInterface { +class Container implements IntrospectableContainerInterface, ResettableContainerInterface { /** * The parameters of the container. @@ -359,7 +361,11 @@ protected function createService(array $definition, $id) { /** * {@inheritdoc} */ - public function set($id, $service) { + public function set($id, $service, $scope = ContainerInterface::SCOPE_CONTAINER) { + if (!in_array($scope, array('container', 'request')) || ('request' === $scope && 'request' !== $id)) { + @trigger_error('The concept of container scopes is deprecated since version 2.8 and will be removed in 3.0. Omit the third parameter.', E_USER_DEPRECATED); + } + $this->services[$id] = $service; } @@ -581,6 +587,61 @@ protected function getParameterAlternatives($name) { return $this->getAlternatives($name, array_keys($this->parameters)); } + + /** + * {@inheritdoc} + */ + public function enterScope($name) { + if ('request' !== $name) { + @trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED); + } + + throw new \BadMethodCallException(sprintf("'%s' is not supported by Drupal 8.", __FUNCTION__)); + } + + /** + * {@inheritdoc} + */ + public function leaveScope($name) { + if ('request' !== $name) { + @trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED); + } + + throw new \BadMethodCallException(sprintf("'%s' is not supported by Drupal 8.", __FUNCTION__)); + } + + /** + * {@inheritdoc} + */ + public function addScope(ScopeInterface $scope) { + + $name = $scope->getName(); + if ('request' !== $name) { + @trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED); + } + throw new \BadMethodCallException(sprintf("'%s' is not supported by Drupal 8.", __FUNCTION__)); + } + + /** + * {@inheritdoc} + */ + public function hasScope($name) { + if ('request' !== $name) { + @trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED); + } + + throw new \BadMethodCallException(sprintf("'%s' is not supported by Drupal 8.", __FUNCTION__)); + } + + /** + * {@inheritdoc} + */ + public function isScopeActive($name) { + @trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED); + + throw new \BadMethodCallException(sprintf("'%s' is not supported by Drupal 8.", __FUNCTION__)); + } + /** * Gets all defined service IDs. * diff --git a/core/lib/Drupal/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumper.php b/core/lib/Drupal/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumper.php index 0a719d2989d2c94a59ee38694df1b96f529ca298..984ec509bcfae23ff05d2971e7a73069c71fd278 100644 --- a/core/lib/Drupal/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumper.php +++ b/core/lib/Drupal/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumper.php @@ -236,6 +236,18 @@ protected function getServiceDefinition(Definition $definition) { $service['calls'] = $this->dumpMethodCalls($definition->getMethodCalls()); } + if (($scope = $definition->getScope()) !== ContainerInterface::SCOPE_CONTAINER) { + if ($scope === ContainerInterface::SCOPE_PROTOTYPE) { + // Scope prototype has been replaced with 'shared' => FALSE. + // This is a Symfony 2.8 forward compatibility fix. + // Reference: https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.8.md#dependencyinjection + $service['shared'] = FALSE; + } + else { + throw new InvalidArgumentException("The 'scope' definition is deprecated in Symfony 3.0 and not supported by Drupal 8."); + } + } + // By default services are shared, so just provide the flag, when needed. if ($definition->isShared() === FALSE) { $service['shared'] = $definition->isShared(); diff --git a/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php b/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php index dcd724d20088bf13f8f30478b223cc5c4ec35e1d..a933b065948e89ca4e71dabe44d2740fbe591fbf 100644 --- a/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php +++ b/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php @@ -2,7 +2,7 @@ namespace Drupal\Component\EventDispatcher; -use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\DependencyInjection\IntrospectableContainerInterface; use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -36,7 +36,7 @@ class ContainerAwareEventDispatcher implements EventDispatcherInterface { /** * The service container. * - * @var \Symfony\Component\DependencyInjection\ContainerInterface; + * @var \Symfony\Component\DependencyInjection\IntrospectableContainerInterface; */ protected $container; @@ -66,7 +66,7 @@ class ContainerAwareEventDispatcher implements EventDispatcherInterface { /** * Constructs a container aware event dispatcher. * - * @param \Symfony\Component\DependencyInjection\ContainerInterface $container + * @param \Symfony\Component\DependencyInjection\IntrospectableContainerInterface $container * The service container. * @param array $listeners * A nested array of listener definitions keyed by event name and priority. @@ -77,7 +77,7 @@ class ContainerAwareEventDispatcher implements EventDispatcherInterface { * A service entry will be resolved to a callable only just before its * invocation. */ - public function __construct(ContainerInterface $container, array $listeners = []) { + public function __construct(IntrospectableContainerInterface $container, array $listeners = []) { $this->container = $container; $this->listeners = $listeners; $this->unsorted = []; @@ -91,6 +91,9 @@ public function dispatch($event_name, Event $event = NULL) { $event = new Event(); } + $event->setDispatcher($this); + $event->setName($event_name); + if (isset($this->listeners[$event_name])) { // Sort listeners if necessary. if (isset($this->unsorted[$event_name])) { diff --git a/core/lib/Drupal/Component/Serialization/YamlPecl.php b/core/lib/Drupal/Component/Serialization/YamlPecl.php index ec48a29ca6dbd376cbfa8cc7393753e491d6fc84..2383bf849a8f582c7d908c0433143e01d4fc4dbf 100644 --- a/core/lib/Drupal/Component/Serialization/YamlPecl.php +++ b/core/lib/Drupal/Component/Serialization/YamlPecl.php @@ -27,13 +27,6 @@ public static function encode($data) { * {@inheritdoc} */ public static function decode($raw) { - static $init; - if (!isset($init)) { - // Decode binary, since Symfony YAML parser encodes binary from 3.1 - // onwards. - ini_set('yaml.decode_binary', 1); - $init = TRUE; - } // yaml_parse() will error with an empty value. if (!trim($raw)) { return NULL; diff --git a/core/lib/Drupal/Component/Serialization/YamlSymfony.php b/core/lib/Drupal/Component/Serialization/YamlSymfony.php index 390178f3f6428a50d4a63e66488d6fb83e5dc8c3..8818e525345d3a47eb7c701a4e0b61e0b2c5a92a 100644 --- a/core/lib/Drupal/Component/Serialization/YamlSymfony.php +++ b/core/lib/Drupal/Component/Serialization/YamlSymfony.php @@ -5,7 +5,6 @@ use Drupal\Component\Serialization\Exception\InvalidDataTypeException; use Symfony\Component\Yaml\Parser; use Symfony\Component\Yaml\Dumper; -use Symfony\Component\Yaml\Yaml as SymfonyYaml; /** * Default serialization for YAML using the Symfony component. @@ -19,7 +18,7 @@ public static function encode($data) { try { $yaml = new Dumper(); $yaml->setIndentation(2); - return $yaml->dump($data, PHP_INT_MAX, 0, SymfonyYaml::DUMP_EXCEPTION_ON_INVALID_TYPE); + return $yaml->dump($data, PHP_INT_MAX, 0, TRUE, FALSE); } catch (\Exception $e) { throw new InvalidDataTypeException($e->getMessage(), $e->getCode(), $e); @@ -34,7 +33,7 @@ public static function decode($raw) { $yaml = new Parser(); // Make sure we have a single trailing newline. A very simple config like // 'foo: bar' with no newline will fail to parse otherwise. - return $yaml->parse($raw, SymfonyYaml::PARSE_EXCEPTION_ON_INVALID_TYPE); + return $yaml->parse($raw, TRUE, FALSE); } catch (\Exception $e) { throw new InvalidDataTypeException($e->getMessage(), $e->getCode(), $e); diff --git a/core/lib/Drupal/Core/DependencyInjection/Container.php b/core/lib/Drupal/Core/DependencyInjection/Container.php index 5643363316913305b71d8f64fa46ed103ebd182b..4a491225b0cc2813bfc9f0d193377a7bcdc12460 100644 --- a/core/lib/Drupal/Core/DependencyInjection/Container.php +++ b/core/lib/Drupal/Core/DependencyInjection/Container.php @@ -3,6 +3,7 @@ namespace Drupal\Core\DependencyInjection; use Drupal\Component\DependencyInjection\Container as DrupalContainer; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Extends the Drupal container to set the service ID on the created object. @@ -12,8 +13,8 @@ class Container extends DrupalContainer { /** * {@inheritdoc} */ - public function set($id, $service) { - parent::set($id, $service); + public function set($id, $service, $scope = ContainerInterface::SCOPE_CONTAINER) { + parent::set($id, $service, $scope); // Ensure that the _serviceId property is set on synthetic services as well. if (isset($this->services[$id]) && is_object($this->services[$id]) && !isset($this->services[$id]->_serviceId)) { diff --git a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php index e0becc71e22f5e4a1f40e0d8736fe48a249cfc29..e45cb884aa26960fe6d62ac27a46302fb3c97c9d 100644 --- a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php +++ b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php @@ -46,12 +46,20 @@ private function getProxyInstantiator() } /** - * {@inheritdoc} + * Direct copy of the parent function. */ protected function shareService(Definition $definition, $service, $id) { - if ($definition->isShared()) { + if ($definition->isShared() && self::SCOPE_PROTOTYPE !== $scope = $definition->getScope(false)) { + if (self::SCOPE_CONTAINER !== $scope && !isset($this->scopedServices[$scope])) { + throw new InactiveScopeException($id, $scope); + } + $this->services[$lowerId = strtolower($id)] = $service; + + if (self::SCOPE_CONTAINER !== $scope) { + $this->scopedServices[$scope][$lowerId] = $service; + } } } @@ -66,11 +74,11 @@ protected function shareService(Definition $definition, $service, $id) * ContainerBuilder class should be fixed to allow setting synthetic * services in a frozen builder. */ - public function set($id, $service) { + public function set($id, $service, $scope = self::SCOPE_CONTAINER) { if (strtolower($id) !== $id) { throw new \InvalidArgumentException("Service ID names must be lowercase: $id"); } - SymfonyContainer::set($id, $service); + SymfonyContainer::set($id, $service, $scope); // Ensure that the _serviceId property is set on synthetic services as well. if (isset($this->services[$id]) && is_object($this->services[$id]) && !isset($this->services[$id]->_serviceId)) { diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php index 7926623477d680f887cbf240c13246230724a6af..274a3fa71e6353564f17972127b957e1f8313879 100644 --- a/core/lib/Drupal/Core/DrupalKernel.php +++ b/core/lib/Drupal/Core/DrupalKernel.php @@ -151,13 +151,6 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface { */ protected $classLoader; - /** - * The class loader class before including settings.php. - * - * @var string - */ - protected $preSettingsClassLoaderClass; - /** * Config storage object used for reading enabled modules configuration. * @@ -897,34 +890,6 @@ protected function initializeContainer() { $container = new $class($container_definition); } - // If the class loader is still the same as before including settings.php - // use an optimised classloader if possible. - if ($this->preSettingsClassLoaderClass == get_class($this->classLoader) - && Settings::get('class_loader_auto_detect', TRUE)) { - $prefix = Settings::getApcuPrefix('class_loader', $this->root); - // We have to key by module list since if this changes the classloader - // might have negative caches for classes that now exist. - $prefix .= '.' . hash('sha1', serialize(array_keys($container->getParameter('container.modules')))); - $loader = NULL; - - // We autodetect one of the following three optimized classloaders, if - // their underlying extension exists. - if (function_exists('apcu_fetch')) { - $loader = new ApcClassLoader($prefix, $this->classLoader); - } - elseif (extension_loaded('wincache')) { - $loader = new WinCacheClassLoader($prefix, $this->classLoader); - } - elseif (extension_loaded('xcache')) { - $loader = new XcacheClassLoader($prefix, $this->classLoader); - } - if (!empty($loader)) { - $this->classLoader->unregister(); - $loader->register(); - $this->classLoader = $loader; - } - } - $this->attachSynthetic($container); $this->container = $container; @@ -1053,7 +1018,7 @@ public static function bootEnvironment($app_root = NULL) { protected function initializeSettings(Request $request) { $site_path = static::findSitePath($request); $this->setSitePath($site_path); - $this->preSettingsClassLoaderClass = get_class($this->classLoader); + $class_loader_class = get_class($this->classLoader); Settings::initialize($this->root, $site_path, $this->classLoader); // Initialize our list of trusted HTTP Host headers to protect against @@ -1064,6 +1029,31 @@ protected function initializeSettings(Request $request) { throw new BadRequestHttpException('The provided host name is not valid for this server.'); } } + + // If the class loader is still the same, possibly + // upgrade to an optimized class loader. + if ($class_loader_class == get_class($this->classLoader) + && Settings::get('class_loader_auto_detect', TRUE)) { + $prefix = Settings::getApcuPrefix('class_loader', $this->root); + $loader = NULL; + + // We autodetect one of the following three optimized classloaders, if + // their underlying extension exists. + if (function_exists('apcu_fetch')) { + $loader = new ApcClassLoader($prefix, $this->classLoader); + } + elseif (extension_loaded('wincache')) { + $loader = new WinCacheClassLoader($prefix, $this->classLoader); + } + elseif (extension_loaded('xcache')) { + $loader = new XcacheClassLoader($prefix, $this->classLoader); + } + if (!empty($loader)) { + $this->classLoader->unregister(); + $loader->register(); + $this->classLoader = $loader; + } + } } /** diff --git a/core/lib/Drupal/Core/PageCache/RequestPolicy/CommandLineOrUnsafeMethod.php b/core/lib/Drupal/Core/PageCache/RequestPolicy/CommandLineOrUnsafeMethod.php index 27a1f7120d75b144e1ed68e0a1537a72a2e084f8..bbf85a33e9976be9278663eb17f970b39947ca9d 100644 --- a/core/lib/Drupal/Core/PageCache/RequestPolicy/CommandLineOrUnsafeMethod.php +++ b/core/lib/Drupal/Core/PageCache/RequestPolicy/CommandLineOrUnsafeMethod.php @@ -18,7 +18,7 @@ class CommandLineOrUnsafeMethod implements RequestPolicyInterface { * {@inheritdoc} */ public function check(Request $request) { - if ($this->isCli() || !$request->isMethodCacheable()) { + if ($this->isCli() || !$request->isMethodSafe()) { return static::DENY; } } diff --git a/core/lib/Drupal/Core/Render/PlaceholderingRenderCache.php b/core/lib/Drupal/Core/Render/PlaceholderingRenderCache.php index 0422ecf5eb52a127c342e6eba11f49a3ddcbf92b..42562834b838a5b25a586cef029b94b63f60cf01 100644 --- a/core/lib/Drupal/Core/Render/PlaceholderingRenderCache.php +++ b/core/lib/Drupal/Core/Render/PlaceholderingRenderCache.php @@ -93,7 +93,7 @@ public function __construct(RequestStack $request_stack, CacheFactoryInterface $ */ public function get(array $elements) { // @todo remove this check when https://www.drupal.org/node/2367555 lands. - if (!$this->requestStack->getCurrentRequest()->isMethodCacheable()) { + if (!$this->requestStack->getCurrentRequest()->isMethodSafe()) { return FALSE; } @@ -127,7 +127,7 @@ public function set(array &$elements, array $pre_bubbling_elements) { $result = parent::set($elements, $pre_bubbling_elements); // @todo remove this check when https://www.drupal.org/node/2367555 lands. - if (!$this->requestStack->getCurrentRequest()->isMethodCacheable()) { + if (!$this->requestStack->getCurrentRequest()->isMethodSafe()) { return FALSE; } diff --git a/core/lib/Drupal/Core/Render/RenderCache.php b/core/lib/Drupal/Core/Render/RenderCache.php index 9ac338124cdf2d9c70c5dc1cdbfc7532125fdef2..12d52e936bf842e4dda2085228f60251553c421b 100644 --- a/core/lib/Drupal/Core/Render/RenderCache.php +++ b/core/lib/Drupal/Core/Render/RenderCache.php @@ -61,9 +61,9 @@ public function __construct(RequestStack $request_stack, CacheFactoryInterface $ public function get(array $elements) { // Form submissions rely on the form being built during the POST request, // and render caching of forms prevents this from happening. - // @todo remove the isMethodCacheable() check when + // @todo remove the isMethodSafe() check when // https://www.drupal.org/node/2367555 lands. - if (!$this->requestStack->getCurrentRequest()->isMethodCacheable() || !$cid = $this->createCacheID($elements)) { + if (!$this->requestStack->getCurrentRequest()->isMethodSafe() || !$cid = $this->createCacheID($elements)) { return FALSE; } $bin = isset($elements['#cache']['bin']) ? $elements['#cache']['bin'] : 'render'; @@ -88,9 +88,9 @@ public function get(array $elements) { public function set(array &$elements, array $pre_bubbling_elements) { // Form submissions rely on the form being built during the POST request, // and render caching of forms prevents this from happening. - // @todo remove the isMethodCacheable() check when + // @todo remove the isMethodSafe() check when // https://www.drupal.org/node/2367555 lands. - if (!$this->requestStack->getCurrentRequest()->isMethodCacheable() || !$cid = $this->createCacheID($elements)) { + if (!$this->requestStack->getCurrentRequest()->isMethodSafe() || !$cid = $this->createCacheID($elements)) { return FALSE; } diff --git a/core/lib/Drupal/Core/Render/Renderer.php b/core/lib/Drupal/Core/Render/Renderer.php index 37767dc3b1923ffdaaa67771ca5994b43d7a1b90..4bbffc3e70b4c9a79d5bcc452562e7d4a9af7653 100644 --- a/core/lib/Drupal/Core/Render/Renderer.php +++ b/core/lib/Drupal/Core/Render/Renderer.php @@ -338,9 +338,9 @@ protected function doRender(&$elements, $is_root_call = FALSE) { // If instructed to create a placeholder, and a #lazy_builder callback is // present (without such a callback, it would be impossible to replace the // placeholder), replace the current element with a placeholder. - // @todo remove the isMethodCacheable() check when + // @todo remove the isMethodSafe() check when // https://www.drupal.org/node/2367555 lands. - if (isset($elements['#create_placeholder']) && $elements['#create_placeholder'] === TRUE && $this->requestStack->getCurrentRequest()->isMethodCacheable()) { + if (isset($elements['#create_placeholder']) && $elements['#create_placeholder'] === TRUE && $this->requestStack->getCurrentRequest()->isMethodSafe()) { if (!isset($elements['#lazy_builder'])) { throw new \LogicException('When #create_placeholder is set, a #lazy_builder callback must be present as well.'); } diff --git a/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php b/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php index 100718e45be515f69e3a862802380a2f4a2ebb79..a20fa527a5beda42b1eda3a7c51493385fcf4bbe 100644 --- a/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php +++ b/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php @@ -21,7 +21,7 @@ class ExecutionContext implements ExecutionContextInterface { /** - * @var \Symfony\Component\Validator\Validator\ValidatorInterface + * @var \Symfony\Component\Validator\ValidatorInterface */ protected $validator; diff --git a/core/modules/big_pipe/src/Render/Placeholder/BigPipeStrategy.php b/core/modules/big_pipe/src/Render/Placeholder/BigPipeStrategy.php index 16904248cd7b9c5eb0c72435a020c7d608417538..91ad604b49a4f2515fef1d83493bf96f7e939387 100644 --- a/core/modules/big_pipe/src/Render/Placeholder/BigPipeStrategy.php +++ b/core/modules/big_pipe/src/Render/Placeholder/BigPipeStrategy.php @@ -108,7 +108,7 @@ public function processPlaceholders(array $placeholders) { $request = $this->requestStack->getCurrentRequest(); // @todo remove this check when https://www.drupal.org/node/2367555 lands. - if (!$request->isMethodCacheable()) { + if (!$request->isMethodSafe()) { return []; } diff --git a/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php b/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php index 9de09424b8005febe5aae3f44de04ad6007f5206..f0f40ba29d771e91082bbca127bf9e89e3c40b3c 100644 --- a/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php +++ b/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php @@ -47,7 +47,7 @@ public function testProcessPlaceholders(array $placeholders, $method, $route_mat $big_pipe_strategy = new BigPipeStrategy($session_configuration->reveal(), $request_stack->reveal(), $route_match->reveal()); $processed_placeholders = $big_pipe_strategy->processPlaceholders($placeholders); - if ($request->isMethodCacheable() && !$route_match_has_no_big_pipe_option && $request_has_session) { + if ($request->isMethodSafe() && !$route_match_has_no_big_pipe_option && $request_has_session) { $this->assertSameSize($expected_big_pipe_placeholders, $processed_placeholders, 'BigPipe is able to deliver all placeholders.'); foreach (array_keys($placeholders) as $placeholder) { $this->assertSame($expected_big_pipe_placeholders[$placeholder], $processed_placeholders[$placeholder], "Verifying how BigPipeStrategy handles the placeholder '$placeholder'"); diff --git a/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php b/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php index 5db7b2a0f7ecb284c438033f2e8ab61e030170d5..7eefdc7a2b3f76e9202e2643345a8ad5ccf2f4e9 100644 --- a/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php +++ b/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php @@ -76,7 +76,7 @@ public function testBlock() { // Render the block. // @todo The request stack manipulation won't be necessary once // https://www.drupal.org/node/2367555 is fixed and the - // corresponding $request->isMethodCacheable() checks are removed from + // corresponding $request->isMethodSafe() checks are removed from // Drupal\Core\Render\Renderer. $request_stack = $this->container->get('request_stack'); $request_stack->push(new Request()); diff --git a/core/modules/file/config/optional/views.view.files.yml b/core/modules/file/config/optional/views.view.files.yml index 053b72df45272d6654ff189bdc13f20c101953bc..e5edee2e4032da241f7b8cf8a0dfa32f89ff1fb8 100644 --- a/core/modules/file/config/optional/views.view.files.yml +++ b/core/modules/file/config/optional/views.view.files.yml @@ -565,7 +565,7 @@ display: decimal: . separator: ',' format_plural: true - format_plural_string: !!binary MSBwbGFjZQNAY291bnQgcGxhY2Vz + format_plural_string: "1 place\x03@count places" prefix: '' suffix: '' plugin_id: numeric @@ -1007,7 +1007,7 @@ display: decimal: . separator: ',' format_plural: false - format_plural_string: !!binary MQNAY291bnQ= + format_plural_string: "1\x03@count" prefix: '' suffix: '' plugin_id: numeric diff --git a/core/modules/node/node.module b/core/modules/node/node.module index 5c673172cecc3c329171f44b3d825340036edf27..5c86a137aeae1a3233c2ac27970651f9cb006cb7 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -1080,7 +1080,7 @@ function node_query_node_access_alter(AlterableInterface $query) { // context. $request = \Drupal::requestStack()->getCurrentRequest(); $renderer = \Drupal::service('renderer'); - if ($request->isMethodCacheable() && $renderer->hasRenderContext()) { + if ($request->isMethodSafe() && $renderer->hasRenderContext()) { $build = ['#cache' => ['contexts' => ['user.node_grants:' . $op]]]; $renderer->render($build); } diff --git a/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php b/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php index 86935ea1ccbcad43fec6d56d6f9c0c28acfd2bd7..5cb887bec044272581f6fc58e0c7acc73d5f650d 100644 --- a/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php +++ b/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php @@ -96,7 +96,7 @@ public function getResponseFormat(RouteMatchInterface $route_match, Request $req $route = $route_match->getRouteObject(); $acceptable_request_formats = $route->hasRequirement('_format') ? explode('|', $route->getRequirement('_format')) : []; $acceptable_content_type_formats = $route->hasRequirement('_content_type_format') ? explode('|', $route->getRequirement('_content_type_format')) : []; - $acceptable_formats = $request->isMethodCacheable() ? $acceptable_request_formats : $acceptable_content_type_formats; + $acceptable_formats = $request->isMethodSafe() ? $acceptable_request_formats : $acceptable_content_type_formats; $requested_format = $request->getRequestFormat(); $content_type_format = $request->getContentType(); diff --git a/core/modules/rest/tests/src/Unit/CollectRoutesTest.php b/core/modules/rest/tests/src/Unit/CollectRoutesTest.php index 5c4de33a5ec20a13d91fb8c1521246800f5d5975..c55ea3bbf3475baa1cd266a5594b7c40fb8fff3a 100644 --- a/core/modules/rest/tests/src/Unit/CollectRoutesTest.php +++ b/core/modules/rest/tests/src/Unit/CollectRoutesTest.php @@ -141,8 +141,8 @@ public function testRoutesRequirements() { $requirements_1 = $this->routes->get('test_1')->getRequirements(); $requirements_2 = $this->routes->get('view.test_view.page_1')->getRequirements(); - $this->assertEquals(0, count($requirements_1), 'First route has no requirement.'); - $this->assertEquals(1, count($requirements_2), 'Views route with rest export had the format requirement added.'); + $this->assertEquals(count($requirements_1), 0, 'First route has no requirement.'); + $this->assertEquals(count($requirements_2), 2, 'Views route with rest export had the format and method requirements added.'); // Check auth options. $auth = $this->routes->get('view.test_view.page_1')->getOption('_auth'); diff --git a/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php b/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php index b10fbfef92af4d3f1abd9fdd33117f35e66c3743..87c9059883df855cdaaf9ff22729bcc238a47272 100644 --- a/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php +++ b/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php @@ -79,6 +79,11 @@ public function providerTestSerialization() { * @dataProvider providerTestResponseFormat */ public function testResponseFormat($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { + $parameters = []; + if ($request_format !== FALSE) { + $parameters['_format'] = $request_format; + } + foreach ($request_headers as $key => $value) { unset($request_headers[$key]); $key = strtoupper(str_replace('-', '_', $key)); @@ -86,13 +91,8 @@ public function testResponseFormat($methods, array $supported_formats, $request_ } foreach ($methods as $method) { - $request = Request::create('/rest/test', $method, [], [], [], $request_headers, $request_body); - // \Drupal\Core\StackMiddleware\NegotiationMiddleware normally takes care - // of this so we'll hard code it here. - if ($request_format) { - $request->setRequestFormat($request_format); - } - $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format'; + $request = Request::create('/rest/test', $method, $parameters, [], [], $request_headers, $request_body); + $route_requirement_key_format = $request->isMethodSafe() ? '_format' : '_content_type_format'; $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], [$route_requirement_key_format => implode('|', $supported_formats)])); $resource_response_subscriber = new ResourceResponseSubscriber( @@ -116,6 +116,11 @@ public function testResponseFormat($methods, array $supported_formats, $request_ public function testOnResponseWithCacheableResponse($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { $rest_config_name = $this->randomMachineName(); + $parameters = []; + if ($request_format !== FALSE) { + $parameters['_format'] = $request_format; + } + foreach ($request_headers as $key => $value) { unset($request_headers[$key]); $key = strtoupper(str_replace('-', '_', $key)); @@ -123,13 +128,8 @@ public function testOnResponseWithCacheableResponse($methods, array $supported_f } foreach ($methods as $method) { - $request = Request::create('/rest/test', $method, [], [], [], $request_headers, $request_body); - // \Drupal\Core\StackMiddleware\NegotiationMiddleware normally takes care - // of this so we'll hard code it here. - if ($request_format) { - $request->setRequestFormat($request_format); - } - $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format'; + $request = Request::create('/rest/test', $method, $parameters, [], [], $request_headers, $request_body); + $route_requirement_key_format = $request->isMethodSafe() ? '_format' : '_content_type_format'; $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $rest_config_name], [$route_requirement_key_format => implode('|', $supported_formats)])); // The RequestHandler must return a ResourceResponseInterface object. @@ -166,6 +166,11 @@ public function testOnResponseWithCacheableResponse($methods, array $supported_f public function testOnResponseWithUncacheableResponse($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { $rest_config_name = $this->randomMachineName(); + $parameters = []; + if ($request_format !== FALSE) { + $parameters['_format'] = $request_format; + } + foreach ($request_headers as $key => $value) { unset($request_headers[$key]); $key = strtoupper(str_replace('-', '_', $key)); @@ -173,13 +178,8 @@ public function testOnResponseWithUncacheableResponse($methods, array $supported } foreach ($methods as $method) { - $request = Request::create('/rest/test', $method, [], [], [], $request_headers, $request_body); - // \Drupal\Core\StackMiddleware\NegotiationMiddleware normally takes care - // of this so we'll hard code it here. - if ($request_format) { - $request->setRequestFormat($request_format); - } - $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format'; + $request = Request::create('/rest/test', $method, $parameters, [], [], $request_headers, $request_body); + $route_requirement_key_format = $request->isMethodSafe() ? '_format' : '_content_type_format'; $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $rest_config_name], [$route_requirement_key_format => implode('|', $supported_formats)])); // The RequestHandler must return a ResourceResponseInterface object. diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestStorageForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestStorageForm.php index fb28c65baae96ff859910723823d272870d8ed09..948c592ceee3bd72622ac94924e5f862765207b2 100644 --- a/core/modules/system/tests/modules/form_test/src/Form/FormTestStorageForm.php +++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestStorageForm.php @@ -86,7 +86,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { // that issue. if ($this->getRequest()->get('immutable')) { $form_state->addBuildInfo('immutable', TRUE); - if ($this->getRequest()->get('cache') && $this->getRequest()->isMethodCacheable()) { + if ($this->getRequest()->get('cache') && $this->getRequest()->isMethodSafe()) { $form_state->setRequestMethod('FAKE'); $form_state->setCached(); } diff --git a/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php b/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php index bc8d1d09a830f9413a2db865fc4443cf571186f1..d5f9110a7f7b48631a522ebfcc895b3c10ca36f2 100644 --- a/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php +++ b/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php @@ -17,8 +17,7 @@ class ThemeTestSubscriber implements EventSubscriberInterface { /** * The used container. * - * @todo This variable is never initialzed, so we don't know what it is. - * See https://www.drupal.org/node/2721315 + * @var \Symfony\Component\DependencyInjection\IntrospectableContainerInterface */ protected $container; diff --git a/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php b/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php index eb7eb1ba731ce18edff15d77e5c049456cba5259..3c89804d97f3afb749cea169a5978aa146f2f208 100644 --- a/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php +++ b/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php @@ -662,6 +662,47 @@ public function testInitializedForAliases() { $this->assertTrue($this->container->initialized('late.service_alias'), 'Late service is initialized after it was retrieved once.'); } + /** + * Tests that unsupported methods throw an Exception. + * + * @covers ::enterScope + * @covers ::leaveScope + * @covers ::addScope + * @covers ::hasScope + * @covers ::isScopeActive + * + * @expectedException \BadMethodCallException + * + * @dataProvider scopeExceptionTestProvider + */ + public function testScopeFunctionsWithException($method, $argument) { + $callable = array( + $this->container, + $method, + ); + + $callable($argument); + } + + /** + * Data provider for scopeExceptionTestProvider(). + * + * @return array[] + * Returns per data set an array with: + * - method name to call + * - argument to pass + */ + public function scopeExceptionTestProvider() { + $scope = $this->prophesize('\Symfony\Component\DependencyInjection\ScopeInterface')->reveal(); + return array( + array('enterScope', 'test_scope'), + array('leaveScope', 'test_scope'), + array('hasScope', 'test_scope'), + array('isScopeActive', 'test_scope'), + array('addScope', $scope), + ); + } + /** * Tests that Container::getServiceIds() works properly. * diff --git a/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php b/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php index cc4c63057441b95adb76cd2c5f5d51ec0e1950d2..49b65565d6f55146987d8ffe277b0ccf2944a1d0 100644 --- a/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php +++ b/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php @@ -245,6 +245,7 @@ public function getDefinitionsDataProvider() { 'arguments_count' => 0, 'properties' => array(), 'calls' => array(), + 'scope' => ContainerInterface::SCOPE_CONTAINER, 'shared' => TRUE, 'factory' => FALSE, 'configurator' => FALSE, @@ -356,6 +357,11 @@ public function getDefinitionsDataProvider() { 'calls' => $calls, ) + $base_service_definition; + $service_definitions[] = array( + 'scope' => ContainerInterface::SCOPE_PROTOTYPE, + 'shared' => FALSE, + ) + $base_service_definition; + $service_definitions[] = array( 'shared' => FALSE, ) + $base_service_definition; @@ -398,6 +404,7 @@ public function getDefinitionsDataProvider() { $definition->getArguments()->willReturn($service_definition['arguments']); $definition->getProperties()->willReturn($service_definition['properties']); $definition->getMethodCalls()->willReturn($service_definition['calls']); + $definition->getScope()->willReturn($service_definition['scope']); $definition->isShared()->willReturn($service_definition['shared']); $definition->getDecoratedService()->willReturn(NULL); $definition->getFactory()->willReturn($service_definition['factory']); @@ -430,6 +437,9 @@ public function getDefinitionsDataProvider() { } } + // Remove any remaining scope. + unset($filtered_service_definition['scope']); + if (isset($filtered_service_definition['public']) && $filtered_service_definition['public'] === FALSE) { $services_provided[] = array( array('foo_service' => $definition->reveal()), @@ -467,6 +477,22 @@ protected function getServiceCall($id, $invalid_behavior = ContainerInterface::E ); } + /** + * Tests that the correct InvalidArgumentException is thrown for getScope(). + * + * @covers ::getServiceDefinition + * + * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException + */ + public function testGetServiceDefinitionWithInvalidScope() { + $bar_definition = new Definition('\stdClass'); + $bar_definition->setScope('foo_scope'); + $services['bar'] = $bar_definition; + + $this->containerBuilder->getDefinitions()->willReturn($services); + $this->dumper->getArray(); + } + /** * Tests that references to aliases work correctly. * diff --git a/core/tests/Drupal/Tests/Component/EventDispatcher/ContainerAwareEventDispatcherTest.php b/core/tests/Drupal/Tests/Component/EventDispatcher/ContainerAwareEventDispatcherTest.php index ea0685a7171edb904a75d8e901751cbbfced812a..7bc2382b1fc501315b615fa033fdac18cb36b3cc 100644 --- a/core/tests/Drupal/Tests/Component/EventDispatcher/ContainerAwareEventDispatcherTest.php +++ b/core/tests/Drupal/Tests/Component/EventDispatcher/ContainerAwareEventDispatcherTest.php @@ -6,10 +6,9 @@ use Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher; use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\EventDispatcher\Tests\CallableClass; -use Symfony\Component\EventDispatcher\Tests\ContainerAwareEventDispatcherTest as SymfonyContainerAwareEventDispatcherTest; use Symfony\Component\EventDispatcher\Tests\TestEventListener; +use Symfony\Component\EventDispatcher\Tests\ContainerAwareEventDispatcherTest as SymfonyContainerAwareEventDispatcherTest; /** * Unit tests for the ContainerAwareEventDispatcher. @@ -38,7 +37,7 @@ public function testGetListenersWithCallables() // When passing in callables exclusively as listeners into the event // dispatcher constructor, the event dispatcher must not attempt to // resolve any services. - $container = $this->getMock(ContainerInterface::class); + $container = $this->getMock('Symfony\Component\DependencyInjection\IntrospectableContainerInterface'); $container->expects($this->never())->method($this->anything()); $firstListener = new CallableClass(); @@ -73,7 +72,7 @@ public function testDispatchWithCallables() // When passing in callables exclusively as listeners into the event // dispatcher constructor, the event dispatcher must not attempt to // resolve any services. - $container = $this->getMock(ContainerInterface::class); + $container = $this->getMock('Symfony\Component\DependencyInjection\IntrospectableContainerInterface'); $container->expects($this->never())->method($this->anything()); $firstListener = new CallableClass(); diff --git a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php index 24e23ddf07079c336ff7750f6c2fce0941f3d5a7..cb7353376c554ae728f0140e840ce409845c9b88 100644 --- a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php @@ -10,7 +10,6 @@ use Drupal\Core\TypedData\TypedDataManagerInterface; use Drupal\Tests\UnitTestCase; use Drupal\Core\Language\Language; -use Symfony\Component\Validator\Validator\ValidatorInterface; /** * @coversDefaultClass \Drupal\Core\Entity\ContentEntityBase @@ -322,7 +321,7 @@ public function testPreSaveRevision() { * @covers ::validate */ public function testValidate() { - $validator = $this->getMock(ValidatorInterface::class); + $validator = $this->getMock('\Symfony\Component\Validator\ValidatorInterface'); /** @var \Symfony\Component\Validator\ConstraintViolationList|\PHPUnit_Framework_MockObject_MockObject $empty_violation_list */ $empty_violation_list = $this->getMockBuilder('\Symfony\Component\Validator\ConstraintViolationList') ->setMethods(NULL) @@ -358,7 +357,7 @@ public function testValidate() { * @expectedExceptionMessage Entity validation was skipped. */ public function testRequiredValidation() { - $validator = $this->getMock(ValidatorInterface::class); + $validator = $this->getMock('\Symfony\Component\Validator\ValidatorInterface'); /** @var \Symfony\Component\Validator\ConstraintViolationList|\PHPUnit_Framework_MockObject_MockObject $empty_violation_list */ $empty_violation_list = $this->getMockBuilder('\Symfony\Component\Validator\ConstraintViolationList') ->setMethods(NULL) diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/DefaultExceptionSubscriberTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/DefaultExceptionSubscriberTest.php index 61f0cd139b6c59a6ad4d802b0d88ffafbfb2d9e6..541d13636b63725f9db7ba221d0b2285768548f3 100644 --- a/core/tests/Drupal/Tests/Core/EventSubscriber/DefaultExceptionSubscriberTest.php +++ b/core/tests/Drupal/Tests/Core/EventSubscriber/DefaultExceptionSubscriberTest.php @@ -25,10 +25,7 @@ public function testOnExceptionWithUnknownFormat() { // Format 'bananas' requested, yet only 'json' allowed. $kernel = $this->prophesize(HttpKernelInterface::class); - $request = Request::create('/test'); - // \Drupal\Core\StackMiddleware\NegotiationMiddleware normally takes care - // of this so we'll hard code it here. - $request->setRequestFormat('bananas'); + $request = Request::create('/test?_format=bananas'); $e = new MethodNotAllowedHttpException(['json'], 'test message'); $event = new GetResponseForExceptionEvent($kernel->reveal(), $request, 'GET', $e); $subscriber = new DefaultExceptionSubscriber($config_factory);