Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / lib / Drupal / Core / Plugin / FilteredPluginManagerTrait.php
diff --git a/web/core/lib/Drupal/Core/Plugin/FilteredPluginManagerTrait.php b/web/core/lib/Drupal/Core/Plugin/FilteredPluginManagerTrait.php
new file mode 100644 (file)
index 0000000..e21c367
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+namespace Drupal\Core\Plugin;
+
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Plugin\Context\ContextAwarePluginManagerTrait;
+use Drupal\Core\Theme\ThemeManagerInterface;
+
+/**
+ * Provides a trait for plugin managers that allow filtering plugin definitions.
+ */
+trait FilteredPluginManagerTrait {
+
+  use ContextAwarePluginManagerTrait;
+
+  /**
+   * Implements \Drupal\Core\Plugin\FilteredPluginManagerInterface::getFilteredDefinitions().
+   */
+  public function getFilteredDefinitions($consumer, $contexts = NULL, array $extra = []) {
+    if (!is_null($contexts)) {
+      $definitions = $this->getDefinitionsForContexts($contexts);
+    }
+    else {
+      $definitions = $this->getDefinitions();
+    }
+
+    $type = $this->getType();
+    $hooks = [];
+    $hooks[] = "plugin_filter_{$type}";
+    $hooks[] = "plugin_filter_{$type}__{$consumer}";
+    $this->moduleHandler()->alter($hooks, $definitions, $extra, $consumer);
+    $this->themeManager()->alter($hooks, $definitions, $extra, $consumer);
+    return $definitions;
+  }
+
+  /**
+   * A string identifying the plugin type.
+   *
+   * This string should be unique and generally will correspond to the string
+   * used by the discovery, e.g. the annotation class or the YAML file name.
+   *
+   * @return string
+   *   A string identifying the plugin type.
+   */
+  abstract protected function getType();
+
+  /**
+   * Wraps the module handler.
+   *
+   * @return \Drupal\Core\Extension\ModuleHandlerInterface
+   *   The module handler.
+   */
+  protected function moduleHandler() {
+    if (property_exists($this, 'moduleHandler') && $this->moduleHandler instanceof ModuleHandlerInterface) {
+      return $this->moduleHandler;
+    }
+
+    return \Drupal::service('module_handler');
+  }
+
+  /**
+   * Wraps the theme manager.
+   *
+   * @return \Drupal\Core\Theme\ThemeManagerInterface
+   *   The theme manager.
+   */
+  protected function themeManager() {
+    if (property_exists($this, 'themeManager') && $this->themeManager instanceof ThemeManagerInterface) {
+      return $this->themeManager;
+    }
+
+    return \Drupal::service('theme.manager');
+  }
+
+}