From 4dd2d8f7d92769f0aaec01b50223b26cd7280fb1 Mon Sep 17 00:00:00 2001 From: Patrick Kenny <33362-ptmkenny@users.noreply.drupalcode.org> Date: Sat, 7 Dec 2024 06:07:56 +0000 Subject: [PATCH] Issue #3483948 by ptmkenny, bbrala: Add support for attributes --- src/Attribute/ResourceFieldEnhancer.php | 36 +++++++++++++++++++ src/Plugin/ResourceFieldEnhancerManager.php | 9 +++-- .../FieldEnhancer/DateTimeEnhancer.php | 15 ++++---- .../DateTimeFromStringEnhancer.php | 15 ++++---- .../FieldEnhancer/JSONFieldEnhancer.php | 13 +++---- .../FieldEnhancer/ListFieldEnhancer.php | 13 +++---- .../FieldEnhancer/SingleNestedEnhancer.php | 13 +++---- .../jsonapi/FieldEnhancer/UrlLinkEnhancer.php | 13 +++---- .../FieldEnhancer/UuidLinkEnhancer.php | 13 +++---- 9 files changed, 94 insertions(+), 46 deletions(-) create mode 100644 src/Attribute/ResourceFieldEnhancer.php diff --git a/src/Attribute/ResourceFieldEnhancer.php b/src/Attribute/ResourceFieldEnhancer.php new file mode 100644 index 0000000..f409d52 --- /dev/null +++ b/src/Attribute/ResourceFieldEnhancer.php @@ -0,0 +1,36 @@ +<?php + +namespace Drupal\jsonapi_extras\Attribute; + +use Drupal\Component\Plugin\Attribute\Plugin; +use Drupal\Core\StringTranslation\TranslatableMarkup; + +/** + * Defines a Plugin annotation object for resource field enhancers. + * + * @see \Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerInterface + */ +#[\Attribute(\Attribute::TARGET_CLASS)] +class ResourceFieldEnhancer extends Plugin { + + /** + * Constructs a ResourceFieldEnhancer attribute. + * + * @param string $id + * The plugin ID. + * @param \Drupal\Core\StringTranslation\TranslatableMarkup $label + * The human-readable name of the formatter type. + * @param \Drupal\Core\StringTranslation\TranslatableMarkup $description + * A short description of the formatter type. + * @param array $dependencies + * The name of modules that are required for this Field Enhancer to be usable. + */ + public function __construct( + public readonly string $id, + public readonly TranslatableMarkup $label, + public readonly TranslatableMarkup $description, + public readonly array $dependencies = [], + ) { + } + +} diff --git a/src/Plugin/ResourceFieldEnhancerManager.php b/src/Plugin/ResourceFieldEnhancerManager.php index 4123d17..0630570 100644 --- a/src/Plugin/ResourceFieldEnhancerManager.php +++ b/src/Plugin/ResourceFieldEnhancerManager.php @@ -22,13 +22,18 @@ class ResourceFieldEnhancerManager extends DefaultPluginManager { * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler * The module handler to invoke the alter hook with. */ - public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { + public function __construct( + \Traversable $namespaces, + CacheBackendInterface $cache_backend, + ModuleHandlerInterface $module_handler, + ) { parent::__construct( 'Plugin/jsonapi/FieldEnhancer', $namespaces, $module_handler, 'Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerInterface', - 'Drupal\jsonapi_extras\Annotation\ResourceFieldEnhancer' + 'Drupal\jsonapi_extras\Attribute\ResourceFieldEnhancer', + 'Drupal\jsonapi_extras\Annotation\ResourceFieldEnhancer', ); $this->alterInfo('resource_field_enhancer_info'); diff --git a/src/Plugin/jsonapi/FieldEnhancer/DateTimeEnhancer.php b/src/Plugin/jsonapi/FieldEnhancer/DateTimeEnhancer.php index 26382d0..9aa2099 100644 --- a/src/Plugin/jsonapi/FieldEnhancer/DateTimeEnhancer.php +++ b/src/Plugin/jsonapi/FieldEnhancer/DateTimeEnhancer.php @@ -3,19 +3,20 @@ namespace Drupal\jsonapi_extras\Plugin\jsonapi\FieldEnhancer; use Drupal\Core\Datetime\DrupalDateTime; +use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\jsonapi_extras\Attribute\ResourceFieldEnhancer; use Drupal\jsonapi_extras\Plugin\DateTimeEnhancerBase; use Shaper\Util\Context; /** * Perform additional manipulations to timestamp fields. - * - * @ResourceFieldEnhancer( - * id = "date_time", - * label = @Translation("Date Time (Timestamp field)"), - * description = @Translation("Formats a date based the configured date format for timestamp fields."), - * dependencies = {"datetime"} - * ) */ +#[ResourceFieldEnhancer( + id: 'date_time', + label: new TranslatableMarkup('Date Time (Timestamp field)'), + description: new TranslatableMarkup('Formats a date based the configured date format for timestamp fields.'), + dependencies: ['datetime'], +)] class DateTimeEnhancer extends DateTimeEnhancerBase { /** diff --git a/src/Plugin/jsonapi/FieldEnhancer/DateTimeFromStringEnhancer.php b/src/Plugin/jsonapi/FieldEnhancer/DateTimeFromStringEnhancer.php index 4c4f3b4..c48d4b2 100644 --- a/src/Plugin/jsonapi/FieldEnhancer/DateTimeFromStringEnhancer.php +++ b/src/Plugin/jsonapi/FieldEnhancer/DateTimeFromStringEnhancer.php @@ -2,20 +2,21 @@ namespace Drupal\jsonapi_extras\Plugin\jsonapi\FieldEnhancer; +use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface; +use Drupal\jsonapi_extras\Attribute\ResourceFieldEnhancer; use Drupal\jsonapi_extras\Plugin\DateTimeEnhancerBase; use Shaper\Util\Context; /** * Perform additional manipulations to datetime fields. - * - * @ResourceFieldEnhancer( - * id = "date_time_from_string", - * label = @Translation("Date Time (Date Time field)"), - * description = @Translation("Formats a date based the configured date format for date fields."), - * dependencies = {"datetime"} - * ) */ +#[ResourceFieldEnhancer( + id: 'date_time_from_string', + label: new TranslatableMarkup('Date Time (Date Time field)'), + description: new TranslatableMarkup('Formats a date based the configured date format for date fields.'), + dependencies: ['datetime'], +)] class DateTimeFromStringEnhancer extends DateTimeEnhancerBase { /** diff --git a/src/Plugin/jsonapi/FieldEnhancer/JSONFieldEnhancer.php b/src/Plugin/jsonapi/FieldEnhancer/JSONFieldEnhancer.php index 327ffcc..05c6c2a 100644 --- a/src/Plugin/jsonapi/FieldEnhancer/JSONFieldEnhancer.php +++ b/src/Plugin/jsonapi/FieldEnhancer/JSONFieldEnhancer.php @@ -4,19 +4,20 @@ namespace Drupal\jsonapi_extras\Plugin\jsonapi\FieldEnhancer; use Drupal\Component\Serialization\Json; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\jsonapi_extras\Attribute\ResourceFieldEnhancer; use Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerBase; use Shaper\Util\Context; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Perform additional manipulations to JSON fields. - * - * @ResourceFieldEnhancer( - * id = "json", - * label = @Translation("JSON Field"), - * description = @Translation("Render JSON Field has real json") - * ) */ +#[ResourceFieldEnhancer( + id: 'json', + label: new TranslatableMarkup('JSON Field'), + description: new TranslatableMarkup('Render JSON Field has real json'), +)] class JSONFieldEnhancer extends ResourceFieldEnhancerBase implements ContainerFactoryPluginInterface { /** diff --git a/src/Plugin/jsonapi/FieldEnhancer/ListFieldEnhancer.php b/src/Plugin/jsonapi/FieldEnhancer/ListFieldEnhancer.php index 4db9844..acc6ca2 100644 --- a/src/Plugin/jsonapi/FieldEnhancer/ListFieldEnhancer.php +++ b/src/Plugin/jsonapi/FieldEnhancer/ListFieldEnhancer.php @@ -2,19 +2,20 @@ namespace Drupal\jsonapi_extras\Plugin\jsonapi\FieldEnhancer; +use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\jsonapi_extras\Attribute\ResourceFieldEnhancer; use Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerBase; use Drupal\options\Plugin\Field\FieldType\ListItemBase; use Shaper\Util\Context; /** * Perform additional manipulations to list fields. - * - * @ResourceFieldEnhancer( - * id = "list", - * label = @Translation("List Field"), - * description = @Translation("Formats a list field based on labels and values.") - * ) */ +#[ResourceFieldEnhancer( + id: 'list', + label: new TranslatableMarkup('List Field'), + description: new TranslatableMarkup('Formats a list field based on labels and values.'), +)] class ListFieldEnhancer extends ResourceFieldEnhancerBase { /** diff --git a/src/Plugin/jsonapi/FieldEnhancer/SingleNestedEnhancer.php b/src/Plugin/jsonapi/FieldEnhancer/SingleNestedEnhancer.php index c712bf5..16f83d3 100644 --- a/src/Plugin/jsonapi/FieldEnhancer/SingleNestedEnhancer.php +++ b/src/Plugin/jsonapi/FieldEnhancer/SingleNestedEnhancer.php @@ -2,18 +2,19 @@ namespace Drupal\jsonapi_extras\Plugin\jsonapi\FieldEnhancer; +use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\jsonapi_extras\Attribute\ResourceFieldEnhancer; use Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerBase; use Shaper\Util\Context; /** * Perform additional manipulations to date fields. - * - * @ResourceFieldEnhancer( - * id = "nested", - * label = @Translation("Single Nested Property"), - * description = @Translation("Extracts or wraps nested properties from an object.") - * ) */ +#[ResourceFieldEnhancer( + id: 'nested', + label: new TranslatableMarkup('Single Nested Property'), + description: new TranslatableMarkup('Extracts or wraps nested properties from an object.'), +)] class SingleNestedEnhancer extends ResourceFieldEnhancerBase { /** diff --git a/src/Plugin/jsonapi/FieldEnhancer/UrlLinkEnhancer.php b/src/Plugin/jsonapi/FieldEnhancer/UrlLinkEnhancer.php index 9566d57..03be283 100644 --- a/src/Plugin/jsonapi/FieldEnhancer/UrlLinkEnhancer.php +++ b/src/Plugin/jsonapi/FieldEnhancer/UrlLinkEnhancer.php @@ -6,7 +6,9 @@ use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Logger\LoggerChannelFactoryInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\Core\Url; +use Drupal\jsonapi_extras\Attribute\ResourceFieldEnhancer; use Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerBase; use Drupal\serialization\Normalizer\CacheableNormalizerInterface; use Shaper\Util\Context; @@ -14,13 +16,12 @@ use Symfony\Component\DependencyInjection\ContainerInterface; /** * Add URL aliases to links. - * - * @ResourceFieldEnhancer( - * id = "url_link", - * label = @Translation("URL for link (link field only)"), - * description = @Translation("Use Url for link fields.") - * ) */ +#[ResourceFieldEnhancer( + id: 'url_link', + label: new TranslatableMarkup('URL for link (link field only)'), + description: new TranslatableMarkup('Use Url for link fields.'), +)] class UrlLinkEnhancer extends ResourceFieldEnhancerBase implements ContainerFactoryPluginInterface { /** diff --git a/src/Plugin/jsonapi/FieldEnhancer/UuidLinkEnhancer.php b/src/Plugin/jsonapi/FieldEnhancer/UuidLinkEnhancer.php index 5c0383c..bd366f6 100644 --- a/src/Plugin/jsonapi/FieldEnhancer/UuidLinkEnhancer.php +++ b/src/Plugin/jsonapi/FieldEnhancer/UuidLinkEnhancer.php @@ -4,19 +4,20 @@ namespace Drupal\jsonapi_extras\Plugin\jsonapi\FieldEnhancer; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\jsonapi_extras\Attribute\ResourceFieldEnhancer; use Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerBase; use Shaper\Util\Context; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Use UUID for internal link field value. - * - * @ResourceFieldEnhancer( - * id = "uuid_link", - * label = @Translation("UUID for link (link field only)"), - * description = @Translation("Use UUID for internal link field.") - * ) */ +#[ResourceFieldEnhancer( + id: 'uuid_link', + label: new TranslatableMarkup('UUID for link (link field only)'), + description: new TranslatableMarkup('Use UUID for internal link field.'), +)] class UuidLinkEnhancer extends ResourceFieldEnhancerBase implements ContainerFactoryPluginInterface { /** -- GitLab