From cb2c583454136894ef8eed80eecf86a00f975288 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Fri, 6 May 2022 11:46:15 +0300 Subject: [PATCH] Thumbnails need to be images, other minor fixes --- system/src/Grav/Common/Media/MediaIndex.php | 4 ++-- .../Grav/Common/Media/Traits/MediaObjectTrait.php | 10 +++++++--- system/src/Grav/Common/Page/Medium/ImageMedium.php | 8 +++++++- system/src/Grav/Common/Page/Medium/Medium.php | 14 ++++++++++---- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/system/src/Grav/Common/Media/MediaIndex.php b/system/src/Grav/Common/Media/MediaIndex.php index ecf592f12..d33452f07 100644 --- a/system/src/Grav/Common/Media/MediaIndex.php +++ b/system/src/Grav/Common/Media/MediaIndex.php @@ -23,11 +23,11 @@ class MediaIndex /** @var string */ protected $filepath; - /** @var array */ + /** @var array|null */ protected $indexes; /** @var int */ protected $modified = 0; - /** @var JsonFile */ + /** @var JsonFile|null */ protected $file; /** diff --git a/system/src/Grav/Common/Media/Traits/MediaObjectTrait.php b/system/src/Grav/Common/Media/Traits/MediaObjectTrait.php index aa0e28d0d..e949afcb5 100644 --- a/system/src/Grav/Common/Media/Traits/MediaObjectTrait.php +++ b/system/src/Grav/Common/Media/Traits/MediaObjectTrait.php @@ -10,10 +10,10 @@ namespace Grav\Common\Media\Traits; use Grav\Common\Data\Data; +use Grav\Common\Media\Interfaces\ImageMediaInterface; use Grav\Common\Media\Interfaces\MediaFileInterface; use Grav\Common\Media\Interfaces\MediaLinkInterface; use Grav\Common\Media\Interfaces\MediaObjectInterface; -use Grav\Common\Page\Medium\ImageMedium; use Grav\Common\Page\Medium\ThumbnailImageMedium; use Grav\Common\Utils; use RuntimeException; @@ -611,9 +611,9 @@ trait MediaObjectTrait /** * Get the thumbnail Medium object * - * @return ThumbnailImageMedium|ImageMedium + * @return ImageMediaInterface */ - protected function getThumbnail(): ImageMedium + protected function getThumbnail(): ImageMediaInterface { if (null === $this->_thumbnail) { $thumbnails = (array)$this->get('thumbnails') + ['system' => 'system://images/media/thumb.png']; @@ -646,6 +646,10 @@ trait MediaObjectTrait throw new RuntimeException(sprintf("Default thumbnail image '%s' does not exist!", $thumbnails['system']), 500); } + if (!$image instanceof ImageMediaInterface) { + throw new RuntimeException(sprintf("Thumbnail '%s' is not an image", $image->filepath), 500); + } + $image->set('parent', $this); $this->_thumbnail = $image; } diff --git a/system/src/Grav/Common/Page/Medium/ImageMedium.php b/system/src/Grav/Common/Page/Medium/ImageMedium.php index 9e29285a2..12c163f24 100644 --- a/system/src/Grav/Common/Page/Medium/ImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/ImageMedium.php @@ -63,6 +63,9 @@ class ImageMedium extends Medium implements ImageMediaInterface, ImageManipulate 'retina_scale' => (int)$config->get('system.images.cls.retina_scale', 1) ]; + $this->imageSettings = $this->defaults; + $this->quality = $this->defaults['quality']; + $this->def('debug', $config->get('system.images.debug')); $path = $this->get('filepath'); @@ -125,9 +128,12 @@ class ImageMedium extends Medium implements ImageMediaInterface, ImageManipulate { parent::reset(); + /** @var Config $config */ + $config = $this->getGrav()['config']; + $this->format = 'guess'; $this->imageSettings = $this->defaults; - $this->quality = $this->defaults['quality'] ?? 80; + $this->quality = $this->defaults['quality'] ?? (int)$config->get('system.images.default_image_quality', 85); $this->resetImage(); diff --git a/system/src/Grav/Common/Page/Medium/Medium.php b/system/src/Grav/Common/Page/Medium/Medium.php index 6acb666a8..d9ef19fba 100644 --- a/system/src/Grav/Common/Page/Medium/Medium.php +++ b/system/src/Grav/Common/Page/Medium/Medium.php @@ -11,10 +11,10 @@ namespace Grav\Common\Page\Medium; use Grav\Common\File\CompiledYamlFile; use Grav\Common\Grav; +use Grav\Common\Media\Interfaces\ImageMediaInterface; use Grav\Common\Media\Interfaces\MediaCollectionInterface; use Grav\Common\Media\Interfaces\MediaFileInterface; use Grav\Common\Media\Interfaces\MediaLinkInterface; -use Grav\Common\Media\Interfaces\MediaObjectInterface; use Grav\Common\Media\Traits\MediaFileTrait; use Grav\Common\Media\Traits\MediaObjectTrait; use JsonSerializable; @@ -178,11 +178,17 @@ class Medium implements RenderableInterface, MediaFileInterface, JsonSerializabl /** * @param string $thumb - * @return MediaObjectInterface|null + * @return ImageMediaInterface|null + * @phpstan-impure */ - protected function createThumbnail(string $thumb): ?MediaObjectInterface + protected function createThumbnail(string $thumb): ?ImageMediaInterface { - return $this->getMedia()->createFromFile($thumb, ['type' => 'thumbnail']); + $thumbnail = $this->getMedia()->createFromFile($thumb, ['type' => 'thumbnail']); + if (!$thumbnail instanceof ImageMediaInterface) { + return null; + } + + return $thumbnail; } /**