From 47afbc7f4335e9f0b76d3361e8afa3d6dd5063f6 Mon Sep 17 00:00:00 2001 From: Terranom674 Date: Wed, 19 Aug 2026 22:38:54 +0200 Subject: [PATCH] Fix watermark context for album overview covers --- include/watermark_runtime.inc.php | 68 ++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/include/watermark_runtime.inc.php b/include/watermark_runtime.inc.php index 97adee4..4e78c07 100644 --- a/include/watermark_runtime.inc.php +++ b/include/watermark_runtime.inc.php @@ -27,6 +27,72 @@ function bratonien_tools_runtime_category_id() return 0; } +function bratonien_tools_watermark_album_cover_category($src_image, $category_id=null) +{ + static $map = null; + + if ($map === null) + { + $map = new SplObjectStorage(); + } + + if (!is_object($src_image)) + { + return 0; + } + + if ($category_id !== null) + { + $category_id = (int)$category_id; + if ($category_id > 0) + { + $map[$src_image] = $category_id; + } + return $category_id; + } + + return $map->contains($src_image) ? (int)$map[$src_image] : 0; +} + +function bratonien_tools_watermark_prepare_album_overview($thumbnails) +{ + if (!is_array($thumbnails)) + { + return $thumbnails; + } + + foreach ($thumbnails as &$thumbnail) + { + $category_id = (int)($thumbnail['id'] ?? $thumbnail['ID'] ?? 0); + if ($category_id < 1 || empty($thumbnail['representative']['src_image']) || !is_object($thumbnail['representative']['src_image'])) + { + continue; + } + + // Ein Repraesentantenbild kann fuer mehrere Alben verwendet werden. Piwigo + // reicht in der Albumuebersicht aber nur das SrcImage an get_derivative_url + // weiter. Deshalb bekommt jedes Album-Cover eine eigene SrcImage-Instanz, + // damit seine konkrete Albumregel erhalten bleibt. + $src_image = clone $thumbnail['representative']['src_image']; + $thumbnail['representative']['src_image'] = $src_image; + bratonien_tools_watermark_album_cover_category($src_image, $category_id); + } + unset($thumbnail); + + return $thumbnails; +} + +function bratonien_tools_runtime_derivative_category_id($src_image) +{ + $category_id = bratonien_tools_runtime_category_id(); + if ($category_id > 0) + { + return $category_id; + } + + return bratonien_tools_watermark_album_cover_category($src_image); +} + function bratonien_tools_runtime_effective_rule($category_id) { static $categories = null; @@ -230,7 +296,7 @@ function bratonien_tools_filter_derivative_url($url, $params, $src_image, $rel_u return $url; } - $rule = bratonien_tools_runtime_effective_rule(bratonien_tools_runtime_category_id()); + $rule = bratonien_tools_runtime_effective_rule(bratonien_tools_runtime_derivative_category_id($src_image)); if ($rule['mode'] !== 'profile' || empty($rule['profile_id'])) { return $url;