Mark Jordan
5 years ago
committed by
GitHub
7 changed files with 262 additions and 23 deletions
@ -0,0 +1,125 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace Drupal\islandora\Plugin\EntityReferenceSelection; |
||||||
|
|
||||||
|
use Drupal\taxonomy\Plugin\EntityReferenceSelection\TermSelection; |
||||||
|
use Drupal\islandora\IslandoraUtils; |
||||||
|
use Drupal\Core\Entity\EntityFieldManagerInterface; |
||||||
|
use Drupal\Core\Entity\EntityRepositoryInterface; |
||||||
|
use Drupal\Core\Entity\EntityTypeBundleInfoInterface; |
||||||
|
use Drupal\Core\Entity\EntityTypeManagerInterface; |
||||||
|
use Drupal\Core\Extension\ModuleHandlerInterface; |
||||||
|
use Drupal\Core\Session\AccountInterface; |
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface; |
||||||
|
|
||||||
|
/** |
||||||
|
* Filters by looking for entities with Authority Links or External Uris. |
||||||
|
* |
||||||
|
* @EntityReferenceSelection( |
||||||
|
* id = "islandora:external_uri", |
||||||
|
* label = @Translation("Taxonomy Term with external URI selection"), |
||||||
|
* entity_types = {"taxonomy_term"}, |
||||||
|
* group = "islandora", |
||||||
|
* weight = 1 |
||||||
|
* ) |
||||||
|
*/ |
||||||
|
class ExternalUriSelection extends TermSelection { |
||||||
|
|
||||||
|
/** |
||||||
|
* Islandora utils. |
||||||
|
* |
||||||
|
* @var \Drupal\islandora\IslandoraUtils |
||||||
|
*/ |
||||||
|
protected $utils; |
||||||
|
|
||||||
|
/** |
||||||
|
* Constructs a new ExternalUriSelection 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. |
||||||
|
* @param \Drupal\islandora\IslandoraUtils $utils |
||||||
|
* Islandora utils. |
||||||
|
*/ |
||||||
|
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, |
||||||
|
IslandoraUtils $utils |
||||||
|
) { |
||||||
|
parent::__construct( |
||||||
|
$configuration, |
||||||
|
$plugin_id, |
||||||
|
$plugin_definition, |
||||||
|
$entity_type_manager, |
||||||
|
$module_handler, |
||||||
|
$current_user, |
||||||
|
$entity_field_manager, |
||||||
|
$entity_type_bundle_info, |
||||||
|
$entity_repository |
||||||
|
); |
||||||
|
$this->utils = $utils; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* {@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'), |
||||||
|
$container->get('entity_field.manager'), |
||||||
|
$container->get('entity_type.bundle.info'), |
||||||
|
$container->get('entity.repository'), |
||||||
|
$container->get('islandora.utils') |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* {@inheritdoc} |
||||||
|
*/ |
||||||
|
public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) { |
||||||
|
$options = parent::getReferenceableEntities($match, $match_operator, $limit); |
||||||
|
|
||||||
|
foreach (array_keys($options) as $vid) { |
||||||
|
foreach (array_keys($options[$vid]) as $tid) { |
||||||
|
$term = $this->entityTypeManager->getStorage('taxonomy_term')->load($tid); |
||||||
|
$uri = $this->utils->getUriForTerm($term); |
||||||
|
if (empty($uri)) { |
||||||
|
unset($options[$vid][$tid]); |
||||||
|
} |
||||||
|
} |
||||||
|
if (empty($options[$vid])) { |
||||||
|
unset($options[$vid]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return $options; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue