Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,52 @@ +<?php + +namespace Drupal\Core\Plugin; + +use Drupal\Component\Plugin\Definition\PluginDefinitionInterface; +use Drupal\Component\Plugin\DependentPluginInterface; +use Drupal\Component\Plugin\PluginInspectionInterface; +use Drupal\Core\Entity\DependencyTrait; +use Drupal\Core\Plugin\Definition\DependentPluginDefinitionInterface; + +/** + * Provides a trait for calculating the dependencies of a plugin. + */ +trait PluginDependencyTrait { + + use DependencyTrait; + + /** + * Calculates and adds dependencies of a specific plugin instance. + * + * Dependencies are added for the module that provides the plugin, as well + * as any dependencies declared by the instance's calculateDependencies() + * method, if it implements + * \Drupal\Component\Plugin\DependentPluginInterface. + * + * @param \Drupal\Component\Plugin\PluginInspectionInterface $instance + * The plugin instance. + */ + protected function calculatePluginDependencies(PluginInspectionInterface $instance) { + $definition = $instance->getPluginDefinition(); + + if ($definition instanceof PluginDefinitionInterface) { + $this->addDependency('module', $definition->getProvider()); + if ($definition instanceof DependentPluginDefinitionInterface && $config_dependencies = $definition->getConfigDependencies()) { + $this->addDependencies($config_dependencies); + } + } + elseif (is_array($definition)) { + $this->addDependency('module', $definition['provider']); + // Plugins can declare additional dependencies in their definition. + if (isset($definition['config_dependencies'])) { + $this->addDependencies($definition['config_dependencies']); + } + } + + // If a plugin is dependent, calculate its dependencies. + if ($instance instanceof DependentPluginInterface && $plugin_dependencies = $instance->calculateDependencies()) { + $this->addDependencies($plugin_dependencies); + } + } + +}