You are here

abstract class GridStackPluginManagerBase in GridStack 8.2

Implements GridStackPluginManagerInterface.

Hierarchy

Expanded class hierarchy of GridStackPluginManagerBase

1 string reference to 'GridStackPluginManagerBase'
gridstack.services.yml in ./gridstack.services.yml
gridstack.services.yml
1 service uses GridStackPluginManagerBase
gridstack.plugin_manager_base in ./gridstack.services.yml
Drupal\gridstack\GridStackPluginManagerBase

File

src/GridStackPluginManagerBase.php, line 17

Namespace

Drupal\gridstack
View source
abstract class GridStackPluginManagerBase extends DefaultPluginManager implements GridStackPluginManagerInterface, MapperInterface {
  use StringTranslationTrait;

  /**
   * The config factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $config;

  /**
   * The plugin path.
   *
   * @var string
   */
  protected static $path = 'Plugin/gridstack';

  /**
   * The plugin interface.
   *
   * @var string
   */
  protected static $interface = 'Drupal\\gridstack\\GridStackSkinPluginInterface';

  /**
   * The plugin annotation.
   *
   * @var string
   */
  protected static $annotation = 'Drupal\\gridstack\\Annotation\\GridStackSkin';

  /**
   * The plugin key.
   *
   * @var string
   */
  protected static $key = 'gridstack_skin';

  /**
   * The plugin attachments.
   *
   * @var bool
   */
  protected $attachments;

  /**
   * The implementors of a method.
   *
   * @var array
   */
  protected $implementors;

