ImageStylesWarmer.php in Image Style Warmer 8
File
src/ImageStylesWarmer.php
View source
<?php
namespace Drupal\image_style_warmer;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Image\ImageFactory;
use Drupal\Core\Queue\QueueFactory;
use Drupal\file\FileInterface;
class ImageStylesWarmer implements ImageStylesWarmerInterface {
protected $config;
protected $file;
protected $image;
protected $imageStyles;
protected $queueFactory;
public function __construct(ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $file_storage, ImageFactory $image_factory, EntityTypeManagerInterface $image_style_storage, QueueFactory $queue_factory) {
$this->config = $config_factory
->get('image_style_warmer.settings');
$this->file = $file_storage
->getStorage('file');
$this->image = $image_factory;
$this->imageStyles = $image_style_storage
->getStorage('image_style');
$this->queueFactory = $queue_factory;
}
public function warmUp(FileInterface $file) {
$initialImageStyles = $this->config
->get('initial_image_styles');
if (!empty($initialImageStyles)) {
$this
->doWarmUp($file, array_keys($initialImageStyles));
}
$queueImageStyles = $this->config
->get('queue_image_styles');
if (!empty($queueImageStyles)) {
$this
->addQueue($file, array_keys($queueImageStyles));
}
}
public function doWarmUp(FileInterface $file, array $image_styles) {
if (empty($image_styles) || !$this
->validateImage($file)) {
return;
}
$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);
}
}
}
public function initialWarmUp(FileInterface $file) {
$initialImageStyles = $this->config
->get('initial_image_styles');
if (!empty($initialImageStyles)) {
$this
->doWarmUp($file, array_keys($initialImageStyles));
}
}
public function queueWarmUp(FileInterface $file) {
$queueImageStyles = $this->config
->get('queue_image_styles');
if (!empty($queueImageStyles)) {
$this
->doWarmUp($file, array_keys($queueImageStyles));
}
}
public function addQueue(FileInterface $file, array $image_styles) {
if (!empty($image_styles) && $this
->validateImage($file)) {
$queue = $this->queueFactory
->get('image_style_warmer_pregenerator');
$data = [
'file_id' => $file
->id(),
'image_styles' => $image_styles,
];
$queue
->createItem($data);
}
}
public function validateImage(FileInterface $file) {
if ($file
->isPermanent()) {
$image = $this->image
->get($file
->getFileUri());
$extensions = implode(' ', $image
->getToolkit()
->getSupportedExtensions());
if ($image
->isValid() && empty(file_validate_extensions($file, $extensions))) {
return TRUE;
}
}
return FALSE;
}
}