annotate core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Core\Plugin;
Chris@0 4
Chris@0 5 use Drupal\Component\Plugin\Definition\PluginDefinitionInterface;
Chris@0 6 use Drupal\Component\Plugin\DependentPluginInterface;
Chris@0 7 use Drupal\Component\Plugin\PluginInspectionInterface;
Chris@0 8 use Drupal\Core\Entity\DependencyTrait;
Chris@0 9 use Drupal\Core\Plugin\Definition\DependentPluginDefinitionInterface;
Chris@0 10
Chris@0 11 /**
Chris@0 12 * Provides a trait for calculating the dependencies of a plugin.
Chris@0 13 */
Chris@0 14 trait PluginDependencyTrait {
Chris@0 15
Chris@0 16 use DependencyTrait;
Chris@0 17
Chris@0 18 /**
Chris@0 19 * Calculates and adds dependencies of a specific plugin instance.
Chris@0 20 *
Chris@0 21 * Dependencies are added for the module that provides the plugin, as well
Chris@0 22 * as any dependencies declared by the instance's calculateDependencies()
Chris@0 23 * method, if it implements
Chris@0 24 * \Drupal\Component\Plugin\DependentPluginInterface.
Chris@0 25 *
Chris@0 26 * @param \Drupal\Component\Plugin\PluginInspectionInterface $instance
Chris@0 27 * The plugin instance.
Chris@0 28 */
Chris@0 29 protected function calculatePluginDependencies(PluginInspectionInterface $instance) {
Chris@0 30 $definition = $instance->getPluginDefinition();
Chris@0 31
Chris@0 32 if ($definition instanceof PluginDefinitionInterface) {
Chris@0 33 $this->addDependency('module', $definition->getProvider());
Chris@0 34 if ($definition instanceof DependentPluginDefinitionInterface && $config_dependencies = $definition->getConfigDependencies()) {
Chris@0 35 $this->addDependencies($config_dependencies);
Chris@0 36 }
Chris@0 37 }
Chris@0 38 elseif (is_array($definition)) {
Chris@0 39 $this->addDependency('module', $definition['provider']);
Chris@0 40 // Plugins can declare additional dependencies in their definition.
Chris@0 41 if (isset($definition['config_dependencies'])) {
Chris@0 42 $this->addDependencies($definition['config_dependencies']);
Chris@0 43 }
Chris@0 44 }
Chris@0 45
Chris@0 46 // If a plugin is dependent, calculate its dependencies.
Chris@0 47 if ($instance instanceof DependentPluginInterface && $plugin_dependencies = $instance->calculateDependencies()) {
Chris@0 48 $this->addDependencies($plugin_dependencies);
Chris@0 49 }
Chris@0 50 }
Chris@0 51
Chris@0 52 }