Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 45 |
| SelectionPluginManager | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
156 | |
0.00% |
0 / 45 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| getInstance | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 15 |
|||
| getPluginId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| getSelectionGroups | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 10 |
|||
| getSelectionHandler | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
|||
| getFallbackPluginId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManager. | |
| */ | |
| namespace Drupal\Core\Entity\EntityReferenceSelection; | |
| use Drupal\Component\Plugin\FallbackPluginManagerInterface; | |
| use Drupal\Core\Cache\CacheBackendInterface; | |
| use Drupal\Core\Entity\EntityInterface; | |
| use Drupal\Core\Field\FieldDefinitionInterface; | |
| use Drupal\Core\Extension\ModuleHandlerInterface; | |
| use Drupal\Core\Plugin\DefaultPluginManager; | |
| /** | |
| * Plugin type manager for Entity Reference Selection plugins. | |
| * | |
| * @see \Drupal\Core\Entity\Annotation\EntityReferenceSelection | |
| * @see \Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface | |
| * @see plugin_api | |
| */ | |
| class SelectionPluginManager extends DefaultPluginManager implements SelectionPluginManagerInterface, FallbackPluginManagerInterface { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { | |
| $this->alterInfo('entity_reference_selection'); | |
| $this->setCacheBackend($cache_backend, 'entity_reference_selection_plugins'); | |
| parent::__construct('Plugin/EntityReferenceSelection', $namespaces, $module_handler, 'Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface', 'Drupal\Core\Entity\Annotation\EntityReferenceSelection'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getInstance(array $options) { | |
| if (!isset($options['target_type'])) { | |
| throw new \InvalidArgumentException("Missing required 'target_type' property for a EntityReferenceSelection plugin."); | |
| } | |
| // Initialize default options. | |
| $options += array( | |
| 'handler' => $this->getPluginId($options['target_type'], 'default'), | |
| 'handler_settings' => array(), | |
| ); | |
| // A specific selection plugin ID was already specified. | |
| if (strpos($options['handler'], ':') !== FALSE) { | |
| $plugin_id = $options['handler']; | |
| } | |
| // Only a selection group name was specified. | |
| else { | |
| $plugin_id = $this->getPluginId($options['target_type'], $options['handler']); | |
| } | |
| return $this->createInstance($plugin_id, $options); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getPluginId($target_type, $base_plugin_id) { | |
| // Get all available selection plugins for this entity type. | |
| $selection_handler_groups = $this->getSelectionGroups($target_type); | |
| // Sort the selection plugins by weight and select the best match. | |
| uasort($selection_handler_groups[$base_plugin_id], array('Drupal\Component\Utility\SortArray', 'sortByWeightElement')); | |
| end($selection_handler_groups[$base_plugin_id]); | |
| $plugin_id = key($selection_handler_groups[$base_plugin_id]); | |
| return $plugin_id; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getSelectionGroups($entity_type_id) { | |
| $plugins = array(); | |
| $definitions = $this->getDefinitions(); | |
| // Do not display the 'broken' plugin in the UI. | |
| unset($definitions['broken']); | |
| foreach ($definitions as $plugin_id => $plugin) { | |
| if (empty($plugin['entity_types']) || in_array($entity_type_id, $plugin['entity_types'])) { | |
| $plugins[$plugin['group']][$plugin_id] = $plugin; | |
| } | |
| } | |
| return $plugins; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getSelectionHandler(FieldDefinitionInterface $field_definition, EntityInterface $entity = NULL) { | |
| $options = array( | |
| 'target_type' => $field_definition->getFieldStorageDefinition()->getSetting('target_type'), | |
| 'handler' => $field_definition->getSetting('handler'), | |
| 'handler_settings' => $field_definition->getSetting('handler_settings') ?: array(), | |
| 'entity' => $entity, | |
| ); | |
| return $this->getInstance($options); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFallbackPluginId($plugin_id, array $configuration = array()) { | |
| return 'broken'; | |
| } | |
| } |