From be515f5150f20c773371f680efad58f2d0fcaaf0 Mon Sep 17 00:00:00 2001 From: Benjamin Peter Date: Sat, 9 Dec 2017 23:44:47 +0100 Subject: Added multple translation tracks with configurable endpoints and labels --- model/Conferences.php | 38 +++++++++++++++++++++++++---------- model/Room.php | 53 +++++++++++++++++++++++++++++++++++++++++-------- model/RoomSelection.php | 16 +++++++++------ model/Stream.php | 12 ++++++++--- 4 files changed, 92 insertions(+), 27 deletions(-) (limited to 'model') diff --git a/model/Conferences.php b/model/Conferences.php index f7276ac..eb07327 100644 --- a/model/Conferences.php +++ b/model/Conferences.php @@ -72,16 +72,34 @@ class Conferences return in_array($mandator, Conferences::listConferences()); } - public static function loadConferenceConfig($mandator) { - $configfile = forceslash(Conferences::MANDATOR_DIR).forceslash($mandator).'config.php'; - $config = include($configfile); - - if(!is_array($config)) { - throw new ConfigException("Loading $configfile did not return an array. Maybe it's missing a return-statement?"); - } - - return $config; - } + public static function loadConferenceConfig($mandator) { + $configfile = forceslash(Conferences::MANDATOR_DIR).forceslash($mandator).'config.php'; + $config = include($configfile); + + if(!is_array($config)) { + throw new ConfigException("Loading $configfile did not return an array. Maybe it's missing a return-statement?"); + } + + // Allow setting TRANSLATION simply to true and fill in default values for uniformity + $rooms = $config['ROOMS']; + foreach ($rooms as $slug => $room) { + if (!isset($room['TRANSLATION'])) { + $config['ROOMS'][$slug]['TRANSLATION'] = []; + } + elseif (! is_array($room['TRANSLATION'])) { + if ($room['TRANSLATION'] === true) { + $config['ROOMS'][$slug]['TRANSLATION'] = [[ + 'endpoint' => 'translated', + 'label' => 'Translated' + ]]; + } + else { + $config['ROOMS'][$slug]['TRANSLATION'] = []; + } + } + } + return $config; + } public static function getConference($mandator) { return new Conference(Conferences::loadConferenceConfig($mandator), $mandator); diff --git a/model/Room.php b/model/Room.php index 4b251cd..56dab4c 100644 --- a/model/Room.php +++ b/model/Room.php @@ -175,10 +175,40 @@ class Room return 'Adaptive multi-format-multi-bitrate-Stream to rule the World!!1elf'; } - public function hasTranslation() { + public function getTranslations() { return $this->getConference()->get('ROOMS.'.$this->getSlug().'.TRANSLATION'); } + private function getTranslationEndpoints() { + return array_map( + function ($translation) { + return $translation['endpoint']; + }, + $this->getTranslations() + ); + } + + private function isTranslationEndpoint($endpoint) { + return in_array($endpoint, $this->getTranslationEndpoints()); + } + + private function findTranslationLabel($language) { + foreach($this->getTranslations() as $translation) { + if ($translation['endpoint'] === $language) { + return $translation['label']; + } + } + return null; + } + + public function hasTranslation() { + return count($this->getTranslations()) > 0; + } + + public function isValidLanguage($language) { + return ($language === 'native' || $this->isTranslationEndpoint($language)); + } + public function getSelectionNames() { $selections = array(); @@ -284,8 +314,9 @@ class Room foreach ($selections as $selection) { $streams[] = $this->createStreamObject($selection, 'native'); - if($this->hasTranslation()) - $streams[] = $this->createStreamObject($selection, 'translated'); + foreach ($this->getTranslations() as $translation) { + $streams[] = $this->createStreamObject($selection, $translation['endpoint'], $translation['label']); + } } return $streams; @@ -305,17 +336,23 @@ class Room if(!in_array($selection, $selections)) throw new NotFoundException('Selection '.$selection.' in Room '.$this->getSlug()); - if($language == 'translated' && !$this->hasTranslation()) - throw new NotFoundException('Translated Streams of Room '.$this->getSlug()); + $translation_label = null; + if (substr($language, 0, strlen('native')) !== 'native') { + if (!$this->hasTranslation()) { + throw new NotFoundException('Translated Streams of Room '.$this->getSlug()); + } + + $translation_label = $this->findTranslationLabel($language); + } - return $this->createStreamObject($selection, $language); + return $this->createStreamObject($selection, $language, $translation_label); } - public function createStreamObject($selection, $language = 'native') + public function createStreamObject($selection, $language = 'native', $languageLabel = null) { if($language == 'native' && $this->hasStereo()) $language = 'stereo'; - return new Stream($this, $selection, $language); + return new Stream($this, $selection, $language, $languageLabel); } } diff --git a/model/RoomSelection.php b/model/RoomSelection.php index 9211c31..a83b5c6 100644 --- a/model/RoomSelection.php +++ b/model/RoomSelection.php @@ -18,20 +18,24 @@ class RoomSelection return $this->selection; } - public function getLink() - { + private function getSelectionPath() { $path = [$this->getRoom()->getConference()->getSlug(), $this->getRoom()->getSlug()]; $selection = $this->getRoom()->getSelectionNames(); - if($selection[0] != $this->getSelection()) + if ($selection[0] != $this->getSelection()) $path[] = $this->getSelection(); - return joinpath($path).url_params(); + return joinpath($path); + } + + public function getLink() + { + return $this->getSelectionPath() . url_params(); } - public function getTranslatedLink() + public function getTranslatedLink($translation_endpoint) { - return joinpath([$this->getLink(), 'translated']); + return joinpath([$this->getSelectionPath(), 'i18n', $translation_endpoint]) . url_params(); } public function getDisplay() diff --git a/model/Stream.php b/model/Stream.php index daed17f..a4dcf72 100644 --- a/model/Stream.php +++ b/model/Stream.php @@ -2,11 +2,12 @@ class Stream { - public function __construct(Room $room, $selection, $language) + public function __construct(Room $room, $selection, $language, $translation_label = null) { $this->room = $room; $this->selection = $selection; $this->language = $language; + $this->translation_label = (empty($translation_label)) ? $language : $translation_label; } public function getRoom() @@ -24,9 +25,14 @@ class Stream return $this->language; } + public function getTranslationLabel() + { + return $this->translation_label; + } + public function isTranslated() { - return $this->getLanguage() == 'translated'; + return !empty($this->getLanguage()) && $this->getLanguage() !== 'native'; } public function getVideoSize() @@ -98,7 +104,7 @@ class Stream } if($this->isTranslated()) - $display .= ' (Translation)'; + $display .= ' ('. $this->getTranslationLabel() .')'; return $display; } -- cgit v1.2.3 From eed207f8dfd68117715518c83fc32d3ae9e1e094 Mon Sep 17 00:00:00 2001 From: dedeibel Date: Sun, 10 Dec 2017 18:02:48 +0100 Subject: Allowed multi translation for embedding, fixed autoplay option --- model/Room.php | 9 ++++++--- model/Stream.php | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'model') diff --git a/model/Room.php b/model/Room.php index 56dab4c..27a8d97 100644 --- a/model/Room.php +++ b/model/Room.php @@ -337,9 +337,12 @@ class Room throw new NotFoundException('Selection '.$selection.' in Room '.$this->getSlug()); $translation_label = null; - if (substr($language, 0, strlen('native')) !== 'native') { - if (!$this->hasTranslation()) { - throw new NotFoundException('Translated Streams of Room '.$this->getSlug()); + if ($language !== 'native' && $language !== 'stereo') { + if (! $this->hasTranslation()) { + throw new NotFoundException('Translated Streams of Room '. $this->getSlug()); + } + if (! $this->isValidLanguage($language)) { + throw new NotFoundException('Selected translation'); } $translation_label = $this->findTranslationLabel($language); diff --git a/model/Stream.php b/model/Stream.php index a4dcf72..28cb0f8 100644 --- a/model/Stream.php +++ b/model/Stream.php @@ -32,7 +32,9 @@ class Stream public function isTranslated() { - return !empty($this->getLanguage()) && $this->getLanguage() !== 'native'; + return !empty($this->getLanguage()) && + $this->getLanguage() !== 'native' && + $this->getLanguage() !== 'stereo'; } public function getVideoSize() -- cgit v1.2.3 From b25046267febba28dec4479be91522f577f953b2 Mon Sep 17 00:00:00 2001 From: dedeibel Date: Sun, 10 Dec 2017 18:21:34 +0100 Subject: Removed dash and music translations from the api because its wrong --- model/Room.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'model') diff --git a/model/Room.php b/model/Room.php index 27a8d97..dd63038 100644 --- a/model/Room.php +++ b/model/Room.php @@ -233,6 +233,11 @@ class Room return $selections; } + public function isSelectionTranslated($selection) { + # dash is special, has langs included + return $selection !== 'dash' && $selection !== 'music'; + } + public function getTabNames() { $tabs = array(); @@ -314,9 +319,11 @@ class Room foreach ($selections as $selection) { $streams[] = $this->createStreamObject($selection, 'native'); - foreach ($this->getTranslations() as $translation) { - $streams[] = $this->createStreamObject($selection, $translation['endpoint'], $translation['label']); - } + if ($this->isSelectionTranslated($selection)) { + foreach ($this->getTranslations() as $translation) { + $streams[] = $this->createStreamObject($selection, $translation['endpoint'], $translation['label']); + } + } } return $streams; -- cgit v1.2.3 From 46852c4f9c77ab77b9bcc18c901f9f8640d9f305 Mon Sep 17 00:00:00 2001 From: dedeibel Date: Mon, 11 Dec 2017 19:50:55 +0100 Subject: Explained config migration with more detail --- model/Conferences.php | 67 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 28 deletions(-) (limited to 'model') diff --git a/model/Conferences.php b/model/Conferences.php index eb07327..575759e 100644 --- a/model/Conferences.php +++ b/model/Conferences.php @@ -72,34 +72,45 @@ class Conferences return in_array($mandator, Conferences::listConferences()); } - public static function loadConferenceConfig($mandator) { - $configfile = forceslash(Conferences::MANDATOR_DIR).forceslash($mandator).'config.php'; - $config = include($configfile); - - if(!is_array($config)) { - throw new ConfigException("Loading $configfile did not return an array. Maybe it's missing a return-statement?"); - } - - // Allow setting TRANSLATION simply to true and fill in default values for uniformity - $rooms = $config['ROOMS']; - foreach ($rooms as $slug => $room) { - if (!isset($room['TRANSLATION'])) { - $config['ROOMS'][$slug]['TRANSLATION'] = []; - } - elseif (! is_array($room['TRANSLATION'])) { - if ($room['TRANSLATION'] === true) { - $config['ROOMS'][$slug]['TRANSLATION'] = [[ - 'endpoint' => 'translated', - 'label' => 'Translated' - ]]; - } - else { - $config['ROOMS'][$slug]['TRANSLATION'] = []; - } - } - } - return $config; - } + private static function migrateTranslationConfiguration($config) { + // Allow setting TRANSLATION simply to true and fill in default values for uniformity + $rooms = $config['ROOMS']; + foreach ($rooms as $slug => $room) { + // Translation is commented out, equaivalent of false + if (!isset($room['TRANSLATION'])) { + $config['ROOMS'][$slug]['TRANSLATION'] = []; + } + // Translation is present but not an array + elseif (! is_array($room['TRANSLATION'])) { + // Translation is true, set default values + if ($room['TRANSLATION'] === true) { + $config['ROOMS'][$slug]['TRANSLATION'] = [[ + 'endpoint' => 'translated', + 'label' => 'Translated' + ]]; + } + // Translation is false or garbage + else { + $config['ROOMS'][$slug]['TRANSLATION'] = []; + } + } + } + + return $config; + } + + public static function loadConferenceConfig($mandator) { + $configfile = forceslash(Conferences::MANDATOR_DIR).forceslash($mandator).'config.php'; + $config = include($configfile); + + if(!is_array($config)) { + throw new ConfigException("Loading $configfile did not return an array. Maybe it's missing a return-statement?"); + } + + $config = Conferences::migrateTranslationConfiguration($config); + + return $config; + } public static function getConference($mandator) { return new Conference(Conferences::loadConferenceConfig($mandator), $mandator); -- cgit v1.2.3 From 0b73843d5e0d0ac22a46db28090e707566668ae4 Mon Sep 17 00:00:00 2001 From: dedeibel Date: Mon, 11 Dec 2017 20:03:35 +0100 Subject: Leading Spaces to Tabs --- model/Room.php | 70 ++++++++++++++++++++++++------------------------- model/RoomSelection.php | 6 ++--- model/Stream.php | 6 ++--- 3 files changed, 41 insertions(+), 41 deletions(-) (limited to 'model') diff --git a/model/Room.php b/model/Room.php index dd63038..24d87cb 100644 --- a/model/Room.php +++ b/model/Room.php @@ -179,35 +179,35 @@ class Room return $this->getConference()->get('ROOMS.'.$this->getSlug().'.TRANSLATION'); } - private function getTranslationEndpoints() { - return array_map( - function ($translation) { - return $translation['endpoint']; - }, - $this->getTranslations() - ); - } - - private function isTranslationEndpoint($endpoint) { - return in_array($endpoint, $this->getTranslationEndpoints()); - } - - private function findTranslationLabel($language) { - foreach($this->getTranslations() as $translation) { - if ($translation['endpoint'] === $language) { - return $translation['label']; - } - } - return null; - } + private function getTranslationEndpoints() { + return array_map( + function ($translation) { + return $translation['endpoint']; + }, + $this->getTranslations() + ); + } + + private function isTranslationEndpoint($endpoint) { + return in_array($endpoint, $this->getTranslationEndpoints()); + } + + private function findTranslationLabel($language) { + foreach($this->getTranslations() as $translation) { + if ($translation['endpoint'] === $language) { + return $translation['label']; + } + } + return null; + } public function hasTranslation() { return count($this->getTranslations()) > 0; } - public function isValidLanguage($language) { - return ($language === 'native' || $this->isTranslationEndpoint($language)); - } + public function isValidLanguage($language) { + return ($language === 'native' || $this->isTranslationEndpoint($language)); + } public function getSelectionNames() { @@ -343,17 +343,17 @@ class Room if(!in_array($selection, $selections)) throw new NotFoundException('Selection '.$selection.' in Room '.$this->getSlug()); - $translation_label = null; - if ($language !== 'native' && $language !== 'stereo') { - if (! $this->hasTranslation()) { - throw new NotFoundException('Translated Streams of Room '. $this->getSlug()); - } - if (! $this->isValidLanguage($language)) { - throw new NotFoundException('Selected translation'); - } - - $translation_label = $this->findTranslationLabel($language); - } + $translation_label = null; + if ($language !== 'native' && $language !== 'stereo') { + if (! $this->hasTranslation()) { + throw new NotFoundException('Translated Streams of Room '. $this->getSlug()); + } + if (! $this->isValidLanguage($language)) { + throw new NotFoundException('Selected translation'); + } + + $translation_label = $this->findTranslationLabel($language); + } return $this->createStreamObject($selection, $language, $translation_label); } diff --git a/model/RoomSelection.php b/model/RoomSelection.php index a83b5c6..c21ea7e 100644 --- a/model/RoomSelection.php +++ b/model/RoomSelection.php @@ -18,15 +18,15 @@ class RoomSelection return $this->selection; } - private function getSelectionPath() { + private function getSelectionPath() { $path = [$this->getRoom()->getConference()->getSlug(), $this->getRoom()->getSlug()]; $selection = $this->getRoom()->getSelectionNames(); if ($selection[0] != $this->getSelection()) $path[] = $this->getSelection(); - return joinpath($path); - } + return joinpath($path); + } public function getLink() { diff --git a/model/Stream.php b/model/Stream.php index 28cb0f8..99abaf1 100644 --- a/model/Stream.php +++ b/model/Stream.php @@ -32,9 +32,9 @@ class Stream public function isTranslated() { - return !empty($this->getLanguage()) && - $this->getLanguage() !== 'native' && - $this->getLanguage() !== 'stereo'; + return !empty($this->getLanguage()) && + $this->getLanguage() !== 'native' && + $this->getLanguage() !== 'stereo'; } public function getVideoSize() -- cgit v1.2.3