diff --git a/src/EventListener/OrganizationListingTemplateDataListener.php b/src/EventListener/OrganizationListingTemplateDataListener.php index 282b8b8..5704175 100644 --- a/src/EventListener/OrganizationListingTemplateDataListener.php +++ b/src/EventListener/OrganizationListingTemplateDataListener.php @@ -53,7 +53,7 @@ class OrganizationListingTemplateDataListener $organizationIds = array_values(array_unique(array_values($rowToOrganizationIdMap))); $organizationTagMap = $this->fetchOrganizationTagMap($organizationIds); - $organizationLogoUuidMap = $this->fetchOrganizationLogoUuidMap($organizationIds); + $organizationLogoMap = $this->fetchOrganizationLogoMap($organizationIds); $organizationTagLabelMap = []; $rowTagIdsList = []; @@ -74,7 +74,9 @@ class OrganizationListingTemplateDataListener } $tagData = $organizationTagMap[$organizationId] ?? ['ids' => [], 'labels' => []]; - $logoUuid = $organizationLogoUuidMap[$organizationId] ?? ''; + $logoData = $organizationLogoMap[$organizationId] ?? ['uuid' => '', 'isSvg' => false]; + $logoUuid = (string) ($logoData['uuid'] ?? ''); + $logoIsSvg = (bool) ($logoData['isSvg'] ?? false); $tagIdsCsv = implode(',', $tagData['ids']); $tagLabelsCsv = implode(', ', $tagData['labels']); @@ -84,6 +86,7 @@ class OrganizationListingTemplateDataListener if ('' !== $logoUuid) { $tbody[$rowIndex]['logo_uuid']['content'] = $logoUuid; + $tbody[$rowIndex]['logo_is_svg']['content'] = $logoIsSvg ? '1' : ''; } } @@ -266,16 +269,19 @@ class OrganizationListingTemplateDataListener } /** @param list $organizationIds - * @return array + * @return array */ - private function fetchOrganizationLogoUuidMap(array $organizationIds): array + private function fetchOrganizationLogoMap(array $organizationIds): array { if ([] === $organizationIds) { return []; } $rows = $this->connection->executeQuery( - 'SELECT o.id AS organization_id, o.logo AS logo_uuid FROM tl_organization o WHERE o.id IN (?)', + 'SELECT o.id AS organization_id, o.logo AS logo_uuid, f.extension AS file_extension, f.path AS file_path + FROM tl_organization o + LEFT JOIN tl_files f ON f.uuid = o.logo + WHERE o.id IN (?)', [$organizationIds], [ArrayParameterType::INTEGER], )->fetchAllAssociative(); @@ -285,12 +291,22 @@ class OrganizationListingTemplateDataListener foreach ($rows as $row) { $organizationId = (int) ($row['organization_id'] ?? 0); $logoUuid = $this->normalizeUuid($row['logo_uuid'] ?? null); + $extension = strtolower(trim((string) ($row['file_extension'] ?? ''))); + + if ('' === $extension && isset($row['file_path']) && \is_scalar($row['file_path'])) { + $extension = strtolower((string) pathinfo((string) $row['file_path'], PATHINFO_EXTENSION)); + } + + $isSvg = 'svg' === $extension; if ($organizationId <= 0 || '' === $logoUuid) { continue; } - $map[$organizationId] = $logoUuid; + $map[$organizationId] = [ + 'uuid' => $logoUuid, + 'isSvg' => $isSvg, + ]; } return $map;