diff --git a/src/Attribute/ResourceFieldEnhancer.php b/src/Attribute/ResourceFieldEnhancer.php new file mode 100644 index 0000000000000000000000000000000000000000..f409d52061d35c80f341f896b3ce348b8e4e51ce --- /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 4123d17e42405c3a7a1529e736853562a0db9b4e..063057073b6b178f6aca552a1ba79a6a530891a7 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 26382d0a1081da0b7e3fedfca8e699e7fba856e1..9aa20999ecd5c23a886715ba35631a2ec7a0d329 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 4c4f3b42c5b35fb30a7a8d6260b136d40b06537e..c48d4b23be81ba53bf3a2725e25041d05b09e482 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 327ffccc58c17e13246081b563def91de392a099..05c6c2ab389a8e8a8ac6cf4beba99f32fa0bb528 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 4db984454e4a1f27606c005b02ed9114ce601c10..acc6ca291bb93e17092aea43b6077374deaab183 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 c712bf5736e8072206334f064ce8552d507c2644..16f83d3b814deff1b43446678001c9099a303398 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 9566d57504a09493e76ba87976fec0281b6627e2..03be2839c2839c9cd544c479249f9bf5329846b6 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 5c0383c0a1a1407aa8308e76476a6f3df56db8ba..bd366f6c73fdec42ffac99c0645c988266ac77dd 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 { /**