From 3c8376a41c24b62cd28c052bae015461f14a2271 Mon Sep 17 00:00:00 2001 From: aynsix Date: Tue, 5 Oct 2021 15:06:32 +0300 Subject: [PATCH 1/3] fix image preview --- lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php | 2 +- templates/web/common/thumbnail.html.twig | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php index 5a3a9e145c..fa3c53bc6b 100644 --- a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php +++ b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php @@ -343,7 +343,7 @@ class PhraseanetExtension extends \Twig_Extension } elseif ($record instanceof \record_adapter) { if (null !== $thumbnail = $record->get_subdef($subdefName)) { if ('' !== $path = $thumbnail->getRealPath()) { - $etag = $thumbnail->getEtag(); + $etag = dechex(crc32(dechex($record->get_subdef($subdefName)->get_modification_date()->getTimestamp() ^ 0x5A5A5A5A))); return $staticMode->getUrl($path, $etag); } } diff --git a/templates/web/common/thumbnail.html.twig b/templates/web/common/thumbnail.html.twig index 45a31dfb05..1a3b1353ba 100644 --- a/templates/web/common/thumbnail.html.twig +++ b/templates/web/common/thumbnail.html.twig @@ -40,6 +40,10 @@ frameborder="0" allowfullscreen> {% else %} + {% if thumbnail.get_name() == 'preview' %} + {% set url = app.getAuthenticator().isAuthenticated() ? record_subdef_url(thumbnail.get_record(), "preview") : thumbnail.get_permalink().get_url() %} + {% endif %} + {% set fit_size = fitIn( {"width":original_w, "height":original_h}, {"width":box_w, "height":box_h} From 28913644584f1bdccedf5ba5bd0ea48e77d9d426 Mon Sep 17 00:00:00 2001 From: aynsix Date: Wed, 6 Oct 2021 10:40:24 +0300 Subject: [PATCH 2/3] change etag after rotation --- .../Phrasea/Twig/PhraseanetExtension.php | 2 +- lib/classes/media/subdef.php | 21 +++++++++++++++---- templates/web/common/thumbnail.html.twig | 4 ---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php index fa3c53bc6b..5a3a9e145c 100644 --- a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php +++ b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php @@ -343,7 +343,7 @@ class PhraseanetExtension extends \Twig_Extension } elseif ($record instanceof \record_adapter) { if (null !== $thumbnail = $record->get_subdef($subdefName)) { if ('' !== $path = $thumbnail->getRealPath()) { - $etag = dechex(crc32(dechex($record->get_subdef($subdefName)->get_modification_date()->getTimestamp() ^ 0x5A5A5A5A))); + $etag = $thumbnail->getEtag(); return $staticMode->getUrl($path, $etag); } } diff --git a/lib/classes/media/subdef.php b/lib/classes/media/subdef.php index 53b8b290bc..d151b71c94 100644 --- a/lib/classes/media/subdef.php +++ b/lib/classes/media/subdef.php @@ -362,11 +362,12 @@ class media_subdef extends media_abstract implements cache_cacheableInterface public function getEtag() { - if (!$this->etag && $this->is_physically_present()) { - $file = new SplFileInfo($this->getRealPath()); - + $file = new SplFileInfo($this->getRealPath()); + // etag is generated from md5 of path and file last modified time + // so check if etag is to be changed + if ((!$this->etag && $this->is_physically_present()) || $this->etag != md5($file->getRealPath() . $file->getMTime())) { if ($file->isFile()) { - $this->setEtag(md5($file->getRealPath() . $file->getMTime())); + $this->generateEtag($file); } } @@ -573,6 +574,10 @@ class media_subdef extends media_abstract implements cache_cacheableInterface $this->width = $media->getWidth(); $this->height = $media->getHeight(); + // generate a new etag after rotation + $file = new SplFileInfo($this->getRealPath()); + $this->generateEtag($file); + return $this->save(); } @@ -799,6 +804,14 @@ class media_subdef extends media_abstract implements cache_cacheableInterface return $this->app['phraseanet.h264']->getUrl($this->getRealPath()); } + /** + * @param SplFileInfo $file + */ + private function generateEtag(SplFileInfo $file) + { + $this->setEtag(md5($file->getRealPath() . $file->getMTime())); + } + /** * @return $this */ diff --git a/templates/web/common/thumbnail.html.twig b/templates/web/common/thumbnail.html.twig index 1a3b1353ba..45a31dfb05 100644 --- a/templates/web/common/thumbnail.html.twig +++ b/templates/web/common/thumbnail.html.twig @@ -40,10 +40,6 @@ frameborder="0" allowfullscreen> {% else %} - {% if thumbnail.get_name() == 'preview' %} - {% set url = app.getAuthenticator().isAuthenticated() ? record_subdef_url(thumbnail.get_record(), "preview") : thumbnail.get_permalink().get_url() %} - {% endif %} - {% set fit_size = fitIn( {"width":original_w, "height":original_h}, {"width":box_w, "height":box_h} From 569a1b4dcfe8bb433c67f1b335bf325bc89bb381 Mon Sep 17 00:00:00 2001 From: aynsix Date: Wed, 6 Oct 2021 14:53:26 +0300 Subject: [PATCH 3/3] fix --- lib/classes/media/subdef.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/classes/media/subdef.php b/lib/classes/media/subdef.php index d151b71c94..7f4f2739bd 100644 --- a/lib/classes/media/subdef.php +++ b/lib/classes/media/subdef.php @@ -362,10 +362,8 @@ class media_subdef extends media_abstract implements cache_cacheableInterface public function getEtag() { - $file = new SplFileInfo($this->getRealPath()); - // etag is generated from md5 of path and file last modified time - // so check if etag is to be changed - if ((!$this->etag && $this->is_physically_present()) || $this->etag != md5($file->getRealPath() . $file->getMTime())) { + if ((!$this->etag && $this->is_physically_present())) { + $file = new SplFileInfo($this->getRealPath()); if ($file->isFile()) { $this->generateEtag($file); } @@ -576,9 +574,9 @@ class media_subdef extends media_abstract implements cache_cacheableInterface // generate a new etag after rotation $file = new SplFileInfo($this->getRealPath()); - $this->generateEtag($file); + $this->generateEtag($file); // with repository save - return $this->save(); + return $this; } /**