Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
71.43% |
5 / 7 |
CRAP | |
72.00% |
18 / 25 |
| CategorizingPluginManagerTrait | |
0.00% |
0 / 1 |
|
71.43% |
5 / 7 |
19.94 | |
72.00% |
18 / 25 |
| processDefinitionCategory | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| getProviderName | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| getModuleHandler | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
| getCategories | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| anonymous function | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| getSortedDefinitions | |
100.00% |
1 / 1 |
3 | |
100.00% |
1 / 1 |
|||
| getGroupedDefinitions | |
100.00% |
1 / 1 |
3 | |
100.00% |
5 / 5 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Plugin\CategorizingPluginManagerTrait. | |
| */ | |
| namespace Drupal\Core\Plugin; | |
| use Drupal\Core\StringTranslation\StringTranslationTrait; | |
| /** | |
| * Provides a trait for the CategorizingPluginManagerInterface. | |
| * | |
| * The trait provides methods for categorizing plugin definitions based on a | |
| * 'category' key. The plugin manager should make sure there is a default | |
| * category. For that the trait's processDefinitionCategory() method can be | |
| * invoked from the processDefinition() method. | |
| * | |
| * @see \Drupal\Component\Plugin\CategorizingPluginManagerInterface | |
| */ | |
| trait CategorizingPluginManagerTrait { | |
| use StringTranslationTrait; | |
| /** | |
| * Processes a plugin definition to ensure there is a category. | |
| * | |
| * If the definition lacks a category, it defaults to the providing module. | |
| * | |
| * @param array $definition | |
| * The plugin definition. | |
| */ | |
| protected function processDefinitionCategory(&$definition) { | |
| // Ensure that every plugin has a category. | |
| if (empty($definition['category'])) { | |
| // Default to the human readable module name if the provider is a module; | |
| // otherwise the provider machine name is used. | |
| $definition['category'] = $this->getProviderName($definition['provider']); | |
| } | |
| } | |
| /** | |
| * Gets the name of a provider. | |
| * | |
| * @param string $provider | |
| * The machine name of a plugin provider. | |
| * | |
| * @return string | |
| * The human-readable module name if it exists, otherwise the | |
| * machine-readable name passed. | |
| */ | |
| protected function getProviderName($provider) { | |
| $list = $this->getModuleHandler()->getModuleList(); | |
| // If the module exists, return its human-readable name. | |
| if (isset($list[$provider])) { | |
| return $this->getModuleHandler()->getName($provider); | |
| } | |
| // Otherwise, return the machine name. | |
| return $provider; | |
| } | |
| /** | |
| * Returns the module handler used. | |
| * | |
| * @return \Drupal\Core\Extension\ModuleHandlerInterface | |
| * The module handler. | |
| */ | |
| public function getModuleHandler() { | |
| // If the class has an injected module handler, use it. Otherwise fall back | |
| // to fetch it from the service container. | |
| if (isset($this->moduleHandler)) { | |
| return $this->moduleHandler; | |
| } | |
| return \Drupal::moduleHandler(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getCategories() { | |
| /** @var \Drupal\Core\Plugin\CategorizingPluginManagerTrait|\Drupal\Component\Plugin\PluginManagerInterface $this */ | |
| // Fetch all categories from definitions and remove duplicates. | |
| $categories = array_unique(array_values(array_map(function ($definition) { | |
| return $definition['category']; | |
| }, $this->getDefinitions()))); | |
| natcasesort($categories); | |
| return $categories; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getSortedDefinitions(array $definitions = NULL, $label_key = 'label') { | |
| // Sort the plugins first by category, then by label. | |
| /** @var \Drupal\Core\Plugin\CategorizingPluginManagerTrait|\Drupal\Component\Plugin\PluginManagerInterface $this */ | |
| $definitions = isset($definitions) ? $definitions : $this->getDefinitions(); | |
| uasort($definitions, function ($a, $b) use ($label_key) { | |
| if ($a['category'] != $b['category']) { | |
| return strnatcasecmp($a['category'], $b['category']); | |
| } | |
| return strnatcasecmp($a[$label_key], $b[$label_key]); | |
| }); | |
| return $definitions; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getGroupedDefinitions(array $definitions = NULL, $label_key = 'label') { | |
| /** @var \Drupal\Core\Plugin\CategorizingPluginManagerTrait|\Drupal\Component\Plugin\PluginManagerInterface $this */ | |
| $definitions = $this->getSortedDefinitions(isset($definitions) ? $definitions : $this->getDefinitions(), $label_key); | |
| $grouped_definitions = array(); | |
| foreach ($definitions as $id => $definition) { | |
| $grouped_definitions[(string) $definition['category']][$id] = $definition; | |
| } | |
| return $grouped_definitions; | |
| } | |
| } |