trait CategorizingPluginManagerTrait in Zircon Profile 8.0
Same name and namespace in other branches
- 8 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 StringTranslationTrait
 
See also
\Drupal\Component\Plugin\CategorizingPluginManagerInterface
5 files declare their use of CategorizingPluginManagerTrait
- ActionManager.php in core/
lib/ Drupal/ Core/ Action/ ActionManager.php  - Contains \Drupal\Core\Action\ActionManager.
 - BlockManager.php in core/
lib/ Drupal/ Core/ Block/ BlockManager.php  - Contains \Drupal\Core\Block\BlockManager.
 - 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  - Contains \Drupal\Core\Condition\ConditionManager.
 - FieldTypePluginManager.php in core/
lib/ Drupal/ Core/ Field/ FieldTypePluginManager.php  - Contains \Drupal\Core\Field\FieldTypePluginManager.
 
File
- core/
lib/ Drupal/ Core/ Plugin/ CategorizingPluginManagerTrait.php, line 22  - Contains \Drupal\Core\Plugin\CategorizingPluginManagerTrait.
 
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 = 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;
  }
}Members
| 
            Name | 
                  Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| 
            CategorizingPluginManagerTrait:: | 
                  public | function | ||
| 
            CategorizingPluginManagerTrait:: | 
                  public | function | ||
| 
            CategorizingPluginManagerTrait:: | 
                  public | function | Returns the module handler used. | |
| 
            CategorizingPluginManagerTrait:: | 
                  protected | function | Gets the name of a provider. | |
| 
            CategorizingPluginManagerTrait:: | 
                  public | function | ||
| 
            CategorizingPluginManagerTrait:: | 
                  protected | function | Processes a plugin definition to ensure there is a category. | |
| 
            StringTranslationTrait:: | 
                  protected | property | The string translation service. | |
| 
            StringTranslationTrait:: | 
                  protected | function | Formats a string containing a count of items. | |
| 
            StringTranslationTrait:: | 
                  protected | function | Returns the number of plurals supported by a given language. | |
| 
            StringTranslationTrait:: | 
                  protected | function | Gets the string translation service. | |
| 
            StringTranslationTrait:: | 
                  public | function | Sets the string translation service to use. | 2 | 
| 
            StringTranslationTrait:: | 
                  protected | function | Translates a string to the current language or to a given language. |