EntityPrintPluginManager.php in Entity Print 8.2
File
src/Plugin/EntityPrintPluginManager.php
View source
<?php
namespace Drupal\entity_print\Plugin;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Plugin\DefaultPluginManager;
use Drupal\entity_print\Event\PrintEvents;
use Drupal\entity_print\PrintEngineException;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use Drupal\Core\Entity\EntityTypeManagerInterface;
class EntityPrintPluginManager extends DefaultPluginManager implements EntityPrintPluginManagerInterface {
protected $dispatcher;
protected $disabledPrintEngines;
protected $configFactory;
protected $entityTypeManager;
public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, EventDispatcherInterface $dispatcher, ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct('Plugin/EntityPrint/PrintEngine', $namespaces, $module_handler, 'Drupal\\entity_print\\Plugin\\PrintEngineInterface', 'Drupal\\entity_print\\Annotation\\PrintEngine');
$this
->alterInfo('entity_print_print_engine');
$this
->setCacheBackend($cache_backend, 'entity_print_print_engines');
$this->dispatcher = $dispatcher;
$this->configFactory = $config_factory;
$this->entityTypeManager = $entity_type_manager;
}
public function createInstance($plugin_id, array $configuration = []) {
$configuration = array_merge($this
->getPrintEngineSettings($plugin_id), $configuration);
$definition = $this
->getDefinition($plugin_id);
$class = $definition['class'];
if (!$class::dependenciesAvailable()) {
throw new PrintEngineException(sprintf('Missing dependencies. %s', $class::getInstallationInstructions()));
}
return parent::createInstance($plugin_id, $configuration);
}
public function createSelectedInstance($export_type) {
$config = $this->configFactory
->get('entity_print.settings');
$config_engine = 'print_engines.' . $export_type . '_engine';
$plugin_id = $config
->get($config_engine);
if (!$plugin_id) {
throw new PrintEngineException(sprintf('Please configure a %s print engine.', $export_type));
}
return $this
->createInstance($plugin_id);
}
public function isPrintEngineEnabled($plugin_id) {
if (!$plugin_id) {
return FALSE;
}
$plugin_definition = $this
->getDefinition($plugin_id, FALSE);
if (!$plugin_definition) {
return FALSE;
}
$disabled_definitions = $this
->getDisabledDefinitions($plugin_definition['export_type']);
return !in_array($plugin_id, array_keys($disabled_definitions), TRUE);
}
public function getDisabledDefinitions($filter_export_type) {
if (!isset($this->disabledPrintEngines[$filter_export_type])) {
$this->disabledPrintEngines[$filter_export_type] = [];
foreach ($this
->getDefinitions() as $plugin_id => $definition) {
$class = $definition['class'];
if ($definition['export_type'] === $filter_export_type && !$class::dependenciesAvailable()) {
$this->disabledPrintEngines[$filter_export_type][$plugin_id] = $definition;
}
}
}
return $this->disabledPrintEngines[$filter_export_type];
}
protected function getPrintEngineSettings($plugin_id) {
$storage = $this->entityTypeManager
->getStorage('print_engine');
if (!($entity = $storage
->load($plugin_id))) {
$entity = $storage
->create([
'id' => $plugin_id,
]);
}
$configuration = $entity
->getSettings();
$event = new GenericEvent(PrintEvents::CONFIGURATION_ALTER, [
'configuration' => $configuration,
'config' => $entity,
]);
$this->dispatcher
->dispatch(PrintEvents::CONFIGURATION_ALTER, $event);
$configuration = $event
->getArgument('configuration');
return $configuration;
}
}