photos-6.0.x-dev/src/Plugin/media/Source/Photos.php

src/Plugin/media/Source/Photos.php
<?php

namespace Drupal\photos\Plugin\media\Source;

use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\media\Attribute\MediaSource;
use Drupal\media\MediaInterface;
use Drupal\media\MediaSourceBase;
use Drupal\photos\PhotosAlbum;

/**
 * Photos album media source.
 *
 * @see \Drupal\photos\PhotosAlbum
 */
#[MediaSource(
  id: "photos",
  label: new TranslatableMarkup("Photos"),
  description: new TranslatableMarkup("Use photos albums as reusable media."),
  allowed_field_types: ["entity_reference"],
  default_thumbnail_filename: "no-thumbnail.png",
  thumbnail_alt_metadata_attribute: "thumbnail_alt_value"
)]
class Photos extends MediaSourceBase {

  /**
   * {@inheritdoc}
   */
  public function getMetadataAttributes() {
    // @todo check default album settings?
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function getMetadata(MediaInterface $media, $attribute_name) {
    // @todo default thumbnail?
    $source_field = $this->configuration['source_field'];

    // If the source field is not required, it may be empty.
    if (!$source_field) {
      return parent::getMetadata($media, $attribute_name);
    }
    switch ($attribute_name) {
      case 'default_name':
        $nid = $media->get($source_field)->target_id;
        $node = $this->entityTypeManager->getStorage('node')->load($nid);
        if ($node) {
          return $node->getTitle();
        }
        return parent::getMetadata($media, $attribute_name);

      case 'thumbnail_uri':
        $nid = $media->get($source_field)->target_id;
        $node = $this->entityTypeManager->getStorage('node')->load($nid);
        if (isset($node->album) && isset($node->album['cover_id'])) {
          // Get cover image URI if available.
          $cover_id = $node->album['cover_id'];
          $photos_album = new PhotosAlbum($node->id());
          return $photos_album->getCover($cover_id, TRUE);
        }
      default:
        return parent::getMetadata($media, $attribute_name);
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc