From 181445e1e3758ef2e6ab9694272ae588d6fa2802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Mummert?= Date: Sun, 22 Feb 2026 08:56:17 +0100 Subject: [PATCH] Add event teaser data attribute listener --- .../EventTeaserDataAttributesListener.php | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/EventListener/EventTeaserDataAttributesListener.php diff --git a/src/EventListener/EventTeaserDataAttributesListener.php b/src/EventListener/EventTeaserDataAttributesListener.php new file mode 100644 index 0000000..5d034c5 --- /dev/null +++ b/src/EventListener/EventTeaserDataAttributesListener.php @@ -0,0 +1,104 @@ + $eventsPerDay) { + foreach ($eventsPerDay as $timeKey => $eventsPerTime) { + foreach ($eventsPerTime as $index => $event) { + if (!isset($event['id'])) { + $events[$dayKey][$timeKey][$index]['location_id'] = null; + $events[$dayKey][$timeKey][$index]['event_tags'] = ''; + $events[$dayKey][$timeKey][$index]['event_org'] = ''; + + continue; + } + + $eventId = (int) $event['id']; + + if (isset($event['location_id']) && '' !== (string) $event['location_id']) { + $events[$dayKey][$timeKey][$index]['location_id'] = (int) $event['location_id']; + } else { + $eventModel = CalendarEventsModel::findById($eventId); + $events[$dayKey][$timeKey][$index]['location_id'] = $eventModel ? (int) $eventModel->location_id : null; + } + + $events[$dayKey][$timeKey][$index]['event_tags'] = implode(',', $this->fetchTagIds($eventId)); + $events[$dayKey][$timeKey][$index]['event_org'] = implode(',', $this->fetchOrganizationIds($eventId)); + } + } + } + + return $events; + } + + /** @return list */ + private function fetchTagIds(int $eventId): array + { + if ($eventId <= 0) { + return []; + } + + $ids = $this->connection->createQueryBuilder() + ->select('tag_id') + ->from('tl_tags_rel') + ->where('ptable = :ptable') + ->andWhere('field = :field') + ->andWhere('pid = :pid') + ->setParameter('ptable', 'tl_calendar_events') + ->setParameter('field', 'tags') + ->setParameter('pid', $eventId, ParameterType::INTEGER) + ->orderBy('tag_id', 'ASC') + ->executeQuery() + ->fetchFirstColumn(); + + return array_values(array_unique(array_map('intval', $ids))); + } + + /** @return list */ + private function fetchOrganizationIds(int $eventId): array + { + if ($eventId <= 0) { + return []; + } + + $tables = ['tl_events_organization', 'tl_calendar_events_organization']; + + foreach ($tables as $table) { + try { + $ids = $this->connection->createQueryBuilder() + ->select('organization_id') + ->from($table) + ->where('event_id = :eventId') + ->setParameter('eventId', $eventId, ParameterType::INTEGER) + ->orderBy('organization_id', 'ASC') + ->executeQuery() + ->fetchFirstColumn(); + + return array_values(array_unique(array_map('intval', $ids))); + } catch (Exception) { + continue; + } + } + + return []; + } +}