From 50d7f643c2a837c10c7d8cf829c4d725c03b9011 Mon Sep 17 00:00:00 2001 From: paul121 Date: Tue, 26 Oct 2021 17:18:04 -0700 Subject: [PATCH] Use dependency injection in views argument plugins. --- .../src/Plugin/views/argument/AssetGroup.php | 54 +++++++++++++++++- .../Plugin/views/argument/AssetLocation.php | 55 ++++++++++++++++++- 2 files changed, 105 insertions(+), 4 deletions(-) diff --git a/modules/asset/group/src/Plugin/views/argument/AssetGroup.php b/modules/asset/group/src/Plugin/views/argument/AssetGroup.php index de571560..9fcfe24d 100644 --- a/modules/asset/group/src/Plugin/views/argument/AssetGroup.php +++ b/modules/asset/group/src/Plugin/views/argument/AssetGroup.php @@ -2,7 +2,10 @@ namespace Drupal\farm_group\Plugin\views\argument; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\farm_group\GroupMembershipInterface; use Drupal\views\Plugin\views\argument\ArgumentPluginBase; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * An argument for filtering assets by their current group. @@ -13,6 +16,53 @@ use Drupal\views\Plugin\views\argument\ArgumentPluginBase; */ class AssetGroup extends ArgumentPluginBase { + /** + * The entity type manager service. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The group membership service. + * + * @var \Drupal\farm_group\GroupMembershipInterface + */ + protected $groupMembership; + + /** + * Constructs an AssetGroup 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\farm_group\GroupMembershipInterface $group_membership + * The group membership service. + */ + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, GroupMembershipInterface $group_membership) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + $this->entityTypeManager = $entity_type_manager; + $this->groupMembership = $group_membership; + } + + /** + * {@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('group.membership'), + ); + } + /** * {@inheritdoc} * @@ -31,8 +81,8 @@ class AssetGroup extends ArgumentPluginBase { // 3. It keeps this Views argument handler's query modifications very // simple. It only needs the condition: "WHERE asset.id IN (:asset_ids)". // See https://www.drupal.org/project/farm/issues/3217184 for more info. - $group = \Drupal::entityTypeManager()->getStorage('asset')->load($this->argument); - $assets = \Drupal::service('group.membership')->getGroupMembers([$group]); + $group = $this->entityTypeManager->getStorage('asset')->load($this->argument); + $assets = $this->groupMembership->getGroupMembers([$group]); $asset_ids = []; foreach ($assets as $asset) { $asset_ids[] = $asset->id(); diff --git a/modules/core/location/src/Plugin/views/argument/AssetLocation.php b/modules/core/location/src/Plugin/views/argument/AssetLocation.php index a7c0ebfb..ccb91627 100644 --- a/modules/core/location/src/Plugin/views/argument/AssetLocation.php +++ b/modules/core/location/src/Plugin/views/argument/AssetLocation.php @@ -2,7 +2,10 @@ namespace Drupal\farm_location\Plugin\views\argument; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\farm_location\AssetLocationInterface; use Drupal\views\Plugin\views\argument\ArgumentPluginBase; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * An argument for filtering assets by their current location. @@ -13,6 +16,53 @@ use Drupal\views\Plugin\views\argument\ArgumentPluginBase; */ class AssetLocation extends ArgumentPluginBase { + /** + * The entity type manager service. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The asset location service. + * + * @var \Drupal\farm_location\AssetLocationInterface + */ + protected $assetLocation; + + /** + * Constructs an AssetLocation 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\farm_location\AssetLocationInterface $asset_location + * The asset location service. + */ + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, AssetLocationInterface $asset_location) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + $this->entityTypeManager = $entity_type_manager; + $this->assetLocation = $asset_location; + } + + /** + * {@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('asset.location'), + ); + } + /** * {@inheritdoc} */ @@ -29,8 +79,9 @@ class AssetLocation extends ArgumentPluginBase { // 3. It keeps this Views argument handler's query modifications very // simple. It only needs the condition: "WHERE asset.id IN (:asset_ids)". // See https://www.drupal.org/project/farm/issues/3217168 for more info. - $location = \Drupal::entityTypeManager()->getStorage('asset')->load($this->argument); - $assets = \Drupal::service('asset.location')->getAssetsByLocation($location); + /** @var \Drupal\asset\Entity\AssetInterface $location */ + $location = $this->entityTypeManager->getStorage('asset')->load($this->argument); + $assets = $this->assetLocation->getAssetsByLocation($location); $asset_ids = []; foreach ($assets as $asset) { $asset_ids[] = $asset->id();