From 0fd79c1736925b34d10728ae0ad0d6f9434602bf Mon Sep 17 00:00:00 2001 From: Andreas Hubel Date: Sat, 31 Oct 2020 20:14:51 +0100 Subject: add config.json api route --- view/config-json.php | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 view/config-json.php (limited to 'view') diff --git a/view/config-json.php b/view/config-json.php new file mode 100644 index 0000000..e6d26e4 --- /dev/null +++ b/view/config-json.php @@ -0,0 +1,94 @@ + array( + 'title' => $conference->getTitle(), + 'acronym' => $conference->getSlug(), + 'organizer' => $conference->getAuthor(), + 'description' => $conference->getDescription(), + 'keywords' => $conference->hasKeywords() ? preg_split('/,\s*/', $conference->getKeywords()) : null, + 'start' => $conference->startsAt() ? $conference->startsAt()->format('c') : null, + 'end' => $conference->endsAt() ? $conference->endsAt()->format('c') : null, + 'streamingConfig' => array( + //'closed' => null, + //'unlisted' => $conference->isUnlisted(), + 'features' => array( + 'embed' => $conference->get('EMBED', false), + 'relive' => $conference->hasRelive(), + 'feedback' => $conference->hasFeedback(), + 'irc' => lowerCaseKeys($conference->get('IRC', false)), + 'twitter' => lowerCaseKeys($conference->get('TWITTER', false)), + ), + 'schedule' => lowerCaseKeys($conference->get('SCHEDULE')), + 'overviewPage' => array( + 'sections' => formatSections($conference->get('OVERVIEW.GROUPS')), + ), + 'html' => array( + 'banner' => $conference->getBannerHtml(), + 'footer' => $conference->getFooterHtml(), + 'not_started' => $conference->getNotStartedHtml(), + ), + 'extraFiles' => $conference->get('EXTRA_FILES'), + ), + 'rooms' => formatRooms($conference), + ), + ); +} + +function formatRooms($conference) { + $struct = []; + + foreach($conference->getRooms() as $room) { + $config = $conference->get('ROOMS.'.$room->getSlug()); + $struct[] = array( + 'name' => $room->getDisplay(), + 'slug' => $room->getSlug(), + 'livestreamId' => $room->getStream(), + 'streamingConfig' => lowerCaseKeys($config), + ); + } + return $struct; +} + +function formatSections($pageConfig) { + $struct = []; + + foreach($pageConfig as $sectionTitle => $rooms) + { + $section = array( + 'title' => $sectionTitle, + 'rooms' => [], + ); + + foreach($rooms as $room) + { + $section['rooms'][] = array( + 'slug' => $room, + ); + } + $struct[] = $section; + } + return $struct; +} + +function lowerCaseKeys($config) +{ + return array_map(function($item) { + return is_array($item) ? lowerCaseKeys($item) : $item; + }, array_change_key_case($config)); +} + +if (!empty($conference)) { + $struct = formatConference($conference); +} +else { + $struct = []; + foreach (Conferences::getActiveConferences() as $conference) + { + $struct[] = formatConference($conference); + } +} +echo json_encode($struct, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); -- cgit v1.2.3