diff --git a/web/.gitattributes b/web/.gitattributes index fca87f351..1c6f27454 100644 --- a/web/.gitattributes +++ b/web/.gitattributes @@ -35,6 +35,7 @@ *.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php *.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php *.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff --git a/web/composer.lock b/web/composer.lock index fcc11480e..58313a161 100644 --- a/web/composer.lock +++ b/web/composer.lock @@ -880,16 +880,16 @@ }, { "name": "drupal/core", - "version": "8.3.1", + "version": "8.3.4", "source": { "type": "git", - "url": "https://github.com/drupal-composer/drupal-core.git", - "reference": "53326f9503e5e9e406fab22e4fbae6ddb706f7be" + "url": "https://github.com/drupal/core.git", + "reference": "f34eee7255142ab5416107972ef13d011f11e163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal-composer/drupal-core/zipball/53326f9503e5e9e406fab22e4fbae6ddb706f7be", - "reference": "53326f9503e5e9e406fab22e4fbae6ddb706f7be", + "url": "https://api.github.com/repos/drupal/core/zipball/f34eee7255142ab5416107972ef13d011f11e163", + "reference": "f34eee7255142ab5416107972ef13d011f11e163", "shasum": "" }, "require": { @@ -923,6 +923,9 @@ "zendframework/zend-diactoros": "~1.1", "zendframework/zend-feed": "~2.4" }, + "conflict": { + "drush/drush": "<8.1.10" + }, "replace": { "drupal/action": "self.version", "drupal/aggregator": "self.version", @@ -1058,7 +1061,7 @@ "GPL-2.0+" ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", - "time": "2017-04-19T16:07:22+00:00" + "time": "2017-06-21T18:13:27+00:00" }, { "name": "easyrdf/easyrdf", @@ -1225,16 +1228,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.2.3", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006" + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/8d6c6cc55186db87b7dc5009827429ba4e9dc006", - "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "shasum": "" }, "require": { @@ -1244,9 +1247,12 @@ }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.0", + "phpunit/phpunit": "^4.0 || ^5.0", "psr/log": "^1.0" }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, "type": "library", "extra": { "branch-alias": { @@ -1283,7 +1289,7 @@ "rest", "web service" ], - "time": "2017-02-28T22:50:30+00:00" + "time": "2017-06-22T18:50:49+00:00" }, { "name": "guzzlehttp/promises", @@ -2716,16 +2722,16 @@ }, { "name": "symfony-cmf/routing", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", - "url": "https://github.com/symfony-cmf/Routing.git", - "reference": "b93704ca098334f56e9b317932f21a4362e620db" + "url": "https://github.com/symfony-cmf/routing.git", + "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/b93704ca098334f56e9b317932f21a4362e620db", - "reference": "b93704ca098334f56e9b317932f21a4362e620db", + "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", + "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", "shasum": "" }, "require": { @@ -2771,7 +2777,7 @@ "database", "routing" ], - "time": "2016-03-31T09:11:39+00:00" + "time": "2017-05-09T08:10:41+00:00" }, { "name": "symfony/browser-kit", @@ -2832,16 +2838,16 @@ }, { "name": "symfony/class-loader", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "2c8de07a8a4cc4da9c018ab7a81888b80e762f93" + "reference": "48b96f2fa9bf394cb428aced8efb28709ab54cfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/2c8de07a8a4cc4da9c018ab7a81888b80e762f93", - "reference": "2c8de07a8a4cc4da9c018ab7a81888b80e762f93", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/48b96f2fa9bf394cb428aced8efb28709ab54cfc", + "reference": "48b96f2fa9bf394cb428aced8efb28709ab54cfc", "shasum": "" }, "require": { @@ -2881,20 +2887,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2017-02-18T19:13:35+00:00" + "time": "2017-06-01T20:52:29+00:00" }, { "name": "symfony/console", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "86407ff20855a5eaa2a7219bd815e9c40a88633e" + "reference": "3ef6ef64abecd566d551d9e7f6393ac6e93b2462" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/86407ff20855a5eaa2a7219bd815e9c40a88633e", - "reference": "86407ff20855a5eaa2a7219bd815e9c40a88633e", + "url": "https://api.github.com/repos/symfony/console/zipball/3ef6ef64abecd566d551d9e7f6393ac6e93b2462", + "reference": "3ef6ef64abecd566d551d9e7f6393ac6e93b2462", "shasum": "" }, "require": { @@ -2942,7 +2948,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-04-03T20:37:06+00:00" + "time": "2017-06-02T14:36:56+00:00" }, { "name": "symfony/css-selector", @@ -2999,16 +3005,16 @@ }, { "name": "symfony/debug", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "e90099a2958d4833a02d05b504cc06e1c234abcc" + "reference": "8470d7701177a88edeb0cec59b44d50ef4477e9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e90099a2958d4833a02d05b504cc06e1c234abcc", - "reference": "e90099a2958d4833a02d05b504cc06e1c234abcc", + "url": "https://api.github.com/repos/symfony/debug/zipball/8470d7701177a88edeb0cec59b44d50ef4477e9b", + "reference": "8470d7701177a88edeb0cec59b44d50ef4477e9b", "shasum": "" }, "require": { @@ -3052,20 +3058,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2017-02-18T19:13:35+00:00" + "time": "2017-06-01T20:52:29+00:00" }, { "name": "symfony/dependency-injection", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "14b9d8ae69ac4c74e8f05fee7e0a57039b99c81e" + "reference": "b4a4b8f6ae1d69a6b2c0c31623bbc474121ee075" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/14b9d8ae69ac4c74e8f05fee7e0a57039b99c81e", - "reference": "14b9d8ae69ac4c74e8f05fee7e0a57039b99c81e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b4a4b8f6ae1d69a6b2c0c31623bbc474121ee075", + "reference": "b4a4b8f6ae1d69a6b2c0c31623bbc474121ee075", "shasum": "" }, "require": { @@ -3115,7 +3121,7 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-04-03T22:14:48+00:00" + "time": "2017-06-02T14:36:56+00:00" }, { "name": "symfony/dom-crawler", @@ -3175,16 +3181,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "88b65f0ac25355090e524aba4ceb066025df8bd2" + "reference": "1377400fd641d7d1935981546aaef780ecd5bf6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/88b65f0ac25355090e524aba4ceb066025df8bd2", - "reference": "88b65f0ac25355090e524aba4ceb066025df8bd2", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1377400fd641d7d1935981546aaef780ecd5bf6d", + "reference": "1377400fd641d7d1935981546aaef780ecd5bf6d", "shasum": "" }, "require": { @@ -3231,20 +3237,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-04-03T20:37:06+00:00" + "time": "2017-06-02T07:47:27+00:00" }, { "name": "symfony/http-foundation", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "0717efd2f2264dbd3d8e1bc69a0418c2fd6295d2" + "reference": "de8d8e83b9ec898e14ef8db84cee5919753b2ae5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/0717efd2f2264dbd3d8e1bc69a0418c2fd6295d2", - "reference": "0717efd2f2264dbd3d8e1bc69a0418c2fd6295d2", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/de8d8e83b9ec898e14ef8db84cee5919753b2ae5", + "reference": "de8d8e83b9ec898e14ef8db84cee5919753b2ae5", "shasum": "" }, "require": { @@ -3286,20 +3292,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2017-04-04T15:24:26+00:00" + "time": "2017-06-01T20:52:29+00:00" }, { "name": "symfony/http-kernel", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3256e9e554f02ba2dd49cff253f15df69c36cf40" + "reference": "03ca9421948142df8b9d3ffaeb3bfe8ddee02ca4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3256e9e554f02ba2dd49cff253f15df69c36cf40", - "reference": "3256e9e554f02ba2dd49cff253f15df69c36cf40", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/03ca9421948142df8b9d3ffaeb3bfe8ddee02ca4", + "reference": "03ca9421948142df8b9d3ffaeb3bfe8ddee02ca4", "shasum": "" }, "require": { @@ -3310,7 +3316,8 @@ "symfony/http-foundation": "~2.7.20|~2.8.13|~3.1.6" }, "conflict": { - "symfony/config": "<2.7" + "symfony/config": "<2.7", + "twig/twig": "<1.34|<2.4,>=2" }, "require-dev": { "symfony/browser-kit": "~2.3|~3.0.0", @@ -3368,20 +3375,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2017-04-05T04:04:34+00:00" + "time": "2017-06-07T20:12:31+00:00" }, { "name": "symfony/polyfill-apcu", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "5d4474f447403c3348e37b70acc2b95475b7befa" + "reference": "2e7965b8cdfbba50d0092d3f6dca97dddec409e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/5d4474f447403c3348e37b70acc2b95475b7befa", - "reference": "5d4474f447403c3348e37b70acc2b95475b7befa", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/2e7965b8cdfbba50d0092d3f6dca97dddec409e2", + "reference": "2e7965b8cdfbba50d0092d3f6dca97dddec409e2", "shasum": "" }, "require": { @@ -3390,7 +3397,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -3421,20 +3428,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2017-06-09T08:25:21+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "cba36f3616d9866b3e52662e88da5c090fac1e97" + "reference": "ae1347fa81423b67dbc232c8c111facb367ff8b9" }, "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/ae1347fa81423b67dbc232c8c111facb367ff8b9", + "reference": "ae1347fa81423b67dbc232c8c111facb367ff8b9", "shasum": "" }, "require": { @@ -3446,7 +3453,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -3480,20 +3487,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2017-06-09T08:25:21+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "f29dca382a6485c3cbe6379f0c61230167681937" }, "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/f29dca382a6485c3cbe6379f0c61230167681937", + "reference": "f29dca382a6485c3cbe6379f0c61230167681937", "shasum": "" }, "require": { @@ -3505,7 +3512,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -3539,20 +3546,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2017-06-09T14:24:12+00:00" }, { "name": "symfony/polyfill-php54", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php54.git", - "reference": "90e085822963fdcc9d1c5b73deb3d2e5783b16a0" + "reference": "7dd1a8b9f0442273fdfeb1c4f5eaff6890a82789" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/90e085822963fdcc9d1c5b73deb3d2e5783b16a0", - "reference": "90e085822963fdcc9d1c5b73deb3d2e5783b16a0", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/7dd1a8b9f0442273fdfeb1c4f5eaff6890a82789", + "reference": "7dd1a8b9f0442273fdfeb1c4f5eaff6890a82789", "shasum": "" }, "require": { @@ -3561,7 +3568,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -3597,20 +3604,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2017-06-09T08:25:21+00:00" }, { "name": "symfony/polyfill-php55", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php55.git", - "reference": "03e3f0350bca2220e3623a0e340eef194405fc67" + "reference": "94566239a7720cde0820f15f0cc348ddb51ba51d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/03e3f0350bca2220e3623a0e340eef194405fc67", - "reference": "03e3f0350bca2220e3623a0e340eef194405fc67", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/94566239a7720cde0820f15f0cc348ddb51ba51d", + "reference": "94566239a7720cde0820f15f0cc348ddb51ba51d", "shasum": "" }, "require": { @@ -3620,7 +3627,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -3653,20 +3660,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2017-06-09T08:25:21+00:00" }, { "name": "symfony/process", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "41336b20b52f5fd5b42a227e394e673c8071118f" + "reference": "d54232f5682fda2f8bbebff7c81b864646867ab9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/41336b20b52f5fd5b42a227e394e673c8071118f", - "reference": "41336b20b52f5fd5b42a227e394e673c8071118f", + "url": "https://api.github.com/repos/symfony/process/zipball/d54232f5682fda2f8bbebff7c81b864646867ab9", + "reference": "d54232f5682fda2f8bbebff7c81b864646867ab9", "shasum": "" }, "require": { @@ -3702,7 +3709,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-03-04T12:20:59+00:00" + "time": "2017-05-08T01:19:21+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -3766,16 +3773,16 @@ }, { "name": "symfony/routing", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "d145cd396f702c497cb24b21785ddac90a23fe71" + "reference": "d428588038f13a0e5771a2a8ccbc9de46bba9a19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/d145cd396f702c497cb24b21785ddac90a23fe71", - "reference": "d145cd396f702c497cb24b21785ddac90a23fe71", + "url": "https://api.github.com/repos/symfony/routing/zipball/d428588038f13a0e5771a2a8ccbc9de46bba9a19", + "reference": "d428588038f13a0e5771a2a8ccbc9de46bba9a19", "shasum": "" }, "require": { @@ -3837,20 +3844,20 @@ "uri", "url" ], - "time": "2017-03-02T15:56:34+00:00" + "time": "2017-06-01T20:52:29+00:00" }, { "name": "symfony/serializer", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d1c3d68daee29bbf0b4600745899a7000c215642" + "reference": "c6ccf71a899711efa21b0a98150b2c0af08f3cb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d1c3d68daee29bbf0b4600745899a7000c215642", - "reference": "d1c3d68daee29bbf0b4600745899a7000c215642", + "url": "https://api.github.com/repos/symfony/serializer/zipball/c6ccf71a899711efa21b0a98150b2c0af08f3cb2", + "reference": "c6ccf71a899711efa21b0a98150b2c0af08f3cb2", "shasum": "" }, "require": { @@ -3901,20 +3908,20 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2017-03-21T22:47:17+00:00" + "time": "2017-06-01T20:52:29+00:00" }, { "name": "symfony/translation", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "047e97a64d609778cadfc76e3a09793696bb19f1" + "reference": "14db4cc1172a722aaa3b558bfa8eff593b43cd46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/047e97a64d609778cadfc76e3a09793696bb19f1", - "reference": "047e97a64d609778cadfc76e3a09793696bb19f1", + "url": "https://api.github.com/repos/symfony/translation/zipball/14db4cc1172a722aaa3b558bfa8eff593b43cd46", + "reference": "14db4cc1172a722aaa3b558bfa8eff593b43cd46", "shasum": "" }, "require": { @@ -3965,20 +3972,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2017-03-21T21:39:01+00:00" + "time": "2017-06-01T20:52:29+00:00" }, { "name": "symfony/validator", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "43f617ee200af4f4dedbb0782c6c689e06994286" + "reference": "9f323f762ad21bfb9df7c1afacbdd8addf0f8c50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/43f617ee200af4f4dedbb0782c6c689e06994286", - "reference": "43f617ee200af4f4dedbb0782c6c689e06994286", + "url": "https://api.github.com/repos/symfony/validator/zipball/9f323f762ad21bfb9df7c1afacbdd8addf0f8c50", + "reference": "9f323f762ad21bfb9df7c1afacbdd8addf0f8c50", "shasum": "" }, "require": { @@ -4038,20 +4045,20 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2017-03-23T16:08:03+00:00" + "time": "2017-06-02T14:36:56+00:00" }, { "name": "symfony/yaml", - "version": "v2.8.19", + "version": "v2.8.22", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "286d84891690b0e2515874717e49360d1c98a703" + "reference": "4c29dec8d489c4e37cf87ccd7166cd0b0e6a45c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/286d84891690b0e2515874717e49360d1c98a703", - "reference": "286d84891690b0e2515874717e49360d1c98a703", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4c29dec8d489c4e37cf87ccd7166cd0b0e6a45c5", + "reference": "4c29dec8d489c4e37cf87ccd7166cd0b0e6a45c5", "shasum": "" }, "require": { @@ -4087,24 +4094,24 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2017-03-20T09:41:44+00:00" + "time": "2017-06-01T20:52:29+00:00" }, { "name": "twig/twig", - "version": "v1.33.0", + "version": "v1.34.3", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "05cf49921b13f6f01d3cfdf9018cfa7a8086fd5a" + "reference": "451c6f4197e113e24c1c85bc3fc8c2d77adeff2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/05cf49921b13f6f01d3cfdf9018cfa7a8086fd5a", - "reference": "05cf49921b13f6f01d3cfdf9018cfa7a8086fd5a", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/451c6f4197e113e24c1c85bc3fc8c2d77adeff2e", + "reference": "451c6f4197e113e24c1c85bc3fc8c2d77adeff2e", "shasum": "" }, "require": { - "php": ">=5.2.7" + "php": ">=5.3.3" }, "require-dev": { "psr/container": "^1.0", @@ -4114,12 +4121,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.33-dev" + "dev-master": "1.34-dev" } }, "autoload": { "psr-0": { "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4149,7 +4159,7 @@ "keywords": [ "templating" ], - "time": "2017-03-22T15:40:09+00:00" + "time": "2017-06-07T18:45:17+00:00" }, { "name": "wikimedia/composer-merge-plugin", diff --git a/web/core/CHANGELOG.txt b/web/core/CHANGELOG.txt index 0436c10b0..eab901996 100644 --- a/web/core/CHANGELOG.txt +++ b/web/core/CHANGELOG.txt @@ -1,3 +1,7 @@ +Drupal 8.3.4, 2017-06-21 +------------------------ +- Fixed security issues. See SA-CORE-2017-003. + Drupal 8.3.1, 2017-04-19 ------------------------ - Fixed security issues. See SA-CORE-2017-002. diff --git a/web/core/MAINTAINERS.txt b/web/core/MAINTAINERS.txt index 6b9e83365..9e9431638 100644 --- a/web/core/MAINTAINERS.txt +++ b/web/core/MAINTAINERS.txt @@ -22,6 +22,8 @@ Drupal 8 (Product Manager) - Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch (Framework Manager, Release Manager) +- Chris McCafferty 'cilefen' https://www.drupal.org/u/cilefen + (Release Manager) - Jess Myrbo 'xjm' https://www.drupal.org/u/xjm (Release Manager) - Alex Pott 'alexpott' https://www.drupal.org/u/alexpott @@ -34,8 +36,6 @@ Provisional membership: (Framework Manager - Frontend) - Gábor Hojtsy 'Gábor Hojtsy' https://www.drupal.org/u/gábor-hojtsy (Product Manager) -- Chris McCafferty 'cilefen' https://www.drupal.org/u/cilefen - (Release Manager) - Roy Scholten 'yoroy' https://www.drupal.org/u/yoroy (Product Manager) @@ -87,7 +87,6 @@ Base system - ? Basic Auth -- Klaus Purer 'klausi' https://www.drupal.org/u/klausi - Juampy Novillo Requena 'juampy' https://www.drupal.org/u/juampy Batch API @@ -255,6 +254,7 @@ Interface Translation (locale) JavaScript - Théodore Biadala 'nod_' https://www.drupal.org/u/nod_ - Kay Leung 'droplet' https://www.drupal.org/u/droplet +- Matthew Grill 'drpal' https://www.drupal.org/u/drpal Language - Francesco Placella 'plach' https://www.drupal.org/u/plach @@ -297,7 +297,7 @@ Menu UI - ? Node -- ? +- Tim Millwood 'timmillwood' https://www.drupal.org/u/timmillwood Node Access - Ken Rickard 'agentrickard' https://www.drupal.org/u/agentrickard @@ -340,7 +340,6 @@ Request Processing - Larry Garfield 'Crell' https://www.drupal.org/u/crell REST -- Klaus Purer 'klausi' https://www.drupal.org/u/klausi - Larry Garfield 'Crell' https://www.drupal.org/u/crell - Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers @@ -376,7 +375,7 @@ Statistics - Tim Millwood 'timmillwood' https://www.drupal.org/u/timmillwood Syslog -- ? +- Mariano D'Agostino 'dagmar' https://www.drupal.org/u/dagmar System (module) - ? @@ -391,7 +390,6 @@ Telephone Testing framework - Alex Pott 'alexpott' https://www.drupal.org/u/alexpott - Sascha Grossenbacher 'Berdir' https://www.drupal.org/u/berdir -- Klaus Purer 'klausi' https://www.drupal.org/u/klausi - Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner Text Field @@ -477,19 +475,28 @@ re-architect or otherwise improve large areas of Drupal core. See https://www.drupal.org/community-initiatives/drupal-core for more information on their responsibilities. The initiative coordinators for Drupal 8 are: -Workflow Initiative -- Dick Olsson 'dixon_' https://www.drupal.org/u/dixon_ - -PHPUnit Initiative -- Klaus Purer 'klausi' https://www.drupal.org/u/klausi -- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner +API-first Initiative +- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers +- Mateu Aguiló Bosch 'e0ipso' https://www.drupal.org/u/e0ipso Layout Initiative - Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett +- Emilie Nouveau 'DyanneNova' https://www.drupal.org/u/dyannenova Media Initiative - Janez Urevc 'slashrsm' https://www.drupal.org/u/slashrsm +PHPUnit Initiative +- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner + + Provisional membership: + - Len Swaneveld 'Lendude' https://www.drupal.org/u/lendude + - Michiel Nugter 'michielnugter' https://www.drupal.org/u/michielnugter + +Workflow Initiative +- Dick Olsson 'dixon_' https://www.drupal.org/u/dixon_ + + Provisional membership: None at this time. diff --git a/web/core/composer.json b/web/core/composer.json index 4cdea59f3..a7a6c6a43 100644 --- a/web/core/composer.json +++ b/web/core/composer.json @@ -34,6 +34,9 @@ "paragonie/random_compat": "^1.0|^2.0", "asm89/stack-cors": "~1.0" }, + "conflict": { + "drush/drush": "<8.1.10" + }, "require-dev": { "behat/mink": "1.7.x-dev", "behat/mink-goutte-driver": "~1.2", @@ -172,8 +175,7 @@ "scripts": { "pre-autoload-dump": "Drupal\\Core\\Composer\\Composer::preAutoloadDump", "post-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::ensureHtaccess", - "Drupal\\Core\\Composer\\Composer::configurePhpcs" + "Drupal\\Core\\Composer\\Composer::ensureHtaccess" ] } } diff --git a/web/core/core.link_relation_types.yml b/web/core/core.link_relation_types.yml index 88fea0e31..fb340274d 100644 --- a/web/core/core.link_relation_types.yml +++ b/web/core/core.link_relation_types.yml @@ -79,6 +79,9 @@ create-form: current: description: "Refers to a resource containing the most recent item(s) in a collection of resources." reference: '[RFC5005]' +customize-form: + description: "The target URI points to a resource where a submission form for customizing associated resource can be obtained." + reference: '[RFC6861]' derivedfrom: description: 'The target IRI points to a resource from which this material was derived.' reference: '[draft-hoffman-xml2rfc]' diff --git a/web/core/core.services.yml b/web/core/core.services.yml index 40c6a8a6b..2527845c7 100644 --- a/web/core/core.services.yml +++ b/web/core/core.services.yml @@ -731,7 +731,7 @@ services: class: Asm89\Stack\Cors arguments: ['%cors.config%'] tags: - - { name: http_middleware } + - { name: http_middleware, priority: 250 } psr7.http_foundation_factory: class: Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory psr7.http_message_factory: diff --git a/web/core/includes/bootstrap.inc b/web/core/includes/bootstrap.inc index 293f25ae9..52f574212 100644 --- a/web/core/includes/bootstrap.inc +++ b/web/core/includes/bootstrap.inc @@ -59,6 +59,8 @@ const ERROR_REPORTING_DISPLAY_VERBOSE = 'verbose'; * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. * Use Drupal\Core\Session\AccountInterface::ANONYMOUS_ROLE or * \Drupal\user\RoleInterface::ANONYMOUS_ID instead. + * + * @see https://www.drupal.org/node/1619504 */ const DRUPAL_ANONYMOUS_RID = AccountInterface::ANONYMOUS_ROLE; @@ -68,6 +70,8 @@ const DRUPAL_ANONYMOUS_RID = AccountInterface::ANONYMOUS_ROLE; * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. * Use Drupal\Core\Session\AccountInterface::AUTHENTICATED_ROLE or * \Drupal\user\RoleInterface::AUTHENTICATED_ID instead. + * + * @see https://www.drupal.org/node/1619504 */ const DRUPAL_AUTHENTICATED_RID = AccountInterface::AUTHENTICATED_ROLE; @@ -88,6 +92,8 @@ const DRUPAL_EXTENSION_NAME_MAX_LENGTH = 50; * * @deprecated in Drupal 8.3.0, will be removed before Drupal 9.0.0. * Use \Drupal::time()->getRequestTime(); + * + * @see https://www.drupal.org/node/2785211 */ define('REQUEST_TIME', (int) $_SERVER['REQUEST_TIME']); @@ -105,6 +111,8 @@ const DRUPAL_PHP_FUNCTION_PATTERN = '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'; * * @deprecated in Drupal 8.0.x and will be removed before 9.0.0. Drupal core no * longer creates an active directory. + * + * @see https://www.drupal.org/node/2501187 */ const CONFIG_ACTIVE_DIRECTORY = 'active'; @@ -123,6 +131,8 @@ const CONFIG_SYNC_DIRECTORY = 'sync'; * * @deprecated in Drupal 8.0.x and will be removed before 9.0.0. The staging * directory was renamed to sync. + * + * @see https://www.drupal.org/node/2574957 */ const CONFIG_STAGING_DIRECTORY = 'staging'; @@ -315,6 +325,8 @@ function t($string, array $args = [], array $options = []) { * * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. * Use \Drupal\Component\Render\FormattableMarkup. + * + * @see https://www.drupal.org/node/2302363 */ function format_string($string, array $args) { return SafeMarkup::format($string, $args); @@ -348,6 +360,8 @@ function format_string($string, array $args) { * * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. * Use \Drupal\Component\Utility\Unicode::validateUtf8(). + * + * @see https://www.drupal.org/node/1992584 */ function drupal_validate_utf8($text) { return Unicode::validateUtf8($text); @@ -742,6 +756,8 @@ function drupal_installation_attempted() { * need to access the value before container is available you can use * BootstrapConfigStorageFactory to load the value directly from * configuration. + * + * @see https://www.drupal.org/node/2538996 */ function drupal_get_profile() { global $install_state; @@ -952,7 +968,7 @@ function drupal_static_reset($name = NULL) { * string and therefore has few valid use-cases. Note also, that this method * does not mark the string as safe. * - * @see \Drupal\Component\Utility\SafeMarkup::format() + * @see https://www.drupal.org/node/2302363 */ function drupal_placeholder($text) { return '' . Html::escape($text) . ''; diff --git a/web/core/includes/file.inc b/web/core/includes/file.inc index c78ee5ba9..3fcb38a4e 100644 --- a/web/core/includes/file.inc +++ b/web/core/includes/file.inc @@ -20,6 +20,8 @@ use Drupal\Core\StreamWrapper\PrivateStream; * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::CHMOD_DIRECTORY. + * + * @see https://www.drupal.org/node/2418133 */ const FILE_CHMOD_DIRECTORY = FileSystem::CHMOD_DIRECTORY; @@ -28,6 +30,8 @@ const FILE_CHMOD_DIRECTORY = FileSystem::CHMOD_DIRECTORY; * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::CHMOD_FILE. + * + * @see https://www.drupal.org/node/2418133 */ const FILE_CHMOD_FILE = FileSystem::CHMOD_FILE; @@ -77,6 +81,8 @@ const FILE_STATUS_PERMANENT = 1; * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::uriScheme(). + * + * @see https://www.drupal.org/node/2418133 */ function file_uri_scheme($uri) { return \Drupal::service('file_system')->uriScheme($uri); @@ -87,6 +93,8 @@ function file_uri_scheme($uri) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::validScheme(). + * + * @see https://www.drupal.org/node/2418133 */ function file_stream_wrapper_valid_scheme($scheme) { return \Drupal::service('file_system')->validScheme($scheme); @@ -386,6 +394,8 @@ function file_save_htaccess($directory, $private = TRUE, $force_overwrite = FALS * * @deprecated in Drupal 8.0.x-dev and will be removed before Drupal 9.0.0. * Use \Drupal\Component\PhpStorage\FileStorage::htaccessLines(). + * + * @see https://www.drupal.org/node/2418133 */ function file_htaccess_lines($private = TRUE) { return FileStorage::htaccessLines($private); @@ -919,6 +929,8 @@ function file_unmanaged_delete_recursive($path, $callback = NULL) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::moveUploadedFile(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_move_uploaded_file($filename, $uri) { return \Drupal::service('file_system')->moveUploadedFile($filename, $uri); @@ -1103,6 +1115,8 @@ function file_upload_max_size() { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::chmod(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_chmod($uri, $mode = NULL) { return \Drupal::service('file_system')->chmod($uri, $mode); @@ -1113,6 +1127,8 @@ function drupal_chmod($uri, $mode = NULL) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::unlink(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_unlink($uri, $context = NULL) { return \Drupal::service('file_system')->unlink($uri, $context); @@ -1123,6 +1139,8 @@ function drupal_unlink($uri, $context = NULL) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::realpath(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_realpath($uri) { return \Drupal::service('file_system')->realpath($uri); @@ -1133,6 +1151,8 @@ function drupal_realpath($uri) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::dirname(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_dirname($uri) { return \Drupal::service('file_system')->dirname($uri); @@ -1143,6 +1163,8 @@ function drupal_dirname($uri) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::basename(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_basename($uri, $suffix = NULL) { return \Drupal::service('file_system')->basename($uri, $suffix); @@ -1154,6 +1176,8 @@ function drupal_basename($uri, $suffix = NULL) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::mkdir(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_mkdir($uri, $mode = NULL, $recursive = FALSE, $context = NULL) { return \Drupal::service('file_system')->mkdir($uri, $mode, $recursive, $context); @@ -1164,6 +1188,8 @@ function drupal_mkdir($uri, $mode = NULL, $recursive = FALSE, $context = NULL) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::rmdir(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_rmdir($uri, $context = NULL) { return \Drupal::service('file_system')->rmdir($uri, $context); @@ -1174,6 +1200,8 @@ function drupal_rmdir($uri, $context = NULL) { * * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Core\File\FileSystem::tempnam(). + * + * @see https://www.drupal.org/node/2418133 */ function drupal_tempnam($directory, $prefix) { return \Drupal::service('file_system')->tempnam($directory, $prefix); @@ -1218,6 +1246,8 @@ function file_directory_temp() { * * @deprecated in Drupal 8.3.x-dev, will be removed before Drupal 9.0.0. * Use \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory(). + * + * @see https://www.drupal.org/node/2418133 */ function file_directory_os_temp() { return ComponentFileSystem::getOsTemporaryDirectory(); diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php index defdbffb5..9371f1e5f 100644 --- a/web/core/lib/Drupal.php +++ b/web/core/lib/Drupal.php @@ -81,7 +81,7 @@ class Drupal { /** * The current system version. */ - const VERSION = '8.3.1'; + const VERSION = '8.3.4'; /** * Core API compatibility. diff --git a/web/core/lib/Drupal/Component/Plugin/Context/ContextDefinitionInterface.php b/web/core/lib/Drupal/Component/Plugin/Context/ContextDefinitionInterface.php index a829cec43..c18a70408 100644 --- a/web/core/lib/Drupal/Component/Plugin/Context/ContextDefinitionInterface.php +++ b/web/core/lib/Drupal/Component/Plugin/Context/ContextDefinitionInterface.php @@ -3,7 +3,9 @@ namespace Drupal\Component\Plugin\Context; /** - * Interface for context definitions. + * Interface used to define definition objects found in ContextInterface. + * + * @see \Drupal\Component\Plugin\Context\ContextInterface * * @todo WARNING: This interface is going to receive some additions as part of * https://www.drupal.org/node/2346999. diff --git a/web/core/lib/Drupal/Component/Plugin/Context/ContextInterface.php b/web/core/lib/Drupal/Component/Plugin/Context/ContextInterface.php index 9b7134f95..605c6587b 100644 --- a/web/core/lib/Drupal/Component/Plugin/Context/ContextInterface.php +++ b/web/core/lib/Drupal/Component/Plugin/Context/ContextInterface.php @@ -3,7 +3,14 @@ namespace Drupal\Component\Plugin\Context; /** - * A generic context interface for wrapping data a plugin needs to operate. + * Provides data and definitions for plugins during runtime and administration. + * + * Plugin contexts are satisfied by ContextInterface implementing objects. + * These objects always contain a definition of what data they will provide + * during runtime. During run time, ContextInterface implementing objects must + * also provide the corresponding data value. + * + * @see \Drupal\Component\Plugin\Context\ContextDefinitionInterface */ interface ContextInterface { diff --git a/web/core/lib/Drupal/Component/Serialization/YamlPecl.php b/web/core/lib/Drupal/Component/Serialization/YamlPecl.php index 2383bf849..3a8bb898e 100644 --- a/web/core/lib/Drupal/Component/Serialization/YamlPecl.php +++ b/web/core/lib/Drupal/Component/Serialization/YamlPecl.php @@ -27,6 +27,12 @@ class YamlPecl implements SerializationInterface { * {@inheritdoc} */ public static function decode($raw) { + static $init; + if (!isset($init)) { + // We never want to unserialize !php/object. + ini_set('yaml.decode_php', 0); + $init = TRUE; + } // yaml_parse() will error with an empty value. if (!trim($raw)) { return NULL; diff --git a/web/core/lib/Drupal/Component/Utility/Html.php b/web/core/lib/Drupal/Component/Utility/Html.php index 75bb62f80..97a14ecaf 100644 --- a/web/core/lib/Drupal/Component/Utility/Html.php +++ b/web/core/lib/Drupal/Component/Utility/Html.php @@ -61,13 +61,15 @@ class Html { * Do not pass one string containing multiple classes as they will be * incorrectly concatenated with dashes, i.e. "one two" will become "one-two". * - * @param string $class - * The class name to clean. + * @param mixed $class + * The class name to clean. It can be a string or anything that can be cast + * to string. * * @return string * The cleaned class name. */ public static function getClass($class) { + $class = (string) $class; if (!isset(static::$classes[$class])) { static::$classes[$class] = static::cleanCssIdentifier(Unicode::strtolower($class)); } diff --git a/web/core/lib/Drupal/Component/Utility/UrlHelper.php b/web/core/lib/Drupal/Component/Utility/UrlHelper.php index 04c217b6a..3127eaba6 100644 --- a/web/core/lib/Drupal/Component/Utility/UrlHelper.php +++ b/web/core/lib/Drupal/Component/Utility/UrlHelper.php @@ -46,7 +46,7 @@ class UrlHelper { $params = []; foreach ($query as $key => $value) { - $key = ($parent ? $parent . '[' . rawurlencode($key) . ']' : rawurlencode($key)); + $key = ($parent ? $parent . rawurlencode('[' . $key . ']') : rawurlencode($key)); // Recurse into children. if (is_array($value)) { @@ -142,7 +142,12 @@ class UrlHelper { // External URLs: not using parse_url() here, so we do not have to rebuild // the scheme, host, and path without having any use for it. - if (strpos($url, '://') !== FALSE) { + // The URL is considered external if it contains the '://' delimiter. Since + // a URL can also be passed as a query argument, we check if this delimiter + // appears in front of the '?' query argument delimiter. + $scheme_delimiter_position = strpos($url, '://'); + $query_delimiter_position = strpos($url, '?'); + if ($scheme_delimiter_position !== FALSE && ($query_delimiter_position === FALSE || $scheme_delimiter_position < $query_delimiter_position)) { // Split off everything before the query string into 'path'. $parts = explode('?', $url); diff --git a/web/core/lib/Drupal/Core/Annotation/ContextDefinition.php b/web/core/lib/Drupal/Core/Annotation/ContextDefinition.php index 0ff61e6f1..043975295 100644 --- a/web/core/lib/Drupal/Core/Annotation/ContextDefinition.php +++ b/web/core/lib/Drupal/Core/Annotation/ContextDefinition.php @@ -18,8 +18,6 @@ use Drupal\Core\StringTranslation\TranslatableMarkup; * "node" = @ContextDefinition("entity:node") * } * @endcode - * Remove spaces after @ in your actual plugin - these are put into this sample - * code so that it is not recognized as an annotation. * * To add a label to a context definition use the "label" key: * @code diff --git a/web/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php b/web/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php index e4da328a9..3169a3567 100644 --- a/web/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php +++ b/web/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php @@ -6,6 +6,8 @@ use Symfony\Component\DependencyInjection\ContainerAwareTrait; /** * Defines the chained fast cache backend factory. + * + * @see \Drupal\Core\Cache\ChainedFastBackend */ class ChainedFastBackendFactory implements CacheFactoryInterface { diff --git a/web/core/lib/Drupal/Core/Composer/Composer.php b/web/core/lib/Drupal/Core/Composer/Composer.php index 1ca6262c9..bdb0127c4 100644 --- a/web/core/lib/Drupal/Core/Composer/Composer.php +++ b/web/core/lib/Drupal/Core/Composer/Composer.php @@ -6,7 +6,6 @@ use Drupal\Component\PhpStorage\FileStorage; use Composer\Script\Event; use Composer\Installer\PackageEvent; use Composer\Semver\Constraint\Constraint; -use PHP_CodeSniffer; /** * Provides static functions for composer script events. @@ -137,28 +136,6 @@ EOT; } } - /** - * Configures phpcs if present. - * - * @param \Composer\Script\Event $event - */ - public static function configurePhpcs(Event $event) { - // Grab the local repo which tells us what's been installed. - $local_repository = $event->getComposer() - ->getRepositoryManager() - ->getLocalRepository(); - // Make sure both phpcs and coder are installed. - $phpcs_package = $local_repository->findPackage('squizlabs/php_codesniffer', '*'); - $coder_package = $local_repository->findPackage('drupal/coder', '*'); - if (!empty($phpcs_package) && !empty($coder_package)) { - $config = $event->getComposer()->getConfig(); - $vendor_dir = $config->get('vendor-dir'); - // Set phpcs' installed_paths config to point to our coder_sniffer - // directory. - PHP_CodeSniffer::setConfigData('installed_paths', $vendor_dir . '/drupal/coder/coder_sniffer'); - } - } - /** * Remove possibly problematic test files from vendored projects. * diff --git a/web/core/lib/Drupal/Core/Config/ConfigInstaller.php b/web/core/lib/Drupal/Core/Config/ConfigInstaller.php index c632aa8bb..b023764eb 100644 --- a/web/core/lib/Drupal/Core/Config/ConfigInstaller.php +++ b/web/core/lib/Drupal/Core/Config/ConfigInstaller.php @@ -466,7 +466,7 @@ class ConfigInstaller implements ConfigInstallerInterface { // Check the dependencies of configuration provided by the module. list($invalid_default_config, $missing_dependencies) = $this->findDefaultConfigWithUnmetDependencies($storage, $enabled_extensions, $profile_storages); if (!empty($invalid_default_config)) { - throw UnmetDependenciesException::create($name, array_unique($missing_dependencies)); + throw UnmetDependenciesException::create($name, array_unique($missing_dependencies, SORT_REGULAR)); } // Install profiles can not have config clashes. Configuration that diff --git a/web/core/lib/Drupal/Core/Controller/ControllerBase.php b/web/core/lib/Drupal/Core/Controller/ControllerBase.php index a46279f2f..c0d0cdd96 100644 --- a/web/core/lib/Drupal/Core/Controller/ControllerBase.php +++ b/web/core/lib/Drupal/Core/Controller/ControllerBase.php @@ -19,8 +19,8 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * difficult to unit test. Therefore this base class should only be used by * controller classes that contain only trivial glue code. Controllers that * contain sufficiently complex logic that it's worth testing should not use - * this base class but use ContainerInjectionInterface instead, or even better be - * refactored to be trivial glue code. + * this base class but use ContainerInjectionInterface instead, or even + * better be refactored to be trivial glue code. * * The services exposed here are those that it is reasonable for a well-behaved * controller to leverage. A controller that needs other services may @@ -70,7 +70,7 @@ abstract class ControllerBase implements ContainerInjectionInterface { /** * The configuration factory. * - * @var \Drupal\Core\Config\Config + * @var \Drupal\Core\Config\ConfigFactoryInterface */ protected $configFactory; diff --git a/web/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php b/web/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php index c9edbdc52..a6f79c682 100644 --- a/web/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php +++ b/web/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php @@ -10,9 +10,9 @@ use Symfony\Component\DependencyInjection\Reference; * Provides a compiler pass for stacked HTTP kernels. * * Builds the HTTP kernel by collecting all services tagged 'http_middleware' - * and assembling them into a StackedKernel. The middleware with the lowest - * priority ends up as the outermost while the highest priority middleware - * wraps the actual HTTP kernel defined by the http_kernel.basic service. + * and assembling them into a StackedKernel. The middleware with the highest + * priority ends up as the outermost while the lowest priority middleware wraps + * the actual HTTP kernel defined by the http_kernel.basic service. * * The 'http_middleware' service tag additionally accepts a 'responder' * parameter. It should be set to TRUE if many or most requests will be handled diff --git a/web/core/lib/Drupal/Core/DrupalKernel.php b/web/core/lib/Drupal/Core/DrupalKernel.php index db773ed28..fc36f6644 100644 --- a/web/core/lib/Drupal/Core/DrupalKernel.php +++ b/web/core/lib/Drupal/Core/DrupalKernel.php @@ -870,6 +870,16 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface { // If there is no container and no cached container definition, build a new // one from scratch. if (!isset($container) && !isset($container_definition)) { + // Building the container creates 1000s of objects. Garbage collection of + // these objects is expensive. This appears to be causing random + // segmentation faults in PHP 5.6 due to + // https://bugs.php.net/bug.php?id=72286. Once the container is rebuilt, + // garbage collection is re-enabled. + $disable_gc = version_compare(PHP_VERSION, '7', '<') && gc_enabled(); + if ($disable_gc) { + gc_collect_cycles(); + gc_disable(); + } $container = $this->compileContainer(); // Only dump the container if dumping is allowed. This is useful for @@ -879,6 +889,11 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface { $dumper = new $this->phpArrayDumperClass($container); $container_definition = $dumper->getArray(); } + // If garbage collection was disabled prior to rebuilding container, + // re-enable it. + if ($disable_gc) { + gc_enable(); + } } // The container was rebuilt successfully. diff --git a/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php index 30f5c7a86..c46126e36 100644 --- a/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php +++ b/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php @@ -830,6 +830,7 @@ abstract class ContentEntityBase extends Entity implements \IteratorAggregate, C $translation->translationInitialize = FALSE; $translation->typedData = NULL; $translation->loadedRevisionId = &$this->loadedRevisionId; + $translation->isDefaultRevision = &$this->isDefaultRevision; return $translation; } @@ -1095,7 +1096,7 @@ abstract class ContentEntityBase extends Entity implements \IteratorAggregate, C // Ensure that the following properties are actually cloned by // overwriting the original references with ones pointing to copies of // them: enforceIsNew, newRevision, loadedRevisionId, fields, entityKeys, - // translatableEntityKeys and values. + // translatableEntityKeys, values and isDefaultRevision. $enforce_is_new = $this->enforceIsNew; $this->enforceIsNew = &$enforce_is_new; @@ -1117,6 +1118,9 @@ abstract class ContentEntityBase extends Entity implements \IteratorAggregate, C $values = $this->values; $this->values = &$values; + $default_revision = $this->isDefaultRevision; + $this->isDefaultRevision = &$default_revision; + foreach ($this->fields as $name => $fields_by_langcode) { $this->fields[$name] = []; // Untranslatable fields may have multiple references for the same field diff --git a/web/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php b/web/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php index 3e10f4a1c..89f99a049 100644 --- a/web/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php +++ b/web/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php @@ -318,8 +318,14 @@ class EntityAutocomplete extends Textfield { * A string of entity labels separated by commas. */ public static function getEntityLabels(array $entities) { + /** @var \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository */ + $entity_repository = \Drupal::service('entity.repository'); + $entity_labels = []; foreach ($entities as $entity) { + // Set the entity in the correct language for display. + $entity = $entity_repository->getTranslationFromContext($entity); + // Use the special view label, since some entities allow the label to be // viewed, even if the entity is not allowed to be viewed. $label = ($entity->access('view label')) ? $entity->label() : t('- Restricted access -'); diff --git a/web/core/lib/Drupal/Core/Entity/EntityInterface.php b/web/core/lib/Drupal/Core/Entity/EntityInterface.php index 8890fb7f3..9cdb435f2 100644 --- a/web/core/lib/Drupal/Core/Entity/EntityInterface.php +++ b/web/core/lib/Drupal/Core/Entity/EntityInterface.php @@ -110,6 +110,7 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf * @deprecated in Drupal 8.0.0, intended to be removed in Drupal 9.0.0 * Use \Drupal\Core\Entity\EntityInterface::toUrl() instead. * + * @see https://www.drupal.org/node/2614344 * @see \Drupal\Core\Entity\EntityInterface::toUrl */ public function urlInfo($rel = 'canonical', array $options = []); @@ -167,6 +168,7 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf * @deprecated in Drupal 8.0.0, intended to be removed in Drupal 9.0.0 * Please use toUrl() instead. * + * @see https://www.drupal.org/node/2614344 * @see \Drupal\Core\Entity\EntityInterface::toUrl */ public function url($rel = 'canonical', $options = []); @@ -189,6 +191,7 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf * @deprecated in Drupal 8.0.0, intended to be removed in Drupal 9.0.0 * Please use toLink() instead. * + * @see https://www.drupal.org/node/2614344 * @see \Drupal\Core\Entity\EntityInterface::toLink */ public function link($text = NULL, $rel = 'canonical', array $options = []); diff --git a/web/core/lib/Drupal/Core/Entity/EntityListBuilderInterface.php b/web/core/lib/Drupal/Core/Entity/EntityListBuilderInterface.php index 924772d7b..bab9d9764 100644 --- a/web/core/lib/Drupal/Core/Entity/EntityListBuilderInterface.php +++ b/web/core/lib/Drupal/Core/Entity/EntityListBuilderInterface.php @@ -22,7 +22,9 @@ interface EntityListBuilderInterface { * sorting the loaded entities. * * @return \Drupal\Core\Entity\EntityInterface[] - * An array of entities implementing \Drupal\Core\Entity\EntityInterface. + * An array of entities implementing \Drupal\Core\Entity\EntityInterface + * indexed by their IDs. Returns an empty array if no matching entities are + * found. */ public function load(); diff --git a/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php index 6df1af08a..a13a4b2d1 100644 --- a/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php +++ b/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php @@ -603,6 +603,13 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt $this->database->delete($this->revisionTable) ->condition($this->revisionKey, $revision->getRevisionId()) ->execute(); + + if ($this->revisionDataTable) { + $this->database->delete($this->revisionDataTable) + ->condition($this->revisionKey, $revision->getRevisionId()) + ->execute(); + } + $this->deleteRevisionFromDedicatedTables($revision); } diff --git a/web/core/lib/Drupal/Core/Field/BaseFieldOverrideAccessControlHandler.php b/web/core/lib/Drupal/Core/Field/BaseFieldOverrideAccessControlHandler.php new file mode 100644 index 000000000..a1e734b46 --- /dev/null +++ b/web/core/lib/Drupal/Core/Field/BaseFieldOverrideAccessControlHandler.php @@ -0,0 +1,23 @@ +orIf(AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields')); + } + +} diff --git a/web/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php b/web/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php index c2d0cb5dd..f20f3a503 100644 --- a/web/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php +++ b/web/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php @@ -16,7 +16,8 @@ use Drupal\Core\Field\FieldException; * id = "base_field_override", * label = @Translation("Base field override"), * handlers = { - * "storage" = "Drupal\Core\Field\BaseFieldOverrideStorage" + * "storage" = "Drupal\Core\Field\BaseFieldOverrideStorage", + * "access" = "Drupal\Core\Field\BaseFieldOverrideAccessControlHandler", * }, * config_prefix = "base_field_override", * entity_keys = { diff --git a/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php b/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php index 12a349afe..aa8f82934 100644 --- a/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php +++ b/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php @@ -104,7 +104,8 @@ abstract class EntityReferenceFormatterBase extends FormatterBase { // tags on which the access results depend, to ensure users that cannot view // this field at the moment will gain access once any of those cache tags // are invalidated. - $field_level_access_cacheability->applyTo($elements); + $field_level_access_cacheability->merge(CacheableMetadata::createFromRenderArray($elements)) + ->applyTo($elements); return $elements; } diff --git a/web/core/lib/Drupal/Core/Field/Plugin/migrate/field/Email.php b/web/core/lib/Drupal/Core/Field/Plugin/migrate/field/Email.php new file mode 100644 index 000000000..3b490f0f1 --- /dev/null +++ b/web/core/lib/Drupal/Core/Field/Plugin/migrate/field/Email.php @@ -0,0 +1,54 @@ + 'email_default', + ]; + } + + /** + * {@inheritdoc} + */ + public function getFieldFormatterMap() { + return [ + 'email_formatter_default' => 'basic_string', + 'email_formatter_contact' => 'basic_string', + 'email_formatter_plain' => 'basic_string', + 'email_formatter_spamspan' => 'basic_string', + ]; + } + + /** + * {@inheritdoc} + */ + public function processFieldValues(MigrationInterface $migration, $field_name, $data) { + $process = [ + 'plugin' => 'iterator', + 'source' => $field_name, + 'process' => [ + 'value' => 'email', + ], + ]; + $migration->setProcessOfProperty($field_name, $process); + } + +} diff --git a/web/core/lib/Drupal/Core/Lock/LockBackendInterface.php b/web/core/lib/Drupal/Core/Lock/LockBackendInterface.php index e2912958f..1e6042d41 100644 --- a/web/core/lib/Drupal/Core/Lock/LockBackendInterface.php +++ b/web/core/lib/Drupal/Core/Lock/LockBackendInterface.php @@ -5,7 +5,7 @@ namespace Drupal\Core\Lock; /** * @defgroup lock Locking mechanisms * @{ - * Functions to coordinate long-running operations across requests. + * Functions to coordinate long operations across requests. * * In most environments, multiple Drupal page requests (a.k.a. threads or * processes) will execute in parallel. This leads to potential conflicts or @@ -15,15 +15,14 @@ namespace Drupal\Core\Lock; * problems with such code, the cron system uses a locking process to ensure * that cron is not started again if it is already running. * - * This is a cooperative, advisory lock system. Any long-running operation - * that could potentially be attempted in parallel by multiple requests should - * try to acquire a lock before proceeding. By obtaining a lock, one request - * notifies any other requests that a specific operation is in progress which - * must not be executed in parallel. + * To avoid these types of conflicts, Drupal has a cooperative, advisory lock + * system. Any long-running operation that could potentially be attempted in + * parallel by multiple requests should try to acquire a lock before + * proceeding. By obtaining a lock, one request notifies any other requests that + * a specific operation is in progress which must not be executed in parallel. * * To use this API, pick a unique name for the lock. A sensible choice is the - * name of the function performing the operation. A very simple example use of - * this API: + * name of the function performing the operation. Here is a simple example: * @code * function mymodule_long_operation() { * $lock = \Drupal::lock(); @@ -53,6 +52,26 @@ namespace Drupal\Core\Lock; * $lock->acquire() and $lock->wait() will automatically break (delete) a lock * whose duration has exceeded the timeout specified when it was acquired. * + * The following limitations in this implementation should be carefully noted: + * - Time: Timestamps are derived from the local system clock of the environment + * the code is executing in. The orderly progression of time from this + * viewpoint can be disrupted by external events such as NTP synchronization + * and operator intervention. Where multiple web servers are involved in + * serving the site, they will have their own independent clocks, introducing + * another source of error in the time keeping process. Timeout values applied + * to locks must therefore be considered approximate, and should not be relied + * upon. + * - Uniqueness: Uniqueness of lock names is not enforced. The impact of the + * use of a common lock name will depend on what processes and resources the + * lock is being used to manage. + * - Sharing: There is limited support for resources shared across sites. + * The locks are stored as rows in the semaphore table and, as such, they + * have the same visibility as the table. If resources managed by a lock are + * shared across sites then the semaphore table must be shared across sites + * as well. This is a binary situation: either all resources are shared and + * the semaphore table is shared or no resources are shared and the semaphore + * table is not shared. Mixed mode operation is not supported. + * * @} End of "defgroup lock". */ diff --git a/web/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php b/web/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php index e9a748d51..9352e4011 100644 --- a/web/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php +++ b/web/core/lib/Drupal/Core/Menu/LocalTaskManagerInterface.php @@ -53,7 +53,7 @@ interface LocalTaskManagerInterface extends PluginManagerInterface { public function getTasksBuild($current_route_name, RefinableCacheableDependencyInterface &$cacheability); /** - * Collects the local tasks (tabs) for the current route. + * Renders the local tasks (tabs) for the given route. * * @param string $route_name * The route for which to make renderable local tasks. diff --git a/web/core/lib/Drupal/Core/Menu/MenuLinkTree.php b/web/core/lib/Drupal/Core/Menu/MenuLinkTree.php index 8dd4c51c9..8a6dce8ff 100644 --- a/web/core/lib/Drupal/Core/Menu/MenuLinkTree.php +++ b/web/core/lib/Drupal/Core/Menu/MenuLinkTree.php @@ -21,6 +21,13 @@ class MenuLinkTree implements MenuLinkTreeInterface { */ protected $treeStorage; + /** + * The menu link plugin manager. + * + * @var \Drupal\Core\Menu\MenuLinkManagerInterface + */ + protected $menuLinkManager; + /** * The route provider to load routes by name. * diff --git a/web/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/web/core/lib/Drupal/Core/Menu/MenuTreeStorage.php index 0b11f8688..c50f7b431 100644 --- a/web/core/lib/Drupal/Core/Menu/MenuTreeStorage.php +++ b/web/core/lib/Drupal/Core/Menu/MenuTreeStorage.php @@ -282,27 +282,44 @@ class MenuTreeStorage implements MenuTreeStorageInterface { * depth. */ protected function doSave(array $link) { - $original = $this->loadFull($link['id']); - // @todo Should we just return here if the link values match the original - // values completely? - // https://www.drupal.org/node/2302137 $affected_menus = []; + // Get the existing definition if it exists. This does not use + // self::loadFull() to avoid the unserialization of fields with 'serialize' + // equal to TRUE as defined in self::schemaDefinition(). The makes $original + // easier to compare with the return value of self::preSave(). + $query = $this->connection->select($this->table, $this->options); + $query->fields($this->table); + $query->condition('id', $link['id']); + $original = $this->safeExecuteSelect($query)->fetchAssoc(); + + if ($original) { + $link['mlid'] = $original['mlid']; + $link['has_children'] = $original['has_children']; + $affected_menus[$original['menu_name']] = $original['menu_name']; + $fields = $this->preSave($link, $original); + // If $link matches the $original data then exit early as there are no + // changes to make. Use array_diff_assoc() to check if they match because: + // - Some of the data types of the values are not the same. The values + // in $original are all strings because they have come from database but + // $fields contains typed values. + // - MenuTreeStorage::preSave() removes the 'mlid' from $fields. + // - The order of the keys in $original and $fields is different. + if (array_diff_assoc($fields, $original) == [] && array_diff_assoc($original, $fields) == ['mlid' => $link['mlid']]) { + return $affected_menus; + } + } + $transaction = $this->connection->startTransaction(); try { - if ($original) { - $link['mlid'] = $original['mlid']; - $link['has_children'] = $original['has_children']; - $affected_menus[$original['menu_name']] = $original['menu_name']; - } - else { + if (!$original) { // Generate a new mlid. $options = ['return' => Database::RETURN_INSERT_ID] + $this->options; $link['mlid'] = $this->connection->insert($this->table, $options) ->fields(['id' => $link['id'], 'menu_name' => $link['menu_name']]) ->execute(); + $fields = $this->preSave($link, []); } - $fields = $this->preSave($link, $original); // We may be moving the link to a new menu. $affected_menus[$fields['menu_name']] = $fields['menu_name']; $query = $this->connection->update($this->table, $this->options); diff --git a/web/core/lib/Drupal/Core/Plugin/Context/ContextDefinitionInterface.php b/web/core/lib/Drupal/Core/Plugin/Context/ContextDefinitionInterface.php index 8cd07208a..c60c6c7fc 100644 --- a/web/core/lib/Drupal/Core/Plugin/Context/ContextDefinitionInterface.php +++ b/web/core/lib/Drupal/Core/Plugin/Context/ContextDefinitionInterface.php @@ -5,7 +5,10 @@ namespace Drupal\Core\Plugin\Context; use Drupal\Component\Plugin\Context\ContextDefinitionInterface as ComponentContextDefinitionInterface; /** - * Interface for context definitions. + * Interface to define definition objects in ContextInterface via TypedData. + * + * @see \Drupal\Component\Plugin\Context\ContextDefinitionInterface + * @see \Drupal\Core\Plugin\Context\ContextInterface */ interface ContextDefinitionInterface extends ComponentContextDefinitionInterface { diff --git a/web/core/lib/Drupal/Core/Plugin/Context/ContextInterface.php b/web/core/lib/Drupal/Core/Plugin/Context/ContextInterface.php index d126886e3..260cb2c33 100644 --- a/web/core/lib/Drupal/Core/Plugin/Context/ContextInterface.php +++ b/web/core/lib/Drupal/Core/Plugin/Context/ContextInterface.php @@ -6,7 +6,10 @@ use Drupal\Component\Plugin\Context\ContextInterface as ComponentContextInterfac use Drupal\Core\Cache\CacheableDependencyInterface; /** - * Interface for context. + * Context data and definitions for plugins supporting caching and return docs. + * + * @see \Drupal\Component\Plugin\Context\ContextInterface + * @see \Drupal\Core\Plugin\Context\ContextDefinitionInterface */ interface ContextInterface extends ComponentContextInterface, CacheableDependencyInterface { diff --git a/web/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php b/web/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php index 5a8a3f334..62260a2e2 100644 --- a/web/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php +++ b/web/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php @@ -361,7 +361,7 @@ class DefaultPluginManager extends PluginManagerBase implements PluginManagerInt * {@inheritdoc} */ public function getCacheMaxAge() { - return CACHE::PERMANENT; + return Cache::PERMANENT; } } diff --git a/web/core/lib/Drupal/Core/Plugin/ObjectWithPluginCollectionInterface.php b/web/core/lib/Drupal/Core/Plugin/ObjectWithPluginCollectionInterface.php index c5aea57fe..3b7ec530d 100644 --- a/web/core/lib/Drupal/Core/Plugin/ObjectWithPluginCollectionInterface.php +++ b/web/core/lib/Drupal/Core/Plugin/ObjectWithPluginCollectionInterface.php @@ -15,7 +15,7 @@ namespace Drupal\Core\Plugin; interface ObjectWithPluginCollectionInterface { /** - * Gets the plugin collections used by this entity. + * Gets the plugin collections used by this object. * * @return \Drupal\Component\Plugin\LazyPluginCollection[] * An array of plugin collections, keyed by the property name they use to diff --git a/web/core/lib/Drupal/Core/Render/Element/StatusMessages.php b/web/core/lib/Drupal/Core/Render/Element/StatusMessages.php index 530457fd9..d16c245a1 100644 --- a/web/core/lib/Drupal/Core/Render/Element/StatusMessages.php +++ b/web/core/lib/Drupal/Core/Render/Element/StatusMessages.php @@ -73,22 +73,17 @@ class StatusMessages extends RenderElement { * @see drupal_get_messages() */ public static function renderMessages($type) { - $render = []; - $messages = drupal_get_messages($type); - if ($messages) { - // Render the messages. - $render = [ - '#theme' => 'status_messages', - // @todo Improve when https://www.drupal.org/node/2278383 lands. - '#message_list' => $messages, - '#status_headings' => [ - 'status' => t('Status message'), - 'error' => t('Error message'), - 'warning' => t('Warning message'), - ], - ]; - } - return $render; + // Render the messages. + return [ + '#theme' => 'status_messages', + // @todo Improve when https://www.drupal.org/node/2278383 lands. + '#message_list' => drupal_get_messages($type), + '#status_headings' => [ + 'status' => t('Status message'), + 'error' => t('Error message'), + 'warning' => t('Warning message'), + ], + ]; } } diff --git a/web/core/lib/Drupal/Core/Render/theme.api.php b/web/core/lib/Drupal/Core/Render/theme.api.php index 44fcdd0ca..6e78d527a 100644 --- a/web/core/lib/Drupal/Core/Render/theme.api.php +++ b/web/core/lib/Drupal/Core/Render/theme.api.php @@ -225,12 +225,7 @@ * For further information on the Theme and Render APIs, see: * - https://www.drupal.org/docs/8/theming * - https://www.drupal.org/developing/api/8/render - * - https://www.drupal.org/node/722174 - * - https://www.drupal.org/node/933976 - * - https://www.drupal.org/node/930760 - * - * @todo Check these links. Some are for Drupal 7, and might need updates for - * Drupal 8. + * - @link themeable Theme system overview @endlink. * * @section arrays Render arrays * The core structure of the Render API is the render array, which is a diff --git a/web/core/lib/Drupal/Core/Test/ObjectSerialization.php b/web/core/lib/Drupal/Core/Test/ObjectSerialization.php new file mode 100644 index 000000000..99d44a55c --- /dev/null +++ b/web/core/lib/Drupal/Core/Test/ObjectSerialization.php @@ -0,0 +1,24 @@ + 0) { - terms.push('"' + ui.item.value + '"'); - } - else { - terms.push(ui.item.value); - } + terms.push(ui.item.value); + event.target.value = terms.join(', '); // Return false to tell jQuery UI that we've filled in the value already. return false; diff --git a/web/core/misc/icons/787878/plus.svg b/web/core/misc/icons/787878/plus.svg index 66556685a..53f7fa536 100644 --- a/web/core/misc/icons/787878/plus.svg +++ b/web/core/misc/icons/787878/plus.svg @@ -1 +1 @@ - + diff --git a/web/core/misc/icons/bebebe/plus.svg b/web/core/misc/icons/bebebe/plus.svg index ed2b6504f..500664891 100644 --- a/web/core/misc/icons/bebebe/plus.svg +++ b/web/core/misc/icons/bebebe/plus.svg @@ -1 +1 @@ - + diff --git a/web/core/misc/tabledrag.js b/web/core/misc/tabledrag.js index 395d09298..75468e60d 100644 --- a/web/core/misc/tabledrag.js +++ b/web/core/misc/tabledrag.js @@ -1162,10 +1162,10 @@ // :even and :odd are reversed because jQuery counts from 0 and // we count from 1, so we're out of sync. // Match immediate children of the parent element to allow nesting. - $(this.table).find('> tbody > tr.draggable:visible, > tr.draggable:visible') - .removeClass('odd even') - .filter(':odd').addClass('even').end() - .filter(':even').addClass('odd'); + $(this.table).find('> tbody > tr.draggable, > tr.draggable') + .filter(':visible') + .filter(':odd').removeClass('odd').addClass('even').end() + .filter(':even').removeClass('even').addClass('odd'); }; /** diff --git a/web/core/modules/aggregator/config/optional/views.view.aggregator_rss_feed.yml b/web/core/modules/aggregator/config/optional/views.view.aggregator_rss_feed.yml index 1a1654994..9bbba2363 100644 --- a/web/core/modules/aggregator/config/optional/views.view.aggregator_rss_feed.yml +++ b/web/core/modules/aggregator/config/optional/views.view.aggregator_rss_feed.yml @@ -3,6 +3,7 @@ status: true dependencies: module: - aggregator + - user id: aggregator_rss_feed label: 'Aggregator RSS feed' module: aggregator @@ -137,6 +138,8 @@ display: - url.query_args - user.permissions cacheable: false + max-age: -1 + tags: { } feed_items: display_plugin: feed id: feed_items @@ -154,3 +157,5 @@ display: - 'languages:language_interface' - user.permissions cacheable: false + max-age: -1 + tags: { } diff --git a/web/core/modules/aggregator/config/optional/views.view.aggregator_sources.yml b/web/core/modules/aggregator/config/optional/views.view.aggregator_sources.yml index 7ddea89ed..643a79448 100644 --- a/web/core/modules/aggregator/config/optional/views.view.aggregator_sources.yml +++ b/web/core/modules/aggregator/config/optional/views.view.aggregator_sources.yml @@ -143,7 +143,8 @@ display: - 'languages:language_interface' - url.query_args - user.permissions - max-age: 0 + max-age: -1 + tags: { } feed_1: display_plugin: feed id: feed_1 @@ -401,7 +402,8 @@ display: - 'languages:language_content' - 'languages:language_interface' - user.permissions - max-age: 0 + max-age: -1 + tags: { } page_1: display_plugin: page id: page_1 @@ -423,4 +425,5 @@ display: - 'languages:language_interface' - url.query_args - user.permissions - max-age: 0 + max-age: -1 + tags: { } diff --git a/web/core/modules/aggregator/migration_templates/d6_aggregator_item.yml b/web/core/modules/aggregator/migration_templates/d6_aggregator_item.yml index fb4040ab1..e14dbd60e 100644 --- a/web/core/modules/aggregator/migration_templates/d6_aggregator_item.yml +++ b/web/core/modules/aggregator/migration_templates/d6_aggregator_item.yml @@ -7,7 +7,7 @@ source: process: iid: iid fid: - plugin: migration + plugin: migration_lookup migration: d6_aggregator_feed source: fid title: title diff --git a/web/core/modules/aggregator/migration_templates/d7_aggregator_item.yml b/web/core/modules/aggregator/migration_templates/d7_aggregator_item.yml index 9735e19da..054ba439f 100644 --- a/web/core/modules/aggregator/migration_templates/d7_aggregator_item.yml +++ b/web/core/modules/aggregator/migration_templates/d7_aggregator_item.yml @@ -7,7 +7,7 @@ source: process: iid: iid fid: - plugin: migration + plugin: migration_lookup migration: d7_aggregator_feed source: fid title: title diff --git a/web/core/modules/aggregator/src/Tests/FeedAdminDisplayTest.php b/web/core/modules/aggregator/src/Tests/FeedAdminDisplayTest.php index 0dbb872b5..46366b495 100644 --- a/web/core/modules/aggregator/src/Tests/FeedAdminDisplayTest.php +++ b/web/core/modules/aggregator/src/Tests/FeedAdminDisplayTest.php @@ -60,4 +60,14 @@ class FeedAdminDisplayTest extends AggregatorTestBase { $this->assertNoText('left', 'The feed is not scheduled. It does not show a timeframe "x x left" for next update.'); } + /** + * {@inheritdoc} + */ + public function randomMachineName($length = 8) { + $value = parent::randomMachineName($length); + // See expected values in testFeedUpdateFields(). + $value = str_replace(['never', 'imminently', 'ago', 'left'], 'x', $value); + return $value; + } + } diff --git a/web/core/modules/big_pipe/src/Tests/BigPipePlaceholderTestCases.php b/web/core/modules/big_pipe/src/Tests/BigPipePlaceholderTestCases.php index 69ec86fdc..46377800b 100644 --- a/web/core/modules/big_pipe/src/Tests/BigPipePlaceholderTestCases.php +++ b/web/core/modules/big_pipe/src/Tests/BigPipePlaceholderTestCases.php @@ -59,29 +59,29 @@ class BigPipePlaceholderTestCases { ], ] ); - $status_messages->bigPipePlaceholderId = 'callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args[0]&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA'; + $status_messages->bigPipePlaceholderId = 'callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args%5B0%5D&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA'; $status_messages->bigPipePlaceholderRenderArray = [ - '#markup' => '', + '#markup' => '', '#cache' => $cacheability_depends_on_session_and_nojs_cookie, '#attached' => [ 'library' => ['big_pipe/big_pipe'], 'drupalSettings' => [ 'bigPipePlaceholderIds' => [ - 'callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args[0]&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA' => TRUE, + 'callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args%5B0%5D&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA' => TRUE, ], ], 'big_pipe_placeholders' => [ - 'callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args[0]&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA' => $status_messages->placeholderRenderArray, + 'callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args%5B0%5D&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA' => $status_messages->placeholderRenderArray, ], ], ]; - $status_messages->bigPipeNoJsPlaceholder = ''; + $status_messages->bigPipeNoJsPlaceholder = ''; $status_messages->bigPipeNoJsPlaceholderRenderArray = [ - '#markup' => '', + '#markup' => '', '#cache' => $cacheability_depends_on_session_and_nojs_cookie, '#attached' => [ 'big_pipe_nojs_placeholders' => [ - '' => $status_messages->placeholderRenderArray, + '' => $status_messages->placeholderRenderArray, ], ], ]; @@ -109,7 +109,7 @@ class BigPipePlaceholderTestCases { [ 'command' => 'insert', 'method' => 'replaceWith', - 'selector' => '[data-big-pipe-placeholder-id="callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args[0]&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"]', + 'selector' => '[data-big-pipe-placeholder-id="callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args%5B0%5D&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"]', 'data' => "\n" . ' ' . "\n ", 'settings' => NULL, ], @@ -272,24 +272,24 @@ class BigPipePlaceholderTestCases { '#lazy_builder' => ['\Drupal\big_pipe_test\BigPipeTestController::exception', ['llamas', 'suck']], ] ); - $exception->bigPipePlaceholderId = 'callback=%5CDrupal%5Cbig_pipe_test%5CBigPipeTestController%3A%3Aexception&args[0]=llamas&args[1]=suck&token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU'; + $exception->bigPipePlaceholderId = 'callback=%5CDrupal%5Cbig_pipe_test%5CBigPipeTestController%3A%3Aexception&args%5B0%5D=llamas&args%5B1%5D=suck&token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU'; $exception->bigPipePlaceholderRenderArray = [ - '#markup' => '', + '#markup' => '', '#cache' => $cacheability_depends_on_session_and_nojs_cookie, '#attached' => [ 'library' => ['big_pipe/big_pipe'], 'drupalSettings' => [ 'bigPipePlaceholderIds' => [ - 'callback=%5CDrupal%5Cbig_pipe_test%5CBigPipeTestController%3A%3Aexception&args[0]=llamas&args[1]=suck&token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU' => TRUE, + 'callback=%5CDrupal%5Cbig_pipe_test%5CBigPipeTestController%3A%3Aexception&args%5B0%5D=llamas&args%5B1%5D=suck&token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU' => TRUE, ], ], 'big_pipe_placeholders' => [ - 'callback=%5CDrupal%5Cbig_pipe_test%5CBigPipeTestController%3A%3Aexception&args[0]=llamas&args[1]=suck&token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU' => $exception->placeholderRenderArray, + 'callback=%5CDrupal%5Cbig_pipe_test%5CBigPipeTestController%3A%3Aexception&args%5B0%5D=llamas&args%5B1%5D=suck&token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU' => $exception->placeholderRenderArray, ], ], ]; $exception->embeddedAjaxResponseCommands = NULL; - $exception->bigPipeNoJsPlaceholder = ''; + $exception->bigPipeNoJsPlaceholder = ''; $exception->bigPipeNoJsPlaceholderRenderArray = [ '#markup' => $exception->bigPipeNoJsPlaceholder, '#cache' => $cacheability_depends_on_session_and_nojs_cookie, diff --git a/web/core/modules/big_pipe/src/Tests/BigPipeTest.php b/web/core/modules/big_pipe/src/Tests/BigPipeTest.php index 9d2b25734..a4d556200 100644 --- a/web/core/modules/big_pipe/src/Tests/BigPipeTest.php +++ b/web/core/modules/big_pipe/src/Tests/BigPipeTest.php @@ -293,7 +293,7 @@ class BigPipeTest extends WebTestBase { // @see performMetaRefresh() $this->drupalGet(Url::fromRoute('big_pipe_test_multi_occurrence')); - $big_pipe_placeholder_id = 'callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args[0]&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA'; + $big_pipe_placeholder_id = 'callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args%5B0%5D&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA'; $expected_placeholder_replacement = '