Skip to content
Snippets Groups Projects
Verified Commit 4eed1aa1 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3420992 by kim.pepper, mstrelan, larowlan: Convert...

Issue #3420992 by kim.pepper, mstrelan, larowlan: Convert ImageToolkitOperation plugin discovery to attributes

(cherry picked from commit 328bb474)
parent 6d67339d
Branches
Tags
28 merge requests!11958Issue #3490507 by alexpott, smustgrave: Fix bogus mocking in...,!11769Issue #3517987: Add option to contextual filters to encode slashes in query parameter.,!11185Issue #3477324 by andypost, alexpott: Fix usage of str_getcsv() and fgetcsv() for PHP 8.4,!10602Issue #3438769 by vinmayiswamy, antonnavi, michelle, amateescu: Sub workspace does not clear,!10301Issue #3469309 by mstrelan, smustgrave, moshe weitzman: Use one-time login...,!10187Issue #3487488 by dakwamine: ExtensionMimeTypeGuesser::guessMimeType must support file names with "0" (zero) like foo.0.zip,!9944Issue #3483353: Consider making the createCopy config action optionally fail...,!9929Issue #3445469 by pooja_sharma, smustgrave: Add additional test coverage for...,!9787Resolve issue 3479427 - bootstrap barrio issue under Windows,!9742Issue #3463908 by catch, quietone: Split OptionsFieldUiTest into two,!9526Issue #3458177 by mondrake, catch, quietone, godotislate, longwave, larowlan,...,!8738Issue #3424162 by camilledavis, dineshkumarbollu, smustgrave: Claro...,!8704Make greek characters available in ckeditor5,!8597Draft: Issue #3442259 by catch, quietone, dww: Reduce time of Migrate Upgrade tests...,!8533Issue #3446962 by kim.pepper: Remove incorrectly added...,!8517Issue #3443748 by NexusNovaz, smustgrave: Testcase creates false positive,!8325Update file Sort.php,!8095Expose document root on install,!7930Resolve #3427374 "Taxonomytid viewsargumentdefault plugin",!7627Issue #3439440 by nicxvan, Binoli Lalani, longwave: Remove country support from DateFormatter,!7445Issue #3440169: When using drupalGet(), provide an associative array for $headers,!7401#3271894 Fix documented StreamWrapperInterface return types for realpath() and dirname(),!7384Add constraints to system.advisories,!7078Issue #3320569 by Spokje, mondrake, smustgrave, longwave, quietone, Lendude,...,!6622Issue #2559833 by piggito, mohit_aghera, larowlan, guptahemant, vakulrai,...,!6502Draft: Resolve #2938524 "Plach testing issue",!38582585169-10.1.x,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key
Pipeline #106405 passed with warnings
Pipeline: drupal

