diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php index 7463f78c2e82..88b17facf343 100644 --- a/core/lib/Drupal/Core/Entity/EntityManager.php +++ b/core/lib/Drupal/Core/Entity/EntityManager.php @@ -369,6 +369,7 @@ class EntityManager implements EntityManagerInterface, ContainerAwareInterface { * @see https://www.drupal.org/node/2549139 */ public function getTranslationFromContext(EntityInterface $entity, $langcode = NULL, $context = []) { + @trigger_error('EntityManagerInterface::getTranslationFromContext() is deprecated in 8.0.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityRepository::getTranslationFromContext() instead. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); return $this->container->get('entity.repository')->getTranslationFromContext($entity, $langcode, $context); } @@ -499,6 +500,7 @@ class EntityManager implements EntityManagerInterface, ContainerAwareInterface { * @see https://www.drupal.org/node/2549139 */ public function loadEntityByUuid($entity_type_id, $uuid) { + @trigger_error('EntityManagerInterface::loadEntityByUuid() is deprecated in 8.0.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityRepository::loadEntityByUuid() instead. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); return $this->container->get('entity.repository')->loadEntityByUuid($entity_type_id, $uuid); } @@ -512,6 +514,7 @@ class EntityManager implements EntityManagerInterface, ContainerAwareInterface { * @see https://www.drupal.org/node/2549139 */ public function loadEntityByConfigTarget($entity_type_id, $target) { + @trigger_error('EntityManagerInterface::loadEntityByConfigTarget() is deprecated in 8.0.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityRepository::loadEntityByConfigTarget() instead. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); return $this->container->get('entity.repository')->loadEntityByConfigTarget($entity_type_id, $target); } diff --git a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionTrait.php b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionTrait.php index 1d7947df21d2..0ed153a2b3cc 100644 --- a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionTrait.php +++ b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionTrait.php @@ -7,6 +7,8 @@ use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Session\AccountInterface; use Symfony\Component\DependencyInjection\ContainerInterface; +@trigger_error(__NAMESPACE__ . '\SelectionTrait is deprecated in drupal:8.7.0 and will be removed before drupal:9.0.0. A custom constructor must be implemented instead. See https://www.drupal.org/node/3030634', E_USER_DEPRECATED); + /** * Provides common methods and injects services for core selection handlers. */ diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php index da1a43bc16f7..685fa38904f0 100644 --- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php +++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php @@ -4,6 +4,7 @@ namespace Drupal\Core\Entity; use Drupal\Component\Utility\Crypt; use Drupal\Core\Cache\Cache; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Field\FieldItemInterface; @@ -20,6 +21,12 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * @ingroup entity_api */ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterface, EntityViewBuilderInterface { + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * The type of entities for which this view builder is instantiated. @@ -36,11 +43,18 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf protected $entityType; /** - * The entity manager service. + * The entity repository service. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityRepositoryInterface */ - protected $entityManager; + protected $entityRepository; + + /** + * The entity display repository. + * + * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface + */ + protected $entityDisplayRepository; /** * The cache bin used to store the render cache. @@ -77,19 +91,26 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager service. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository service. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. * @param \Drupal\Core\Theme\Registry $theme_registry * The theme registry. + * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository + * The entity display repository. */ - public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, Registry $theme_registry = NULL) { + public function __construct(EntityTypeInterface $entity_type, EntityRepositoryInterface $entity_repository, LanguageManagerInterface $language_manager, Registry $theme_registry = NULL, EntityDisplayRepositoryInterface $entity_display_repository = NULL) { $this->entityTypeId = $entity_type->id(); $this->entityType = $entity_type; - $this->entityManager = $entity_manager; + $this->entityRepository = $entity_repository; $this->languageManager = $language_manager; $this->themeRegistry = $theme_registry ?: \Drupal::service('theme.registry'); + if (!$entity_display_repository) { + @trigger_error('Calling EntityViewBuilder::__construct() with the $entity_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_display_repository = \Drupal::service('entity_display.repository'); + } + $this->entityDisplayRepository = $entity_display_repository; } /** @@ -98,9 +119,10 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { return new static( $entity_type, - $container->get('entity.manager'), + $container->get('entity.repository'), $container->get('language_manager'), - $container->get('theme.registry') + $container->get('theme.registry'), + $container->get('entity_display.repository') ); } @@ -132,7 +154,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf foreach ($entities as $key => $entity) { // Ensure that from now on we are dealing with the proper translation // object. - $entity = $this->entityManager->getTranslationFromContext($entity, $langcode); + $entity = $this->entityRepository->getTranslationFromContext($entity, $langcode); // Set build defaults. $build_list[$key] = $this->getBuildDefaults($entity, $view_mode); @@ -418,7 +440,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf // The 'default' is not an actual view mode. return TRUE; } - $view_modes_info = $this->entityManager->getViewModes($this->entityTypeId); + $view_modes_info = $this->entityDisplayRepository->getViewModes($this->entityTypeId); return !empty($view_modes_info[$view_mode]['cache']); } diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php index 2764866e9a4e..7d9711e4c00a 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php +++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php @@ -4,10 +4,13 @@ namespace Drupal\Core\Entity\Plugin\EntityReferenceSelection; use Drupal\Component\Utility\Html; use Drupal\Core\Database\Query\AlterableInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase; -use Drupal\Core\Entity\EntityReferenceSelection\SelectionTrait; use Drupal\Core\Entity\EntityReferenceSelection\SelectionWithAutocreateInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem; @@ -15,6 +18,7 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Session\AccountInterface; use Drupal\user\EntityOwnerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Default plugin implementation of the Entity Reference Selection plugin. @@ -37,20 +41,118 @@ use Drupal\user\EntityOwnerInterface; * ) */ class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPluginInterface, SelectionWithAutocreateInterface { + use DeprecatedServicePropertyTrait; - use SelectionTrait { - // PHP 5.5.9 gets confused between SelectionPluginBase::__construct() and - // SelectionTrait::__construct() that's why we are renaming the - // SelectionTrait::__construct() to avoid the confusion. - // @todo Remove this in https://www.drupal.org/node/2670966. - SelectionTrait::__construct as private initialize; + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; + + /** + * The entity type manager service. + * + * @var \Drupal\Core\Entity\EntityManagerInterface + */ + protected $entityTypeManager; + + /** + * The entity field manager service. + * + * @var \Drupal\Core\Entity\EntityFieldManagerInterface + */ + protected $entityFieldManager; + + /** + * Entity type bundle info service. + * + * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface + */ + public $entityTypeBundleInfo; + + /** + * The entity repository. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; + + /** + * The module handler service. + * + * @var \Drupal\Core\Extension\ModuleHandlerInterface + */ + protected $moduleHandler; + + /** + * The current user. + * + * @var \Drupal\Core\Session\AccountInterface + */ + protected $currentUser; + + /** + * Constructs a new DefaultSelection object. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param mixed $plugin_definition + * The plugin implementation definition. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity manager service. + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler service. + * @param \Drupal\Core\Session\AccountInterface $current_user + * The current user. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info service. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. + */ + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user, EntityFieldManagerInterface $entity_field_manager = NULL, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, EntityRepositoryInterface $entity_repository = NULL) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + + $this->entityTypeManager = $entity_type_manager; + $this->moduleHandler = $module_handler; + $this->currentUser = $current_user; + + if (!$entity_field_manager) { + @trigger_error('Calling DefaultSelection::__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->entityFieldManager = $entity_field_manager; + + if (!$entity_type_bundle_info) { + @trigger_error('Calling DefaultSelection::__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; + + if (!$entity_repository) { + @trigger_error('Calling DefaultSelection::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; } /** * {@inheritdoc} */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user) { - $this->initialize($configuration, $plugin_id, $plugin_definition, $entity_manager, $module_handler, $current_user); + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity_type.manager'), + $container->get('module_handler'), + $container->get('current_user'), + $container->get('entity_field.manager'), + $container->get('entity_type.bundle.info'), + $container->get('entity.repository') + ); } /** @@ -79,8 +181,8 @@ class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPl $configuration = $this->getConfiguration(); $entity_type_id = $configuration['target_type']; - $entity_type = $this->entityManager->getDefinition($entity_type_id); - $bundles = $this->entityManager->getBundleInfo($entity_type_id); + $entity_type = $this->entityTypeManager->getDefinition($entity_type_id); + $bundles = $this->entityTypeBundleInfo->getBundleInfo($entity_type_id); if ($entity_type->hasKey('bundle')) { $bundle_options = []; @@ -122,7 +224,7 @@ class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPl if ($entity_type->entityClassImplements(FieldableEntityInterface::class)) { $fields = []; foreach (array_keys($bundles) as $bundle) { - $bundle_fields = array_filter($this->entityManager->getFieldDefinitions($entity_type_id, $bundle), function ($field_definition) { + $bundle_fields = array_filter($this->entityFieldManager->getFieldDefinitions($entity_type_id, $bundle), function ($field_definition) { return !$field_definition->isComputed(); }); foreach ($bundle_fields as $field_name => $field_definition) { @@ -245,10 +347,10 @@ class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPl } $options = []; - $entities = $this->entityManager->getStorage($target_type)->loadMultiple($result); + $entities = $this->entityTypeManager->getStorage($target_type)->loadMultiple($result); foreach ($entities as $entity_id => $entity) { $bundle = $entity->bundle(); - $options[$bundle][$entity_id] = Html::escape($this->entityManager->getTranslationFromContext($entity)->label()); + $options[$bundle][$entity_id] = Html::escape($this->entityRepository->getTranslationFromContext($entity)->label()); } return $options; @@ -271,7 +373,7 @@ class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPl $result = []; if ($ids) { $target_type = $this->configuration['target_type']; - $entity_type = $this->entityManager->getDefinition($target_type); + $entity_type = $this->entityTypeManager->getDefinition($target_type); $query = $this->buildEntityQuery(); $result = $query ->condition($entity_type->getKey('id'), $ids, 'IN') @@ -285,11 +387,11 @@ class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPl * {@inheritdoc} */ public function createNewEntity($entity_type_id, $bundle, $label, $uid) { - $entity_type = $this->entityManager->getDefinition($entity_type_id); + $entity_type = $this->entityTypeManager->getDefinition($entity_type_id); $bundle_key = $entity_type->getKey('bundle'); $label_key = $entity_type->getKey('label'); - $entity = $this->entityManager->getStorage($entity_type_id)->create([ + $entity = $this->entityTypeManager->getStorage($entity_type_id)->create([ $bundle_key => $bundle, $label_key => $label, ]); @@ -330,9 +432,9 @@ class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPl protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') { $configuration = $this->getConfiguration(); $target_type = $configuration['target_type']; - $entity_type = $this->entityManager->getDefinition($target_type); + $entity_type = $this->entityTypeManager->getDefinition($target_type); - $query = $this->entityManager->getStorage($target_type)->getQuery(); + $query = $this->entityTypeManager->getStorage($target_type)->getQuery(); // If 'target_bundles' is NULL, all bundles are referenceable, no further // conditions are needed. diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php index 0ca145a165b8..d2a691f07733 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php @@ -49,7 +49,7 @@ abstract class EntityReferenceFormatterBase extends FormatterBase { // Set the entity in the correct language for display. if ($entity instanceof TranslatableInterface) { - $entity = \Drupal::entityManager()->getTranslationFromContext($entity, $langcode); + $entity = \Drupal::service('entity.repository')->getTranslationFromContext($entity, $langcode); } $access = $this->checkAccess($entity); 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 5cbe365d145b..bf638a33c326 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php @@ -473,7 +473,7 @@ class EntityReferenceItem extends FieldItemBase implements OptionsProviderInterf if ($default_value = $field_definition->getDefaultValueLiteral()) { foreach ($default_value as $value) { if (is_array($value) && isset($value['target_uuid'])) { - $entity = \Drupal::entityManager()->loadEntityByUuid($target_entity_type->id(), $value['target_uuid']); + $entity = \Drupal::service('entity.repository')->loadEntityByUuid($target_entity_type->id(), $value['target_uuid']); // If the entity does not exist do not create the dependency. // @see \Drupal\Core\Field\EntityReferenceFieldItemList::processDefaultValue() if ($entity) { @@ -522,7 +522,7 @@ class EntityReferenceItem extends FieldItemBase implements OptionsProviderInterf if ($default_value = $field_definition->getDefaultValueLiteral()) { foreach ($default_value as $key => $value) { if (is_array($value) && isset($value['target_uuid'])) { - $entity = $entity_manager->loadEntityByUuid($target_entity_type->id(), $value['target_uuid']); + $entity = \Drupal::service('entity.repository')->loadEntityByUuid($target_entity_type->id(), $value['target_uuid']); // @see \Drupal\Core\Field\EntityReferenceFieldItemList::processDefaultValue() if ($entity && isset($dependencies[$entity->getConfigDependencyKey()][$entity->getConfigDependencyName()])) { unset($default_value[$key]); diff --git a/core/modules/aggregator/src/FeedViewBuilder.php b/core/modules/aggregator/src/FeedViewBuilder.php index 1efaa3028cef..55f3b79119ea 100644 --- a/core/modules/aggregator/src/FeedViewBuilder.php +++ b/core/modules/aggregator/src/FeedViewBuilder.php @@ -2,11 +2,14 @@ namespace Drupal\aggregator; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityDisplayRepositoryInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\EntityViewBuilder; use Drupal\Core\Config\Config; use Drupal\Core\Language\LanguageManagerInterface; +use Drupal\Core\Theme\Registry; use Drupal\Core\Url; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -15,21 +18,42 @@ use Symfony\Component\DependencyInjection\ContainerInterface; */ class FeedViewBuilder extends EntityViewBuilder { + /** + * The 'aggregator.settings' config. + * + * @var \Drupal\Core\Config\Config + */ + protected $config; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + /** * Constructs a new FeedViewBuilder. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager service. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository service. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. * @param \Drupal\Core\Config\Config $config * The 'aggregator.settings' config. + * @param \Drupal\Core\Theme\Registry $theme_registry + * The theme registry. + * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository + * The entity display repository. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. */ - public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, Config $config) { - parent::__construct($entity_type, $entity_manager, $language_manager); + public function __construct(EntityTypeInterface $entity_type, EntityRepositoryInterface $entity_repository, LanguageManagerInterface $language_manager, Config $config, Registry $theme_registry, EntityDisplayRepositoryInterface $entity_display_repository, EntityTypeManagerInterface $entity_type_manager) { + parent::__construct($entity_type, $entity_repository, $language_manager, $theme_registry, $entity_display_repository); $this->config = $config; + $this->entityTypeManager = $entity_type_manager; } /** @@ -38,9 +62,12 @@ class FeedViewBuilder extends EntityViewBuilder { public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { return new static( $entity_type, - $container->get('entity.manager'), + $container->get('entity.repository'), $container->get('language_manager'), - $container->get('config.factory')->get('aggregator.settings') + $container->get('config.factory')->get('aggregator.settings'), + $container->get('theme.registry'), + $container->get('entity_display.repository'), + $container->get('entity_type.manager') ); } @@ -58,11 +85,11 @@ class FeedViewBuilder extends EntityViewBuilder { // When in summary view mode, respect the list_max setting. $limit = $view_mode == 'summary' ? $this->config->get('source.list_max') : 20; // Retrieve the items attached to this feed. - $items = $this->entityManager + $items = $this->entityTypeManager ->getStorage('aggregator_item') ->loadByFeed($entity->id(), $limit); - $build[$id]['items'] = $this->entityManager + $build[$id]['items'] = $this->entityTypeManager ->getViewBuilder('aggregator_item') ->viewMultiple($items, $view_mode, $entity->language()->getId()); diff --git a/core/modules/block/src/BlockViewBuilder.php b/core/modules/block/src/BlockViewBuilder.php index 3b20d7b25cad..72f3b1e51651 100644 --- a/core/modules/block/src/BlockViewBuilder.php +++ b/core/modules/block/src/BlockViewBuilder.php @@ -6,58 +6,18 @@ use Drupal\Core\Block\MainContentBlockPluginInterface; use Drupal\Core\Block\TitleBlockPluginInterface; use Drupal\Core\Cache\Cache; use Drupal\Core\Cache\CacheableMetadata; -use Drupal\Core\Entity\EntityManagerInterface; -use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\EntityViewBuilder; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Plugin\ContextAwarePluginInterface; use Drupal\Core\Render\Element; use Drupal\block\Entity\Block; -use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides a Block view builder. */ class BlockViewBuilder extends EntityViewBuilder { - /** - * The module handler. - * - * @var \Drupal\Core\Extension\ModuleHandlerInterface - */ - protected $moduleHandler; - - /** - * Constructs a new BlockViewBuilder. - * - * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type - * The entity type definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager service. - * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager - * The language manager. - * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler - * The module handler. - */ - public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, ModuleHandlerInterface $module_handler) { - parent::__construct($entity_type, $entity_manager, $language_manager); - $this->moduleHandler = $module_handler; - } - - /** - * {@inheritdoc} - */ - public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { - return new static( - $entity_type, - $container->get('entity.manager'), - $container->get('language_manager'), - $container->get('module_handler') - ); - } - /** * {@inheritdoc} */ diff --git a/core/modules/block_content/tests/src/Kernel/BlockContentEntityReferenceSelectionTest.php b/core/modules/block_content/tests/src/Kernel/BlockContentEntityReferenceSelectionTest.php index a980c75b5bd0..19b8e4aeace7 100644 --- a/core/modules/block_content/tests/src/Kernel/BlockContentEntityReferenceSelectionTest.php +++ b/core/modules/block_content/tests/src/Kernel/BlockContentEntityReferenceSelectionTest.php @@ -98,7 +98,7 @@ class BlockContentEntityReferenceSelectionTest extends KernelTestBase { 'target_bundles' => ['spiffy' => 'spiffy'], 'sort' => ['field' => '_none'], ]; - $this->selectionHandler = new TestSelection($configuration, '', '', $this->container->get('entity.manager'), $this->container->get('module_handler'), \Drupal::currentUser()); + $this->selectionHandler = new TestSelection($configuration, '', '', $this->container->get('entity_type.manager'), $this->container->get('module_handler'), \Drupal::currentUser(), \Drupal::service('entity_field.manager'), \Drupal::service('entity_type.bundle.info'), \Drupal::service('entity.repository')); // Setup the 3 expectation cases. $this->expectations = [ diff --git a/core/modules/comment/src/CommentViewBuilder.php b/core/modules/comment/src/CommentViewBuilder.php index 79973f7d564f..e776ad70ea93 100644 --- a/core/modules/comment/src/CommentViewBuilder.php +++ b/core/modules/comment/src/CommentViewBuilder.php @@ -3,12 +3,15 @@ namespace Drupal\comment; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; +use Drupal\Core\Entity\EntityDisplayRepositoryInterface; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\EntityViewBuilder; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Session\AccountInterface; +use Drupal\Core\Theme\Registry; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -23,21 +26,35 @@ class CommentViewBuilder extends EntityViewBuilder { */ protected $currentUser; + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + /** * Constructs a new CommentViewBuilder. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager service. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository service. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. * @param \Drupal\Core\Session\AccountInterface $current_user * The current user. + * @param \Drupal\Core\Theme\Registry $theme_registry + * The theme registry. + * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository + * The entity display repository. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. */ - public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, AccountInterface $current_user) { - parent::__construct($entity_type, $entity_manager, $language_manager); + public function __construct(EntityTypeInterface $entity_type, EntityRepositoryInterface $entity_repository, LanguageManagerInterface $language_manager, AccountInterface $current_user, Registry $theme_registry, EntityDisplayRepositoryInterface $entity_display_repository, EntityTypeManagerInterface $entity_type_manager) { + parent::__construct($entity_type, $entity_repository, $language_manager, $theme_registry, $entity_display_repository); $this->currentUser = $current_user; + $this->entityTypeManager = $entity_type_manager; } /** @@ -46,9 +63,12 @@ class CommentViewBuilder extends EntityViewBuilder { public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { return new static( $entity_type, - $container->get('entity.manager'), + $container->get('entity.repository'), $container->get('language_manager'), - $container->get('current_user') + $container->get('current_user'), + $container->get('theme.registry'), + $container->get('entity_display.repository'), + $container->get('entity_type.manager') ); } @@ -92,7 +112,7 @@ class CommentViewBuilder extends EntityViewBuilder { foreach ($entities as $entity) { $uids[] = $entity->getOwnerId(); } - $this->entityManager->getStorage('user')->loadMultiple(array_unique($uids)); + $this->entityTypeManager->getStorage('user')->loadMultiple(array_unique($uids)); parent::buildComponents($build, $entities, $displays, $view_mode); diff --git a/core/modules/comment/src/Plugin/views/field/CommentedEntity.php b/core/modules/comment/src/Plugin/views/field/CommentedEntity.php index 9e0d64b23e00..956bcc708928 100644 --- a/core/modules/comment/src/Plugin/views/field/CommentedEntity.php +++ b/core/modules/comment/src/Plugin/views/field/CommentedEntity.php @@ -38,7 +38,7 @@ class CommentedEntity extends EntityField { } foreach ($entity_ids_per_type as $type => $ids) { - $this->loadedCommentedEntities[$type] = $this->entityManager->getStorage($type)->loadMultiple($ids); + $this->loadedCommentedEntities[$type] = $this->entityTypeManager->getStorage($type)->loadMultiple($ids); } } diff --git a/core/modules/comment/tests/src/Unit/Plugin/views/field/CommentBulkFormTest.php b/core/modules/comment/tests/src/Unit/Plugin/views/field/CommentBulkFormTest.php index 8653ca3b85c8..4eca95745cf5 100644 --- a/core/modules/comment/tests/src/Unit/Plugin/views/field/CommentBulkFormTest.php +++ b/core/modules/comment/tests/src/Unit/Plugin/views/field/CommentBulkFormTest.php @@ -4,6 +4,8 @@ namespace Drupal\Tests\comment\Unit\Plugin\views\field; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\comment\Plugin\views\field\CommentBulkForm; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Tests\UnitTestCase; /** @@ -46,12 +48,14 @@ class CommentBulkFormTest extends UnitTestCase { ->method('loadMultiple') ->will($this->returnValue($actions)); - $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); - $entity_manager->expects($this->once()) + $entity_type_manager = $this->createMock(EntityTypeManagerInterface::class); + $entity_type_manager->expects($this->once()) ->method('getStorage') ->with('action') ->will($this->returnValue($entity_storage)); + $entity_repository = $this->createMock(EntityRepositoryInterface::class); + $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface'); $messenger = $this->getMock('Drupal\Core\Messenger\MessengerInterface'); @@ -86,7 +90,7 @@ class CommentBulkFormTest extends UnitTestCase { $definition['title'] = ''; $options = []; - $comment_bulk_form = new CommentBulkForm([], 'comment_bulk_form', $definition, $entity_manager, $language_manager, $messenger); + $comment_bulk_form = new CommentBulkForm([], 'comment_bulk_form', $definition, $entity_type_manager, $language_manager, $messenger, $entity_repository); $comment_bulk_form->init($executable, $display, $options); $this->assertAttributeEquals(array_slice($actions, 0, -1, TRUE), 'actions', $comment_bulk_form); diff --git a/core/modules/config/src/Tests/AssertConfigEntityImportTrait.php b/core/modules/config/src/Tests/AssertConfigEntityImportTrait.php index d405029a6e9b..afc516b8dd67 100644 --- a/core/modules/config/src/Tests/AssertConfigEntityImportTrait.php +++ b/core/modules/config/src/Tests/AssertConfigEntityImportTrait.php @@ -37,7 +37,7 @@ trait AssertConfigEntityImportTrait { // should recreate everything as necessary. $entity->delete(); $this->configImporter()->reset()->import(); - $imported_entity = \Drupal::entityManager()->loadEntityByUuid($entity_type_id, $entity_uuid); + $imported_entity = \Drupal::service('entity.repository')->loadEntityByUuid($entity_type_id, $entity_uuid); $this->assertIdentical($original_data, $imported_entity->toArray()); } diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module index d56a7827b8d4..aa8d988f58ee 100644 --- a/core/modules/editor/editor.module +++ b/core/modules/editor/editor.module @@ -439,7 +439,7 @@ function editor_entity_revision_delete(EntityInterface $entity) { */ function _editor_record_file_usage(array $uuids, EntityInterface $entity) { foreach ($uuids as $uuid) { - if ($file = \Drupal::entityManager()->loadEntityByUuid('file', $uuid)) { + if ($file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid)) { if ($file->status !== FILE_STATUS_PERMANENT) { $file->status = FILE_STATUS_PERMANENT; $file->save(); @@ -464,7 +464,7 @@ function _editor_record_file_usage(array $uuids, EntityInterface $entity) { */ function _editor_delete_file_usage(array $uuids, EntityInterface $entity, $count) { foreach ($uuids as $uuid) { - if ($file = \Drupal::entityManager()->loadEntityByUuid('file', $uuid)) { + if ($file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid)) { \Drupal::service('file.usage')->delete($file, 'editor', $entity->getEntityTypeId(), $entity->id(), $count); } } diff --git a/core/modules/editor/src/Form/EditorImageDialog.php b/core/modules/editor/src/Form/EditorImageDialog.php index dad2e67120e7..4e799302fa46 100644 --- a/core/modules/editor/src/Form/EditorImageDialog.php +++ b/core/modules/editor/src/Form/EditorImageDialog.php @@ -93,7 +93,7 @@ class EditorImageDialog extends FormBase { } $max_filesize = min(Bytes::toInt($image_upload['max_size']), file_upload_max_size()); - $existing_file = isset($image_element['data-entity-uuid']) ? \Drupal::entityManager()->loadEntityByUuid('file', $image_element['data-entity-uuid']) : NULL; + $existing_file = isset($image_element['data-entity-uuid']) ? \Drupal::service('entity.repository')->loadEntityByUuid('file', $image_element['data-entity-uuid']) : NULL; $fid = $existing_file ? $existing_file->id() : NULL; $form['fid'] = [ diff --git a/core/modules/editor/src/Plugin/Filter/EditorFileReference.php b/core/modules/editor/src/Plugin/Filter/EditorFileReference.php index 442476262b25..cc645ae52ca0 100644 --- a/core/modules/editor/src/Plugin/Filter/EditorFileReference.php +++ b/core/modules/editor/src/Plugin/Filter/EditorFileReference.php @@ -3,7 +3,8 @@ namespace Drupal\editor\Plugin\Filter; use Drupal\Component\Utility\Html; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\file\FileInterface; use Drupal\filter\FilterProcessResult; @@ -23,13 +24,19 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * ) */ class EditorFileReference extends FilterBase implements ContainerFactoryPluginInterface { + use DeprecatedServicePropertyTrait; /** - * An entity manager object. - * - * @var \Drupal\Core\Entity\EntityManagerInterface + * {@inheritdoc} */ - protected $entityManager; + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; + + /** + * The entity repository. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; /** * Constructs a \Drupal\editor\Plugin\Filter\EditorFileReference object. @@ -40,11 +47,11 @@ class EditorFileReference extends FilterBase implements ContainerFactoryPluginIn * The plugin_id for the plugin instance. * @param mixed $plugin_definition * The plugin implementation definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * An entity manager object. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager) { - $this->entityManager = $entity_manager; + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityRepositoryInterface $entity_repository) { + $this->entityRepository = $entity_repository; parent::__construct($configuration, $plugin_id, $plugin_definition); } @@ -56,7 +63,7 @@ class EditorFileReference extends FilterBase implements ContainerFactoryPluginIn $configuration, $plugin_id, $plugin_definition, - $container->get('entity.manager') + $container->get('entity.repository') ); } @@ -76,7 +83,7 @@ class EditorFileReference extends FilterBase implements ContainerFactoryPluginIn // If there is a 'src' attribute, set it to the file entity's current // URL. This ensures the URL works even after the file location changes. if ($node->hasAttribute('src')) { - $file = $this->entityManager->loadEntityByUuid('file', $uuid); + $file = $this->entityRepository->loadEntityByUuid('file', $uuid); if ($file instanceof FileInterface) { $node->setAttribute('src', $file->createFileUrl()); } @@ -86,7 +93,7 @@ class EditorFileReference extends FilterBase implements ContainerFactoryPluginIn if (!isset($processed_uuids[$uuid])) { $processed_uuids[$uuid] = TRUE; - $file = $this->entityManager->loadEntityByUuid('file', $uuid); + $file = $this->entityRepository->loadEntityByUuid('file', $uuid); if ($file instanceof FileInterface) { $result->addCacheTags($file->getCacheTags()); } diff --git a/core/modules/field/tests/src/Functional/FieldImportDeleteUninstallUiTest.php b/core/modules/field/tests/src/Functional/FieldImportDeleteUninstallUiTest.php index 6586446d5aef..eece976f5730 100644 --- a/core/modules/field/tests/src/Functional/FieldImportDeleteUninstallUiTest.php +++ b/core/modules/field/tests/src/Functional/FieldImportDeleteUninstallUiTest.php @@ -108,7 +108,7 @@ class FieldImportDeleteUninstallUiTest extends FieldTestBase { $this->assertNoText('Field data will be deleted by this synchronization.'); $this->rebuildContainer(); $this->assertFalse(\Drupal::moduleHandler()->moduleExists('telephone')); - $this->assertFalse(\Drupal::entityManager()->loadEntityByUuid('field_storage_config', $field_storage->uuid()), 'The telephone field has been deleted by the configuration synchronization'); + $this->assertFalse(\Drupal::service('entity.repository')->loadEntityByUuid('field_storage_config', $field_storage->uuid()), 'The telephone field has been deleted by the configuration synchronization'); $deleted_storages = \Drupal::state()->get('field.storage.deleted') ?: []; $this->assertFalse(isset($deleted_storages[$field_storage->uuid()]), 'Telephone field has been completed removed from the system.'); $this->assertFalse(isset($deleted_storages[$field_storage->uuid()]), 'Text field has been completed removed from the system.'); diff --git a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php index c35d1607bfdc..5c8c667f5e51 100644 --- a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php +++ b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php @@ -318,7 +318,7 @@ class EntityReferenceItemTest extends FieldKernelTestBase { $entity = unserialize($entity); // And then the entity. $entity->save(); - $term = \Drupal::entityManager()->loadEntityByUuid($term->getEntityTypeId(), $term->uuid()); + $term = \Drupal::service('entity.repository')->loadEntityByUuid($term->getEntityTypeId(), $term->uuid()); $this->assertEqual($entity->field_test_taxonomy_term->entity->id(), $term->id()); } diff --git a/core/modules/field/tests/src/Kernel/FieldImportDeleteUninstallTest.php b/core/modules/field/tests/src/Kernel/FieldImportDeleteUninstallTest.php index c3a4d3c1d547..065ba2743a1b 100644 --- a/core/modules/field/tests/src/Kernel/FieldImportDeleteUninstallTest.php +++ b/core/modules/field/tests/src/Kernel/FieldImportDeleteUninstallTest.php @@ -100,7 +100,7 @@ class FieldImportDeleteUninstallTest extends FieldKernelTestBase { $this->configImporter()->import(); $this->assertFalse(\Drupal::moduleHandler()->moduleExists('telephone')); - $this->assertFalse(\Drupal::entityManager()->loadEntityByUuid('field_storage_config', $field_storage->uuid()), 'The test field has been deleted by the configuration synchronization'); + $this->assertFalse(\Drupal::service('entity.repository')->loadEntityByUuid('field_storage_config', $field_storage->uuid()), 'The test field has been deleted by the configuration synchronization'); $deleted_storages = \Drupal::state()->get('field.storage.deleted') ?: []; $this->assertFalse(isset($deleted_storages[$field_storage->uuid()]), 'Telephone field has been completed removed from the system.'); $this->assertTrue(isset($deleted_storages[$unrelated_field_storage->uuid()]), 'Unrelated field not purged by configuration synchronization.'); diff --git a/core/modules/file/tests/src/Kernel/LoadTest.php b/core/modules/file/tests/src/Kernel/LoadTest.php index 413086ad1f49..352e26c9b12c 100644 --- a/core/modules/file/tests/src/Kernel/LoadTest.php +++ b/core/modules/file/tests/src/Kernel/LoadTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\file\Kernel; use Drupal\file\Entity\File; +use Drupal\file\FileInterface; /** * Tests \Drupal\file\Entity\File::load(). @@ -89,13 +90,11 @@ class LoadTest extends FileManagedUnitTestBase { $file->save(); file_test_reset(); - $by_uuid_file = \Drupal::entityManager()->loadEntityByUuid('file', $file->uuid()); + $by_uuid_file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $file->uuid()); $this->assertFileHookCalled('load'); - $this->assertTrue(is_object($by_uuid_file), '\Drupal::entityManager()->loadEntityByUuid() returned a file object.'); - if (is_object($by_uuid_file)) { - $this->assertEqual($by_uuid_file->id(), $file->id(), 'Loading by UUID got the same fid.', 'File'); - $this->assertTrue($by_uuid_file->file_test['loaded'], 'file_test_file_load() was able to modify the file during load.'); - } + $this->assertInstanceOf(FileInterface::class, $by_uuid_file); + $this->assertEqual($by_uuid_file->id(), $file->id(), 'Loading by UUID got the same fid.', 'File'); + $this->assertTrue($by_uuid_file->file_test['loaded'], 'file_test_file_load() was able to modify the file during load.'); } } diff --git a/core/modules/forum/src/Form/Overview.php b/core/modules/forum/src/Form/Overview.php index 27335d61d9e2..b3017968c0d2 100644 --- a/core/modules/forum/src/Form/Overview.php +++ b/core/modules/forum/src/Form/Overview.php @@ -2,12 +2,10 @@ namespace Drupal\forum\Form; -use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; use Drupal\Core\Url; use Drupal\taxonomy\Form\OverviewTerms; -use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\taxonomy\VocabularyInterface; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -18,26 +16,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; */ class Overview extends OverviewTerms { - /** - * Entity manager Service Object. - * - * @var \Drupal\Core\Entity\EntityManagerInterface - */ - protected $entityManager; - - /** - * Constructs a \Drupal\forum\Form\OverviewForm object. - * - * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler - * The module handler service. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager service. - */ - public function __construct(ModuleHandlerInterface $module_handler, EntityManagerInterface $entity_manager) { - parent::__construct($module_handler, $entity_manager); - $this->entityManager = $entity_manager; - } - /** * {@inheritdoc} */ @@ -51,7 +29,7 @@ class Overview extends OverviewTerms { public function buildForm(array $form, FormStateInterface $form_state, VocabularyInterface $taxonomy_vocabulary = NULL) { $forum_config = $this->config('forum.settings'); $vid = $forum_config->get('vocabulary'); - $vocabulary = $this->entityManager->getStorage('taxonomy_vocabulary')->load($vid); + $vocabulary = $this->entityTypeManager->getStorage('taxonomy_vocabulary')->load($vid); if (!$vocabulary) { throw new NotFoundHttpException(); } diff --git a/core/modules/image/image.module b/core/modules/image/image.module index c1c216c0d198..201e137da666 100644 --- a/core/modules/image/image.module +++ b/core/modules/image/image.module @@ -383,7 +383,7 @@ function image_entity_presave(EntityInterface $entity) { if ($uuid) { $original_uuid = isset($entity->original) ? $entity->original->getSetting('default_image')['uuid'] : NULL; if ($uuid != $original_uuid) { - $file = \Drupal::entityManager()->loadEntityByUuid('file', $uuid); + $file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid); if ($file) { $image = \Drupal::service('image.factory')->get($file->getFileUri()); $default_image['width'] = $image->getWidth(); @@ -414,7 +414,7 @@ function image_field_storage_config_update(FieldStorageConfigInterface $field_st $uuid_new = $field_storage->getSetting('default_image')['uuid']; $uuid_old = $prior_field_storage->getSetting('default_image')['uuid']; - $file_new = $uuid_new ? \Drupal::entityManager()->loadEntityByUuid('file', $uuid_new) : FALSE; + $file_new = $uuid_new ? \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid_new) : FALSE; if ($uuid_new != $uuid_old) { @@ -426,7 +426,7 @@ function image_field_storage_config_update(FieldStorageConfigInterface $field_st } // Is there an old file? - if ($uuid_old && ($file_old = \Drupal::entityManager()->loadEntityByUuid('file', $uuid_old))) { + if ($uuid_old && ($file_old = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid_old))) { \Drupal::service('file.usage')->delete($file_old, 'image', 'default_image', $field_storage->uuid()); } } @@ -455,7 +455,7 @@ function image_field_config_update(FieldConfigInterface $field) { $uuid_old = $prior_instance->getSetting('default_image')['uuid']; // If the old and new files do not match, update the default accordingly. - $file_new = $uuid_new ? \Drupal::entityManager()->loadEntityByUuid('file', $uuid_new) : FALSE; + $file_new = $uuid_new ? \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid_new) : FALSE; if ($uuid_new != $uuid_old) { // Save the new file, if present. if ($file_new) { @@ -464,7 +464,7 @@ function image_field_config_update(FieldConfigInterface $field) { \Drupal::service('file.usage')->add($file_new, 'image', 'default_image', $field->uuid()); } // Delete the old file, if present. - if ($uuid_old && ($file_old = \Drupal::entityManager()->loadEntityByUuid('file', $uuid_old))) { + if ($uuid_old && ($file_old = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid_old))) { \Drupal::service('file.usage')->delete($file_old, 'image', 'default_image', $field->uuid()); } } @@ -488,7 +488,7 @@ function image_field_storage_config_delete(FieldStorageConfigInterface $field) { // The value of a managed_file element can be an array if #extended == TRUE. $uuid = $field->getSetting('default_image')['uuid']; - if ($uuid && ($file = \Drupal::entityManager()->loadEntityByUuid('file', $uuid))) { + if ($uuid && ($file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid))) { \Drupal::service('file.usage')->delete($file, 'image', 'default_image', $field->uuid()); } } @@ -507,7 +507,7 @@ function image_field_config_delete(FieldConfigInterface $field) { $uuid = $field->getSetting('default_image')['uuid']; // Remove the default image when the instance is deleted. - if ($uuid && ($file = \Drupal::entityManager()->loadEntityByUuid('file', $uuid))) { + if ($uuid && ($file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid))) { \Drupal::service('file.usage')->delete($file, 'image', 'default_image', $field->uuid()); } } diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php index 335868ab6f66..f52fc1d783b6 100644 --- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php +++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php @@ -23,7 +23,7 @@ abstract class ImageFormatterBase extends FileFormatterBase { if (empty($default_image['uuid']) && $this->fieldDefinition instanceof FieldConfigInterface) { $default_image = $this->fieldDefinition->getFieldStorageDefinition()->getSetting('default_image'); } - if (!empty($default_image['uuid']) && $file = \Drupal::entityManager()->loadEntityByUuid('file', $default_image['uuid'])) { + if (!empty($default_image['uuid']) && $file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $default_image['uuid'])) { // Clone the FieldItemList into a runtime-only object for the formatter, // so that the fallback image can be rendered without affecting the // field values in the entity being rendered. diff --git a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php index b3aa0c9fa7b2..b2f802a776c9 100644 --- a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php +++ b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php @@ -415,7 +415,7 @@ class ImageItem extends FileItem { // Convert the stored UUID to a FID. $fids = []; $uuid = $settings['default_image']['uuid']; - if ($uuid && ($file = $this->getEntityManager()->loadEntityByUuid('file', $uuid))) { + if ($uuid && ($file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid))) { $fids[0] = $file->id(); } $element['default_image']['uuid'] = [ diff --git a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php index d7556b4ed6a8..304e0979c18c 100644 --- a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php +++ b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php @@ -178,7 +178,7 @@ class ImageWidget extends FileWidget { $default_image = $this->fieldDefinition->getFieldStorageDefinition()->getSetting('default_image'); } // Convert the stored UUID into a file ID. - if (!empty($default_image['uuid']) && $entity = \Drupal::entityManager()->loadEntityByUuid('file', $default_image['uuid'])) { + if (!empty($default_image['uuid']) && $entity = \Drupal::service('entity.repository')->loadEntityByUuid('file', $default_image['uuid'])) { $default_image['fid'] = $entity->id(); } $element['#default_image'] = !empty($default_image['fid']) ? $default_image : []; diff --git a/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php b/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php index 4014fc837817..a69eeaae80da 100644 --- a/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php +++ b/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php @@ -377,7 +377,7 @@ class ImageFieldDisplayTest extends ImageFieldTestBase { \Drupal::entityManager()->clearCachedFieldDefinitions(); $field_storage = FieldStorageConfig::loadByName('node', $field_name); $default_image = $field_storage->getSetting('default_image'); - $file = \Drupal::entityManager()->loadEntityByUuid('file', $default_image['uuid']); + $file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $default_image['uuid']); $this->assertTrue($file->isPermanent(), 'The default image status is permanent.'); $image = [ '#theme' => 'image', @@ -448,7 +448,7 @@ class ImageFieldDisplayTest extends ImageFieldTestBase { $private_field_storage = FieldStorageConfig::loadByName('node', $private_field_name); $default_image = $private_field_storage->getSetting('default_image'); - $file = \Drupal::entityManager()->loadEntityByUuid('file', $default_image['uuid']); + $file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $default_image['uuid']); $this->assertEqual('private', file_uri_scheme($file->getFileUri()), 'Default image uses private:// scheme.'); $this->assertTrue($file->isPermanent(), 'The default image status is permanent.'); // Create a new node with no image attached and ensure that default private diff --git a/core/modules/menu_link_content/src/Plugin/Menu/MenuLinkContent.php b/core/modules/menu_link_content/src/Plugin/Menu/MenuLinkContent.php index 0c606d84988d..68ddd94f5512 100644 --- a/core/modules/menu_link_content/src/Plugin/Menu/MenuLinkContent.php +++ b/core/modules/menu_link_content/src/Plugin/Menu/MenuLinkContent.php @@ -3,7 +3,9 @@ namespace Drupal\menu_link_content\Plugin\Menu; use Drupal\Component\Plugin\Exception\PluginException; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Menu\MenuLinkBase; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; @@ -13,6 +15,12 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * Provides the menu link plugin for content menu links. */ class MenuLinkContent extends MenuLinkBase implements ContainerFactoryPluginInterface { + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * Entities IDs to load. @@ -48,11 +56,18 @@ class MenuLinkContent extends MenuLinkBase implements ContainerFactoryPluginInte protected $entity; /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity repository. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; /** * The language manager. @@ -70,12 +85,14 @@ class MenuLinkContent extends MenuLinkBase implements ContainerFactoryPluginInte * 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\Language\LanguageManagerInterface $language_manager * The language manager. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager, EntityRepositoryInterface $entity_repository = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); if (!empty($this->pluginDefinition['metadata']['entity_id'])) { @@ -85,8 +102,13 @@ class MenuLinkContent extends MenuLinkBase implements ContainerFactoryPluginInte static::$entityIdsToLoad[$entity_id] = $entity_id; } - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; $this->languageManager = $language_manager; + if (!$entity_repository) { + @trigger_error('Calling MenuLinkContent::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; } /** @@ -97,8 +119,9 @@ class MenuLinkContent extends MenuLinkBase implements ContainerFactoryPluginInte $configuration, $plugin_id, $plugin_definition, - $container->get('entity.manager'), - $container->get('language_manager') + $container->get('entity_type.manager'), + $container->get('language_manager'), + $container->get('entity.repository') ); } @@ -114,7 +137,7 @@ class MenuLinkContent extends MenuLinkBase implements ContainerFactoryPluginInte protected function getEntity() { if (empty($this->entity)) { $entity = NULL; - $storage = $this->entityManager->getStorage('menu_link_content'); + $storage = $this->entityTypeManager->getStorage('menu_link_content'); if (!empty($this->pluginDefinition['metadata']['entity_id'])) { $entity_id = $this->pluginDefinition['metadata']['entity_id']; // Make sure the current ID is in the list, since each plugin empties @@ -128,15 +151,14 @@ class MenuLinkContent extends MenuLinkBase implements ContainerFactoryPluginInte if (!$entity) { // Fallback to the loading by the UUID. $uuid = $this->getUuid(); - $loaded_entities = $storage->loadByProperties(['uuid' => $uuid]); - $entity = reset($loaded_entities); + $entity = $this->entityRepository->loadEntityByUuid('menu_link_content', $uuid); } if (!$entity) { throw new PluginException("Entity not found through the menu link plugin definition and could not fallback on UUID '$uuid'"); } // Clone the entity object to avoid tampering with the static cache. $this->entity = clone $entity; - $the_entity = $this->entityManager->getTranslationFromContext($this->entity); + $the_entity = $this->entityRepository->getTranslationFromContext($this->entity); /** @var \Drupal\menu_link_content\MenuLinkContentInterface $the_entity */ $this->entity = $the_entity; $this->entity->setInsidePlugin(); @@ -214,7 +236,7 @@ class MenuLinkContent extends MenuLinkBase implements ContainerFactoryPluginInte foreach ($overrides as $key => $value) { $entity->{$key}->value = $value; } - $this->entityManager->getStorage('menu_link_content')->save($entity); + $entity->save(); } return $this->pluginDefinition; diff --git a/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php b/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php index 7faaa3587331..b5e5c274842b 100644 --- a/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php +++ b/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php @@ -214,7 +214,7 @@ class MenuLinksTest extends KernelTestBase { $this->menuLinkManager->updateDefinition($links['child-1'], ['parent' => $links['child-2']]); // Verify that the entity was updated too. $menu_link_plugin = $this->menuLinkManager->createInstance($links['child-1']); - $entity = \Drupal::entityManager()->loadEntityByUuid('menu_link_content', $menu_link_plugin->getDerivativeId()); + $entity = \Drupal::service('entity.repository')->loadEntityByUuid('menu_link_content', $menu_link_plugin->getDerivativeId()); $this->assertEqual($entity->getParentId(), $links['child-2']); $expected_hierarchy = [ diff --git a/core/modules/node/node.tokens.inc b/core/modules/node/node.tokens.inc index 9b7d7f91e536..b44343b66371 100644 --- a/core/modules/node/node.tokens.inc +++ b/core/modules/node/node.tokens.inc @@ -127,7 +127,7 @@ function node_tokens($type, $tokens, array $data, array $options, BubbleableMeta case 'body': case 'summary': - $translation = \Drupal::entityManager()->getTranslationFromContext($node, $langcode, ['operation' => 'node_tokens']); + $translation = \Drupal::service('entity.repository')->getTranslationFromContext($node, $langcode, ['operation' => 'node_tokens']); if ($translation->hasField('body') && ($items = $translation->get('body')) && !$items->isEmpty()) { $item = $items[0]; // If the summary was requested and is not empty, use it. diff --git a/core/modules/node/tests/src/Unit/Plugin/views/field/NodeBulkFormTest.php b/core/modules/node/tests/src/Unit/Plugin/views/field/NodeBulkFormTest.php index 5599f4a13b29..d6716c9d8ea6 100644 --- a/core/modules/node/tests/src/Unit/Plugin/views/field/NodeBulkFormTest.php +++ b/core/modules/node/tests/src/Unit/Plugin/views/field/NodeBulkFormTest.php @@ -3,6 +3,8 @@ namespace Drupal\Tests\node\Unit\Plugin\views\field; use Drupal\Core\DependencyInjection\ContainerBuilder; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\node\Plugin\views\field\NodeBulkForm; use Drupal\Tests\UnitTestCase; @@ -46,12 +48,14 @@ class NodeBulkFormTest extends UnitTestCase { ->method('loadMultiple') ->will($this->returnValue($actions)); - $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); - $entity_manager->expects($this->once()) + $entity_type_manager = $this->createMock(EntityTypeManagerInterface::class); + $entity_type_manager->expects($this->once()) ->method('getStorage') ->with('action') ->will($this->returnValue($entity_storage)); + $entity_repository = $this->createMock(EntityRepositoryInterface::class); + $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface'); $messenger = $this->getMock('Drupal\Core\Messenger\MessengerInterface'); @@ -86,7 +90,7 @@ class NodeBulkFormTest extends UnitTestCase { $definition['title'] = ''; $options = []; - $node_bulk_form = new NodeBulkForm([], 'node_bulk_form', $definition, $entity_manager, $language_manager, $messenger); + $node_bulk_form = new NodeBulkForm([], 'node_bulk_form', $definition, $entity_type_manager, $language_manager, $messenger, $entity_repository); $node_bulk_form->init($executable, $display, $options); $this->assertAttributeEquals(array_slice($actions, 0, -1, TRUE), 'actions', $node_bulk_form); diff --git a/core/modules/quickedit/tests/modules/quickedit_test.module b/core/modules/quickedit/tests/modules/quickedit_test.module index b6199a6e8c9a..5a0ae84d9179 100644 --- a/core/modules/quickedit/tests/modules/quickedit_test.module +++ b/core/modules/quickedit/tests/modules/quickedit_test.module @@ -11,7 +11,7 @@ use Drupal\Core\Entity\EntityInterface; * Implements hook_quickedit_render_field(). */ function quickedit_test_quickedit_render_field(EntityInterface $entity, $field_name, $view_mode_id, $langcode) { - $entity = \Drupal::entityManager()->getTranslationFromContext($entity, $langcode); + $entity = \Drupal::service('entity.repository')->getTranslationFromContext($entity, $langcode); return [ '#prefix' => '
', 'field' => $entity->get($field_name)->view($view_mode_id), diff --git a/core/modules/rest/src/Plugin/views/row/DataEntityRow.php b/core/modules/rest/src/Plugin/views/row/DataEntityRow.php index c857676f396c..a66506877d54 100644 --- a/core/modules/rest/src/Plugin/views/row/DataEntityRow.php +++ b/core/modules/rest/src/Plugin/views/row/DataEntityRow.php @@ -2,7 +2,9 @@ namespace Drupal\rest\Plugin\views\row; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\views\Entity\Render\EntityTranslationRenderTrait; use Drupal\views\Plugin\views\row\RowPluginBase; @@ -23,6 +25,12 @@ use Symfony\Component\DependencyInjection\ContainerInterface; class DataEntityRow extends RowPluginBase { use EntityTranslationRenderTrait; + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * {@inheritdoc} @@ -37,11 +45,25 @@ class DataEntityRow extends RowPluginBase { protected $entityType; /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - public $entityManager; + protected $entityTypeManager; + + /** + * The entity repository service. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; + + /** + * The entity display repository. + * + * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface + */ + protected $entityDisplayRepository; /** * The language manager. @@ -51,25 +73,46 @@ class DataEntityRow extends RowPluginBase { protected $languageManager; /** - * {@inheritdoc} + * Constructs a new DataEntityRow object. * - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param array $plugin_definition + * The plugin implementation definition. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity manager. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) { + public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager, EntityRepositoryInterface $entity_repository = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; $this->languageManager = $language_manager; + + if (!$entity_repository) { + @trigger_error('Calling DataEntityRow::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { - return new static($configuration, $plugin_id, $plugin_definition, $container->get('entity.manager'), $container->get('language_manager')); + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity_type.manager'), + $container->get('language_manager'), + $container->get('entity.repository') + ); } /** @@ -90,9 +133,25 @@ class DataEntityRow extends RowPluginBase { * {@inheritdoc} */ protected function getEntityManager() { + // This relies on DeprecatedServicePropertyTrait to trigger a deprecation + // message in case it is accessed. return $this->entityManager; } + /** + * {@inheritdoc} + */ + protected function getEntityTypeManager() { + return $this->entityTypeManager; + } + + /** + * {@inheritdoc} + */ + protected function getEntityRepository() { + return $this->entityRepository; + } + /** * {@inheritdoc} */ diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module index 5553071e393b..e242f8c52e6d 100644 --- a/core/modules/shortcut/shortcut.module +++ b/core/modules/shortcut/shortcut.module @@ -264,7 +264,7 @@ function shortcut_renderable_links($shortcut_set = NULL) { $cache_tags = []; foreach ($shortcut_set->getShortcuts() as $shortcut) { - $shortcut = \Drupal::entityManager()->getTranslationFromContext($shortcut); + $shortcut = \Drupal::service('entity.repository')->getTranslationFromContext($shortcut); $url = $shortcut->getUrl(); if ($url->access()) { $links[$shortcut->id()] = [ diff --git a/core/modules/taxonomy/src/Form/OverviewTerms.php b/core/modules/taxonomy/src/Form/OverviewTerms.php index 5f7d0ce8714a..504816668d12 100644 --- a/core/modules/taxonomy/src/Form/OverviewTerms.php +++ b/core/modules/taxonomy/src/Form/OverviewTerms.php @@ -3,7 +3,9 @@ namespace Drupal\taxonomy\Form; use Drupal\Core\Access\AccessResult; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormBase; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Form\FormStateInterface; @@ -18,6 +20,12 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * @internal */ class OverviewTerms extends FormBase { + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * The module handler service. @@ -31,7 +39,7 @@ class OverviewTerms extends FormBase { * * @var \Drupal\Core\Entity\EntityManagerInterface */ - protected $entityManager; + protected $entityTypeManager; /** * The term storage handler. @@ -54,22 +62,36 @@ class OverviewTerms extends FormBase { */ protected $renderer; + /** + * The entity repository. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; + /** * Constructs an OverviewTerms object. * * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler * The module handler service. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The entity manager service. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager service. * @param \Drupal\Core\Render\RendererInterface $renderer * The renderer service. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. */ - public function __construct(ModuleHandlerInterface $module_handler, EntityManagerInterface $entity_manager, RendererInterface $renderer = NULL) { + public function __construct(ModuleHandlerInterface $module_handler, EntityTypeManagerInterface $entity_type_manager, RendererInterface $renderer = NULL, EntityRepositoryInterface $entity_repository = NULL) { $this->moduleHandler = $module_handler; - $this->entityManager = $entity_manager; - $this->storageController = $entity_manager->getStorage('taxonomy_term'); - $this->termListBuilder = $entity_manager->getListBuilder('taxonomy_term'); + $this->entityTypeManager = $entity_type_manager; + $this->storageController = $entity_type_manager->getStorage('taxonomy_term'); + $this->termListBuilder = $entity_type_manager->getListBuilder('taxonomy_term'); $this->renderer = $renderer ?: \Drupal::service('renderer'); + if (!$entity_repository) { + @trigger_error('Calling OverviewTerms::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; } /** @@ -78,8 +100,9 @@ class OverviewTerms extends FormBase { public static function create(ContainerInterface $container) { return new static( $container->get('module_handler'), - $container->get('entity.manager'), - $container->get('renderer') + $container->get('entity_type.manager'), + $container->get('renderer'), + $container->get('entity.repository') ); } @@ -231,7 +254,7 @@ class OverviewTerms extends FormBase { $errors = $form_state->getErrors(); $row_position = 0; // Build the actual form. - $access_control_handler = $this->entityManager->getAccessControlHandler('taxonomy_term'); + $access_control_handler = $this->entityTypeManager->getAccessControlHandler('taxonomy_term'); $create_access = $access_control_handler->createAccess($taxonomy_vocabulary->id(), NULL, [], TRUE); if ($create_access->isAllowed()) { $empty = $this->t('No terms available. Add term.', [':link' => Url::fromRoute('entity.taxonomy_term.add_form', ['taxonomy_vocabulary' => $taxonomy_vocabulary->id()])->toString()]); @@ -263,7 +286,7 @@ class OverviewTerms extends FormBase { 'weight' => [], ]; /** @var $term \Drupal\Core\Entity\EntityInterface */ - $term = $this->entityManager->getTranslationFromContext($term); + $term = $this->entityRepository->getTranslationFromContext($term); $form['terms'][$key]['#term'] = $term; $indentation = []; if (isset($term->depth) && $term->depth > 0) { @@ -273,7 +296,7 @@ class OverviewTerms extends FormBase { ]; } $form['terms'][$key]['term'] = [ - '#prefix' => !empty($indentation) ? \Drupal::service('renderer')->render($indentation) : '', + '#prefix' => !empty($indentation) ? $this->renderer->render($indentation) : '', '#type' => 'link', '#title' => $term->getName(), '#url' => $term->toUrl(), diff --git a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php index 059225029d74..1ccee9737a43 100644 --- a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php +++ b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php @@ -56,7 +56,7 @@ class TermSelection extends DefaultSelection { $options = []; - $bundles = $this->entityManager->getBundleInfo('taxonomy_term'); + $bundles = $this->entityTypeBundleInfo->getBundleInfo('taxonomy_term'); $bundle_names = $this->getConfiguration()['target_bundles'] ?: array_keys($bundles); $has_admin_access = $this->currentUser->hasPermission('administer taxonomy'); @@ -64,13 +64,13 @@ class TermSelection extends DefaultSelection { foreach ($bundle_names as $bundle) { if ($vocabulary = Vocabulary::load($bundle)) { /** @var \Drupal\taxonomy\TermInterface[] $terms */ - if ($terms = $this->entityManager->getStorage('taxonomy_term')->loadTree($vocabulary->id(), 0, NULL, TRUE)) { + if ($terms = $this->entityTypeManager->getStorage('taxonomy_term')->loadTree($vocabulary->id(), 0, NULL, TRUE)) { foreach ($terms as $term) { if (!$has_admin_access && (!$term->isPublished() || in_array($term->parent->target_id, $unpublished_terms))) { $unpublished_terms[] = $term->id(); continue; } - $options[$vocabulary->id()][$term->id()] = str_repeat('-', $term->depth) . Html::escape($this->entityManager->getTranslationFromContext($term)->label()); + $options[$vocabulary->id()][$term->id()] = str_repeat('-', $term->depth) . Html::escape($this->entityRepository->getTranslationFromContext($term)->label()); } } } diff --git a/core/modules/taxonomy/src/Plugin/views/argument/IndexTid.php b/core/modules/taxonomy/src/Plugin/views/argument/IndexTid.php index 8d1854533255..84965c91be52 100644 --- a/core/modules/taxonomy/src/Plugin/views/argument/IndexTid.php +++ b/core/modules/taxonomy/src/Plugin/views/argument/IndexTid.php @@ -18,7 +18,7 @@ class IndexTid extends ManyToOne { $titles = []; $terms = Term::loadMultiple($this->value); foreach ($terms as $term) { - $titles[] = \Drupal::entityManager()->getTranslationFromContext($term)->label(); + $titles[] = \Drupal::service('entity.repository')->getTranslationFromContext($term)->label(); } return $titles; } diff --git a/core/modules/taxonomy/src/Plugin/views/field/TaxonomyIndexTid.php b/core/modules/taxonomy/src/Plugin/views/field/TaxonomyIndexTid.php index 45f0095dbe16..785629e1fe5a 100644 --- a/core/modules/taxonomy/src/Plugin/views/field/TaxonomyIndexTid.php +++ b/core/modules/taxonomy/src/Plugin/views/field/TaxonomyIndexTid.php @@ -143,7 +143,7 @@ class TaxonomyIndexTid extends PrerenderList { foreach ($result as $node_nid => $data) { foreach ($data as $tid => $term) { - $this->items[$node_nid][$tid]['name'] = \Drupal::entityManager()->getTranslationFromContext($term)->label(); + $this->items[$node_nid][$tid]['name'] = \Drupal::service('entity.repository')->getTranslationFromContext($term)->label(); $this->items[$node_nid][$tid]['tid'] = $tid; $this->items[$node_nid][$tid]['vocabulary_vid'] = $term->bundle(); $this->items[$node_nid][$tid]['vocabulary'] = $vocabularies[$term->bundle()]->label(); diff --git a/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php b/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php index efadf83126e6..920bc0e33bc6 100644 --- a/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php +++ b/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php @@ -182,7 +182,7 @@ class TaxonomyIndexTid extends ManyToOne { if ($tree) { foreach ($tree as $term) { $choice = new \stdClass(); - $choice->option = [$term->id() => str_repeat('-', $term->depth) . \Drupal::entityManager()->getTranslationFromContext($term)->label()]; + $choice->option = [$term->id() => str_repeat('-', $term->depth) . \Drupal::service('entity.repository')->getTranslationFromContext($term)->label()]; $options[] = $choice; } } @@ -200,7 +200,7 @@ class TaxonomyIndexTid extends ManyToOne { } $terms = Term::loadMultiple($query->execute()); foreach ($terms as $term) { - $options[$term->id()] = \Drupal::entityManager()->getTranslationFromContext($term)->label(); + $options[$term->id()] = \Drupal::service('entity.repository')->getTranslationFromContext($term)->label(); } } @@ -365,7 +365,7 @@ class TaxonomyIndexTid extends ManyToOne { $this->value = array_filter($this->value); $terms = Term::loadMultiple($this->value); foreach ($terms as $term) { - $this->valueOptions[$term->id()] = \Drupal::entityManager()->getTranslationFromContext($term)->label(); + $this->valueOptions[$term->id()] = \Drupal::service('entity.repository')->getTranslationFromContext($term)->label(); } } return parent::adminSummary(); diff --git a/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php b/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php index b2887afb05f9..5d462b661899 100644 --- a/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php +++ b/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php @@ -5,7 +5,10 @@ namespace Drupal\user\Plugin\EntityReferenceSelection; use Drupal\Core\Database\Connection; use Drupal\Core\Database\Query\Condition; use Drupal\Core\Database\Query\SelectInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityFieldManagerInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Form\FormStateInterface; @@ -33,13 +36,6 @@ class UserSelection extends DefaultSelection { */ protected $connection; - /** - * The user storage. - * - * @var \Drupal\user\UserStorageInterface - */ - protected $userStorage; - /** * Constructs a new UserSelection object. * @@ -49,20 +45,25 @@ class UserSelection extends DefaultSelection { * 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 service. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager service. * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler * The module handler service. * @param \Drupal\Core\Session\AccountInterface $current_user * The current user. * @param \Drupal\Core\Database\Connection $connection * The database connection. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. + * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info + * The entity type bundle info service. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user, Connection $connection) { - parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_manager, $module_handler, $current_user); + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user, Connection $connection, EntityFieldManagerInterface $entity_field_manager = NULL, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, EntityRepositoryInterface $entity_repository = NULL) { + parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $module_handler, $current_user, $entity_field_manager, $entity_type_bundle_info, $entity_repository); $this->connection = $connection; - $this->userStorage = $entity_manager->getStorage('user'); } /** @@ -76,7 +77,10 @@ class UserSelection extends DefaultSelection { $container->get('entity.manager'), $container->get('module_handler'), $container->get('current_user'), - $container->get('database') + $container->get('database'), + $container->get('entity_field.manager'), + $container->get('entity_type.bundle.info'), + $container->get('entity.repository') ); } diff --git a/core/modules/user/tests/src/Unit/Plugin/views/field/UserBulkFormTest.php b/core/modules/user/tests/src/Unit/Plugin/views/field/UserBulkFormTest.php index a6b2f543f014..a6f04ab7f8ab 100644 --- a/core/modules/user/tests/src/Unit/Plugin/views/field/UserBulkFormTest.php +++ b/core/modules/user/tests/src/Unit/Plugin/views/field/UserBulkFormTest.php @@ -3,6 +3,8 @@ namespace Drupal\Tests\user\Unit\Plugin\views\field; use Drupal\Core\DependencyInjection\ContainerBuilder; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Tests\UnitTestCase; use Drupal\user\Plugin\views\field\UserBulkForm; @@ -46,12 +48,14 @@ class UserBulkFormTest extends UnitTestCase { ->method('loadMultiple') ->will($this->returnValue($actions)); - $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); - $entity_manager->expects($this->once()) + $entity_type_manager = $this->createMock(EntityTypeManagerInterface::class); + $entity_type_manager->expects($this->once()) ->method('getStorage') ->with('action') ->will($this->returnValue($entity_storage)); + $entity_repository = $this->createMock(EntityRepositoryInterface::class); + $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface'); $messenger = $this->getMock('Drupal\Core\Messenger\MessengerInterface'); @@ -86,7 +90,7 @@ class UserBulkFormTest extends UnitTestCase { $definition['title'] = ''; $options = []; - $user_bulk_form = new UserBulkForm([], 'user_bulk_form', $definition, $entity_manager, $language_manager, $messenger); + $user_bulk_form = new UserBulkForm([], 'user_bulk_form', $definition, $entity_type_manager, $language_manager, $messenger, $entity_repository); $user_bulk_form->init($executable, $display, $options); $this->assertAttributeEquals(array_slice($actions, 0, -1, TRUE), 'actions', $user_bulk_form); diff --git a/core/modules/views/src/Entity/Render/EntityFieldRenderer.php b/core/modules/views/src/Entity/Render/EntityFieldRenderer.php index 3c38da176038..a77f18ae41cc 100644 --- a/core/modules/views/src/Entity/Render/EntityFieldRenderer.php +++ b/core/modules/views/src/Entity/Render/EntityFieldRenderer.php @@ -3,9 +3,11 @@ namespace Drupal\views\Entity\Render; use Drupal\Core\DependencyInjection\DependencySerializationTrait; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Entity\Entity\EntityViewDisplay; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\views\Plugin\views\field\EntityField; use Drupal\views\Plugin\views\query\QueryPluginBase; @@ -22,6 +24,12 @@ use Drupal\views\ViewExecutable; class EntityFieldRenderer extends RendererBase { use EntityTranslationRenderTrait; use DependencySerializationTrait; + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * The relationship being handled. @@ -31,11 +39,18 @@ class EntityFieldRenderer extends RendererBase { protected $relationship; /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity repository service. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; /** * A list of indexes of rows whose fields have already been rendered. @@ -55,13 +70,20 @@ class EntityFieldRenderer extends RendererBase { * The language manager. * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. - * @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\EntityRepositoryInterface $entity_repository + * The entity repository. */ - public function __construct(ViewExecutable $view, $relationship, LanguageManagerInterface $language_manager, EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager) { + public function __construct(ViewExecutable $view, $relationship, LanguageManagerInterface $language_manager, EntityTypeInterface $entity_type, EntityTypeManagerInterface $entity_type_manager, EntityRepositoryInterface $entity_repository = NULL) { parent::__construct($view, $language_manager, $entity_type); $this->relationship = $relationship; - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; + if (!$entity_repository) { + @trigger_error('Calling EntityFieldRenderer::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; } /** @@ -82,9 +104,25 @@ class EntityFieldRenderer extends RendererBase { * {@inheritdoc} */ protected function getEntityManager() { + // This relies on DeprecatedServicePropertyTrait to trigger a deprecation + // message in case it is accessed. return $this->entityManager; } + /** + * {@inheritdoc} + */ + protected function getEntityTypeManager() { + return $this->entityTypeManager; + } + + /** + * {@inheritdoc} + */ + protected function getEntityRepository() { + return $this->entityRepository; + } + /** * {@inheritdoc} */ diff --git a/core/modules/views/src/Entity/Render/EntityTranslationRenderTrait.php b/core/modules/views/src/Entity/Render/EntityTranslationRenderTrait.php index 8fbc191d149f..dd7aa0947130 100644 --- a/core/modules/views/src/Entity/Render/EntityTranslationRenderTrait.php +++ b/core/modules/views/src/Entity/Render/EntityTranslationRenderTrait.php @@ -49,7 +49,7 @@ trait EntityTranslationRenderTrait { $renderer = 'ConfigurableLanguageRenderer'; } $class = '\Drupal\views\Entity\Render\\' . $renderer; - $entity_type = $this->getEntityManager()->getDefinition($this->getEntityTypeId()); + $entity_type = $this->getEntityTypeManager()->getDefinition($this->getEntityTypeId()); $this->entityTranslationRenderer = new $class($view, $this->getLanguageManager(), $entity_type, $langcode); } return $this->entityTranslationRenderer; @@ -74,7 +74,7 @@ trait EntityTranslationRenderTrait { $translation = $entity; if ($entity instanceof TranslatableInterface && count($entity->getTranslationLanguages()) > 1) { $langcode = $this->getEntityTranslationRenderer()->getLangcode($row); - $translation = $this->getEntityManager()->getTranslationFromContext($entity, $langcode); + $translation = $this->getEntityRepository()->getTranslationFromContext($entity, $langcode); } return $translation; } @@ -88,12 +88,26 @@ trait EntityTranslationRenderTrait { abstract public function getEntityTypeId(); /** - * Returns the entity manager. + * Returns the entity type manager. * - * @return \Drupal\Core\Entity\EntityManagerInterface - * The entity manager. + * @return \Drupal\Core\Entity\EntityTypeManagerInterface + * The entity type manager. */ - abstract protected function getEntityManager(); + protected function getEntityTypeManager() { + @trigger_error('Classes that use EntityTranslationRenderTrait must provide a getEntityTypeManager() method since drupal:8.7.0. This implementation will become abstract before Drupal 9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + return \Drupal::entityTypeManager(); + } + + /** + * Returns the entity repository. + * + * @return \Drupal\Core\Entity\EntityRepositoryInterface + * The entity repository. + */ + protected function getEntityRepository() { + @trigger_error('Classes that use EntityTranslationRenderTrait must provide a getEntityRepository() method since drupal:8.7.0. This implementation will become abstract before drupal:9.0.0. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED); + return \Drupal::service('entity.repository'); + } /** * Returns the language manager. diff --git a/core/modules/views/src/Entity/Render/EntityTranslationRendererBase.php b/core/modules/views/src/Entity/Render/EntityTranslationRendererBase.php index e77992dd0196..91cf2325382d 100644 --- a/core/modules/views/src/Entity/Render/EntityTranslationRendererBase.php +++ b/core/modules/views/src/Entity/Render/EntityTranslationRendererBase.php @@ -31,7 +31,7 @@ abstract class EntityTranslationRendererBase extends RendererBase { * {@inheritdoc} */ public function preRender(array $result) { - $view_builder = $this->view->rowPlugin->entityManager->getViewBuilder($this->entityType->id()); + $view_builder = \Drupal::entityTypeManager()->getViewBuilder($this->entityType->id()); /** @var \Drupal\views\ResultRow $row */ foreach ($result as $row) { diff --git a/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php b/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php index 5b4b3561cddb..f769f7339520 100644 --- a/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php +++ b/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php @@ -80,7 +80,7 @@ class TranslationLanguageRenderer extends EntityTranslationRendererBase { * {@inheritdoc} */ public function preRender(array $result) { - $view_builder = $this->view->rowPlugin->entityManager->getViewBuilder($this->entityType->id()); + $view_builder = \Drupal::entityTypeManager()->getViewBuilder($this->entityType->id()); /** @var \Drupal\views\ResultRow $row */ foreach ($result as $row) { diff --git a/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php b/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php index aa791651fc82..79707af10a28 100644 --- a/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php +++ b/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php @@ -2,12 +2,16 @@ namespace Drupal\views\Plugin\EntityReferenceSelection; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase; -use Drupal\Core\Entity\EntityReferenceSelection\SelectionTrait; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; use Drupal\views\Views; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Plugin implementation of the 'selection' entity_reference. @@ -20,8 +24,12 @@ use Drupal\views\Views; * ) */ class ViewsSelection extends SelectionPluginBase implements ContainerFactoryPluginInterface { + use DeprecatedServicePropertyTrait; - use SelectionTrait; + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * The loaded View object. @@ -30,6 +38,65 @@ class ViewsSelection extends SelectionPluginBase implements ContainerFactoryPlug */ protected $view; + /** + * The entity type manager service. + * + * @var \Drupal\Core\Entity\EntityManagerInterface + */ + protected $entityTypeManager; + + /** + * The module handler service. + * + * @var \Drupal\Core\Extension\ModuleHandlerInterface + */ + protected $moduleHandler; + + /** + * The current user. + * + * @var \Drupal\Core\Session\AccountInterface + */ + protected $currentUser; + + /** + * Constructs a new ViewsSelection object. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param mixed $plugin_definition + * The plugin implementation definition. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager service. + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler service. + * @param \Drupal\Core\Session\AccountInterface $current_user + * The current user. + */ + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + + $this->entityTypeManager = $entity_type_manager; + $this->moduleHandler = $module_handler; + $this->currentUser = $current_user; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity_type.manager'), + $container->get('module_handler'), + $container->get('current_user') + ); + } + /** * {@inheritdoc} */ @@ -53,8 +120,8 @@ class ViewsSelection extends SelectionPluginBase implements ContainerFactoryPlug $displays = Views::getApplicableViews('entity_reference_display'); // Filter views that list the entity type we want, and group the separate // displays by view. - $entity_type = $this->entityManager->getDefinition($this->configuration['target_type']); - $view_storage = $this->entityManager->getStorage('view'); + $entity_type = $this->entityTypeManager->getDefinition($this->configuration['target_type']); + $view_storage = $this->entityTypeManager->getStorage('view'); $options = []; foreach ($displays as $data) { diff --git a/core/modules/views/src/Plugin/views/area/Entity.php b/core/modules/views/src/Plugin/views/area/Entity.php index d073d53fcf73..51660e5d39ce 100644 --- a/core/modules/views/src/Plugin/views/area/Entity.php +++ b/core/modules/views/src/Plugin/views/area/Entity.php @@ -2,7 +2,10 @@ namespace Drupal\views\Plugin\views\area; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityDisplayRepositoryInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\ViewExecutable; @@ -16,6 +19,12 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * @ViewsArea("entity") */ class Entity extends TokenizeAreaPluginBase { + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * Stores the entity type of the result entities. @@ -25,11 +34,25 @@ class Entity extends TokenizeAreaPluginBase { protected $entityType; /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity repository service. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; + + /** + * The entity display repository. + * + * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface + */ + protected $entityDisplayRepository; /** * Constructs a new Entity instance. @@ -40,13 +63,29 @@ class Entity extends TokenizeAreaPluginBase { * 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\EntityRepositoryInterface $entity_repository + * The entity repository. + * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository + * The entity display repository. */ - 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, EntityRepositoryInterface $entity_repository = NULL, EntityDisplayRepositoryInterface $entity_display_repository = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; + + if (!$entity_repository) { + @trigger_error('Calling EntityRow::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; + + if (!$entity_display_repository) { + @trigger_error('Calling EntityRow::__construct() with the $entity_display_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_display_repository = \Drupal::service('entity_display.repository'); + } + $this->entityDisplayRepository = $entity_display_repository; } /** @@ -57,7 +96,9 @@ class Entity extends TokenizeAreaPluginBase { $configuration, $plugin_id, $plugin_definition, - $container->get('entity.manager') + $container->get('entity_type.manager'), + $container->get('entity.repository'), + $container->get('entity_display.repository') ); } @@ -95,12 +136,12 @@ class Entity extends TokenizeAreaPluginBase { $form['view_mode'] = [ '#type' => 'select', - '#options' => $this->entityManager->getViewModeOptions($this->entityType), + '#options' => $this->entityDisplayRepository->getViewModeOptions($this->entityType), '#title' => $this->t('View mode'), '#default_value' => $this->options['view_mode'], ]; - $label = $this->entityManager->getDefinition($this->entityType)->getLabel(); + $label = $this->entityTypeManager->getDefinition($this->entityType)->getLabel(); $target = $this->options['target']; // If the target does not contain tokens, try to load the entity and @@ -111,7 +152,7 @@ class Entity extends TokenizeAreaPluginBase { // @todo If the entity does not exist, this will will show the config // target identifier. Decide if this is the correct behavior in // https://www.drupal.org/node/2415391. - if ($target_entity = $this->entityManager->loadEntityByConfigTarget($this->entityType, $this->options['target'])) { + if ($target_entity = $this->entityRepository->loadEntityByConfigTarget($this->entityType, $this->options['target'])) { $target = $target_entity->id(); } } @@ -141,7 +182,7 @@ class Entity extends TokenizeAreaPluginBase { // https://www.drupal.org/node/2396607. $options = $form_state->getValue('options'); if (strpos($options['target'], '{{') === FALSE) { - if ($entity = $this->entityManager->getStorage($this->entityType)->load($options['target'])) { + if ($entity = $this->entityTypeManager->getStorage($this->entityType)->load($options['target'])) { $options['target'] = $entity->getConfigTarget(); } $form_state->setValue('options', $options); @@ -159,17 +200,17 @@ class Entity extends TokenizeAreaPluginBase { // We cast as we need the integer/string value provided by the // ::tokenizeValue() call. $target_id = (string) $this->tokenizeValue($this->options['target']); - if ($entity = $this->entityManager->getStorage($this->entityType)->load($target_id)) { + if ($entity = $this->entityTypeManager->getStorage($this->entityType)->load($target_id)) { $target_entity = $entity; } } else { - if ($entity = $this->entityManager->loadEntityByConfigTarget($this->entityType, $this->options['target'])) { + if ($entity = $this->entityRepository->loadEntityByConfigTarget($this->entityType, $this->options['target'])) { $target_entity = $entity; } } if (isset($target_entity) && (!empty($this->options['bypass_access']) || $target_entity->access('view'))) { - $view_builder = $this->entityManager->getViewBuilder($this->entityType); + $view_builder = $this->entityTypeManager->getViewBuilder($this->entityType); return $view_builder->view($target_entity, $this->options['view_mode']); } } @@ -187,8 +228,8 @@ class Entity extends TokenizeAreaPluginBase { // @todo Use a method to check for tokens in // https://www.drupal.org/node/2396607. if (strpos($this->options['target'], '{{') === FALSE) { - if ($entity = $this->entityManager->loadEntityByConfigTarget($this->entityType, $this->options['target'])) { - $dependencies[$this->entityManager->getDefinition($this->entityType)->getConfigDependencyKey()][] = $entity->getConfigDependencyName(); + if ($entity = $this->entityRepository->loadEntityByConfigTarget($this->entityType, $this->options['target'])) { + $dependencies[$this->entityTypeManager->getDefinition($this->entityType)->getConfigDependencyKey()][] = $entity->getConfigDependencyName(); } } diff --git a/core/modules/views/src/Plugin/views/field/BulkForm.php b/core/modules/views/src/Plugin/views/field/BulkForm.php index 3ce092b98308..33b1afb015a1 100644 --- a/core/modules/views/src/Plugin/views/field/BulkForm.php +++ b/core/modules/views/src/Plugin/views/field/BulkForm.php @@ -3,8 +3,10 @@ namespace Drupal\views\Plugin\views\field; use Drupal\Core\Cache\CacheableDependencyInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Entity\RevisionableInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\LanguageManagerInterface; @@ -28,13 +30,26 @@ class BulkForm extends FieldPluginBase implements CacheableDependencyInterface { use RedirectDestinationTrait; use UncacheableFieldHandlerTrait; use EntityTranslationRenderTrait; + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * The entity manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity repository service. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; /** * The action storage. @@ -73,22 +88,29 @@ class BulkForm extends FieldPluginBase implements CacheableDependencyInterface { * 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\Language\LanguageManagerInterface $language_manager * The language manager. * @param \Drupal\Core\Messenger\MessengerInterface $messenger * The messenger. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. * * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, MessengerInterface $messenger) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager, MessengerInterface $messenger, EntityRepositoryInterface $entity_repository = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->entityManager = $entity_manager; - $this->actionStorage = $entity_manager->getStorage('action'); + $this->entityTypeManager = $entity_type_manager; + $this->actionStorage = $entity_type_manager->getStorage('action'); $this->languageManager = $language_manager; $this->messenger = $messenger; + if (!$entity_repository) { + @trigger_error('Calling BulkForm::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; } /** @@ -101,7 +123,8 @@ class BulkForm extends FieldPluginBase implements CacheableDependencyInterface { $plugin_definition, $container->get('entity.manager'), $container->get('language_manager'), - $container->get('messenger') + $container->get('messenger'), + $container->get('entity.repository') ); } @@ -152,9 +175,25 @@ class BulkForm extends FieldPluginBase implements CacheableDependencyInterface { * {@inheritdoc} */ protected function getEntityManager() { + // This relies on DeprecatedServicePropertyTrait to trigger a deprecation + // message in case it is accessed. return $this->entityManager; } + /** + * {@inheritdoc} + */ + protected function getEntityTypeManager() { + return $this->entityTypeManager; + } + + /** + * {@inheritdoc} + */ + protected function getEntityRepository() { + return $this->entityRepository; + } + /** * {@inheritdoc} */ @@ -499,7 +538,7 @@ class BulkForm extends FieldPluginBase implements CacheableDependencyInterface { $langcode = array_pop($key_parts); // Load the entity or a specific revision depending on the given key. - $storage = $this->entityManager->getStorage($this->getEntityType()); + $storage = $this->entityTypeManager->getStorage($this->getEntityType()); $entity = $revision_id ? $storage->loadRevision($revision_id) : $storage->load($id); if ($entity instanceof TranslatableInterface) { diff --git a/core/modules/views/src/Plugin/views/field/EntityField.php b/core/modules/views/src/Plugin/views/field/EntityField.php index f26c188d3ba6..96880ceded46 100644 --- a/core/modules/views/src/Plugin/views/field/EntityField.php +++ b/core/modules/views/src/Plugin/views/field/EntityField.php @@ -6,8 +6,11 @@ use Drupal\Component\Plugin\DependentPluginInterface; use Drupal\Component\Utility\Xss; use Drupal\Core\Cache\Cache; use Drupal\Core\Cache\CacheableDependencyInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Field\FieldTypePluginManagerInterface; use Drupal\Core\Field\FormatterPluginManager; @@ -39,6 +42,12 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac use FieldAPIHandlerTrait; use PluginDependencyTrait; + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * An array to store field renderable arrays for use by renderItems(). @@ -76,11 +85,25 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac protected $formatterOptions; /** - * The entity manager. + * The entity typemanager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity field manager. + * + * @var \Drupal\Core\Entity\EntityFieldManagerInterface + */ + protected $entityFieldManager; + + /** + * The entity repository service. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; /** * The field formatter plugin manager. @@ -126,8 +149,8 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac * The plugin_id for the plugin instance. * @param mixed $plugin_definition * The plugin implementation definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager - * The field formatter plugin manager. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. * @param \Drupal\Core\Field\FormatterPluginManager $formatter_plugin_manager * The field formatter plugin manager. * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_plugin_manager @@ -136,11 +159,15 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac * The language manager. * @param \Drupal\Core\Render\RendererInterface $renderer * The renderer. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, FormatterPluginManager $formatter_plugin_manager, FieldTypePluginManagerInterface $field_type_plugin_manager, LanguageManagerInterface $language_manager, RendererInterface $renderer) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, FormatterPluginManager $formatter_plugin_manager, FieldTypePluginManagerInterface $field_type_plugin_manager, LanguageManagerInterface $language_manager, RendererInterface $renderer, EntityRepositoryInterface $entity_repository = NULL, EntityFieldManagerInterface $entity_field_manager = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; $this->formatterPluginManager = $formatter_plugin_manager; $this->fieldTypePluginManager = $field_type_plugin_manager; $this->languageManager = $language_manager; @@ -151,6 +178,18 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac if (isset($this->definition['entity field'])) { $this->definition['field_name'] = $this->definition['entity field']; } + + if (!$entity_repository) { + @trigger_error('Calling EntityField::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; + + if (!$entity_field_manager) { + @trigger_error('Calling EntityField::__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->entityFieldManager = $entity_field_manager; } /** @@ -161,11 +200,13 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac $configuration, $plugin_id, $plugin_definition, - $container->get('entity.manager'), + $container->get('entity_type.manager'), $container->get('plugin.manager.field.formatter'), $container->get('plugin.manager.field.field_type'), $container->get('language_manager'), - $container->get('renderer') + $container->get('renderer'), + $container->get('entity.repository'), + $container->get('entity_field.manager') ); } @@ -202,18 +243,11 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac } } - /** - * {@inheritdoc} - */ - protected function getEntityManager() { - return $this->entityManager; - } - /** * {@inheritdoc} */ public function access(AccountInterface $account) { - $access_control_handler = $this->entityManager->getAccessControlHandler($this->getEntityType()); + $access_control_handler = $this->entityTypeManager->getAccessControlHandler($this->getEntityType()); return $access_control_handler->fieldAccess('view', $this->getFieldDefinition(), $account); } @@ -323,7 +357,7 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac */ protected function getFieldStorageDefinition() { $entity_type_id = $this->definition['entity_type']; - $field_storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id); + $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($entity_type_id); // @todo Unify 'entity field'/'field_name' instead of converting back and // forth. https://www.drupal.org/node/2410779 @@ -339,7 +373,7 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac // base fields, so we need to explicitly fetch a list of all base fields in // order to support them. // @see \Drupal\Core\Entity\EntityFieldManager::getFieldStorageDefinitions() - $base_fields = $this->entityManager->getBaseFieldDefinitions($entity_type_id); + $base_fields = $this->entityFieldManager->getBaseFieldDefinitions($entity_type_id); if (isset($this->definition['field_name']) && isset($base_fields[$this->definition['field_name']])) { return $base_fields[$this->definition['field_name']]->getFieldStorageDefinition(); } @@ -798,8 +832,8 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac } } if (!isset($this->entityFieldRenderer)) { - $entity_type = $this->entityManager->getDefinition($this->getEntityType()); - $this->entityFieldRenderer = new EntityFieldRenderer($this->view, $this->relationship, $this->languageManager, $entity_type, $this->entityManager); + $entity_type = $this->entityTypeManager->getDefinition($this->getEntityType()); + $this->entityFieldRenderer = new EntityFieldRenderer($this->view, $this->relationship, $this->languageManager, $entity_type, $this->entityTypeManager, $this->entityRepository); } } return $this->entityFieldRenderer; @@ -1044,7 +1078,7 @@ class EntityField extends FieldPluginBase implements CacheableDependencyInterfac * The table mapping. */ protected function getTableMapping() { - return $this->entityManager->getStorage($this->definition['entity_type'])->getTableMapping(); + return $this->entityTypeManager->getStorage($this->definition['entity_type'])->getTableMapping(); } /** diff --git a/core/modules/views/src/Plugin/views/field/EntityOperations.php b/core/modules/views/src/Plugin/views/field/EntityOperations.php index d31cd1ea3068..32a30ad1aef8 100644 --- a/core/modules/views/src/Plugin/views/field/EntityOperations.php +++ b/core/modules/views/src/Plugin/views/field/EntityOperations.php @@ -2,7 +2,9 @@ namespace Drupal\views\Plugin\views\field; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Routing\RedirectDestinationTrait; @@ -21,13 +23,33 @@ class EntityOperations extends FieldPluginBase { use EntityTranslationRenderTrait; use RedirectDestinationTrait; + use DeprecatedServicePropertyTrait; /** - * The entity manager. - * - * @var \Drupal\Core\Entity\EntityManagerInterface + * {@inheritdoc} */ - protected $entityManager; + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The entity repository service. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; + + /** + * The entity display repository. + * + * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface + */ + protected $entityDisplayRepository; /** * The language manager. @@ -37,7 +59,7 @@ class EntityOperations extends FieldPluginBase { protected $languageManager; /** - * Constructor. + * Constructs a new EntityOperations object. * * @param array $configuration * A configuration array containing information about the plugin instance. @@ -45,16 +67,24 @@ class EntityOperations extends FieldPluginBase { * The plugin_id for the plugin instance. * @param array $plugin_definition * The plugin implementation definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity manager. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. */ - public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) { + public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager, EntityRepositoryInterface $entity_repository = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; $this->languageManager = $language_manager; + + if (!$entity_repository) { + @trigger_error('Calling EntityOperations::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; } /** @@ -65,8 +95,9 @@ class EntityOperations extends FieldPluginBase { $configuration, $plugin_id, $plugin_definition, - $container->get('entity.manager'), - $container->get('language_manager') + $container->get('entity_type.manager'), + $container->get('language_manager'), + $container->get('entity.repository') ); } @@ -109,7 +140,7 @@ class EntityOperations extends FieldPluginBase { */ public function render(ResultRow $values) { $entity = $this->getEntityTranslation($this->getEntity($values), $values); - $operations = $this->entityManager->getListBuilder($entity->getEntityTypeId())->getOperations($entity); + $operations = $this->entityTypeManager->getListBuilder($entity->getEntityTypeId())->getOperations($entity); if ($this->options['destination']) { foreach ($operations as &$operation) { if (!isset($operation['query'])) { @@ -149,9 +180,25 @@ class EntityOperations extends FieldPluginBase { * {@inheritdoc} */ protected function getEntityManager() { + // This relies on DeprecatedServicePropertyTrait to trigger a deprecation + // message in case it is accessed. return $this->entityManager; } + /** + * {@inheritdoc} + */ + protected function getEntityTypeManager() { + return $this->entityTypeManager; + } + + /** + * {@inheritdoc} + */ + protected function getEntityRepository() { + return $this->entityRepository; + } + /** * {@inheritdoc} */ diff --git a/core/modules/views/src/Plugin/views/field/RenderedEntity.php b/core/modules/views/src/Plugin/views/field/RenderedEntity.php index 867638657731..f70b03f5d958 100644 --- a/core/modules/views/src/Plugin/views/field/RenderedEntity.php +++ b/core/modules/views/src/Plugin/views/field/RenderedEntity.php @@ -3,7 +3,10 @@ namespace Drupal\views\Plugin\views\field; use Drupal\Core\Cache\CacheableDependencyInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityDisplayRepositoryInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\views\Entity\Render\EntityTranslationRenderTrait; @@ -21,13 +24,33 @@ use Drupal\Core\Cache\Cache; class RenderedEntity extends FieldPluginBase implements CacheableDependencyInterface { use EntityTranslationRenderTrait; + use DeprecatedServicePropertyTrait; /** - * The entity manager. - * - * @var \Drupal\Core\Entity\EntityManagerInterface + * {@inheritdoc} */ - protected $entityManager; + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The entity repository service. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; + + /** + * The entity display repository. + * + * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface + */ + protected $entityDisplayRepository; /** * The language manager. @@ -45,16 +68,32 @@ class RenderedEntity extends FieldPluginBase implements CacheableDependencyInter * The plugin_id for the plugin instance. * @param array $plugin_definition * The plugin implementation definition. - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity manager. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. + * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository + * The entity display repository. */ - public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) { + public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager, EntityRepositoryInterface $entity_repository = NULL, EntityDisplayRepositoryInterface $entity_display_repository = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; $this->languageManager = $language_manager; + + if (!$entity_repository) { + @trigger_error('Calling RenderedEntity::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; + + if (!$entity_display_repository) { + @trigger_error('Calling RenderedEntity::__construct() with the $entity_display_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_display_repository = \Drupal::service('entity_display.repository'); + } + $this->entityDisplayRepository = $entity_display_repository; } /** @@ -65,8 +104,10 @@ class RenderedEntity extends FieldPluginBase implements CacheableDependencyInter $configuration, $plugin_id, $plugin_definition, - $container->get('entity.manager'), - $container->get('language_manager') + $container->get('entity_type.manager'), + $container->get('language_manager'), + $container->get('entity.repository'), + $container->get('entity_display.repository') ); } @@ -95,7 +136,7 @@ class RenderedEntity extends FieldPluginBase implements CacheableDependencyInter $form['view_mode'] = [ '#type' => 'select', - '#options' => $this->entityManager->getViewModeOptions($this->getEntityTypeId()), + '#options' => $this->entityDisplayRepository->getViewModeOptions($this->getEntityTypeId()), '#title' => $this->t('View mode'), '#default_value' => $this->options['view_mode'], ]; @@ -111,7 +152,7 @@ class RenderedEntity extends FieldPluginBase implements CacheableDependencyInter $access = $entity->access('view', NULL, TRUE); $build['#access'] = $access; if ($access->isAllowed()) { - $view_builder = $this->entityManager->getViewBuilder($this->getEntityTypeId()); + $view_builder = $this->entityTypeManager->getViewBuilder($this->getEntityTypeId()); $build += $view_builder->view($entity, $this->options['view_mode']); } } @@ -129,7 +170,7 @@ class RenderedEntity extends FieldPluginBase implements CacheableDependencyInter * {@inheritdoc} */ public function getCacheTags() { - $view_display_storage = $this->entityManager->getStorage('entity_view_display'); + $view_display_storage = $this->entityTypeManager->getStorage('entity_view_display'); $view_displays = $view_display_storage->loadMultiple($view_display_storage ->getQuery() ->condition('targetEntityType', $this->getEntityTypeId()) @@ -172,9 +213,25 @@ class RenderedEntity extends FieldPluginBase implements CacheableDependencyInter * {@inheritdoc} */ protected function getEntityManager() { + // This relies on DeprecatedServicePropertyTrait to trigger a deprecation + // message in case it is accessed. return $this->entityManager; } + /** + * {@inheritdoc} + */ + protected function getEntityTypeManager() { + return $this->entityTypeManager; + } + + /** + * {@inheritdoc} + */ + protected function getEntityRepository() { + return $this->entityRepository; + } + /** * {@inheritdoc} */ @@ -195,7 +252,7 @@ class RenderedEntity extends FieldPluginBase implements CacheableDependencyInter public function calculateDependencies() { $dependencies = parent::calculateDependencies(); - $view_mode = $this->entityManager + $view_mode = $this->entityTypeManager ->getStorage('entity_view_mode') ->load($this->getEntityTypeId() . '.' . $this->options['view_mode']); if ($view_mode) { diff --git a/core/modules/views/src/Plugin/views/row/EntityRow.php b/core/modules/views/src/Plugin/views/row/EntityRow.php index e98133af72f4..ba219f8ae838 100644 --- a/core/modules/views/src/Plugin/views/row/EntityRow.php +++ b/core/modules/views/src/Plugin/views/row/EntityRow.php @@ -2,7 +2,10 @@ namespace Drupal\views\Plugin\views\row; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; +use Drupal\Core\Entity\EntityDisplayRepositoryInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\views\Entity\Render\EntityTranslationRenderTrait; @@ -20,6 +23,12 @@ use Symfony\Component\DependencyInjection\ContainerInterface; */ class EntityRow extends RowPluginBase { use EntityTranslationRenderTrait; + use DeprecatedServicePropertyTrait; + + /** + * {@inheritdoc} + */ + protected $deprecatedProperties = ['entityManager' => 'entity.manager']; /** * The table the entity is using for storage. @@ -50,11 +59,25 @@ class EntityRow extends RowPluginBase { protected $entityType; /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ - public $entityManager; + protected $entityTypeManager; + + /** + * The entity repository service. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; + + /** + * The entity display repository. + * + * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface + */ + protected $entityDisplayRepository; /** * The language manager. @@ -64,18 +87,40 @@ class EntityRow extends RowPluginBase { protected $languageManager; /** - * {@inheritdoc} + * Constructs a new EntityRow object. * - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param array $plugin_definition + * The plugin implementation definition. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity manager. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. + * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository + * The entity repository. + * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository + * The entity display repository. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) { + public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager, EntityRepositoryInterface $entity_repository = NULL, EntityDisplayRepositoryInterface $entity_display_repository = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->entityManager = $entity_manager; + $this->entityTypeManager = $entity_type_manager; $this->languageManager = $language_manager; + + if (!$entity_repository) { + @trigger_error('Calling EntityRow::__construct() with the $entity_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_repository = \Drupal::service('entity.repository'); + } + $this->entityRepository = $entity_repository; + + if (!$entity_display_repository) { + @trigger_error('Calling EntityRow::__construct() with the $entity_display_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_display_repository = \Drupal::service('entity_display.repository'); + } + $this->entityDisplayRepository = $entity_display_repository; } /** @@ -85,7 +130,7 @@ class EntityRow extends RowPluginBase { parent::init($view, $display, $options); $this->entityTypeId = $this->definition['entity_type']; - $this->entityType = $this->entityManager->getDefinition($this->entityTypeId); + $this->entityType = $this->entityTypeManager->getDefinition($this->entityTypeId); $this->base_table = $this->entityType->getDataTable() ?: $this->entityType->getBaseTable(); $this->base_field = $this->entityType->getKey('id'); } @@ -94,7 +139,15 @@ class EntityRow extends RowPluginBase { * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { - return new static($configuration, $plugin_id, $plugin_definition, $container->get('entity.manager'), $container->get('language_manager')); + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity_type.manager'), + $container->get('language_manager'), + $container->get('entity.repository'), + $container->get('entity_display.repository') + ); } /** @@ -108,9 +161,25 @@ class EntityRow extends RowPluginBase { * {@inheritdoc} */ protected function getEntityManager() { + // This relies on DeprecatedServicePropertyTrait to trigger a deprecation + // message in case it is accessed. return $this->entityManager; } + /** + * {@inheritdoc} + */ + protected function getEntityTypeManager() { + return $this->entityTypeManager; + } + + /** + * {@inheritdoc} + */ + protected function getEntityRepository() { + return $this->entityRepository; + } + /** * {@inheritdoc} */ @@ -142,7 +211,7 @@ class EntityRow extends RowPluginBase { $form['view_mode'] = [ '#type' => 'select', - '#options' => \Drupal::entityManager()->getViewModeOptions($this->entityTypeId), + '#options' => $this->entityDisplayRepository->getViewModeOptions($this->entityTypeId), '#title' => $this->t('View mode'), '#default_value' => $this->options['view_mode'], ]; @@ -152,7 +221,7 @@ class EntityRow extends RowPluginBase { * {@inheritdoc} */ public function summaryTitle() { - $options = \Drupal::entityManager()->getViewModeOptions($this->entityTypeId); + $options = $this->entityDisplayRepository->getViewModeOptions($this->entityTypeId); if (isset($options[$this->options['view_mode']])) { return $options[$this->options['view_mode']]; } @@ -192,7 +261,7 @@ class EntityRow extends RowPluginBase { public function calculateDependencies() { $dependencies = parent::calculateDependencies(); - $view_mode = $this->entityManager + $view_mode = $this->entityTypeManager ->getStorage('entity_view_mode') ->load($this->entityTypeId . '.' . $this->options['view_mode']); if ($view_mode) { diff --git a/core/modules/views/tests/src/Unit/Plugin/area/EntityTest.php b/core/modules/views/tests/src/Unit/Plugin/area/EntityTest.php index 64e2777b0d79..fb19ac1be5c7 100644 --- a/core/modules/views/tests/src/Unit/Plugin/area/EntityTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/area/EntityTest.php @@ -2,6 +2,9 @@ namespace Drupal\Tests\views\Unit\Plugin\area; +use Drupal\Core\Entity\EntityDisplayRepositoryInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Tests\UnitTestCase; use Drupal\views\Plugin\views\area\Entity; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -20,11 +23,25 @@ class EntityTest extends UnitTestCase { protected $entityHandler; /** - * The mocked entity manager. + * The mocked entity type manager. * * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity repository. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityRepository; + + /** + * The entity display repository. + * + * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityDisplayRepository; /** * The mocked entity storage. @@ -67,7 +84,9 @@ class EntityTest extends UnitTestCase { protected function setUp() { parent::setUp(); - $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); + $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class); + $this->entityRepository = $this->createMock(EntityRepositoryInterface::class); + $this->entityDisplayRepository = $this->createMock(EntityDisplayRepositoryInterface::class); $this->entityStorage = $this->getMock('Drupal\Core\Entity\EntityStorageInterface'); $this->entityViewBuilder = $this->getMock('Drupal\Core\Entity\EntityViewBuilderInterface'); @@ -82,7 +101,7 @@ class EntityTest extends UnitTestCase { ->getMock(); $this->executable->style_plugin = $this->stylePlugin; - $this->entityHandler = new Entity([], 'entity', ['entity_type' => 'entity_test'], $this->entityManager); + $this->entityHandler = new Entity([], 'entity', ['entity_type' => 'entity_test'], $this->entityTypeManager, $this->entityRepository, $this->entityDisplayRepository); $this->display->expects($this->any()) ->method('getPlugin') @@ -107,11 +126,11 @@ class EntityTest extends UnitTestCase { * Ensures that the entity manager returns an entity storage. */ protected function setupEntityManager() { - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('getStorage') ->with('entity_test') ->willReturn($this->entityStorage); - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('getViewBuilder') ->with('entity_test') ->willReturn($this->entityViewBuilder); @@ -151,7 +170,7 @@ class EntityTest extends UnitTestCase { $this->entityStorage->expects($this->never()) ->method('loadByProperties'); - $this->entityManager->expects($this->any()) + $this->entityRepository->expects($this->any()) ->method('loadEntityByConfigTarget') ->willReturn($entity); $this->entityViewBuilder->expects($this->once()) @@ -225,7 +244,7 @@ class EntityTest extends UnitTestCase { $this->entityStorage->expects($this->never()) ->method('load'); - $this->entityManager->expects($this->once()) + $this->entityRepository->expects($this->once()) ->method('loadEntityByConfigTarget') ->willReturn($entity); $this->entityViewBuilder->expects($this->once()) @@ -269,13 +288,13 @@ class EntityTest extends UnitTestCase { ->willReturn('entity_test:test-bundle:1d52762e-b9d8-4177-908f-572d1a5845a4'); $this->entityStorage->expects($this->never()) ->method('load'); - $this->entityManager->expects($this->once()) + $this->entityRepository->expects($this->once()) ->method('loadEntityByConfigTarget') ->willReturn($entity); $entity_type->expects($this->once()) ->method('getConfigDependencyKey') ->willReturn('content'); - $this->entityManager->expects($this->once()) + $this->entityTypeManager->expects($this->once()) ->method('getDefinition') ->willReturn($entity_type); @@ -298,7 +317,7 @@ class EntityTest extends UnitTestCase { $entity->expects($this->once()) ->method('getConfigDependencyName') ->willReturn('entity_test:test-bundle:1d52762e-b9d8-4177-908f-572d1a5845a4'); - $this->entityManager->expects($this->once()) + $this->entityRepository->expects($this->once()) ->method('loadEntityByConfigTarget') ->willReturn($entity); $this->entityStorage->expects($this->never()) @@ -306,7 +325,7 @@ class EntityTest extends UnitTestCase { $entity_type->expects($this->once()) ->method('getConfigDependencyKey') ->willReturn('content'); - $this->entityManager->expects($this->once()) + $this->entityTypeManager->expects($this->once()) ->method('getDefinition') ->willReturn($entity_type); diff --git a/core/modules/views/tests/src/Unit/Plugin/field/FieldTest.php b/core/modules/views/tests/src/Unit/Plugin/field/FieldTest.php index b12b49ce417b..89a73e547f6d 100644 --- a/core/modules/views/tests/src/Unit/Plugin/field/FieldTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/field/FieldTest.php @@ -7,6 +7,9 @@ namespace Drupal\Tests\views\Unit\Plugin\field; +use Drupal\Core\Entity\EntityFieldManagerInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Tests\UnitTestCase; use Drupal\Tests\views\Unit\Plugin\HandlerTestTrait; @@ -23,11 +26,25 @@ class FieldTest extends UnitTestCase { use HandlerTestTrait; /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity field manager. + * + * @var \Drupal\Core\Entity\EntityFieldManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityFieldManager; + + /** + * The entity repository. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityRepository; /** * The mocked formatter plugin manager. @@ -70,7 +87,9 @@ class FieldTest extends UnitTestCase { protected function setUp() { parent::setUp(); - $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); + $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class); + $this->entityFieldManager = $this->createMock(EntityFieldManagerInterface::class); + $this->entityRepository = $this->createMock(EntityRepositoryInterface::class); $this->formatterPluginManager = $this->getMockBuilder('Drupal\Core\Field\FormatterPluginManager') ->disableOriginalConstructor() ->getMock(); @@ -107,7 +126,7 @@ class FieldTest extends UnitTestCase { // provides it. 'entity field' => 'title', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $this->assertEquals('title', $handler->definition['field_name']); } @@ -120,12 +139,12 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'title', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); // Setup the entity manager to allow fetching the storage definitions. $title_storage = $this->getBaseFieldStorage(); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityFieldManager->expects($this->atLeastOnce()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -149,12 +168,12 @@ class FieldTest extends UnitTestCase { 'default_formatter' => 'test_example', 'default_formatter_settings' => ['link_to_entity' => TRUE], ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); // Setup the entity manager to allow fetching the storage definitions. $title_storage = $this->getBaseFieldStorage(); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityFieldManager->expects($this->atLeastOnce()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -176,12 +195,12 @@ class FieldTest extends UnitTestCase { 'field_name' => 'title', 'default_formatter_settings' => ['link_to_entity' => TRUE], ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); // Setup the entity manager to allow fetching the storage definitions. $title_storage = $this->getBaseFieldStorage(); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityFieldManager->expects($this->atLeastOnce()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -202,10 +221,10 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'title', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $title_storage = $this->getBaseFieldStorage(); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityFieldManager->expects($this->atLeastOnce()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -224,10 +243,10 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'body', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $body_storage = $this->getConfigFieldStorage(); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityFieldManager->expects($this->atLeastOnce()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -250,7 +269,7 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'title', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $handler->view = $this->executable; $handler->setViewsData($this->viewsData); @@ -267,13 +286,13 @@ class FieldTest extends UnitTestCase { ]); $access_control_handler = $this->getMock('Drupal\Core\Entity\EntityAccessControlHandlerInterface'); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityTypeManager->expects($this->atLeastOnce()) ->method('getAccessControlHandler') ->with('test_entity') ->willReturn($access_control_handler); $title_storage = $this->getBaseFieldStorage(); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityFieldManager->expects($this->atLeastOnce()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -301,10 +320,10 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'title', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $handler->view = $this->executable; - $this->entityManager->expects($this->never()) + $this->entityFieldManager->expects($this->never()) ->method('getFieldStorageDefinitions'); $handler->clickSort($order); @@ -323,11 +342,11 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'title', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $handler->view = $this->executable; $field_storage = $this->getBaseFieldStorage(); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityFieldManager->expects($this->atLeastOnce()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -344,7 +363,7 @@ class FieldTest extends UnitTestCase { $entity_storage->expects($this->atLeastOnce()) ->method('getTableMapping') ->willReturn($table_mapping); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityTypeManager->expects($this->atLeastOnce()) ->method('getStorage') ->with('test_entity') ->willReturn($entity_storage); @@ -383,11 +402,11 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'body', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $handler->view = $this->executable; $field_storage = $this->getConfigFieldStorage(); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityFieldManager->expects($this->atLeastOnce()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -404,7 +423,7 @@ class FieldTest extends UnitTestCase { $entity_storage->expects($this->atLeastOnce()) ->method('getTableMapping') ->willReturn($table_mapping); - $this->entityManager->expects($this->atLeastOnce()) + $this->entityTypeManager->expects($this->atLeastOnce()) ->method('getStorage') ->with('test_entity') ->willReturn($entity_storage); @@ -438,14 +457,14 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'title', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $handler->view = $this->executable; $handler->view->field = [$handler]; $this->setupLanguageRenderer($handler, $definition); $field_storage = $this->getBaseFieldStorage(); - $this->entityManager->expects($this->any()) + $this->entityFieldManager->expects($this->any()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -462,7 +481,7 @@ class FieldTest extends UnitTestCase { $entity_storage->expects($this->any()) ->method('getTableMapping') ->willReturn($table_mapping); - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('getStorage') ->with('test_entity') ->willReturn($entity_storage); @@ -500,14 +519,14 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'body', ]; - $handler = new EntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new EntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $handler->view = $this->executable; $handler->view->field = [$handler]; $this->setupLanguageRenderer($handler, $definition); $field_storage = $this->getConfigFieldStorage(); - $this->entityManager->expects($this->any()) + $this->entityFieldManager->expects($this->any()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -524,7 +543,7 @@ class FieldTest extends UnitTestCase { $entity_storage->expects($this->any()) ->method('getTableMapping') ->willReturn($table_mapping); - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('getStorage') ->with('test_entity') ->willReturn($entity_storage); @@ -564,7 +583,7 @@ class FieldTest extends UnitTestCase { 'entity_type' => 'test_entity', 'field_name' => 'integer', ]; - $handler = new FieldTestEntityField([], 'field', $definition, $this->entityManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer); + $handler = new FieldTestEntityField([], 'field', $definition, $this->entityTypeManager, $this->formatterPluginManager, $this->fieldTypePluginManager, $this->languageManager, $this->renderer, $this->entityRepository, $this->entityFieldManager); $handler->view = $this->executable; $handler->view->field = [$handler]; @@ -575,7 +594,7 @@ class FieldTest extends UnitTestCase { ->method('getCardinality') ->willReturn(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED); - $this->entityManager->expects($this->any()) + $this->entityFieldManager->expects($this->any()) ->method('getFieldStorageDefinitions') ->with('test_entity') ->willReturn([ @@ -592,7 +611,7 @@ class FieldTest extends UnitTestCase { $entity_storage->expects($this->any()) ->method('getTableMapping') ->willReturn($table_mapping); - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('getStorage') ->with('test_entity') ->willReturn($entity_storage); @@ -717,7 +736,7 @@ class FieldTest extends UnitTestCase { ->method('id') ->willReturn($definition['entity_type']); - $this->entityManager->expects($this->any()) + $this->entityTypeManager->expects($this->any()) ->method('getDefinition') ->willReturn($entity_type); } diff --git a/core/modules/views/tests/src/Unit/Plugin/views/field/EntityOperationsUnitTest.php b/core/modules/views/tests/src/Unit/Plugin/views/field/EntityOperationsUnitTest.php index 022f5320dbc9..d0e0cfbcc6e8 100644 --- a/core/modules/views/tests/src/Unit/Plugin/views/field/EntityOperationsUnitTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/views/field/EntityOperationsUnitTest.php @@ -2,6 +2,8 @@ namespace Drupal\Tests\views\Unit\Plugin\views\field; +use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Tests\UnitTestCase; use Drupal\views\Plugin\views\field\EntityOperations; use Drupal\views\ResultRow; @@ -13,11 +15,18 @@ use Drupal\views\ResultRow; class EntityOperationsUnitTest extends UnitTestCase { /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $entityManager; + protected $entityTypeManager; + + /** + * The entity repository. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $entityRepository; /** * The language manager. @@ -39,7 +48,8 @@ class EntityOperationsUnitTest extends UnitTestCase { * @covers ::__construct */ protected function setUp() { - $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface'); + $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class); + $this->entityRepository = $this->createMock(EntityRepositoryInterface::class); $this->languageManager = $this->getMock('\Drupal\Core\Language\LanguageManagerInterface'); $configuration = []; @@ -47,7 +57,7 @@ class EntityOperationsUnitTest extends UnitTestCase { $plugin_definition = [ 'title' => $this->randomMachineName(), ]; - $this->plugin = new EntityOperations($configuration, $plugin_id, $plugin_definition, $this->entityManager, $this->languageManager); + $this->plugin = new EntityOperations($configuration, $plugin_id, $plugin_definition, $this->entityTypeManager, $this->languageManager, $this->entityRepository); $redirect_service = $this->getMock('Drupal\Core\Routing\RedirectDestinationInterface'); $redirect_service->expects($this->any()) @@ -104,7 +114,7 @@ class EntityOperationsUnitTest extends UnitTestCase { ->with($entity) ->will($this->returnValue($operations)); - $this->entityManager->expects($this->once()) + $this->entityTypeManager->expects($this->once()) ->method('getListBuilder') ->with($entity_type_id) ->will($this->returnValue($list_builder)); @@ -146,7 +156,7 @@ class EntityOperationsUnitTest extends UnitTestCase { ->with($entity) ->will($this->returnValue($operations)); - $this->entityManager->expects($this->once()) + $this->entityTypeManager->expects($this->once()) ->method('getListBuilder') ->with($entity_type_id) ->will($this->returnValue($list_builder)); diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityUnitTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityUnitTest.php index 154d2383b4f7..1fce8a498dd7 100644 --- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityUnitTest.php +++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityUnitTest.php @@ -73,7 +73,7 @@ class ConfigEntityUnitTest extends KernelTestBase { $entity->save(); // Ensure that the configuration entity can be loaded by UUID. - $entity_loaded_by_uuid = \Drupal::entityManager()->loadEntityByUuid($entity_type->id(), $entity->uuid()); + $entity_loaded_by_uuid = \Drupal::service('entity.repository')->loadEntityByUuid($entity_type->id(), $entity->uuid()); if (!$entity_loaded_by_uuid) { $this->fail(sprintf("Failed to load '%s' entity ID '%s' by UUID '%s'.", $entity_type->id(), $entity->id(), $entity->uuid())); } diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php index 4ef59db08ee2..886c3c0f52a0 100644 --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php @@ -632,21 +632,21 @@ class EntityTranslationTest extends EntityLanguageTestBase { // Check that retrieving the current translation works as expected. $entity = $this->reloadEntity($entity); - $translation = $this->entityManager->getTranslationFromContext($entity, $langcode2); + $translation = \Drupal::service('entity.repository')->getTranslationFromContext($entity, $langcode2); $this->assertEqual($translation->language()->getId(), $default_langcode, 'The current translation language matches the expected one.'); // Check that language fallback respects language weight by default. $language = ConfigurableLanguage::load($languages[$langcode]->getId()); $language->set('weight', -1); $language->save(); - $translation = $this->entityManager->getTranslationFromContext($entity, $langcode2); + $translation = \Drupal::service('entity.repository')->getTranslationFromContext($entity, $langcode2); $this->assertEqual($translation->language()->getId(), $langcode, 'The current translation language matches the expected one.'); // Check that the current translation is properly returned. - $translation = $this->entityManager->getTranslationFromContext($entity); + $translation = \Drupal::service('entity.repository')->getTranslationFromContext($entity); $this->assertEqual($langcode, $translation->language()->getId(), 'The current translation language matches the topmost language fallback candidate.'); $entity->addTranslation($current_langcode, $values[$current_langcode]); - $translation = $this->entityManager->getTranslationFromContext($entity); + $translation = \Drupal::service('entity.repository')->getTranslationFromContext($entity); $this->assertEqual($current_langcode, $translation->language()->getId(), 'The current translation language matches the current language.'); // Check that if the entity has no translation no fallback is applied. @@ -655,7 +655,7 @@ class EntityTranslationTest extends EntityLanguageTestBase { $controller = $this->entityManager->getViewBuilder($entity_type); $entity2_build = $controller->view($entity2); $entity2_output = (string) $renderer->renderRoot($entity2_build); - $translation = $this->entityManager->getTranslationFromContext($entity2, $default_langcode); + $translation = \Drupal::service('entity.repository')->getTranslationFromContext($entity2, $default_langcode); $translation_build = $controller->view($translation); $translation_output = (string) $renderer->renderRoot($translation_build); $this->assertSame($entity2_output, $translation_output, 'When the entity has no translation no fallback is applied.'); diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php index a3466a4967e8..abf8905fdf92 100644 --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php @@ -72,8 +72,8 @@ class EntityUUIDTest extends EntityKernelTestBase { $entity_loaded = $storage->load($entity->id()); $this->assertIdentical($entity_loaded->uuid(), $uuid); - // Verify that \Drupal::entityManager()->loadEntityByUuid() loads the same entity. - $entity_loaded_by_uuid = \Drupal::entityManager()->loadEntityByUuid($entity_type, $uuid, TRUE); + // Verify that \Drupal::service('entity.repository')->loadEntityByUuid() loads the same entity. + $entity_loaded_by_uuid = \Drupal::service('entity.repository')->loadEntityByUuid($entity_type, $uuid, TRUE); $this->assertIdentical($entity_loaded_by_uuid->uuid(), $uuid); $this->assertEqual($entity_loaded_by_uuid->id(), $entity_loaded->id()); diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php index 71478a8751e5..591023c45ad8 100644 --- a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php @@ -3,7 +3,9 @@ namespace Drupal\Tests\Core\Entity; use Drupal\Core\DependencyInjection\ContainerBuilder; +use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Entity\EntityFieldManagerInterface; +use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityManager; use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; @@ -52,6 +54,13 @@ class EntityManagerTest extends UnitTestCase { */ protected $entityFieldManager; + /** + * The entity display repository. + * + * @var \Drupal\Core\Entity\EntityRepositoryInterface|\Prophecy\Prophecy\ProphecyInterface + */ + protected $entityRepository; + /** * {@inheritdoc} */ @@ -62,12 +71,14 @@ class EntityManagerTest extends UnitTestCase { $this->entityTypeRepository = $this->prophesize(EntityTypeRepositoryInterface::class); $this->entityTypeBundleInfo = $this->prophesize(EntityTypeBundleInfoInterface::class); $this->entityFieldManager = $this->prophesize(EntityFieldManagerInterface::class); + $this->entityRepository = $this->prophesize(EntityRepositoryInterface::class); $container = new ContainerBuilder(); $container->set('entity_type.manager', $this->entityTypeManager->reveal()); $container->set('entity_type.repository', $this->entityTypeRepository->reveal()); $container->set('entity_type.bundle.info', $this->entityTypeBundleInfo->reveal()); $container->set('entity_field.manager', $this->entityFieldManager->reveal()); + $container->set('entity.repository', $this->entityRepository->reveal()); $this->entityManager = new EntityManager(); $this->entityManager->setContainer($container); @@ -89,4 +100,46 @@ class EntityManagerTest extends UnitTestCase { $this->entityManager->clearCachedDefinitions(); } + /** + * Tests the getTranslationFromContext() method. + * + * @covers ::getTranslationFromContext + * + * @expectedDeprecation EntityManagerInterface::getTranslationFromContext() is deprecated in 8.0.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityRepository::getTranslationFromContext() instead. See https://www.drupal.org/node/2549139. + */ + 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']); + } + + /** + * Tests the loadEntityByUuid() method. + * + * @covers ::loadEntityByUuid + * + * @expectedDeprecation EntityManagerInterface::loadEntityByUuid() is deprecated in 8.0.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityRepository::loadEntityByUuid() instead. See https://www.drupal.org/node/2549139. + */ + public function testLoadEntityByUuid() { + $entity = $this->prophesize(EntityInterface::class); + $this->entityRepository->loadEntityByUuid('entity_test', '9a9a3d06-5d27-493b-965d-7f9cb0115817')->shouldBeCalled()->willReturn($entity->reveal()); + + $this->assertInstanceOf(EntityInterface::class, $this->entityManager->loadEntityByUuid('entity_test', '9a9a3d06-5d27-493b-965d-7f9cb0115817')); + } + + /** + * Tests the loadEntityByConfigTarget() method. + * + * @covers ::loadEntityByConfigTarget + * + * @expectedDeprecation EntityManagerInterface::loadEntityByConfigTarget() is deprecated in 8.0.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityRepository::loadEntityByConfigTarget() instead. See https://www.drupal.org/node/2549139. + */ + public function testLoadEntityByConfigTarget() { + $entity = $this->prophesize(EntityInterface::class); + $this->entityRepository->loadEntityByConfigTarget('config_test', 'test')->shouldBeCalled()->willReturn($entity->reveal()); + + $this->assertInstanceOf(EntityInterface::class, $this->entityManager->loadEntityByConfigTarget('config_test', 'test')); + } + }