From 81915a93a35b0b97314e008827745de5122bac9b Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Tue, 26 Feb 2019 15:05:23 +0000 Subject: [PATCH] Issue #3025427 by Berdir, amateescu: Add @trigger_error() to deprecated EntityManager->EntityTypeBundleInfo methods --- .../Core/Entity/ContentEntityStorageBase.php | 44 ++++++++--- core/lib/Drupal/Core/Entity/EntityManager.php | 9 ++- .../Entity/Sql/SqlContentEntityStorage.php | 73 ++++++++++++++----- .../Sql/SqlContentEntityStorageSchema.php | 57 +++++++++++---- .../SqlFieldableEntityTypeListenerTrait.php | 4 +- .../Drupal/Core/Extension/ModuleInstaller.php | 3 +- .../Field/FieldType/EntityReferenceItem.php | 2 +- core/modules/comment/src/CommentStorage.php | 28 +++++-- .../migrate/destination/EntityComment.php | 2 +- .../src/Functional/CommentNonNodeTest.php | 2 +- .../ConfigTranslationFieldListBuilder.php | 52 +++++++++---- .../src/ContentTranslationPermissions.php | 45 +++++++++--- .../src/Form/FieldConfigDeleteForm.php | 20 ++--- .../field_ui/src/Form/FieldConfigEditForm.php | 30 +++++++- .../src/Form/ContentLanguageSettingsForm.php | 54 +++++++++++--- .../src/Plugin/migrate/destination/Entity.php | 2 +- .../migrate/destination/EntityConfigBase.php | 2 +- .../migrate/destination/EntityContentBase.php | 2 +- .../destination/EntityFieldStorageConfig.php | 2 +- core/modules/node/node.module | 2 +- .../migrate/destination/EntitySearchPage.php | 2 +- .../views/argument_validator/TermName.php | 9 ++- core/modules/taxonomy/src/TermStorage.php | 2 +- .../Plugin/migrate/destination/EntityUser.php | 2 +- .../Plugin/views/argument_validator/User.php | 11 +-- .../views/argument_validator/UserName.php | 2 +- .../views/argument_validator/Entity.php | 53 ++++++++++---- .../Plugin/argument_validator/EntityTest.php | 30 +++++--- core/modules/views/views.views.inc | 2 +- .../Tests/Core/Entity/EntityManagerTest.php | 40 +++++++++- .../Sql/SqlContentEntityStorageSchemaTest.php | 37 +++++++--- .../Sql/SqlContentEntityStorageTest.php | 47 ++++++------ 32 files changed, 487 insertions(+), 185 deletions(-) diff --git a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php index d1713f6065b1..0040ae076af3 100644 --- a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php @@ -5,6 +5,7 @@ use Drupal\Core\Cache\Cache; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Cache\MemoryCache\MemoryCacheInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Language\LanguageInterface; @@ -15,6 +16,12 @@ * Base class for content entity storage handlers. */ abstract class ContentEntityStorageBase extends EntityStorageBase implements ContentEntityStorageInterface, DynamicallyFieldableEntityStorageInterface { + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * The entity bundle key. @@ -24,11 +31,18 @@ abstract class ContentEntityStorageBase extends EntityStorageBase implements Con protected $bundleKey = FALSE; /** - * The entity manager. + * The entity field manager service. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityFieldManagerInterface */ - protected $entityManager; + protected $entityFieldManager; + + /** + * The entity bundle info. + * + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface + */ + protected $entityTypeBundleInfo; /** * Cache backend. @@ -49,18 +63,25 @@ abstract class ContentEntityStorageBase extends EntityStorageBase implements Con * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. * @param \Drupal\Core\Cache\CacheBackendInterface $cache * The cache backend to be used. * @param \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface|null $memory_cache * The memory cache backend. + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info. */ - public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, CacheBackendInterface $cache, MemoryCacheInterface $memory_cache = NULL) { + public function __construct(EntityTypeInterface $entity_type, EntityFieldManagerInterface $entity_field_manager, CacheBackendInterface $cache, MemoryCacheInterface $memory_cache = NULL, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL) { parent::__construct($entity_type, $memory_cache); $this->bundleKey = $this->entityType->getKey('bundle'); - $this->entityManager = $entity_manager; + $this->entityFieldManager = $entity_field_manager; $this->cacheBackend = $cache; + if (!$entity_type_bundle_info) { + @trigger_error('Calling ContentEntityStorageBase::__construct() with the $entity_type_bundle_info argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_type_bundle_info = \Drupal::service('entity_type.bundle.info'); + } + $this->entityTypeBundleInfo = $entity_type_bundle_info; } /** @@ -69,9 +90,10 @@ public function __construct(EntityTypeInterface $entity_type, EntityManagerInter public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { return new static( $entity_type, - $container->get('entity.manager'), + $container->get('entity_field.manager'), $container->get('cache.entity'), - $container->get('entity.memory_cache') + $container->get('entity.memory_cache'), + $container->get('entity_type.bundle.info') ); } @@ -124,7 +146,7 @@ public function createWithSampleValues($bundle = FALSE, array $values = []) { if (!$bundle) { throw new EntityStorageException("No entity bundle was specified"); } - if (!array_key_exists($bundle, $this->entityManager->getBundleInfo($this->entityTypeId))) { + if (!array_key_exists($bundle, $this->entityTypeBundleInfo->getBundleInfo($this->entityTypeId))) { throw new EntityStorageException(sprintf("Missing entity bundle. The \"%s\" bundle does not exist", $bundle)); } $values[$bundle_key] = $bundle; @@ -963,7 +985,7 @@ protected function populateAffectedRevisionTranslations(ContentEntityInterface $ * The sanitized list of entity key values. */ protected function cleanIds(array $ids, $entity_key = 'id') { - $definitions = $this->entityManager->getBaseFieldDefinitions($this->entityTypeId); + $definitions = $this->entityFieldManager->getBaseFieldDefinitions($this->entityTypeId); $field_name = $this->entityType->getKey($entity_key); if ($field_name && $definitions[$field_name]->getType() == 'integer') { $ids = array_filter($ids, function ($id) { diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php index 045ca0f3774c..691b282276ba 100644 --- a/core/lib/Drupal/Core/Entity/EntityManager.php +++ b/core/lib/Drupal/Core/Entity/EntityManager.php @@ -306,39 +306,42 @@ public function clearCachedFieldDefinitions() { /** * {@inheritdoc} * - * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. + * @deprecated in drupal:8.0.0, will be removed before drupal:9.0.0. * Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::clearCachedBundles() * instead. * * @see https://www.drupal.org/node/2549139 */ public function clearCachedBundles() { + @trigger_error('EntityManagerInterface::clearCachedBundles() is deprecated in drupal:8.0.0 and will be removed before drupal:9.0.0. Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::clearCachedBundles() instead. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); $this->container->get('entity_type.bundle.info')->clearCachedBundles(); } /** * {@inheritdoc} * - * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. + * @deprecated in drupal:8.0.0, will be removed before drupal:9.0.0. * Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::getBundleInfo() * instead. * * @see https://www.drupal.org/node/2549139 */ public function getBundleInfo($entity_type_id) { + @trigger_error('EntityManagerInterface::getBundleInfo() is deprecated in drupal:8.0.0 and will be removed before drupal:9.0.0. Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::getBundleInfo() instead. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); return $this->container->get('entity_type.bundle.info')->getBundleInfo($entity_type_id); } /** * {@inheritdoc} * - * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. + * @deprecated in drupal:8.0.0, will be removed before drupal:9.0.0. * Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::getAllBundleInfo() * instead. * * @see https://www.drupal.org/node/2549139 */ public function getAllBundleInfo() { + @trigger_error('EntityManagerInterface::getAllBundleInfo() is deprecated in drupal:8.0.0 and will be removed before drupal:9.0.0. Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::getAllBundleInfo() instead. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); return $this->container->get('entity_type.bundle.info')->getAllBundleInfo(); } diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php index f5187c118ffe..019570bda756 100644 --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php @@ -12,8 +12,11 @@ use Drupal\Core\Entity\ContentEntityStorageBase; use Drupal\Core\Entity\ContentEntityTypeInterface; use Drupal\Core\Entity\EntityBundleListenerInterface; +use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\EntityStorageException; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\Query\QueryInterface; @@ -118,6 +121,20 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt */ protected $languageManager; + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The entity last installed schema repository. + * + * @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface + */ + protected $entityLastInstalledSchemaRepository; + /** * Whether this storage should use the temporary table mapping. * @@ -132,10 +149,13 @@ public static function createInstance(ContainerInterface $container, EntityTypeI return new static( $entity_type, $container->get('database'), - $container->get('entity.manager'), + $container->get('entity_field.manager'), $container->get('cache.entity'), $container->get('language_manager'), - $container->get('entity.memory_cache') + $container->get('entity.memory_cache'), + $container->get('entity_type.bundle.info'), + $container->get('entity_type.manager'), + $container->get('entity.last_installed_schema.repository') ); } @@ -147,7 +167,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI * name. */ public function getFieldStorageDefinitions() { - return $this->entityManager->getBaseFieldDefinitions($this->entityTypeId); + return $this->entityFieldManager->getBaseFieldDefinitions($this->entityTypeId); } /** @@ -157,19 +177,36 @@ public function getFieldStorageDefinitions() { * The entity type definition. * @param \Drupal\Core\Database\Connection $database * The database connection to be used. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. * @param \Drupal\Core\Cache\CacheBackendInterface $cache * The cache backend to be used. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. * @param \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface|null $memory_cache * The memory cache backend to be used. - */ - public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityManagerInterface $entity_manager, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache = NULL) { - parent::__construct($entity_type, $entity_manager, $cache, $memory_cache); + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. + * @param \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $entity_last_installed_schema_repository + * The entity last installed schema repository. + */ + public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityFieldManagerInterface $entity_field_manager, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache = NULL, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, EntityTypeManagerInterface $entity_type_manager = NULL, EntityLastInstalledSchemaRepositoryInterface $entity_last_installed_schema_repository = NULL) { + parent::__construct($entity_type, $entity_field_manager, $cache, $memory_cache, $entity_type_bundle_info); $this->database = $database; $this->languageManager = $language_manager; + if (!$entity_last_installed_schema_repository) { + @trigger_error('Calling SqlContentEntityStorage::__construct() with the $entity_last_installed_schema_repository argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository'); + } + $this->entityLastInstalledSchemaRepository = $entity_last_installed_schema_repository; + if (!$entity_type_manager) { + @trigger_error('Calling SqlContentEntityStorage::__construct() with the $entity_type_manager argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_type_manager = \Drupal::entityTypeManager(); + } + $this->entityTypeManager = $entity_type_manager; + $this->initTableLayout(); } @@ -252,7 +289,7 @@ public function getRevisionDataTable() { protected function getStorageSchema() { if (!isset($this->storageSchema)) { $class = $this->entityType->getHandlerClass('storage_schema') ?: 'Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema'; - $this->storageSchema = new $class($this->entityManager, $this->entityType, $this, $this->database); + $this->storageSchema = new $class($this->entityTypeManager, $this->entityType, $this, $this->database, $this->entityFieldManager, $this->entityLastInstalledSchemaRepository); } return $this->storageSchema; } @@ -320,7 +357,7 @@ public function getTableMapping(array $storage_definitions = NULL) { // If we are using our internal storage definitions, which is our main use // case, we can statically cache the computed table mapping. if (!isset($this->tableMapping)) { - $storage_definitions = $this->entityManager->getFieldStorageDefinitions($this->entityTypeId); + $storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($this->entityTypeId); $this->tableMapping = $this->getCustomTableMapping($this->entityType, $storage_definitions); } @@ -851,7 +888,7 @@ protected function doSaveFieldItems(ContentEntityInterface $entity, array $names } else { $table_mapping = $this->getTableMapping(); - $storage_definitions = $this->entityManager->getFieldStorageDefinitions($this->entityTypeId); + $storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($this->entityTypeId); $shared_table_fields = FALSE; $dedicated_table_fields = []; @@ -1180,7 +1217,7 @@ protected function loadFromDedicatedTables(array &$values, $load_from_revision) $definitions = []; $table_mapping = $this->getTableMapping(); foreach ($bundles as $bundle => $v) { - $definitions[$bundle] = $this->entityManager->getFieldDefinitions($this->entityTypeId, $bundle); + $definitions[$bundle] = $this->entityFieldManager->getFieldDefinitions($this->entityTypeId, $bundle); foreach ($definitions[$bundle] as $field_name => $field_definition) { $storage_definition = $field_definition->getFieldStorageDefinition(); if ($table_mapping->requiresDedicatedTableStorage($storage_definition)) { @@ -1268,7 +1305,7 @@ protected function saveToDedicatedTables(ContentEntityInterface $entity, $update $original = !empty($entity->original) ? $entity->original : NULL; // Determine which fields should be actually stored. - $definitions = $this->entityManager->getFieldDefinitions($entity_type, $bundle); + $definitions = $this->entityFieldManager->getFieldDefinitions($entity_type, $bundle); if ($names) { $definitions = array_intersect_key($definitions, array_flip($names)); } @@ -1373,7 +1410,7 @@ protected function saveToDedicatedTables(ContentEntityInterface $entity, $update */ protected function deleteFromDedicatedTables(ContentEntityInterface $entity) { $table_mapping = $this->getTableMapping(); - foreach ($this->entityManager->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle()) as $field_definition) { + foreach ($this->entityFieldManager->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle()) as $field_definition) { $storage_definition = $field_definition->getFieldStorageDefinition(); if (!$table_mapping->requiresDedicatedTableStorage($storage_definition)) { continue; @@ -1401,7 +1438,7 @@ protected function deleteRevisionFromDedicatedTables(ContentEntityInterface $ent $vid = $entity->getRevisionId(); if (isset($vid)) { $table_mapping = $this->getTableMapping(); - foreach ($this->entityManager->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle()) as $field_definition) { + foreach ($this->entityFieldManager->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle()) as $field_definition) { $storage_definition = $field_definition->getFieldStorageDefinition(); if (!$table_mapping->requiresDedicatedTableStorage($storage_definition)) { continue; @@ -1508,7 +1545,7 @@ public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $ */ public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) { $table_mapping = $this->getTableMapping( - $this->entityManager->getLastInstalledFieldStorageDefinitions($this->entityType->id()) + $this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($this->entityType->id()) ); if ($table_mapping->requiresDedicatedTableStorage($storage_definition)) { @@ -1686,7 +1723,7 @@ public function countFieldData($storage_definition, $as_bool = FALSE) { // storage definition is added, so bypass the internal storage definitions // and fetch the table mapping using the passed in storage definition. // @todo Fix this in https://www.drupal.org/node/2705205. - $storage_definitions = $this->entityManager->getFieldStorageDefinitions($this->entityTypeId); + $storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($this->entityTypeId); $storage_definitions[$storage_definition->getName()] = $storage_definition; $table_mapping = $this->getTableMapping($storage_definitions); diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php index dba62bdc74af..d721fbf99738 100644 --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php @@ -5,8 +5,11 @@ use Drupal\Core\Database\Connection; use Drupal\Core\Database\DatabaseExceptionWrapper; use Drupal\Core\DependencyInjection\DependencySerializationTrait; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Entity\ContentEntityTypeInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityFieldManagerInterface; +use Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\EntityPublishedInterface; use Drupal\Core\Entity\EntityStorageException; use Drupal\Core\Entity\EntityTypeInterface; @@ -28,16 +31,29 @@ class SqlContentEntityStorageSchema implements DynamicallyFieldableEntityStorageSchemaInterface { use DependencySerializationTrait; + use DeprecatedServicePropertyTrait; use SqlFieldableEntityTypeListenerTrait { onFieldableEntityTypeUpdate as traitOnFieldableEntityTypeUpdate; } /** - * The entity manager. + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The entity last installed schema repository. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface */ - protected $entityManager; + protected $entityLastInstalledSchemaRepository; /** * The entity type this schema builder is responsible for. @@ -99,21 +115,34 @@ class SqlContentEntityStorageSchema implements DynamicallyFieldableEntityStorage /** * Constructs a SqlContentEntityStorageSchema. * - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. * @param \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type * The entity type. * @param \Drupal\Core\Entity\Sql\SqlContentEntityStorage $storage * The storage of the entity type. This must be an SQL-based storage. * @param \Drupal\Core\Database\Connection $database * The database connection to be used. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. + * @param \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $entity_last_installed_schema_repository + * The entity last installed schema repository. */ - public function __construct(EntityManagerInterface $entity_manager, ContentEntityTypeInterface $entity_type, SqlContentEntityStorage $storage, Connection $database) { - $this->entityManager = $entity_manager; + public function __construct(EntityTypeManagerInterface $entity_type_manager, ContentEntityTypeInterface $entity_type, SqlContentEntityStorage $storage, Connection $database, EntityFieldManagerInterface $entity_field_manager = NULL, EntityLastInstalledSchemaRepositoryInterface $entity_last_installed_schema_repository = NULL) { + $this->entityTypeManager = $entity_type_manager; $this->entityType = $entity_type; - $this->fieldStorageDefinitions = $entity_manager->getFieldStorageDefinitions($entity_type->id()); + if (!$entity_field_manager) { + @trigger_error('Calling SqlContentEntityStorageSchema::__construct() with the $entity_field_manager argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_field_manager = \Drupal::service('entity_field.manager'); + } + $this->fieldStorageDefinitions = $entity_field_manager->getFieldStorageDefinitions($entity_type->id()); $this->storage = $storage; $this->database = $database; + if (!$entity_last_installed_schema_repository) { + @trigger_error('Calling SqlContentEntityStorageSchema::__construct() with the $entity_last_installed_schema_repository argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository'); + } + $this->entityLastInstalledSchemaRepository = $entity_last_installed_schema_repository; } /** @@ -290,7 +319,7 @@ public function requiresEntityDataMigration(EntityTypeInterface $entity_type, En } // Use the original entity type since the storage has not been updated. - $original_storage = $this->entityManager->createHandlerInstance($original_storage_class, $original); + $original_storage = $this->entityTypeManager->createHandlerInstance($original_storage_class, $original); return $original_storage->hasData(); } @@ -392,7 +421,7 @@ public function onEntityTypeDelete(EntityTypeInterface $entity_type) { $this->checkEntityType($entity_type); $schema_handler = $this->database->schema(); - $field_storage_definitions = $this->entityManager->getLastInstalledFieldStorageDefinitions($entity_type->id()); + $field_storage_definitions = $this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($entity_type->id()); $table_mapping = $this->storage->getCustomTableMapping($entity_type, $field_storage_definitions); // Delete entity and field tables. @@ -631,7 +660,7 @@ public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $ } // Retrieve a table mapping which contains the deleted field still. - $storage_definitions = $this->entityManager->getLastInstalledFieldStorageDefinitions($this->entityType->id()); + $storage_definitions = $this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($this->entityType->id()); $table_mapping = $this->storage->getTableMapping($storage_definitions); $field_table_name = $table_mapping->getFieldTableName($storage_definition->getName()); @@ -1603,7 +1632,7 @@ protected function deleteSharedTableSchema(FieldStorageDefinitionInterface $stor $deleted_field_name = $storage_definition->getName(); $table_mapping = $this->storage->getTableMapping( - $this->entityManager->getLastInstalledFieldStorageDefinitions($this->entityType->id()) + $this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($this->entityType->id()) ); $column_names = $table_mapping->getColumnNames($deleted_field_name); $schema_handler = $this->database->schema(); @@ -2011,7 +2040,7 @@ protected function getSharedTableFieldSchema(FieldStorageDefinitionInterface $st // must use the last installed version of that, as the new field might // be created in an update function and the storage definition of the // "from" field might get changed later. - $last_installed_storage_definitions = $this->entityManager->getLastInstalledFieldStorageDefinitions($this->entityType->id()); + $last_installed_storage_definitions = $this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($this->entityType->id()); if (!isset($last_installed_storage_definitions[$initial_value_field_name])) { throw new FieldException("Illegal initial value definition on {$storage_definition->getName()}: The field $initial_value_field_name does not exist."); } diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlFieldableEntityTypeListenerTrait.php b/core/lib/Drupal/Core/Entity/Sql/SqlFieldableEntityTypeListenerTrait.php index 1cc82c373802..4b31a185c59c 100644 --- a/core/lib/Drupal/Core/Entity/Sql/SqlFieldableEntityTypeListenerTrait.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlFieldableEntityTypeListenerTrait.php @@ -20,7 +20,7 @@ trait SqlFieldableEntityTypeListenerTrait { */ public function onFieldableEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeInterface $original, array $field_storage_definitions, array $original_field_storage_definitions, array &$sandbox = NULL) { /** @var \Drupal\Core\Entity\EntityStorageInterface $original_storage */ - $original_storage = $this->entityManager->createHandlerInstance($original->getStorageClass(), $original); + $original_storage = $this->entityTypeManager->createHandlerInstance($original->getStorageClass(), $original); $has_data = $original_storage->hasData(); // If 'progress' is not set, then this will be the first run of the batch. @@ -59,7 +59,7 @@ public function onFieldableEntityTypeUpdate(EntityTypeInterface $entity_type, En } $sandbox['original_storage'] = $original_storage; - $sandbox['temporary_storage'] = $this->entityManager->createHandlerInstance($entity_type->getStorageClass(), $entity_type); + $sandbox['temporary_storage'] = $this->entityTypeManager->createHandlerInstance($entity_type->getStorageClass(), $entity_type); $this->preUpdateEntityTypeSchema($entity_type, $original, $field_storage_definitions, $original_field_storage_definitions, $sandbox); } diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php index 759ba7f8ddc9..86cc9bc44dea 100644 --- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php +++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php @@ -391,9 +391,10 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) { // provided by the module that is being uninstalled. // @todo Clean this up in https://www.drupal.org/node/2350111. $entity_manager = \Drupal::entityManager(); + $entity_type_bundle_info = \Drupal::service('entity_type.bundle.info'); foreach ($entity_manager->getDefinitions() as $entity_type_id => $entity_type) { if ($entity_type->getProvider() == $module) { - foreach (array_keys($entity_manager->getBundleInfo($entity_type_id)) as $bundle) { + foreach (array_keys($entity_type_bundle_info->getBundleInfo($entity_type_id)) as $bundle) { \Drupal::service('entity_bundle.listener')->onBundleDelete($bundle, $entity_type_id); } } diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php index bf638a33c326..dd256a737e96 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php @@ -603,7 +603,7 @@ public function getSettableOptions(AccountInterface $account = NULL) { // Rebuild the array by changing the bundle key into the bundle label. $target_type = $field_definition->getSetting('target_type'); - $bundles = \Drupal::entityManager()->getBundleInfo($target_type); + $bundles = \Drupal::service('entity_type.bundle.info')->getBundleInfo($target_type); $return = []; foreach ($options as $bundle => $entity_ids) { diff --git a/core/modules/comment/src/CommentStorage.php b/core/modules/comment/src/CommentStorage.php index 1d7f37531ca4..82746e721ea7 100644 --- a/core/modules/comment/src/CommentStorage.php +++ b/core/modules/comment/src/CommentStorage.php @@ -5,9 +5,12 @@ use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Cache\MemoryCache\MemoryCacheInterface; use Drupal\Core\Database\Connection; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityFieldManagerInterface; +use Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Entity\Sql\SqlContentEntityStorage; use Drupal\Core\Session\AccountInterface; @@ -36,8 +39,8 @@ class CommentStorage extends SqlContentEntityStorage implements CommentStorageIn * An array of entity info for the entity type. * @param \Drupal\Core\Database\Connection $database * The database connection to be used. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. * @param \Drupal\Core\Session\AccountInterface $current_user * The current user. * @param \Drupal\Core\Cache\CacheBackendInterface $cache @@ -45,10 +48,16 @@ class CommentStorage extends SqlContentEntityStorage implements CommentStorageIn * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. * @param \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface $memory_cache - * The memory cache. + * The memory cache.* + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. + * @param \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $entity_last_installed_schema_repository + * The entity last installed schema repository. */ - public function __construct(EntityTypeInterface $entity_info, Connection $database, EntityManagerInterface $entity_manager, AccountInterface $current_user, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache) { - parent::__construct($entity_info, $database, $entity_manager, $cache, $language_manager, $memory_cache); + public function __construct(EntityTypeInterface $entity_info, Connection $database, EntityFieldManagerInterface $entity_field_manager, AccountInterface $current_user, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, EntityTypeManagerInterface $entity_type_manager = NULL, EntityLastInstalledSchemaRepositoryInterface $entity_last_installed_schema_repository = NULL) { + parent::__construct($entity_info, $database, $entity_field_manager, $cache, $language_manager, $memory_cache, $entity_type_bundle_info, $entity_type_manager, $entity_last_installed_schema_repository); $this->currentUser = $current_user; } @@ -59,11 +68,14 @@ public static function createInstance(ContainerInterface $container, EntityTypeI return new static( $entity_info, $container->get('database'), - $container->get('entity.manager'), + $container->get('entity_field.manager'), $container->get('current_user'), $container->get('cache.entity'), $container->get('language_manager'), - $container->get('entity.memory_cache') + $container->get('entity.memory_cache'), + $container->get('entity_type.bundle.info'), + $container->get('entity_type.manager'), + $container->get('entity.last_installed_schema.repository') ); } diff --git a/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php b/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php index b6d60b913470..b370015dc60e 100644 --- a/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php +++ b/core/modules/comment/src/Plugin/migrate/destination/EntityComment.php @@ -70,7 +70,7 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $migration, $container->get('entity.manager')->getStorage($entity_type), - array_keys($container->get('entity.manager')->getBundleInfo($entity_type)), + array_keys($container->get('entity_type.bundle.info')->getBundleInfo($entity_type)), $container->get('entity.manager'), $container->get('plugin.manager.field.field_type'), $container->get('state') diff --git a/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php b/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php index acd1f9b4c880..69e37ffd075e 100644 --- a/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php +++ b/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php @@ -61,7 +61,7 @@ protected function setUp() { $this->addDefaultCommentField('entity_test', 'entity_test'); // Verify that bundles are defined correctly. - $bundles = \Drupal::entityManager()->getBundleInfo('comment'); + $bundles = \Drupal::service('entity_type.bundle.info')->getBundleInfo('comment'); $this->assertEqual($bundles['comment']['label'], 'Comment settings'); // Create test user. diff --git a/core/modules/config_translation/src/Controller/ConfigTranslationFieldListBuilder.php b/core/modules/config_translation/src/Controller/ConfigTranslationFieldListBuilder.php index f5b1bdd18f4b..660417d91c28 100644 --- a/core/modules/config_translation/src/Controller/ConfigTranslationFieldListBuilder.php +++ b/core/modules/config_translation/src/Controller/ConfigTranslationFieldListBuilder.php @@ -2,16 +2,24 @@ namespace Drupal\config_translation\Controller; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Defines the config translation list builder for field entities. */ class ConfigTranslationFieldListBuilder extends ConfigTranslationEntityListBuilder { + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * The name of the entity type the fields are attached to. @@ -23,9 +31,9 @@ class ConfigTranslationFieldListBuilder extends ConfigTranslationEntityListBuild /** * An array containing the base entity type's definition. * - * @var array + * @var \Drupal\Core\Entity\EntityTypeInterface */ - protected $baseEntityInfo = []; + protected $baseEntityInfo; /** * The bundle info for the base entity type. @@ -35,21 +43,28 @@ class ConfigTranslationFieldListBuilder extends ConfigTranslationEntityListBuild protected $baseEntityBundles = []; /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity bundle info. + * + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface + */ + protected $entityTypeBundleInfo; /** * {@inheritdoc} */ public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { - $entity_manager = $container->get('entity.manager'); + $entity_type_manager = $container->get('entity_type.manager'); return new static( $entity_type, - $entity_manager->getStorage($entity_type->id()), - $entity_manager + $entity_type_manager->getStorage($entity_type->id()), + $entity_type_manager ); } @@ -60,12 +75,19 @@ public static function createInstance(ContainerInterface $container, EntityTypeI * The entity type definition. * @param \Drupal\Core\Entity\EntityStorageInterface $storage * The entity storage class. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info. */ - public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, EntityManagerInterface $entity_manager) { + public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL) { parent::__construct($entity_type, $storage); - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; + if (!$entity_type_bundle_info) { + @trigger_error('Calling ConfigTranslationFieldListBuilder::__construct() with the $entity_type_bundle_info argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_type_bundle_info = \Drupal::service('entity_type.bundle.info'); + } + $this->entityTypeBundleInfo = $entity_type_bundle_info; } /** @@ -73,8 +95,8 @@ public function __construct(EntityTypeInterface $entity_type, EntityStorageInter */ public function setMapperDefinition($mapper_definition) { $this->baseEntityType = $mapper_definition['base_entity_type']; - $this->baseEntityInfo = $this->entityManager->getDefinition($this->baseEntityType); - $this->baseEntityBundles = $this->entityManager->getBundleInfo($this->baseEntityType); + $this->baseEntityInfo = $this->entityTypeManager->getDefinition($this->baseEntityType); + $this->baseEntityBundles = $this->entityTypeBundleInfo->getBundleInfo($this->baseEntityType); return $this; } diff --git a/core/modules/content_translation/src/ContentTranslationPermissions.php b/core/modules/content_translation/src/ContentTranslationPermissions.php index dc7959bb6c03..a47f2247fcca 100644 --- a/core/modules/content_translation/src/ContentTranslationPermissions.php +++ b/core/modules/content_translation/src/ContentTranslationPermissions.php @@ -3,7 +3,9 @@ namespace Drupal\content_translation; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -13,13 +15,26 @@ class ContentTranslationPermissions implements ContainerInjectionInterface { use StringTranslationTrait; + use DeprecatedServicePropertyTrait; /** - * The entity manager. + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; + + /** + * The entity type manager. * * @var \Drupal\Core\Entity\EntityManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity bundle info. + * + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface + */ + protected $entityTypeBundleInfo; /** * The content translation manager. @@ -31,14 +46,21 @@ class ContentTranslationPermissions implements ContainerInjectionInterface { /** * Constructs a ContentTranslationPermissions instance. * - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. * @param \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager * The content translation manager. + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info. */ - public function __construct(EntityManagerInterface $entity_manager, ContentTranslationManagerInterface $content_translation_manager) { - $this->entityManager = $entity_manager; + public function __construct(EntityTypeManagerInterface $entity_type_manager, ContentTranslationManagerInterface $content_translation_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL) { + $this->entityTypeManager = $entity_type_manager; $this->contentTranslationManager = $content_translation_manager; + if (!$entity_type_bundle_info) { + @trigger_error('Calling ContentTranslationPermissions::__construct() with the $entity_type_bundle_info argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_type_bundle_info = \Drupal::service('entity_type.bundle.info'); + } + $this->entityTypeBundleInfo = $entity_type_bundle_info; } /** @@ -46,8 +68,9 @@ public function __construct(EntityManagerInterface $entity_manager, ContentTrans */ public static function create(ContainerInterface $container) { return new static( - $container->get('entity.manager'), - $container->get('content_translation.manager') + $container->get('entity_type.manager'), + $container->get('content_translation.manager'), + $container->get('entity_type.bundle.info') ); } @@ -60,13 +83,13 @@ public function contentPermissions() { $permission = []; // Create a translate permission for each enabled entity type and (optionally) // bundle. - foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) { + foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $entity_type) { if ($permission_granularity = $entity_type->getPermissionGranularity()) { $t_args = ['@entity_label' => $entity_type->getLowercaseLabel()]; switch ($permission_granularity) { case 'bundle': - foreach ($this->entityManager->getBundleInfo($entity_type_id) as $bundle => $bundle_info) { + foreach ($this->entityTypeBundleInfo->getBundleInfo($entity_type_id) as $bundle => $bundle_info) { if ($this->contentTranslationManager->isEnabled($entity_type_id, $bundle)) { $t_args['%bundle_label'] = isset($bundle_info['label']) ? $bundle_info['label'] : $bundle; $permission["translate $bundle $entity_type_id"] = [ diff --git a/core/modules/field_ui/src/Form/FieldConfigDeleteForm.php b/core/modules/field_ui/src/Form/FieldConfigDeleteForm.php index efdecbfbfc51..51babd780ed8 100644 --- a/core/modules/field_ui/src/Form/FieldConfigDeleteForm.php +++ b/core/modules/field_ui/src/Form/FieldConfigDeleteForm.php @@ -4,7 +4,7 @@ use Drupal\Core\Config\Entity\ConfigEntityInterface; use Drupal\Core\Entity\EntityDeleteForm; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; use Drupal\field_ui\FieldUI; @@ -18,20 +18,20 @@ class FieldConfigDeleteForm extends EntityDeleteForm { /** - * The entity manager. + * The entity type bundle info service. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface */ - protected $entityManager; + protected $entityTypeBundleInfo; /** * Constructs a new FieldConfigDeleteForm object. * - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info service. */ - public function __construct(EntityManagerInterface $entity_manager) { - $this->entityManager = $entity_manager; + public function __construct(EntityTypeBundleInfoInterface $entity_type_bundle_info) { + $this->entityTypeBundleInfo = $entity_type_bundle_info; } /** @@ -39,7 +39,7 @@ public function __construct(EntityManagerInterface $entity_manager) { */ public static function create(ContainerInterface $container) { return new static( - $container->get('entity.manager') + $container->get('entity_type.bundle.info') ); } @@ -93,7 +93,7 @@ public function getCancelUrl() { */ public function submitForm(array &$form, FormStateInterface $form_state) { $field_storage = $this->entity->getFieldStorageDefinition(); - $bundles = $this->entityManager->getBundleInfo($this->entity->getTargetEntityTypeId()); + $bundles = $this->entityTypeBundleInfo->getBundleInfo($this->entity->getTargetEntityTypeId()); $bundle_label = $bundles[$this->entity->getTargetBundle()]['label']; if ($field_storage && !$field_storage->isLocked()) { diff --git a/core/modules/field_ui/src/Form/FieldConfigEditForm.php b/core/modules/field_ui/src/Form/FieldConfigEditForm.php index af6de89f6b41..19f386403570 100644 --- a/core/modules/field_ui/src/Form/FieldConfigEditForm.php +++ b/core/modules/field_ui/src/Form/FieldConfigEditForm.php @@ -3,12 +3,14 @@ namespace Drupal\field_ui\Form; use Drupal\Core\Entity\EntityForm; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\Core\Field\AllowedTagsXssTrait; use Drupal\Core\Field\FieldFilteredMarkup; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; use Drupal\field\FieldConfigInterface; use Drupal\field_ui\FieldUI; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides a form for the field settings form. @@ -26,6 +28,32 @@ class FieldConfigEditForm extends EntityForm { */ protected $entity; + /** + * The entity type bundle info service. + * + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface + */ + protected $entityTypeBundleInfo; + + /** + * Constructs a new FieldConfigDeleteForm object. + * + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info service. + */ + public function __construct(EntityTypeBundleInfoInterface $entity_type_bundle_info) { + $this->entityTypeBundleInfo = $entity_type_bundle_info; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('entity_type.bundle.info') + ); + } + /** * {@inheritdoc} */ @@ -33,7 +61,7 @@ public function form(array $form, FormStateInterface $form_state) { $form = parent::form($form, $form_state); $field_storage = $this->entity->getFieldStorageDefinition(); - $bundles = $this->entityManager->getBundleInfo($this->entity->getTargetEntityTypeId()); + $bundles = $this->entityTypeBundleInfo->getBundleInfo($this->entity->getTargetEntityTypeId()); $form_title = $this->t('%field settings for %bundle', [ '%field' => $this->entity->getLabel(), diff --git a/core/modules/language/src/Form/ContentLanguageSettingsForm.php b/core/modules/language/src/Form/ContentLanguageSettingsForm.php index 5868d48faa22..7fa7813e8bfd 100644 --- a/core/modules/language/src/Form/ContentLanguageSettingsForm.php +++ b/core/modules/language/src/Form/ContentLanguageSettingsForm.php @@ -2,8 +2,10 @@ namespace Drupal\language\Form; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Entity\ContentEntityTypeInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\language\Entity\ContentLanguageSettings; @@ -15,22 +17,49 @@ * @internal */ class ContentLanguageSettingsForm extends FormBase { + use DeprecatedServicePropertyTrait; /** - * The entity manager. + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; + + /** + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; /** - * Constructs a ContentLanguageSettingsForm object. + * The entity bundle info. * - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface */ - public function __construct(EntityManagerInterface $entity_manager) { - $this->entityManager = $entity_manager; + protected $entityTypeBundleInfo; + + /** + * If this validator can handle multiple arguments. + * + * @var bool + */ + protected $multipleCapable = TRUE; + + /** + * Constructs an \Drupal\views\Plugin\views\argument_validator\Entity object. + * + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info. + */ + public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL) { + $this->entityTypeManager = $entity_type_manager; + if (!$entity_type_bundle_info) { + @trigger_error('Calling ContentLanguageSettingsForm::__construct() with the $entity_type_bundle_info argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_type_bundle_info = \Drupal::service('entity_type.bundle.info'); + } + $this->entityTypeBundleInfo = $entity_type_bundle_info; } /** @@ -38,7 +67,8 @@ public function __construct(EntityManagerInterface $entity_manager) { */ public static function create(ContainerInterface $container) { return new static( - $container->get('entity.manager') + $container->get('entity_type.manager'), + $container->get('entity_type.bundle.info') ); } @@ -53,11 +83,11 @@ public function getFormId() { * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { - $entity_types = $this->entityManager->getDefinitions(); + $entity_types = $this->entityTypeManager->getDefinitions(); $labels = []; $default = []; - $bundles = $this->entityManager->getAllBundleInfo(); + $bundles = $this->entityTypeBundleInfo->getAllBundleInfo(); $language_configuration = []; foreach ($entity_types as $entity_type_id => $entity_type) { if (!$entity_type instanceof ContentEntityTypeInterface || !$entity_type->hasKey('langcode') || !isset($bundles[$entity_type_id])) { diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php index 0cebbd07c824..a3b173f8d0cd 100644 --- a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php @@ -115,7 +115,7 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $migration, $container->get('entity.manager')->getStorage($entity_type_id), - array_keys($container->get('entity.manager')->getBundleInfo($entity_type_id)) + array_keys($container->get('entity_type.bundle.info')->getBundleInfo($entity_type_id)) ); } diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityConfigBase.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityConfigBase.php index b934a70635c1..868ad1a83f9d 100644 --- a/core/modules/migrate/src/Plugin/migrate/destination/EntityConfigBase.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityConfigBase.php @@ -113,7 +113,7 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $migration, $container->get('entity.manager')->getStorage($entity_type_id), - array_keys($container->get('entity.manager')->getBundleInfo($entity_type_id)), + array_keys($container->get('entity_type.bundle.info')->getBundleInfo($entity_type_id)), $container->get('language_manager'), $container->get('config.factory') ); diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php index 3e18d28b1ae8..079eed08e9e3 100644 --- a/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php @@ -131,7 +131,7 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $migration, $container->get('entity.manager')->getStorage($entity_type), - array_keys($container->get('entity.manager')->getBundleInfo($entity_type)), + array_keys($container->get('entity_type.bundle.info')->getBundleInfo($entity_type)), $container->get('entity.manager'), $container->get('plugin.manager.field.field_type') ); diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php index 6d6812187212..3e51f459979f 100644 --- a/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php +++ b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php @@ -72,7 +72,7 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $migration, $container->get('entity.manager')->getStorage($entity_type_id), - array_keys($container->get('entity.manager')->getBundleInfo($entity_type_id)), + array_keys($container->get('entity_type.bundle.info')->getBundleInfo($entity_type_id)), $container->get('language_manager'), $container->get('config.factory'), $container->get('plugin.manager.field.field_type') diff --git a/core/modules/node/node.module b/core/modules/node/node.module index 9fdabf32b4ad..59a64a14b3b2 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -290,7 +290,7 @@ function node_type_get_types() { function node_type_get_names() { return array_map(function ($bundle_info) { return $bundle_info['label']; - }, \Drupal::entityManager()->getBundleInfo('node')); + }, \Drupal::service('entity_type.bundle.info')->getBundleInfo('node')); } /** diff --git a/core/modules/search/src/Plugin/migrate/destination/EntitySearchPage.php b/core/modules/search/src/Plugin/migrate/destination/EntitySearchPage.php index 2d9c118c3d91..cc95ae0699f6 100644 --- a/core/modules/search/src/Plugin/migrate/destination/EntitySearchPage.php +++ b/core/modules/search/src/Plugin/migrate/destination/EntitySearchPage.php @@ -69,7 +69,7 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $migration, $container->get('entity.manager')->getStorage($entity_type_id), - array_keys($container->get('entity.manager')->getBundleInfo($entity_type_id)), + array_keys($container->get('entity_type.bundle.info')->getBundleInfo($entity_type_id)), $container->get('language_manager'), $container->get('config.factory'), $container->get('module_handler') diff --git a/core/modules/taxonomy/src/Plugin/views/argument_validator/TermName.php b/core/modules/taxonomy/src/Plugin/views/argument_validator/TermName.php index ac7bad0fad7f..5b32531bb9df 100644 --- a/core/modules/taxonomy/src/Plugin/views/argument_validator/TermName.php +++ b/core/modules/taxonomy/src/Plugin/views/argument_validator/TermName.php @@ -2,8 +2,9 @@ namespace Drupal\taxonomy\Plugin\views\argument_validator; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Entity\EntityManagerInterface; use Drupal\views\Plugin\views\argument_validator\Entity; /** @@ -27,11 +28,11 @@ class TermName extends Entity { /** * {@inheritdoc} */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager) { - parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_manager); + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL) { + parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $entity_type_bundle_info); // Not handling exploding term names. $this->multipleCapable = FALSE; - $this->termStorage = $entity_manager->getStorage('taxonomy_term'); + $this->termStorage = $entity_type_manager->getStorage('taxonomy_term'); } /** diff --git a/core/modules/taxonomy/src/TermStorage.php b/core/modules/taxonomy/src/TermStorage.php index ef276d160dea..4b74ba834241 100644 --- a/core/modules/taxonomy/src/TermStorage.php +++ b/core/modules/taxonomy/src/TermStorage.php @@ -381,7 +381,7 @@ public function getVocabularyHierarchyType($vid) { return $this->vocabularyHierarchyType[$vid]; } - $parent_field_storage = $this->entityManager->getFieldStorageDefinitions($this->entityTypeId)['parent']; + $parent_field_storage = $this->entityFieldManager->getFieldStorageDefinitions($this->entityTypeId)['parent']; $table_mapping = $this->getTableMapping(); $target_id_column = $table_mapping->getFieldColumnName($parent_field_storage, 'target_id'); diff --git a/core/modules/user/src/Plugin/migrate/destination/EntityUser.php b/core/modules/user/src/Plugin/migrate/destination/EntityUser.php index 1b021274f6ba..da867423ea40 100644 --- a/core/modules/user/src/Plugin/migrate/destination/EntityUser.php +++ b/core/modules/user/src/Plugin/migrate/destination/EntityUser.php @@ -112,7 +112,7 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $migration, $container->get('entity.manager')->getStorage($entity_type), - array_keys($container->get('entity.manager')->getBundleInfo($entity_type)), + array_keys($container->get('entity_type.bundle.info')->getBundleInfo($entity_type)), $container->get('entity.manager'), $container->get('plugin.manager.field.field_type'), $container->get('password') diff --git a/core/modules/user/src/Plugin/views/argument_validator/User.php b/core/modules/user/src/Plugin/views/argument_validator/User.php index e7d213917b88..c73c6006abde 100644 --- a/core/modules/user/src/Plugin/views/argument_validator/User.php +++ b/core/modules/user/src/Plugin/views/argument_validator/User.php @@ -3,7 +3,8 @@ namespace Drupal\user\Plugin\views\argument_validator; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\views\Plugin\views\argument\ArgumentPluginBase; use Drupal\Core\Form\FormStateInterface; use Drupal\views\Plugin\views\argument_validator\Entity; @@ -27,10 +28,10 @@ class User extends Entity { /** * {@inheritdoc} */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager) { - parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_manager); + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL) { + parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $entity_type_bundle_info); - $this->userStorage = $entity_manager->getStorage('user'); + $this->userStorage = $entity_type_manager->getStorage('user'); } /** @@ -102,7 +103,7 @@ protected function validateEntity(EntityInterface $entity) { public function calculateDependencies() { $dependencies = parent::calculateDependencies(); - foreach ($this->entityManager->getStorage('user_role')->loadMultiple(array_keys($this->options['roles'])) as $role) { + foreach ($this->entityTypeManager->getStorage('user_role')->loadMultiple(array_keys($this->options['roles'])) as $role) { $dependencies[$role->getConfigDependencyKey()][] = $role->getConfigDependencyName(); } diff --git a/core/modules/user/src/Plugin/views/argument_validator/UserName.php b/core/modules/user/src/Plugin/views/argument_validator/UserName.php index da8bdbba8489..6b7e498e2d55 100644 --- a/core/modules/user/src/Plugin/views/argument_validator/UserName.php +++ b/core/modules/user/src/Plugin/views/argument_validator/UserName.php @@ -21,7 +21,7 @@ class UserName extends User { public function buildOptionsForm(&$form, FormStateInterface $form_state) { parent::buildOptionsForm($form, $form_state); - $entity_type = $this->entityManager->getDefinition('user'); + $entity_type = $this->entityTypeManager->getDefinition('user'); $form['multiple']['#options'] = [ 0 => $this->t('Single name', ['%type' => $entity_type->getLabel()]), diff --git a/core/modules/views/src/Plugin/views/argument_validator/Entity.php b/core/modules/views/src/Plugin/views/argument_validator/Entity.php index befbbe7c26fe..82851a98c319 100644 --- a/core/modules/views/src/Plugin/views/argument_validator/Entity.php +++ b/core/modules/views/src/Plugin/views/argument_validator/Entity.php @@ -2,8 +2,10 @@ namespace Drupal\views\Plugin\views\argument_validator; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Plugin\Context\EntityContextDefinition; use Drupal\views\Plugin\views\argument\ArgumentPluginBase; @@ -20,13 +22,26 @@ * @see \Drupal\views\Plugin\Derivative\ViewsEntityArgumentValidator */ class Entity extends ArgumentValidatorPluginBase { + use DeprecatedServicePropertyTrait; /** - * The entity manager. + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; + + /** + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity bundle info. + * + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface + */ + protected $entityTypeBundleInfo; /** * If this validator can handle multiple arguments. @@ -44,13 +59,20 @@ class Entity extends ArgumentValidatorPluginBase { * The plugin_id for the plugin instance. * @param mixed $plugin_definition * The plugin implementation definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; + if (!$entity_type_bundle_info) { + @trigger_error('Calling Entity::__construct() with the $entity_type_bundle_info argument is supported in drupal:8.7.0 and will be required before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + $entity_type_bundle_info = \Drupal::service('entity_type.bundle.info'); + } + $this->entityTypeBundleInfo = $entity_type_bundle_info; } /** @@ -61,7 +83,8 @@ public static function create(ContainerInterface $container, array $configuratio $configuration, $plugin_id, $plugin_definition, - $container->get('entity.manager') + $container->get('entity_type.manager'), + $container->get('entity_type.bundle.info') ); } @@ -89,12 +112,12 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { // Derivative IDs are all entity:entity_type. Sanitized for js. // The ID is converted back on submission. $sanitized_id = ArgumentPluginBase::encodeValidatorId($this->definition['id']); - $entity_type = $this->entityManager->getDefinition($entity_type_id); + $entity_type = $this->entityTypeManager->getDefinition($entity_type_id); // If the entity has bundles, allow option to restrict to bundle(s). if ($entity_type->hasKey('bundle')) { $bundle_options = []; - foreach ($this->entityManager->getBundleInfo($entity_type_id) as $bundle_id => $bundle_info) { + foreach ($this->entityTypeBundleInfo->getBundleInfo($entity_type_id) as $bundle_id => $bundle_info) { $bundle_options[$bundle_id] = $bundle_info['label']; } @@ -170,7 +193,7 @@ public function validateArgument($argument) { return FALSE; } - $entities = $this->entityManager->getStorage($entity_type)->loadMultiple($ids); + $entities = $this->entityTypeManager->getStorage($entity_type)->loadMultiple($ids); // Validate each id => entity. If any fails break out and return false. foreach ($ids as $id) { // There is no entity for this ID. @@ -214,12 +237,12 @@ public function calculateDependencies() { $dependencies = parent::calculateDependencies(); $entity_type_id = $this->definition['entity_type']; - $bundle_entity_type = $this->entityManager->getDefinition($entity_type_id)->getBundleEntityType(); + $bundle_entity_type = $this->entityTypeManager->getDefinition($entity_type_id)->getBundleEntityType(); // The bundle entity type might not exist. For example, users do not have // bundles. - if ($this->entityManager->hasHandler($bundle_entity_type, 'storage')) { - $bundle_entity_storage = $this->entityManager->getStorage($bundle_entity_type); + if ($this->entityTypeManager->hasHandler($bundle_entity_type, 'storage')) { + $bundle_entity_storage = $this->entityTypeManager->getStorage($bundle_entity_type); foreach ($bundle_entity_storage->loadMultiple(array_keys($this->options['bundles'])) as $bundle_entity) { $dependencies[$bundle_entity->getConfigDependencyKey()][] = $bundle_entity->getConfigDependencyName(); diff --git a/core/modules/views/tests/src/Unit/Plugin/argument_validator/EntityTest.php b/core/modules/views/tests/src/Unit/Plugin/argument_validator/EntityTest.php index 9c5a48af8b9c..670508d12c70 100644 --- a/core/modules/views/tests/src/Unit/Plugin/argument_validator/EntityTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/argument_validator/EntityTest.php @@ -2,6 +2,8 @@ namespace Drupal\Tests\views\Unit\Plugin\argument_validator; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Tests\UnitTestCase; use Drupal\views\Plugin\views\argument_validator\Entity; @@ -28,9 +30,16 @@ class EntityTest extends UnitTestCase { /** * The entity manager. * - * @var \PHPUnit_Framework_MockObject_MockObject|\Drupal\Core\Entity\EntityManagerInterface + * @var \PHPUnit_Framework_MockObject_MockObject|\Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The mocked entity type bundle info used in this test. + * + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityTypeBundleInfo; /** * The tested argument validator. @@ -45,7 +54,8 @@ class EntityTest extends UnitTestCase { protected function setUp() { parent::setUp(); - $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); + $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class); + $this->entityTypeBundleInfo = $this->createMock(EntityTypeBundleInfoInterface::class); $mock_entity = $this->getMockForAbstractClass('Drupal\Core\Entity\EntityBase', [], '', FALSE, TRUE, TRUE, ['bundle', 'access']); $mock_entity->expects($this->any()) @@ -87,7 +97,7 @@ protected function setUp() { ->method('loadMultiple') ->will($this->returnValueMap($value_map)); - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('getStorage') ->with('entity_test') ->will($this->returnValue($storage)); @@ -103,7 +113,7 @@ protected function setUp() { 'entity_type' => 'entity_test', ]; - $this->argumentValidator = new Entity([], 'entity_test', $definition, $this->entityManager); + $this->argumentValidator = new Entity([], 'entity_test', $definition, $this->entityTypeManager, $this->entityTypeBundleInfo); } /** @@ -174,7 +184,7 @@ public function testValidateArgumentBundle() { public function testCalculateDependencies() { // Create an entity manager, storage, entity type, and entity to mock the // loading of entities providing bundles. - $entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); + $entity_type_manager = $this->createMock(EntityTypeManagerInterface::class); $storage = $this->getMock('Drupal\Core\Entity\EntityStorageInterface'); $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface'); $mock_entity = $this->getMock('Drupal\Core\Entity\EntityInterface'); @@ -193,21 +203,21 @@ public function testCalculateDependencies() { $entity_type->expects($this->any()) ->method('getBundleEntityType') ->willReturn('entity_test_bundle'); - $entityManager->expects($this->any()) + $entity_type_manager->expects($this->any()) ->method('getDefinition') ->with('entity_test') ->willReturn($entity_type); - $entityManager->expects($this->any()) + $entity_type_manager->expects($this->any()) ->method('hasHandler') ->with('entity_test_bundle', 'storage') ->willReturn(TRUE); - $entityManager->expects($this->any()) + $entity_type_manager->expects($this->any()) ->method('getStorage') ->with('entity_test_bundle') ->willReturn($storage); // Set up the argument validator. - $argumentValidator = new Entity([], 'entity_test', ['entity_type' => 'entity_test'], $entityManager); + $argumentValidator = new Entity([], 'entity_test', ['entity_type' => 'entity_test'], $entity_type_manager, $this->entityTypeBundleInfo); $options = []; $options['access'] = FALSE; $options['bundles'] = ['test_bundle' => 1]; diff --git a/core/modules/views/views.views.inc b/core/modules/views/views.views.inc index ab67dfdb9026..a809b55b5c09 100644 --- a/core/modules/views/views.views.inc +++ b/core/modules/views/views.views.inc @@ -256,7 +256,7 @@ function views_entity_field_label($entity_type, $field_name) { $label_counter = []; $all_labels = []; // Count the amount of fields per label per field storage. - foreach (array_keys(\Drupal::entityManager()->getBundleInfo($entity_type)) as $bundle) { + foreach (array_keys(\Drupal::service('entity_type.bundle.info')->getBundleInfo($entity_type)) as $bundle) { $bundle_fields = array_filter(\Drupal::entityManager()->getFieldDefinitions($entity_type, $bundle), function ($field_definition) { return $field_definition instanceof FieldConfigInterface; }); diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php index 591023c45ad8..9131b8883cae 100644 --- a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php @@ -100,6 +100,45 @@ public function testClearCachedDefinitions() { $this->entityManager->clearCachedDefinitions(); } + /** + * Tests the getBundleInfo() method. + * + * @covers ::getBundleInfo + * + * @expectedDeprecation EntityManagerInterface::getBundleInfo() is deprecated in drupal:8.0.0 and will be removed before drupal:9.0.0. Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::getBundleInfo() instead. See https://www.drupal.org/node/2549139. + */ + public function testGetBundleInfo() { + $return = ['article' => ['label' => 'Article']]; + $this->entityTypeBundleInfo->getBundleInfo('node')->shouldBeCalled()->willReturn($return); + + $this->assertEquals($return, $this->entityManager->getBundleInfo('node')); + } + + /** + * Tests the getAllBundleInfo() method. + * + * @covers ::getAllBundleInfo + * + * @expectedDeprecation EntityManagerInterface::getAllBundleInfo() is deprecated in drupal:8.0.0 and will be removed before drupal:9.0.0. Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::getAllBundleInfo() instead. See https://www.drupal.org/node/2549139. + */ + public function testGetAllBundleInfo() { + $return = ['node' => ['article' => ['label' => 'Article']]]; + $this->entityTypeBundleInfo->getAllBundleInfo()->shouldBeCalled()->willReturn($return); + $this->assertEquals($return, $this->entityManager->getAllBundleInfo()); + } + + /** + * Tests the clearCachedBundles() method. + * + * @covers ::clearCachedBundles + * + * @expectedDeprecation EntityManagerInterface::clearCachedBundles() is deprecated in drupal:8.0.0 and will be removed before drupal:9.0.0. Use \Drupal\Core\Entity\EntityTypeBundleInfoInterface::clearCachedBundles() instead. See https://www.drupal.org/node/2549139. + */ + public function testClearCachedBundles() { + $this->entityTypeBundleInfo->clearCachedBundles()->shouldBeCalled(); + $this->entityManager->clearCachedBundles(); + } + /** * Tests the getTranslationFromContext() method. * @@ -110,7 +149,6 @@ public function testClearCachedDefinitions() { public function testGetTranslationFromContext() { $entity = $this->prophesize(EntityInterface::class); $this->entityRepository->getTranslationFromContext($entity->reveal(), 'de', ['example' => 'context'])->shouldBeCalled(); - $this->entityManager->getTranslationFromContext($entity->reveal(), 'de', ['example' => 'context']); } diff --git a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php index c744e663f0a3..a59a33229b4a 100644 --- a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php @@ -4,6 +4,9 @@ use Drupal\Core\Entity\ContentEntityType; use Drupal\Core\Entity\ContentEntityTypeInterface; +use Drupal\Core\Entity\EntityFieldManagerInterface; +use Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\Sql\DefaultTableMapping; use Drupal\Tests\UnitTestCase; @@ -21,11 +24,25 @@ class SqlContentEntityStorageSchemaTest extends UnitTestCase { protected $dbSchemaHandler; /** - * The mocked entity manager used in this test. + * The mocked entity type manager used in this test. * - * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The mocked entity field manager used in this test. + * + * @var \Drupal\Core\Entity\EntityFieldManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityFieldManager; + + /** + * The mocked entity last installed schema repository used in this test. + * + * @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityLastInstalledSchemaRepository; /** * The mocked entity type used in this test. @@ -59,7 +76,9 @@ class SqlContentEntityStorageSchemaTest extends UnitTestCase { * {@inheritdoc} */ protected function setUp() { - $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); + $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class); + $this->entityFieldManager = $this->createMock(EntityFieldManagerInterface::class); + $this->entityLastInstalledSchemaRepository = $this->createMock(EntityLastInstalledSchemaRepositoryInterface::class); $this->storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage') ->disableOriginalConstructor() ->getMock(); @@ -1212,12 +1231,12 @@ public function testRequiresEntityDataMigration($updated_entity_type_definition, ->disableOriginalConstructor() ->getMock(); - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('createHandlerInstance') ->willReturn($original_storage); $this->storageSchema = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema') - ->setConstructorArgs([$this->entityManager, $this->entityType, $this->storage, $connection]) + ->setConstructorArgs([$this->entityTypeManager, $this->entityType, $this->storage, $connection, $this->entityFieldManager, $this->entityLastInstalledSchemaRepository]) ->setMethods(['installedStorageSchema', 'hasSharedTableStructureChange']) ->getMock(); @@ -1354,12 +1373,12 @@ public function testRequiresEntityStorageSchemaChanges(ContentEntityTypeInterfac * be created. Defaults to expecting nothing. */ protected function setUpStorageSchema(array $expected = []) { - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('getDefinition') ->with($this->entityType->id()) ->will($this->returnValue($this->entityType)); - $this->entityManager->expects($this->any()) + $this->entityFieldManager->expects($this->any()) ->method('getFieldStorageDefinitions') ->with($this->entityType->id()) ->will($this->returnValue($this->storageDefinitions)); @@ -1397,7 +1416,7 @@ protected function setUpStorageSchema(array $expected = []) { $key_value = $this->getMock('Drupal\Core\KeyValueStore\KeyValueStoreInterface'); $this->storageSchema = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema') - ->setConstructorArgs([$this->entityManager, $this->entityType, $this->storage, $connection]) + ->setConstructorArgs([$this->entityTypeManager, $this->entityType, $this->storage, $connection, $this->entityFieldManager, $this->entityLastInstalledSchemaRepository]) ->setMethods(['installedStorageSchema', 'loadEntitySchemaData', 'hasSharedTableNameChanges', 'isTableEmpty']) ->getMock(); $this->storageSchema diff --git a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php index 3c88db7f9e53..025ff57c93d4 100644 --- a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php @@ -9,17 +9,18 @@ use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Cache\MemoryCache\MemoryCache; +use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityManager; +use Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface; use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\Query\QueryFactoryInterface; use Drupal\Core\Entity\Sql\DefaultTableMapping; use Drupal\Core\Entity\Sql\SqlContentEntityStorage; use Drupal\Core\Language\Language; use Drupal\Tests\UnitTestCase; -use Symfony\Component\DependencyInjection\ContainerBuilder; /** * @coversDefaultClass \Drupal\Core\Entity\Sql\SqlContentEntityStorage @@ -49,18 +50,18 @@ class SqlContentEntityStorageTest extends UnitTestCase { protected $fieldDefinitions = []; /** - * The mocked entity manager used in this test. + * The mocked entity type manager used in this test. * - * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $entityManager; + protected $entityTypeManager; /** - * The mocked entity type manager used in this test. + * The mocked entity type bundle info used in this test. * - * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $entityTypeManager; + protected $entityTypeBundleInfo; /** * The mocked entity field manager used in this test. @@ -69,6 +70,13 @@ class SqlContentEntityStorageTest extends UnitTestCase { */ protected $entityFieldManager; + /** + * The mocked entity last installed schema repository used in this test. + * + * @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityLastInstalledSchemaRepository; + /** * The entity type ID. * @@ -123,12 +131,10 @@ protected function setUp() { $this->container = new ContainerBuilder(); \Drupal::setContainer($this->container); - $this->entityManager = new EntityManager(); - // Inject the container into entity.manager so it can defer to - // entity_type.manager and other services. - $this->entityManager->setContainer($this->container); $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class); + $this->entityTypeBundleInfo = $this->createMock(EntityTypeBundleInfoInterface::class); $this->entityFieldManager = $this->getMock(EntityFieldManagerInterface::class); + $this->entityLastInstalledSchemaRepository = $this->createMock(EntityLastInstalledSchemaRepositoryInterface::class); $this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); $this->cache = $this->getMock('Drupal\Core\Cache\CacheBackendInterface'); $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface'); @@ -139,7 +145,6 @@ protected function setUp() { ->disableOriginalConstructor() ->getMock(); - $this->container->set('entity.manager', $this->entityManager); $this->container->set('entity_type.manager', $this->entityTypeManager); $this->container->set('entity_field.manager', $this->entityFieldManager); } @@ -433,13 +438,13 @@ public function testOnEntityTypeCreate() { ->will($this->returnValue($schema_handler)); $storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage') - ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache()]) + ->setConstructorArgs([$this->entityType, $this->connection, $this->entityFieldManager, $this->cache, $this->languageManager, new MemoryCache(), $this->entityTypeBundleInfo, $this->entityTypeManager, $this->entityLastInstalledSchemaRepository]) ->setMethods(['getStorageSchema']) ->getMock(); $key_value = $this->getMock('Drupal\Core\KeyValueStore\KeyValueStoreInterface'); $schema_handler = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema') - ->setConstructorArgs([$this->entityManager, $this->entityType, $storage, $this->connection]) + ->setConstructorArgs([$this->entityTypeManager, $this->entityType, $storage, $this->connection, $this->entityFieldManager, $this->entityLastInstalledSchemaRepository]) ->setMethods(['installedStorageSchema', 'createSharedTableSchema']) ->getMock(); $schema_handler @@ -1075,9 +1080,6 @@ public function testCreate() { ->method('getCurrentLanguage') ->will($this->returnValue($language)); - $this->container->set('language_manager', $language_manager); - $this->container->set('module_handler', $this->moduleHandler); - $entity = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityBase') ->disableOriginalConstructor() ->setMethods(['id']) @@ -1178,7 +1180,8 @@ protected function setUpEntityStorage() { ->method('getBaseFieldDefinitions') ->will($this->returnValue($this->fieldDefinitions)); - $this->entityStorage = new SqlContentEntityStorage($this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache()); + $this->entityStorage = new SqlContentEntityStorage($this->entityType, $this->connection, $this->entityFieldManager, $this->cache, $this->languageManager, new MemoryCache(), $this->entityTypeBundleInfo, $this->entityTypeManager, $this->entityLastInstalledSchemaRepository); + $this->entityStorage->setModuleHandler($this->moduleHandler); } /** @@ -1253,7 +1256,7 @@ public function testLoadMultipleNoPersistentCache() { ->method('set'); $entity_storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage') - ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache()]) + ->setConstructorArgs([$this->entityType, $this->connection, $this->entityFieldManager, $this->cache, $this->languageManager, new MemoryCache(), $this->entityTypeBundleInfo, $this->entityTypeManager, $this->entityLastInstalledSchemaRepository]) ->setMethods(['getFromStorage', 'invokeStorageLoadHook', 'initTableLayout']) ->getMock(); $entity_storage->method('invokeStorageLoadHook') @@ -1307,7 +1310,7 @@ public function testLoadMultiplePersistentCacheMiss() { ->with($key, $entity, CacheBackendInterface::CACHE_PERMANENT, [$this->entityTypeId . '_values', 'entity_field_info']); $entity_storage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage') - ->setConstructorArgs([$this->entityType, $this->connection, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache()]) + ->setConstructorArgs([$this->entityType, $this->connection, $this->entityFieldManager, $this->cache, $this->languageManager, new MemoryCache(), $this->entityTypeBundleInfo, $this->entityTypeManager, $this->entityLastInstalledSchemaRepository]) ->setMethods(['getFromStorage', 'invokeStorageLoadHook', 'initTableLayout']) ->getMock(); $entity_storage->method('invokeStorageLoadHook') @@ -1364,7 +1367,7 @@ public function testHasData() { ->method('getBaseFieldDefinitions') ->will($this->returnValue($this->fieldDefinitions)); - $this->entityStorage = new SqlContentEntityStorage($this->entityType, $database, $this->entityManager, $this->cache, $this->languageManager, new MemoryCache()); + $this->entityStorage = new SqlContentEntityStorage($this->entityType, $database, $this->entityFieldManager, $this->cache, $this->languageManager, new MemoryCache(), $this->entityTypeBundleInfo, $this->entityTypeManager, $this->entityLastInstalledSchemaRepository); $result = $this->entityStorage->hasData(); -- GitLab