#106414

    Pipeline: drupal

    #106410

      Showing
      with 201 additions and 100 deletions
      <?php
      declare(strict_types=1);
      namespace Drupal\Core\ImageToolkit\Attribute;
      use Drupal\Component\Plugin\Attribute\Plugin;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines a Plugin attribute for the image toolkit plugin.
      *
      * An image toolkit operation plugin provides a self-contained image
      * manipulation routine, for a specific image toolkit. Examples of image
      * toolkit operations are scaling, cropping, rotating, etc.
      *
      * Plugin namespace: Plugin\ImageToolkit\Operation
      *
      * For a working example, see
      * \Drupal\system\Plugin\ImageToolkit\Operation\gd\Crop
      *
      * @see \Drupal\Core\ImageToolkit\Annotation\ImageToolkit
      * @see \Drupal\image\Annotation\ImageEffect
      * @see \Drupal\Core\ImageToolkit\ImageToolkitOperationInterface
      * @see \Drupal\Core\ImageToolkit\ImageToolkitOperationBase
      * @see \Drupal\Core\ImageToolkit\ImageToolkitOperationManager
      * @see plugin_api
      *
      * @Annotation
      */
      #[\Attribute(\Attribute::TARGET_CLASS)]
      class ImageToolkitOperation extends Plugin {
      /**
      * Constructs a new ImageToolkitOperation instance.
      *
      * @param string $id
      * The plugin ID.
      * There are no strict requirements as to the string to be used to identify
      * the plugin, since discovery of the appropriate operation plugin to be
      * used to apply an operation is based on the values of the 'toolkit' and
      * the 'operation' annotation values.
      * However, it is recommended that the following patterns be used:
      * - '{toolkit}_{operation}' for the first implementation of an operation
      * by a toolkit.
      * - '{module}_{toolkit}_{operation}' for overrides of existing
      * implementations supplied by an alternative module, and for new
      * module-supplied operations.
      * @param string $toolkit
      * The id of the image toolkit plugin for which the operation is
      * implemented.
      * @param string $operation
      * The machine name of the image toolkit operation implemented
      * (e.g. "crop").
      * @param \Drupal\Core\StringTranslation\TranslatableMarkup $label
      * The human-readable name of the image toolkit operation.
      * @param \Drupal\Core\StringTranslation\TranslatableMarkup|null $description
      * (optional) The description of the image toolkit operation.
      * @param string|null $deriver
      * (optional) The deriver class for the image toolkit operation.
      */
      public function __construct(
      public readonly string $id,
      public readonly string $toolkit,
      public readonly string $operation,
      public readonly TranslatableMarkup $label,
      public readonly ?TranslatableMarkup $description = NULL,
      public readonly ?string $deriver = NULL,
      ) {}
      }
      ......@@ -2,12 +2,13 @@
      namespace Drupal\Core\ImageToolkit;
      use Drupal\Core\Cache\CacheBackendInterface;
      use Drupal\Core\Extension\ModuleHandlerInterface;
      use Drupal\Core\Plugin\DefaultPluginManager;
      use Drupal\Component\Plugin\Exception\PluginNotFoundException;
      use Drupal\Component\Plugin\Factory\DefaultFactory;
      use Drupal\Component\Render\FormattableMarkup;
      use Drupal\Core\Cache\CacheBackendInterface;
      use Drupal\Core\Extension\ModuleHandlerInterface;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\Plugin\DefaultPluginManager;
      use Psr\Log\LoggerInterface;
      /**
      ......@@ -50,7 +51,14 @@ class ImageToolkitOperationManager extends DefaultPluginManager implements Image
      * The image toolkit manager.
      */
      public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, LoggerInterface $logger, ImageToolkitManager $toolkit_manager) {
      parent::__construct('Plugin/ImageToolkit/Operation', $namespaces, $module_handler, 'Drupal\Core\ImageToolkit\ImageToolkitOperationInterface', 'Drupal\Core\ImageToolkit\Annotation\ImageToolkitOperation');
      parent::__construct(
      'Plugin/ImageToolkit/Operation',
      $namespaces,
      $module_handler,
      ImageToolkitOperationInterface::class,
      ImageToolkitOperation::class,
      'Drupal\Core\ImageToolkit\Annotation\ImageToolkitOperation',
      );
      $this->alterInfo('image_toolkit_operation');
      $this->setCacheBackend($cache_backend, 'image_toolkit_operation_plugins');
      ......
      ......@@ -2,17 +2,19 @@
      namespace Drupal\system\Plugin\ImageToolkit\Operation\gd;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines GD2 convert operation.
      *
      * @ImageToolkitOperation(
      * id = "gd_convert",
      * toolkit = "gd",
      * operation = "convert",
      * label = @Translation("Convert"),
      * description = @Translation("Instructs the toolkit to save the image with a specified extension.")
      * )
      */
      #[ImageToolkitOperation(
      id: "gd_convert",
      toolkit: "gd",
      operation: "convert",
      label: new TranslatableMarkup("Convert"),
      description: new TranslatableMarkup("Instructs the toolkit to save the image with a specified extension.")
      )]
      class Convert extends GDImageToolkitOperationBase {
      /**
      ......
      ......@@ -3,18 +3,19 @@
      namespace Drupal\system\Plugin\ImageToolkit\Operation\gd;
      use Drupal\Component\Utility\Color;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines GD2 create_new image operation.
      *
      * @ImageToolkitOperation(
      * id = "gd_create_new",
      * toolkit = "gd",
      * operation = "create_new",
      * label = @Translation("Set a new image"),
      * description = @Translation("Creates a new transparent object and sets it for the image.")
      * )
      */
      #[ImageToolkitOperation(
      id: "gd_create_new",
      toolkit: "gd",
      operation: "create_new",
      label: new TranslatableMarkup("Set a new image"),
      description: new TranslatableMarkup("Creates a new transparent object and sets it for the image.")
      )]
      class CreateNew extends GDImageToolkitOperationBase {
      /**
      ......
      ......@@ -2,17 +2,19 @@
      namespace Drupal\system\Plugin\ImageToolkit\Operation\gd;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines GD2 Crop operation.
      *
      * @ImageToolkitOperation(
      * id = "gd_crop",
      * toolkit = "gd",
      * operation = "crop",
      * label = @Translation("Crop"),
      * description = @Translation("Crops an image to a rectangle specified by the given dimensions.")
      * )
      */
      #[ImageToolkitOperation(
      id: "gd_crop",
      toolkit: "gd",
      operation: "crop",
      label: new TranslatableMarkup("Crop"),
      description: new TranslatableMarkup("Crops an image to a rectangle specified by the given dimensions.")
      )]
      class Crop extends GDImageToolkitOperationBase {
      /**
      ......
      ......@@ -2,17 +2,19 @@
      namespace Drupal\system\Plugin\ImageToolkit\Operation\gd;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines GD2 Desaturate operation.
      *
      * @ImageToolkitOperation(
      * id = "gd_desaturate",
      * toolkit = "gd",
      * operation = "desaturate",
      * label = @Translation("Desaturate"),
      * description = @Translation("Converts an image to grayscale.")
      * )
      */
      #[ImageToolkitOperation(
      id: "gd_desaturate",
      toolkit: "gd",
      operation: "desaturate",
      label: new TranslatableMarkup("Desaturate"),
      description: new TranslatableMarkup("Converts an image to grayscale.")
      )]
      class Desaturate extends GDImageToolkitOperationBase {
      /**
      ......
      ......@@ -2,17 +2,19 @@
      namespace Drupal\system\Plugin\ImageToolkit\Operation\gd;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines GD2 resize operation.
      *
      * @ImageToolkitOperation(
      * id = "gd_resize",
      * toolkit = "gd",
      * operation = "resize",
      * label = @Translation("Resize"),
      * description = @Translation("Resizes an image to the given dimensions (ignoring aspect ratio).")
      * )
      */
      #[ImageToolkitOperation(
      id: "gd_resize",
      toolkit: "gd",
      operation: "resize",
      label: new TranslatableMarkup("Resize"),
      description: new TranslatableMarkup("Resizes an image to the given dimensions (ignoring aspect ratio).")
      )]
      class Resize extends GDImageToolkitOperationBase {
      /**
      ......
      ......@@ -3,18 +3,19 @@
      namespace Drupal\system\Plugin\ImageToolkit\Operation\gd;
      use Drupal\Component\Utility\Color;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines GD2 rotate operation.
      *
      * @ImageToolkitOperation(
      * id = "gd_rotate",
      * toolkit = "gd",
      * operation = "rotate",
      * label = @Translation("Rotate"),
      * description = @Translation("Rotates an image by the given number of degrees.")
      * )
      */
      #[ImageToolkitOperation(
      id: "gd_rotate",
      toolkit: "gd",
      operation: "rotate",
      label: new TranslatableMarkup("Rotate"),
      description: new TranslatableMarkup("Rotates an image by the given number of degrees.")
      )]
      class Rotate extends GDImageToolkitOperationBase {
      /**
      ......
      ......@@ -2,17 +2,19 @@
      namespace Drupal\system\Plugin\ImageToolkit\Operation\gd;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines GD2 Scale operation.
      *
      * @ImageToolkitOperation(
      * id = "gd_scale",
      * toolkit = "gd",
      * operation = "scale",
      * label = @Translation("Scale"),
      * description = @Translation("Scales an image while maintaining aspect ratio. The resulting image can be smaller for one or both target dimensions.")
      * )
      */
      #[ImageToolkitOperation(
      id: "gd_scale",
      toolkit: "gd",
      operation: "scale",
      label: new TranslatableMarkup("Scale"),
      description: new TranslatableMarkup("Scales an image while maintaining aspect ratio. The resulting image can be smaller for one or both target dimensions.")
      )]
      class Scale extends Resize {
      /**
      ......
      ......@@ -2,17 +2,19 @@
      namespace Drupal\system\Plugin\ImageToolkit\Operation\gd;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Defines GD2 Scale and crop operation.
      *
      * @ImageToolkitOperation(
      * id = "gd_scale_and_crop",
      * toolkit = "gd",
      * operation = "scale_and_crop",
      * label = @Translation("Scale and crop"),
      * description = @Translation("Scales an image to the exact width and height given. This plugin achieves the target aspect ratio by cropping the original image equally on both sides, or equally on the top and bottom. This function is useful to create uniform sized avatars from larger images.")
      * )
      */
      #[ImageToolkitOperation(
      id: "gd_scale_and_crop",
      toolkit: "gd",
      operation: "scale_and_crop",
      label: new TranslatableMarkup("Scale and crop"),
      description: new TranslatableMarkup("Scales an image to the exact width and height given. This plugin achieves the target aspect ratio by cropping the original image equally on both sides, or equally on the top and bottom. This function is useful to create uniform sized avatars from larger images.")
      )]
      class ScaleAndCrop extends GDImageToolkitOperationBase {
      /**
      ......
      ......@@ -2,15 +2,17 @@
      namespace Drupal\image_test\Plugin\ImageToolkit\Operation\test;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Builds an image toolkit operation.
      *
      * @ImageToolkitOperation(
      * id = "bar",
      * toolkit = "test",
      * operation = "invert",
      * label = @Translation("Invert"),
      * description = @Translation("Bar.")
      * )
      */
      #[ImageToolkitOperation(
      id: "bar",
      toolkit: "test",
      operation: "invert",
      label: new TranslatableMarkup("Invert"),
      description: new TranslatableMarkup("Bar.")
      )]
      class Bar extends OperationBase {}
      ......@@ -2,17 +2,19 @@
      namespace Drupal\image_test\Plugin\ImageToolkit\Operation\test;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * An image toolkit operation that throws a \RuntimeException.
      *
      * @ImageToolkitOperation(
      * id = "failing",
      * toolkit = "test",
      * operation = "failing",
      * label = @Translation("An image toolkit operation that throws a \\RuntimeException"),
      * description = @Translation("An image toolkit operation that throws a \\RuntimeException.")
      * )
      */
      #[ImageToolkitOperation(
      id: "failing",
      toolkit: "test",
      operation: "failing",
      label: new TranslatableMarkup("An image toolkit operation that throws a \\RuntimeException"),
      description: new TranslatableMarkup("An image toolkit operation that throws a \\RuntimeException.")
      )]
      class Failing extends OperationBase {
      /**
      ......
      ......@@ -2,15 +2,17 @@
      namespace Drupal\image_test\Plugin\ImageToolkit\Operation\test;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Builds an image toolkit operation.
      *
      * @ImageToolkitOperation(
      * id = "foo",
      * toolkit = "test",
      * operation = "blur",
      * label = @Translation("Blur"),
      * description = @Translation("Foo.")
      * )
      */
      #[ImageToolkitOperation(
      id: "foo",
      toolkit: "test",
      operation: "blur",
      label: new TranslatableMarkup("Blur"),
      description: new TranslatableMarkup("Foo."),
      )]
      class Foo extends OperationBase {}
      ......@@ -2,15 +2,17 @@
      namespace Drupal\image_test\Plugin\ImageToolkit\Operation\test;
      use Drupal\Core\ImageToolkit\Attribute\ImageToolkitOperation;
      use Drupal\Core\StringTranslation\TranslatableMarkup;
      /**
      * Builds an image toolkit operation.
      *
      * @ImageToolkitOperation(
      * id = "foo_derived",
      * toolkit = "test:derived_toolkit",
      * operation = "blur",
      * label = @Translation("Blur Derived"),
      * description = @Translation("Foo derived.")
      * )
      */
      #[ImageToolkitOperation(
      id: "foo_derived",
      toolkit: "test:derived_toolkit",
      operation: "blur",
      label: new TranslatableMarkup("Blur Derived"),
      description: new TranslatableMarkup("Foo derived.")
      )]
      class FooDerived extends OperationBase {}
      0% Loading or .
      You are about to add 0 people to the discussion. Proceed with caution.
      Please register or to comment