Update to Drupal 8.2.0. For more information, see https://www.drupal.org/project/drupal/releases/8.2.0
This commit is contained in:
parent
2f563ab520
commit
f1c8716f57
12
.gitattributes
vendored
12
.gitattributes
vendored
|
@ -16,27 +16,27 @@
|
|||
# - Deny applying with `git apply --whitespace=error-all`.
|
||||
# - Fix automatically with `git apply --whitespace=fix`.
|
||||
|
||||
# Auto-detect text files, ensure they use LF.
|
||||
* text=auto eol=lf
|
||||
|
||||
*.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
|
||||
*.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.info text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.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
|
||||
*.test text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.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
|
||||
*.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
|
@ -47,8 +47,10 @@
|
|||
*.gif -text diff
|
||||
*.gz -text diff
|
||||
*.ico -text diff
|
||||
*.jpeg -text diff
|
||||
*.jpg -text diff
|
||||
*.png -text diff
|
||||
*.phar -text diff
|
||||
*.exe -text diff
|
||||
*.svgz -text diff
|
||||
*.ttf -text diff
|
||||
|
|
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -6,7 +6,11 @@ files/*
|
|||
# Pantheon commits a settings.php for environment-specific settings.
|
||||
# Place local settings in settings.local.php
|
||||
sites/*/settings.local.php
|
||||
sites/*/services*.yml
|
||||
|
||||
# Note that services.local.yml is not loaded by default. If you would like
|
||||
# to use this file add the following to your settings.local.php file:
|
||||
# $settings['container_yamls'][] = __DIR__ . '/services.local.yml';
|
||||
sites/*/services.local.yml
|
||||
|
||||
# ** Only works in OSs that support newer versions of fnmatch (Bash 4+)
|
||||
/sites/default/**/files
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"wikimedia/composer-merge-plugin": "~1.3"
|
||||
},
|
||||
"replace": {
|
||||
"drupal/core": "~8.1"
|
||||
"drupal/core": "~8.2"
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
|
|
117
composer.lock
generated
117
composer.lock
generated
|
@ -4,9 +4,52 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"hash": "5e14f057cfce03180014a6a75e38de6f",
|
||||
"content-hash": "7d72dc63a3981fb6edb92f6786ba94b1",
|
||||
"hash": "7d101b08e5ae002d827cd42ae9a4e344",
|
||||
"content-hash": "60f7057617c6d995bf9946d0b12f0b5d",
|
||||
"packages": [
|
||||
{
|
||||
"name": "asm89/stack-cors",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/asm89/stack-cors.git",
|
||||
"reference": "3ae8ef219bb4c9a6caf857421719aa07fa7776cc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/asm89/stack-cors/zipball/3ae8ef219bb4c9a6caf857421719aa07fa7776cc",
|
||||
"reference": "3ae8ef219bb4c9a6caf857421719aa07fa7776cc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.2",
|
||||
"symfony/http-foundation": "~2.1|~3.0",
|
||||
"symfony/http-kernel": "~2.1|~3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Asm89\\Stack": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Alexander",
|
||||
"email": "iam.asm89@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Cross-origin resource sharing library and stack middleware",
|
||||
"homepage": "https://github.com/asm89/stack-cors",
|
||||
"keywords": [
|
||||
"cors",
|
||||
"stack"
|
||||
],
|
||||
"time": "2016-08-01 12:05:04"
|
||||
},
|
||||
{
|
||||
"name": "composer/installers",
|
||||
"version": "v1.0.21",
|
||||
|
@ -1091,22 +1134,22 @@
|
|||
},
|
||||
{
|
||||
"name": "stack/builder",
|
||||
"version": "v1.0.3",
|
||||
"version": "v1.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/stackphp/builder.git",
|
||||
"reference": "c1f8a4693b55c563405024f708a76ef576c3b276"
|
||||
"reference": "59fcc9b448a8ce5e338a04c4e2e4aca893e83425"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/stackphp/builder/zipball/c1f8a4693b55c563405024f708a76ef576c3b276",
|
||||
"reference": "c1f8a4693b55c563405024f708a76ef576c3b276",
|
||||
"url": "https://api.github.com/repos/stackphp/builder/zipball/59fcc9b448a8ce5e338a04c4e2e4aca893e83425",
|
||||
"reference": "59fcc9b448a8ce5e338a04c4e2e4aca893e83425",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0",
|
||||
"symfony/http-foundation": "~2.1",
|
||||
"symfony/http-kernel": "~2.1"
|
||||
"symfony/http-foundation": "~2.1|~3.0",
|
||||
"symfony/http-kernel": "~2.1|~3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"silex/silex": "~1.0"
|
||||
|
@ -1136,40 +1179,42 @@
|
|||
"keywords": [
|
||||
"stack"
|
||||
],
|
||||
"time": "2014-11-23 20:37:11"
|
||||
"time": "2016-06-02 06:58:42"
|
||||
},
|
||||
{
|
||||
"name": "symfony-cmf/routing",
|
||||
"version": "1.3.0",
|
||||
"version": "1.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony-cmf/Routing.git",
|
||||
"reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6"
|
||||
"reference": "b93704ca098334f56e9b317932f21a4362e620db"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/8e87981d72c6930a27585dcd3119f3199f6cb2a6",
|
||||
"reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6",
|
||||
"url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/b93704ca098334f56e9b317932f21a4362e620db",
|
||||
"reference": "b93704ca098334f56e9b317932f21a4362e620db",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3",
|
||||
"psr/log": "~1.0",
|
||||
"symfony/http-kernel": "~2.2",
|
||||
"symfony/routing": "~2.2"
|
||||
"php": "^5.3.9|^7.0",
|
||||
"psr/log": "1.*",
|
||||
"symfony/http-kernel": "^2.2|3.*",
|
||||
"symfony/routing": "^2.2|3.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/config": "~2.2",
|
||||
"symfony/dependency-injection": "~2.0@stable",
|
||||
"symfony/event-dispatcher": "~2.1"
|
||||
"friendsofsymfony/jsrouting-bundle": "^1.1",
|
||||
"symfony-cmf/testing": "^1.3",
|
||||
"symfony/config": "^2.2|3.*",
|
||||
"symfony/dependency-injection": "^2.0.5|3.*",
|
||||
"symfony/event-dispatcher": "^2.1|3.*"
|
||||
},
|
||||
"suggest": {
|
||||
"symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version ~2.1"
|
||||
"symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.3-dev"
|
||||
"dev-master": "1.4-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -1183,7 +1228,7 @@
|
|||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Symfony CMF community",
|
||||
"name": "Symfony CMF Community",
|
||||
"homepage": "https://github.com/symfony-cmf/Routing/contributors"
|
||||
}
|
||||
],
|
||||
|
@ -1193,7 +1238,7 @@
|
|||
"database",
|
||||
"routing"
|
||||
],
|
||||
"time": "2014-10-20 20:55:17"
|
||||
"time": "2016-03-31 09:11:39"
|
||||
},
|
||||
{
|
||||
"name": "symfony/class-loader",
|
||||
|
@ -2335,16 +2380,16 @@
|
|||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v1.23.1",
|
||||
"version": "v1.24.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "d9b6333ae8dd2c8e3fd256e127548def0bc614c6"
|
||||
"reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/d9b6333ae8dd2c8e3fd256e127548def0bc614c6",
|
||||
"reference": "d9b6333ae8dd2c8e3fd256e127548def0bc614c6",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8",
|
||||
"reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -2357,7 +2402,7 @@
|
|||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.23-dev"
|
||||
"dev-master": "1.24-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -2392,7 +2437,7 @@
|
|||
"keywords": [
|
||||
"templating"
|
||||
],
|
||||
"time": "2015-11-05 12:49:06"
|
||||
"time": "2016-01-25 21:22:18"
|
||||
},
|
||||
{
|
||||
"name": "wikimedia/composer-merge-plugin",
|
||||
|
@ -3499,16 +3544,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "4.8.11",
|
||||
"version": "4.8.27",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "bdd199472410fd7e32751f9c814c7e06f2c21bd5"
|
||||
"reference": "c062dddcb68e44b563f66ee319ddae2b5a322a90"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bdd199472410fd7e32751f9c814c7e06f2c21bd5",
|
||||
"reference": "bdd199472410fd7e32751f9c814c7e06f2c21bd5",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c062dddcb68e44b563f66ee319ddae2b5a322a90",
|
||||
"reference": "c062dddcb68e44b563f66ee319ddae2b5a322a90",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3522,7 +3567,7 @@
|
|||
"phpunit/php-code-coverage": "~2.1",
|
||||
"phpunit/php-file-iterator": "~1.4",
|
||||
"phpunit/php-text-template": "~1.2",
|
||||
"phpunit/php-timer": ">=1.0.6",
|
||||
"phpunit/php-timer": "^1.0.6",
|
||||
"phpunit/phpunit-mock-objects": "~2.3",
|
||||
"sebastian/comparator": "~1.1",
|
||||
"sebastian/diff": "~1.2",
|
||||
|
@ -3567,7 +3612,7 @@
|
|||
"testing",
|
||||
"xunit"
|
||||
],
|
||||
"time": "2015-10-07 10:39:46"
|
||||
"time": "2016-07-21 06:48:14"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit-mock-objects",
|
||||
|
|
|
@ -1,10 +1,79 @@
|
|||
Drupal 8.1.7, 2016-07-18
|
||||
Drupal 8.2.0, 2016-10-05
|
||||
------------------------
|
||||
- Fixed security issue. SA-CORE-2016-003.
|
||||
|
||||
Drupal 8.1.3, 2016-06-15
|
||||
------------------------
|
||||
- Fixed security issue. SA-CORE-2016-002.
|
||||
- Updated the git repository configuration to not normalize line endings for
|
||||
files of unknown type.
|
||||
- Added vendor libraries:
|
||||
* Added Stack/Cors 1.0.0.
|
||||
- Updated vendor libraries:
|
||||
* Updated to jQuery 2.2.3.
|
||||
* Updated to Twig 1.24.
|
||||
* Updated to CKEditor 4.5.11.
|
||||
* Updated to Symfony Routing 1.4.0.
|
||||
* Updated to Stack/Builder 1.0.4.
|
||||
* Updated to Guzzle 6.2.1.
|
||||
- Added modules:
|
||||
* Added the Place Block module (experimental) to place a block on any page
|
||||
without having to navigate to the backend administration form.
|
||||
* Added the Settings Tray module (experimental) to edit the configuration of
|
||||
any block on the page. Its machine name in this release is "outside_in".
|
||||
* Added the Content Moderation module (experimental) to define and use
|
||||
workflow states such as Draft, Archived and Published. This functionality
|
||||
was previously provided by the contributed module Workbench Moderation.
|
||||
* Added the Datetime Range module (experimental) that provides a new field
|
||||
type with support for start and end dates.
|
||||
- Raised stability levels of experimental modules:
|
||||
* Updated the BigPipe module from alpha to beta.
|
||||
* See https://www.drupal.org/core/experimental#versions for more
|
||||
information about the stability levels of experimental modules.
|
||||
- Improved authoring features:
|
||||
* Relative URLs are automatically converted to absolute ones when content
|
||||
is output to an RSS feed.
|
||||
* Enabled revisions by default on new node types.
|
||||
* Added a redirect option to site-wide contact forms.
|
||||
* Whenever a new entity is created, a link to it is now provided in a
|
||||
status message, for easy access to it regardless of the form workflow.
|
||||
* Styled CKEditor dialogs to match Drupal dialogs.
|
||||
- Improved site administration experience:
|
||||
* Numerous improvements to user interface text.
|
||||
- Improved site building features:
|
||||
* Added the ability to remove a module's content entities prior to
|
||||
uninstallation.
|
||||
* Made it possible to select the comment view mode in the formatter form.
|
||||
* Fixed the Migrate module to skip over migration sources that require
|
||||
code from uninstalled modules.
|
||||
- Improved REST API and decoupled site features:
|
||||
* Added support for reading (GET) configuration entities as REST resources.
|
||||
* Added dedicated resources for user login, logout and registration.
|
||||
* Added support for selecting an authentication provider as part of the
|
||||
configuration of a REST Export Views Display.
|
||||
* Added a cors.config service parameter for enabling and configuring
|
||||
cross-origin resource sharing (CORS).
|
||||
* Simplified REST configuration with per-resource configuration entities
|
||||
and less verbose configuration structure. (The previous, advanced
|
||||
configuration structure is also still supported.)
|
||||
* Improved the response messages and status codes for requests with missing
|
||||
or incorrect headers.
|
||||
* Improved responses to PATCH requests to entity resources to contain the
|
||||
updated entity in the response body.
|
||||
- Improved developer APIs:
|
||||
* Added support for specifying the field item delta as part of an entity
|
||||
query condition. This was possible in Drupal 7 via
|
||||
EntityFieldQuery::fieldDeltaCondition(), but missing from earlier
|
||||
versions of Drupal 8.
|
||||
- Improved performance/scalability:
|
||||
* In the internal page cache, 404 responses are now cached for a shorter
|
||||
time (1 hour by default), to consume less space.
|
||||
* Breadcrumbs are now cached by the parent of the path rather than the full
|
||||
path, for fewer cache entries and higher cache hit rates.
|
||||
- Changed coding standards:
|
||||
* Local variables and parameters can now use camelCase.
|
||||
* A blank line is now required after the <?php opening tag.
|
||||
- Testing improvements:
|
||||
* Increased feature parity of BrowserTestBase with WebTestBase, including a
|
||||
deprecated AssertLegacyTrait for easier conversions.
|
||||
* Converted all kernel tests to the PHPUnit-based kernel test API.
|
||||
* Improved error reporting for all PHPUnit tests (including unit, kernel,
|
||||
browser, and JavaScript tests).
|
||||
|
||||
Drupal 8.1.0, 2016-04-20
|
||||
------------------------
|
||||
|
|
|
@ -26,7 +26,9 @@ Drupal 8
|
|||
- Scott Reeves 'Cottser' https://www.drupal.org/u/cottser
|
||||
(Framework Manager - Frontend)
|
||||
|
||||
Provisional membership: None at this time.
|
||||
Provisional membership:
|
||||
- Chris McCafferty 'cilefen' https://www.drupal.org/u/cilefen
|
||||
(Release Manager)
|
||||
|
||||
Drupal 7
|
||||
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
|
||||
|
@ -46,49 +48,126 @@ subsystems. See https://www.drupal.org/contribute/core-maintainers for more
|
|||
information on their responsibilities, and to find out how to become a subsystem
|
||||
maintainer. Current subsystem maintainers for Drupal 8:
|
||||
|
||||
Ajax system
|
||||
|
||||
Actions
|
||||
- ?
|
||||
|
||||
Aggregator
|
||||
- Paris Liakos 'ParisLiakos' https://www.drupal.org/u/parisliakos
|
||||
|
||||
Ajax
|
||||
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia
|
||||
- Earl Miles 'merlinofchaos' https://www.drupal.org/u/merlinofchaos
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
|
||||
Asset library system
|
||||
Asset Library API
|
||||
- ?
|
||||
|
||||
Authentication and authorization system
|
||||
Authentication and Authorization
|
||||
- ?
|
||||
|
||||
Automated Cron
|
||||
- ?
|
||||
|
||||
Ban
|
||||
- ?
|
||||
|
||||
Bartik
|
||||
- Jen Simmons 'jensimmons' https://www.drupal.org/u/jensimmons
|
||||
- Emma Maria Karayiannis 'emma.maria' https://www.drupal.org/u/emma.maria
|
||||
|
||||
Base system
|
||||
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud
|
||||
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
|
||||
|
||||
Batch system
|
||||
Basic Auth
|
||||
- Klaus Purer 'klausi' https://www.drupal.org/u/klausi
|
||||
- Juampy Novillo Requena 'juampy' https://www.drupal.org/u/juampy
|
||||
|
||||
Batch API
|
||||
- Yves Chedemois 'yched' https://www.drupal.org/u/yched
|
||||
|
||||
Bootstrap system
|
||||
BigPipe
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
|
||||
|
||||
Block
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
- Ben Dougherty 'benjy' https://www.drupal.org/u/benjy
|
||||
|
||||
Block Content
|
||||
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
|
||||
|
||||
Book
|
||||
- Peter Wolanin 'pwolanin' https://www.drupal.org/u/pwolanin
|
||||
|
||||
Bootstrap
|
||||
- ?
|
||||
|
||||
Cache system
|
||||
Breakpoint
|
||||
- Peter Droogmans 'attiks' https://www.drupal.org/u/attiks
|
||||
- Marc Drummond 'mdrummond' https://www.drupal.org/u/mdrummond
|
||||
|
||||
Cache
|
||||
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud
|
||||
- Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
|
||||
- Mark Sonnabaum 'msonnabaum' https://www.drupal.org/u/msonnabaum
|
||||
|
||||
Configuration system
|
||||
CKEditor
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
- Marek 'mlewand' Lewandowski https://www.drupal.org/u/mlewand
|
||||
|
||||
Classy
|
||||
- David Hernandez 'davidhernandez' https://www.drupal.org/u/davidhernandez
|
||||
- Morten Birch Heide-Jørgensen 'mortendk' https://www.drupal.org/u/mortendk
|
||||
|
||||
Color
|
||||
- ?
|
||||
|
||||
Comment
|
||||
- Dick Olsson 'dixon_' https://www.drupal.org/u/dixon_
|
||||
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
|
||||
- Andrey Postnikov 'andypost' https://www.drupal.org/u/andypost
|
||||
|
||||
Configuration API
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
- Alex Pott 'alexpott' https://www.drupal.org/u/alexpott
|
||||
- Matthew Tift 'mtift' https://www.drupal.org/u/mtift
|
||||
|
||||
Configuration entity system
|
||||
Configuration Entity API
|
||||
- Alex Pott 'alexpott' https://www.drupal.org/u/alexpott
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
|
||||
Cron system
|
||||
Configuration UI
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
|
||||
Configuration Translation
|
||||
- Gábor Hojtsy 'Gábor Hojtsy' https://www.drupal.org/u/gábor-hojtsy
|
||||
- Tobias Stöckler 'tstoeckler' https://www.drupal.org/u/tstoeckler
|
||||
- Vijayachandran Mani 'vijaycs85' https://www.drupal.org/u/vijaycs85
|
||||
|
||||
Contact
|
||||
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
|
||||
- Jibran Ijaz 'jibran' https://www.drupal.org/u/jibran
|
||||
- Andrey Postnikov 'andypost' https://www.drupal.org/u/andypost
|
||||
|
||||
Content Moderation
|
||||
- Tim Millwood 'timmillwood' https://www.drupal.org/u/timmillwood
|
||||
|
||||
Content Translation
|
||||
- Francesco Placella 'plach' https://www.drupal.org/u/plach
|
||||
|
||||
Contextual
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
|
||||
Cron
|
||||
- Derek Wright 'dww' https://www.drupal.org/u/dww
|
||||
|
||||
CSS
|
||||
- John Albin Wilkins 'JohnAlbin' https://www.drupal.org/u/johnalbin
|
||||
|
||||
Database system
|
||||
Database API
|
||||
- Larry Garfield 'Crell' https://www.drupal.org/u/crell
|
||||
|
||||
MySQL DB driver
|
||||
|
@ -102,113 +181,269 @@ Database system
|
|||
Sqlite DB driver
|
||||
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud
|
||||
|
||||
Database update system
|
||||
Database Logging
|
||||
- Khalid Baheyeldin 'kbahey' https://www.drupal.org/u/kbahey
|
||||
|
||||
Database Update API
|
||||
- ?
|
||||
|
||||
Entity system
|
||||
DateTime
|
||||
- Jonathan Hedstrom 'jhedstrom' https://www.drupal.org/u/jhedstrom
|
||||
- Matthew Donadio 'mpdonadio' https://www.drupal.org/u/mpdonadio
|
||||
|
||||
DateTime Range
|
||||
- Jonathan Hedstrom 'jhedstrom' https://www.drupal.org/u/jhedstrom
|
||||
- Matthew Donadio 'mpdonadio' https://www.drupal.org/u/mpdonadio
|
||||
|
||||
Dynamic Page Cache
|
||||
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
|
||||
Editor
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
|
||||
Entity API
|
||||
- Wolfgang Ziegler 'fago' https://www.drupal.org/u/fago
|
||||
- Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
|
||||
- Sascha Grossenbacher 'Berdir' https://www.drupal.org/u/berdir
|
||||
|
||||
Extension system
|
||||
Extension API
|
||||
- ?
|
||||
|
||||
Field system
|
||||
Field API
|
||||
- Yves Chedemois 'yched' https://www.drupal.org/u/yched
|
||||
- Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu
|
||||
|
||||
File system
|
||||
Field UI
|
||||
- Yves Chedemois 'yched' https://www.drupal.org/u/yched
|
||||
- Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu
|
||||
|
||||
File
|
||||
- Andrew Morton 'drewish' https://www.drupal.org/u/drewish
|
||||
- Aaron Winborn 'aaron' https://www.drupal.org/u/aaron
|
||||
|
||||
Form system
|
||||
Filter
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
|
||||
Forum
|
||||
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
|
||||
|
||||
Form API
|
||||
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia
|
||||
- Wolfgang Ziegler 'fago' https://www.drupal.org/u/fago
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
|
||||
Image system
|
||||
History
|
||||
- Andrey Postnikov 'andypost' https://www.drupal.org/u/andypost
|
||||
|
||||
Hypertext Application Language (HAL)
|
||||
- ?
|
||||
|
||||
Help
|
||||
- ?
|
||||
|
||||
Image
|
||||
- Claudiu Cristea 'claudiu.cristea' https://www.drupal.org/u/claudiu.cristea
|
||||
|
||||
Install system
|
||||
Installer
|
||||
- ?
|
||||
|
||||
Interface Translation (locale)
|
||||
- Gábor Hojtsy 'Gábor Hojtsy' https://www.drupal.org/u/gábor-hojtsy
|
||||
|
||||
JavaScript
|
||||
- Théodore Biadala 'nod_' https://www.drupal.org/u/nod_
|
||||
- Kay Leung 'droplet' https://www.drupal.org/u/droplet
|
||||
|
||||
Language system
|
||||
Language
|
||||
- Francesco Placella 'plach' https://www.drupal.org/u/plach
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
|
||||
Lock system
|
||||
Link Field
|
||||
- Weber Macedo 'Mac_Weber' https://www.drupal.org/u/mac_weber
|
||||
|
||||
Lock
|
||||
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud
|
||||
|
||||
Mail system
|
||||
Mail
|
||||
- ?
|
||||
|
||||
Markup
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
|
||||
Migration system
|
||||
Migrate
|
||||
- Adam Globus-Hoenich 'phenaproxima' https://www.drupal.org/u/phenaproxima
|
||||
- Ben Dougherty 'benjy' https://www.drupal.org/u/benjy
|
||||
- Michael Anello 'ultimike' https://www.drupal.org/u/ultimike
|
||||
- Mike Ryan 'mikeryan' https://www.drupal.org/u/mikeryan
|
||||
|
||||
Menu system
|
||||
Migrate (Drupal)
|
||||
- Ben Dougherty 'benjy' https://www.drupal.org/u/benjy
|
||||
- Michael Anello 'ultimike' https://www.drupal.org/u/ultimike
|
||||
- Mike Ryan 'mikeryan' https://www.drupal.org/u/mikeryan
|
||||
|
||||
Menu
|
||||
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
|
||||
- Peter Wolanin 'pwolanin' https://www.drupal.org/u/pwolanin
|
||||
|
||||
Menu Link Content
|
||||
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
|
||||
- Peter Wolanin 'pwolanin' https://www.drupal.org/u/pwolanin
|
||||
|
||||
Menu UI
|
||||
- ?
|
||||
|
||||
Node
|
||||
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
|
||||
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss
|
||||
|
||||
Node Access
|
||||
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
|
||||
- Ken Rickard 'agentrickard' https://www.drupal.org/u/agentrickard
|
||||
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
|
||||
|
||||
Path system
|
||||
Options
|
||||
- Yves Chedemois 'yched' https://www.drupal.org/u/yched
|
||||
|
||||
Outside In
|
||||
- Ted Bowman 'tedbow' https://www.drupal.org/u/tedbow
|
||||
|
||||
Page Cache
|
||||
- Lorenz Schori 'znerol' https://www.drupal.org/u/znerol
|
||||
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
|
||||
|
||||
Path
|
||||
- Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
|
||||
|
||||
Plugin system
|
||||
Plugin
|
||||
- Kris Vanderwater 'EclipseGc' https://www.drupal.org/u/eclipseGc
|
||||
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
|
||||
Queue system
|
||||
Queue
|
||||
- James Gilliland 'neclimdul' https://www.drupal.org/u/neclimdul
|
||||
- Mark Sonnabaum 'msonnabaum' https://www.drupal.org/u/msonnabaum
|
||||
|
||||
Render system
|
||||
Quick Edit
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
- Théodore Biadala 'nod_' https://www.drupal.org/u/nod_
|
||||
|
||||
RDF
|
||||
- Stéphane Corlosquet 'scor' https://www.drupal.org/u/scor
|
||||
|
||||
Render API
|
||||
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
|
||||
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia
|
||||
|
||||
Request processing system
|
||||
Request Processing
|
||||
- Larry Garfield 'Crell' https://www.drupal.org/u/crell
|
||||
|
||||
Routing system
|
||||
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
|
||||
|
||||
Responsive Image
|
||||
- Peter Droogmans 'attiks' https://www.drupal.org/u/attiks
|
||||
- Marc Drummond 'mdrummond' https://www.drupal.org/u/mdrummond
|
||||
- Jelle Sebreghts 'Jelle_S' https://www.drupal.org/u/jelle_s
|
||||
|
||||
Routing
|
||||
- Larry Garfield 'Crell' https://www.drupal.org/u/crell
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
|
||||
Theme system
|
||||
Search
|
||||
- Peter Wolanin 'pwolanin' https://www.drupal.org/u/pwolanin
|
||||
|
||||
Serialization
|
||||
- Damian Lee 'damiankloip' https://www.drupal.org/u/damiankloip
|
||||
|
||||
Seven
|
||||
- ?
|
||||
|
||||
Shortcut
|
||||
- Tobias Stöckler 'tstoeckler' https://www.drupal.org/u/tstoeckler
|
||||
- Jibran Ijaz 'jibran' https://www.drupal.org/u/jibran
|
||||
|
||||
Simpletest
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
- Sascha Grossenbacher 'Berdir' https://www.drupal.org/u/berdir
|
||||
- Alex Pott 'alexpott' https://www.drupal.org/u/alexpott
|
||||
|
||||
Stable
|
||||
- Scott Reeves 'Cottser' https://www.drupal.org/u/cottser
|
||||
|
||||
Stark
|
||||
- John Albin Wilkins 'JohnAlbin' https://www.drupal.org/u/johnalbin
|
||||
|
||||
Statistics
|
||||
- Tim Millwood 'timmillwood' https://www.drupal.org/u/timmillwood
|
||||
|
||||
Syslog
|
||||
- Khalid Baheyeldin 'kbahey' https://www.drupal.org/u/kbahey
|
||||
|
||||
System (module)
|
||||
- ?
|
||||
|
||||
Taxonomy
|
||||
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
|
||||
- Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
|
||||
- Benjamin Doherty 'bangpound' https://www.drupal.org/u/bangpound
|
||||
|
||||
Telephone
|
||||
- Dave Reid 'dave-reid' https://www.drupal.org/u/dave-reid
|
||||
|
||||
Text Field
|
||||
- ?
|
||||
|
||||
Theme API
|
||||
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia
|
||||
- Scott Reeves 'Cottser' https://www.drupal.org/u/cottser
|
||||
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
|
||||
- Joël Pittet 'joelpittet' https://www.drupal.org/u/joelpittet
|
||||
- Lauri Eskola 'lauriii' https://www.drupal.org/u/lauriii
|
||||
|
||||
Token system
|
||||
Token
|
||||
- Dave Reid 'davereid' https://www.drupal.org/u/davereid
|
||||
|
||||
Translations
|
||||
- ?
|
||||
Toolbar
|
||||
- Théodore Biadala 'nod_' https://www.drupal.org/u/nod_
|
||||
|
||||
Transliteration system
|
||||
Tour
|
||||
- Nick Schuch 'nick_schuch' https://www.drupal.org/u/nick_schuch
|
||||
|
||||
Tracker
|
||||
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss
|
||||
|
||||
Transliteration
|
||||
- Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu
|
||||
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
|
||||
Typed data system
|
||||
Typed Data
|
||||
- Wolfgang Ziegler 'fago' https://www.drupal.org/u/fago
|
||||
|
||||
Update UI
|
||||
- Derek Wright 'dww' https://www.drupal.org/u/dww
|
||||
|
||||
User
|
||||
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
|
||||
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss
|
||||
|
||||
Views
|
||||
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
- Damian Lee 'damiankloip' https://www.drupal.org/u/damiankloip
|
||||
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
|
||||
- Len Swaneveld 'Lendude' https://www.drupal.org/u/lendude
|
||||
|
||||
Views UI
|
||||
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
- Damian Lee 'damiankloip' https://www.drupal.org/u/damiankloip
|
||||
- Len Swaneveld 'Lendude' https://www.drupal.org/u/lendude
|
||||
|
||||
Topic maintainers
|
||||
-----------------
|
||||
|
||||
|
@ -245,264 +480,6 @@ The security team lead is:
|
|||
|
||||
- Michael Hess 'mlhess' https://www.drupal.org/u/mlhess
|
||||
|
||||
|
||||
Module maintainers
|
||||
------------------
|
||||
|
||||
Action module
|
||||
- ?
|
||||
|
||||
Aggregator module
|
||||
- Paris Liakos 'ParisLiakos' https://www.drupal.org/u/parisliakos
|
||||
|
||||
Automated Cron module
|
||||
- ?
|
||||
|
||||
Ban module
|
||||
- ?
|
||||
|
||||
Basic Auth module
|
||||
- Klaus Purer 'klausi' https://www.drupal.org/u/klausi
|
||||
- Juampy Novillo Requena 'juampy' https://www.drupal.org/u/juampy
|
||||
|
||||
BigPipe module
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
|
||||
|
||||
Block module
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
- Ben Dougherty 'benjy' https://www.drupal.org/u/benjy
|
||||
|
||||
Block Content module
|
||||
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
|
||||
|
||||
Book module
|
||||
- Peter Wolanin 'pwolanin' https://www.drupal.org/u/pwolanin
|
||||
|
||||
Breakpoint module
|
||||
- Peter Droogmans 'attiks' https://www.drupal.org/u/attiks
|
||||
- Marc Drummond 'mdrummond' https://www.drupal.org/u/mdrummond
|
||||
|
||||
CKEditor module
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
- Marek 'mlewand' Lewandowski https://www.drupal.org/u/mlewand
|
||||
|
||||
Color module
|
||||
- ?
|
||||
|
||||
Comment module
|
||||
- Dick Olsson 'dixon_' https://www.drupal.org/u/dixon_
|
||||
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
|
||||
- Andrey Postnikov 'andypost' https://www.drupal.org/u/andypost
|
||||
|
||||
Configuration module
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
|
||||
Configuration Translation module
|
||||
- Gábor Hojtsy 'Gábor Hojtsy' https://www.drupal.org/u/gábor-hojtsy
|
||||
- Tobias Stöckler 'tstoeckler' https://www.drupal.org/u/tstoeckler
|
||||
- Vijayachandran Mani 'vijaycs85' https://www.drupal.org/u/vijaycs85
|
||||
|
||||
Contact module
|
||||
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
|
||||
- Jibran Ijaz 'jibran' https://www.drupal.org/u/jibran
|
||||
- Andrey Postnikov 'andypost' https://www.drupal.org/u/andypost
|
||||
|
||||
Content Translation module
|
||||
- Francesco Placella 'plach' https://www.drupal.org/u/plach
|
||||
|
||||
Contextual module
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
|
||||
Database Logging module
|
||||
- Khalid Baheyeldin 'kbahey' https://www.drupal.org/u/kbahey
|
||||
|
||||
DateTime module
|
||||
- Jonathan Hedstrom 'jhedstrom' https://www.drupal.org/u/jhedstrom
|
||||
- Matthew Donadio 'mpdonadio' https://www.drupal.org/u/mpdonadio
|
||||
|
||||
Dynamic Page Cache module
|
||||
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
|
||||
Email module
|
||||
- Nils Destoop 'zuuperman' https://www.drupal.org/u/zuuperman
|
||||
|
||||
Editor module
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
|
||||
Field UI module
|
||||
- Yves Chedemois 'yched' https://www.drupal.org/u/yched
|
||||
- Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu
|
||||
|
||||
File module
|
||||
- Aaron Winborn 'aaron' https://www.drupal.org/u/aaron
|
||||
|
||||
Filter module
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
|
||||
Forum module
|
||||
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
|
||||
|
||||
History module
|
||||
- Andrey Postnikov 'andypost' https://www.drupal.org/u/andypost
|
||||
|
||||
Hypertext Application Language (HAL) module
|
||||
- ?
|
||||
|
||||
Help module
|
||||
- ?
|
||||
|
||||
Image module
|
||||
- Claudiu Cristea 'claudiu.cristea' https://www.drupal.org/u/claudiu.cristea
|
||||
|
||||
Interface Translation (locale) module
|
||||
- Gábor Hojtsy 'Gábor Hojtsy' https://www.drupal.org/u/gábor-hojtsy
|
||||
|
||||
Language module
|
||||
- Francesco Placella 'plach' https://www.drupal.org/u/plach
|
||||
- Gábor Hojtsy 'Gábor Hojtsy' https://www.drupal.org/u/gábor-hojtsy
|
||||
|
||||
Link module
|
||||
- Weber Macedo 'Mac_Weber' https://www.drupal.org/u/mac_weber
|
||||
|
||||
Menu link content module
|
||||
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
|
||||
- Peter Wolanin 'pwolanin' https://www.drupal.org/u/pwolanin
|
||||
|
||||
Menu UI module
|
||||
- ?
|
||||
|
||||
Migrate module
|
||||
- Ben Dougherty 'benjy' https://www.drupal.org/u/benjy
|
||||
- Michael Anello 'ultimike' https://www.drupal.org/u/ultimike
|
||||
- Mike Ryan 'mikeryan' https://www.drupal.org/u/mikeryan
|
||||
|
||||
Migrate (Drupal) module
|
||||
- Ben Dougherty 'benjy' https://www.drupal.org/u/benjy
|
||||
- Michael Anello 'ultimike' https://www.drupal.org/u/ultimike
|
||||
- Mike Ryan 'mikeryan' https://www.drupal.org/u/mikeryan
|
||||
|
||||
Node module
|
||||
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
|
||||
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss
|
||||
|
||||
Number module
|
||||
- ?
|
||||
|
||||
Options module
|
||||
- Yves Chedemois 'yched' https://www.drupal.org/u/yched
|
||||
|
||||
Page Cache module
|
||||
- Lorenz Schori 'znerol' https://www.drupal.org/u/znerol
|
||||
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
|
||||
|
||||
Path module
|
||||
- ?
|
||||
|
||||
Quick Edit module
|
||||
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
|
||||
- Théodore Biadala 'nod_' https://www.drupal.org/u/nod_
|
||||
|
||||
RDF module
|
||||
- Stéphane Corlosquet 'scor' https://www.drupal.org/u/scor
|
||||
|
||||
REST module
|
||||
- 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
|
||||
|
||||
Responsive Image module
|
||||
- Peter Droogmans 'attiks' https://www.drupal.org/u/attiks
|
||||
- Marc Drummond 'mdrummond' https://www.drupal.org/u/mdrummond
|
||||
- Jelle Sebreghts 'Jelle_S' https://www.drupal.org/u/jelle_s
|
||||
|
||||
Search module
|
||||
- Peter Wolanin 'pwolanin' https://www.drupal.org/u/pwolanin
|
||||
|
||||
Serialization module
|
||||
- Damian Lee 'damiankloip' https://www.drupal.org/u/damiankloip
|
||||
|
||||
Shortcut module
|
||||
- Tobias Stöckler 'tstoeckler' https://www.drupal.org/u/tstoeckler
|
||||
- Jibran Ijaz 'jibran' https://www.drupal.org/u/jibran
|
||||
|
||||
Simpletest module
|
||||
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
|
||||
- Sascha Grossenbacher 'Berdir' https://www.drupal.org/u/berdir
|
||||
- Alex Pott 'alexpott' https://www.drupal.org/u/alexpott
|
||||
|
||||
Statistics module
|
||||
- Tim Millwood 'timmillwood' https://www.drupal.org/u/timmillwood
|
||||
|
||||
Syslog module
|
||||
- Khalid Baheyeldin 'kbahey' https://www.drupal.org/u/kbahey
|
||||
|
||||
System module
|
||||
- ?
|
||||
|
||||
Taxonomy module
|
||||
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
|
||||
- Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
|
||||
- Benjamin Doherty 'bangpound' https://www.drupal.org/u/bangpound
|
||||
|
||||
Telephone module
|
||||
- Dave Reid 'dave-reid' https://www.drupal.org/u/dave-reid
|
||||
|
||||
Text module
|
||||
- ?
|
||||
|
||||
Toolbar module
|
||||
- Théodore Biadala 'nod_' https://www.drupal.org/u/nod_
|
||||
|
||||
Tour module
|
||||
- Nick Schuch 'nick_schuch' https://www.drupal.org/u/nick_schuch
|
||||
|
||||
Tracker module
|
||||
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss
|
||||
|
||||
Update module
|
||||
- Derek Wright 'dww' https://www.drupal.org/u/dww
|
||||
|
||||
User module
|
||||
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
|
||||
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss
|
||||
|
||||
Views module
|
||||
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
- Damian Lee 'damiankloip' https://www.drupal.org/u/damiankloip
|
||||
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
|
||||
- Len Swaneveld 'Lendude' https://www.drupal.org/u/lendude
|
||||
|
||||
Views UI module
|
||||
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
|
||||
- Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
|
||||
- Damian Lee 'damiankloip' https://www.drupal.org/u/damiankloip
|
||||
- Len Swaneveld 'Lendude' https://www.drupal.org/u/lendude
|
||||
|
||||
|
||||
Theme maintainers
|
||||
-----------------
|
||||
|
||||
Bartik theme
|
||||
- Jen Simmons 'jensimmons' https://www.drupal.org/u/jensimmons
|
||||
- Emma Maria Karayiannis 'emma.maria' https://www.drupal.org/u/emma.maria
|
||||
|
||||
Classy theme
|
||||
- David Hernandez 'davidhernandez' https://www.drupal.org/u/davidhernandez
|
||||
- Morten Birch Heide-Jørgensen 'mortendk' https://www.drupal.org/u/mortendk
|
||||
|
||||
Seven theme
|
||||
- ?
|
||||
|
||||
Stable theme
|
||||
- Scott Reeves 'Cottser' https://www.drupal.org/u/cottser
|
||||
|
||||
Stark theme
|
||||
- John Albin Wilkins 'JohnAlbin' https://www.drupal.org/u/johnalbin
|
||||
|
||||
|
||||
Initiative coordinators
|
||||
-----------------------
|
||||
|
||||
|
|
25
core/assets/vendor/ckeditor/CHANGES.md
vendored
25
core/assets/vendor/ckeditor/CHANGES.md
vendored
|
@ -1,6 +1,30 @@
|
|||
CKEditor 4 Changelog
|
||||
====================
|
||||
|
||||
## CKEditor 4.5.11
|
||||
|
||||
**Security Updates:**
|
||||
|
||||
* [Severity: minor] Fixed the target="_blank" vulnerability reported by James Gaskell.
|
||||
|
||||
Issue summary: If a victim had access to a spoofed version of ckeditor.com via HTTP (e.g. due to DNS spoofing, using a hacked public network or mailicious hotspot), then when using a link to the ckeditor.com website it was possible for the attacker to change the current URL of the opening page, even if the opening page was protected with SSL.
|
||||
|
||||
An upgrade is recommended.
|
||||
|
||||
New Features:
|
||||
|
||||
* [#14747](http://dev.ckeditor.com/ticket/14747): The [Enhanced Image](http://ckeditor.com/addon/image2) caption now supports the link `target` attribute.
|
||||
* [#7154](http://dev.ckeditor.com/ticket/7154): Added support for the "Display Text" field to the [Link](http://ckeditor.com/addon/link) dialog. Thanks to [Ryan Guill](https://github.com/ryanguill)!
|
||||
|
||||
Fixed Issues:
|
||||
|
||||
* [#13362](http://dev.ckeditor.com/ticket/13362): [Blink, WebKit] Fixed: Active widget element is not cached when it is losing focus and it is inside an editable element.
|
||||
* [#13755](http://dev.ckeditor.com/ticket/13755): [Edge] Fixed: Pasting images does not work.
|
||||
* [#13548](http://dev.ckeditor.com/ticket/13548): [IE] Fixed: Clicking the [elements path](http://ckeditor.com/addon/elementspath) disables Cut and Copy icons.
|
||||
* [#13812](http://dev.ckeditor.com/ticket/13812): Fixed: When aborting file upload the placeholder for image is left.
|
||||
* [#14659](http://dev.ckeditor.com/ticket/14659): [Blink] Fixed: Content scrolled to the top after closing the dialog in a [`<div>`-based editor](http://ckeditor.com/addon/divarea).
|
||||
* [#14825](http://dev.ckeditor.com/ticket/14825): [Edge] Fixed: Focusing the editor causes unwanted scrolling due to dropped support for the `setActive` method.
|
||||
|
||||
## CKEditor 4.5.10
|
||||
|
||||
Fixed Issues:
|
||||
|
@ -15,7 +39,6 @@ Fixed Issues:
|
|||
* [#14252](http://dev.ckeditor.com/ticket/14252): [IE] Fixed: Styles drop-down list does not always reflect the current style of the text line.
|
||||
* [#14275](http://dev.ckeditor.com/ticket/14275): [IE9+] Fixed: `onerror` and `onload` events are not used in browsers it could have been used when loading scripts dynamically.
|
||||
|
||||
|
||||
## CKEditor 4.5.9
|
||||
|
||||
Fixed Issues:
|
||||
|
|
1104
core/assets/vendor/ckeditor/ckeditor.js
vendored
1104
core/assets/vendor/ckeditor/ckeditor.js
vendored
File diff suppressed because it is too large
Load diff
2
core/assets/vendor/ckeditor/lang/es.js
vendored
2
core/assets/vendor/ckeditor/lang/es.js
vendored
File diff suppressed because one or more lines are too long
2
core/assets/vendor/ckeditor/lang/fr.js
vendored
2
core/assets/vendor/ckeditor/lang/fr.js
vendored
File diff suppressed because one or more lines are too long
2
core/assets/vendor/ckeditor/lang/ku.js
vendored
2
core/assets/vendor/ckeditor/lang/ku.js
vendored
File diff suppressed because one or more lines are too long
2
core/assets/vendor/ckeditor/lang/pt.js
vendored
2
core/assets/vendor/ckeditor/lang/pt.js
vendored
File diff suppressed because one or more lines are too long
2
core/assets/vendor/ckeditor/lang/ru.js
vendored
2
core/assets/vendor/ckeditor/lang/ru.js
vendored
File diff suppressed because one or more lines are too long
2
core/assets/vendor/ckeditor/lang/uk.js
vendored
2
core/assets/vendor/ckeditor/lang/uk.js
vendored
File diff suppressed because one or more lines are too long
|
@ -3,8 +3,9 @@
|
|||
For licensing, see LICENSE.md or http://ckeditor.com/license
|
||||
*/
|
||||
CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY+TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo",
|
||||
legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."},
|
||||
{name:"Lista del Editor",legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT+TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT+TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]},
|
||||
legend:"Dentro del diálogo, presione TAB para navegar a los siguientes elementos de diálogo, presione SHIFT+TAB para moverse a los anteriores elementos de diálogo, presione ENTER para enviar el diálogo, presiona ESC para cancelar el diálogo. Cuando el diálogo tiene multiples pestañas, la lista de pestañas puede ser abarcada con ALT + F10 or con TAB como parte del orden de pestañas del diálogo. ECon la pestaña enfocada, puede moverse a la siguiente o anterior pestaña con las FLECHAS IZQUIRDA y DERECHA respectivamente."},
|
||||
{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."},{name:"Lista del Editor",
|
||||
legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT+TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT+TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]},
|
||||
{name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},
|
||||
{name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}],backspace:"Retroceso",tab:"Tabulador",enter:"Ingresar",shift:"Mayús.",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Mayús.",escape:"Escape",pageUp:"Regresar Página",
|
||||
pageDown:"Avanzar Página",end:"Fin",home:"Inicio",leftArrow:"Flecha Izquierda",upArrow:"Flecha Arriba",rightArrow:"Flecha Derecha",downArrow:"Flecha Abajo",insert:"Insertar","delete":"Suprimir",leftWindowKey:"Tecla Windows Izquierda",rightWindowKey:"Tecla Windows Derecha",selectKey:"Tecla de Selección",numpad0:"Tecla 0 del teclado numérico",numpad1:"Tecla 1 del teclado numérico",numpad2:"Tecla 2 del teclado numérico",numpad3:"Tecla 3 del teclado numérico",numpad4:"Tecla 4 del teclado numérico",numpad5:"Tecla 5 del teclado numérico",
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
|
||||
For licensing, see LICENSE.md or http://ckeditor.com/license
|
||||
*/
|
||||
CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur la touche Échap.",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches MAJ et MAJ+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLÈCHE DROITE et FLÈCHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRÉE pour activer le bouton de barre d'outils."},
|
||||
{name:"Fenêtre de l'éditeur",legend:"Dans une boîte de dialogue, appuyer sur Tab pour passer à l'élément suivant, appuyer sur Maj+Tab pour passer à l'élément précédent, appuyer sur Entrée pour valider, appuyer sur Échap pour annuler. Quand une boîte de dialogue possède des onglets, la liste peut être atteinte avec Alt+F10 ou avec Tab. Dans la liste des onglets, se déplacer vers le suivant et le précédent avec les flèches Droite et Gauche respectivement."},{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou sur la touche Menu pour ouvrir le menu contextuel. Se déplacer ensuite vers l'option suivante du menu avec la touche Tab ou la flèche Bas. Se déplacer vers l'option précédente avec le raccourci Maj+Tab ou la flèche Haut. appuyer sur la Barre d'espace ou la touche Entrée pour sélectionner l'option du menu. Appuyer sur la Barre d'espace, la touche Entrée ou la flèche Droite pour ouvrir le sous-menu de l'option sélectionnée. Revenir à l'élément de menu parent avec la touche Échap ou la flèche Gauche. Fermer le menu contextuel avec Échap."},
|
||||
{name:"Zone de liste de l'éditeur",legend:"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec la touche Tab ou la flèche Bas. Se déplacer vers l'élément précédent de la liste avec le raccourci Maj+Tab ou la flèche Haut. Appuyer sur la Barre d'espace ou sur Entrée pour sélectionner l'option dans la liste. Appuyer sur Échap pour fermer le menu déroulant."},{name:"Barre du chemin d'éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre du fil d'Ariane des éléments. Se déplacer vers le bouton d'élément suivant avec la touche Tab ou la flèche Droite. Se déplacer vers le bouton d'élément précédent avec le raccourci Maj+Tab ou la flèche Gauche. Appuyer sur la Barre d'espace ou sur Entrée pour sélectionner l'élément dans l'éditeur."}]},
|
||||
CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur la touche Échap.",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers le groupe suivant ou précédent de la barre d'outils avec les touches Tab et Maj+Tab. Se déplacer vers le bouton suivant ou précédent de la barre d'outils avec les touches Flèche droite et Flèche gauche. Appuyer sur la barre d'espace ou la touche Entrée pour activer le bouton de barre d'outils."},
|
||||
{name:"Fenêtre de l'éditeur",legend:"Dans une boîte de dialogue, appuyer sur Tab pour passer à l'élément suivant, appuyer sur Maj+Tab pour passer à l'élément précédent, appuyer sur Entrée pour valider, appuyer sur Échap pour annuler. Quand une boîte de dialogue possède des onglets, la liste peut être atteinte avec Alt+F10 ou avec Tab. Dans la liste des onglets, se déplacer vers le suivant et le précédent avec les touches Flèche droite et Flèche gauche respectivement."},{name:"Menu contextuel de l'éditeur",
|
||||
legend:"Appuyer sur ${contextMenu} ou sur la touche Menu pour ouvrir le menu contextuel. Se déplacer ensuite vers l'option suivante du menu avec les touches Tab ou Flèche bas. Se déplacer vers l'option précédente avec les touches Maj+Tab ou Flèche haut. Appuyer sur la barre d'espace ou la touche Entrée pour sélectionner l'option du menu. Appuyer sur la barre d'espace, la touche Entrée ou Flèche droite pour ouvrir le sous-menu de l'option sélectionnée. Revenir à l'élément de menu parent avec la touche Échap ou Flèche gauche. Fermer le menu contextuel avec Échap."},
|
||||
{name:"Zone de liste de l'éditeur",legend:"Dans une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches Tab ou Flèche bas. Se déplacer vers l'élément précédent de la liste avec les touches Maj+Tab ou Flèche haut. Appuyer sur la barre d'espace ou sur Entrée pour sélectionner l'option dans la liste. Appuyer sur Échap pour fermer le menu déroulant."},{name:"Barre du chemin d'éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre du fil d'Ariane des éléments. Se déplacer vers le bouton de l'élément suivant avec les touches Tab ou Flèche droite. Se déplacer vers le bouton précédent avec les touches Maj+Tab ou Flèche gauche. Appuyer sur la barre d'espace ou sur Entrée pour sélectionner l'élément dans l'éditeur."}]},
|
||||
{name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Commande restaurer",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Commande d'accès à l'élément sélectionnable précédent",
|
||||
legend:"Appuyer sur ${accessNextSpace} pour accéder à l'élément sélectionnable inatteignable le plus proche avant le curseur, par exemple : deux lignes horizontales adjacentes. Répéter la combinaison de touches pour atteindre les éléments sélectionnables précédents."},{name:"Commande d'accès à l'élément sélectionnable suivant",legend:"Appuyer sur ${accessNextSpace} pour accéder à l'élément sélectionnable inatteignable le plus proche après le curseur, par exemple : deux lignes horizontales adjacentes. Répéter la combinaison de touches pour atteindre les éléments sélectionnables suivants."},
|
||||
{name:" Aide sur l'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Retour arrière",tab:"Tabulation",enter:"Entrée",shift:"Majuscule",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Verr. Maj.",escape:"Échap",pageUp:"Page supérieure",pageDown:"Page suivante",end:"Fin",home:"Origine",leftArrow:"Flèche gauche",upArrow:"Flèche haut",rightArrow:"Flèche droite",downArrow:"Flèche basse",insert:"Inser","delete":"Supprimer",leftWindowKey:"Touche Windows gauche",rightWindowKey:"Touche Windows droite",
|
||||
|
|
|
@ -8,5 +8,5 @@ CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de acessibilidade"
|
|||
{name:"Comandos",items:[{name:"Comando de anular",legend:"Carregar ${undo}"},{name:"Comando de refazer",legend:"Clique ${redo}"},{name:"Comando de negrito",legend:"Pressione ${bold}"},{name:"Comando de itálico",legend:"Pressione ${italic}"},{name:"Comando de sublinhado",legend:"Pressione ${underline}"},{name:"Comando de hiperligação",legend:"Pressione ${link}"},{name:"Comando de ocultar barra de ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Aceder ao comando espaço de foco anterior",
|
||||
legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},
|
||||
{name:"Ajuda a acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Maiúsculas",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"Fim",home:"Entrada",leftArrow:"Seta esquerda",upArrow:"Seta para cima",rightArrow:"Seta direita",downArrow:"Seta para baixo",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",
|
||||
numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiplicar",add:"Adicionar",subtract:"Subtrair",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Vírgula",dash:"Cardinal",period:"Ponto",
|
||||
numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiplicar",add:"Adicionar",subtract:"Subtrair",decimalPoint:"Decimal Point",divide:"Separar",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Vírgula",dash:"Cardinal",period:"Ponto",
|
||||
forwardSlash:"Forward Slash",graveAccent:"Acento grave",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Plica"});
|
|
@ -3,5 +3,6 @@
|
|||
For licensing, see LICENSE.md or http://ckeditor.com/license
|
||||
*/
|
||||
CKEDITOR.dialog.add("about",function(a){a=a.lang.about;var b=CKEDITOR.getUrl(CKEDITOR.plugins.get("about").path+"dialogs/"+(CKEDITOR.env.hidpi?"hidpi/":"")+"logo_ckeditor.png");return{title:CKEDITOR.env.ie?a.dlgTitle:a.title,minWidth:390,minHeight:230,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{type:"html",html:'\x3cstyle type\x3d"text/css"\x3e.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+
|
||||
b+");"+(CKEDITOR.env.hidpi?"background-size:163px 58px;":"")+'background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}\x3c/style\x3e\x3cdiv class\x3d"cke_about_container"\x3e\x3cdiv class\x3d"cke_about_logo"\x3e\x3c/div\x3e\x3cp\x3eCKEditor '+CKEDITOR.version+" (revision "+CKEDITOR.revision+')\x3cbr\x3e\x3ca target\x3d"_blank" href\x3d"http://ckeditor.com/"\x3ehttp://ckeditor.com\x3c/a\x3e\x3c/p\x3e\x3cp\x3e'+
|
||||
a.help.replace("$1",'\x3ca target\x3d"_blank" href\x3d"http://docs.ckeditor.com/user"\x3e'+a.userGuide+"\x3c/a\x3e")+"\x3c/p\x3e\x3cp\x3e"+a.moreInfo+'\x3cbr\x3e\x3ca target\x3d"_blank" href\x3d"http://ckeditor.com/about/license"\x3ehttp://ckeditor.com/about/license\x3c/a\x3e\x3c/p\x3e\x3cp\x3e'+a.copy.replace("$1",'\x3ca target\x3d"_blank" href\x3d"http://cksource.com/"\x3eCKSource\x3c/a\x3e - Frederico Knabben')+"\x3c/p\x3e\x3c/div\x3e"}]}],buttons:[CKEDITOR.dialog.cancelButton]}});
|
||||
b+");"+(CKEDITOR.env.hidpi?"background-size:163px 58px;":"")+'background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}\x3c/style\x3e\x3cdiv class\x3d"cke_about_container"\x3e\x3cdiv class\x3d"cke_about_logo"\x3e\x3c/div\x3e\x3cp\x3eCKEditor '+CKEDITOR.version+" (revision "+CKEDITOR.revision+')\x3cbr\x3e\x3ca target\x3d"_blank" rel\x3d"noopener noreferrer" href\x3d"http://ckeditor.com/"\x3ehttp://ckeditor.com\x3c/a\x3e\x3c/p\x3e\x3cp\x3e'+
|
||||
a.help.replace("$1",'\x3ca target\x3d"_blank" rel\x3d"noopener noreferrer" href\x3d"http://docs.ckeditor.com/user"\x3e'+a.userGuide+"\x3c/a\x3e")+"\x3c/p\x3e\x3cp\x3e"+a.moreInfo+'\x3cbr\x3e\x3ca target\x3d"_blank" rel\x3d"noopener noreferrer" href\x3d"http://ckeditor.com/about/license"\x3ehttp://ckeditor.com/about/license\x3c/a\x3e\x3c/p\x3e\x3cp\x3e'+a.copy.replace("$1",'\x3ca target\x3d"_blank" rel\x3d"noopener noreferrer" href\x3d"http://cksource.com/"\x3eCKSource\x3c/a\x3e - Frederico Knabben')+
|
||||
"\x3c/p\x3e\x3c/div\x3e"}]}],buttons:[CKEDITOR.dialog.cancelButton]}});
|
|
@ -2,12 +2,12 @@
|
|||
Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
|
||||
For licensing, see LICENSE.md or http://ckeditor.com/license
|
||||
*/
|
||||
CKEDITOR.plugins.setLang("specialchar","eu",{euro:"Euro zeinua",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
|
||||
CKEDITOR.plugins.setLang("specialchar","eu",{euro:"Euro zeinua",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Libera zeinua",curren:"Currency sign",yen:"Yen zeinua",brvbar:"Broken bar",sect:"Section sign",uml:"Dieresia",copy:"Copyright zeinua",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
|
||||
not:"Ez zeinua",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
|
||||
Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
|
||||
Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
|
||||
Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Bider zeinua",Oslash:"Latin capital letter O with stroke",
|
||||
Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
|
||||
aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
|
||||
ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
|
||||
yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
|
||||
trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
|
||||
trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Buleta",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
|
|
@ -2,7 +2,7 @@
|
|||
Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
|
||||
For licensing, see LICENSE.md or http://ckeditor.com/license
|
||||
*/
|
||||
CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret demi-cadratin",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Signe de section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",
|
||||
CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret demi-cadratin",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole cent",pound:"Symbole Livre sterling",curren:"Symbole monétaire",yen:"Symbole yen",brvbar:"Barre verticale scindée",sect:"Signe de section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",
|
||||
laquo:"Guillemet français ouvrant",not:"Crochet de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Symbole degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigu",micro:"Symbole micro",para:"Symbole pied-de-mouche",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Fraction un quart",frac12:"Fraction un demi",frac34:"Fraction trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A accent grave majuscule",
|
||||
Aacute:"A accent aigu majuscule",Acirc:"A accent circonflexe majuscule",Atilde:"A caron majuscule",Auml:"A tréma majuscule",Aring:"A rond majuscule",AElig:"Ligature Æ majuscule",Ccedil:"C cédille majuscule",Egrave:"E accent grave majuscule",Eacute:"E accent aigu majuscule",Ecirc:"E accent circonflexe majuscule",Euml:"E tréma majuscule",Igrave:"I accent grave majuscule",Iacute:"I accent aigu majuscule",Icirc:"I accent circonflexe majuscule",Iuml:"I tréma majuscule",ETH:"Lettre majuscule islandaise ED",
|
||||
Ntilde:"N caron majuscule",Ograve:"O accent grave majuscule",Oacute:"O accent aigu majuscule",Ocirc:"O accent circonflexe majuscule",Otilde:"O caron majuscule",Ouml:"O tréma majuscule",times:"Symbole de multiplication",Oslash:"O barré majuscule",Ugrave:"U accent grave majuscule",Uacute:"U accent aigu majuscule",Ucirc:"U accent circonflexe majuscule",Uuml:"U tréma majuscule",Yacute:"Y accent aigu majuscule",THORN:"Lettre islandaise thorn majuscule",szlig:"Lettre minuscule allemande S dur",agrave:"A accent grave minuscule",
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
3676
core/assets/vendor/jquery/jquery.js
vendored
3676
core/assets/vendor/jquery/jquery.js
vendored
File diff suppressed because it is too large
Load diff
9
core/assets/vendor/jquery/jquery.min.js
vendored
9
core/assets/vendor/jquery/jquery.min.js
vendored
File diff suppressed because one or more lines are too long
2
core/assets/vendor/jquery/jquery.min.map
vendored
2
core/assets/vendor/jquery/jquery.min.map
vendored
File diff suppressed because one or more lines are too long
|
@ -22,7 +22,7 @@
|
|||
"doctrine/common": "2.5.*",
|
||||
"doctrine/annotations": "1.2.*",
|
||||
"guzzlehttp/guzzle": "^6.2.1",
|
||||
"symfony-cmf/routing": "1.3.*",
|
||||
"symfony-cmf/routing": "~1.4",
|
||||
"easyrdf/easyrdf": "0.9.*",
|
||||
"zendframework/zend-feed": "~2.4",
|
||||
"stack/builder": "1.0.*",
|
||||
|
@ -31,7 +31,8 @@
|
|||
"symfony/psr-http-message-bridge": "v0.2",
|
||||
"zendframework/zend-diactoros": "~1.1",
|
||||
"composer/semver": "~1.0",
|
||||
"paragonie/random_compat": "~1.0"
|
||||
"paragonie/random_compat": "~1.0",
|
||||
"asm89/stack-cors": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"behat/mink": "~1.7",
|
||||
|
@ -52,6 +53,7 @@
|
|||
"drupal/big_pipe": "self.version",
|
||||
"drupal/block": "self.version",
|
||||
"drupal/block_content": "self.version",
|
||||
"drupal/block_place": "self.version",
|
||||
"drupal/book": "self.version",
|
||||
"drupal/breakpoint": "self.version",
|
||||
"drupal/ckeditor": "self.version",
|
||||
|
@ -61,6 +63,7 @@
|
|||
"drupal/config": "self.version",
|
||||
"drupal/config_translation": "self.version",
|
||||
"drupal/contact": "self.version",
|
||||
"drupal/content_moderation": "self.version",
|
||||
"drupal/content_translation": "self.version",
|
||||
"drupal/contextual": "self.version",
|
||||
"drupal/core-annotation": "self.version",
|
||||
|
@ -85,6 +88,7 @@
|
|||
"drupal/core-utility": "self.version",
|
||||
"drupal/core-uuid": "self.version",
|
||||
"drupal/datetime": "self.version",
|
||||
"drupal/datetime_range": "self.version",
|
||||
"drupal/dblog": "self.version",
|
||||
"drupal/dynamic_page_cache": "self.version",
|
||||
"drupal/editor": "self.version",
|
||||
|
@ -110,6 +114,7 @@
|
|||
"drupal/migrate_drupal_ui": "self.version",
|
||||
"drupal/node": "self.version",
|
||||
"drupal/options": "self.version",
|
||||
"drupal/outside_in": "self.version",
|
||||
"drupal/page_cache": "self.version",
|
||||
"drupal/path": "self.version",
|
||||
"drupal/quickedit": "self.version",
|
||||
|
|
|
@ -1692,7 +1692,11 @@
|
|||
* // Create a $form API array.
|
||||
* $form['phone_number'] = array(
|
||||
* '#type' => 'tel',
|
||||
* '#title' => $this->t('Your phone number')
|
||||
* '#title' => $this->t('Your phone number'),
|
||||
* );
|
||||
* $form['save'] = array(
|
||||
* '#type' => 'submit',
|
||||
* '#value' => $this->t('Save'),
|
||||
* );
|
||||
* return $form;
|
||||
* }
|
||||
|
|
|
@ -24,10 +24,10 @@ classList:
|
|||
|
||||
ckeditor:
|
||||
remote: https://github.com/ckeditor/ckeditor-dev
|
||||
version: "4.5.10"
|
||||
version: "4.5.11"
|
||||
license:
|
||||
name: GNU-GPL-2.0-or-later
|
||||
url: https://github.com/ckeditor/ckeditor-dev/blob/4.5.10/LICENSE.md
|
||||
url: https://github.com/ckeditor/ckeditor-dev/blob/4.5.11/LICENSE.md
|
||||
gpl-compatible: true
|
||||
js:
|
||||
assets/vendor/ckeditor/ckeditor.js: { preprocess: false, minified: true }
|
||||
|
@ -333,10 +333,10 @@ html5shiv:
|
|||
|
||||
jquery:
|
||||
remote: https://github.com/jquery/jquery
|
||||
version: "2.1.4"
|
||||
version: "2.2.3"
|
||||
license:
|
||||
name: MIT
|
||||
url: https://github.com/jquery/jquery/blob/2.1.4/MIT-LICENSE.txt
|
||||
url: https://github.com/jquery/jquery/blob/2.2.3/MIT-LICENSE.txt
|
||||
gpl-compatible: true
|
||||
js:
|
||||
assets/vendor/jquery/jquery.min.js: { minified: true, weight: -20 }
|
||||
|
|
|
@ -33,6 +33,14 @@ parameters:
|
|||
- sftp
|
||||
- webcal
|
||||
- rtsp
|
||||
cors.config:
|
||||
enabled: false
|
||||
allowedHeaders: []
|
||||
allowedMethods: []
|
||||
allowedOrigins: ['*']
|
||||
exposedHeaders: false
|
||||
maxAge: false
|
||||
supportsCredentials: false
|
||||
services:
|
||||
# Simple cache contexts, directly derived from the request context.
|
||||
cache_context.ip:
|
||||
|
@ -424,7 +432,7 @@ services:
|
|||
class: Drupal\Core\Path\AliasWhitelist
|
||||
tags:
|
||||
- { name: needs_destruction }
|
||||
arguments: [path_alias_whitelist, '@cache.default', '@lock', '@state', '@path.alias_storage']
|
||||
arguments: [path_alias_whitelist, '@cache.bootstrap', '@lock', '@state', '@path.alias_storage']
|
||||
path.alias_manager:
|
||||
class: Drupal\Core\Path\AliasManager
|
||||
arguments: ['@path.alias_storage', '@path.alias_whitelist', '@language_manager', '@cache.data']
|
||||
|
@ -504,10 +512,13 @@ services:
|
|||
theme_installer:
|
||||
class: Drupal\Core\Extension\ThemeInstaller
|
||||
arguments: ['@theme_handler', '@config.factory', '@config.installer', '@module_handler', '@config.manager', '@asset.css.collection_optimizer', '@router.builder', '@logger.channel.default', '@state']
|
||||
# @deprecated in Drupal 8.0.x and will be removed before 9.0.0. Use the other
|
||||
# entity* services instead.
|
||||
entity.manager:
|
||||
# We cannot set the deprecated property here because many test cases still
|
||||
# rely on this service and they would fail with deprecation warnings.
|
||||
class: Drupal\Core\Entity\EntityManager
|
||||
parent: container.trait
|
||||
deprecated: '%service_id%-no-warning'
|
||||
# @todo Remove this tag in https://www.drupal.org/node/2549143.
|
||||
tags:
|
||||
- { name: plugin_manager_cache_clear }
|
||||
|
@ -566,6 +577,9 @@ services:
|
|||
entity.autocomplete_matcher:
|
||||
class: Drupal\Core\Entity\EntityAutocompleteMatcher
|
||||
arguments: ['@plugin.manager.entity_reference_selection']
|
||||
plugin_form.factory:
|
||||
class: Drupal\Core\Plugin\PluginFormFactory
|
||||
arguments: ['@class_resolver']
|
||||
plugin.manager.entity_reference_selection:
|
||||
class: Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManager
|
||||
parent: default_plugin_manager
|
||||
|
@ -700,6 +714,11 @@ services:
|
|||
- { name: http_middleware, priority: 50 }
|
||||
calls:
|
||||
- [setContainer, ['@service_container']]
|
||||
http_middleware.cors:
|
||||
class: Asm89\Stack\Cors
|
||||
arguments: ['%cors.config%']
|
||||
tags:
|
||||
- { name: http_middleware }
|
||||
psr7.http_foundation_factory:
|
||||
class: Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory
|
||||
psr7.http_message_factory:
|
||||
|
@ -899,6 +918,10 @@ services:
|
|||
class: Drupal\Core\Routing\RequestFormatRouteFilter
|
||||
tags:
|
||||
- { name: route_filter }
|
||||
method_filter:
|
||||
class: Drupal\Core\Routing\MethodFilter
|
||||
tags:
|
||||
- { name: route_filter, priority: 1 }
|
||||
content_type_header_matcher:
|
||||
class: Drupal\Core\Routing\ContentTypeHeaderMatcher
|
||||
tags:
|
||||
|
@ -1097,6 +1120,11 @@ services:
|
|||
tags:
|
||||
- { name: access_check, applies_to: _csrf_token, needs_incoming_request: TRUE }
|
||||
arguments: ['@csrf_token']
|
||||
access_check.header.csrf:
|
||||
class: Drupal\Core\Access\CsrfRequestHeaderAccessCheck
|
||||
arguments: ['@session_configuration', '@csrf_token']
|
||||
tags:
|
||||
- { name: access_check }
|
||||
maintenance_mode:
|
||||
class: Drupal\Core\Site\MaintenanceMode
|
||||
arguments: ['@state', '@current_user']
|
||||
|
@ -1256,7 +1284,7 @@ services:
|
|||
- { name: backend_overridable }
|
||||
plugin.manager.mail:
|
||||
class: Drupal\Core\Mail\MailManager
|
||||
arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@config.factory', '@logger.factory', '@string_translation']
|
||||
arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@config.factory', '@logger.factory', '@string_translation', '@renderer']
|
||||
plugin.manager.condition:
|
||||
class: Drupal\Core\Condition\ConditionManager
|
||||
parent: default_plugin_manager
|
||||
|
@ -1427,7 +1455,7 @@ services:
|
|||
arguments: ['@current_user', '@session_handler.write_safe']
|
||||
user_permissions_hash_generator:
|
||||
class: Drupal\Core\Session\PermissionsHashGenerator
|
||||
arguments: ['@private_key', '@cache.default', '@cache.static']
|
||||
arguments: ['@private_key', '@cache.bootstrap', '@cache.static']
|
||||
current_user:
|
||||
class: Drupal\Core\Session\AccountProxy
|
||||
session_configuration:
|
||||
|
@ -1563,10 +1591,13 @@ services:
|
|||
tags:
|
||||
- { name: mime_type_guesser }
|
||||
lazy: true
|
||||
# Currently needs to be public as it is called by
|
||||
# \Drupal\Core\Render\Element\StatusMessages.
|
||||
# @todo Consider making this service private again after
|
||||
# https://www.drupal.org/node/2367555 lands.
|
||||
render_placeholder_generator:
|
||||
class: Drupal\Core\Render\PlaceholderGenerator
|
||||
arguments: ['%renderer.config%']
|
||||
public: false
|
||||
render_cache:
|
||||
class: Drupal\Core\Render\PlaceholderingRenderCache
|
||||
arguments: ['@request_stack', '@cache_factory', '@cache_contexts_manager', '@render_placeholder_generator']
|
||||
|
@ -1600,7 +1631,8 @@ services:
|
|||
update.post_update_registry_factory:
|
||||
class: Drupal\Core\Update\UpdateRegistryFactory
|
||||
parent: container.trait
|
||||
|
||||
uuid:
|
||||
class: Drupal\Component\Uuid\Php
|
||||
response_filter.active_link:
|
||||
class: Drupal\Core\EventSubscriber\ActiveLinkResponseFilter
|
||||
arguments: ['@current_user', '@path.current', '@path.matcher', '@language_manager']
|
||||
|
|
|
@ -34,7 +34,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse;
|
|||
function _batch_page(Request $request) {
|
||||
$batch = &batch_get();
|
||||
|
||||
if (!($request_id = $request->get('id'))) {
|
||||
if (!($request_id = $request->query->get('id'))) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ function _batch_page(Request $request) {
|
|||
}
|
||||
}
|
||||
|
||||
$op = $request->get('op', '');
|
||||
$op = $request->query->get('op', '');
|
||||
switch ($op) {
|
||||
case 'start':
|
||||
case 'do_nojs':
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Functions that need to be loaded on every Drupal request.
|
||||
|
@ -11,6 +12,7 @@ use Drupal\Component\Utility\Unicode;
|
|||
use Drupal\Core\Logger\RfcLogLevel;
|
||||
use Drupal\Core\Render\Markup;
|
||||
use Drupal\Component\Render\MarkupInterface;
|
||||
use Drupal\Core\Test\TestDatabase;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Site\Settings;
|
||||
use Drupal\Core\Utility\Error;
|
||||
|
@ -599,7 +601,7 @@ function _drupal_exception_handler_additional($exception, $exception2) {
|
|||
* @param string $new_prefix
|
||||
* Internal use only. A new prefix to be stored.
|
||||
*
|
||||
* @return string|FALSE
|
||||
* @return string|false
|
||||
* Either the simpletest prefix (the string "simpletest" followed by any
|
||||
* number of digits) or FALSE if the user agent does not contain a valid
|
||||
* HMAC and timestamp.
|
||||
|
@ -622,7 +624,7 @@ function drupal_valid_test_ua($new_prefix = NULL) {
|
|||
// string.
|
||||
$http_user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : NULL;
|
||||
$user_agent = isset($_COOKIE['SIMPLETEST_USER_AGENT']) ? $_COOKIE['SIMPLETEST_USER_AGENT'] : $http_user_agent;
|
||||
if (isset($user_agent) && preg_match("/^(simpletest\d+):(.+):(.+):(.+)$/", $user_agent, $matches)) {
|
||||
if (isset($user_agent) && preg_match("/^simple(\w+\d+):(.+):(.+):(.+)$/", $user_agent, $matches)) {
|
||||
list(, $prefix, $time, $salt, $hmac) = $matches;
|
||||
$check_string = $prefix . ':' . $time . ':' . $salt;
|
||||
// Read the hash salt prepared by drupal_generate_test_ua().
|
||||
|
@ -630,7 +632,8 @@ function drupal_valid_test_ua($new_prefix = NULL) {
|
|||
// handlers are set up. While Drupal's error handling may be properly
|
||||
// configured on production sites, the server's PHP error_reporting may not.
|
||||
// Ensure that no information leaks on production sites.
|
||||
$key_file = DRUPAL_ROOT . '/sites/simpletest/' . substr($prefix, 10) . '/.htkey';
|
||||
$test_db = new TestDatabase($prefix);
|
||||
$key_file = DRUPAL_ROOT . '/' . $test_db->getTestSitePath() . '/.htkey';
|
||||
if (!is_readable($key_file)) {
|
||||
header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
|
||||
exit;
|
||||
|
@ -640,11 +643,15 @@ function drupal_valid_test_ua($new_prefix = NULL) {
|
|||
$key = $private_key . filectime(__FILE__) . fileinode(__FILE__);
|
||||
$time_diff = REQUEST_TIME - $time;
|
||||
$test_hmac = Crypt::hmacBase64($check_string, $key);
|
||||
// Since we are making a local request a 5 second time window is allowed,
|
||||
// Since we are making a local request a 600 second time window is allowed,
|
||||
// and the HMAC must match.
|
||||
if ($time_diff >= 0 && $time_diff <= 5 && $hmac === $test_hmac) {
|
||||
if ($time_diff >= 0 && $time_diff <= 600 && $hmac === $test_hmac) {
|
||||
$test_prefix = $prefix;
|
||||
}
|
||||
else {
|
||||
header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden (SIMPLETEST_USER_AGENT invalid)');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
return $test_prefix;
|
||||
}
|
||||
|
@ -657,7 +664,8 @@ function drupal_generate_test_ua($prefix) {
|
|||
|
||||
if (!isset($key) || $last_prefix != $prefix) {
|
||||
$last_prefix = $prefix;
|
||||
$key_file = DRUPAL_ROOT . '/sites/simpletest/' . substr($prefix, 10) . '/.htkey';
|
||||
$test_db = new TestDatabase($prefix);
|
||||
$key_file = DRUPAL_ROOT . '/' . $test_db->getTestSitePath() . '/.htkey';
|
||||
// When issuing an outbound HTTP client request from within an inbound test
|
||||
// request, then the outbound request has to use the same User-Agent header
|
||||
// as the inbound request. A newly generated private key for the same test
|
||||
|
@ -682,7 +690,7 @@ function drupal_generate_test_ua($prefix) {
|
|||
// Generate a moderately secure HMAC based on the database credentials.
|
||||
$salt = uniqid('', TRUE);
|
||||
$check_string = $prefix . ':' . time() . ':' . $salt;
|
||||
return $check_string . ':' . Crypt::hmacBase64($check_string, $key);
|
||||
return 'simple' . $check_string . ':' . Crypt::hmacBase64($check_string, $key);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -464,7 +464,7 @@ function entity_view_multiple(array $entities, $view_mode, $langcode = NULL, $re
|
|||
* 'bundle' => $bundle,
|
||||
* 'mode' => $view_mode,
|
||||
* 'status' => TRUE,
|
||||
* ));
|
||||
* );
|
||||
* \Drupal::entityTypeManager()
|
||||
* ->getStorage('entity_view_display')
|
||||
* ->create($values);
|
||||
|
@ -475,7 +475,7 @@ function entity_view_multiple(array $entities, $view_mode, $langcode = NULL, $re
|
|||
*/
|
||||
function entity_get_display($entity_type, $bundle, $view_mode) {
|
||||
// Try loading the display from configuration.
|
||||
$display = entity_load('entity_view_display', $entity_type . '.' . $bundle . '.' . $view_mode);
|
||||
$display = EntityViewDisplay::load($entity_type . '.' . $bundle . '.' . $view_mode);
|
||||
|
||||
// If not found, create a fresh display object. We do not preemptively create
|
||||
// new entity_view_display configuration entries for each existing entity type
|
||||
|
@ -555,7 +555,7 @@ function entity_get_display($entity_type, $bundle, $view_mode) {
|
|||
*/
|
||||
function entity_get_form_display($entity_type, $bundle, $form_mode) {
|
||||
// Try loading the entity from configuration.
|
||||
$entity_form_display = entity_load('entity_form_display', $entity_type . '.' . $bundle . '.' . $form_mode);
|
||||
$entity_form_display = EntityFormDisplay::load($entity_type . '.' . $bundle . '.' . $form_mode);
|
||||
|
||||
// If not found, create a fresh entity object. We do not preemptively create
|
||||
// new entity form display configuration entries for each existing entity type
|
||||
|
|
|
@ -80,6 +80,7 @@ function _drupal_error_handler_real($error_level, $message, $filename, $line, $c
|
|||
'%line' => $caller['line'],
|
||||
'severity_level' => $severity_level,
|
||||
'backtrace' => $backtrace,
|
||||
'@backtrace_string' => (new \Exception())->getTraceAsString(),
|
||||
), $recoverable || $to_string);
|
||||
}
|
||||
}
|
||||
|
@ -116,9 +117,9 @@ function error_displayable($error = NULL) {
|
|||
*
|
||||
* @param $error
|
||||
* An array with the following keys: %type, @message, %function, %file,
|
||||
* %line, severity_level, and backtrace. All the parameters are plain-text,
|
||||
* with the exception of @message, which needs to be an HTML string, and
|
||||
* backtrace, which is a standard PHP backtrace.
|
||||
* %line, @backtrace_string, severity_level, and backtrace. All the parameters
|
||||
* are plain-text, with the exception of @message, which needs to be an HTML
|
||||
* string, and backtrace, which is a standard PHP backtrace.
|
||||
* @param bool $fatal
|
||||
* TRUE for:
|
||||
* - An exception is thrown and not caught by something else.
|
||||
|
@ -163,18 +164,18 @@ function _drupal_log_error($error, $fatal = FALSE) {
|
|||
// installer.
|
||||
if (\Drupal::hasService('logger.factory')) {
|
||||
try {
|
||||
\Drupal::logger('php')->log($error['severity_level'], '%type: @message in %function (line %line of %file).', $error);
|
||||
\Drupal::logger('php')->log($error['severity_level'], '%type: @message in %function (line %line of %file) @backtrace_string.', $error);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
// We can't log, for example because the database connection is not
|
||||
// available. At least try to log to PHP error log.
|
||||
error_log(strtr('Failed to log error: %type: @message in %function (line %line of %file).', $error));
|
||||
error_log(strtr('Failed to log error: %type: @message in %function (line %line of %file). @backtrace_string', $error));
|
||||
}
|
||||
}
|
||||
|
||||
// Log fatal errors, so developers can find and debug them.
|
||||
if ($fatal) {
|
||||
error_log(sprintf('%s: %s in %s on line %d', $error['%type'], $error['@message'], $error['%file'], $error['%line']));
|
||||
error_log(sprintf('%s: %s in %s on line %d %s', $error['%type'], $error['@message'], $error['%file'], $error['%line'], $error['@backtrace_string']));
|
||||
}
|
||||
|
||||
if (PHP_SAPI === 'cli') {
|
||||
|
|
|
@ -5,11 +5,13 @@
|
|||
* API for handling file uploads and server file management.
|
||||
*/
|
||||
|
||||
use Drupal\Component\FileSystem\FileSystem as ComponentFileSystem;
|
||||
use Drupal\Component\Utility\Unicode;
|
||||
use Drupal\Component\Utility\UrlHelper;
|
||||
use Drupal\Component\PhpStorage\FileStorage;
|
||||
use Drupal\Component\Utility\Bytes;
|
||||
use Drupal\Core\File\FileSystem;
|
||||
use Drupal\Core\Site\Settings;
|
||||
use Drupal\Core\StreamWrapper\PublicStream;
|
||||
use Drupal\Core\StreamWrapper\PrivateStream;
|
||||
|
||||
|
@ -978,7 +980,7 @@ function file_unmanaged_save_data($data, $destination = NULL, $replace = FILE_EX
|
|||
* @param $options
|
||||
* An associative array of additional options, with the following elements:
|
||||
* - 'nomask': The preg_match() regular expression for files to be excluded.
|
||||
* There is no default.
|
||||
* Defaults to the 'file_scan_ignore_directories' setting.
|
||||
* - 'callback': The callback function to call for each match. There is no
|
||||
* default callback.
|
||||
* - 'recurse': When TRUE, the directory scan will recurse the entire tree
|
||||
|
@ -1011,6 +1013,18 @@ function file_scan_directory($dir, $mask, $options = array(), $depth = 0) {
|
|||
$dir_has_slash = (substr($dir, -1) === '/');
|
||||
}
|
||||
|
||||
// Allow directories specified in settings.php to be ignored. You can use this
|
||||
// to not check for files in common special-purpose directories. For example,
|
||||
// node_modules and bower_components. Ignoring irrelevant directories is a
|
||||
// performance boost.
|
||||
if (!isset($options['nomask'])) {
|
||||
$ignore_directories = Settings::get('file_scan_ignore_directories', []);
|
||||
array_walk($ignore_directories, function(&$value) {
|
||||
$value = preg_quote($value, '/');
|
||||
});
|
||||
$default_nomask = '/^' . implode('|', $ignore_directories) . '$/';
|
||||
}
|
||||
|
||||
$options['key'] = in_array($options['key'], array('uri', 'filename', 'name')) ? $options['key'] : 'uri';
|
||||
$files = array();
|
||||
// Avoid warnings when opendir does not have the permissions to open a
|
||||
|
@ -1019,7 +1033,10 @@ function file_scan_directory($dir, $mask, $options = array(), $depth = 0) {
|
|||
if ($handle = @opendir($dir)) {
|
||||
while (FALSE !== ($filename = readdir($handle))) {
|
||||
// Skip this file if it matches the nomask or starts with a dot.
|
||||
if ($filename[0] != '.' && !(isset($options['nomask']) && preg_match($options['nomask'], $filename))) {
|
||||
if ($filename[0] != '.'
|
||||
&& !(isset($options['nomask']) && preg_match($options['nomask'], $filename))
|
||||
&& !(!empty($default_nomask) && preg_match($default_nomask, $filename))
|
||||
) {
|
||||
if ($depth == 0 && $dir_has_slash) {
|
||||
$uri = "$dir$filename";
|
||||
}
|
||||
|
@ -1173,7 +1190,7 @@ function file_directory_temp() {
|
|||
if (empty($temporary_directory)) {
|
||||
// Needs set up.
|
||||
$config = \Drupal::configFactory()->getEditable('system.file');
|
||||
$temporary_directory = file_directory_os_temp();
|
||||
$temporary_directory = ComponentFileSystem::getOsTemporaryDirectory();
|
||||
|
||||
if (empty($temporary_directory)) {
|
||||
// If no directory has been found default to 'files/tmp'.
|
||||
|
@ -1198,34 +1215,12 @@ function file_directory_temp() {
|
|||
*
|
||||
* @return mixed
|
||||
* A string containing the path to the temporary directory.
|
||||
*
|
||||
* @deprecated in Drupal 8.3.x-dev, will be removed before Drupal 9.0.0.
|
||||
* Use \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory().
|
||||
*/
|
||||
function file_directory_os_temp() {
|
||||
$directories = array();
|
||||
|
||||
// Has PHP been set with an upload_tmp_dir?
|
||||
if (ini_get('upload_tmp_dir')) {
|
||||
$directories[] = ini_get('upload_tmp_dir');
|
||||
}
|
||||
|
||||
// Operating system specific dirs.
|
||||
if (substr(PHP_OS, 0, 3) == 'WIN') {
|
||||
$directories[] = 'c:\\windows\\temp';
|
||||
$directories[] = 'c:\\winnt\\temp';
|
||||
}
|
||||
else {
|
||||
$directories[] = '/tmp';
|
||||
}
|
||||
// PHP may be able to find an alternative tmp directory.
|
||||
$directories[] = sys_get_temp_dir();
|
||||
|
||||
foreach ($directories as $directory) {
|
||||
if (is_dir($directory) && is_writable($directory)) {
|
||||
// Both sys_get_temp_dir() and ini_get('upload_tmp_dir') can return paths
|
||||
// with a trailing directory separator.
|
||||
return rtrim($directory, DIRECTORY_SEPARATOR);
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
return ComponentFileSystem::getOsTemporaryDirectory();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -254,6 +254,7 @@ function template_preprocess_details(&$variables) {
|
|||
$variables['description'] = (!empty($element['#description'])) ? $element['#description'] : '';
|
||||
$variables['children'] = (isset($element['#children'])) ? $element['#children'] : '';
|
||||
$variables['value'] = (isset($element['#value'])) ? $element['#value'] : '';
|
||||
$variables['required'] = !empty($element['#required']) ? $element['#required'] : NULL;
|
||||
|
||||
// Suppress error messages.
|
||||
$variables['errors'] = NULL;
|
||||
|
@ -592,7 +593,8 @@ function template_preprocess_form_element_label(&$variables) {
|
|||
* // 1 (or no value explicitly set) means the operation is finished
|
||||
* // and the batch processing can continue to the next operation.
|
||||
*
|
||||
* $nodes = entity_load_multiple_by_properties('node', array('uid' => $uid, 'type' => $type));
|
||||
* $nodes = \Drupal::entityTypeManager()->getStorage('node')
|
||||
* ->loadByProperties(['uid' => $uid, 'type' => $type]);
|
||||
* $node = reset($nodes);
|
||||
* $context['results'][] = $node->id() . ' : ' . SafeMarkup::checkPlain($node->label());
|
||||
* $context['message'] = SafeMarkup::checkPlain($node->label());
|
||||
|
|
|
@ -1580,7 +1580,7 @@ function install_download_additional_translations_operations(&$install_state) {
|
|||
\Drupal::moduleHandler()->loadInclude('locale', 'bulk.inc');
|
||||
|
||||
$langcode = $install_state['parameters']['langcode'];
|
||||
if (!($language = entity_load('configurable_language', $langcode))) {
|
||||
if (!($language = ConfigurableLanguage::load($langcode))) {
|
||||
// Create the language if not already shipped with a profile.
|
||||
$language = ConfigurableLanguage::createFromLangcode($langcode);
|
||||
}
|
||||
|
|
|
@ -504,7 +504,7 @@ function drupal_install_config_directories() {
|
|||
// Bail out using a similar error message as in system_requirements().
|
||||
if (!file_prepare_directory($config_directories[CONFIG_SYNC_DIRECTORY], FILE_CREATE_DIRECTORY)
|
||||
&& !file_exists($config_directories[CONFIG_SYNC_DIRECTORY])) {
|
||||
throw new Exception(t('The directory %directory could not be created or could not be made writable. To proceed with the installation, either create the directory and modify its permissions manually or ensure that the installer has the permissions to create it automatically. For more information, see the <a href=":handbook_url">online handbook</a>.', array(
|
||||
throw new Exception(t('The directory %directory could not be created. To proceed with the installation, either create the directory or ensure that the installer has the permissions to create it automatically. For more information, see the <a href=":handbook_url">online handbook</a>.', array(
|
||||
'%directory' => config_get_config_directory(CONFIG_SYNC_DIRECTORY),
|
||||
':handbook_url' => 'https://www.drupal.org/server-permissions',
|
||||
)));
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
* Initiates a browser-based installation of Drupal.
|
||||
*/
|
||||
|
||||
use Drupal\Component\Utility\OpCodeCache;
|
||||
|
||||
// Change the directory to the Drupal root.
|
||||
chdir('..');
|
||||
// Store the Drupal root path.
|
||||
|
@ -28,12 +30,15 @@ if (version_compare(PHP_VERSION, '5.5.9') < 0) {
|
|||
exit;
|
||||
}
|
||||
|
||||
if (function_exists('opcache_get_status') && opcache_get_status()['opcache_enabled'] && !ini_get('opcache.save_comments')) {
|
||||
// Initialize the autoloader.
|
||||
$class_loader = require_once $root_path . '/autoload.php';
|
||||
|
||||
// If OPCache is in use, ensure opcache.save_comments is enabled.
|
||||
if (OpCodeCache::isEnabled() && !ini_get('opcache.save_comments')) {
|
||||
print 'Systems with OPcache installed must have <a href="http://php.net/manual/en/opcache.configuration.php#ini.opcache.save-comments">opcache.save_comments</a> enabled.';
|
||||
exit();
|
||||
}
|
||||
|
||||
// Start the installer.
|
||||
$class_loader = require_once $root_path . '/autoload.php';
|
||||
require_once $root_path . '/core/includes/install.core.inc';
|
||||
install_drupal($class_loader);
|
||||
|
|
|
@ -81,7 +81,7 @@ class Drupal {
|
|||
/**
|
||||
* The current system version.
|
||||
*/
|
||||
const VERSION = '8.1.10';
|
||||
const VERSION = '8.2.0';
|
||||
|
||||
/**
|
||||
* Core API compatibility.
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace Drupal\Component\Annotation\Plugin\Discovery;
|
||||
|
||||
use Drupal\Component\Annotation\AnnotationInterface;
|
||||
use Drupal\Component\FileCache\FileCacheFactory;
|
||||
use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
|
||||
use Drupal\Component\Annotation\Reflection\MockFileFinder;
|
||||
use Doctrine\Common\Annotations\SimpleAnnotationReader;
|
||||
|
@ -48,6 +49,13 @@ class AnnotatedClassDiscovery implements DiscoveryInterface {
|
|||
*/
|
||||
protected $annotationNamespaces = [];
|
||||
|
||||
/**
|
||||
* The file cache object.
|
||||
*
|
||||
* @var \Drupal\Component\FileCache\FileCacheInterface
|
||||
*/
|
||||
protected $fileCache;
|
||||
|
||||
/**
|
||||
* Constructs a new instance.
|
||||
*
|
||||
|
@ -64,6 +72,10 @@ class AnnotatedClassDiscovery implements DiscoveryInterface {
|
|||
$this->pluginNamespaces = $plugin_namespaces;
|
||||
$this->pluginDefinitionAnnotationName = $plugin_definition_annotation_name;
|
||||
$this->annotationNamespaces = $annotation_namespaces;
|
||||
|
||||
$file_cache_suffix = str_replace('\\', '_', $plugin_definition_annotation_name);
|
||||
$file_cache_suffix .= ':' . hash('crc32b', serialize($annotation_namespaces));
|
||||
$this->fileCache = FileCacheFactory::get('annotation_discovery:' . $file_cache_suffix);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -110,6 +122,14 @@ class AnnotatedClassDiscovery implements DiscoveryInterface {
|
|||
);
|
||||
foreach ($iterator as $fileinfo) {
|
||||
if ($fileinfo->getExtension() == 'php') {
|
||||
if ($cached = $this->fileCache->get($fileinfo->getPathName())) {
|
||||
if (isset($cached['id'])) {
|
||||
// Explicitly unserialize this to create a new object instance.
|
||||
$definitions[$cached['id']] = unserialize($cached['content']);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
$sub_path = $iterator->getSubIterator()->getSubPath();
|
||||
$sub_path = $sub_path ? str_replace(DIRECTORY_SEPARATOR, '\\', $sub_path) . '\\' : '';
|
||||
$class = $namespace . '\\' . $sub_path . $fileinfo->getBasename('.php');
|
||||
|
@ -123,7 +143,16 @@ class AnnotatedClassDiscovery implements DiscoveryInterface {
|
|||
/** @var $annotation \Drupal\Component\Annotation\AnnotationInterface */
|
||||
if ($annotation = $reader->getClassAnnotation($parser->getReflectionClass(), $this->pluginDefinitionAnnotationName)) {
|
||||
$this->prepareAnnotationDefinition($annotation, $class);
|
||||
$definitions[$annotation->getId()] = $annotation->get();
|
||||
|
||||
$id = $annotation->getId();
|
||||
$content = $annotation->get();
|
||||
$definitions[$id] = $content;
|
||||
// Explicitly serialize this to create a new object instance.
|
||||
$this->fileCache->set($fileinfo->getPathName(), ['id' => $id, 'content' => serialize($content)]);
|
||||
}
|
||||
else {
|
||||
// Store a NULL object, so the file is not reparsed again.
|
||||
$this->fileCache->set($fileinfo->getPathName(), [NULL]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,8 +8,9 @@
|
|||
"php": ">=5.5.9",
|
||||
"doctrine/common": "2.5.*",
|
||||
"doctrine/annotations": "1.2.*",
|
||||
"drupal/core-plugin": "~8.1",
|
||||
"drupal/core-utility": "~8.1"
|
||||
"drupal/core-fileCache": "~8.2",
|
||||
"drupal/core-plugin": "~8.2",
|
||||
"drupal/core-utility": "~8.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -1,41 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Component\Assertion\Handle.
|
||||
*
|
||||
* For PHP 5 this contains \AssertionError as well.
|
||||
*/
|
||||
|
||||
namespace {
|
||||
|
||||
if (!class_exists('AssertionError', FALSE)) {
|
||||
|
||||
/**
|
||||
* Emulates PHP 7 AssertionError as closely as possible.
|
||||
*
|
||||
* We force this class to exist at the root namespace for PHP 5.
|
||||
* This class exists natively in PHP 7. Note that in PHP 7 it extends from
|
||||
* Error, not Exception, but that isn't possible for PHP 5 - all exceptions
|
||||
* must extend from exception.
|
||||
*/
|
||||
class AssertionError extends Exception {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct($message = '', $code = 0, Exception $previous = NULL, $file = '', $line = 0) {
|
||||
parent::__construct($message, $code, $previous);
|
||||
// Preserve the filename and line number of the assertion failure.
|
||||
$this->file = $file;
|
||||
$this->line = $line;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace Drupal\Component\Assertion {
|
||||
namespace Drupal\Component\Assertion;
|
||||
|
||||
/**
|
||||
* Handler for runtime assertion failures.
|
||||
|
@ -56,6 +21,9 @@ class Handle {
|
|||
assert_options(ASSERT_WARNING, FALSE);
|
||||
|
||||
if (version_compare(PHP_VERSION, '7.0.0-dev') < 0) {
|
||||
if (!class_exists('AssertionError', FALSE)) {
|
||||
require __DIR__ . '/global_namespace_php5.php';
|
||||
}
|
||||
// PHP 5 - create a handler to throw the exception directly.
|
||||
assert_options(ASSERT_CALLBACK, function($file = '', $line = 0, $code = '', $message = '') {
|
||||
if (empty($message)) {
|
||||
|
@ -71,5 +39,3 @@ class Handle {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -108,7 +108,7 @@ class Inspector {
|
|||
* Use this instead of is_string() alone unless the argument being an object
|
||||
* in any way will cause a problem.
|
||||
*
|
||||
* @param mixed string
|
||||
* @param mixed $string
|
||||
* Variable to be examined
|
||||
*
|
||||
* @return bool
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains PHP5 version of the \AssertionError class.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Emulates PHP 7 AssertionError as closely as possible.
|
||||
*
|
||||
* This class is declared in the global namespace. It will only be included by
|
||||
* \Drupal\Component\Assertion\Handle for PHP5 since this class exists natively
|
||||
* in PHP 7. Note that in PHP 7 it extends from Error, not Exception, but that
|
||||
* isn't possible for PHP 5 - all exceptions must extend from exception.
|
||||
*/
|
||||
class AssertionError extends Exception {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct($message = '', $code = 0, Exception $previous = NULL, $file = '', $line = 0) {
|
||||
parent::__construct($message, $code, $previous);
|
||||
// Preserve the filename and line number of the assertion failure.
|
||||
$this->file = $file;
|
||||
$this->line = $line;
|
||||
}
|
||||
|
||||
}
|
32
core/lib/Drupal/Component/ClassFinder/ClassFinder.php
Normal file
32
core/lib/Drupal/Component/ClassFinder/ClassFinder.php
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Component\ClassFinder;
|
||||
|
||||
use Doctrine\Common\Reflection\ClassFinderInterface;
|
||||
|
||||
/**
|
||||
* A Utility class that uses active autoloaders to find a file for a class.
|
||||
*/
|
||||
class ClassFinder implements ClassFinderInterface {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function findFile($class) {
|
||||
$loaders = spl_autoload_functions();
|
||||
foreach ($loaders as $loader) {
|
||||
if (is_array($loader) && isset($loader[0]) && is_object($loader[0]) && method_exists($loader[0], 'findFile')) {
|
||||
$file = call_user_func_array([$loader[0], 'findFile'], [$class]);
|
||||
// Different implementations return different empty values. For example,
|
||||
// \Composer\Autoload\ClassLoader::findFile() returns FALSE whilst
|
||||
// \Doctrine\Common\Reflection\ClassFinderInterface::findFile()
|
||||
// documents that a NULL should be returned.
|
||||
if (!empty($file)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
}
|
339
core/lib/Drupal/Component/ClassFinder/LICENSE.txt
Normal file
339
core/lib/Drupal/Component/ClassFinder/LICENSE.txt
Normal file
|
@ -0,0 +1,339 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
12
core/lib/Drupal/Component/ClassFinder/README.txt
Normal file
12
core/lib/Drupal/Component/ClassFinder/README.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
The Drupal ClassFinder Component
|
||||
|
||||
Thanks for using this Drupal component.
|
||||
|
||||
You can participate in its development on Drupal.org, through our issue system:
|
||||
https://www.drupal.org/project/issues/drupal
|
||||
|
||||
You can get the full Drupal repo here:
|
||||
https://www.drupal.org/project/drupal/git-instructions
|
||||
|
||||
You can browse the full Drupal repo here:
|
||||
http://cgit.drupalcode.org/drupal
|
18
core/lib/Drupal/Component/ClassFinder/TESTING.txt
Normal file
18
core/lib/Drupal/Component/ClassFinder/TESTING.txt
Normal file
|
@ -0,0 +1,18 @@
|
|||
HOW-TO: Test this Drupal component
|
||||
|
||||
In order to test this component, you'll need to get the entire Drupal repo and
|
||||
run the tests there.
|
||||
|
||||
You'll find the tests under core/tests/Drupal/Tests/Component.
|
||||
|
||||
You can get the full Drupal repo here:
|
||||
https://www.drupal.org/project/drupal/git-instructions
|
||||
|
||||
You can find more information about running PHPUnit tests with Drupal here:
|
||||
https://www.drupal.org/node/2116263
|
||||
|
||||
Each component in the Drupal\Component namespace has its own annotated test
|
||||
group. You can use this group to run only the tests for this component. Like
|
||||
this:
|
||||
|
||||
$ ./vendor/bin/phpunit -c core --group ClassFinder
|
16
core/lib/Drupal/Component/ClassFinder/composer.json
Normal file
16
core/lib/Drupal/Component/ClassFinder/composer.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"name": "drupal/core-class-finder",
|
||||
"description": "This class provides a class finding utility.",
|
||||
"keywords": ["drupal"],
|
||||
"homepage": "https://www.drupal.org/project/drupal",
|
||||
"license": "GPL-2.0+",
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"doctrine/common": "2.5.*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Drupal\\Component\\ClassFinder\\": ""
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
"license": "GPL-2.0+",
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"drupal/core-utility": "~8.1"
|
||||
"drupal/core-utility": "~8.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -440,7 +440,7 @@ class OptimizedPhpArrayDumper extends Dumper {
|
|||
*
|
||||
* @param string $id
|
||||
* The ID of the service to get a reference for.
|
||||
* @param \Symfony\Component\DependencyInjection\Reference|NULL $reference
|
||||
* @param \Symfony\Component\DependencyInjection\Reference|null $reference
|
||||
* (optional) The reference object to process; needed to get the invalid
|
||||
* behavior value.
|
||||
*
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"license": "GPL-2.0+",
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"drupal/utility": "~8.1"
|
||||
"drupal/utility": "~8.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -61,7 +61,7 @@ class YamlDiscovery implements DiscoverableInterface {
|
|||
foreach ($provider_by_files as $file => $provider) {
|
||||
// If a file is empty or its contents are commented out, return an empty
|
||||
// array instead of NULL for type consistency.
|
||||
$all[$provider] = Yaml::decode(file_get_contents($file)) ?: [];
|
||||
$all[$provider] = $this->decode($file);
|
||||
$file_cache->set($file, $all[$provider]);
|
||||
}
|
||||
}
|
||||
|
@ -69,6 +69,17 @@ class YamlDiscovery implements DiscoverableInterface {
|
|||
return $all;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode a YAML file.
|
||||
*
|
||||
* @param string $file
|
||||
* Yaml file path.
|
||||
* @return array
|
||||
*/
|
||||
protected function decode($file) {
|
||||
return Yaml::decode(file_get_contents($file)) ?: [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of file paths, keyed by provider.
|
||||
*
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
"license": "GPL-2.0+",
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"drupal/core-filecache": "~8.1",
|
||||
"drupal/core-serialization": "~8.1"
|
||||
"drupal/core-filecache": "~8.2",
|
||||
"drupal/core-serialization": "~8.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -156,6 +156,35 @@ class ContainerAwareEventDispatcher implements EventDispatcherInterface {
|
|||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getListenerPriority($eventName, $listener) {
|
||||
// Parts copied from \Symfony\Component\EventDispatcher, that's why you see
|
||||
// a yoda condition here.
|
||||
if (!isset($this->listeners[$eventName])) {
|
||||
return;
|
||||
}
|
||||
foreach ($this->listeners[$eventName] as $priority => $listeners) {
|
||||
if (FALSE !== ($key = array_search(['callable' => $listener], $listeners, TRUE))) {
|
||||
return $priority;
|
||||
}
|
||||
}
|
||||
// Resolve service definitions if the listener has not been found so far.
|
||||
foreach ($this->listeners[$eventName] as $priority => &$definitions) {
|
||||
foreach ($definitions as $key => &$definition) {
|
||||
if (!isset($definition['callable'])) {
|
||||
// Once the callable is retrieved we keep it for subsequent method
|
||||
// invocations on this class.
|
||||
$definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]];
|
||||
if ($definition['callable'] === $listener) {
|
||||
return $priority;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
|
|
@ -7,6 +7,11 @@ namespace Drupal\Component\FileCache;
|
|||
*/
|
||||
class FileCacheFactory {
|
||||
|
||||
/**
|
||||
* The configuration key to disable FileCache completely.
|
||||
*/
|
||||
const DISABLE_CACHE = 'file_cache_disable';
|
||||
|
||||
/**
|
||||
* The configuration used to create FileCache objects.
|
||||
*
|
||||
|
@ -34,23 +39,35 @@ class FileCacheFactory {
|
|||
* The initialized FileCache object.
|
||||
*/
|
||||
public static function get($collection, $default_configuration = []) {
|
||||
$default_configuration += [
|
||||
// If there is a special key in the configuration, disable FileCache completely.
|
||||
if (!empty(static::$configuration[static::DISABLE_CACHE])) {
|
||||
return new NullFileCache('', '');
|
||||
}
|
||||
|
||||
$configuration = [];
|
||||
|
||||
// Check for a collection specific setting first.
|
||||
if (isset(static::$configuration[$collection])) {
|
||||
$configuration += static::$configuration[$collection];
|
||||
}
|
||||
// Then check if a default configuration has been provided.
|
||||
if (!empty($default_configuration)) {
|
||||
$configuration += $default_configuration;
|
||||
}
|
||||
// Last check if a default setting has been provided.
|
||||
if (isset(static::$configuration['default'])) {
|
||||
$configuration += static::$configuration['default'];
|
||||
}
|
||||
|
||||
// Ensure that all properties are set.
|
||||
$fallback_configuration = [
|
||||
'class' => '\Drupal\Component\FileCache\FileCache',
|
||||
'collection' => $collection,
|
||||
'cache_backend_class' => NULL,
|
||||
'cache_backend_configuration' => [],
|
||||
];
|
||||
|
||||
$configuration = [];
|
||||
if (isset(static::$configuration[$collection])) {
|
||||
$configuration = static::$configuration[$collection];
|
||||
}
|
||||
elseif (isset(static::$configuration['default'])) {
|
||||
$configuration = static::$configuration['default'];
|
||||
}
|
||||
|
||||
// Add defaults to the configuration.
|
||||
$configuration = $configuration + $default_configuration;
|
||||
$configuration = $configuration + $fallback_configuration;
|
||||
|
||||
$class = $configuration['class'];
|
||||
return new $class(static::getPrefix(), $configuration['collection'], $configuration['cache_backend_class'], $configuration['cache_backend_configuration']);
|
||||
|
|
46
core/lib/Drupal/Component/FileSystem/FileSystem.php
Normal file
46
core/lib/Drupal/Component/FileSystem/FileSystem.php
Normal file
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Component\FileSystem;
|
||||
|
||||
/**
|
||||
* Provides file system functions.
|
||||
*/
|
||||
class FileSystem {
|
||||
|
||||
/**
|
||||
* Discovers a writable system-appropriate temporary directory.
|
||||
*
|
||||
* @return string|false
|
||||
* A string containing the path to the temporary directory, or FALSE if no
|
||||
* suitable temporary directory can be found.
|
||||
*/
|
||||
public static function getOsTemporaryDirectory() {
|
||||
$directories = array();
|
||||
|
||||
// Has PHP been set with an upload_tmp_dir?
|
||||
if (ini_get('upload_tmp_dir')) {
|
||||
$directories[] = ini_get('upload_tmp_dir');
|
||||
}
|
||||
|
||||
// Operating system specific dirs.
|
||||
if (substr(PHP_OS, 0, 3) == 'WIN') {
|
||||
$directories[] = 'c:\\windows\\temp';
|
||||
$directories[] = 'c:\\winnt\\temp';
|
||||
}
|
||||
else {
|
||||
$directories[] = '/tmp';
|
||||
}
|
||||
// PHP may be able to find an alternative tmp directory.
|
||||
$directories[] = sys_get_temp_dir();
|
||||
|
||||
foreach ($directories as $directory) {
|
||||
if (is_dir($directory) && is_writable($directory)) {
|
||||
// Both sys_get_temp_dir() and ini_get('upload_tmp_dir') can return paths
|
||||
// with a trailing directory separator.
|
||||
return rtrim($directory, DIRECTORY_SEPARATOR);
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
}
|
|
@ -169,7 +169,7 @@ class PoItem {
|
|||
/**
|
||||
* Create the PoItem from a structured array.
|
||||
*
|
||||
* @param array values
|
||||
* @param array $values
|
||||
*/
|
||||
public function setFromArray(array $values = array()) {
|
||||
if (isset($values['context'])) {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
},
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"drupal/core-utility": "~8.1"
|
||||
"drupal/core-utility": "~8.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -80,7 +80,7 @@ interface PhpStorageInterface {
|
|||
* @param string $name
|
||||
* The virtual file name. Can be a relative path.
|
||||
*
|
||||
* @return string|FALSE
|
||||
* @return string|false
|
||||
* The full file path for the provided name. Return FALSE if the
|
||||
* implementation needs to prevent access to the file.
|
||||
*/
|
||||
|
|
18
core/lib/Drupal/Component/Plugin/PluginAwareInterface.php
Normal file
18
core/lib/Drupal/Component/Plugin/PluginAwareInterface.php
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Component\Plugin;
|
||||
|
||||
/**
|
||||
* Provides an interface for objects that depend on a plugin.
|
||||
*/
|
||||
interface PluginAwareInterface {
|
||||
|
||||
/**
|
||||
* Sets the plugin for this object.
|
||||
*
|
||||
* @param \Drupal\Component\Plugin\PluginInspectionInterface $plugin
|
||||
* The plugin.
|
||||
*/
|
||||
public function setPlugin(PluginInspectionInterface $plugin);
|
||||
|
||||
}
|
|
@ -227,11 +227,18 @@ class FormattableMarkup implements MarkupInterface, \Countable {
|
|||
default:
|
||||
// We do not trigger an error for placeholder that start with an
|
||||
// alphabetic character.
|
||||
// @todo https://www.drupal.org/node/2807743 Change to an exception
|
||||
// and always throw regardless of the first character.
|
||||
if (!ctype_alpha($key[0])) {
|
||||
// We trigger an error as we may want to introduce new placeholders
|
||||
// in the future without breaking backward compatibility.
|
||||
trigger_error('Invalid placeholder (' . $key . ') in string: ' . $string, E_USER_ERROR);
|
||||
}
|
||||
elseif (strpos($string, $key) !== FALSE) {
|
||||
trigger_error('Invalid placeholder (' . $key . ') in string: ' . $string, E_USER_DEPRECATED);
|
||||
}
|
||||
// No replacement possible therefore we can discard the argument.
|
||||
unset($args[$key]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"license": "GPL-2.0+",
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"drupal/core-utility": "~8.1"
|
||||
"drupal/core-utility": "~8.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -2,42 +2,37 @@
|
|||
|
||||
namespace Drupal\Component\Serialization;
|
||||
|
||||
use Drupal\Component\Serialization\Exception\InvalidDataTypeException;
|
||||
use Symfony\Component\Yaml\Parser;
|
||||
use Symfony\Component\Yaml\Dumper;
|
||||
|
||||
/**
|
||||
* Default serialization for YAML using the Symfony component.
|
||||
* Provides a YAML serialization implementation.
|
||||
*
|
||||
* Proxy implementation that will choose the best library based on availability.
|
||||
*/
|
||||
class Yaml implements SerializationInterface {
|
||||
|
||||
/**
|
||||
* The YAML implementation to use.
|
||||
*
|
||||
* @var \Drupal\Component\Serialization\SerializationInterface
|
||||
*/
|
||||
protected static $serializer;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function encode($data) {
|
||||
try {
|
||||
$yaml = new Dumper();
|
||||
$yaml->setIndentation(2);
|
||||
return $yaml->dump($data, PHP_INT_MAX, 0, TRUE, FALSE);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
throw new InvalidDataTypeException($e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
// Instead of using \Drupal\Component\Serialization\Yaml::getSerializer(),
|
||||
// always using Symfony for writing the data, to reduce the risk of having
|
||||
// differences if different environments (like production and development)
|
||||
// do not match in terms of what YAML implementation is available.
|
||||
return YamlSymfony::encode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function decode($raw) {
|
||||
try {
|
||||
$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, TRUE, FALSE);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
throw new InvalidDataTypeException($e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
$serializer = static::getSerializer();
|
||||
return $serializer::decode($raw);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -47,4 +42,23 @@ class Yaml implements SerializationInterface {
|
|||
return 'yml';
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines which implementation to use for parsing YAML.
|
||||
*/
|
||||
protected static function getSerializer() {
|
||||
|
||||
if (!isset(static::$serializer)) {
|
||||
// Use the PECL YAML extension if it is available. It has better
|
||||
// performance for file reads and is YAML compliant.
|
||||
if (extension_loaded('yaml')) {
|
||||
static::$serializer = YamlPecl::class;
|
||||
}
|
||||
else {
|
||||
// Otherwise, fallback to the Symfony implementation.
|
||||
static::$serializer = YamlSymfony::class;
|
||||
}
|
||||
}
|
||||
return static::$serializer;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
101
core/lib/Drupal/Component/Serialization/YamlPecl.php
Normal file
101
core/lib/Drupal/Component/Serialization/YamlPecl.php
Normal file
|
@ -0,0 +1,101 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Component\Serialization;
|
||||
|
||||
use Drupal\Component\Serialization\Exception\InvalidDataTypeException;
|
||||
|
||||
/**
|
||||
* Provides default serialization for YAML using the PECL extension.
|
||||
*/
|
||||
class YamlPecl implements SerializationInterface {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function encode($data) {
|
||||
static $init;
|
||||
if (!isset($init)) {
|
||||
ini_set('yaml.output_indent', 2);
|
||||
// Do not break lines at 80 characters.
|
||||
ini_set('yaml.output_width', -1);
|
||||
$init = TRUE;
|
||||
}
|
||||
return yaml_emit($data, YAML_UTF8_ENCODING, YAML_LN_BREAK);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function decode($raw) {
|
||||
// yaml_parse() will error with an empty value.
|
||||
if (!trim($raw)) {
|
||||
return NULL;
|
||||
}
|
||||
// @todo Use ErrorExceptions when https://drupal.org/node/1247666 is in.
|
||||
// yaml_parse() will throw errors instead of raising an exception. Until
|
||||
// such time as Drupal supports native PHP ErrorExceptions as the error
|
||||
// handler, we need to temporarily set the error handler as ::errorHandler()
|
||||
// and then restore it after decoding has occurred. This allows us to turn
|
||||
// parsing errors into a throwable exception.
|
||||
// @see Drupal\Component\Serialization\Exception\InvalidDataTypeException
|
||||
// @see http://php.net/manual/en/class.errorexception.php
|
||||
set_error_handler([__CLASS__, 'errorHandler']);
|
||||
$ndocs = 0;
|
||||
$data = yaml_parse($raw, 0, $ndocs, [
|
||||
YAML_BOOL_TAG => '\Drupal\Component\Serialization\YamlPecl::applyBooleanCallbacks',
|
||||
]);
|
||||
restore_error_handler();
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles errors for \Drupal\Component\Serialization\YamlPecl::decode().
|
||||
*
|
||||
* @param int $severity
|
||||
* The severity level of the error.
|
||||
* @param string $message
|
||||
* The error message to display.
|
||||
*
|
||||
* @see \Drupal\Component\Serialization\YamlPecl::decode()
|
||||
*/
|
||||
public static function errorHandler($severity, $message) {
|
||||
restore_error_handler();
|
||||
throw new InvalidDataTypeException($message, $severity);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function getFileExtension() {
|
||||
return 'yml';
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies callbacks after parsing to ignore 1.1 style booleans.
|
||||
*
|
||||
* @param mixed $value
|
||||
* Value from YAML file.
|
||||
* @param string $tag
|
||||
* Tag that triggered the callback.
|
||||
* @param int $flags
|
||||
* Scalar entity style flags.
|
||||
*
|
||||
* @return string|bool
|
||||
* FALSE, false, TRUE and true are returned as booleans, everything else is
|
||||
* returned as a string.
|
||||
*/
|
||||
public static function applyBooleanCallbacks($value, $tag, $flags) {
|
||||
// YAML 1.1 spec dictates that 'Y', 'N', 'y' and 'n' are booleans. But, we
|
||||
// want the 1.2 behavior, so we only consider 'false', 'FALSE', 'true' and
|
||||
// 'TRUE' as booleans.
|
||||
if (!in_array(strtolower($value), ['false', 'true'], TRUE)) {
|
||||
return $value;
|
||||
}
|
||||
$map = [
|
||||
'false' => FALSE,
|
||||
'true' => TRUE,
|
||||
];
|
||||
return $map[strtolower($value)];
|
||||
}
|
||||
|
||||
}
|
50
core/lib/Drupal/Component/Serialization/YamlSymfony.php
Normal file
50
core/lib/Drupal/Component/Serialization/YamlSymfony.php
Normal file
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Component\Serialization;
|
||||
|
||||
use Drupal\Component\Serialization\Exception\InvalidDataTypeException;
|
||||
use Symfony\Component\Yaml\Parser;
|
||||
use Symfony\Component\Yaml\Dumper;
|
||||
|
||||
/**
|
||||
* Default serialization for YAML using the Symfony component.
|
||||
*/
|
||||
class YamlSymfony implements SerializationInterface {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function encode($data) {
|
||||
try {
|
||||
$yaml = new Dumper();
|
||||
$yaml->setIndentation(2);
|
||||
return $yaml->dump($data, PHP_INT_MAX, 0, TRUE, FALSE);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
throw new InvalidDataTypeException($e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function decode($raw) {
|
||||
try {
|
||||
$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, TRUE, FALSE);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
throw new InvalidDataTypeException($e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function getFileExtension() {
|
||||
return 'yml';
|
||||
}
|
||||
|
||||
}
|
|
@ -349,7 +349,7 @@ class NestedArray {
|
|||
*
|
||||
* @param array $array
|
||||
* The filtered nested array.
|
||||
* @param callable|NULL $callable
|
||||
* @param callable|null $callable
|
||||
* The callable to apply for filtering.
|
||||
*
|
||||
* @return array
|
||||
|
|
|
@ -9,6 +9,16 @@ namespace Drupal\Component\Utility;
|
|||
*/
|
||||
class OpCodeCache {
|
||||
|
||||
/**
|
||||
* Checks if OpCodeCache is enabled.
|
||||
*
|
||||
* @return bool
|
||||
* TRUE if opcache is enabled, FALSE otherwise.
|
||||
*/
|
||||
public static function isEnabled() {
|
||||
return extension_loaded('Zend OPcache') && ini_get('opcache.enable');
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidates a PHP file from a possibly active opcode cache.
|
||||
*
|
||||
|
|
|
@ -224,6 +224,8 @@ class Xss {
|
|||
$skip_protocol_filtering = substr($attribute_name, 0, 5) === 'data-' || in_array($attribute_name, array(
|
||||
'title',
|
||||
'alt',
|
||||
'rel',
|
||||
'property',
|
||||
));
|
||||
|
||||
$working = $mode = 1;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"paragonie/random_compat": "~1.0",
|
||||
"drupal/core-render": "~8.1"
|
||||
"drupal/core-render": "~8.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
},
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"drupal/core-utility": "~8.1"
|
||||
"drupal/core-utility": "~8.2"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -51,11 +51,16 @@ abstract class AccessResult implements AccessResultInterface, RefinableCacheable
|
|||
/**
|
||||
* Creates an AccessResultInterface object with isForbidden() === TRUE.
|
||||
*
|
||||
* @param string|null $reason
|
||||
* (optional) The reason why access is forbidden. Intended for developers,
|
||||
* hence not translatable.
|
||||
*
|
||||
* @return \Drupal\Core\Access\AccessResult
|
||||
* isForbidden() will be TRUE.
|
||||
*/
|
||||
public static function forbidden() {
|
||||
return new AccessResultForbidden();
|
||||
public static function forbidden($reason = NULL) {
|
||||
assert('is_string($reason) || is_null($reason)');
|
||||
return new AccessResultForbidden($reason);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -334,8 +339,16 @@ abstract class AccessResult implements AccessResultInterface, RefinableCacheable
|
|||
if ($this->isForbidden() || $other->isForbidden()) {
|
||||
$result = static::forbidden();
|
||||
if (!$this->isForbidden()) {
|
||||
if ($other instanceof AccessResultReasonInterface) {
|
||||
$result->setReason($other->getReason());
|
||||
}
|
||||
$merge_other = TRUE;
|
||||
}
|
||||
else {
|
||||
if ($this instanceof AccessResultReasonInterface) {
|
||||
$result->setReason($this->getReason());
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif ($this->isAllowed() && $other->isAllowed()) {
|
||||
$result = static::allowed();
|
||||
|
|
|
@ -5,7 +5,25 @@ namespace Drupal\Core\Access;
|
|||
/**
|
||||
* Value object indicating a forbidden access result, with cacheability metadata.
|
||||
*/
|
||||
class AccessResultForbidden extends AccessResult {
|
||||
class AccessResultForbidden extends AccessResult implements AccessResultReasonInterface {
|
||||
|
||||
/**
|
||||
* The reason why access is forbidden. For use in error messages.
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected $reason;
|
||||
|
||||
/**
|
||||
* Constructs a new AccessResultForbidden instance.
|
||||
*
|
||||
* @param null|string $reason
|
||||
* (optional) a message to provide details about this access result
|
||||
*/
|
||||
public function __construct($reason = NULL) {
|
||||
$this->reason = $reason;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
|
@ -14,4 +32,19 @@ class AccessResultForbidden extends AccessResult {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getReason() {
|
||||
return $this->reason;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setReason($reason) {
|
||||
$this->reason = $reason;
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
36
core/lib/Drupal/Core/Access/AccessResultReasonInterface.php
Normal file
36
core/lib/Drupal/Core/Access/AccessResultReasonInterface.php
Normal file
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Core\Access;
|
||||
|
||||
/**
|
||||
* Interface for access result value objects with stored reason for developers.
|
||||
*
|
||||
* For example, a developer can specify the reason for forbidden access:
|
||||
* @code
|
||||
* new AccessResultForbidden('You are not authorized to hack core');
|
||||
* @endcode
|
||||
*
|
||||
* @see \Drupal\Core\Access\AccessResultInterface
|
||||
*/
|
||||
interface AccessResultReasonInterface extends AccessResultInterface {
|
||||
|
||||
/**
|
||||
* Gets the reason for this access result.
|
||||
*
|
||||
* @return string|null
|
||||
* The reason of this access result or NULL if no reason is provided.
|
||||
*/
|
||||
public function getReason();
|
||||
|
||||
/**
|
||||
* Sets the reason for this access result.
|
||||
*
|
||||
* @param $reason string|null
|
||||
* The reason of this access result or NULL if no reason is provided.
|
||||
*
|
||||
* @return \Drupal\Core\Access\AccessResultInterface
|
||||
* The access result instance.
|
||||
*/
|
||||
public function setReason($reason);
|
||||
|
||||
}
|
|
@ -3,14 +3,17 @@
|
|||
namespace Drupal\Core\Access;
|
||||
|
||||
use Drupal\Core\Routing\Access\AccessInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerAware;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
|
||||
use Symfony\Component\Routing\Route;
|
||||
use Symfony\Component\Routing\RouteCollection;
|
||||
|
||||
/**
|
||||
* Loads access checkers from the container.
|
||||
*/
|
||||
class CheckProvider extends ContainerAware implements CheckProviderInterface {
|
||||
class CheckProvider implements CheckProviderInterface, ContainerAwareInterface {
|
||||
|
||||
use ContainerAwareTrait;
|
||||
|
||||
/**
|
||||
* Array of registered access check service ids.
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\rest\Access;
|
||||
namespace Drupal\Core\Access;
|
||||
|
||||
use Drupal\Core\Access\AccessCheckInterface;
|
||||
use Drupal\Core\Access\AccessResult;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Session\SessionConfigurationInterface;
|
||||
use Symfony\Component\Routing\Route;
|
||||
|
@ -12,7 +10,12 @@ use Symfony\Component\HttpFoundation\Request;
|
|||
/**
|
||||
* Access protection against CSRF attacks.
|
||||
*/
|
||||
class CSRFAccessCheck implements AccessCheckInterface {
|
||||
class CsrfRequestHeaderAccessCheck implements AccessCheckInterface {
|
||||
|
||||
/**
|
||||
* A string key that will used to designate the token used by this class.
|
||||
*/
|
||||
const TOKEN_KEY = 'X-CSRF-Token request header';
|
||||
|
||||
/**
|
||||
* The session configuration.
|
||||
|
@ -21,14 +24,24 @@ class CSRFAccessCheck implements AccessCheckInterface {
|
|||
*/
|
||||
protected $sessionConfiguration;
|
||||
|
||||
/**
|
||||
* The token generator.
|
||||
*
|
||||
* @var \Drupal\Core\Access\CsrfTokenGenerator
|
||||
*/
|
||||
protected $csrfToken;
|
||||
|
||||
/**
|
||||
* Constructs a new rest CSRF access check.
|
||||
*
|
||||
* @param \Drupal\Core\Session\SessionConfigurationInterface $session_configuration
|
||||
* The session configuration.
|
||||
* @param \Drupal\Core\Access\CsrfTokenGenerator $csrf_token
|
||||
* The token generator.
|
||||
*/
|
||||
public function __construct(SessionConfigurationInterface $session_configuration) {
|
||||
public function __construct(SessionConfigurationInterface $session_configuration, CsrfTokenGenerator $csrf_token) {
|
||||
$this->sessionConfiguration = $session_configuration;
|
||||
$this->csrfToken = $csrf_token;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -36,8 +49,16 @@ class CSRFAccessCheck implements AccessCheckInterface {
|
|||
*/
|
||||
public function applies(Route $route) {
|
||||
$requirements = $route->getRequirements();
|
||||
// Check for current requirement _csrf_request_header_token and deprecated
|
||||
// REST requirement.
|
||||
$applicable_requirements = [
|
||||
'_csrf_request_header_token',
|
||||
// @todo Remove _access_rest_csrf in Drupal 9.0.0.
|
||||
'_access_rest_csrf',
|
||||
];
|
||||
$requirement_keys = array_keys($requirements);
|
||||
|
||||
if (array_key_exists('_access_rest_csrf', $requirements)) {
|
||||
if (array_intersect($applicable_requirements, $requirement_keys)) {
|
||||
if (isset($requirements['_method'])) {
|
||||
// There could be more than one method requirement separated with '|'.
|
||||
$methods = explode('|', $requirements['_method']);
|
||||
|
@ -77,8 +98,11 @@ class CSRFAccessCheck implements AccessCheckInterface {
|
|||
&& $this->sessionConfiguration->hasSession($request)
|
||||
) {
|
||||
$csrf_token = $request->headers->get('X-CSRF-Token');
|
||||
if (!\Drupal::csrfToken()->validate($csrf_token, 'rest')) {
|
||||
return AccessResult::forbidden()->setCacheMaxAge(0);
|
||||
// @todo Remove validate call using 'rest' in 8.3.
|
||||
// Kept here for sessions active during update.
|
||||
if (!$this->csrfToken->validate($csrf_token, self::TOKEN_KEY)
|
||||
&& !$this->csrfToken->validate($csrf_token, 'rest')) {
|
||||
return AccessResult::forbidden()->setReason('X-CSRF-Token request header is missing')->setCacheMaxAge(0);
|
||||
}
|
||||
}
|
||||
// Let other access checkers decide if the request is legit.
|
|
@ -40,13 +40,13 @@ class CssCollectionOptimizer implements AssetCollectionOptimizerInterface {
|
|||
/**
|
||||
* Constructs a CssCollectionOptimizer.
|
||||
*
|
||||
* @param \Drupal\Core\Asset\AssetCollectionGrouperInterface
|
||||
* @param \Drupal\Core\Asset\AssetCollectionGrouperInterface $grouper
|
||||
* The grouper for CSS assets.
|
||||
* @param \Drupal\Core\Asset\AssetOptimizerInterface
|
||||
* @param \Drupal\Core\Asset\AssetOptimizerInterface $optimizer
|
||||
* The optimizer for a single CSS asset.
|
||||
* @param \Drupal\Core\Asset\AssetDumperInterface
|
||||
* @param \Drupal\Core\Asset\AssetDumperInterface $dumper
|
||||
* The dumper for optimized CSS assets.
|
||||
* @param \Drupal\Core\State\StateInterface
|
||||
* @param \Drupal\Core\State\StateInterface $state
|
||||
* The state key/value store.
|
||||
*/
|
||||
public function __construct(AssetCollectionGrouperInterface $grouper, AssetOptimizerInterface $optimizer, AssetDumperInterface $dumper, StateInterface $state) {
|
||||
|
|
|
@ -63,7 +63,7 @@ class CssCollectionRenderer implements AssetCollectionRendererInterface {
|
|||
/**
|
||||
* Constructs a CssCollectionRenderer.
|
||||
*
|
||||
* @param \Drupal\Core\State\StateInterface
|
||||
* @param \Drupal\Core\State\StateInterface $state
|
||||
* The state key/value store.
|
||||
*/
|
||||
public function __construct(StateInterface $state) {
|
||||
|
|
|
@ -41,13 +41,13 @@ class JsCollectionOptimizer implements AssetCollectionOptimizerInterface {
|
|||
/**
|
||||
* Constructs a JsCollectionOptimizer.
|
||||
*
|
||||
* @param \Drupal\Core\Asset\AssetCollectionGrouperInterface
|
||||
* @param \Drupal\Core\Asset\AssetCollectionGrouperInterface $grouper
|
||||
* The grouper for JS assets.
|
||||
* @param \Drupal\Core\Asset\AssetOptimizerInterface
|
||||
* @param \Drupal\Core\Asset\AssetOptimizerInterface $optimizer
|
||||
* The optimizer for a single JS asset.
|
||||
* @param \Drupal\Core\Asset\AssetDumperInterface
|
||||
* @param \Drupal\Core\Asset\AssetDumperInterface $dumper
|
||||
* The dumper for optimized JS assets.
|
||||
* @param \Drupal\Core\State\StateInterface
|
||||
* @param \Drupal\Core\State\StateInterface $state
|
||||
* The state key/value store.
|
||||
*/
|
||||
public function __construct(AssetCollectionGrouperInterface $grouper, AssetOptimizerInterface $optimizer, AssetDumperInterface $dumper, StateInterface $state) {
|
||||
|
|
|
@ -20,7 +20,7 @@ class JsCollectionRenderer implements AssetCollectionRendererInterface {
|
|||
/**
|
||||
* Constructs a JsCollectionRenderer.
|
||||
*
|
||||
* @param \Drupal\Core\State\StateInterface
|
||||
* @param \Drupal\Core\State\StateInterface $state
|
||||
* The state key/value store.
|
||||
*/
|
||||
public function __construct(StateInterface $state) {
|
||||
|
|
|
@ -39,7 +39,7 @@ interface LibraryDiscoveryInterface {
|
|||
* @param string $name
|
||||
* The name of a registered library to retrieve.
|
||||
*
|
||||
* @return array|FALSE
|
||||
* @return array|false
|
||||
* The definition of the requested library, if $name was passed and it
|
||||
* exists, otherwise FALSE.
|
||||
*/
|
||||
|
|
|
@ -7,9 +7,9 @@ use Drupal\Core\Asset\Exception\InvalidLibrariesOverrideSpecificationException;
|
|||
use Drupal\Core\Asset\Exception\InvalidLibraryFileException;
|
||||
use Drupal\Core\Asset\Exception\LibraryDefinitionMissingLicenseException;
|
||||
use Drupal\Core\Extension\ModuleHandlerInterface;
|
||||
use Drupal\Core\Serialization\Yaml;
|
||||
use Drupal\Core\Theme\ThemeManagerInterface;
|
||||
use Drupal\Component\Serialization\Exception\InvalidDataTypeException;
|
||||
use Drupal\Component\Serialization\Yaml;
|
||||
use Drupal\Component\Utility\NestedArray;
|
||||
|
||||
/**
|
||||
|
|
|
@ -41,7 +41,7 @@ interface AuthenticationCollectorInterface {
|
|||
* @param string $provider_id
|
||||
* The provider ID.
|
||||
*
|
||||
* @return \Drupal\Core\Authentication\AuthenticationProviderInterface|NULL
|
||||
* @return \Drupal\Core\Authentication\AuthenticationProviderInterface|null
|
||||
* The authentication provider which matches the ID.
|
||||
*/
|
||||
public function getProvider($provider_id);
|
||||
|
|
|
@ -94,7 +94,7 @@ class AuthenticationManager implements AuthenticationProviderInterface, Authenti
|
|||
* @param \Symfony\Component\HttpFoundation\Request $request
|
||||
* The incoming request.
|
||||
*
|
||||
* @return string|NULL
|
||||
* @return string|null
|
||||
* The id of the first authentication provider which applies to the request.
|
||||
* If no application detects appropriate credentials, then NULL is returned.
|
||||
*/
|
||||
|
@ -112,7 +112,7 @@ class AuthenticationManager implements AuthenticationProviderInterface, Authenti
|
|||
* @param \Symfony\Component\HttpFoundation\Request $request
|
||||
* The incoming request.
|
||||
*
|
||||
* @return string|NULL
|
||||
* @return string|null
|
||||
* The ID of the first authentication provider which applies to the request.
|
||||
* If no application detects appropriate credentials, then NULL is returned.
|
||||
*/
|
||||
|
|
|
@ -21,7 +21,7 @@ interface AuthenticationProviderChallengeInterface {
|
|||
* @param \Exception $previous
|
||||
* The previous exception.
|
||||
*
|
||||
* @return \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface|NULL
|
||||
* @return \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface|null
|
||||
* An exception to be used in order to generate an authentication challenge.
|
||||
*/
|
||||
public function challengeException(Request $request, \Exception $previous);
|
||||
|
|
|
@ -24,10 +24,10 @@ interface AuthenticationProviderInterface {
|
|||
/**
|
||||
* Authenticates the user.
|
||||
*
|
||||
* @param \Symfony\Component\HttpFoundation\Request|NULL $request
|
||||
* @param \Symfony\Component\HttpFoundation\Request|null $request
|
||||
* The request object.
|
||||
*
|
||||
* @return \Drupal\Core\Session\AccountInterface|NULL
|
||||
* @return \Drupal\Core\Session\AccountInterface|null
|
||||
* AccountInterface - in case of a successful authentication.
|
||||
* NULL - in case where authentication failed.
|
||||
*/
|
||||
|
|
|
@ -10,6 +10,8 @@ use Drupal\Core\Plugin\ContextAwarePluginBase;
|
|||
use Drupal\Component\Utility\Unicode;
|
||||
use Drupal\Component\Utility\NestedArray;
|
||||
use Drupal\Core\Language\LanguageInterface;
|
||||
use Drupal\Core\Plugin\PluginWithFormsInterface;
|
||||
use Drupal\Core\Plugin\PluginWithFormsTrait;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Component\Transliteration\TransliterationInterface;
|
||||
|
||||
|
@ -22,9 +24,10 @@ use Drupal\Component\Transliteration\TransliterationInterface;
|
|||
*
|
||||
* @ingroup block_api
|
||||
*/
|
||||
abstract class BlockBase extends ContextAwarePluginBase implements BlockPluginInterface {
|
||||
abstract class BlockBase extends ContextAwarePluginBase implements BlockPluginInterface, PluginWithFormsInterface {
|
||||
|
||||
use ContextAwarePluginAssignmentTrait;
|
||||
use PluginWithFormsTrait;
|
||||
|
||||
/**
|
||||
* The transliteration service.
|
||||
|
|
|
@ -148,7 +148,7 @@ class Cache {
|
|||
/**
|
||||
* Gets all cache bin services.
|
||||
*
|
||||
* @return array
|
||||
* @return \Drupal\Core\Cache\CacheBackendInterface[]
|
||||
* An array of cache backend objects keyed by cache bins.
|
||||
*/
|
||||
public static function getBins() {
|
||||
|
|
|
@ -64,16 +64,20 @@ class CacheFactory implements CacheFactoryInterface, ContainerAwareInterface {
|
|||
*/
|
||||
public function get($bin) {
|
||||
$cache_settings = $this->settings->get('cache');
|
||||
// First, look for a cache bin specific setting.
|
||||
if (isset($cache_settings['bins'][$bin])) {
|
||||
$service_name = $cache_settings['bins'][$bin];
|
||||
}
|
||||
elseif (isset($cache_settings['default'])) {
|
||||
$service_name = $cache_settings['default'];
|
||||
}
|
||||
// Second, use the default backend specified by the cache bin.
|
||||
elseif (isset($this->defaultBinBackends[$bin])) {
|
||||
$service_name = $this->defaultBinBackends[$bin];
|
||||
}
|
||||
// Third, use configured default backend.
|
||||
elseif (isset($cache_settings['default'])) {
|
||||
$service_name = $cache_settings['default'];
|
||||
}
|
||||
else {
|
||||
// Fall back to the database backend if nothing else is configured.
|
||||
$service_name = 'cache.backend.database';
|
||||
}
|
||||
return $this->container->get($service_name)->get($bin);
|
||||
|
|
|
@ -87,16 +87,8 @@ class ChainedFastBackend implements CacheBackendInterface, CacheTagsInvalidatorI
|
|||
* The fast cache backend.
|
||||
* @param string $bin
|
||||
* The cache bin for which the object is created.
|
||||
*
|
||||
* @throws \Exception
|
||||
* When the consistent cache backend and the fast cache backend are the same
|
||||
* service.
|
||||
*/
|
||||
public function __construct(CacheBackendInterface $consistent_backend, CacheBackendInterface $fast_backend, $bin) {
|
||||
if ($consistent_backend == $fast_backend) {
|
||||
// @todo: should throw a proper exception. See https://www.drupal.org/node/2751847.
|
||||
trigger_error('Consistent cache backend and fast cache backend cannot use the same service.', E_USER_ERROR);
|
||||
}
|
||||
$this->consistentBackend = $consistent_backend;
|
||||
$this->fastBackend = $fast_backend;
|
||||
$this->bin = 'cache_' . $bin;
|
||||
|
|
|
@ -28,14 +28,14 @@ class ChainedFastBackendFactory implements CacheFactoryInterface {
|
|||
/**
|
||||
* Constructs ChainedFastBackendFactory object.
|
||||
*
|
||||
* @param \Drupal\Core\Site\Settings|NULL $settings
|
||||
* @param \Drupal\Core\Site\Settings|null $settings
|
||||
* (optional) The settings object.
|
||||
* @param string|NULL $consistent_service_name
|
||||
* @param string|null $consistent_service_name
|
||||
* (optional) The service name of the consistent backend factory. Defaults
|
||||
* to:
|
||||
* - $settings->get('cache')['default'] (if specified)
|
||||
* - 'cache.backend.database' (if the above isn't specified)
|
||||
* @param string|NULL $fast_service_name
|
||||
* @param string|null $fast_service_name
|
||||
* (optional) The service name of the fast backend factory. Defaults to:
|
||||
* - 'cache.backend.apcu' (if the PHP process has APCu enabled)
|
||||
* - NULL (if the PHP process doesn't have APCu enabled)
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
namespace Drupal\Core\Cache\Context;
|
||||
|
||||
use Drupal\Core\Cache\CacheableMetadata;
|
||||
use Symfony\Component\DependencyInjection\ContainerAware;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
|
||||
|
||||
/**
|
||||
* Defines the MenuActiveTrailsCacheContext service.
|
||||
|
@ -11,7 +12,9 @@ use Symfony\Component\DependencyInjection\ContainerAware;
|
|||
* This class is container-aware to avoid initializing the 'menu.active_trails'
|
||||
* service (and its dependencies) when it is not necessary.
|
||||
*/
|
||||
class MenuActiveTrailsCacheContext extends ContainerAware implements CalculatedCacheContextInterface {
|
||||
class MenuActiveTrailsCacheContext implements CalculatedCacheContextInterface, ContainerAwareInterface {
|
||||
|
||||
use ContainerAwareTrait;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
|
|
35
core/lib/Drupal/Core/Cache/UncacheableDependencyTrait.php
Normal file
35
core/lib/Drupal/Core/Cache/UncacheableDependencyTrait.php
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Core\Cache;
|
||||
|
||||
/**
|
||||
* Trait to implement CacheableDependencyInterface for uncacheable objects.
|
||||
*
|
||||
* Use this for objects that are never cacheable.
|
||||
*
|
||||
* @see \Drupal\Core\Cache\CacheableDependencyInterface
|
||||
*/
|
||||
trait UncacheableDependencyTrait {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCacheContexts() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCacheTags() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getCacheMaxAge() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
|
@ -33,7 +33,7 @@ class DbDumpCommand extends DbCommandBase {
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $excludeTables = ['simpletest.+'];
|
||||
protected $excludeTables = ['test[0-9]+'];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
|
|
|
@ -196,7 +196,7 @@ EOT;
|
|||
* @param string $package_name
|
||||
* The package name from composer. This is always already lower case.
|
||||
*
|
||||
* @return NULL|string
|
||||
* @return string|null
|
||||
* The string key, or NULL if none was found.
|
||||
*/
|
||||
protected static function findPackageKey($package_name) {
|
||||
|
|
|
@ -26,8 +26,9 @@ trait ConditionAccessResolverTrait {
|
|||
$pass = $condition->execute();
|
||||
}
|
||||
catch (ContextException $e) {
|
||||
// If a condition is missing context, consider that a fail.
|
||||
$pass = FALSE;
|
||||
// If a condition is missing context and is not negated, consider that a
|
||||
// fail.
|
||||
$pass = $condition->isNegated();
|
||||
}
|
||||
|
||||
// If a condition fails and all conditions were needed, deny access.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue