diff --git a/system/src/Grav/Common/Page/Medium/AbstractMedia.php b/system/src/Grav/Common/Page/Medium/AbstractMedia.php index 84d9870cc..9747d2e6c 100644 --- a/system/src/Grav/Common/Page/Medium/AbstractMedia.php +++ b/system/src/Grav/Common/Page/Medium/AbstractMedia.php @@ -62,6 +62,22 @@ abstract class AbstractMedia extends Getters implements MediaCollectionInterface return $object; } + /** + * Set file modification timestamps (query params) for all the media files. + * + * @param string|int|null $timestamp + * @return $this + */ + public function setTimestamps($timestamp = null) + { + /** @var Medium $instance */ + foreach ($this->instances as $instance) { + $instance->setTimestamp($timestamp); + } + + return $this; + } + /** * Get a list of all media. * diff --git a/system/src/Grav/Common/Page/Medium/Medium.php b/system/src/Grav/Common/Page/Medium/Medium.php index f151e8dbb..0b8738120 100644 --- a/system/src/Grav/Common/Page/Medium/Medium.php +++ b/system/src/Grav/Common/Page/Medium/Medium.php @@ -112,6 +112,35 @@ class Medium extends Data implements RenderableInterface, MediaObjectInterface return false; } + /** + * Get file modification time for the medium. + * + * @return int|null + */ + public function modified() + { + $path = $this->get('filepath'); + + if (!file_exists($path)) { + return null; + } + + return filemtime($path) ?: null; + } + + /** + * Set querystring to file modification timestamp (or value provided as a parameter). + * + * @param string|int|null $timestamp + * @return $this + */ + public function setTimestamp($timestamp = null) + { + $this->set('querystring', (string)($timestamp ?? $this->modified())); + + return $this; + } + /** * Returns an array containing just the metadata * diff --git a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php index 2651cc1da..1c502e28d 100644 --- a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php +++ b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php @@ -73,7 +73,7 @@ trait FlexMediaTrait } } - return $this->media; + return $this->media->setTimestamps(); } public function checkUploadedMediaFile(UploadedFileInterface $uploadedFile)