You are here

class ExtensionManager in Markdown 8.2

Markdown Extension Plugin Manager.

@method \Drupal\markdown\Plugin\Markdown\ExtensionInterface[] all(array $configuration = [], $includeFallback = FALSE) : array @method \Drupal\markdown\Plugin\Markdown\ExtensionInterface createInstance($plugin_id, array $configuration = []) @method \Drupal\markdown\Annotation\MarkdownExtension getDefinition($plugin_id, $exception_on_invalid = TRUE) @method \Drupal\markdown\Annotation\MarkdownExtension|void getDefinitionByClassName($className) @method \Drupal\markdown\Annotation\MarkdownExtension[] getDefinitions($includeFallback = TRUE) @method \Drupal\markdown\Plugin\Markdown\ExtensionInterface[] installed(array $configuration = []) : array @noinspection PhpUnnecessaryFullyQualifiedNameInspection

Hierarchy

Expanded class hierarchy of ExtensionManager

2 files declare their use of ExtensionManager
BaseExtension.php in src/Plugin/Markdown/BaseExtension.php
InstallableRequirement.php in src/Annotation/InstallableRequirement.php
1 string reference to 'ExtensionManager'
markdown.services.yml in ./markdown.services.yml
markdown.services.yml
1 service uses ExtensionManager
plugin.manager.markdown.extension in ./markdown.services.yml
Drupal\markdown\PluginManager\ExtensionManager

File

src/PluginManager/ExtensionManager.php, line 29

Namespace

Drupal\markdown\PluginManager
View source
class ExtensionManager extends InstallablePluginManager implements ExtensionManagerInterface {

