block_generation-8.x-1.x-dev/src/BlockGenerationGenerationEffectManager.php
src/BlockGenerationGenerationEffectManager.php
<?php
namespace Drupal\block_generation;
use Drupal\block_generation\Annotation\BlockGenerationEffect;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\DependencyInjection\ClassResolverInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Plugin\DefaultPluginManager;
use Drupal\plugin\PluginType\PluginTypeManagerInterface;
/**
* Manages discovery and instantiation of BlockGenerationEffect plugins.
*
* @see \Drupal\block_generation\BlockGenerationEffectPluginInterface
*/
class BlockGenerationGenerationEffectManager extends DefaultPluginManager implements BlockGenerationEffectManagerInterface {
/**
* The class resolver service.
*
* @var \Drupal\Core\DependencyInjection\ClassResolverInterface
*/
protected $classResolver;
/**
* The plugin type manager.
*
* @var \Drupal\plugin\PluginType\PluginTypeManagerInterface
*/
protected $pluginTypeManager;
/**
* Constructs a new BlockGenerationGenerationEffectManager.
*
* @param \Traversable $namespaces
* Plugin namespaces.
* @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
* Cache backend.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* Module handler.
* @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
* Class resolver.
* @param \Drupal\plugin\PluginType\PluginTypeManagerInterface $plugin_type_manager
* Plugin type manager.
*/
public function __construct(
\Traversable $namespaces,
CacheBackendInterface $cache_backend,
ModuleHandlerInterface $module_handler,
ClassResolverInterface $class_resolver,
PluginTypeManagerInterface $plugin_type_manager
) {
parent::__construct('Plugin/BlockGenerationEffect', $namespaces, $module_handler, BlockGenerationEffectPluginInterface::class, BlockGenerationEffect::class);
$this->alterInfo('block_generation_effect');
$this->setCacheBackend($cache_backend, 'block_generation_effect', ['block_generation_effect']);
$this->classResolver = $class_resolver;
$this->pluginTypeManager = $plugin_type_manager;
}
/**
* Gets the operations provider for a plugin.
*
* @param string $plugin_id
* The plugin ID.
*
* @return object|null
* The operations provider instance or NULL.
*/
public function getOperationsProvider($plugin_id) {
$definition = $this->getDefinition($plugin_id);
$plugin_type = $this->pluginTypeManager->getPluginType('block_generation_effect');
$typed_definition = $plugin_type->ensureTypedDefinition($definition);
if ($typed_definition) {
$provider_class = $typed_definition->getOperationsProviderClass();
return $this->classResolver->getInstanceFromDefinition($provider_class);
}
return NULL;
}
/**
* {@inheritdoc}
*/
public function getDefinitions() {
return parent::getDefinitions();
}
}
