1<?php 2 3namespace Drupal\content_moderation\Plugin\Field\FieldFormatter; 4 5use Drupal\content_moderation\ModerationInformationInterface; 6use Drupal\Core\Field\FieldDefinitionInterface; 7use Drupal\Core\Field\FormatterBase; 8use Drupal\Core\Field\FieldItemListInterface; 9use Symfony\Component\DependencyInjection\ContainerInterface; 10 11/** 12 * Plugin implementation of the 'content_moderation_state' formatter. 13 * 14 * @FieldFormatter( 15 * id = "content_moderation_state", 16 * label = @Translation("Content moderation state"), 17 * field_types = { 18 * "string", 19 * } 20 * ) 21 */ 22class ContentModerationStateFormatter extends FormatterBase { 23 24 /** 25 * The moderation information service. 26 * 27 * @var \Drupal\content_moderation\ModerationInformationInterface 28 */ 29 protected $moderationInformation; 30 31 /** 32 * Create an instance of ContentModerationStateFormatter. 33 */ 34 public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, ModerationInformationInterface $moderation_information) { 35 parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings); 36 $this->moderationInformation = $moderation_information; 37 } 38 39 /** 40 * {@inheritdoc} 41 */ 42 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { 43 return new static( 44 $plugin_id, 45 $plugin_definition, 46 $configuration['field_definition'], 47 $configuration['settings'], 48 $configuration['label'], 49 $configuration['view_mode'], 50 $configuration['third_party_settings'], 51 $container->get('content_moderation.moderation_information') 52 ); 53 } 54 55 /** 56 * {@inheritdoc} 57 */ 58 public function viewElements(FieldItemListInterface $items, $langcode) { 59 $elements = []; 60 $workflow = $this->moderationInformation->getWorkflowForEntity($items->getEntity()); 61 foreach ($items as $delta => $item) { 62 $elements[$delta] = [ 63 '#markup' => $workflow->getTypePlugin()->getState($item->value)->label(), 64 ]; 65 } 66 return $elements; 67 } 68 69 /** 70 * {@inheritdoc} 71 */ 72 public static function isApplicable(FieldDefinitionInterface $field_definition) { 73 return $field_definition->getName() === 'moderation_state' && $field_definition->getTargetEntityTypeId() !== 'content_moderation_state'; 74 } 75 76} 77