Update to Drupal 8.2.4. For more information, see https://www.drupal.org/project/drupal/releases/8.2.4
This commit is contained in:
parent
0a95b8440e
commit
8544b60b39
284 changed files with 12980 additions and 3199 deletions
|
@ -348,13 +348,10 @@ class EntityAutocomplete extends Textfield {
|
|||
public static function extractEntityIdFromAutocompleteInput($input) {
|
||||
$match = NULL;
|
||||
|
||||
// Take "label (entity id)', match the ID from parenthesis when it's a
|
||||
// number.
|
||||
if (preg_match("/.+\s\((\d+)\)/", $input, $matches)) {
|
||||
$match = $matches[1];
|
||||
}
|
||||
// Match the ID when it's a string (e.g. for config entity types).
|
||||
elseif (preg_match("/.+\s\(([\w.]+)\)/", $input, $matches)) {
|
||||
// Take "label (entity id)', match the ID from inside the parentheses.
|
||||
// @todo Add support for entities containing parentheses in their ID.
|
||||
// @see https://www.drupal.org/node/2520416
|
||||
if (preg_match("/.+\s\(([^\)]+)\)/", $input, $matches)) {
|
||||
$match = $matches[1];
|
||||
}
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ abstract class EntityDisplayBase extends ConfigEntityBase implements EntityDispl
|
|||
protected $plugins = array();
|
||||
|
||||
/**
|
||||
* Context in which this entity will be used (e.g. 'display', 'form').
|
||||
* Context in which this entity will be used (e.g. 'view', 'form').
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
|
|
|
@ -9,6 +9,7 @@ use Drupal\Core\Field\FieldItemInterface;
|
|||
use Drupal\Core\Field\FieldItemListInterface;
|
||||
use Drupal\Core\Language\LanguageManagerInterface;
|
||||
use Drupal\Core\Render\Element;
|
||||
use Drupal\Core\Theme\Registry;
|
||||
use Drupal\Core\TypedData\TranslatableInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
|
@ -54,6 +55,13 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf
|
|||
*/
|
||||
protected $languageManager;
|
||||
|
||||
/**
|
||||
* The theme registry.
|
||||
*
|
||||
* @var \Drupal\Core\Theme\Registry
|
||||
*/
|
||||
protected $themeRegistry;
|
||||
|
||||
/**
|
||||
* The EntityViewDisplay objects created for individual field rendering.
|
||||
*
|
||||
|
@ -72,12 +80,15 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf
|
|||
* The entity manager service.
|
||||
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
|
||||
* The language manager.
|
||||
* @param \Drupal\Core\Theme\Registry $theme_registry
|
||||
* The theme registry.
|
||||
*/
|
||||
public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) {
|
||||
public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, Registry $theme_registry = NULL) {
|
||||
$this->entityTypeId = $entity_type->id();
|
||||
$this->entityType = $entity_type;
|
||||
$this->entityManager = $entity_manager;
|
||||
$this->languageManager = $language_manager;
|
||||
$this->themeRegistry = $theme_registry ?: \Drupal::service('theme.registry');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -87,7 +98,8 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf
|
|||
return new static(
|
||||
$entity_type,
|
||||
$container->get('entity.manager'),
|
||||
$container->get('language_manager')
|
||||
$container->get('language_manager'),
|
||||
$container->get('theme.registry')
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -148,7 +160,6 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf
|
|||
$this->moduleHandler()->alter('entity_view_mode', $view_mode, $entity, $context);
|
||||
|
||||
$build = array(
|
||||
'#theme' => $this->entityTypeId,
|
||||
"#{$this->entityTypeId}" => $entity,
|
||||
'#view_mode' => $view_mode,
|
||||
// Collect cache defaults for this entity.
|
||||
|
@ -159,6 +170,11 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf
|
|||
),
|
||||
);
|
||||
|
||||
// Add the default #theme key if a template exists for it.
|
||||
if ($this->themeRegistry->getRuntime()->has($this->entityTypeId)) {
|
||||
$build['#theme'] = $this->entityTypeId;
|
||||
}
|
||||
|
||||
// Cache the rendered output if permitted by the view mode and global entity
|
||||
// type configuration.
|
||||
if ($this->isViewModeCacheable($view_mode) && !$entity->isNew() && $entity->isDefaultRevision() && $this->entityType->isRenderCacheable()) {
|
||||
|
|
|
@ -35,13 +35,18 @@ interface QueryInterface extends AlterableInterface {
|
|||
*
|
||||
* @param $field
|
||||
* Name of the field being queried. It must contain a field name, optionally
|
||||
* followed by a column name. The column can be "entity" for reference
|
||||
* fields and that can be followed similarly by a field name and so on. Some
|
||||
* examples:
|
||||
* followed by a column name. The column can be the reference property,
|
||||
* usually "entity", for reference fields and that can be followed
|
||||
* similarly by a field name and so on. Additionally, the target entity type
|
||||
* can be specified by appending the ":target_entity_type_id" to "entity".
|
||||
* Some examples:
|
||||
* - nid
|
||||
* - tags.value
|
||||
* - tags
|
||||
* - tags.entity.name
|
||||
* - tags.entity:taxonomy_term.name
|
||||
* - uid.entity.name
|
||||
* - uid.entity:user.name
|
||||
* "tags" "is the same as "tags.value" as value is the default column.
|
||||
* If two or more conditions have the same field names they apply to the
|
||||
* same delta within that field. In order to limit the condition to a
|
||||
|
|
|
@ -6,6 +6,8 @@ use Drupal\Core\Database\Query\SelectInterface;
|
|||
use Drupal\Core\Entity\Query\QueryException;
|
||||
use Drupal\Core\Entity\Sql\SqlEntityStorageInterface;
|
||||
use Drupal\Core\Entity\Sql\TableMappingInterface;
|
||||
use Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface;
|
||||
use Drupal\Core\TypedData\DataReferenceDefinitionInterface;
|
||||
|
||||
/**
|
||||
* Adds tables and fields to the SQL entity query.
|
||||
|
@ -253,10 +255,20 @@ class Tables implements TablesInterface {
|
|||
$relationship_specifier = $specifiers[$key + 1];
|
||||
$next_index_prefix = $relationship_specifier;
|
||||
}
|
||||
$entity_type_id = NULL;
|
||||
// Relationship specifier can also contain the entity type ID, i.e.
|
||||
// entity:node, entity:user or entity:taxonomy.
|
||||
if (strpos($relationship_specifier, ':') !== FALSE) {
|
||||
list($relationship_specifier, $entity_type_id) = explode(':', $relationship_specifier, 2);
|
||||
}
|
||||
// Check for a valid relationship.
|
||||
if (isset($propertyDefinitions[$relationship_specifier]) && $field_storage->getPropertyDefinition('entity')->getDataType() == 'entity_reference' ) {
|
||||
// If it is, use the entity type.
|
||||
$entity_type_id = $propertyDefinitions[$relationship_specifier]->getTargetDefinition()->getEntityTypeId();
|
||||
if (isset($propertyDefinitions[$relationship_specifier]) && $propertyDefinitions[$relationship_specifier] instanceof DataReferenceDefinitionInterface) {
|
||||
// If it is, use the entity type if specified already, otherwise use
|
||||
// the definition.
|
||||
$target_definition = $propertyDefinitions[$relationship_specifier]->getTargetDefinition();
|
||||
if (!$entity_type_id && $target_definition instanceof EntityDataDefinitionInterface) {
|
||||
$entity_type_id = $target_definition->getEntityTypeId();
|
||||
}
|
||||
$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.
|
||||
|
|
|
@ -1257,7 +1257,11 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt
|
|||
foreach ($storage_definition->getColumns() as $column => $attributes) {
|
||||
$column_name = $table_mapping->getFieldColumnName($storage_definition, $column);
|
||||
// Serialize the value if specified in the column schema.
|
||||
$record[$column_name] = !empty($attributes['serialize']) ? serialize($item->$column) : $item->$column;
|
||||
$value = $item->$column;
|
||||
if (!empty($attributes['serialize'])) {
|
||||
$value = serialize($value);
|
||||
}
|
||||
$record[$column_name] = drupal_schema_get_field_value($attributes, $value);
|
||||
}
|
||||
$query->values($record);
|
||||
if ($this->entityType->isRevisionable()) {
|
||||
|
|
Reference in a new issue