Update to Drupal 8.1.1. For more information, see https://www.drupal.org/node/2718713
This commit is contained in:
		
							parent
							
								
									c0a0d5a94c
								
							
						
					
					
						commit
						9eae24d844
					
				
					 669 changed files with 3873 additions and 1553 deletions
				
			
		|  | @ -11,7 +11,7 @@ Drupal 8.1.0, 2016-04-20 | |||
|     * Added Symfony Polyfill Iconv 1.1.0. | ||||
|     * Added paragonie/random_compat 1.4.1. | ||||
| - Updated vendor libraries: | ||||
|     * Updated to Symfony 2.8.4. | ||||
|     * Updated to the last 2.x minor version of Symfony: 2.8 (2.8.4). | ||||
|     * Updated to CKEditor 4.5.8. | ||||
|     * Updated to Modernizr 3.3.1. | ||||
| - Added modules: | ||||
|  | @ -34,12 +34,13 @@ Drupal 8.1.0, 2016-04-20 | |||
|       reducing the code needed to extend them. | ||||
|     * Simplified Migrate API by replacing migration configuration entities with | ||||
|       migration plugins. | ||||
|     * Added support for entity types to specify translatable plural labels. | ||||
|     * Added a revision log interface and trait for revisionable entity types. | ||||
|     * Added key field definitions to ContentEntityBase, reducing code from | ||||
|       child classes. | ||||
|     * Added generic route providers for add-page and add-form entity routes, | ||||
|       reducing the code needed to define an entity type. | ||||
|     * Various improvements for defining entity types: | ||||
|       * Added support for entity types to specify translatable plural labels. | ||||
|       * Added a revision log interface and trait for revisionable entity types. | ||||
|       * Added key field definitions to ContentEntityBase, reducing code from | ||||
|         child classes. | ||||
|       * Added generic route providers for add-page and add-form entity routes, | ||||
|         reducing the code needed to define an entity type. | ||||
| - Testing improvements: | ||||
|     * Added support for automated JavaScript testing. | ||||
|     * Added verbose output for BrowserTestBase. | ||||
|  | @ -414,8 +415,8 @@ Drupal 7.0, 2011-01-05 | |||
|       are available. | ||||
| - OpenID: | ||||
|     * Added support for Gmail and Google Apps for Domain identifiers. Users can | ||||
|       now login with their user@example.com identifier when example.com is powered | ||||
|       by Google. | ||||
|       now log in with their user@example.com identifier when example.com is | ||||
|       powered by Google. | ||||
|     * Made the OpenID module more pluggable. | ||||
| - Added code registry: | ||||
|     * Using the registry, modules declare their includable files via their .info file, | ||||
|  |  | |||
|  | @ -314,6 +314,7 @@ 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 | ||||
|  |  | |||
|  | @ -140,10 +140,8 @@ | |||
|             "Drupal\\Component\\": "lib/Drupal/Component", | ||||
|             "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver" | ||||
|         }, | ||||
|         "files": [ | ||||
|             "lib/Drupal.php" | ||||
|         ], | ||||
|         "classmap": [ | ||||
|             "lib/Drupal.php", | ||||
|             "lib/Drupal/Component/Utility/Timer.php", | ||||
|             "lib/Drupal/Component/Utility/Unicode.php", | ||||
|             "lib/Drupal/Core/Database/Database.php", | ||||
|  |  | |||
|  | @ -80,6 +80,11 @@ services: | |||
|     arguments: ['@request_stack'] | ||||
|     tags: | ||||
|       - { name: cache.context } | ||||
|   cache_context.url.path.parent: | ||||
|     class: Drupal\Core\Cache\Context\PathParentCacheContext | ||||
|     arguments: ['@request_stack'] | ||||
|     tags: | ||||
|       - { name: cache.context } | ||||
|   cache_context.url.query_args: | ||||
|     class: Drupal\Core\Cache\Context\QueryArgsCacheContext | ||||
|     arguments: ['@request_stack'] | ||||
|  |  | |||
|  | @ -623,7 +623,7 @@ function drupal_valid_test_ua($new_prefix = 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)) { | ||||
|     list(, $prefix, $time, $salt, $hmac) = $matches; | ||||
|     $check_string =  $prefix . ':' . $time . ':' . $salt; | ||||
|     $check_string = $prefix . ':' . $time . ':' . $salt; | ||||
|     // Read the hash salt prepared by drupal_generate_test_ua().
 | ||||
|     // This function is called before settings.php is read and Drupal's error
 | ||||
|     // handlers are set up. While Drupal's error handling may be properly
 | ||||
|  |  | |||
|  | @ -14,6 +14,7 @@ use Drupal\Component\Utility\Html; | |||
| use Drupal\Component\Utility\SortArray; | ||||
| use Drupal\Component\Utility\UrlHelper; | ||||
| use Drupal\Core\Cache\Cache; | ||||
| use Drupal\Core\Render\Element\Link; | ||||
| use Drupal\Core\Render\Markup; | ||||
| use Drupal\Core\StringTranslation\TranslatableMarkup; | ||||
| use Drupal\Core\PhpStorage\PhpStorageFactory; | ||||
|  | @ -748,7 +749,7 @@ function drupal_clear_js_cache() { | |||
|  *   Use \Drupal\Core\Render\Element\Link::preRenderLink(). | ||||
|  */ | ||||
| function drupal_pre_render_link($element) { | ||||
|   return Element\Link::preRenderLink($element); | ||||
|   return Link::preRenderLink($element); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| 
 | ||||
| use Drupal\Component\Utility\UrlHelper; | ||||
| use Drupal\Core\Render\Element; | ||||
| use Drupal\Core\Render\Element\RenderElement; | ||||
| use Drupal\Core\Template\Attribute; | ||||
| use Drupal\Core\Url; | ||||
| use Symfony\Component\HttpFoundation\RedirectResponse; | ||||
|  | @ -29,7 +30,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse; | |||
| function template_preprocess_select(&$variables) { | ||||
|   $element = $variables['element']; | ||||
|   Element::setAttributes($element, array('id', 'name', 'size')); | ||||
|   Element\RenderElement::setAttributes($element, array('form-select')); | ||||
|   RenderElement::setAttributes($element, array('form-select')); | ||||
| 
 | ||||
|   $variables['attributes'] = $element['#attributes']; | ||||
|   $variables['options'] = form_select_options($element); | ||||
|  | @ -191,7 +192,7 @@ function form_get_options($element, $key) { | |||
| function template_preprocess_fieldset(&$variables) { | ||||
|   $element = $variables['element']; | ||||
|   Element::setAttributes($element, array('id')); | ||||
|   Element\RenderElement::setAttributes($element); | ||||
|   RenderElement::setAttributes($element); | ||||
|   $variables['attributes'] = isset($element['#attributes']) ? $element['#attributes'] : array(); | ||||
|   $variables['prefix'] = isset($element['#field_prefix']) ? $element['#field_prefix'] : NULL; | ||||
|   $variables['suffix'] = isset($element['#field_suffix']) ? $element['#field_suffix'] : NULL; | ||||
|  | @ -376,7 +377,7 @@ function template_preprocess_form(&$variables) { | |||
| function template_preprocess_textarea(&$variables) { | ||||
|   $element = $variables['element']; | ||||
|   Element::setAttributes($element, array('id', 'name', 'rows', 'cols', 'placeholder')); | ||||
|   Element\RenderElement::setAttributes($element, array('form-textarea')); | ||||
|   RenderElement::setAttributes($element, array('form-textarea')); | ||||
|   $variables['wrapper_attributes'] = new Attribute(); | ||||
|   $variables['attributes'] = new Attribute($element['#attributes']); | ||||
|   $variables['value'] = $element['#value']; | ||||
|  |  | |||
|  | @ -7,7 +7,6 @@ | |||
| 
 | ||||
| use Drupal\Component\Utility\UrlHelper; | ||||
| use Drupal\Core\DrupalKernel; | ||||
| use Drupal\Core\Config\BootstrapConfigStorageFactory; | ||||
| use Drupal\Core\Database\Database; | ||||
| use Drupal\Core\Database\DatabaseExceptionWrapper; | ||||
| use Drupal\Core\Form\FormState; | ||||
|  | @ -489,8 +488,7 @@ function install_begin_request($class_loader, &$install_state) { | |||
| 
 | ||||
|   // Ensure that the active configuration is empty before installation starts.
 | ||||
|   if ($install_state['config_verified'] && empty($task)) { | ||||
|     $config = BootstrapConfigStorageFactory::get()->listAll(); | ||||
|     if (!empty($config)) { | ||||
|     if (count($kernel->getConfigStorage()->listAll())) { | ||||
|       $task = NULL; | ||||
|       throw new AlreadyInstalledException($container->get('string_translation')); | ||||
|     } | ||||
|  | @ -1799,7 +1797,7 @@ function install_check_translations($langcode, $server_pattern) { | |||
|   $writable = FALSE; | ||||
|   // @todo: Make this configurable.
 | ||||
|   $site_path = \Drupal::service('site.path'); | ||||
|   $files_directory =  $site_path . '/files'; | ||||
|   $files_directory = $site_path . '/files'; | ||||
|   $translations_directory = $site_path . '/files/translations'; | ||||
|   $translations_directory_exists = FALSE; | ||||
|   $online = FALSE; | ||||
|  |  | |||
|  | @ -515,7 +515,7 @@ function drupal_install_config_directories() { | |||
|   // they can later be added to git. Since this directory is auto-created, we
 | ||||
|   // have to write out the README rather than just adding it to the drupal core
 | ||||
|   // repo.
 | ||||
|   $text =  'This directory contains configuration to be imported into your Drupal site. To make this configuration active, visit admin/config/development/configuration/sync.'  .' For information about deploying configuration between servers, see https://www.drupal.org/documentation/administer/config'; | ||||
|   $text = 'This directory contains configuration to be imported into your Drupal site. To make this configuration active, visit admin/config/development/configuration/sync.'  .' For information about deploying configuration between servers, see https://www.drupal.org/documentation/administer/config'; | ||||
|   file_put_contents(config_get_config_directory(CONFIG_SYNC_DIRECTORY) . '/README.txt', $text); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -580,20 +580,29 @@ function template_preprocess_datetime_wrapper(&$variables) { | |||
|  * | ||||
|  * Default template: links.html.twig. | ||||
|  * | ||||
|  * Unfortunately links templates duplicate the "active" class handling of l() | ||||
|  * and LinkGenerator::generate() because it needs to be able to set the "active" | ||||
|  * class not on the links themselves ("a" tags), but on the list items ("li" | ||||
|  * tags) that contain the links. This is necessary for CSS to be able to style | ||||
|  * list items differently when the link is active, since CSS does not yet allow | ||||
|  * one to style list items only if it contains a certain element with a certain | ||||
|  * class. I.e. we cannot yet convert this jQuery selector to a CSS selector: | ||||
|  * jQuery('li:has("a.is-active")') | ||||
|  * | ||||
|  * @param array $variables | ||||
|  *   An associative array containing: | ||||
|  *   - links: An array of links to be themed. Each link should be itself an | ||||
|  *     array, with the following elements: | ||||
|  *     - title: The link text. | ||||
|  *     - url: (optional) The url object to link to. If omitted, no a tag is | ||||
|  *       printed out. | ||||
|  *     - url: (optional) The \Drupal\Core\Url object to link to. If omitted, no | ||||
|  *       anchor tag is printed out. | ||||
|  *     - attributes: (optional) Attributes for the anchor, or for the <span> | ||||
|  *       tag used in its place if no 'href' is supplied. If element 'class' is | ||||
|  *       included, it must be an array of one or more class names. | ||||
|  *     If the 'href' element is supplied, the entire link array is passed to | ||||
|  *     l() as its $options parameter. | ||||
|  *   - attributes: A keyed array of attributes for the UL containing the | ||||
|  *     list of links. | ||||
|  *   - attributes: A keyed array of attributes for the <ul> containing the list | ||||
|  *     of links. | ||||
|  *   - set_active_class: (optional) Whether each link should compare the | ||||
|  *     route_name + route_parameters or href (path), language and query options | ||||
|  *     to the current URL, to determine whether the link is "active". If so, an | ||||
|  | @ -622,15 +631,6 @@ function template_preprocess_datetime_wrapper(&$variables) { | |||
|  *     http://juicystudio.com/article/screen-readers-display-none.php and | ||||
|  *     http://www.w3.org/TR/WCAG-TECHS/H42.html for more information. | ||||
|  * | ||||
|  * Unfortunately links templates duplicate the "active" class handling of l() | ||||
|  * and LinkGenerator::generate() because it needs to be able to set the "active" | ||||
|  * class not on the links themselves ("a" tags), but on the list items ("li" | ||||
|  * tags) that contain the links. This is necessary for CSS to be able to style | ||||
|  * list items differently when the link is active, since CSS does not yet allow | ||||
|  * one to style list items only if it contains a certain element with a certain | ||||
|  * class. I.e. we cannot yet convert this jQuery selector to a CSS selector: | ||||
|  *   jQuery('li:has("a.is-active")') | ||||
|  * | ||||
|  * @see \Drupal\Core\Utility\LinkGenerator | ||||
|  * @see \Drupal\Core\Utility\LinkGenerator::generate() | ||||
|  * @see system_page_attachments() | ||||
|  | @ -1052,6 +1052,7 @@ function template_preprocess_table(&$variables) { | |||
|  *     render properties for all nested child lists. | ||||
|  *   - title: A title to be prepended to the list. | ||||
|  *   - list_type: The type of list to return (e.g. "ul", "ol"). | ||||
|  *   - wrapper_attributes: HTML attributes to be applied to the list wrapper. | ||||
|  * | ||||
|  * @see https://www.drupal.org/node/1842756 | ||||
|  */ | ||||
|  | @ -1264,7 +1265,7 @@ function template_preprocess_html(&$variables) { | |||
|   // Add a variable for the root path. This can be used to create a class and
 | ||||
|   // theme the page depending on the current path (e.g. node, admin, user) as
 | ||||
|   // well as more specific data like path-frontpage.
 | ||||
|   $is_front_page =  \Drupal::service('path.matcher')->isFrontPage(); | ||||
|   $is_front_page = \Drupal::service('path.matcher')->isFrontPage(); | ||||
| 
 | ||||
|   if ($is_front_page) { | ||||
|     $variables['root_path'] = FALSE; | ||||
|  | @ -1527,7 +1528,7 @@ function template_preprocess_field(&$variables, $hook) { | |||
| 
 | ||||
|   static $default_attributes; | ||||
|   if (!isset($default_attributes)) { | ||||
|     $default_attributes = new Attribute; | ||||
|     $default_attributes = new Attribute(); | ||||
|   } | ||||
| 
 | ||||
|   // Merge attributes when a single-value field has a hidden label.
 | ||||
|  |  | |||
|  | @ -81,7 +81,7 @@ class Drupal { | |||
|   /** | ||||
|    * The current system version. | ||||
|    */ | ||||
|   const VERSION = '8.1.0'; | ||||
|   const VERSION = '8.1.1'; | ||||
| 
 | ||||
|   /** | ||||
|    * Core API compatibility. | ||||
|  |  | |||
|  | @ -15,9 +15,9 @@ class ZfExtensionManagerSfContainer implements ReaderManagerInterface, WriterMan | |||
|   /** | ||||
|    * This property was based from Zend Framework (http://framework.zend.com/) | ||||
|    * | ||||
|    * @link      http://github.com/zendframework/zf2 for the canonical source repository | ||||
|    * @link http://github.com/zendframework/zf2 for the canonical source repository | ||||
|    * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com) | ||||
|    * @license   http://framework.zend.com/license/new-bsd New BSD License | ||||
|    * @license http://framework.zend.com/license/new-bsd New BSD License | ||||
|    * | ||||
|    * A map of characters to be replaced through strtr. | ||||
|    * | ||||
|  | @ -75,9 +75,9 @@ class ZfExtensionManagerSfContainer implements ReaderManagerInterface, WriterMan | |||
|   /** | ||||
|    * This method was based from Zend Framework (http://framework.zend.com/) | ||||
|    * | ||||
|    * @link      http://github.com/zendframework/zf2 for the canonical source repository | ||||
|    * @link http://github.com/zendframework/zf2 for the canonical source repository | ||||
|    * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com) | ||||
|    * @license   http://framework.zend.com/license/new-bsd New BSD License | ||||
|    * @license http://framework.zend.com/license/new-bsd New BSD License | ||||
|    * | ||||
|    * Canonicalize the extension name to a service name. | ||||
|    * | ||||
|  |  | |||
|  | @ -116,7 +116,7 @@ class DateTimePlus { | |||
|    * date even if some values are missing. | ||||
|    * | ||||
|    * @param array $date_parts | ||||
|    *   An array of date parts, like ('year' => 2014, 'month => 4). | ||||
|    *   An array of date parts, like ('year' => 2014, 'month' => 4). | ||||
|    * @param mixed $timezone | ||||
|    *   (optional) \DateTimeZone object, time zone string or NULL. NULL uses the | ||||
|    *   default system time zone. Defaults to NULL. | ||||
|  |  | |||
|  | @ -169,4 +169,3 @@ class Diff { | |||
|     return $this->edits; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -73,7 +73,7 @@ class DiffFormatter { | |||
|         $context = $edit->orig; | ||||
|       } | ||||
|       else { | ||||
|         if (! is_array($block)) { | ||||
|         if (!is_array($block)) { | ||||
|           $context = array_slice($context, sizeof($context) - $nlead); | ||||
|           $x0 = $xi - sizeof($context); | ||||
|           $y0 = $yi - sizeof($context); | ||||
|  |  | |||
|  | @ -181,7 +181,7 @@ class DiffEngine { | |||
|       } | ||||
|     } | ||||
|     $this->lcs = 0; | ||||
|     $this->seq[0]= $yoff - 1; | ||||
|     $this->seq[0] = $yoff - 1; | ||||
|     $this->in_seq = array(); | ||||
|     $ymids[0] = array(); | ||||
| 
 | ||||
|  | @ -190,11 +190,11 @@ class DiffEngine { | |||
|     for ($chunk = 0; $chunk < $nchunks; $chunk++) { | ||||
|       if ($chunk > 0) { | ||||
|         for ($i = 0; $i <= $this->lcs; $i++) { | ||||
|           $ymids[$i][$chunk-1] = $this->seq[$i]; | ||||
|           $ymids[$i][$chunk - 1] = $this->seq[$i]; | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       $x1 = $xoff + (int)(($numer + ($xlim-$xoff)*$chunk) / $nchunks); | ||||
|       $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks); | ||||
|       for ( ; $x < $x1; $x++) { | ||||
|         $line = $flip ? $this->yv[$x] : $this->xv[$x]; | ||||
|         if (empty($ymatches[$line])) { | ||||
|  | @ -206,12 +206,12 @@ class DiffEngine { | |||
|           if (empty($this->in_seq[$y])) { | ||||
|             $k = $this->_lcs_pos($y); | ||||
|             $this::USE_ASSERTS && assert($k > 0); | ||||
|             $ymids[$k] = $ymids[$k-1]; | ||||
|             $ymids[$k] = $ymids[$k - 1]; | ||||
|             break; | ||||
|           } | ||||
|         } | ||||
|         while (list ($junk, $y) = each($matches)) { | ||||
|           if ($y > $this->seq[$k-1]) { | ||||
|           if ($y > $this->seq[$k - 1]) { | ||||
|             $this::USE_ASSERTS && assert($y < $this->seq[$k]); | ||||
|             // Optimization: this is a common case:
 | ||||
|             // next match is just replacing previous match.
 | ||||
|  | @ -222,7 +222,7 @@ class DiffEngine { | |||
|           elseif (empty($this->in_seq[$y])) { | ||||
|             $k = $this->_lcs_pos($y); | ||||
|             $this::USE_ASSERTS && assert($k > 0); | ||||
|             $ymids[$k] = $ymids[$k-1]; | ||||
|             $ymids[$k] = $ymids[$k - 1]; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | @ -363,7 +363,7 @@ class DiffEngine { | |||
|       while ($j < $other_len && $other_changed[$j]) { | ||||
|         $j++; | ||||
|       } | ||||
|       while ($i < $len && ! $changed[$i]) { | ||||
|       while ($i < $len && !$changed[$i]) { | ||||
|         $this::USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]'); | ||||
|         $i++; | ||||
|         $j++; | ||||
|  |  | |||
|  | @ -56,4 +56,3 @@ class MappedDiff extends Diff { | |||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -86,4 +86,3 @@ class YamlDiscovery implements DiscoverableInterface { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -219,7 +219,7 @@ class PoStreamReader implements PoStreamInterface, PoReaderInterface { | |||
|     if (!$item) { | ||||
|       return; | ||||
|     } | ||||
|     $header = new PoHeader; | ||||
|     $header = new PoHeader(); | ||||
|     $header->setFromString(trim($item->getTranslation())); | ||||
|     $this->_header = $header; | ||||
|   } | ||||
|  |  | |||
|  | @ -50,7 +50,7 @@ class FileStorage implements PhpStorageInterface { | |||
|     $path = $this->getFullPath($name); | ||||
|     $directory = dirname($path); | ||||
|     if ($this->ensureDirectory($directory)) { | ||||
|       $htaccess_path =  $directory . '/.htaccess'; | ||||
|       $htaccess_path = $directory . '/.htaccess'; | ||||
|       if (!file_exists($htaccess_path) && file_put_contents($htaccess_path, static::htaccessLines())) { | ||||
|         @chmod($htaccess_path, 0444); | ||||
|       } | ||||
|  | @ -126,7 +126,7 @@ EOF; | |||
|    */ | ||||
|   protected function ensureDirectory($directory, $mode = 0777) { | ||||
|     if ($this->createDirectory($directory, $mode)) { | ||||
|       $htaccess_path =  $directory . '/.htaccess'; | ||||
|       $htaccess_path = $directory . '/.htaccess'; | ||||
|       if (!file_exists($htaccess_path) && file_put_contents($htaccess_path, static::htaccessLines())) { | ||||
|         @chmod($htaccess_path, 0444); | ||||
|       } | ||||
|  |  | |||
|  | @ -163,9 +163,9 @@ class FormattableMarkup implements MarkupInterface, \Countable { | |||
|    *     wrapped in quotes: | ||||
|    *     @code | ||||
|    *     // Secure (with quotes):
 | ||||
|    *     $this->placeholderFormat('<a href=":url">@variable</a>', [':url' => $url, @variable => $variable]); | ||||
|    *     $this->placeholderFormat('<a href=":url">@variable</a>', [':url' => $url, '@variable' => $variable]); | ||||
|    *     // Insecure (without quotes):
 | ||||
|    *     $this->placeholderFormat('<a href=:url>@variable</a>', [':url' => $url, @variable => $variable]); | ||||
|    *     $this->placeholderFormat('<a href=:url>@variable</a>', [':url' => $url, '@variable' => $variable]); | ||||
|    *     @endcode | ||||
|    *     When ":variable" comes from arbitrary user input, the result is secure, | ||||
|    *     but not guaranteed to be a valid URL (which means the resulting output | ||||
|  |  | |||
|  | @ -139,7 +139,7 @@ class Random { | |||
|    * @return string | ||||
|    */ | ||||
|   public function word($length) { | ||||
|     mt_srand((double) microtime()*1000000); | ||||
|     mt_srand((double) microtime() * 1000000); | ||||
| 
 | ||||
|     $vowels = array("a", "e", "i", "o", "u"); | ||||
|     $cons = array("b", "c", "d", "g", "h", "j", "k", "l", "m", "n", "p", "r", "s", "t", "u", "v", "w", "tr", | ||||
|  |  | |||
|  | @ -19,7 +19,6 @@ class UrlHelper { | |||
|   /** | ||||
|    * Parses an array into a valid, rawurlencoded query string. | ||||
|    * | ||||
|    * | ||||
|    * rawurlencode() is RFC3986 compliant, and as a consequence RFC3987 | ||||
|    * compliant. The latter defines the required format of "URLs" in HTML5. | ||||
|    * urlencode() is almost the same as rawurlencode(), except that it encodes | ||||
|  |  | |||
|  | @ -83,7 +83,7 @@ abstract class AccessResult implements AccessResultInterface, RefinableCacheable | |||
|    *   will be TRUE. | ||||
|    */ | ||||
|   public static function forbiddenIf($condition) { | ||||
|     return $condition ? static::forbidden(): static::neutral(); | ||||
|     return $condition ? static::forbidden() : static::neutral(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  |  | |||
|  | @ -71,4 +71,3 @@ class DataCommand implements CommandInterface { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -34,4 +34,3 @@ class AppRootFactory { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -6,4 +6,3 @@ namespace Drupal\Core\Archiver; | |||
|  * Defines an exception class for Drupal\Core\Archiver\ArchiverInterface. | ||||
|  */ | ||||
| class ArchiverException extends \Exception {} | ||||
| 
 | ||||
|  |  | |||
|  | @ -70,7 +70,7 @@ class Zip implements ArchiverInterface { | |||
|    */ | ||||
|   public function listContents() { | ||||
|     $files = array(); | ||||
|     for ($i=0; $i < $this->zip->numFiles; $i++) { | ||||
|     for ($i = 0; $i < $this->zip->numFiles; $i++) { | ||||
|       $files[] = $this->zip->getNameIndex($i); | ||||
|     } | ||||
|     return $files; | ||||
|  |  | |||
|  | @ -214,7 +214,7 @@ class AssetResolver implements AssetResolverInterface { | |||
|     // hook_library_info_alter(). Additionally add the current language to
 | ||||
|     // support translation of JavaScript files via hook_js_alter().
 | ||||
|     $libraries_to_load = $this->getLibrariesToLoad($assets); | ||||
|     $cid = 'js:' . $theme_info->getName() . ':' .  $this->languageManager->getCurrentLanguage()->getId() . ':' . Crypt::hashBase64(serialize($libraries_to_load)) . (int) (count($assets->getSettings()) > 0) . (int) $optimize; | ||||
|     $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; | ||||
| 
 | ||||
|     if ($cached = $this->cache->get($cid)) { | ||||
|       list($js_assets_header, $js_assets_footer, $settings, $settings_in_header) = $cached->data; | ||||
|  |  | |||
|  | @ -12,8 +12,8 @@ class CssCollectionGrouper implements AssetCollectionGrouperInterface { | |||
|    * | ||||
|    * Puts multiple items into the same group if they are groupable and if they | ||||
|    * are for the same 'media' and 'browsers'. Items of the 'file' type are | ||||
|    * groupable if their 'preprocess' flag is TRUE, items of the 'inline' type | ||||
|    * are always groupable, and items of the 'external' type are never groupable. | ||||
|    * groupable if their 'preprocess' flag is TRUE, and items of the 'external' | ||||
|    * type are never groupable. | ||||
|    * | ||||
|    * Also ensures that the process of grouping items does not change their | ||||
|    * relative order. This requirement may result in multiple groups for the same | ||||
|  | @ -55,11 +55,6 @@ class CssCollectionGrouper implements AssetCollectionGrouperInterface { | |||
|           $group_keys = $item['preprocess'] ? array($item['type'], $item['group'], $item['media'], $item['browsers']) : FALSE; | ||||
|           break; | ||||
| 
 | ||||
|         case 'inline': | ||||
|           // Always group inline items.
 | ||||
|           $group_keys = array($item['type'], $item['media'], $item['browsers']); | ||||
|           break; | ||||
| 
 | ||||
|         case 'external': | ||||
|           // Do not group external items.
 | ||||
|           $group_keys = FALSE; | ||||
|  |  | |||
|  | @ -133,16 +133,6 @@ class CssCollectionOptimizer implements AssetCollectionOptimizerInterface { | |||
|           } | ||||
|           break; | ||||
| 
 | ||||
|         case 'inline': | ||||
|           // We don't do any caching for inline CSS assets.
 | ||||
|           $data = ''; | ||||
|           foreach ($css_group['items'] as $css_asset) { | ||||
|             $data .= $this->optimizer->optimize($css_asset); | ||||
|           } | ||||
|           unset($css_assets[$order]['data']['items']); | ||||
|           $css_assets[$order]['data'] = $data; | ||||
|           break; | ||||
| 
 | ||||
|         case 'external': | ||||
|           // We don't do any aggregation and hence also no caching for external
 | ||||
|           // CSS assets.
 | ||||
|  |  | |||
|  | @ -20,19 +20,14 @@ class CssOptimizer implements AssetOptimizerInterface { | |||
|    * {@inheritdoc} | ||||
|    */ | ||||
|   public function optimize(array $css_asset) { | ||||
|     if (!in_array($css_asset['type'], array('file', 'inline'))) { | ||||
|       throw new \Exception('Only file or inline CSS assets can be optimized.'); | ||||
|     if ($css_asset['type'] != 'file') { | ||||
|       throw new \Exception('Only file CSS assets can be optimized.'); | ||||
|     } | ||||
|     if ($css_asset['type'] === 'file' && !$css_asset['preprocess']) { | ||||
|     if (!$css_asset['preprocess']) { | ||||
|       throw new \Exception('Only file CSS assets with preprocessing enabled can be optimized.'); | ||||
|     } | ||||
| 
 | ||||
|     if ($css_asset['type'] === 'file') { | ||||
|       return $this->processFile($css_asset); | ||||
|     } | ||||
|     else { | ||||
|       return $this->processCss($css_asset['data'], $css_asset['preprocess']); | ||||
|     } | ||||
|     return $this->processFile($css_asset); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  | @ -241,14 +236,14 @@ class CssOptimizer implements AssetOptimizerInterface { | |||
|   /** | ||||
|    * Prefixes all paths within a CSS file for processFile(). | ||||
|    * | ||||
|    * @param array $matches | ||||
|    *   An array of matches by a preg_replace_callback() call that scans for | ||||
|    *   url() references in CSS files, except for external or absolute ones. | ||||
|    * | ||||
|    * Note: the only reason this method is public is so color.module can call it; | ||||
|    * it is not on the AssetOptimizerInterface, so future refactorings can make | ||||
|    * it protected. | ||||
|    * | ||||
|    * @param array $matches | ||||
|    *   An array of matches by a preg_replace_callback() call that scans for | ||||
|    *   url() references in CSS files, except for external or absolute ones. | ||||
|    * | ||||
|    * @return string | ||||
|    *   The file path. | ||||
|    */ | ||||
|  |  | |||
|  | @ -12,8 +12,7 @@ class JsCollectionGrouper implements AssetCollectionGrouperInterface { | |||
|    * | ||||
|    * Puts multiple items into the same group if they are groupable and if they | ||||
|    * are for the same browsers. Items of the 'file' type are groupable if their | ||||
|    * 'preprocess' flag is TRUE. Items of the 'inline', 'settings', or 'external' | ||||
|    * type are not groupable. | ||||
|    * 'preprocess' flag is TRUE. Items of the 'external' type are not groupable. | ||||
|    * | ||||
|    * Also ensures that the process of grouping items does not change their | ||||
|    * relative order. This requirement may result in multiple groups for the same | ||||
|  | @ -43,9 +42,7 @@ class JsCollectionGrouper implements AssetCollectionGrouperInterface { | |||
|           break; | ||||
| 
 | ||||
|         case 'external': | ||||
|         case 'setting': | ||||
|         case 'inline': | ||||
|           // Do not group external, settings, and inline items.
 | ||||
|           // Do not group external items.
 | ||||
|           $group_keys = FALSE; | ||||
|           break; | ||||
|       } | ||||
|  |  | |||
|  | @ -138,10 +138,8 @@ class JsCollectionOptimizer implements AssetCollectionOptimizerInterface { | |||
|           break; | ||||
| 
 | ||||
|         case 'external': | ||||
|         case 'setting': | ||||
|         case 'inline': | ||||
|           // We don't do any aggregation and hence also no caching for external,
 | ||||
|           // setting or inline JS assets.
 | ||||
|           // We don't do any aggregation and hence also no caching for external
 | ||||
|           // JS assets.
 | ||||
|           $uri = $js_group['items'][0]['data']; | ||||
|           $js_assets[$order]['data'] = $uri; | ||||
|           break; | ||||
|  |  | |||
|  | @ -68,7 +68,7 @@ class JsCollectionRenderer implements AssetCollectionRendererInterface { | |||
|             'type' => 'application/json', | ||||
|             'data-drupal-selector' => 'drupal-settings-json', | ||||
|           ); | ||||
|           $element['#value'] =  Json::encode($js_asset['data']); | ||||
|           $element['#value'] = Json::encode($js_asset['data']); | ||||
|           break; | ||||
| 
 | ||||
|         case 'file': | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ class JsOptimizer implements AssetOptimizerInterface { | |||
|     if ($js_asset['type'] !== 'file') { | ||||
|       throw new \Exception('Only file JavaScript assets can be optimized.'); | ||||
|     } | ||||
|     if ($js_asset['type'] === 'file' && !$js_asset['preprocess']) { | ||||
|     if (!$js_asset['preprocess']) { | ||||
|       throw new \Exception('Only file JavaScript assets with preprocessing enabled can be optimized.'); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,41 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace Drupal\Core\Cache\Context; | ||||
| 
 | ||||
| use Drupal\Core\Cache\CacheableMetadata; | ||||
| 
 | ||||
| /** | ||||
|  * Defines a cache context service for path parents. | ||||
|  * | ||||
|  * Cache context ID: 'url.path.parent'. | ||||
|  * | ||||
|  * This allows for caching based on the path, excluding everything after the | ||||
|  * last forward slash. | ||||
|  */ | ||||
| class PathParentCacheContext extends RequestStackCacheContextBase implements CacheContextInterface { | ||||
| 
 | ||||
|   /** | ||||
|    * {@inheritdoc} | ||||
|    */ | ||||
|   public static function getLabel() { | ||||
|     return t('Parent path'); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * {@inheritdoc} | ||||
|    */ | ||||
|   public function getContext() { | ||||
|     $request = $this->requestStack->getCurrentRequest(); | ||||
|     $path_elements = explode('/', trim($request->getPathInfo(), '/')); | ||||
|     array_pop($path_elements); | ||||
|     return implode('/', $path_elements); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * {@inheritdoc} | ||||
|    */ | ||||
|   public function getCacheableMetadata() { | ||||
|     return new CacheableMetadata(); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
|  | @ -49,4 +49,3 @@ class ConfigCrudEvent extends Event { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -272,7 +272,7 @@ class ConfigFactory implements ConfigFactoryInterface, EventSubscriberInterface | |||
|     // $this->configFactoryOverrides, add cache keys for each.
 | ||||
|     $keys[] = 'global_overrides'; | ||||
|     foreach($this->configFactoryOverrides as $override) { | ||||
|       $keys[] =  $override->getCacheSuffix(); | ||||
|       $keys[] = $override->getCacheSuffix(); | ||||
|     } | ||||
|     return $keys; | ||||
|   } | ||||
|  |  | |||
|  | @ -484,14 +484,17 @@ class ConfigImporter { | |||
|    */ | ||||
|   public function doSyncStep($sync_step, &$context) { | ||||
|     if (!is_array($sync_step) && method_exists($this, $sync_step)) { | ||||
|       \Drupal::service('config.installer')->setSyncing(TRUE); | ||||
|       $this->$sync_step($context); | ||||
|     } | ||||
|     elseif (is_callable($sync_step)) { | ||||
|       \Drupal::service('config.installer')->setSyncing(TRUE); | ||||
|       call_user_func_array($sync_step, array(&$context, $this)); | ||||
|     } | ||||
|     else { | ||||
|       throw new \InvalidArgumentException('Invalid configuration synchronization step'); | ||||
|     } | ||||
|     \Drupal::service('config.installer')->setSyncing(FALSE); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  | @ -778,7 +781,6 @@ class ConfigImporter { | |||
|     // Set the config installer to use the sync directory instead of the
 | ||||
|     // extensions own default config directories.
 | ||||
|     \Drupal::service('config.installer') | ||||
|       ->setSyncing(TRUE) | ||||
|       ->setSourceStorage($this->storageComparer->getSourceStorage()); | ||||
|     if ($type == 'module') { | ||||
|       $this->moduleInstaller->$op(array($name), FALSE); | ||||
|  | @ -805,8 +807,6 @@ class ConfigImporter { | |||
|     } | ||||
| 
 | ||||
|     $this->setProcessedExtension($type, $op, $name); | ||||
|     \Drupal::service('config.installer') | ||||
|       ->setSyncing(FALSE); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  |  | |||
|  | @ -100,4 +100,3 @@ class ConfigModuleOverridesEvent extends Event { | |||
|     return $this; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,10 +17,10 @@ use Drupal\Component\Utility\SortArray; | |||
|  * The configuration dependency value is structured like this: | ||||
|  * @code | ||||
|  * array( | ||||
|  *   'config => array( | ||||
|  *   'config' => array( | ||||
|  *     // An array of configuration entity object names. Recalculated on save.
 | ||||
|  *   ), | ||||
|  *   'content => array( | ||||
|  *   'content' => array( | ||||
|  *     // An array of content entity configuration dependency names. The default
 | ||||
|  *     // format is "ENTITY_TYPE_ID:BUNDLE:UUID". Recalculated on save.
 | ||||
|  *   ), | ||||
|  | @ -165,7 +165,7 @@ class ConfigDependencyManager { | |||
|       // If checking content, module, or theme dependencies, discover which
 | ||||
|       // entities are dependent on the entities that have a direct dependency.
 | ||||
|       foreach ($dependent_entities as $entity) { | ||||
|         $entities_to_check[] =  $entity->getConfigDependencyName(); | ||||
|         $entities_to_check[] = $entity->getConfigDependencyName(); | ||||
|       } | ||||
|     } | ||||
|     $dependencies = array_merge($this->createGraphConfigEntityDependencies($entities_to_check), $dependent_entities); | ||||
|  | @ -291,10 +291,10 @@ class ConfigDependencyManager { | |||
|    *   The configuration dependencies. The array is structured like this: | ||||
|    *   @code | ||||
|    *   array( | ||||
|    *     'config => array( | ||||
|    *     'config' => array( | ||||
|    *       // An array of configuration entity object names.
 | ||||
|    *     ), | ||||
|    *     'content => array( | ||||
|    *     'content' => array( | ||||
|    *       // An array of content entity configuration dependency names. The default
 | ||||
|    *       // format is "ENTITY_TYPE_ID:BUNDLE:UUID".
 | ||||
|    *     ), | ||||
|  |  | |||
|  | @ -382,8 +382,7 @@ class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStora | |||
|    * {@inheritdoc} | ||||
|    */ | ||||
|   public function importCreate($name, Config $new_config, Config $old_config) { | ||||
|     $entity = $this->createFromStorageRecord($new_config->get()); | ||||
|     $entity->setSyncing(TRUE); | ||||
|     $entity = $this->_doCreateFromStorageRecord($new_config->get(), TRUE); | ||||
|     $entity->save(); | ||||
|     return TRUE; | ||||
|   } | ||||
|  | @ -425,6 +424,27 @@ class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStora | |||
|    * {@inheritdoc} | ||||
|    */ | ||||
|   public function createFromStorageRecord(array $values) { | ||||
|     return $this->_doCreateFromStorageRecord($values); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Helps create a configuration entity from storage values. | ||||
|    * | ||||
|    * Allows the configuration entity storage to massage storage values before | ||||
|    * creating an entity. | ||||
|    * | ||||
|    * @param array $values | ||||
|    *   The array of values from the configuration storage. | ||||
|    * @param bool $is_syncing | ||||
|    *   Is the configuration entity being created as part of a config sync. | ||||
|    * | ||||
|    * @return ConfigEntityInterface | ||||
|    *   The configuration entity. | ||||
|    * | ||||
|    * @see \Drupal\Core\Config\Entity\ConfigEntityStorageInterface::createFromStorageRecord() | ||||
|    * @see \Drupal\Core\Config\Entity\ImportableEntityStorageInterface::importCreate() | ||||
|    */ | ||||
|   protected function _doCreateFromStorageRecord(array $values, $is_syncing = FALSE) { | ||||
|     // Assign a new UUID if there is none yet.
 | ||||
|     if ($this->uuidKey && $this->uuidService && !isset($values[$this->uuidKey])) { | ||||
|       $values[$this->uuidKey] = $this->uuidService->generate(); | ||||
|  | @ -432,6 +452,7 @@ class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStora | |||
|     $data = $this->mapFromStorageRecords(array($values)); | ||||
|     $entity = current($data); | ||||
|     $entity->original = clone $entity; | ||||
|     $entity->setSyncing($is_syncing); | ||||
|     $entity->enforceIsNew(); | ||||
|     $entity->postCreate($this); | ||||
| 
 | ||||
|  | @ -439,6 +460,7 @@ class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStora | |||
|     // entity object, for instance to fill-in default values.
 | ||||
|     $this->invokeHook('create', $entity); | ||||
|     return $entity; | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  |  | |||
|  | @ -132,4 +132,3 @@ class ExtensionInstallStorage extends InstallStorage { | |||
|     return $this->folders; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -60,13 +60,13 @@ abstract class StorableConfigBase extends ConfigBase { | |||
|   /** | ||||
|    * Saves the configuration object. | ||||
|    * | ||||
|    * Must invalidate the cache tags associated with the configuration object. | ||||
|    * | ||||
|    * @param bool $has_trusted_data | ||||
|    *   Set to TRUE if the configuration data has already been checked to ensure | ||||
|    *   it conforms to schema. Generally this is only used during module and | ||||
|    *   theme installation. | ||||
|    * | ||||
|    * Must invalidate the cache tags associated with the configuration object. | ||||
|    * | ||||
|    * @return $this | ||||
|    * | ||||
|    * @see \Drupal\Core\Config\ConfigInstaller::createConfiguration() | ||||
|  | @ -191,7 +191,7 @@ abstract class StorableConfigBase extends ConfigBase { | |||
|         // we have to special case the meaning of an empty string for numeric
 | ||||
|         // types. In PHP this would be casted to a 0 but for the purposes of
 | ||||
|         // configuration we need to treat this as a NULL.
 | ||||
|         $empty_value =  $value === '' && ($element instanceof IntegerInterface || $element instanceof FloatInterface); | ||||
|         $empty_value = $value === '' && ($element instanceof IntegerInterface || $element instanceof FloatInterface); | ||||
| 
 | ||||
|         if ($value === NULL || $empty_value) { | ||||
|           $value = NULL; | ||||
|  |  | |||
|  | @ -68,7 +68,7 @@ class ControllerResolver extends BaseControllerResolver implements ControllerRes | |||
|         return $controller; | ||||
|       } | ||||
|       elseif (method_exists($controller, '__invoke')) { | ||||
|         return new $controller; | ||||
|         return new $controller(); | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,4 +11,3 @@ namespace Drupal\Core\Database; | |||
|  * developers should account for it separately. | ||||
|  */ | ||||
| interface DatabaseException { } | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,4 +12,4 @@ class Select extends QuerySelect { | |||
|     // SQLite does not support FOR UPDATE so nothing to do.
 | ||||
|     return $this; | ||||
|   } | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -22,8 +22,8 @@ class Log { | |||
|    * | ||||
|    * array( | ||||
|    *   $logging_key = array( | ||||
|    *     array(query => '', args => array(), caller => '', target => '', time => 0), | ||||
|    *     array(query => '', args => array(), caller => '', target => '', time => 0), | ||||
|    *     array('query' => '', 'args' => array(), 'caller' => '', 'target' => '', 'time' => 0), | ||||
|    *     array('query' => '', 'args' => array(), 'caller' => '', 'target' => '', 'time' => 0), | ||||
|    *   ), | ||||
|    * ); | ||||
|    * | ||||
|  |  | |||
|  | @ -819,7 +819,7 @@ class Select extends Query implements SelectInterface { | |||
| 
 | ||||
|       // Don't use the AS keyword for table aliases, as some
 | ||||
|       // databases don't support it (e.g., Oracle).
 | ||||
|       $query .=  $table_string . ' ' . $this->connection->escapeTable($table['alias']); | ||||
|       $query .= $table_string . ' ' . $this->connection->escapeTable($table['alias']); | ||||
| 
 | ||||
|       if (!empty($table['condition'])) { | ||||
|         $query .= ' ON ' . $table['condition']; | ||||
|  |  | |||
|  | @ -234,12 +234,12 @@ class DateFormatter implements DateFormatterInterface { | |||
|         switch ($value) { | ||||
|           case 'y': | ||||
|             $interval_output = $this->formatPlural($interval->y, '1 year', '@count years', array(), array('langcode' => $options['langcode'])); | ||||
|             $max_age = min($max_age, 365*86400); | ||||
|             $max_age = min($max_age, 365 * 86400); | ||||
|             break; | ||||
| 
 | ||||
|           case 'm': | ||||
|             $interval_output = $this->formatPlural($interval->m, '1 month', '@count months', array(), array('langcode' => $options['langcode'])); | ||||
|             $max_age = min($max_age, 30*86400); | ||||
|             $max_age = min($max_age, 30 * 86400); | ||||
|             break; | ||||
| 
 | ||||
|           case 'd': | ||||
|  | @ -252,7 +252,7 @@ class DateFormatter implements DateFormatterInterface { | |||
|               $interval_output .= $this->formatPlural($weeks, '1 week', '@count weeks', array(), array('langcode' => $options['langcode'])); | ||||
|               $days -= $weeks * 7; | ||||
|               $granularity--; | ||||
|               $max_age = min($max_age, 7*86400); | ||||
|               $max_age = min($max_age, 7 * 86400); | ||||
|             } | ||||
| 
 | ||||
|             if ((!$output || $weeks > 0) && $granularity > 0 && $days > 0) { | ||||
|  |  | |||
|  | @ -531,4 +531,3 @@ class DateHelper { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -70,4 +70,3 @@ abstract class DateElementBase extends FormElement { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -61,7 +61,12 @@ class Datelist extends DateElementBase { | |||
|           unset($input['ampm']); | ||||
|         } | ||||
|         $timezone = !empty($element['#date_timezone']) ? $element['#date_timezone'] : NULL; | ||||
|         $date = DrupalDateTime::createFromArray($input, $timezone); | ||||
|         try { | ||||
|           $date = DrupalDateTime::createFromArray($input, $timezone); | ||||
|         } | ||||
|         catch (\Exception $e) { | ||||
|           $form_state->setError($element, t('Selected combination of day and month is not valid.')); | ||||
|         } | ||||
|         if ($date instanceof DrupalDateTime && !$date->hasErrors()) { | ||||
|           static::incrementRound($date, $increment); | ||||
|         } | ||||
|  | @ -88,7 +93,7 @@ class Datelist extends DateElementBase { | |||
|                 break; | ||||
| 
 | ||||
|               case 'hour': | ||||
|                 $format = in_array('ampm', $element['#date_part_order']) ? 'g': 'G'; | ||||
|                 $format = in_array('ampm', $element['#date_part_order']) ? 'g' : 'G'; | ||||
|                 break; | ||||
| 
 | ||||
|               case 'minute': | ||||
|  | @ -218,7 +223,7 @@ class Datelist extends DateElementBase { | |||
|           break; | ||||
| 
 | ||||
|         case 'hour': | ||||
|           $format = in_array('ampm', $element['#date_part_order']) ? 'g': 'G'; | ||||
|           $format = in_array('ampm', $element['#date_part_order']) ? 'g' : 'G'; | ||||
|           $options = $date_helper->hours($format, $element['#required']); | ||||
|           $title = t('Hour'); | ||||
|           break; | ||||
|  | @ -318,8 +323,8 @@ class Datelist extends DateElementBase { | |||
|         if ($date instanceof DrupalDateTime && !$date->hasErrors()) { | ||||
|           $form_state->setValueForElement($element, $date); | ||||
|         } | ||||
|         // If the input is invalid, set an error.
 | ||||
|         else { | ||||
|         // If the input is invalid and an error doesn't exist, set one.
 | ||||
|         elseif ($form_state->getError($element) === NULL) { | ||||
|           $form_state->setError($element, t('The %field date is invalid.', array('%field' => !empty($element['#title']) ? $element['#title'] : ''))); | ||||
|         } | ||||
|       } | ||||
|  |  | |||
|  | @ -50,7 +50,7 @@ class ProxyServicesPass implements CompilerPassInterface { | |||
|             $root_namespace_dir = $namespaces[$root_namespace]; | ||||
|           } | ||||
| 
 | ||||
|           $message =<<<EOF | ||||
|           $message = <<<EOF | ||||
| 
 | ||||
| Missing proxy class '$proxy_class' for lazy service '$service_id'. | ||||
| Use the following command to generate the proxy class: | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| <?php | ||||
| // @codingStandardsIgnoreFile
 | ||||
| 
 | ||||
| namespace Drupal\Core\DependencyInjection; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| <?php | ||||
| // @codingStandardsIgnoreFile
 | ||||
| 
 | ||||
| namespace Drupal\Core\DependencyInjection; | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| 
 | ||||
| namespace Drupal\Core; | ||||
| 
 | ||||
| use Drupal\Component\Assertion\Handle; | ||||
| use Drupal\Component\FileCache\FileCacheFactory; | ||||
| use Drupal\Component\Utility\Unicode; | ||||
| use Drupal\Component\Utility\UrlHelper; | ||||
|  | @ -18,6 +19,7 @@ use Drupal\Core\Http\TrustedHostsRequestFactory; | |||
| use Drupal\Core\Language\Language; | ||||
| use Drupal\Core\Site\Settings; | ||||
| use Symfony\Cmf\Component\Routing\RouteObjectInterface; | ||||
| use Symfony\Component\ClassLoader\ApcClassLoader; | ||||
| use Symfony\Component\DependencyInjection\ContainerInterface; | ||||
| use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; | ||||
| use Symfony\Component\HttpFoundation\RedirectResponse; | ||||
|  | @ -750,11 +752,20 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface { | |||
|   /** | ||||
|    * Returns the container cache key based on the environment. | ||||
|    * | ||||
|    * The 'environment' consists of: | ||||
|    * - The kernel environment string. | ||||
|    * - The Drupal version constant. | ||||
|    * - The deployment identifier from settings.php. This allows custom | ||||
|    *   deployments to force a container rebuild. | ||||
|    * - The operating system running PHP. This allows compiler passes to optimize | ||||
|    *   services for different operating systems. | ||||
|    * - The paths to any additional container YAMLs from settings.php. | ||||
|    * | ||||
|    * @return string | ||||
|    *   The cache key used for the service container. | ||||
|    */ | ||||
|   protected function getContainerCacheKey() { | ||||
|     $parts = array('service_container', $this->environment, \Drupal::VERSION, Settings::get('deployment_identifier'), serialize(Settings::get('container_yamls'))); | ||||
|     $parts = array('service_container', $this->environment, \Drupal::VERSION, Settings::get('deployment_identifier'), PHP_OS, serialize(Settings::get('container_yamls'))); | ||||
|     return implode(':', $parts); | ||||
|   } | ||||
| 
 | ||||
|  | @ -914,11 +925,15 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface { | |||
|         assert_options(ASSERT_ACTIVE, TRUE); | ||||
|         // Now synchronize PHP 5 and 7's handling of assertions as much as
 | ||||
|         // possible.
 | ||||
|         \Drupal\Component\Assertion\Handle::register(); | ||||
|         Handle::register(); | ||||
| 
 | ||||
|         // Log fatal errors to the test site directory.
 | ||||
|         ini_set('log_errors', 1); | ||||
|         ini_set('error_log', DRUPAL_ROOT . '/sites/simpletest/' . substr($test_prefix, 10) . '/error.log'); | ||||
| 
 | ||||
|         // Ensure that a rewritten settings.php is used if opcache is on.
 | ||||
|         ini_set('opcache.validate_timestamps', 'on'); | ||||
|         ini_set('opcache.revalidate_freq', 0); | ||||
|       } | ||||
|       else { | ||||
|         // Ensure that no other code defines this.
 | ||||
|  | @ -965,7 +980,7 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface { | |||
|         && Settings::get('class_loader_auto_detect', TRUE) | ||||
|         && extension_loaded('apc')) { | ||||
|       $prefix = Settings::getApcuPrefix('class_loader', $this->root); | ||||
|       $apc_loader = new \Symfony\Component\ClassLoader\ApcClassLoader($prefix, $this->classLoader); | ||||
|       $apc_loader = new ApcClassLoader($prefix, $this->classLoader); | ||||
|       $this->classLoader->unregister(); | ||||
|       $apc_loader->register(); | ||||
|       $this->classLoader = $apc_loader; | ||||
|  | @ -1204,7 +1219,7 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface { | |||
|     foreach ($this->serviceProviderClasses as $origin => $classes) { | ||||
|       foreach ($classes as $name => $class) { | ||||
|         if (!is_object($class)) { | ||||
|           $this->serviceProviders[$origin][$name] = new $class; | ||||
|           $this->serviceProviders[$origin][$name] = new $class(); | ||||
|         } | ||||
|         else { | ||||
|           $this->serviceProviders[$origin][$name] = $class; | ||||
|  |  | |||
|  | @ -23,4 +23,3 @@ class EntityListController extends ControllerBase { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -55,7 +55,7 @@ interface EntityFormDisplayInterface extends EntityDisplayInterface { | |||
|    *       // For 'single-value' widgets:
 | ||||
|    *       '#theme' => 'field_multiple_value_form', | ||||
|    *       '#cardinality' => The field cardinality, | ||||
|    *       '#cardinality_multiple => TRUE if the field can contain multiple
 | ||||
|    *       '#cardinality_multiple' => TRUE if the field can contain multiple | ||||
|    *         items, FALSE otherwise. | ||||
|    *       // One sub-array per copy of the widget, keyed by delta.
 | ||||
|    *       0 => array( | ||||
|  |  | |||
|  | @ -121,7 +121,7 @@ class EntityManager implements EntityManagerInterface, ContainerAwareInterface { | |||
|    * | ||||
|    * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. | ||||
|    */ | ||||
|   public function createHandlerInstance($class, EntityTypeInterface $definition = null) { | ||||
|   public function createHandlerInstance($class, EntityTypeInterface $definition = NULL) { | ||||
|     return $this->container->get('entity_type.manager')->createHandlerInstance($class, $definition); | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -305,7 +305,7 @@ abstract class QueryBase implements QueryInterface { | |||
|    */ | ||||
|   public function tableSort(&$headers) { | ||||
|     // If 'field' is not initialized, the header columns aren't clickable.
 | ||||
|     foreach ($headers as $key =>$header) { | ||||
|     foreach ($headers as $key => $header) { | ||||
|       if (is_array($header) && isset($header['specifier'])) { | ||||
|         $headers[$key]['field'] = ''; | ||||
|       } | ||||
|  |  | |||
|  | @ -80,10 +80,21 @@ class Tables implements TablesInterface { | |||
|     $entity_type = $this->entityManager->getDefinition($entity_type_id); | ||||
| 
 | ||||
|     $field_storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id); | ||||
|     for ($key = 0; $key <= $count; $key ++) { | ||||
|       // If there is revision support and only the current revision is being
 | ||||
|       // queried then use the revision id. Otherwise, the entity id will do.
 | ||||
|       if (($revision_key = $entity_type->getKey('revision')) && $all_revisions) { | ||||
|     for ($key = 0; $key <= $count; $key++) { | ||||
|       // This can either be the name of an entity base field or a configurable
 | ||||
|       // field.
 | ||||
|       $specifier = $specifiers[$key]; | ||||
|       if (isset($field_storage_definitions[$specifier])) { | ||||
|         $field_storage = $field_storage_definitions[$specifier]; | ||||
|       } | ||||
|       else { | ||||
|         $field_storage = FALSE; | ||||
|       } | ||||
| 
 | ||||
|       // If there is revision support, only the current revisions are being
 | ||||
|       // queried, and the field is revisionable then use the revision id.
 | ||||
|       // Otherwise, the entity id will do.
 | ||||
|       if (($revision_key = $entity_type->getKey('revision')) && $all_revisions && $field_storage && $field_storage->isRevisionable()) { | ||||
|         // This contains the relevant SQL field to be used when joining entity
 | ||||
|         // tables.
 | ||||
|         $entity_id_field = $revision_key; | ||||
|  | @ -95,15 +106,6 @@ class Tables implements TablesInterface { | |||
|         $entity_id_field = $entity_type->getKey('id'); | ||||
|         $field_id_field = 'entity_id'; | ||||
|       } | ||||
|       // This can either be the name of an entity base field or a configurable
 | ||||
|       // field.
 | ||||
|       $specifier = $specifiers[$key]; | ||||
|       if (isset($field_storage_definitions[$specifier])) { | ||||
|         $field_storage = $field_storage_definitions[$specifier]; | ||||
|       } | ||||
|       else { | ||||
|         $field_storage = FALSE; | ||||
|       } | ||||
| 
 | ||||
|       /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */ | ||||
|       $table_mapping = $this->entityManager->getStorage($entity_type_id)->getTableMapping(); | ||||
|  | @ -152,11 +154,18 @@ class Tables implements TablesInterface { | |||
|         // finds the property first. The data table is preferred, which is why
 | ||||
|         // it gets added before the base table.
 | ||||
|         $entity_tables = array(); | ||||
|         if ($data_table = $all_revisions ? $entity_type->getRevisionDataTable() : $entity_type->getDataTable()) { | ||||
|         if ($all_revisions && $field_storage && $field_storage->isRevisionable()) { | ||||
|           $data_table = $entity_type->getRevisionDataTable(); | ||||
|           $entity_base_table = $entity_type->getRevisionTable(); | ||||
|         } | ||||
|         else { | ||||
|           $data_table = $entity_type->getDataTable(); | ||||
|           $entity_base_table = $entity_type->getBaseTable(); | ||||
|         } | ||||
|         if ($data_table) { | ||||
|           $this->sqlQuery->addMetaData('simple_query', FALSE); | ||||
|           $entity_tables[$data_table] = $this->getTableMapping($data_table, $entity_type_id); | ||||
|         } | ||||
|         $entity_base_table = $all_revisions ? $entity_type->getRevisionTable() : $entity_type->getBaseTable(); | ||||
|         $entity_tables[$entity_base_table] = $this->getTableMapping($entity_base_table, $entity_type_id); | ||||
|         $sql_column = $specifier; | ||||
| 
 | ||||
|  | @ -203,7 +212,7 @@ class Tables implements TablesInterface { | |||
|           $entity_type = $this->entityManager->getDefinition($entity_type_id); | ||||
|           $field_storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id); | ||||
|           // Add the new entity base table using the table and sql column.
 | ||||
|           $join_condition= '%alias.' . $entity_type->getKey('id') . " = $table.$sql_column"; | ||||
|           $join_condition = '%alias.' . $entity_type->getKey('id') . " = $table.$sql_column"; | ||||
|           $base_table = $this->sqlQuery->leftJoin($entity_type->getBaseTable(), NULL, $join_condition); | ||||
|           $propertyDefinitions = array(); | ||||
|           $key++; | ||||
|  |  | |||
|  | @ -201,7 +201,7 @@ class DefaultTableMapping implements TableMappingInterface { | |||
|     $field_name = $storage_definition->getName(); | ||||
| 
 | ||||
|     if ($this->allowsSharedTableStorage($storage_definition)) { | ||||
|       $column_name = count($storage_definition->getColumns()) == 1 ? $field_name :  $field_name . '__' . $property_name; | ||||
|       $column_name = count($storage_definition->getColumns()) == 1 ? $field_name : $field_name . '__' . $property_name; | ||||
|     } | ||||
|     elseif ($this->requiresDedicatedTableStorage($storage_definition)) { | ||||
|       $column_name = !in_array($property_name, $this->getReservedColumns()) ? $field_name . '_' . $property_name : $property_name; | ||||
|  |  | |||
|  | @ -1174,7 +1174,7 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt | |||
|       $vid = $id; | ||||
|     } | ||||
| 
 | ||||
|     $original = !empty($entity->original) ? $entity->original: NULL; | ||||
|     $original = !empty($entity->original) ? $entity->original : NULL; | ||||
| 
 | ||||
|     // Determine which fields should be actually stored.
 | ||||
|     $definitions = $this->entityManager->getFieldDefinitions($entity_type, $bundle); | ||||
|  |  | |||
|  | @ -1263,7 +1263,9 @@ function hook_entity_query_alter(\Drupal\Core\Entity\Query\QueryInterface $query | |||
|  * Act on entities being assembled before rendering. | ||||
|  * | ||||
|  * @param &$build | ||||
|  *   A renderable array representing the entity content. | ||||
|  *   A renderable array representing the entity content. The module may add | ||||
|  *   elements to $build prior to rendering. The structure of $build is a | ||||
|  *   renderable array as expected by drupal_render(). | ||||
|  * @param \Drupal\Core\Entity\EntityInterface $entity | ||||
|  *   The entity object. | ||||
|  * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display | ||||
|  | @ -1272,10 +1274,6 @@ function hook_entity_query_alter(\Drupal\Core\Entity\Query\QueryInterface $query | |||
|  * @param $view_mode | ||||
|  *   The view mode the entity is rendered in. | ||||
|  * | ||||
|  * The module may add elements to $build prior to rendering. The | ||||
|  * structure of $build is a renderable array as expected by | ||||
|  * drupal_render(). | ||||
|  * | ||||
|  * @see hook_entity_view_alter() | ||||
|  * @see hook_ENTITY_TYPE_view() | ||||
|  * | ||||
|  | @ -1297,7 +1295,9 @@ function hook_entity_view(array &$build, \Drupal\Core\Entity\EntityInterface $en | |||
|  * Act on entities of a particular type being assembled before rendering. | ||||
|  * | ||||
|  * @param &$build | ||||
|  *   A renderable array representing the entity content. | ||||
|  *   A renderable array representing the entity content. The module may add | ||||
|  *   elements to $build prior to rendering. The structure of $build is a | ||||
|  *   renderable array as expected by drupal_render(). | ||||
|  * @param \Drupal\Core\Entity\EntityInterface $entity | ||||
|  *   The entity object. | ||||
|  * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display | ||||
|  | @ -1306,10 +1306,6 @@ function hook_entity_view(array &$build, \Drupal\Core\Entity\EntityInterface $en | |||
|  * @param $view_mode | ||||
|  *   The view mode the entity is rendered in. | ||||
|  * | ||||
|  * The module may add elements to $build prior to rendering. The | ||||
|  * structure of $build is a renderable array as expected by | ||||
|  * drupal_render(). | ||||
|  * | ||||
|  * @see hook_ENTITY_TYPE_view_alter() | ||||
|  * @see hook_entity_view() | ||||
|  * | ||||
|  |  | |||
|  | @ -68,4 +68,3 @@ class EntityRouteProviderSubscriber implements EventSubscriberInterface { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -84,4 +84,3 @@ abstract class ExecutablePluginBase extends ContextAwarePluginBase implements Ex | |||
|     return $this; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -60,4 +60,3 @@ interface InfoParserInterface  { | |||
|   public function parse($filename); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -82,4 +82,3 @@ interface ModuleInstallerInterface { | |||
|   public function validateUninstall(array $module_list); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -894,6 +894,9 @@ function hook_updater_info_alter(&$updaters) { | |||
|  * Module dependencies do not belong to these installation requirements, | ||||
|  * but should be defined in the module's .info.yml file. | ||||
|  * | ||||
|  * During installation (when $phase == 'install'), if you need to load a class | ||||
|  * from your module, you'll need to include the class file directly. | ||||
|  * | ||||
|  * The 'runtime' phase is not limited to pure installation requirements | ||||
|  * but can also be used for more general status information like maintenance | ||||
|  * tasks and security issues. | ||||
|  |  | |||
|  | @ -25,6 +25,13 @@ use Symfony\Component\DependencyInjection\ContainerInterface; | |||
|  */ | ||||
| class EntityReferenceEntityFormatter extends EntityReferenceFormatterBase implements ContainerFactoryPluginInterface { | ||||
| 
 | ||||
|   /** | ||||
|    * The number of times this formatter allows rendering the same entity. | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   const RECURSIVE_RENDER_LIMIT = 20; | ||||
| 
 | ||||
|   /** | ||||
|    * The logger factory. | ||||
|    * | ||||
|  | @ -47,7 +54,19 @@ class EntityReferenceEntityFormatter extends EntityReferenceFormatterBase implem | |||
|   protected $entityDisplayRepository; | ||||
| 
 | ||||
|   /** | ||||
|    * Constructs a StringFormatter instance. | ||||
|    * An array of counters for the recursive rendering protection. | ||||
|    * | ||||
|    * Each counter takes into account all the relevant information about the | ||||
|    * field and the referenced entity that is being rendered. | ||||
|    * | ||||
|    * @see \Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceEntityFormatter::viewElements() | ||||
|    * | ||||
|    * @var array | ||||
|    */ | ||||
|   protected static $recursiveRenderDepth = []; | ||||
| 
 | ||||
|   /** | ||||
|    * Constructs a EntityReferenceEntityFormatter instance. | ||||
|    * | ||||
|    * @param string $plugin_id | ||||
|    *   The plugin_id for the formatter. | ||||
|  | @ -141,15 +160,35 @@ class EntityReferenceEntityFormatter extends EntityReferenceFormatterBase implem | |||
|     $elements = array(); | ||||
| 
 | ||||
|     foreach ($this->getEntitiesToView($items, $langcode) as $delta => $entity) { | ||||
|       // Protect ourselves from recursive rendering.
 | ||||
|       static $depth = 0; | ||||
|       $depth++; | ||||
|       if ($depth > 20) { | ||||
|         $this->loggerFactory->get('entity')->error('Recursive rendering detected when rendering entity @entity_type @entity_id. Aborting rendering.', array('@entity_type' => $entity->getEntityTypeId(), '@entity_id' => $entity->id())); | ||||
|         return $elements; | ||||
|       } | ||||
| 
 | ||||
|       if ($entity->id()) { | ||||
|         // Due to render caching and delayed calls, the viewElements() method
 | ||||
|         // will be called later in the rendering process through a '#pre_render'
 | ||||
|         // callback, so we need to generate a counter that takes into account
 | ||||
|         // all the relevant information about this field and the referenced
 | ||||
|         // entity that is being rendered.
 | ||||
|         $recursive_render_id = $items->getFieldDefinition()->getTargetEntityTypeId() | ||||
|           . $items->getFieldDefinition()->getTargetBundle() | ||||
|           . $items->getName() | ||||
|           . $entity->id(); | ||||
| 
 | ||||
|         if (isset(static::$recursiveRenderDepth[$recursive_render_id])) { | ||||
|           static::$recursiveRenderDepth[$recursive_render_id]++; | ||||
|         } | ||||
|         else { | ||||
|           static::$recursiveRenderDepth[$recursive_render_id] = 1; | ||||
|         } | ||||
| 
 | ||||
|         // Protect ourselves from recursive rendering.
 | ||||
|         if (static::$recursiveRenderDepth[$recursive_render_id] > static::RECURSIVE_RENDER_LIMIT) { | ||||
|           $this->loggerFactory->get('entity')->error('Recursive rendering detected when rendering entity %entity_type: %entity_id, using the %field_name field on the %bundle_name bundle. Aborting rendering.', [ | ||||
|             '%entity_type' => $entity->getEntityTypeId(), | ||||
|             '%entity_id' => $entity->id(), | ||||
|             '%field_name' => $items->getName(), | ||||
|             '%bundle_name' => $items->getFieldDefinition()->getTargetBundle(), | ||||
|           ]); | ||||
|           return $elements; | ||||
|         } | ||||
| 
 | ||||
|         $view_builder = $this->entityTypeManager->getViewBuilder($entity->getEntityTypeId()); | ||||
|         $elements[$delta] = $view_builder->view($entity, $view_mode, $entity->language()->getId()); | ||||
| 
 | ||||
|  | @ -164,7 +203,6 @@ class EntityReferenceEntityFormatter extends EntityReferenceFormatterBase implem | |||
|         // This is an "auto_create" item.
 | ||||
|         $elements[$delta] = array('#markup' => $entity->label()); | ||||
|       } | ||||
|       $depth = 0; | ||||
|     } | ||||
| 
 | ||||
|     return $elements; | ||||
|  |  | |||
|  | @ -120,4 +120,3 @@ class BooleanItem extends FieldItemBase implements OptionsProviderInterface { | |||
|     return $values; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1032,7 +1032,7 @@ class FormBuilder implements FormBuilderInterface, FormValidatorInterface, FormS | |||
| 
 | ||||
|       // Assign a decimal placeholder weight to preserve original array order.
 | ||||
|       if (!isset($element[$key]['#weight'])) { | ||||
|         $element[$key]['#weight'] = $count/1000; | ||||
|         $element[$key]['#weight'] = $count / 1000; | ||||
|       } | ||||
|       else { | ||||
|         // If one of the child elements has a weight then we will need to sort
 | ||||
|  |  | |||
|  | @ -56,8 +56,8 @@ class TrustedHostsRequestFactory { | |||
|    * | ||||
|    * @return \Symfony\Component\HttpFoundation\Request | ||||
|    *   A new request object. | ||||
|    **/ | ||||
|   public function createRequest(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null) { | ||||
|    */ | ||||
|   public function createRequest(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = NULL) { | ||||
|     if (empty($server['HTTP_HOST']) || ($server['HTTP_HOST'] === 'localhost' && $this->host !== 'localhost')) { | ||||
|       $server['HTTP_HOST'] = $this->host; | ||||
|     } | ||||
|  |  | |||
|  | @ -78,7 +78,7 @@ class SelectLanguageForm extends FormBase { | |||
|       ), | ||||
|     ); | ||||
|     $form['actions'] = array('#type' => 'actions'); | ||||
|     $form['actions']['submit'] =  array( | ||||
|     $form['actions']['submit'] = array( | ||||
|       '#type' => 'submit', | ||||
|       '#value' => 'Save and continue', | ||||
|       '#button_type' => 'primary', | ||||
|  |  | |||
|  | @ -72,7 +72,7 @@ class SelectProfileForm extends FormBase { | |||
|       $form['profile'][$profile_name]['#description'] = isset($profiles[$profile_name]['description']) ? $this->t($profiles[$profile_name]['description']) : ''; | ||||
|     } | ||||
|     $form['actions'] = array('#type' => 'actions'); | ||||
|     $form['actions']['submit'] =  array( | ||||
|     $form['actions']['submit'] = array( | ||||
|       '#type' => 'submit', | ||||
|       '#value' => $this->t('Save and continue'), | ||||
|       '#button_type' => 'primary', | ||||
|  |  | |||
|  | @ -131,7 +131,7 @@ class SiteConfigureForm extends ConfigFormBase { | |||
|     // distract from the message that the Drupal installation has completed
 | ||||
|     // successfully.)
 | ||||
|     $post_params = $this->getRequest()->request->all(); | ||||
|     if (empty($post_params) && (!drupal_verify_install_file($this->root . '/' . $settings_file, FILE_EXIST|FILE_READABLE|FILE_NOT_WRITABLE) || !drupal_verify_install_file($this->root . '/' . $settings_dir, FILE_NOT_WRITABLE, 'dir'))) { | ||||
|     if (empty($post_params) && (!drupal_verify_install_file($this->root . '/' . $settings_file, FILE_EXIST | FILE_READABLE | FILE_NOT_WRITABLE) || !drupal_verify_install_file($this->root . '/' . $settings_dir, FILE_NOT_WRITABLE, 'dir'))) { | ||||
|       drupal_set_message(t('All necessary changes to %dir and %file have been made, so you should remove write permissions to them now in order to avoid security risks. If you are unsure how to do so, consult the <a href=":handbook_url">online handbook</a>.', array('%dir' => $settings_dir, '%file' => $settings_file, ':handbook_url' => 'https://www.drupal.org/server-permissions')), 'warning'); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -33,4 +33,17 @@ class InstallerKernel extends DrupalKernel { | |||
|     $this->configStorage = NULL; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Returns the active configuration storage used during early install. | ||||
|    * | ||||
|    * This override changes the visibility so that the installer can access | ||||
|    * config storage before the container is properly built. | ||||
|    * | ||||
|    * @return \Drupal\Core\Config\StorageInterface | ||||
|    *   The config storage. | ||||
|    */ | ||||
|   public function getConfigStorage() { | ||||
|     return parent::getConfigStorage(); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -14,4 +14,3 @@ class KeyValueExpirableFactory extends KeyValueFactory implements KeyValueExpira | |||
|   const DEFAULT_SETTING = 'keyvalue_expirable_default'; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -75,4 +75,3 @@ class KeyValueFactory implements KeyValueFactoryInterface { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -19,4 +19,3 @@ interface KeyValueFactoryInterface { | |||
|   public function get($collection); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -178,7 +178,7 @@ class LocalTaskManager extends DefaultPluginManager implements LocalTaskManagerI | |||
|    * {@inheritdoc} | ||||
|    */ | ||||
|   public function getDefinitions() { | ||||
|     $definitions =  parent::getDefinitions(); | ||||
|     $definitions = parent::getDefinitions(); | ||||
| 
 | ||||
|     $count = 0; | ||||
|     foreach ($definitions as &$definition) { | ||||
|  |  | |||
|  | @ -2,6 +2,8 @@ | |||
| 
 | ||||
| namespace Drupal\Core\PageCache; | ||||
| 
 | ||||
| use Drupal\Core\PageCache\RequestPolicy\CommandLineOrUnsafeMethod; | ||||
| use Drupal\Core\PageCache\RequestPolicy\NoSessionOpen; | ||||
| use Drupal\Core\Session\SessionConfigurationInterface; | ||||
| 
 | ||||
| /** | ||||
|  | @ -20,8 +22,8 @@ class DefaultRequestPolicy extends ChainRequestPolicy { | |||
|    *   The session configuration. | ||||
|    */ | ||||
|   public function __construct(SessionConfigurationInterface $session_configuration) { | ||||
|     $this->addPolicy(new RequestPolicy\CommandLineOrUnsafeMethod()); | ||||
|     $this->addPolicy(new RequestPolicy\NoSessionOpen($session_configuration)); | ||||
|     $this->addPolicy(new CommandLineOrUnsafeMethod()); | ||||
|     $this->addPolicy(new NoSessionOpen($session_configuration)); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -42,4 +42,3 @@ class DenyNoCacheRoutes implements ResponsePolicyInterface { | |||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -187,7 +187,7 @@ class PhpassHashedPassword implements PasswordInterface { | |||
|     } while (--$count); | ||||
| 
 | ||||
|     $len = strlen($hash); | ||||
|     $output =  $setting . $this->base64Encode($hash, $len); | ||||
|     $output = $setting . $this->base64Encode($hash, $len); | ||||
|     // $this->base64Encode() of a 16 byte MD5 will always be 22 characters.
 | ||||
|     // $this->base64Encode() of a 64 byte sha512 will always be 86 characters.
 | ||||
|     $expected = 12 + ceil((8 * $len) / 6); | ||||
|  |  | |||
|  | @ -64,4 +64,3 @@ class QueueFactory implements ContainerAwareInterface { | |||
|     return $this->queues[$name]; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ use Drupal\Core\Render\Element; | |||
|  * $form['actions'] = array('#type' => 'actions'); | ||||
|  * $form['actions']['submit'] = array( | ||||
|  *   '#type' => 'submit', | ||||
|  *   '#value' => t('Save'), | ||||
|  *   '#value' => $this->t('Save'), | ||||
|  * ); | ||||
|  * @endcode | ||||
|  * | ||||
|  |  | |||
|  | @ -72,10 +72,9 @@ class Button extends FormElement { | |||
|    * | ||||
|    * @param array $element | ||||
|    *   An associative array containing the properties of the element. | ||||
|    *   Properties used: #attributes, #button_type, #name, #value.
 | ||||
|    * | ||||
|    * The #button_type property accepts any value, though core themes have CSS that
 | ||||
|    * styles the following button_types appropriately: 'primary', 'danger'. | ||||
|    *   Properties used: #attributes, #button_type, #name, #value. The
 | ||||
|    *   #button_type property accepts any value, though core themes have CSS that
 | ||||
|    *   styles the following button_types appropriately: 'primary', 'danger'. | ||||
|    * | ||||
|    * @return array | ||||
|    *   The $element with prepared variables ready for input.html.twig. | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ use Drupal\Core\Render\Element; | |||
|  * @code | ||||
|  * $form['copy'] = array( | ||||
|  *   '#type' => 'checkbox', | ||||
|  *   '#title' => t('Send me a copy'), | ||||
|  *   '#title' => $this->t('Send me a copy'), | ||||
|  * ); | ||||
|  * @endcode | ||||
|  * | ||||
|  |  | |||
|  | @ -17,8 +17,8 @@ use Drupal\Core\Form\FormStateInterface; | |||
|  * @code | ||||
|  * $form['high_school']['tests_taken'] = array( | ||||
|  *   '#type' => 'checkboxes', | ||||
|  *   '#options' => array('SAT' => t('SAT'), 'ACT' => t('ACT'))), | ||||
|  *   '#title' => t('What standardized tests did you take?'), | ||||
|  *   '#options' => array('SAT' => $this->t('SAT'), 'ACT' => $this->t('ACT'))), | ||||
|  *   '#title' => $this->t('What standardized tests did you take?'), | ||||
|  *   ... | ||||
|  * ); | ||||
|  * @endcode | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ use Drupal\Component\Utility\Color as ColorUtility; | |||
|  * @code | ||||
|  * $form['color'] = array( | ||||
|  *   '#type' => 'color', | ||||
|  *   '#title' => 'Color', | ||||
|  *   '#title' => $this->t('Color'), | ||||
|  *   '#default_value' => '#ffffff', | ||||
|  * ); | ||||
|  * @endcode | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ use Drupal\Core\Form\FormStateInterface; | |||
|  * @code | ||||
|  * $form['needs_accommodation'] = array( | ||||
|  *   '#type' => 'checkbox', | ||||
|  *   '#title' => 'Need Special Accommodations?', | ||||
|  *   '#title' => $this->t('Need Special Accommodations?'), | ||||
|  * ); | ||||
|  * | ||||
|  * $form['accommodation'] = array( | ||||
|  | @ -32,7 +32,7 @@ use Drupal\Core\Form\FormStateInterface; | |||
|  * | ||||
|  * $form['accommodation']['diet'] = array( | ||||
|  *   '#type' => 'textfield', | ||||
|  *   '#title' => t('Dietary Restrictions'), | ||||
|  *   '#title' => $this->t('Dietary Restrictions'), | ||||
|  * ); | ||||
|  * @endcode | ||||
|  * | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ use Drupal\Core\Render\Element; | |||
|  * @code | ||||
|  * $form['expiration'] = array( | ||||
|  *   '#type' => 'date', | ||||
|  *   '#title' => t('Content expiration'), | ||||
|  *   '#title' => $this->t('Content expiration'), | ||||
|  *   '#default_value' => array('year' => 2020, 'month' => 2, 'day' => 15,) | ||||
|  * ); | ||||
|  * @endcode | ||||
|  | @ -76,11 +76,9 @@ class Date extends FormElement { | |||
|    * @param array $element | ||||
|    *   An associative array containing the properties of the element. | ||||
|    *   Properties used: #title, #value, #options, #description, #required,
 | ||||
|    *   #attributes, #id, #name, #type, #min, #max, #step, #value, #size.
 | ||||
|    * | ||||
|    * Note: The input "name" attribute needs to be sanitized before output, which | ||||
|    *       is currently done by initializing Drupal\Core\Template\Attribute with | ||||
|    *       all the attributes. | ||||
|    *   #attributes, #id, #name, #type, #min, #max, #step, #value, #size. The
 | ||||
|    *   #name property will be sanitized before output. This is currently done by
 | ||||
|    *   initializing Drupal\Core\Template\Attribute with all the attributes. | ||||
|    * | ||||
|    * @return array | ||||
|    *   The $element with prepared variables ready for #theme 'input__date'.
 | ||||
|  |  | |||
|  | @ -20,12 +20,12 @@ use Drupal\Core\Render\Element; | |||
|  * @code | ||||
|  * $form['author'] = array( | ||||
|  *   '#type' => 'details', | ||||
|  *   '#title' => 'Author', | ||||
|  *   '#title' => $this->t('Author'), | ||||
|  * ); | ||||
|  * | ||||
|  * $form['author']['name'] = array( | ||||
|  *   '#type' => 'textfield', | ||||
|  *   '#title' => t('Name'), | ||||
|  *   '#title' => $this->t('Name'), | ||||
|  * ); | ||||
|  * @endcode | ||||
|  * | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ use Drupal\Core\Render\Element; | |||
|  * @code | ||||
|  * $form['email'] = array( | ||||
|  *   '#type' => 'email', | ||||
|  *   '#title' => t('Email'), | ||||
|  *   '#title' => $this->t('Email'), | ||||
|  * ); | ||||
|  * @end | ||||
|  * | ||||
|  |  | |||
|  | @ -9,12 +9,12 @@ namespace Drupal\Core\Render\Element; | |||
|  * @code | ||||
|  * $form['author'] = array( | ||||
|  *   '#type' => 'fieldset', | ||||
|  *   '#title' => 'Author', | ||||
|  *   '#title' => $this->t('Author'), | ||||
|  * ); | ||||
|  * | ||||
|  * $form['author']['name'] = array( | ||||
|  *   '#type' => 'textfield', | ||||
|  *   '#title' => t('Name'), | ||||
|  *   '#title' => $this->t('Name'), | ||||
|  * ); | ||||
|  * @endcode | ||||
|  * | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ use Drupal\Component\Utility\Number as NumberUtility; | |||
|  * @code | ||||
|  * $form['quantity'] = array( | ||||
|  *   '#type' => 'number', | ||||
|  *   '#title' => t('Quantity'), | ||||
|  *   '#title' => $this->t('Quantity'), | ||||
|  * ); | ||||
|  * @endcode | ||||
|  * | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ use Drupal\Core\Render\Element; | |||
|  * @code | ||||
|  * $form['pass'] = array( | ||||
|  *   '#type' => 'password', | ||||
|  *   '#title => t('Password'), | ||||
|  *   '#title' => $this->t('Password'), | ||||
|  *   '#size' => 25, | ||||
|  * ); | ||||
|  * @endcode | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ use Drupal\Core\Form\FormStateInterface; | |||
|  * @code | ||||
|  * $form['pass'] = array( | ||||
|  *   '#type' => 'password_confirm', | ||||
|  *   '#title' => t('Password'), | ||||
|  *   '#title' => $this->t('Password'), | ||||
|  *   '#size' => 25, | ||||
|  * ); | ||||
|  * @endcode | ||||
|  | @ -65,7 +65,7 @@ class PasswordConfirm extends FormElement { | |||
|    * Expand a password_confirm field into two text boxes. | ||||
|    */ | ||||
|   public static function processPasswordConfirm(&$element, FormStateInterface $form_state, &$complete_form) { | ||||
|     $element['pass1'] =  array( | ||||
|     $element['pass1'] = array( | ||||
|       '#type' => 'password', | ||||
|       '#title' => t('Password'), | ||||
|       '#value' => empty($element['#value']) ? NULL : $element['#value']['pass1'], | ||||
|  | @ -73,7 +73,7 @@ class PasswordConfirm extends FormElement { | |||
|       '#attributes' => array('class' => array('password-field', 'js-password-field')), | ||||
|       '#error_no_message' => TRUE, | ||||
|     ); | ||||
|     $element['pass2'] =  array( | ||||
|     $element['pass2'] = array( | ||||
|       '#type' => 'password', | ||||
|       '#title' => t('Confirm password'), | ||||
|       '#value' => empty($element['#value']) ? NULL : $element['#value']['pass2'], | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show more
		Reference in a new issue
	
	 Pantheon Automation
						Pantheon Automation