From 4c52028f555c361c232cbee166fa62522c66af5b Mon Sep 17 00:00:00 2001 From: MaZderMind Date: Fri, 6 Nov 2015 16:45:55 +0100 Subject: experimental multi-client capability --- config.php | 627 ----------------------------------------------- configs/clients/31c3.php | 627 +++++++++++++++++++++++++++++++++++++++++++++++ index.php | 56 ++++- lib/helper.php | 4 +- 4 files changed, 680 insertions(+), 634 deletions(-) delete mode 100644 config.php create mode 100644 configs/clients/31c3.php diff --git a/config.php b/config.php deleted file mode 100644 index 391ca4d..0000000 --- a/config.php +++ /dev/null @@ -1,627 +0,0 @@ - strtotime("2014-12-27 06:00"), - - /** - * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie- - * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt. - * - * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten) - */ - 'ENDS_AT' => strtotime("2014-12-30 21:00"), - - /** - * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before' - * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz - * bereits beendet ist. 'running' simuliert eine laufende Konferenz. - * - * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent - * zu 'running'. - */ - //'CLOSED' => false, - - /** - * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten) - * Dieser im Seiten-Header, im -Tag, in der About-Seite und ggf. ab weiteren Stellen als - * Anzeigetext benutzt - */ - 'TITLE' => '31C3', - - /** - * Veranstalter - * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher - * <meta>-Tag generiert. - */ - 'AUTHOR' => 'CCC', - - /** - * Beschreibungstext - * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher - * <meta>-Tag generiert. - */ - 'DESCRIPTION' => 'Video Live-Streaming vom 31C3', - - /** - * Schlüsselwortliste, Kommasepariert - * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher - * <meta>-Tag generiert. - */ - 'KEYWORDS' => '31C3, Hacking, Chaos Computer Club, Video, Media, Streaming, Hacker', - - /** - * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags) - * Sollte üblicherweise nur Inline-Elemente enthalten - * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet - */ - 'FOOTER_HTML' => ' - by <a href="https://ccc.de">Chaos Computer Club e.V</a>, - <a href="http://fem.tu-ilmenau.de/">FeM</a>, - <a href="http://www.ags.tu-bs.de/">ags</a> & - <a href="https://c3voc.de">c3voc</a> - ', - - /** - * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header) - * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues - * Wischiwaschi auf http://media.ccc.de/) - * - * Dieser HTML-Block wird üblicherweise in der main.less speziell für die - * Konferenz umgestaltet. - * - * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben. - */ - //'BANNER_HTML' => '31C3 – a new dawn', - - /** - * Link zu den Recordings - * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt - */ - 'RELEASES' => 'http://media.ccc.de/browse/congress/2014/index.html', - - /** - * Um die interne ReLive-Ansicht zu aktivieren, kann hier ein ReLive-JSON - * konfiguriert werden. Üblicherweise wird diese Datei über das Script - * configs/download.sh heruntergeladen, welches von einem Cronjob - * regelmäßig getriggert wird. - * - * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt - */ - 'RELIVE_JSON' => 'configs/vod.json', -); - -/** - * Konfiguration der Stream-Übersicht auf der Startseite - */ -$GLOBALS['CONFIG']['OVERVIEW'] = array( - /** - * Abschnitte aud der Startseite und darunter aufgeführte Räume - * Es können beliebig neue Gruppen und Räume hinzugefügt werden - * - * Die Räume müssen in $GLOBALS['CONFIG']['ROOMS'] konfiguriert werden, - * sonst werden sie nicht angezeigt. - */ - 'GROUPS' => array( - 'Lecture Rooms' => array( - 'saal1', - 'saal2', - 'saalg', - 'saal6', - ), - - 'Live DJ Sets' => array( - 'lounge', - 'ambient', - ), - 'Live Podcasts' => array( - 'sendezentrum', - ), - ), -); - - - -/** - * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.) - */ -$GLOBALS['CONFIG']['ROOMS'] = array( - /** - * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs, - * in $GLOBALS['CONFIG']['OVERVIEW'] oder im Feedback verwendet wird. - * - * Der Raum-Slug sollte ausschliesslich aus "unkritischen" Zeichen ([A-Za-z0-9]) - * bestehen und insbesondere keine Leerzeichen enthalten. - */ - 'saal1' => array( - /** - * Angezeige-Name - */ - 'DISPLAY' => 'Saal 1', - - /** - * ID des Video/Audio-Streams. Die Stream-ID ist davon abhängig, welches - * Event-Case in welchem Raum aufgebaut wird und wird üblicherweise von - * s1 bis s5 durchnummeriert. - */ - 'STREAM' => 's1', - - /** - * Stream-Vorschaubildchen auf der Übersichtsseite anzeigen - * Damit das funktioniert muss der entsprechende runit-Task auf dem - * CDN-Quell-Host (live.ber) laufen. - */ - 'PREVIEW' => true, - - /** - * Übersetzungstonspur aktivieren - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist werden nur - * die native-Streams verwendet, andernfalls wird native und translated - * angeboten und auch für beide Tonspuren eine Player-Seite angezeigt. - */ - 'TRANSLATION' => true, - - /** - * stereo-Tonspur statt native-Tonspur benutzen - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist werden - * die "native"-Mono-Streams verwendet, andernfalls wird statt "native" - * der Streamname "stereo" eingesetzt. Im normalen Konferenz-Setup - * müssen dann beide Kanäle der Kamera mit einem Signal bespielt werden. - */ - 'STEREO' => false, - - /** - * SD-Video-Stream (1024×576) verfügbar - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein SD-Video - * angeboten. Wird auch HD_VIDEO auf false gesetzt oder auskommentiert ist, wird - * für diesen Raum überhaupt kein Video angeboten. - * - * In diesem Fall wird, sofern jeweils aktiviert, Slides, Audio und zuletzt Musik - * als Default-Stream angenommen. - */ - 'SD_VIDEO' => true, - - /** - * HD-Video-Stream (1920×1080) verfügbar - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein HD-Video - * angeboten. Wird auch SD_VIDEO auf false gesetzt oder auskommentiert ist, wird - * für diesen Raum überhaupt kein Video angeboten. - * - * In diesem Fall wird, sofern jeweils aktiviert, Slides, Audio und zuletzt Musik - * als Default-Stream angenommen. - */ - 'HD_VIDEO' => true, - - /** - * Slide-Only-Stream (1024×576) verfügbar - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Slide-Only- - * Stream angeboten. Für diesen Raum wird dann keim Slides-Tab angeboten. - * - * In diesem Fall wird, sofern jeweils aktiviert, Audio und zuletzt Musik als - * Default-Stream angenommen. - */ - 'SLIDES' => true, - - /** - * Audio-Only-Stream verfügbar - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Audio-Only- - * Stream angeboten. Für diesen Raum wird dann keim Audio-Tab angeboten. - * - * In diesem Fall wird, sofern aktiviert, Musik als Default-Stream angenommen. - */ - 'AUDIO' => true, - - /** - * Musik-Stream verfügbar - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Musik-Stream - * angeboten. Für diesen Raum wird dann keim Musik-Tab angeboten. - * - * Ist kein einziger Stream angebote, wird statt der Stream-Seite ein 404-Fehler - * angezeigt. - */ - 'MUSIC' => false, - - /** - * Fahrplan-Ansicht auf der Raum-Seite aktivieren (boolean) - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, - * wird der Raum nicht im Fahrplan gesucht und auch auf der Startseite - * findet keine Darstellung statt. - * - * Ebenso können alle Fahrplan-Funktionialitäten durch auskommentieren - * des globalen $GLOBALS['CONFIG']['SCHEDULE']-Blocks deaktiviert werden - */ - 'SCHEDULE' => true, - - /** - * Name des Raums im Fahrplan - * Wenn diese Zeile auskommentiert ist wird der Raum-Slug verwendet - */ - 'SCHEDULE_NAME' => 'Saal 1', - - /** - * Feedback anzeigen (boolean) - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, - * taucht der Raum auch im globalen Feedback-Formular nicht auf. - * - * Ebenso können alle Feedback-Funktionialitäten durch auskommentieren - * des globalen $GLOBALS['CONFIG']['FEEDBACK']-Blocks deaktiviert werden - */ - 'FEEDBACK' => true, - - /** - * Subtitles-Player aktivieren (boolean) - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, - * wird der Subtitles-Button und die damit verbundenen Funktionen deaktiviert. - * - * Ebenso können alle Subtitles-Funktionialitäten durch auskommentieren - * des globalen $GLOBALS['CONFIG']['SUBTITLES']-Blocks deaktiviert werden - */ - 'SUBTITLES' => true, - - /** - * Embed-Form aktivieren (boolean) - * - * Ist dieses Feld auf true gesetzt, wird ein Embed-Tab unter dem Video - * angezeigt. Darüber kann der Player als iframe eingebunden werden. - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, - * wird kein Embed-Tab angeboten und die URL zum Einbetten existiert nicht. - * - * Ebenso können alle Embedding-Funktionialitäten durch auskommentieren - * des globalen $GLOBALS['CONFIG']['EMBED']-Blocks deaktiviert werden - */ - 'EMBED' => true, - - /** - * IRC-Link aktivieren (boolean) - * - * Solange Twitter oder IRC aktiviert ist, wird ein "Chat"-Tab mit den - * jeweiligen Links angezeigt. - * - * Ist dieses Feld auf true gesetzt, wird ein irc://-Link angezeigt. - * WebIrc wird nach dem Congress nicht mehr unterstützt ;) - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, - * wird kein IRC-Link angezeigt - * - * Ebenso können alle IRC-Links durch auskommentieren - * des globalen $GLOBALS['CONFIG']['IRC']-Blocks deaktiviert werden - */ - 'IRC' => true, - - /** - * Mit dem Angaben in diesem Block können die Vorgaben aus dem - * globalen $GLOBALS['CONFIG']['IRC'] Block überschrieben werden. - * - * Der globale $GLOBALS['CONFIG']['IRC']-Block muss trotzdem existieren, - * da sonst überhaupt kein IRC-Link erzeugt wird. (ggf. einfach `= true` setzen) - */ - 'IRC_CONFIG' => array( - 'DISPLAY' => '#31C3-hall-1 @ hackint', - 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-1', - ), - - /** - * Twitter-Link aktivieren (boolean) - * - * Ist dieses Feld auf true gesetzt, wird ein Link zu Twitter angezeigt. - * - * Solange Twitter oder IRC aktiviert ist, wird ein "Chat"-Tab mit den - * jeweiligen Links angezeigt. - * - * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, - * wird kein Twitter-Link angezeigt - * - * Ebenso können alle Twitter-Links durch auskommentieren - * des globalen $GLOBALS['CONFIG']['TWITTER']-Blocks deaktiviert werden - **/ - 'TWITTER' => true, - - /** - * Mit dem Angaben in diesem Block können die Vorgaben aus dem - * globalen $GLOBALS['CONFIG']['TWITTER'] Block überschrieben werden. - * - * Der globale $GLOBALS['CONFIG']['TWITTER']-Block muss trotzdem existieren, - * da sonst überhaupt kein IRC-Link erzeugt wird. (ggf. einfach `= true` setzen) - */ - 'TWITTER_CONFIG' => array( - 'DISPLAY' => '#hall1 @ twitter', - 'TEXT' => '#31C3 #hall1', - ), - ), - - 'saal2' => array( - 'DISPLAY' => 'Saal 2', - 'STREAM' => 's2', - 'PREVIEW' => true, - - 'TRANSLATION' => true, - 'SD_VIDEO' => true, - 'HD_VIDEO' => true, - 'AUDIO' => true, - 'SLIDES' => true, - 'MUSIC' => false, - - 'SCHEDULE' => true, - 'SCHEDULE_NAME' => 'Saal 2', - 'FEEDBACK' => true, - 'SUBTITLES' => true, - 'EMBED' => true, - 'IRC' => true, - 'IRC_CONFIG' => array( - 'DISPLAY' => '#31C3-hall-2 @ hackint', - 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-2', - ), - 'TWITTER' => true, - 'TWITTER_CONFIG' => array( - 'DISPLAY' => '#hall2 @ twitter', - 'TEXT' => '#31C3 #hall2', - ), - ), - - 'saalg' => array( - 'DISPLAY' => 'Saal G', - 'STREAM' => 's3', - 'PREVIEW' => true, - - 'TRANSLATION' => true, - 'SD_VIDEO' => true, - 'HD_VIDEO' => true, - 'AUDIO' => true, - 'SLIDES' => true, - 'MUSIC' => false, - - 'SCHEDULE' => true, - 'SCHEDULE_NAME' => 'Saal G', - 'FEEDBACK' => true, - 'SUBTITLES' => true, - 'EMBED' => true, - 'IRC' => true, - 'IRC_CONFIG' => array( - 'DISPLAY' => '#31C3-hall-g @ hackint', - 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-g', - ), - 'TWITTER' => true, - 'TWITTER_CONFIG' => array( - 'DISPLAY' => '#hallg @ twitter', - 'TEXT' => '#31C3 #hallg', - ), - ), - - 'saal6' => array( - 'DISPLAY' => 'Saal 6', - 'STREAM' => 's4', - 'PREVIEW' => true, - - 'TRANSLATION' => true, - 'SD_VIDEO' => true, - 'HD_VIDEO' => true, - 'AUDIO' => true, - 'SLIDES' => true, - 'MUSIC' => false, - - 'SCHEDULE' => true, - 'SCHEDULE_NAME' => 'Saal 6', - 'FEEDBACK' => true, - 'SUBTITLES' => true, - 'EMBED' => true, - 'IRC' => true, - 'IRC_CONFIG' => array( - 'DISPLAY' => '#31C3-hall-6 @ hackint', - 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-6', - ), - 'TWITTER' => true, - 'TWITTER_CONFIG' => array( - 'DISPLAY' => '#hall6 @ twitter', - 'TEXT' => '#31C3 #hall6', - ), - ), - - - 'lounge' => array( - 'DISPLAY' => 'Lounge', - 'MUSIC' => true, - 'EMBED' => true, - ), - 'ambient' => array( - 'DISPLAY' => 'Ambient', - 'MUSIC' => true, - 'EMBED' => true, - ), - - - 'sendezentrum' => array( - 'DISPLAY' => 'Sendezentrum', - 'STREAM' => 's5', - - 'STEREO' => true, - 'SD_VIDEO' => true, - 'HD_VIDEO' => true, - 'AUDIO' => true, - - 'SCHEDULE' => true, - 'FEEDBACK' => true, - 'SUBTITLES' => false, - 'EMBED' => true, - 'IRC' => false, - 'TWITTER' => false, - ), -); - - - -/** - * Konfigurationen zum Konferenz-Fahrplan - * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert - */ -$GLOBALS['CONFIG']['SCHEDULE'] = array( - /** - * URL zum Fahrplan-XML - * - * Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht - * aufhören zu funktionieren. Üblicherweise wird diese daher Datei über - * das Script configs/download.sh heruntergeladen, welches von einem - * Cronjob regelmäßig getriggert wird. - */ - 'URL' => 'configs/schedule.xml', - - /** - * Nur die angegebenen Räume aus dem Fahrplan beachten - * - * Wird diese Zeile auskommentiert, werden alle Räume angezeigt - */ - //'ROOMFILTER' => array('Saal 1', 'Saal 2', 'Saal G', 'Saal 6'), - - /** - * Skalierung der Programm-Vorschau in Sekunden pro Pixel - */ - 'SCALE' => 7, - - /** - * Simuliere das Verhalten als wäre die Konferenz bereits heute - * - * Diese folgende Beispiel-Zeile Simuliert, dass das - * Konferenz-Datum 2014-12-29 auf den heutigen Tag 2015-02-24 verschoben ist. - */ - //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2014-12-28') - strtotime(/* Today */ '2015-03-01'), - 'SIMULATE_OFFSET' => 0, -); - - - -/** - * Konfiguration des Feedback-Formulars - * - * Wird dieser Block auskommentiert, wird das gesamte Feedback-System deaktiviert - */ -$GLOBALS['CONFIG']['FEEDBACK'] = array( - /** - * DSN zum abspeichern der eingegebenen Daten - * die Datenbank muss eine Tabelle enthaltem, die dem in `lib/schema.sql` angegebenen - * Schema entspricht. - * - * Achtung vor Dateirechten: Bei SQLite reicht es nicht, wenn wer Webseiten-Benutzer - * die .sqlite3-Datei schreiben darf, er muss auch im übergeordneten Order neue - * (Lock-)Dateien anlegen dürfen - */ - 'DSN' => 'sqlite:/opt/31c3-streaming-feedback/feedback.sqlite3', - - /** - * Login-Daten für die /feedback/read/-Seite, auf der eingegangenes - * Feedback gelesen werden kann. - * - * Durch auskommentieren der beiden Optionen wird diese Seite komplett deaktiviert, - * es kann dann nur noch durch manuelle Inspektion der .sqlite3-Datei auf das Feedback - * zugegriffen werden. - */ - 'USERNAME' => 'katze', - 'PASSWORD' => trim(@file_get_contents('/opt/streaming-feedback/feedback-password')), -); - -/** - * Globaler Schalter für die Embedding-Funktionalitäten - * - * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle - * Embedding-Funktionen deaktiviert. - */ -$GLOBALS['CONFIG']['EMBED'] = true; - -/** - * Konfiguration des L2S2-Systems - * https://github.com/c3subtitles/L2S2 - * - * Wird dieser Block auskommentiert, wird das gesamte Subtitle-System deaktiviert - */ -$GLOBALS['CONFIG']['SUBTITLES'] = array( - /** - * URL des L2S2-Servers - */ - 'URL' => 'http://subtitles.c3voc.de/', -); - -/** - * Globale Konfiguration der IRC-Links. - * - * Wird dieser Block auskommentiert, werden keine IRC-Links mehr erzeugt. Sollen die - * IRC-Links für jeden Raum einzeln konfiguriert werden, muss dieser Block trotzdem - * existieren sein. ggf. einfach auf true setzen: - * - * $GLOBALS['CONFIG']['IRC'] = true - */ -$GLOBALS['CONFIG']['IRC'] = array( - /** - * Anzeigetext für die IRC-Links. - * - * %s wird durch den Raum-Slug ersetzt. - * Ist eine weitere Anpassung erfoderlich, kann ein IRC_CONFIG-Block in der - * Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden. - */ - 'DISPLAY' => '#31C3-%s @ hackint', - - /** - * URL für die IRC-Links. - * Hierbei kann sowohl ein irc://-Link als auch ein Link zu einem - * WebIrc-Provider wie z.B. 'https://kiwiirc.com/client/irc.hackint.eu/#31C3-%s' - * verwendet werden. - * - * %s wird durch den urlencodeten Raum-Slug ersetzt. - * Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden. - */ - 'URL' => 'irc://irc.hackint.eu:6667/31C3-%s', -); - -/** - * Globale Konfiguration der Twitter-Links. - * - * Wird dieser Block auskommentiert, werden keine Twitter-Links mehr erzeugt. Sollen die - * Twitter-Links für jeden Raum einzeln konfiguriert werden, muss dieser Block trotzdem - * existieren sein. ggf. einfach auf true setzen: - * - * $GLOBALS['CONFIG']['TWITTER'] = true - */ -$GLOBALS['CONFIG']['TWITTER'] = array( - /** - * Anzeigetext für die Twitter-Links. - * - * %s wird durch den Raum-Slug ersetzt. - * Ist eine weitere Anpassung erfoderlich, kann ein TWITTER_CONFIG-Block in der - * Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden. - */ - 'DISPLAY' => '#%s @ twitter', - - /** - * Vorgabe-Tweet-Text für die Twitter-Links. - * - * %s wird durch den Raum-Slug ersetzt. - * Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden. - */ - 'TEXT' => '#31C3 #%s', -); diff --git a/configs/clients/31c3.php b/configs/clients/31c3.php new file mode 100644 index 0000000..391ca4d --- /dev/null +++ b/configs/clients/31c3.php @@ -0,0 +1,627 @@ +<?php +date_default_timezone_set('Europe/Berlin'); + +/** + * Während der Entwicklung wird die BASEURL automatisch erraten + * In Produktionssituationen sollte manuell eine konfiguriert werden um Überraschungen zu vermeiden + * + * Protokollfreie URLs (welche, die mit // beginnen), werden automatisch mit dem korrekten Protokoll ergänzt. + * In diesem Fall wird auch ein SSL-Umschalt-Button im Header angezeigt + */ +if($_SERVER['HTTP_HOST'] != 'localhost') + $GLOBALS['CONFIG']['BASEURL'] = '//streaming.media.ccc.de/'; + + +$GLOBALS['CONFIG']['CONFERENCE'] = array( + /** + * Der Startzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns davor, wird die Closed-Seite + * mit einem Text der Art "hat noch nicht angefangen" angezeigt. + * + * Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT + * und CLOSED weiter unten) + */ + 'STARTS_AT' => strtotime("2014-12-27 06:00"), + + /** + * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie- + * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt. + * + * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten) + */ + 'ENDS_AT' => strtotime("2014-12-30 21:00"), + + /** + * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before' + * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz + * bereits beendet ist. 'running' simuliert eine laufende Konferenz. + * + * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent + * zu 'running'. + */ + //'CLOSED' => false, + + /** + * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten) + * Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als + * Anzeigetext benutzt + */ + 'TITLE' => '31C3', + + /** + * Veranstalter + * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher + * <meta>-Tag generiert. + */ + 'AUTHOR' => 'CCC', + + /** + * Beschreibungstext + * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher + * <meta>-Tag generiert. + */ + 'DESCRIPTION' => 'Video Live-Streaming vom 31C3', + + /** + * Schlüsselwortliste, Kommasepariert + * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher + * <meta>-Tag generiert. + */ + 'KEYWORDS' => '31C3, Hacking, Chaos Computer Club, Video, Media, Streaming, Hacker', + + /** + * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags) + * Sollte üblicherweise nur Inline-Elemente enthalten + * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet + */ + 'FOOTER_HTML' => ' + by <a href="https://ccc.de">Chaos Computer Club e.V</a>, + <a href="http://fem.tu-ilmenau.de/">FeM</a>, + <a href="http://www.ags.tu-bs.de/">ags</a> & + <a href="https://c3voc.de">c3voc</a> + ', + + /** + * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header) + * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues + * Wischiwaschi auf http://media.ccc.de/) + * + * Dieser HTML-Block wird üblicherweise in der main.less speziell für die + * Konferenz umgestaltet. + * + * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben. + */ + //'BANNER_HTML' => '31C3 – a new dawn', + + /** + * Link zu den Recordings + * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt + */ + 'RELEASES' => 'http://media.ccc.de/browse/congress/2014/index.html', + + /** + * Um die interne ReLive-Ansicht zu aktivieren, kann hier ein ReLive-JSON + * konfiguriert werden. Üblicherweise wird diese Datei über das Script + * configs/download.sh heruntergeladen, welches von einem Cronjob + * regelmäßig getriggert wird. + * + * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt + */ + 'RELIVE_JSON' => 'configs/vod.json', +); + +/** + * Konfiguration der Stream-Übersicht auf der Startseite + */ +$GLOBALS['CONFIG']['OVERVIEW'] = array( + /** + * Abschnitte aud der Startseite und darunter aufgeführte Räume + * Es können beliebig neue Gruppen und Räume hinzugefügt werden + * + * Die Räume müssen in $GLOBALS['CONFIG']['ROOMS'] konfiguriert werden, + * sonst werden sie nicht angezeigt. + */ + 'GROUPS' => array( + 'Lecture Rooms' => array( + 'saal1', + 'saal2', + 'saalg', + 'saal6', + ), + + 'Live DJ Sets' => array( + 'lounge', + 'ambient', + ), + 'Live Podcasts' => array( + 'sendezentrum', + ), + ), +); + + + +/** + * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.) + */ +$GLOBALS['CONFIG']['ROOMS'] = array( + /** + * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs, + * in $GLOBALS['CONFIG']['OVERVIEW'] oder im Feedback verwendet wird. + * + * Der Raum-Slug sollte ausschliesslich aus "unkritischen" Zeichen ([A-Za-z0-9]) + * bestehen und insbesondere keine Leerzeichen enthalten. + */ + 'saal1' => array( + /** + * Angezeige-Name + */ + 'DISPLAY' => 'Saal 1', + + /** + * ID des Video/Audio-Streams. Die Stream-ID ist davon abhängig, welches + * Event-Case in welchem Raum aufgebaut wird und wird üblicherweise von + * s1 bis s5 durchnummeriert. + */ + 'STREAM' => 's1', + + /** + * Stream-Vorschaubildchen auf der Übersichtsseite anzeigen + * Damit das funktioniert muss der entsprechende runit-Task auf dem + * CDN-Quell-Host (live.ber) laufen. + */ + 'PREVIEW' => true, + + /** + * Übersetzungstonspur aktivieren + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist werden nur + * die native-Streams verwendet, andernfalls wird native und translated + * angeboten und auch für beide Tonspuren eine Player-Seite angezeigt. + */ + 'TRANSLATION' => true, + + /** + * stereo-Tonspur statt native-Tonspur benutzen + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist werden + * die "native"-Mono-Streams verwendet, andernfalls wird statt "native" + * der Streamname "stereo" eingesetzt. Im normalen Konferenz-Setup + * müssen dann beide Kanäle der Kamera mit einem Signal bespielt werden. + */ + 'STEREO' => false, + + /** + * SD-Video-Stream (1024×576) verfügbar + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein SD-Video + * angeboten. Wird auch HD_VIDEO auf false gesetzt oder auskommentiert ist, wird + * für diesen Raum überhaupt kein Video angeboten. + * + * In diesem Fall wird, sofern jeweils aktiviert, Slides, Audio und zuletzt Musik + * als Default-Stream angenommen. + */ + 'SD_VIDEO' => true, + + /** + * HD-Video-Stream (1920×1080) verfügbar + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein HD-Video + * angeboten. Wird auch SD_VIDEO auf false gesetzt oder auskommentiert ist, wird + * für diesen Raum überhaupt kein Video angeboten. + * + * In diesem Fall wird, sofern jeweils aktiviert, Slides, Audio und zuletzt Musik + * als Default-Stream angenommen. + */ + 'HD_VIDEO' => true, + + /** + * Slide-Only-Stream (1024×576) verfügbar + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Slide-Only- + * Stream angeboten. Für diesen Raum wird dann keim Slides-Tab angeboten. + * + * In diesem Fall wird, sofern jeweils aktiviert, Audio und zuletzt Musik als + * Default-Stream angenommen. + */ + 'SLIDES' => true, + + /** + * Audio-Only-Stream verfügbar + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Audio-Only- + * Stream angeboten. Für diesen Raum wird dann keim Audio-Tab angeboten. + * + * In diesem Fall wird, sofern aktiviert, Musik als Default-Stream angenommen. + */ + 'AUDIO' => true, + + /** + * Musik-Stream verfügbar + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Musik-Stream + * angeboten. Für diesen Raum wird dann keim Musik-Tab angeboten. + * + * Ist kein einziger Stream angebote, wird statt der Stream-Seite ein 404-Fehler + * angezeigt. + */ + 'MUSIC' => false, + + /** + * Fahrplan-Ansicht auf der Raum-Seite aktivieren (boolean) + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, + * wird der Raum nicht im Fahrplan gesucht und auch auf der Startseite + * findet keine Darstellung statt. + * + * Ebenso können alle Fahrplan-Funktionialitäten durch auskommentieren + * des globalen $GLOBALS['CONFIG']['SCHEDULE']-Blocks deaktiviert werden + */ + 'SCHEDULE' => true, + + /** + * Name des Raums im Fahrplan + * Wenn diese Zeile auskommentiert ist wird der Raum-Slug verwendet + */ + 'SCHEDULE_NAME' => 'Saal 1', + + /** + * Feedback anzeigen (boolean) + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, + * taucht der Raum auch im globalen Feedback-Formular nicht auf. + * + * Ebenso können alle Feedback-Funktionialitäten durch auskommentieren + * des globalen $GLOBALS['CONFIG']['FEEDBACK']-Blocks deaktiviert werden + */ + 'FEEDBACK' => true, + + /** + * Subtitles-Player aktivieren (boolean) + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, + * wird der Subtitles-Button und die damit verbundenen Funktionen deaktiviert. + * + * Ebenso können alle Subtitles-Funktionialitäten durch auskommentieren + * des globalen $GLOBALS['CONFIG']['SUBTITLES']-Blocks deaktiviert werden + */ + 'SUBTITLES' => true, + + /** + * Embed-Form aktivieren (boolean) + * + * Ist dieses Feld auf true gesetzt, wird ein Embed-Tab unter dem Video + * angezeigt. Darüber kann der Player als iframe eingebunden werden. + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, + * wird kein Embed-Tab angeboten und die URL zum Einbetten existiert nicht. + * + * Ebenso können alle Embedding-Funktionialitäten durch auskommentieren + * des globalen $GLOBALS['CONFIG']['EMBED']-Blocks deaktiviert werden + */ + 'EMBED' => true, + + /** + * IRC-Link aktivieren (boolean) + * + * Solange Twitter oder IRC aktiviert ist, wird ein "Chat"-Tab mit den + * jeweiligen Links angezeigt. + * + * Ist dieses Feld auf true gesetzt, wird ein irc://-Link angezeigt. + * WebIrc wird nach dem Congress nicht mehr unterstützt ;) + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, + * wird kein IRC-Link angezeigt + * + * Ebenso können alle IRC-Links durch auskommentieren + * des globalen $GLOBALS['CONFIG']['IRC']-Blocks deaktiviert werden + */ + 'IRC' => true, + + /** + * Mit dem Angaben in diesem Block können die Vorgaben aus dem + * globalen $GLOBALS['CONFIG']['IRC'] Block überschrieben werden. + * + * Der globale $GLOBALS['CONFIG']['IRC']-Block muss trotzdem existieren, + * da sonst überhaupt kein IRC-Link erzeugt wird. (ggf. einfach `= true` setzen) + */ + 'IRC_CONFIG' => array( + 'DISPLAY' => '#31C3-hall-1 @ hackint', + 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-1', + ), + + /** + * Twitter-Link aktivieren (boolean) + * + * Ist dieses Feld auf true gesetzt, wird ein Link zu Twitter angezeigt. + * + * Solange Twitter oder IRC aktiviert ist, wird ein "Chat"-Tab mit den + * jeweiligen Links angezeigt. + * + * Wenn diese Zeile auskommentiert oder auf false gesetzt ist, + * wird kein Twitter-Link angezeigt + * + * Ebenso können alle Twitter-Links durch auskommentieren + * des globalen $GLOBALS['CONFIG']['TWITTER']-Blocks deaktiviert werden + **/ + 'TWITTER' => true, + + /** + * Mit dem Angaben in diesem Block können die Vorgaben aus dem + * globalen $GLOBALS['CONFIG']['TWITTER'] Block überschrieben werden. + * + * Der globale $GLOBALS['CONFIG']['TWITTER']-Block muss trotzdem existieren, + * da sonst überhaupt kein IRC-Link erzeugt wird. (ggf. einfach `= true` setzen) + */ + 'TWITTER_CONFIG' => array( + 'DISPLAY' => '#hall1 @ twitter', + 'TEXT' => '#31C3 #hall1', + ), + ), + + 'saal2' => array( + 'DISPLAY' => 'Saal 2', + 'STREAM' => 's2', + 'PREVIEW' => true, + + 'TRANSLATION' => true, + 'SD_VIDEO' => true, + 'HD_VIDEO' => true, + 'AUDIO' => true, + 'SLIDES' => true, + 'MUSIC' => false, + + 'SCHEDULE' => true, + 'SCHEDULE_NAME' => 'Saal 2', + 'FEEDBACK' => true, + 'SUBTITLES' => true, + 'EMBED' => true, + 'IRC' => true, + 'IRC_CONFIG' => array( + 'DISPLAY' => '#31C3-hall-2 @ hackint', + 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-2', + ), + 'TWITTER' => true, + 'TWITTER_CONFIG' => array( + 'DISPLAY' => '#hall2 @ twitter', + 'TEXT' => '#31C3 #hall2', + ), + ), + + 'saalg' => array( + 'DISPLAY' => 'Saal G', + 'STREAM' => 's3', + 'PREVIEW' => true, + + 'TRANSLATION' => true, + 'SD_VIDEO' => true, + 'HD_VIDEO' => true, + 'AUDIO' => true, + 'SLIDES' => true, + 'MUSIC' => false, + + 'SCHEDULE' => true, + 'SCHEDULE_NAME' => 'Saal G', + 'FEEDBACK' => true, + 'SUBTITLES' => true, + 'EMBED' => true, + 'IRC' => true, + 'IRC_CONFIG' => array( + 'DISPLAY' => '#31C3-hall-g @ hackint', + 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-g', + ), + 'TWITTER' => true, + 'TWITTER_CONFIG' => array( + 'DISPLAY' => '#hallg @ twitter', + 'TEXT' => '#31C3 #hallg', + ), + ), + + 'saal6' => array( + 'DISPLAY' => 'Saal 6', + 'STREAM' => 's4', + 'PREVIEW' => true, + + 'TRANSLATION' => true, + 'SD_VIDEO' => true, + 'HD_VIDEO' => true, + 'AUDIO' => true, + 'SLIDES' => true, + 'MUSIC' => false, + + 'SCHEDULE' => true, + 'SCHEDULE_NAME' => 'Saal 6', + 'FEEDBACK' => true, + 'SUBTITLES' => true, + 'EMBED' => true, + 'IRC' => true, + 'IRC_CONFIG' => array( + 'DISPLAY' => '#31C3-hall-6 @ hackint', + 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-6', + ), + 'TWITTER' => true, + 'TWITTER_CONFIG' => array( + 'DISPLAY' => '#hall6 @ twitter', + 'TEXT' => '#31C3 #hall6', + ), + ), + + + 'lounge' => array( + 'DISPLAY' => 'Lounge', + 'MUSIC' => true, + 'EMBED' => true, + ), + 'ambient' => array( + 'DISPLAY' => 'Ambient', + 'MUSIC' => true, + 'EMBED' => true, + ), + + + 'sendezentrum' => array( + 'DISPLAY' => 'Sendezentrum', + 'STREAM' => 's5', + + 'STEREO' => true, + 'SD_VIDEO' => true, + 'HD_VIDEO' => true, + 'AUDIO' => true, + + 'SCHEDULE' => true, + 'FEEDBACK' => true, + 'SUBTITLES' => false, + 'EMBED' => true, + 'IRC' => false, + 'TWITTER' => false, + ), +); + + + +/** + * Konfigurationen zum Konferenz-Fahrplan + * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert + */ +$GLOBALS['CONFIG']['SCHEDULE'] = array( + /** + * URL zum Fahrplan-XML + * + * Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht + * aufhören zu funktionieren. Üblicherweise wird diese daher Datei über + * das Script configs/download.sh heruntergeladen, welches von einem + * Cronjob regelmäßig getriggert wird. + */ + 'URL' => 'configs/schedule.xml', + + /** + * Nur die angegebenen Räume aus dem Fahrplan beachten + * + * Wird diese Zeile auskommentiert, werden alle Räume angezeigt + */ + //'ROOMFILTER' => array('Saal 1', 'Saal 2', 'Saal G', 'Saal 6'), + + /** + * Skalierung der Programm-Vorschau in Sekunden pro Pixel + */ + 'SCALE' => 7, + + /** + * Simuliere das Verhalten als wäre die Konferenz bereits heute + * + * Diese folgende Beispiel-Zeile Simuliert, dass das + * Konferenz-Datum 2014-12-29 auf den heutigen Tag 2015-02-24 verschoben ist. + */ + //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2014-12-28') - strtotime(/* Today */ '2015-03-01'), + 'SIMULATE_OFFSET' => 0, +); + + + +/** + * Konfiguration des Feedback-Formulars + * + * Wird dieser Block auskommentiert, wird das gesamte Feedback-System deaktiviert + */ +$GLOBALS['CONFIG']['FEEDBACK'] = array( + /** + * DSN zum abspeichern der eingegebenen Daten + * die Datenbank muss eine Tabelle enthaltem, die dem in `lib/schema.sql` angegebenen + * Schema entspricht. + * + * Achtung vor Dateirechten: Bei SQLite reicht es nicht, wenn wer Webseiten-Benutzer + * die .sqlite3-Datei schreiben darf, er muss auch im übergeordneten Order neue + * (Lock-)Dateien anlegen dürfen + */ + 'DSN' => 'sqlite:/opt/31c3-streaming-feedback/feedback.sqlite3', + + /** + * Login-Daten für die /feedback/read/-Seite, auf der eingegangenes + * Feedback gelesen werden kann. + * + * Durch auskommentieren der beiden Optionen wird diese Seite komplett deaktiviert, + * es kann dann nur noch durch manuelle Inspektion der .sqlite3-Datei auf das Feedback + * zugegriffen werden. + */ + 'USERNAME' => 'katze', + 'PASSWORD' => trim(@file_get_contents('/opt/streaming-feedback/feedback-password')), +); + +/** + * Globaler Schalter für die Embedding-Funktionalitäten + * + * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle + * Embedding-Funktionen deaktiviert. + */ +$GLOBALS['CONFIG']['EMBED'] = true; + +/** + * Konfiguration des L2S2-Systems + * https://github.com/c3subtitles/L2S2 + * + * Wird dieser Block auskommentiert, wird das gesamte Subtitle-System deaktiviert + */ +$GLOBALS['CONFIG']['SUBTITLES'] = array( + /** + * URL des L2S2-Servers + */ + 'URL' => 'http://subtitles.c3voc.de/', +); + +/** + * Globale Konfiguration der IRC-Links. + * + * Wird dieser Block auskommentiert, werden keine IRC-Links mehr erzeugt. Sollen die + * IRC-Links für jeden Raum einzeln konfiguriert werden, muss dieser Block trotzdem + * existieren sein. ggf. einfach auf true setzen: + * + * $GLOBALS['CONFIG']['IRC'] = true + */ +$GLOBALS['CONFIG']['IRC'] = array( + /** + * Anzeigetext für die IRC-Links. + * + * %s wird durch den Raum-Slug ersetzt. + * Ist eine weitere Anpassung erfoderlich, kann ein IRC_CONFIG-Block in der + * Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden. + */ + 'DISPLAY' => '#31C3-%s @ hackint', + + /** + * URL für die IRC-Links. + * Hierbei kann sowohl ein irc://-Link als auch ein Link zu einem + * WebIrc-Provider wie z.B. 'https://kiwiirc.com/client/irc.hackint.eu/#31C3-%s' + * verwendet werden. + * + * %s wird durch den urlencodeten Raum-Slug ersetzt. + * Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden. + */ + 'URL' => 'irc://irc.hackint.eu:6667/31C3-%s', +); + +/** + * Globale Konfiguration der Twitter-Links. + * + * Wird dieser Block auskommentiert, werden keine Twitter-Links mehr erzeugt. Sollen die + * Twitter-Links für jeden Raum einzeln konfiguriert werden, muss dieser Block trotzdem + * existieren sein. ggf. einfach auf true setzen: + * + * $GLOBALS['CONFIG']['TWITTER'] = true + */ +$GLOBALS['CONFIG']['TWITTER'] = array( + /** + * Anzeigetext für die Twitter-Links. + * + * %s wird durch den Raum-Slug ersetzt. + * Ist eine weitere Anpassung erfoderlich, kann ein TWITTER_CONFIG-Block in der + * Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden. + */ + 'DISPLAY' => '#%s @ twitter', + + /** + * Vorgabe-Tweet-Text für die Twitter-Links. + * + * %s wird durch den Raum-Slug ersetzt. + * Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden. + */ + 'TEXT' => '#31C3 #%s', +); diff --git a/index.php b/index.php index ccdd77b..0a527d4 100644 --- a/index.php +++ b/index.php @@ -4,7 +4,56 @@ if(!ini_get('short_open_tag')) die('`short_open_tag = On` is required'); require_once('lib/helper.php'); -require_once('config.php'); + +$route = @$_GET['route']; +$route = rtrim($route, '/'); + +if($route == '') +{ + // list of clients + $clients = array_values(array_filter(array_map(function($file) + { + $info = pathinfo($file); + + if($info['extension'] == 'php') + return $info['filename']; + + }, scandir('configs/clients/')))); + + + if(count($clients) == 0) + { + // no clients + // error + + die('no clients'); + } + else if(count($clients) == 1) + { + // one client + // redirect + + header('Location: '.baseurl().$clients[0].'/'); + exit; + } + else + { + // multiple clients + // show overview + + // TODO Template + print_r($clients); + exit; + } +} +else +{ + list($client, $route) = explode('/', $route, 2); + + $GLOBALS['CLIENT'] = $client; + require_once('configs/clients/'.$client.'.php'); +} + require_once('lib/PhpTemplate.php'); require_once('lib/Exceptions.php'); @@ -22,9 +71,6 @@ require_once('model/Stream.php'); require_once('model/Relive.php'); require_once('model/Upcoming.php'); -$route = @$_GET['route']; -$route = rtrim($route, '/'); - $conference = new Conference(); $tpl = new PhpTemplate('template/page.phtml'); @@ -71,7 +117,7 @@ try { $dir = forceslash(sys_get_temp_dir()); $css_file = Less_Cache::Get([ - 'assets/css/main.less' => '../assets/css/', + 'assets/css/main.less' => '../../assets/css/', ], [ 'sourceMap' => true, 'compress' => true, diff --git a/lib/helper.php b/lib/helper.php index c6fd9a9..eb9fc6d 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -18,14 +18,14 @@ function baseurl() if(startswith('//', $base)) $base = proto().':'.$base; - return $base; + return forceslash($base.'/'.$GLOBALS['CLIENT']); } $base = ssl() ? 'https://' : 'http://'; $base .= $_SERVER['HTTP_HOST']; $base .= forceslash(dirname($_SERVER['SCRIPT_NAME'])); - return $base; + return forceslash($base.$GLOBALS['CLIENT']); } function forceslash($url) -- cgit v1.2.3