PhotosImageMediaFieldFormatter.php in Album Photos 6.0.x
File
src/Plugin/Field/FieldFormatter/PhotosImageMediaFieldFormatter.php
View source
<?php
namespace Drupal\photos\Plugin\Field\FieldFormatter;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
use Drupal\Core\Form\FormStateInterface;
use Drupal\media\Plugin\Field\FieldFormatter\MediaThumbnailFormatter;
class PhotosImageMediaFieldFormatter extends MediaThumbnailFormatter {
protected function needsEntityLoad(EntityReferenceItem $item) {
return !$item
->hasNewEntity();
}
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = parent::settingsForm($form, $form_state);
$element['image_link']['#options']['photos_album'] = 'Album';
return $element;
}
public function settingsSummary() {
$summary = parent::settingsSummary();
$link_types = [
'photos_album' => $this
->t('Linked to album'),
];
$image_link_setting = $this
->getSetting('image_link');
if (isset($link_types[$image_link_setting])) {
$summary[] = $link_types[$image_link_setting];
}
return $summary;
}
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = parent::viewElements($items, $langcode);
$imageLinkSetting = $this
->getSetting('image_link');
if ($imageLinkSetting == 'photos_album') {
$photosImage = $items
->getEntity();
$url = $photosImage
->getAlbumUrl();
foreach ($elements as $delta => $element) {
$element['#url'] = $url;
$elements[$delta] = $element;
}
}
return $elements;
}
public static function isApplicable(FieldDefinitionInterface $field_definition) {
$entityType = $field_definition
->getTargetEntityTypeId();
$targetType = $field_definition
->getFieldStorageDefinition()
->getSetting('target_type');
return $entityType == 'photos_image' && $targetType == 'media';
}
}