trait CategorizingPluginManagerTrait
Same name in other branches
- 8.9.x core/lib/Drupal/Core/Plugin/CategorizingPluginManagerTrait.php \Drupal\Core\Plugin\CategorizingPluginManagerTrait
- 10 core/lib/Drupal/Core/Plugin/CategorizingPluginManagerTrait.php \Drupal\Core\Plugin\CategorizingPluginManagerTrait
- 11.x core/lib/Drupal/Core/Plugin/CategorizingPluginManagerTrait.php \Drupal\Core\Plugin\CategorizingPluginManagerTrait
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.
Hierarchy
- trait \Drupal\Core\Plugin\CategorizingPluginManagerTrait uses \Drupal\Core\StringTranslation\StringTranslationTrait
See also
\Drupal\Component\Plugin\CategorizingPluginManagerInterface
5 files declare their use of CategorizingPluginManagerTrait
- ActionManager.php in core/
lib/ Drupal/ Core/ Action/ ActionManager.php - BlockManager.php in core/
lib/ Drupal/ Core/ Block/ BlockManager.php - CategorizingPluginManagerTraitTest.php in core/
tests/ Drupal/ Tests/ Core/ Plugin/ CategorizingPluginManagerTraitTest.php - Contains \Drupal\Tests\Core\Plugin\CategorizingPluginManagerTraitTest.
- ConditionManager.php in core/
lib/ Drupal/ Core/ Condition/ ConditionManager.php - FieldTypePluginManager.php in core/
lib/ Drupal/ Core/ Field/ FieldTypePluginManager.php
File
-
core/
lib/ Drupal/ Core/ Plugin/ CategorizingPluginManagerTrait.php, line 17
Namespace
Drupal\Core\PluginView source
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 = $definitions ?? $this->getDefinitions();
uasort($definitions, function ($a, $b) use ($label_key) {
if ((string) $a['category'] != (string) $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($definitions ?? $this->getDefinitions(), $label_key);
$grouped_definitions = [];
foreach ($definitions as $id => $definition) {
$grouped_definitions[(string) $definition['category']][$id] = $definition;
}
return $grouped_definitions;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overrides |
---|---|---|---|---|
CategorizingPluginManagerTrait::getCategories | public | function | ||
CategorizingPluginManagerTrait::getGroupedDefinitions | public | function | ||
CategorizingPluginManagerTrait::getModuleHandler | public | function | Returns the module handler used. | |
CategorizingPluginManagerTrait::getProviderName | protected | function | Gets the name of a provider. | |
CategorizingPluginManagerTrait::getSortedDefinitions | public | function | ||
CategorizingPluginManagerTrait::processDefinitionCategory | protected | function | Processes a plugin definition to ensure there is a category. | |
StringTranslationTrait::$stringTranslation | protected | property | The string translation service. | 3 |
StringTranslationTrait::formatPlural | protected | function | Formats a string containing a count of items. | |
StringTranslationTrait::getNumberOfPlurals | protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait::getStringTranslation | protected | function | Gets the string translation service. | |
StringTranslationTrait::setStringTranslation | public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait::t | protected | function | Translates a string to the current language or to a given language. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.