  /**
   * {@inheritdoc}
   */
  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ConfigFactoryInterface $configFactory, LoggerInterface $logger, ModuleHandlerInterface $module_handler) {
    parent::__construct('Plugin/Markdown', $namespaces, $configFactory, $logger, $module_handler, ExtensionInterface::class, MarkdownExtension::class);
    $this
      ->setCacheBackend($cache_backend, 'markdown_extension_info');
    $this
      ->alterInfo($this->cacheKey);
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container = NULL) {
    if (!$container) {
      $container = \Drupal::getContainer();
    }
    $instance = new static($container
      ->get('container.namespaces'), $container
      ->get('cache.discovery'), $container
      ->get('config.factory'), $container
      ->get('logger.channel.markdown'), $container
      ->get('module_handler'));
    $instance
      ->setContainer($container);
    return $instance;
  }

  /**
   * {@inheritdoc}
   */
  protected function alterDefinitions(&$definitions, $runtime = FALSE) {

    /** @var \Drupal\markdown\Annotation\MarkdownExtension[] $definitions */

    // Create dependency relationships between extensions.
    // Note: property is prefixed with an underscore to denote it as internal.
    // @see \Drupal\markdown\PluginManager\ExtensionCollection::__construct
    // @todo Figure out a better way to handle this.
    foreach ($definitions as $definition) {
      if (!isset($definition['_requiredBy'])) {
        $definition['_requiredBy'] = [];
      }
      $extensionRequirements = $definition
        ->getRequirementsByType('extension');
      foreach ($extensionRequirements as $requirement) {
        $id = $requirement
          ->getTypeId();

        // Check that the plugin exists.
        if (!isset($definitions[$id])) {
          throw new PluginNotFoundException($id);
        }

        // Extensions cannot require themselves.
        if ($id === $definition->id) {
          throw new InvalidPluginDefinitionException($definition->id, 'Extensions cannot require themselves.');
        }
        if (!isset($definitions[$id]['_requiredBy'])) {
          $definitions[$id]['_requiredBy'] = [];
        }
        if (!in_array($definition->id, $definitions[$id]['_requiredBy'])) {
          $definitions[$id]['_requiredBy'][] = $definition->id;
        }
      }
    }
    parent::alterDefinitions($definitions, $runtime);
  }

  /**
   * {@inheritdoc}
   */
  protected function alterDefinition(InstallablePlugin $definition, $runtime = FALSE) {

    // Immediately return if not altering the runtime definition.
    if (!$runtime) {
      parent::alterDefinition($definition, $runtime);
      return;
    }
    parent::alterDefinition($definition, $runtime);
  }

  /**
   * {@inheritdoc}
   */
  protected function createObjectRequirement(InstallablePlugin $definition, InstallableLibrary $library) {
    $objectRequirement = parent::createObjectRequirement($definition, $library);
    $id = $objectRequirement->constraints['Installed']['name'];

    /* @var \Drupal\markdown\PluginManager\ParserManagerInterface $parserManager */
    $parserManager = \Drupal::service('plugin.manager.markdown.parser');
    $parser = $parserManager
      ->getDefinitionByLibraryId($id);
    foreach ($library->requirements as $requirement) {
      if ($requirement
        ->getId() === $id || $parser && $requirement
        ->getType() === 'parser' && $requirement
        ->getTypeId() === $parser
        ->getId()) {
        return NULL;
      }
    }
    return $objectRequirement;
  }

  /**
   * {@inheritdoc}
   */
  public function getFallbackPluginId($plugin_id = NULL, array $configuration = []) {
    return '_missing_extension';
  }

  /**
   * {@inheritdoc}
   */
  public function processDefinition(&$definition, $pluginId) {
    if (!$definition instanceof MarkdownExtension) {
      return;
    }
    if ($requires = $definition->requires) {
      foreach ($requires as $key => $extensionId) {
        $requirement = new InstallableRequirement();
        $requirement->id = "extension:{$extensionId}";
        $definition->runtimeRequirements[] = $requirement;
      }
      unset($definition->requires);
    }
    parent::processDefinition($definition, $pluginId);
  }

}

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::alterInfo protected function Sets the alter hook name.
DefaultPluginManager::extractProviderFromDefinition protected function Extracts the provider from a plugin definition.
DefaultPluginManager::fixContextAwareDefinitions private function Fix the definitions of context-aware plugins.
DefaultPluginManager::getDiscovery protected function Gets the plugin discovery. Overrides PluginManagerBase::getDiscovery 12
DefaultPluginManager::getFactory protected function Gets the plugin factory. Overrides PluginManagerBase::getFactory
DefaultPluginManager::providerExists protected function Determines if the provider of a definition exists. 3
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
ExtensionManager::alterDefinition protected function Allows plugin managers to further alter individual definitions. Overrides InstallablePluginManager::alterDefinition
ExtensionManager::alterDefinitions protected function Invokes the hook to alter the definitions if the alter hook is set. Overrides InstallablePluginManager::alterDefinitions
ExtensionManager::create public static function Instantiates a new instance of this class. Overrides ContainerInjectionInterface::create
ExtensionManager::createObjectRequirement protected function Overrides InstallablePluginManager::createObjectRequirement
ExtensionManager::getFallbackPluginId public function Gets a fallback id for a missing plugin. Overrides InstallablePluginManager::getFallbackPluginId
ExtensionManager::processDefinition public function Performs extra processing on plugin definitions. Overrides InstallablePluginManager::processDefinition
ExtensionManager::__construct public function Creates the discovery object. Overrides InstallablePluginManager::__construct
InstallablePluginManager::$cacheContexts protected property Cache contexts.
InstallablePluginManager::$cacheMaxAge protected property Cache max-age.
InstallablePluginManager::$configFactory protected property The Config Factory service.
InstallablePluginManager::$logger protected property A Logger service.
InstallablePluginManager::$runtimeDefinitions protected static property The cached runtime definitions.
InstallablePluginManager::all public function Retrieves all registered plugins. Overrides InstallablePluginManagerInterface::all
InstallablePluginManager::clearCachedDefinitions public function Clears static and persistent plugin definition caches. Overrides DefaultPluginManager::clearCachedDefinitions
InstallablePluginManager::convertInstalledToLibraries Deprecated protected function Converts plugin definitions using the old "installed" method to libraries.
InstallablePluginManager::createInstance public function Creates a pre-configured instance of a plugin. Overrides PluginManagerBase::createInstance 1
InstallablePluginManager::findDefinitions protected function Finds plugin definitions. Overrides DefaultPluginManager::findDefinitions
InstallablePluginManager::firstInstalledPluginId public function Retrieves the first installed plugin identifier. Overrides InstallablePluginManagerInterface::firstInstalledPluginId
InstallablePluginManager::getCacheContexts public function The cache contexts associated with this object. Overrides DefaultPluginManager::getCacheContexts
InstallablePluginManager::getCachedDefinitions protected function Overrides DefaultPluginManager::getCachedDefinitions
InstallablePluginManager::getCacheKey public function Retrieves the cache key to use. Overrides InstallablePluginManagerInterface::getCacheKey
InstallablePluginManager::getCacheMaxAge public function The maximum age for which this object may be cached. Overrides DefaultPluginManager::getCacheMaxAge
InstallablePluginManager::getCacheTags public function The cache tags associated with this object. Overrides DefaultPluginManager::getCacheTags
InstallablePluginManager::getContainer public function Retrieves the container.
InstallablePluginManager::getDefinitionByClassName public function Retrieves a definition by class name. Overrides InstallablePluginManagerInterface::getDefinitionByClassName
InstallablePluginManager::getDefinitionByLibraryId public function Retrieves a definition by library identifier. Overrides InstallablePluginManagerInterface::getDefinitionByLibraryId
InstallablePluginManager::getDefinitions public function Gets the definition of all plugins for this type. Overrides DefaultPluginManager::getDefinitions
InstallablePluginManager::getRuntimeDefinitions protected function Retrieves the runtime definitions.
InstallablePluginManager::handlePluginNotFound protected function Allows plugin managers to specify custom behavior if a plugin is not found. Overrides PluginManagerBase::handlePluginNotFound
InstallablePluginManager::installed public function Retrieves all installed plugins. Overrides InstallablePluginManagerInterface::installed
InstallablePluginManager::installedDefinitions public function Retrieves installed plugin definitions. Overrides InstallablePluginManagerInterface::installedDefinitions
InstallablePluginManager::processLibraryDefinition protected function Processes the library definition.
InstallablePluginManager::setCacheBackend public function Initialize the cache backend. Overrides DefaultPluginManager::setCacheBackend
InstallablePluginManager::setCachedDefinitions protected function Sets a cache of plugin definitions for the decorated discovery class. Overrides DefaultPluginManager::setCachedDefinitions
InstallablePluginManager::sortDefinitions protected function Sorts a definitions array.
NormalizeTrait::isCallable public static function
NormalizeTrait::isTraversable public static function Indicates whether a value is traversable.
NormalizeTrait::normalizeCallables public static function Normalizes any callables provided so they can be stored in the database.
NormalizeTrait::normalizeClassName public static function Normalizes class names to prevent double escaping.
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::getInstance public function Gets a preconfigured instance of a plugin. Overrides MapperInterface::getInstance 7
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.