Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/ImageToolkit/ImageToolkitManager.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitManager.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,101 @@ +<?php + +namespace Drupal\Core\ImageToolkit; + +use Drupal\Core\Cache\CacheBackendInterface; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Extension\ModuleHandlerInterface; +use Drupal\Core\Plugin\DefaultPluginManager; + +/** + * Manages image toolkit plugins. + * + * @see \Drupal\Core\ImageToolkit\Annotation\ImageToolkit + * @see \Drupal\Core\ImageToolkit\ImageToolkitInterface + * @see \Drupal\Core\ImageToolkit\ImageToolkitBase + * @see plugin_api + */ +class ImageToolkitManager extends DefaultPluginManager { + + /** + * The config factory. + * + * @var \Drupal\Core\Config\ConfigFactoryInterface + */ + protected $configFactory; + + /** + * Constructs the ImageToolkitManager object. + * + * @param \Traversable $namespaces + * An object that implements \Traversable which contains the root paths + * keyed by the corresponding namespace to look for plugin implementations. + * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend + * Cache backend instance to use. + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler. + * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory + * The config factory. + */ + public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory) { + parent::__construct('Plugin/ImageToolkit', $namespaces, $module_handler, 'Drupal\Core\ImageToolkit\ImageToolkitInterface', 'Drupal\Core\ImageToolkit\Annotation\ImageToolkit'); + + $this->setCacheBackend($cache_backend, 'image_toolkit_plugins'); + $this->configFactory = $config_factory; + } + + /** + * Gets the default image toolkit ID. + * + * @return string|bool + * ID of the default toolkit, or FALSE on error. + */ + public function getDefaultToolkitId() { + $toolkit_id = $this->configFactory->get('system.image')->get('toolkit'); + $toolkits = $this->getAvailableToolkits(); + + if (!isset($toolkits[$toolkit_id]) || !class_exists($toolkits[$toolkit_id]['class'])) { + // The selected toolkit isn't available so return the first one found. If + // none are available this will return FALSE. + reset($toolkits); + $toolkit_id = key($toolkits); + } + + return $toolkit_id; + } + + /** + * Gets the default image toolkit. + * + * @return \Drupal\Core\ImageToolkit\ImageToolkitInterface + * Object of the default toolkit, or FALSE on error. + */ + public function getDefaultToolkit() { + if ($toolkit_id = $this->getDefaultToolkitId()) { + return $this->createInstance($toolkit_id); + } + return FALSE; + } + + /** + * Gets a list of available toolkits. + * + * @return array + * An array with the toolkit names as keys and the descriptions as values. + */ + public function getAvailableToolkits() { + // Use plugin system to get list of available toolkits. + $toolkits = $this->getDefinitions(); + + $output = []; + foreach ($toolkits as $id => $definition) { + // Only allow modules that aren't marked as unavailable. + if (call_user_func($definition['class'] . '::isAvailable')) { + $output[$id] = $definition; + } + } + + return $output; + } + +}