From 35d5ac5362b2554258fa75ca0132a49e83bcf1c6 Mon Sep 17 00:00:00 2001
From: Dan Garner <dan@xibosignage.com>
Date: Tue, 24 Dec 2024 13:42:00 +0000
Subject: [PATCH] Library: fix filtering issue with media used as background
 images on layouts (#2840)

fixes xibosignageltd/xibo-private#879
---
 lib/Factory/MediaFactory.php          | 21 +++++++++++++++------
 lib/Factory/ModuleTemplateFactory.php |  2 +-
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/lib/Factory/MediaFactory.php b/lib/Factory/MediaFactory.php
index 758696fec..c2c77f523 100644
--- a/lib/Factory/MediaFactory.php
+++ b/lib/Factory/MediaFactory.php
@@ -791,9 +791,14 @@ class MediaFactory extends BaseFactory
                         ON widget.widgetId = lkwidgetmedia.widgetId
                      WHERE region.layoutId = :layoutId ';
 
-            // include Media only for non dynamic Playlists #2392
+            // include Media only for non-dynamic Playlists #2392
             if ($sanitizedFilter->getInt('excludeDynamicPlaylistMedia') === 1) {
-                $body .= ' AND lkplaylistplaylist.childId IN (SELECT playlistId FROM playlist WHERE playlist.playlistId = lkplaylistplaylist.childId AND playlist.isDynamic = 0) ';
+                $body .= ' AND lkplaylistplaylist.childId IN (
+                    SELECT playlistId 
+                      FROM playlist
+                     WHERE playlist.playlistId = lkplaylistplaylist.childId 
+                       AND playlist.isDynamic = 0
+                    ) ';
             }
 
             if ($sanitizedFilter->getInt('widgetId') !== null) {
@@ -801,14 +806,18 @@ class MediaFactory extends BaseFactory
                 $params['widgetId'] = $sanitizedFilter->getInt('widgetId');
             }
 
+            if ($sanitizedFilter->getInt('includeLayoutBackgroundImage') === 1) {
+                $body .= ' UNION ALL
+                    SELECT `layout`.backgroundImageId AS mediaId
+                      FROM `layout`
+                     WHERE `layout`.layoutId = :layoutId
+                    ';
+            }
+
             $body .= '    )
                 AND media.type <> \'module\'
             ';
 
-            if ($sanitizedFilter->getInt('includeLayoutBackgroundImage') === 1) {
-                $body .= ' OR media.mediaId IN ( SELECT `layout`.backgroundImageId FROM `layout` WHERE `layout`.layoutId = :layoutId ) ';
-            }
-
             $params['layoutId'] = $sanitizedFilter->getInt('layoutId');
         }
 
diff --git a/lib/Factory/ModuleTemplateFactory.php b/lib/Factory/ModuleTemplateFactory.php
index 6a6e96730..4c2f39fe6 100644
--- a/lib/Factory/ModuleTemplateFactory.php
+++ b/lib/Factory/ModuleTemplateFactory.php
@@ -340,7 +340,7 @@ class ModuleTemplateFactory extends BaseFactory
             $template->templateId = $row['templateId'];
             $template->dataType = $row['dataType'];
             $template->isEnabled = $row['enabled'] == 1;
-            $template->ownerId = intval($row['ownerId']);
+            $template->ownerId = intval($row['ownerId'] ?? 0);
             $template->groupsWithPermissions = $row['groupsWithPermissions'];
             $templates[] = $template;
         }
-- 
GitLab