/** * Returns the plugin ID for a given toolkit and operation. * * @param \Drupal\Core\ImageToolkit\ImageToolkitInterface $toolkit * The toolkit instance. * @param string $operation * The operation (e.g. "crop"). * * @return string * The plugin ID. * * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException * When no plugin is available. */ protected function getToolkitOperationPluginId(ImageToolkitInterface $toolkit, $operation) { $toolkit_id = $toolkit->getPluginId(); $definitions = $this->getDefinitions(); $definitions = array_filter($definitions, function ($definition) use($toolkit_id, $operation) { return $definition['toolkit'] == $toolkit_id && $definition['operation'] == $operation; }); if (!$definitions) { // If this image toolkit plugin is a derivative and returns no operation, // try once again with its base plugin. $base_toolkit_id = $toolkit->getBaseId(); if ($toolkit_id != $base_toolkit_id && !empty($base_toolkit_id)) { $base_toolkit = $this->toolkitManager->createInstance($base_toolkit_id); return $this->getToolkitOperationPluginId($base_toolkit, $operation); } $message = SafeMarkup::format("No image operation plugin for '@toolkit' toolkit and '@operation' operation.", array('@toolkit' => $toolkit_id, '@operation' => $operation)); throw new PluginNotFoundException($toolkit_id . '.' . $operation, $message); } else { // Pickup the first plugin found. // @todo In https://www.drupal.org/node/2110591 we'll return here the UI // selected plugin or the first found if missed. $definition = reset($definitions); return $definition['id']; } }
/** * Constructs a ImageToolkitForm object. * * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The factory for configuration objects. * @param \Drupal\Core\ImageToolkit\ImageToolkitManager $manager * The image toolkit plugin manager. */ public function __construct(ConfigFactoryInterface $config_factory, ImageToolkitManager $manager) { parent::__construct($config_factory); foreach ($manager->getAvailableToolkits() as $id => $definition) { $this->availableToolkits[$id] = $manager->createInstance($id); } }
/** * Constructs a new Image object. * * Normally, the toolkit set as default in the admin UI is used by the * factory to create new Image objects. This can be overridden through * \Drupal\Core\Image\ImageInterface::setToolkitId() so that any new Image * object created will use the new toolkit specified. Finally, a single * Image object can be created using a specific toolkit, regardless of the * current factory settings, by passing its plugin ID in the $toolkit_id * argument. * * @param string|null $source * (optional) The path to an image file, or NULL to construct the object * with no image source. * @param string|null $toolkit_id * (optional) The ID of the image toolkit to use for this image, or NULL * to use the current toolkit. * * @return \Drupal\Core\Image\ImageInterface * An Image object. * * @see ImageFactory::setToolkitId() */ public function get($source = NULL, $toolkit_id = NULL) { $toolkit_id = $toolkit_id ?: $this->toolkitId; return new Image($this->toolkitManager->createInstance($toolkit_id), $source); }