diff options
author | Andreas Hubel | 2020-10-31 20:14:51 +0100 |
---|---|---|
committer | Andreas Hubel | 2020-10-31 20:40:13 +0100 |
commit | 0fd79c1736925b34d10728ae0ad0d6f9434602bf (patch) | |
tree | 906ec262edd27b77ef58598e88071c56d104a26f /view/config-json.php | |
parent | d48b92a92a7ae2ae6412b3c0bbcc531f059a814b (diff) |
add config.json api route
Diffstat (limited to '')
-rw-r--r-- | view/config-json.php | 94 |
1 files changed, 94 insertions, 0 deletions
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 @@ +<?php + +header('Content-Type: application/json'); + +function formatConference($conference) { + return array( + 'conference' => 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); |