Skip to content
Commits on Source (360)
This diff is collapsed.
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
"space-infix-ops": 2, "space-infix-ops": 2,
"space-unary-ops": [2, { "words": true, "nonwords": false }], "space-unary-ops": [2, { "words": true, "nonwords": false }],
"spaced-comment": [2, "always"], "spaced-comment": [2, "always"],
"strict": 2, "strict": [2, "function"],
"yoda": [2, "never"], "yoda": [2, "never"],
// Warnings. // Warnings.
"max-nested-callbacks": [1, 3], "max-nested-callbacks": [1, 3],
......
Drupal 8.2.8, 2017-04-19
------------------------
- Fixed security issues. See SA-CORE-2017-002.
Drupal 8.2.7, 2017-03-15
------------------------
- Fixed security issues. See SA-CORE-2017-001.
Drupal 8.2.3, 2016-11-16
------------------------
- Fixed security issues. See SA-CORE-2016-005.
Drupal 8.2.0, 2016-10-05
------------------------
- 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 Drupal 8.1.0, 2016-04-20
------------------------ ------------------------
- Removed Composer-managed vendor from the git repository: - Removed Composer-managed vendor from the git repository:
......
...@@ -3,6 +3,9 @@ encouraged to submit issues and changes (patches) to improve Drupal, and to ...@@ -3,6 +3,9 @@ encouraged to submit issues and changes (patches) to improve Drupal, and to
contribute in other ways -- see https://www.drupal.org/contribute to find out contribute in other ways -- see https://www.drupal.org/contribute to find out
how. how.
This file lists the active maintainers. For a list of past maintainers, see:
https://www.drupal.org/core/maintainers/past
Core committers Core committers
--------------- ---------------
...@@ -53,11 +56,10 @@ Actions ...@@ -53,11 +56,10 @@ Actions
- ? - ?
Aggregator Aggregator
- Paris Liakos 'ParisLiakos' https://www.drupal.org/u/parisliakos - ?
Ajax Ajax
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia - 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 - Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
Asset Library API Asset Library API
...@@ -73,19 +75,17 @@ Ban ...@@ -73,19 +75,17 @@ Ban
- ? - ?
Bartik Bartik
- Jen Simmons 'jensimmons' https://www.drupal.org/u/jensimmons
- Emma Maria Karayiannis 'emma.maria' https://www.drupal.org/u/emma.maria - Emma Maria Karayiannis 'emma.maria' https://www.drupal.org/u/emma.maria
Base system Base system
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud - ?
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
Basic Auth Basic Auth
- Klaus Purer 'klausi' https://www.drupal.org/u/klausi - Klaus Purer 'klausi' https://www.drupal.org/u/klausi
- Juampy Novillo Requena 'juampy' https://www.drupal.org/u/juampy - Juampy Novillo Requena 'juampy' https://www.drupal.org/u/juampy
Batch API Batch API
- Yves Chedemois 'yched' https://www.drupal.org/u/yched - ?
BigPipe BigPipe
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers - Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
...@@ -109,9 +109,7 @@ Breakpoint ...@@ -109,9 +109,7 @@ Breakpoint
- Marc Drummond 'mdrummond' https://www.drupal.org/u/mdrummond - Marc Drummond 'mdrummond' https://www.drupal.org/u/mdrummond
Cache Cache
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud
- Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch - Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
- Mark Sonnabaum 'msonnabaum' https://www.drupal.org/u/msonnabaum
CKEditor CKEditor
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers - Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
...@@ -125,18 +123,15 @@ Color ...@@ -125,18 +123,15 @@ Color
- ? - ?
Comment Comment
- Dick Olsson 'dixon_' https://www.drupal.org/u/dixon_
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan - Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
- Andrey Postnikov 'andypost' https://www.drupal.org/u/andypost - Andrey Postnikov 'andypost' https://www.drupal.org/u/andypost
Configuration API Configuration API
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun
- Alex Pott 'alexpott' https://www.drupal.org/u/alexpott - Alex Pott 'alexpott' https://www.drupal.org/u/alexpott
- Matthew Tift 'mtift' https://www.drupal.org/u/mtift - Matthew Tift 'mtift' https://www.drupal.org/u/mtift
Configuration Entity API Configuration Entity API
- Alex Pott 'alexpott' https://www.drupal.org/u/alexpott - 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 - Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
Configuration UI Configuration UI
...@@ -159,10 +154,10 @@ Content Translation ...@@ -159,10 +154,10 @@ Content Translation
- Francesco Placella 'plach' https://www.drupal.org/u/plach - Francesco Placella 'plach' https://www.drupal.org/u/plach
Contextual Contextual
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun - ?
Cron Cron
- Derek Wright 'dww' https://www.drupal.org/u/dww - ?
CSS CSS
- John Albin Wilkins 'JohnAlbin' https://www.drupal.org/u/johnalbin - John Albin Wilkins 'JohnAlbin' https://www.drupal.org/u/johnalbin
...@@ -175,14 +170,13 @@ Database API ...@@ -175,14 +170,13 @@ Database API
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss - David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss
PostgreSQL DB driver PostgreSQL DB driver
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud - ?
- Josh Waihi 'fiasco' https://www.drupal.org/u/fiasco
Sqlite DB driver Sqlite DB driver
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud - ?
Database Logging Database Logging
- Khalid Baheyeldin 'kbahey' https://www.drupal.org/u/kbahey - ?
Database Update API Database Update API
- ? - ?
...@@ -203,15 +197,15 @@ Editor ...@@ -203,15 +197,15 @@ Editor
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers - Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
Entity API Entity API
- Wolfgang Ziegler 'fago' https://www.drupal.org/u/fago
- Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch - Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
- Sascha Grossenbacher 'Berdir' https://www.drupal.org/u/berdir - Sascha Grossenbacher 'Berdir' https://www.drupal.org/u/berdir
- Francesco Placella 'plach' https://www.drupal.org/u/plach
- Tobias Stöckler 'tstoeckler' https://www.drupal.org/u/tstoeckler
Extension API Extension API
- ? - ?
Field API Field API
- Yves Chedemois 'yched' https://www.drupal.org/u/yched
- Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu - Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu
Field UI Field UI
...@@ -219,19 +213,16 @@ Field UI ...@@ -219,19 +213,16 @@ Field UI
- Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu - Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu
File File
- Andrew Morton 'drewish' https://www.drupal.org/u/drewish - ?
- Aaron Winborn 'aaron' https://www.drupal.org/u/aaron
Filter Filter
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun - ?
Forum Forum
- Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan - Lee Rowlands 'larowlan' https://www.drupal.org/u/larowlan
Form API Form API
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia - 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 - Tim Plunkett 'tim.plunkett' https://www.drupal.org/u/tim.plunkett
History History
...@@ -264,24 +255,28 @@ Link Field ...@@ -264,24 +255,28 @@ Link Field
- Weber Macedo 'Mac_Weber' https://www.drupal.org/u/mac_weber - Weber Macedo 'Mac_Weber' https://www.drupal.org/u/mac_weber
Lock Lock
- Damien Tournoud 'damien-tournoud' https://www.drupal.org/u/damien-tournoud - ?
Mail Mail
- ? - ?
Markup Markup
- Daniel F. Kudwien 'sun' https://www.drupal.org/u/sun - ?
Migrate Migrate
- Adam Globus-Hoenich 'phenaproxima' https://www.drupal.org/u/phenaproxima - Adam Globus-Hoenich 'phenaproxima' https://www.drupal.org/u/phenaproxima
- Ben Dougherty 'benjy' https://www.drupal.org/u/benjy - Ben Dougherty 'benjy' https://www.drupal.org/u/benjy
- Lucas Hedding 'heddn' https://www.drupal.org/u/heddn
- Michael Anello 'ultimike' https://www.drupal.org/u/ultimike - Michael Anello 'ultimike' https://www.drupal.org/u/ultimike
- Mike Ryan 'mikeryan' https://www.drupal.org/u/mikeryan - Mike Ryan 'mikeryan' https://www.drupal.org/u/mikeryan
- Vicki Spagnolo 'quietone' https://www.drupal.org/u/quietone
Migrate (Drupal) Migrate (Drupal)
- Ben Dougherty 'benjy' https://www.drupal.org/u/benjy - Ben Dougherty 'benjy' https://www.drupal.org/u/benjy
- Lucas Hedding 'heddn' https://www.drupal.org/u/heddn
- Michael Anello 'ultimike' https://www.drupal.org/u/ultimike - Michael Anello 'ultimike' https://www.drupal.org/u/ultimike
- Mike Ryan 'mikeryan' https://www.drupal.org/u/mikeryan - Mike Ryan 'mikeryan' https://www.drupal.org/u/mikeryan
- Vicki Spagnolo 'quietone' https://www.drupal.org/u/quietone
Menu Menu
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner - Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
...@@ -295,16 +290,15 @@ Menu UI ...@@ -295,16 +290,15 @@ Menu UI
- ? - ?
Node 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 Node Access
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
- Ken Rickard 'agentrickard' https://www.drupal.org/u/agentrickard - Ken Rickard 'agentrickard' https://www.drupal.org/u/agentrickard
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm - Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
Options Options
- Yves Chedemois 'yched' https://www.drupal.org/u/yched - ?
Outside In Outside In
- Ted Bowman 'tedbow' https://www.drupal.org/u/tedbow - Ted Bowman 'tedbow' https://www.drupal.org/u/tedbow
...@@ -323,7 +317,6 @@ Plugin ...@@ -323,7 +317,6 @@ Plugin
Queue Queue
- James Gilliland 'neclimdul' https://www.drupal.org/u/neclimdul - James Gilliland 'neclimdul' https://www.drupal.org/u/neclimdul
- Mark Sonnabaum 'msonnabaum' https://www.drupal.org/u/msonnabaum
Quick Edit Quick Edit
- Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers - Wim Leers 'Wim Leers' https://www.drupal.org/u/wim-leers
...@@ -333,8 +326,8 @@ RDF ...@@ -333,8 +326,8 @@ RDF
- Stéphane Corlosquet 'scor' https://www.drupal.org/u/scor - Stéphane Corlosquet 'scor' https://www.drupal.org/u/scor
Render API Render API
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia - Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
Request Processing Request Processing
- Larry Garfield 'Crell' https://www.drupal.org/u/crell - Larry Garfield 'Crell' https://www.drupal.org/u/crell
...@@ -366,11 +359,6 @@ Shortcut ...@@ -366,11 +359,6 @@ Shortcut
- Tobias Stöckler 'tstoeckler' https://www.drupal.org/u/tstoeckler - Tobias Stöckler 'tstoeckler' https://www.drupal.org/u/tstoeckler
- Jibran Ijaz 'jibran' https://www.drupal.org/u/jibran - 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 Stable
- Scott Reeves 'Cottser' https://www.drupal.org/u/cottser - Scott Reeves 'Cottser' https://www.drupal.org/u/cottser
...@@ -389,23 +377,27 @@ System (module) ...@@ -389,23 +377,27 @@ System (module)
Taxonomy Taxonomy
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm - Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
- Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch - Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
- Benjamin Doherty 'bangpound' https://www.drupal.org/u/bangpound
Telephone Telephone
- Dave Reid 'dave-reid' https://www.drupal.org/u/dave-reid - ?
Testing framework
- Alex Pott 'alexpott' https://www.drupal.org/u/alexpott
- Sascha Grossenbacher 'Berdir' https://www.drupal.org/u/berdir
- Klaus Purer 'klausi' https://www.drupal.org/u/klausi
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
Text Field Text Field
- ? - ?
Theme API Theme API
- Alex Bronstein 'effulgentsia' https://www.drupal.org/u/effulgentsia - 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 - Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
- Joël Pittet 'joelpittet' https://www.drupal.org/u/joelpittet - Joël Pittet 'joelpittet' https://www.drupal.org/u/joelpittet
- Lauri Eskola 'lauriii' https://www.drupal.org/u/lauriii - Lauri Eskola 'lauriii' https://www.drupal.org/u/lauriii
Token Token
- Dave Reid 'davereid' https://www.drupal.org/u/davereid - ?
Toolbar Toolbar
- Théodore Biadala 'nod_' https://www.drupal.org/u/nod_ - Théodore Biadala 'nod_' https://www.drupal.org/u/nod_
...@@ -414,22 +406,19 @@ Tour ...@@ -414,22 +406,19 @@ Tour
- Nick Schuch 'nick_schuch' https://www.drupal.org/u/nick_schuch - Nick Schuch 'nick_schuch' https://www.drupal.org/u/nick_schuch
Tracker Tracker
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss - ?
Transliteration Transliteration
- Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu - 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 Typed Data
- Wolfgang Ziegler 'fago' https://www.drupal.org/u/fago - Wolfgang Ziegler 'fago' https://www.drupal.org/u/fago
Update UI Update UI
- Derek Wright 'dww' https://www.drupal.org/u/dww - ?
User User
- Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman - Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
- David Strauss 'David Strauss' https://www.drupal.org/u/david-strauss
Views Views
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner - Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
...@@ -438,18 +427,11 @@ Views ...@@ -438,18 +427,11 @@ Views
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm - Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
- Len Swaneveld 'Lendude' https://www.drupal.org/u/lendude - 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 Topic maintainers
----------------- -----------------
Accessibility Accessibility
- Mike Gifford 'mgifford' https://www.drupal.org/u/mgifford - Mike Gifford 'mgifford' https://www.drupal.org/u/mgifford
- Jesse Renée Beach 'jessebeach' https://www.drupal.org/u/jessebeach
- Andrew Macpherson 'andrewmacpherson' https://www.drupal.org/u/andrewmacpherson - Andrew Macpherson 'andrewmacpherson' https://www.drupal.org/u/andrewmacpherson
Documentation Documentation
...@@ -488,24 +470,16 @@ re-architect or otherwise improve large areas of Drupal core. See ...@@ -488,24 +470,16 @@ re-architect or otherwise improve large areas of Drupal core. See
https://www.drupal.org/community-initiatives/drupal-core for more information on https://www.drupal.org/community-initiatives/drupal-core for more information on
their responsibilities. The initiative coordinators for Drupal 8 are: their responsibilities. The initiative coordinators for Drupal 8 are:
Configuration management
- Greg Dunlap 'heyrocker' https://www.drupal.org/u/heyrocker
Design
- Jeff Burns 'Jeff Burnz' https://www.drupal.org/u/jeff-burnz
Mobile
- John Albin Wilkins 'JohnAlbin' https://www.drupal.org/u/johnalbin
Multi-lingual Multi-lingual
- Gábor Hojtsy 'Gábor Hojtsy' https://www.drupal.org/u/gábor-hojtsy - Gábor Hojtsy 'Gábor Hojtsy' https://www.drupal.org/u/gábor-hojtsy
Web services
- Larry Garfield 'Crell' https://www.drupal.org/u/crell
Workflow Initiative Workflow Initiative
- Dick Olsson 'dixon_' https://www.drupal.org/u/dixon_ - Dick Olsson 'dixon_' https://www.drupal.org/u/dixon_
PHPUnit Initiative
- Klaus Purer 'klausi' https://www.drupal.org/u/klausi
- Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
Provisional membership: None at this time. Provisional membership: None at this time.
...@@ -523,7 +497,6 @@ participate in mentoring. ...@@ -523,7 +497,6 @@ participate in mentoring.
- Lucas Hedding 'heddn' https://www.drupal.org/u/heddn - Lucas Hedding 'heddn' https://www.drupal.org/u/heddn
- Valery Lourie 'valthebald' https://www.drupal.org/u/valthebald - Valery Lourie 'valthebald' https://www.drupal.org/u/valthebald
- Alina Mackenzie 'alimac' https://www.drupal.org/u/alimac - Alina Mackenzie 'alimac' https://www.drupal.org/u/alimac
- Chris McCafferty 'cilefen' https://www.drupal.org/u/cilefen
- Jess Myrbo 'xjm' https://www.drupal.org/u/xjm - Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
- Andrea Soper 'ZenDoodles' https://www.drupal.org/u/zendoodles - Andrea Soper 'ZenDoodles' https://www.drupal.org/u/zendoodles
- Cathy Theys 'YesCT' https://www.drupal.org/u/yesct - Cathy Theys 'YesCT' https://www.drupal.org/u/yesct
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
"symfony/psr-http-message-bridge": "v0.2", "symfony/psr-http-message-bridge": "v0.2",
"zendframework/zend-diactoros": "~1.1", "zendframework/zend-diactoros": "~1.1",
"composer/semver": "~1.0", "composer/semver": "~1.0",
"paragonie/random_compat": "~1.0", "paragonie/random_compat": "^1|^2",
"asm89/stack-cors": "~1.0" "asm89/stack-cors": "~1.0"
}, },
"require-dev": { "require-dev": {
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
"jcalderonzumba/gastonjs": "~1.0.2", "jcalderonzumba/gastonjs": "~1.0.2",
"jcalderonzumba/mink-phantomjs-driver": "~0.3.1", "jcalderonzumba/mink-phantomjs-driver": "~0.3.1",
"mikey179/vfsStream": "~1.2", "mikey179/vfsStream": "~1.2",
"phpunit/phpunit": "~4.8", "phpunit/phpunit": ">=4.8.28 <5",
"symfony/css-selector": "~2.8" "symfony/css-selector": "~2.8"
}, },
"replace": { "replace": {
......
...@@ -1073,8 +1073,9 @@ ...@@ -1073,8 +1073,9 @@
* yourmodule/tests/src/Unit directory, according to the PSR-4 standard. * yourmodule/tests/src/Unit directory, according to the PSR-4 standard.
* - Your test class needs a phpDoc comment block with a description and * - Your test class needs a phpDoc comment block with a description and
* a @group annotation, which gives information about the test. * a @group annotation, which gives information about the test.
* - Methods in your test class whose names start with 'test' are the actual * - Add test cases by adding method names that start with 'test' and have no
* test cases. Each one should test a logical subset of the functionality. * arguments, for example testYourTestCase(). Each one should test a logical
* subset of the functionality.
* For more details, see: * For more details, see:
* - https://www.drupal.org/phpunit for full documentation on how to write * - https://www.drupal.org/phpunit for full documentation on how to write
* PHPUnit tests for Drupal. * PHPUnit tests for Drupal.
...@@ -1110,9 +1111,9 @@ ...@@ -1110,9 +1111,9 @@
* set up content types and similar procedures. * set up content types and similar procedures.
* - In some cases, you may need to write a test module to support your test; * - In some cases, you may need to write a test module to support your test;
* put such modules under the yourmodule/tests/modules directory. * put such modules under the yourmodule/tests/modules directory.
* - Methods in your test class whose names start with 'test', and which have * - Add test cases by adding method names that start with 'test' and have no
* no arguments, are the actual test cases. Each one should test a logical * arguments, for example testYourTestCase(). Each one should test a logical
* subset of the functionality, and each one runs in a new, isolated test * subset of the functionality. Each method runs in a new, isolated test
* environment, so it can only rely on the setUp() method, not what has * environment, so it can only rely on the setUp() method, not what has
* been set up by other test methods. * been set up by other test methods.
* For more details, see: * For more details, see:
...@@ -1121,6 +1122,52 @@ ...@@ -1121,6 +1122,52 @@
* - @link oo_conventions Object-oriented programming topic @endlink for more * - @link oo_conventions Object-oriented programming topic @endlink for more
* on PSR-4, namespaces, and where to place classes. * on PSR-4, namespaces, and where to place classes.
* *
* @section write_functional_phpunit Write functional PHP tests (phpunit)
* Functional tests extend the BrowserTestBase base class, and use PHPUnit as
* their underlying framework. They use a simulated browser, in which the test
* can click links, visit URLs, post to forms, etc. To write a functional test:
* - Extend \Drupal\Tests\BrowserTestBase.
* - Place the test in the yourmodule/tests/src/Functional/ directory and use
* the \Drupal\Tests\yourmodule\Functional namespace.
* - Add a @group annotation. For example, if the test is for a Drupal 6
* migration process, the group core uses is migrate_drupal_6. Use yourmodule
* as the group name if the test does not belong to another larger group.
* - You may also override the default setUp() method, which can be used to set
* up content types and similar procedures. Don't forget to call the parent
* method.
* - In some cases, you may need to write a test module to support your test;
* put such modules under the yourmodule/tests/modules directory.
* - Add test cases by adding method names that start with 'test' and have no
* arguments, for example testYourTestCase(). Each one should test a logical
* subset of the functionality. Each method runs in a new, isolated test
* environment, so it can only rely on the setUp() method, not what has
* been set up by other test methods.
* For more details, see:
* - https://www.drupal.org/docs/8/phpunit/phpunit-browser-test-tutorial for
* a full tutorial on how to write functional PHPUnit tests for Drupal.
* - https://www.drupal.org/phpunit for the full documentation on how to write
* PHPUnit tests for Drupal.
*
* @section write_jsfunctional_phpunit Write functional JavaScript tests (phpunit)
* To write a functional test that relies on JavaScript:
* - Extend \Drupal\FunctionalJavaScriptTests\JavascriptTestBase.
* - Place the test into the yourmodule/tests/src/FunctionalJavascript/
* directory and use the \Drupal\Tests\yourmodule\FunctionalJavascript
* namespace.
* - Add a @group annotation. Use yourmodule as the group name if the test does
* not belong to another larger group.
* - Set up PhantomJS; see http://phantomjs.org/download.html.
* - To run tests, see core/tests/README.md.
* - When clicking a link/button with Ajax behavior attached, keep in mind that
* the underlying browser might take time to deliver changes to the HTML. Use
* $this->assertSession()->assertWaitOnAjaxRequest() to wait for the Ajax
* request to finish.
* For more details, see:
* - https://www.drupal.org/docs/8/phpunit/phpunit-javascript-testing-tutorial
* for a full tutorial on how to write PHPUnit JavaScript tests for Drupal.
* - https://www.drupal.org/phpunit for the full documentation on how to write
* PHPUnit tests for Drupal.
*
* @section running Running tests * @section running Running tests
* You can run both Simpletest and PHPUnit tests by enabling the core Testing * You can run both Simpletest and PHPUnit tests by enabling the core Testing
* module (core/modules/simpletest). Once that module is enabled, tests can be * module (core/modules/simpletest). Once that module is enabled, tests can be
...@@ -2493,7 +2540,7 @@ function hook_validation_constraint_alter(array &$definitions) { ...@@ -2493,7 +2540,7 @@ function hook_validation_constraint_alter(array &$definitions) {
* this class is subscribed to, and which methods on the class should be * this class is subscribed to, and which methods on the class should be
* called for each one. Example: * called for each one. Example:
* @code * @code
* public function getSubscribedEvents() { * public static function getSubscribedEvents() {
* // Subscribe to kernel terminate with priority 100. * // Subscribe to kernel terminate with priority 100.
* $events[KernelEvents::TERMINATE][] = array('onTerminate', 100); * $events[KernelEvents::TERMINATE][] = array('onTerminate', 100);
* // Subscribe to kernel request with default priority of 0. * // Subscribe to kernel request with default priority of 0.
......
...@@ -539,12 +539,12 @@ function entity_get_display($entity_type, $bundle, $view_mode) { ...@@ -539,12 +539,12 @@ function entity_get_display($entity_type, $bundle, $view_mode) {
* When the entity form display is not available in configuration, you can * When the entity form display is not available in configuration, you can
* create a new EntityFormDisplay object using: * create a new EntityFormDisplay object using:
* @code * @code
* $values = ('entity_form_display', array( * $values = array(
* 'targetEntityType' => $entity_type, * 'targetEntityType' => $entity_type,
* 'bundle' => $bundle, * 'bundle' => $bundle,
* 'mode' => $form_mode, * 'mode' => $form_mode,
* 'status' => TRUE, * 'status' => TRUE,
* )); * );
* \Drupal::entityTypeManager() * \Drupal::entityTypeManager()
* ->getStorage('entity_form_display') * ->getStorage('entity_form_display')
* ->create($values); * ->create($values);
......
...@@ -511,8 +511,6 @@ function template_preprocess_form_element_label(&$variables) { ...@@ -511,8 +511,6 @@ function template_preprocess_form_element_label(&$variables) {
$variables['title'] = ['#markup' => $element['#title']]; $variables['title'] = ['#markup' => $element['#title']];
} }
$variables['attributes'] = array();
// Pass elements title_display to template. // Pass elements title_display to template.
$variables['title_display'] = $element['#title_display']; $variables['title_display'] = $element['#title_display'];
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
use Drupal\Core\Site\Settings; use Drupal\Core\Site\Settings;
use Drupal\Core\StringTranslation\Translator\FileTranslation; use Drupal\Core\StringTranslation\Translator\FileTranslation;
use Drupal\Core\StackMiddleware\ReverseProxyMiddleware; use Drupal\Core\StackMiddleware\ReverseProxyMiddleware;
use Drupal\Core\StreamWrapper\PublicStream;
use Drupal\Core\Extension\ExtensionDiscovery; use Drupal\Core\Extension\ExtensionDiscovery;
use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Url; use Drupal\Core\Url;
...@@ -1036,6 +1037,21 @@ function install_base_system(&$install_state) { ...@@ -1036,6 +1037,21 @@ function install_base_system(&$install_state) {
// Install system.module. // Install system.module.
drupal_install_system($install_state); drupal_install_system($install_state);
// Prevent the installer from using the system temporary directory after the
// system module has been installed.
if (drupal_valid_test_ua()) {
// While the temporary directory could be preset/enforced in settings.php
// like the public files directory, some tests expect it to be configurable
// in the UI. If declared in settings.php, they would no longer be
// configurable. The temporary directory needs to match what is set in each
// test types ::prepareEnvironment() step.
$temporary_directory = dirname(PublicStream::basePath()) . '/temp';
file_prepare_directory($temporary_directory, FILE_MODIFY_PERMISSIONS | FILE_CREATE_DIRECTORY);
\Drupal::configFactory()->getEditable('system.file')
->set('path.temporary', $temporary_directory)
->save();
}
// Call file_ensure_htaccess() to ensure that all of Drupal's standard // Call file_ensure_htaccess() to ensure that all of Drupal's standard
// directories (e.g., the public files directory and config directory) have // directories (e.g., the public files directory and config directory) have
// appropriate .htaccess files. These directories will have already been // appropriate .htaccess files. These directories will have already been
......
...@@ -930,27 +930,35 @@ function drupal_requirements_url($severity) { ...@@ -930,27 +930,35 @@ function drupal_requirements_url($severity) {
*/ */
function drupal_check_profile($profile) { function drupal_check_profile($profile) {
$info = install_profile_info($profile); $info = install_profile_info($profile);
// Collect requirement testing results. // Collect requirement testing results.
$requirements = array(); $requirements = array();
// Performs an ExtensionDiscovery scan as the system module is unavailable and // Performs an ExtensionDiscovery scan as the system module is unavailable and
// we don't yet know where all the modules are located. // we don't yet know where all the modules are located.
// @todo Remove as part of https://www.drupal.org/node/2186491 // @todo Remove as part of https://www.drupal.org/node/2186491
$listing = new ExtensionDiscovery(\Drupal::root()); $drupal_root = \Drupal::root();
$module_list = $listing->scan('module'); $module_list = (new ExtensionDiscovery($drupal_root))->scan('module');
foreach ($info['dependencies'] as $module) { foreach ($info['dependencies'] as $module) {
$file = \Drupal::root() . '/' . $module_list[$module]->getPath() . "/$module.install"; // If the module is in the module list we know it exists and we can continue
if (is_file($file)) { // including and registering it.
require_once $file; // @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory()
} if (isset($module_list[$module])) {
$function = $module . '_requirements'; $function = $module . '_requirements';
$module_path = $module_list[$module]->getPath();
$install_file = "$drupal_root/$module_path/$module.install";
if (is_file($install_file)) {
require_once $install_file;
}
drupal_classloader_register($module, $module_path);
drupal_classloader_register($module, $module_list[$module]->getPath()); if (function_exists($function)) {
if (function_exists($function)) { $requirements = array_merge($requirements, $function('install'));
$requirements = array_merge($requirements, $function('install')); }
} }
} }
return $requirements; return $requirements;
} }
...@@ -1036,10 +1044,11 @@ function drupal_check_module($module) { ...@@ -1036,10 +1044,11 @@ function drupal_check_module($module) {
* *
* Example of .info.yml file: * Example of .info.yml file:
* @code * @code
* name = Minimal * name: Minimal
* description = Start fresh, with only a few modules enabled. * description: Start fresh, with only a few modules enabled.
* dependencies[] = block * dependencies:
* dependencies[] = dblog * - block
* - dblog
* @endcode * @endcode
* *
* @param $profile * @param $profile
......
...@@ -74,7 +74,7 @@ function drupal_get_schema_versions($module) { ...@@ -74,7 +74,7 @@ function drupal_get_schema_versions($module) {
* module is not installed. * module is not installed.
*/ */
function drupal_get_installed_schema_version($module, $reset = FALSE, $array = FALSE) { function drupal_get_installed_schema_version($module, $reset = FALSE, $array = FALSE) {
static $versions = array(); $versions = &drupal_static(__FUNCTION__, array());
if ($reset) { if ($reset) {
$versions = array(); $versions = array();
......
...@@ -81,7 +81,7 @@ class Drupal { ...@@ -81,7 +81,7 @@ class Drupal {
/** /**
* The current system version. * The current system version.
*/ */
const VERSION = '8.2.0-dev'; const VERSION = '8.2.8-dev';
/** /**
* Core API compatibility. * Core API compatibility.
...@@ -556,8 +556,7 @@ public static function linkGenerator() { ...@@ -556,8 +556,7 @@ public static function linkGenerator() {
* Renders a link with a given link text and Url object. * Renders a link with a given link text and Url object.
* *
* This method is a convenience wrapper for the link generator service's * This method is a convenience wrapper for the link generator service's
* generate() method. For detailed documentation, see * generate() method.
* \Drupal\Core\Routing\LinkGeneratorInterface::generate().
* *
* @param string $text * @param string $text
* The link text for the anchor tag. * The link text for the anchor tag.
......
...@@ -36,6 +36,16 @@ class DiffFormatter { ...@@ -36,6 +36,16 @@ class DiffFormatter {
*/ */
public $trailing_context_lines = 0; public $trailing_context_lines = 0;
/**
* The line stats.
*
* @var array
*/
protected $line_stats = array(
'counter' => array('x' => 0, 'y' => 0),
'offset' => array('x' => 0, 'y' => 0),
);
/** /**
* Format a diff. * Format a diff.
* *
......
...@@ -147,7 +147,7 @@ public function jsonSerialize() { ...@@ -147,7 +147,7 @@ public function jsonSerialize() {
* A call like: * A call like:
* @code * @code
* $string = "%output_text"; * $string = "%output_text";
* $arguments = ['output_text' => 'text output here.']; * $arguments = ['%output_text' => 'text output here.'];
* $this->placeholderFormat($string, $arguments); * $this->placeholderFormat($string, $arguments);
* @endcode * @endcode
* makes the following HTML code: * makes the following HTML code:
...@@ -227,11 +227,18 @@ protected static function placeholderFormat($string, array $args) { ...@@ -227,11 +227,18 @@ protected static function placeholderFormat($string, array $args) {
default: default:
// We do not trigger an error for placeholder that start with an // We do not trigger an error for placeholder that start with an
// alphabetic character. // 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])) { if (!ctype_alpha($key[0])) {
// We trigger an error as we may want to introduce new placeholders // We trigger an error as we may want to introduce new placeholders
// in the future without breaking backward compatibility. // in the future without breaking backward compatibility.
trigger_error('Invalid placeholder (' . $key . ') in string: ' . $string, E_USER_ERROR); 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; break;
} }
} }
......
...@@ -288,7 +288,6 @@ public function image($destination, $min_resolution, $max_resolution) { ...@@ -288,7 +288,6 @@ public function image($destination, $min_resolution, $max_resolution) {
// Make a perfect circle in the image middle. // Make a perfect circle in the image middle.
$color = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255)); $color = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
$smaller_dimension = min($width, $height); $smaller_dimension = min($width, $height);
$smaller_dimension = ($smaller_dimension % 2) ? $smaller_dimension : $smaller_dimension;
imageellipse($im, $width / 2, $height / 2, $smaller_dimension, $smaller_dimension, $color); imageellipse($im, $width / 2, $height / 2, $smaller_dimension, $smaller_dimension, $color);
$save_function = 'image' . ($extension == 'jpg' ? 'jpeg' : $extension); $save_function = 'image' . ($extension == 'jpg' ? 'jpeg' : $extension);
......
...@@ -54,7 +54,7 @@ public function access(Route $route, Request $request, RouteMatchInterface $rout ...@@ -54,7 +54,7 @@ public function access(Route $route, Request $request, RouteMatchInterface $rout
$path = str_replace("{{$param}}", $value, $path); $path = str_replace("{{$param}}", $value, $path);
} }
if ($this->csrfToken->validate($request->query->get('token'), $path)) { if ($this->csrfToken->validate($request->query->get('token', ''), $path)) {
$result = AccessResult::allowed(); $result = AccessResult::allowed();
} }
else { else {
......
...@@ -97,12 +97,15 @@ public function access(Request $request, AccountInterface $account) { ...@@ -97,12 +97,15 @@ public function access(Request $request, AccountInterface $account) {
&& $account->isAuthenticated() && $account->isAuthenticated()
&& $this->sessionConfiguration->hasSession($request) && $this->sessionConfiguration->hasSession($request)
) { ) {
if (!$request->headers->has('X-CSRF-Token')) {
return AccessResult::forbidden()->setReason('X-CSRF-Token request header is missing')->setCacheMaxAge(0);
}
$csrf_token = $request->headers->get('X-CSRF-Token'); $csrf_token = $request->headers->get('X-CSRF-Token');
// @todo Remove validate call using 'rest' in 8.3. // @todo Remove validate call using 'rest' in 8.3.
// Kept here for sessions active during update. // Kept here for sessions active during update.
if (!$this->csrfToken->validate($csrf_token, self::TOKEN_KEY) if (!$this->csrfToken->validate($csrf_token, self::TOKEN_KEY)
&& !$this->csrfToken->validate($csrf_token, 'rest')) { && !$this->csrfToken->validate($csrf_token, 'rest')) {
return AccessResult::forbidden()->setReason('X-CSRF-Token request header is missing')->setCacheMaxAge(0); return AccessResult::forbidden()->setReason('X-CSRF-Token request header is invalid')->setCacheMaxAge(0);
} }
} }
// Let other access checkers decide if the request is legit. // Let other access checkers decide if the request is legit.
......
...@@ -87,7 +87,7 @@ public function validate($token, $value = '') { ...@@ -87,7 +87,7 @@ public function validate($token, $value = '') {
return FALSE; return FALSE;
} }
return $token === $this->computeToken($seed, $value); return Crypt::hashEquals($this->computeToken($seed, $value), $token);
} }
/** /**
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
namespace Drupal\Core\Ajax; namespace Drupal\Core\Ajax;
use Drupal\Component\Render\PlainTextOutput;
/** /**
* Defines an AJAX command to open certain content in a dialog. * Defines an AJAX command to open certain content in a dialog.
* *
...@@ -69,6 +71,7 @@ class OpenDialogCommand implements CommandInterface, CommandWithAttachedAssetsIn ...@@ -69,6 +71,7 @@ class OpenDialogCommand implements CommandInterface, CommandWithAttachedAssetsIn
* populated automatically from the current request. * populated automatically from the current request.
*/ */
public function __construct($selector, $title, $content, array $dialog_options = array(), $settings = NULL) { public function __construct($selector, $title, $content, array $dialog_options = array(), $settings = NULL) {
$title = PlainTextOutput::renderFromHtml($title);
$dialog_options += array('title' => $title); $dialog_options += array('title' => $title);
$this->selector = $selector; $this->selector = $selector;
$this->content = $content; $this->content = $content;
......
...@@ -214,7 +214,7 @@ public function getJsAssets(AttachedAssetsInterface $assets, $optimize) { ...@@ -214,7 +214,7 @@ public function getJsAssets(AttachedAssetsInterface $assets, $optimize) {
// hook_library_info_alter(). Additionally add the current language to // hook_library_info_alter(). Additionally add the current language to
// support translation of JavaScript files via hook_js_alter(). // support translation of JavaScript files via hook_js_alter().
$libraries_to_load = $this->getLibrariesToLoad($assets); $libraries_to_load = $this->getLibrariesToLoad($assets);
$cid = 'js:' . $theme_info->getName() . ':' . $this->languageManager->getCurrentLanguage()->getId() . ':' . Crypt::hashBase64(serialize($libraries_to_load) . serialize($assets->getLibraries())) . (int) (count($assets->getSettings()) > 0) . (int) $optimize; $cid = 'js:' . $theme_info->getName() . ':' . $this->languageManager->getCurrentLanguage()->getId() . ':' . Crypt::hashBase64(serialize($libraries_to_load)) . (int) (count($assets->getSettings()) > 0) . (int) $optimize;
if ($cached = $this->cache->get($cid)) { if ($cached = $this->cache->get($cid)) {
list($js_assets_header, $js_assets_footer, $settings, $settings_in_header) = $cached->data; list($js_assets_header, $js_assets_footer, $settings, $settings_in_header) = $cached->data;
......