az_blob_fs-8.x-1.x-dev/src/AzBlobImageStylesWarmer.php

src/AzBlobImageStylesWarmer.php
<?php

namespace Drupal\az_blob_fs;

use Drupal\az_blob_fs\Constants\AzBlobFsConstants;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Image\ImageFactory;
use Drupal\Core\Queue\QueueFactory;
use Drupal\file\FileInterface;
use Drupal\file\Validation\FileValidatorInterface;

/**
 * Defines an Azure Blob images styles warmer.
 */
class AzBlobImageStylesWarmer implements AzBlobImageStylesWarmerInterface {

  /**
   * Config factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $config;

  /**
   * The file entity storage.
   *
   * @var \Drupal\file\FileStorageInterface
   */
  protected $file;

  /**
   * The image factory.
   *
   * @var \Drupal\Core\Image\ImageFactory
   */
  protected $image;

  /**
   * The image style entity storage.
   *
   * @var \Drupal\image\ImageStyleStorageInterface
   */
  protected $imageStyles;

  /**
   * The queue factory.
   *
   * @var \Drupal\Core\Queue\QueueFactory
   */
  protected $queueFactory;

  /**
   * The file validator service.
   *
   * @var \Drupal\file\Validation\FileValidatorInterface
   */
  protected $fileValidator;

  /**
   * Constructs a AzBlobImageStylesWarmer object.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The config factory.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The file storage.
   * @param \Drupal\Core\Image\ImageFactory $image_factory
   *   The image factory.
   * @param \Drupal\Core\Queue\QueueFactory $queue_factory
   *   The queue factory.
   * @param \Drupal\file\Validation\FileValidatorInterface $file_validator
   *   The file validator service.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function __construct(ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $entity_type_manager, ImageFactory $image_factory, QueueFactory $queue_factory, FileValidatorInterface $file_validator) {
    $this->config = $config_factory->get('az_blob_fs.settings');
    $this->file = $entity_type_manager->getStorage('file');
    $this->image = $image_factory;
    $this->imageStyles = $entity_type_manager->getStorage('image_style');
    $this->queueFactory = $queue_factory;
    $this->fileValidator = $file_validator;
  }

  /**
   * {@inheritdoc}
   */
  public function warmUp(FileInterface $file) {
    $initialImageStyles = $this->config->get('az_blob_initial_image_styles');
    if (!empty($initialImageStyles)) {
      $this->doWarmUp($file, array_keys($initialImageStyles));
    }
    $queueImageStyles = $this->config->get('az_blob_queue_image_styles');
    if (!empty($queueImageStyles)) {
      $this->addQueue($file, array_keys($queueImageStyles));
    }
  }

  /**
   * {@inheritdoc}
   */
  public function doWarmUp(FileInterface $file, array $image_styles) {
    if (empty($image_styles) || !$this->validateImage($file)) {
      return;
    }

    /** @var \Drupal\Core\Image\Image $image */
    /** @var \Drupal\image\Entity\ImageStyle $style */

    // Create image derivatives if they not already exists.
    $styles = $this->imageStyles->loadMultiple($image_styles);
    $image_uri = $file->getFileUri();
    foreach ($styles as $style) {
      $derivative_uri = $style->buildUri($image_uri);
      if (!file_exists($derivative_uri)) {
        $style->createDerivative($image_uri, $derivative_uri);
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function addQueue(FileInterface $file, array $image_styles) {
    if (!empty($image_styles) && $this->validateImage($file)) {
      $queue = $this->queueFactory->get('az_blob_fs_images_pregenerator');
      $data = ['file_id' => $file->id(), 'image_styles' => $image_styles];
      $queue->createItem($data);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function validateImage(FileInterface $file): bool {
    // Make sure file is permanent and is using Azure blob scheme.
    if ($file->isPermanent() && strpos($file->getFileUri(), AzBlobFsConstants::SCHEME, 0) !== FALSE) {
      $image = $this->image->get($file->getFileUri());
      $extensions = $image->getToolkit()->getSupportedExtensions();
      $violations = $this->fileValidator->validate($file, $extensions);
      // Make sure we have valid image.
      if ($image->isValid() && count($violations) === 0) {
        return TRUE;
      }
    }
    return FALSE;
  }

}

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

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