cloudinary-8.x-1.x-dev/modules/cloudinary_media_library_widget/src/Plugin/CloudinaryMedia/CloudinaryFile.php

modules/cloudinary_media_library_widget/src/Plugin/CloudinaryMedia/CloudinaryFile.php
<?php

namespace Drupal\cloudinary_media_library_widget\Plugin\CloudinaryMedia;

use Drupal\cloudinary_media_library_widget\Model\Asset;
use Drupal\cloudinary_media_library_widget\Plugin\CloudinaryMediaBase;
use Drupal\cloudinary_media_library_widget\Plugin\CloudinaryMediaPluginInterface;
use Drupal\file\FileInterface;
use Drupal\media\MediaInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Defines a Cloudinary media file plugin.
 *
 * @CloudinaryMedia(
 *   id = "cloudinary_file",
 *   label = @Translation("Cloudinary File"),
 *   resource_type = "raw"
 * )
 *
 * @deprecated in cloudinary:3.0.0 and is removed from cloudinary:4.0.0. Use
 *   a dedicated source plugin instead.
 *
 * @see https://www.drupal.org/project/cloudinary/issues/3314722
 */
class CloudinaryFile extends CloudinaryMediaBase implements CloudinaryMediaPluginInterface {

  /**
   * The MIME type guesser.
   *
   * @var \Symfony\Component\Mime\MimeTypeGuesserInterface
   */
  protected $mimeTypeGuesser;

  /**
   * The file system service.
   *
   * @var \Drupal\Core\File\FileSystemInterface
   */
  protected $fileSystem;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->mimeTypeGuesser = $container->get('file.mime_type.guesser');
    $instance->fileSystem = $container->get('file_system');

    return $instance;
  }

  /**
   * {@inheritdoc}
   */
  public function findMedia(Asset $asset, string $bundle): ?MediaInterface {
    $properties = [
      'name' => $asset->getPublicId(),
      'bundle' => $bundle,
    ];

    $entities = $this->entityTypeManager
      ->getStorage('media')
      ->loadByProperties($properties);

    return $entities ? end($entities) : NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function createMedia(Asset $asset, string $bundle): MediaInterface {
    if ($media = $this->findMedia($asset, $bundle)) {
      return $media;
    }

    $file = $this->createFile($asset);
    $field_name = $this->getMediaSourceFieldName($bundle);

    $media_data = [
      'bundle' => $bundle,
      'name' => $asset->getPublicId(),
      $field_name => [
        'target_id' => $file->id(),
      ],
    ];

    if ($custom_context = $asset->getCustomContext()) {
      $media_data[$field_name]['description'] = $custom_context->getAlt();
    }

    /** @var \Drupal\media\MediaInterface $media_entity */
    $media_entity = $this->entityTypeManager->getStorage('media')->create($media_data);
    $media_entity->save();

    return $media_entity;
  }

  /**
   * Create/find a file entity.
   *
   * @param \Drupal\cloudinary_media_library_widget\Model\Asset $asset
   *   Cloudinary asset.
   *
   * @return \Drupal\file\FileInterface
   *   File entity.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  protected function createFile(Asset $asset): FileInterface {
    $uri = $asset->getAssetUri($asset);

    // Check if there is already file with this file uri.
    $file = $this->entityTypeManager
      ->getStorage('file')
      ->loadByProperties([
        'uri' => $uri,
      ]);

    $file = reset($file);

    if ($file instanceof FileInterface) {
      return $file;
    }

    /** @var \Drupal\file\FileInterface $file */
    $file = $this->entityTypeManager->getStorage('file')->create([
      'filename' => $this->fileSystem->basename($uri),
      'uri' => $uri,
      'filemime' => $this->mimeTypeGuesser->guessMimeType($uri),
      'filesize' => $asset->getBytes(),
    ]);
    $file->setPermanent();
    $file->save();

    return $file;
  }

}

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

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