136 lines
3.5 KiB
136 lines
3.5 KiB
<?php |
|
|
|
namespace Drupal\islandora\Plugin\Field\FieldFormatter; |
|
|
|
use Drupal\Core\Entity\EntityStorageInterface; |
|
use Drupal\Core\Field\FieldDefinitionInterface; |
|
use Drupal\Core\Field\FieldItemListInterface; |
|
use Drupal\Core\Session\AccountInterface; |
|
use Drupal\image\Plugin\Field\FieldFormatter\ImageFormatter; |
|
use Drupal\islandora\IslandoraUtils; |
|
use Symfony\Component\DependencyInjection\ContainerInterface; |
|
|
|
/** |
|
* Plugin implementation of the 'image' formatter for a media. |
|
* |
|
* @FieldFormatter( |
|
* id = "islandora_image", |
|
* label = @Translation("Islandora Image"), |
|
* field_types = { |
|
* "image" |
|
* }, |
|
* quickedit = { |
|
* "editor" = "image" |
|
* } |
|
* ) |
|
*/ |
|
class IslandoraImageFormatter extends ImageFormatter { |
|
|
|
/** |
|
* Islandora utility functions. |
|
* |
|
* @var \Drupal\islandora\IslandoraUtils |
|
*/ |
|
protected $utils; |
|
|
|
/** |
|
* Constructs an IslandoraImageFormatter object. |
|
* |
|
* @param string $plugin_id |
|
* The plugin_id for the formatter. |
|
* @param mixed $plugin_definition |
|
* The plugin implementation definition. |
|
* @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition |
|
* The definition of the field to which the formatter is associated. |
|
* @param array $settings |
|
* The formatter settings. |
|
* @param string $label |
|
* The formatter label display setting. |
|
* @param string $view_mode |
|
* The view mode. |
|
* @param array $third_party_settings |
|
* Any third party settings settings. |
|
* @param \Drupal\Core\Session\AccountInterface $current_user |
|
* The current user. |
|
* @param \Drupal\Core\Entity\EntityStorageInterface $image_style_storage |
|
* The image style storage. |
|
* @param \Drupal\islandora\IslandoraUtils $utils |
|
* Islandora utils. |
|
*/ |
|
public function __construct( |
|
$plugin_id, |
|
$plugin_definition, |
|
FieldDefinitionInterface $field_definition, |
|
array $settings, |
|
$label, |
|
$view_mode, |
|
array $third_party_settings, |
|
AccountInterface $current_user, |
|
EntityStorageInterface $image_style_storage, |
|
IslandoraUtils $utils |
|
) { |
|
parent::__construct( |
|
$plugin_id, |
|
$plugin_definition, |
|
$field_definition, |
|
$settings, |
|
$label, |
|
$view_mode, |
|
$third_party_settings, |
|
$current_user, |
|
$image_style_storage |
|
); |
|
$this->utils = $utils; |
|
} |
|
|
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { |
|
return new static( |
|
$plugin_id, |
|
$plugin_definition, |
|
$configuration['field_definition'], |
|
$configuration['settings'], |
|
$configuration['label'], |
|
$configuration['view_mode'], |
|
$configuration['third_party_settings'], |
|
$container->get('current_user'), |
|
$container->get('entity_type.manager')->getStorage('image_style'), |
|
$container->get('islandora.utils') |
|
); |
|
} |
|
|
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
public function viewElements(FieldItemListInterface $items, $langcode) { |
|
$elements = parent::viewElements($items, $langcode); |
|
|
|
$image_link_setting = $this->getSetting('image_link'); |
|
// Check if the formatter involves a link. |
|
if ($image_link_setting != 'content') { |
|
return $elements; |
|
} |
|
|
|
$entity = $items->getEntity(); |
|
if ($entity->isNew() || $entity->getEntityTypeId() != 'media') { |
|
return $elements; |
|
} |
|
|
|
$node = $this->utils->getParentNode($entity); |
|
|
|
if ($node === NULL) { |
|
return $elements; |
|
} |
|
|
|
$url = $node->toUrl(); |
|
|
|
foreach ($elements as &$element) { |
|
$element['#url'] = $url; |
|
} |
|
|
|
return $elements; |
|
} |
|
|
|
}
|
|
|