  /**
   * {@inheritdoc}
   */
  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config) {
    parent::__construct(static::$path, $namespaces, $module_handler, static::$interface, static::$annotation);
    $this->config = $config;
    $this
      ->alterInfo(static::$key . '_info');
    $this
      ->setCacheBackend($cache_backend, static::$key . '_plugins');
  }

  /**
   * Returns gridstack config shortcut.
   */
  public function config($key = '', $settings = 'gridstack.settings') {
    return $this->config
      ->get($settings)
      ->get($key);
  }

  /**
   * Returns cache backend service.
   */
  public function getCache() {
    return $this->cacheBackend;
  }

  /**
   * {@inheritdoc}
   */
  public function load($plugin_id, array $configuration = []) {
    return $plugin_id && $this
      ->hasDefinition($plugin_id) ? $this
      ->createInstance($plugin_id, $configuration) : NULL;
  }

  /**
   * Returns all available plugins.
   */
  public function loadMultiple(array $configuration = []) {
    $plugins = [];
    foreach ($this
      ->getDefinitions() as $definition) {
      array_push($plugins, $this
        ->createInstance($definition['id'], $configuration));
    }
    return $plugins;
  }

  /**
   * Collects attachments from plugins.
   */
  protected function setAttachments(array &$load, array $attach = []) {
    if (!$this->attachments) {
      if ($implementors = $this
        ->getImplementors('attach')) {
        foreach ($implementors as $id) {
          $this
            ->load($id, $attach)
            ->attach($load, $attach);
        }
      }
      $this->attachments = TRUE;
    }
  }

  /**
   * Returns plugins names implementing a method.
   */
  protected function getImplementors($method) {
    if (!isset($this->implementors[$method])) {
      $cid = static::$key . '_' . $method;
      if ($cache = $this->cacheBackend
        ->get($cid)) {
        $this->implementors[$method] = $cache->data;
      }
      else {
        $data = [];
        foreach ($this
          ->loadMultiple() as $plugin) {
          $class = $plugin
            ->get('class');
          $reflection = new \ReflectionClass($class);
          if ($reflection
            ->getMethod($method)->class == $class) {
            $data[$plugin
              ->getPluginId()] = $plugin
              ->getPluginId();
          }
        }
        ksort($data);
        $count = count($data);
        $tags = Cache::buildTags($cid, [
          'count:' . $count,
        ]);
        $this->cacheBackend
          ->set($cid, $data, Cache::PERMANENT, $tags);
        $this->implementors[$method] = $data;
      }
    }
    return $this->implementors[$method];
  }

  /**
   * Returns gridstack plugin data.
   */
  protected function getData(array $methods, $flatten = FALSE, array $configuration = []) {
    $cid = static::$key . 's_data';
    if ($cache = $this->cacheBackend
      ->get($cid)) {
      return $cache->data;
    }
    else {
      $data = $items = [];
      foreach ($this
        ->loadMultiple($configuration) as $plugin) {
        if ($flatten) {
          foreach ($methods as $method) {
            $data = NestedArray::mergeDeep($data, $plugin
              ->{$method}());
          }
        }
        else {
          foreach ($methods as $method) {
            $items[$method] = $plugin
              ->{$method}();
          }
          $data = NestedArray::mergeDeep($data, $items);
        }
      }
      ksort($data);
      $count = count($data);
      $tags = Cache::buildTags($cid, [
        'count:' . $count,
      ]);
      $this->cacheBackend
        ->set($cid, $data, Cache::PERMANENT, $tags);
      return $data;
    }
  }

  /**
   * Returns available data for select options.
   */
  public function getDataOptions(array $data) {
    $options = [];
    foreach ($data as $key => $properties) {
      $options[$key] = isset($properties['name']) ? $properties['name'] : $key;
    }
    ksort($options);
    return $options;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DefaultPluginManager::$additionalAnnotationNamespaces protected property Additional namespaces the annotation discovery mechanism should scan for annotation definitions.
DefaultPluginManager::$alterHook protected property Name of the alter hook if one should be invoked.
DefaultPluginManager::$cacheKey protected property The cache key.
DefaultPluginManager::$cacheTags protected property An array of cache tags to use for the cached definitions.
DefaultPluginManager::$defaults protected property A set of defaults to be referenced by $this->processDefinition() if additional processing of plugins is necessary or helpful for development purposes. 9
DefaultPluginManager::$moduleHandler protected property The module handler to invoke the alter hook. 1
DefaultPluginManager::$namespaces protected property An object that implements \Traversable which contains the root paths keyed by the corresponding namespace to look for plugin implementations.
DefaultPluginManager::$pluginDefinitionAnnotationName protected property The name of the annotation that contains the plugin definition.
DefaultPluginManager::$pluginInterface protected property The interface each plugin should implement. 1
DefaultPluginManager::$subdir protected property The subdirectory within a namespace to look for plugins, or FALSE if the plugins are in the top level of the namespace.
DefaultPluginManager::alterDefinitions protected function Invokes the hook to alter the definitions if the alter hook is set. 1
DefaultPluginManager::alterInfo protected function Sets the alter hook name.
DefaultPluginManager::clearCachedDefinitions public function Clears static and persistent plugin definition caches. Overrides CachedDiscoveryInterface::clearCachedDefinitions 5
DefaultPluginManager::extractProviderFromDefinition protected function Extracts the provider from a plugin definition.
DefaultPluginManager::findDefinitions protected function Finds plugin definitions. 7
DefaultPluginManager::fixContextAwareDefinitions private function Fix the definitions of context-aware plugins.
DefaultPluginManager::getCacheContexts public function The cache contexts associated with this object. Overrides CacheableDependencyInterface::getCacheContexts
DefaultPluginManager::getCachedDefinitions protected function Returns the cached plugin definitions of the decorated discovery class.
DefaultPluginManager::getCacheMaxAge public function The maximum age for which this object may be cached. Overrides CacheableDependencyInterface::getCacheMaxAge
DefaultPluginManager::getCacheTags public function The cache tags associated with this object. Overrides CacheableDependencyInterface::getCacheTags
DefaultPluginManager::getDefinitions public function Gets the definition of all plugins for this type. Overrides DiscoveryTrait::getDefinitions 2
DefaultPluginManager::getDiscovery protected function Gets the plugin discovery. Overrides PluginManagerBase::getDiscovery 12
DefaultPluginManager::getFactory protected function Gets the plugin factory. Overrides PluginManagerBase::getFactory
DefaultPluginManager::processDefinition public function Performs extra processing on plugin definitions. 13
DefaultPluginManager::providerExists protected function Determines if the provider of a definition exists. 3
DefaultPluginManager::setCacheBackend public function Initialize the cache backend.
DefaultPluginManager::setCachedDefinitions protected function Sets a cache of plugin definitions for the decorated discovery class.
DefaultPluginManager::useCaches public function Disable the use of caches. Overrides CachedDiscoveryInterface::useCaches 1
DiscoveryCachedTrait::$definitions protected property Cached definitions array. 1
DiscoveryCachedTrait::getDefinition public function Overrides DiscoveryTrait::getDefinition 3
DiscoveryTrait::doGetDefinition protected function Gets a specific plugin definition.
DiscoveryTrait::hasDefinition public function
GridStackPluginManagerBase::$annotation protected static property The plugin annotation. 2
GridStackPluginManagerBase::$attachments protected property The plugin attachments.
GridStackPluginManagerBase::$config protected property The config factory.
GridStackPluginManagerBase::$implementors protected property The implementors of a method.
GridStackPluginManagerBase::$interface protected static property The plugin interface. 2
GridStackPluginManagerBase::$key protected static property The plugin key. 2
GridStackPluginManagerBase::$path protected static property The plugin path. 2
GridStackPluginManagerBase::config public function Returns gridstack config shortcut.
GridStackPluginManagerBase::getCache public function Returns cache backend service.
GridStackPluginManagerBase::getData protected function Returns gridstack plugin data.
GridStackPluginManagerBase::getDataOptions public function Returns available data for select options.
GridStackPluginManagerBase::getImplementors protected function Returns plugins names implementing a method.
GridStackPluginManagerBase::load public function Returns an instance of a plugin given a plugin id. Overrides GridStackPluginManagerInterface::load
GridStackPluginManagerBase::loadMultiple public function Returns all available plugins.
GridStackPluginManagerBase::setAttachments protected function Collects attachments from plugins.
GridStackPluginManagerBase::__construct public function Creates the discovery object. Overrides DefaultPluginManager::__construct
PluginManagerBase::$discovery protected property The object that discovers plugins managed by this manager.
PluginManagerBase::$factory protected property The object that instantiates plugins managed by this manager.
PluginManagerBase::$mapper protected property The object that returns the preconfigured plugin instance appropriate for a particular runtime condition.
PluginManagerBase::createInstance public function Creates a pre-configured instance of a plugin. Overrides FactoryInterface::createInstance 12
PluginManagerBase::getInstance public function Gets a preconfigured instance of a plugin. Overrides MapperInterface::getInstance 7
PluginManagerBase::handlePluginNotFound protected function Allows plugin managers to specify custom behavior if a plugin is not found. 1
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
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.
UseCacheBackendTrait::$cacheBackend protected property Cache backend instance.
UseCacheBackendTrait::$useCaches protected property Flag whether caches should be used or skipped.
UseCacheBackendTrait::cacheGet protected function Fetches from the cache backend, respecting the use caches flag. 1
UseCacheBackendTrait::cacheSet protected function Stores data in the persistent cache, respecting the use caches flag.