diff options
author | Daniel Meißner | 2016-10-15 20:46:05 +0200 |
---|---|---|
committer | Daniel Meißner | 2016-10-15 20:46:05 +0200 |
commit | 699fbfbacf8cbcb18a8239f10970ead5c2ac6ff6 (patch) | |
tree | 39fbae268bc76b5f632c92d1d6e08c67cb9af807 | |
parent | 1871bc80d833e30de3d05c92e75b4ff93d2bfaa8 (diff) | |
parent | e065b7307ffc5d93883f9b20cf75a5afbec0e137 (diff) |
Merge branch 'master' of mng.ber.c3voc.de:streaming-website
Diffstat (limited to '')
-rw-r--r-- | README.md | 15 | ||||
-rwxr-xr-x | configs/conferences/coreboot-berlin-2016/config.php | 380 | ||||
-rwxr-xr-x | configs/conferences/coreboot-berlin-2016/download.sh | 9 | ||||
-rwxr-xr-x | configs/conferences/coreboot-berlin-2016/main.less | 9 | ||||
-rw-r--r-- | configs/conferences/subscribe8/config.php | 36 | ||||
-rwxr-xr-x | configs/conferences/subscribe8/download.sh | 2 | ||||
-rw-r--r-- | configs/conferences/subscribe8/logo.png | bin | 0 -> 35356 bytes | |||
-rwxr-xr-x | deploy.sh | 8 | ||||
-rw-r--r-- | model/Schedule.php | 5 |
9 files changed, 427 insertions, 37 deletions
@@ -66,19 +66,8 @@ der jeweiligen Konferenzseite bestimmen, im Folgendem am : ## Deployment (auf der VOC Infrastruktur) -``` bash -ssh voc@live.ber -cd /srv/nginx/streaming-website -git fetch origin -git checkout <branch> - -sudo sh -c 'rm -rf /srv/nginx/cache/streaming_fcgi/*' -exit - -ssh voc@live.dus -sudo sh -c 'rm /srv/nginx/cache/streaming_website/static/* /srv/nginx/cache/streaming_website/pages/*' -exit -``` + +see [deploy.sh](deploy.sh) ## JSON-API diff --git a/configs/conferences/coreboot-berlin-2016/config.php b/configs/conferences/coreboot-berlin-2016/config.php new file mode 100755 index 0000000..6761046 --- /dev/null +++ b/configs/conferences/coreboot-berlin-2016/config.php @@ -0,0 +1,380 @@ +<?php + +$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("2016-10-07 10: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("2016-10-09 18: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' => true, + + /** + * 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' => 'coreboot.berlin 2016', + + /** + * Veranstalter + * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher + * <meta>-Tag generiert. + */ + 'AUTHOR' => 'c3voc', + + /** + * Beschreibungstext + * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher + * <meta>-Tag generiert. + */ + 'DESCRIPTION' => 'coreboot.berlin 2016 takes place on Friday-Sunday between LinuxCon and ELC-E; two industry events bringing many Linux and embedded experts to the city. We hope this to enable especially rewarding exchanges at the conference.', + + /** + * Schlüsselwortliste, Kommasepariert + * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher + * <meta>-Tag generiert. + */ + 'KEYWORDS' => 'coreboot, linux, berlin', + + /** + * 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://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' => '<div class="logo"></div>', + + /** + * Link zu den Recordings + * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt + */ + //'RELEASES' => 'http://video.foss4g.org/foss4g2016/videos/', + + /** + * Link zu einer (externen) ReLive-Übersichts-Seite + * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt + */ + //'RELIVE' => 'http://vod.c3voc.de/', + + /** + * Alternativ kann ein ReLive-Json konfiguriert werden, um die interne + * ReLive-Ansicht zu aktivieren. + * + * Wird beides aktiviert, hat der externe Link Vorrang! + * Wird beides auskommentiert, wird der Link nicht angezeigt + */ + //'RELIVE_JSON' => 'configs/conferences/coreboot-berlin-2016/vod.json', + + /** + * APCU-Cache-Zeit in Sekunden + * Wird diese Zeile auskommentiert, werden die apc_*-Methoden nicht verwendet und + * das Relive-Json bei jedem Request von der Quelle geladen und geparst + */ + //'RELIVE_JSON_CACHE' => 30*60, +); + +/** + * 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( + 'Rooms' => array( + 'talks', + ), + ), +); + + + +/** + * 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. + */ + 'talks' => array( + /** + * Angezeige-Name + */ + 'DISPLAY' => 'Talks', + + /** + * 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' => 'q2', + + /** + * 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' => false, + + /** + * 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' => false, + + /** + * 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' => 'Medientheater', + + /** + * 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' => false, + + /** + * 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' => false, + + /** + * 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' => false, + + /** + * 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' => '#fossgis2016 @ twitter', + // 'TEXT' => '#fossgis2016', + // ), + ), +); + +/** + * 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; + +/* +/** + * 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' => '#corebootberlin 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' => '#corebootberlin', +); diff --git a/configs/conferences/coreboot-berlin-2016/download.sh b/configs/conferences/coreboot-berlin-2016/download.sh new file mode 100755 index 0000000..7ae01c0 --- /dev/null +++ b/configs/conferences/coreboot-berlin-2016/download.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# fahrplan +wget --no-check-certificate -q "geruempel.ddns.net/schedule_voc.xml" -O /tmp/vcfb2016-schedule.xml && mv /tmp/vcfb2016-schedule.xml schedule.xml +rm -f /tmp/vcfb2016-schedule.xml + +# relive +wget -q "http://live.dus.c3voc.de/relive/vcfb2016/index.json" -O /tmp/vcfb2016-vod.json && mv /tmp/vcfb2016-vod.json vod.json +rm -f /tmp/vcfb2016-vod.json diff --git a/configs/conferences/coreboot-berlin-2016/main.less b/configs/conferences/coreboot-berlin-2016/main.less new file mode 100755 index 0000000..76e501a --- /dev/null +++ b/configs/conferences/coreboot-berlin-2016/main.less @@ -0,0 +1,9 @@ +@import "../../../assets/css/_structure.less"; + +.logo { + background-size: contain; + background-position: center; + background-repeat: no-repeat; + height: 200px; + margin: 20px 0 0 0; +} diff --git a/configs/conferences/subscribe8/config.php b/configs/conferences/subscribe8/config.php index d9f2011..fb1a115 100644 --- a/configs/conferences/subscribe8/config.php +++ b/configs/conferences/subscribe8/config.php @@ -86,7 +86,7 @@ $GLOBALS['CONFIG']['CONFERENCE'] = array( * Link zu den Recordings * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt */ - 'RELEASES' => 'https://www.youtube.com/playlist?list=TBD', + 'RELEASES' => 'https://www.youtube.com/playlist?list=PLIoqMTM7qDWr4jEWJ0WMQAdCFDSuk-ZJo', /** * Link zu einer (externen) ReLive-Übersichts-Seite @@ -101,7 +101,7 @@ $GLOBALS['CONFIG']['CONFERENCE'] = array( * Wird beides aktiviert, hat der externe Link Vorrang! * Wird beides auskommentiert, wird der Link nicht angezeigt */ - //'RELIVE_JSON' => 'configs/conferences/sub7/relive.json', + 'RELIVE_JSON' => 'configs/conferences/subscribe8/relive.json', /** * APCU-Cache-Zeit in Sekunden @@ -123,15 +123,15 @@ $GLOBALS['CONFIG']['OVERVIEW'] = array( * sonst werden sie nicht angezeigt. */ 'GROUPS' => array( - 'Vortragssäle' => array( - 'grosser_sitzungssaal', - 'kleiner_sitzungssaal' + 'Konferenz' => array( + 'grosser_sitzungssaal' ), - 'Sitzungszimmer (Workshops)' => array( - 'zimmer8', - 'zimmer4', - 'zimmer9', - 'zimmer3' + 'Workshops' => array( + 'kleiner_sitzungssaal', + 'raum8', + 'raum4', + 'raum9', + 'raum3' ), ), ); @@ -150,7 +150,7 @@ $GLOBALS['CONFIG']['ROOMS'] = array( /** * Angezeige-Name */ - 'DISPLAY' => 'Großer Sitzungssaal', + 'DISPLAY' => 'Sitzungssaal', /** * ID des Video/Audio-Streams. Die Stream-ID ist davon abhängig, welches @@ -257,7 +257,7 @@ $GLOBALS['CONFIG']['ROOMS'] = array( * Name des Raums im Fahrplan * Wenn diese Zeile auskommentiert ist wird der Raum-Slug verwendet */ - 'SCHEDULE_NAME' => 'TBD', + 'SCHEDULE_NAME' => 'Großer Sitzungssaal', /** * Feedback anzeigen (boolean) @@ -339,7 +339,7 @@ $GLOBALS['CONFIG']['ROOMS'] = array( * des globalen $GLOBALS['CONFIG']['TWITTER']-Blocks deaktiviert werden **/ 'TWITTER' => true, - ), + ) /*, 'kleiner_sitzungssaal' => array( 'DISPLAY' => 'Kleiner Sitzungssaal', @@ -353,13 +353,13 @@ $GLOBALS['CONFIG']['ROOMS'] = array( 'AUDIO' => true, 'SCHEDULE' => true, - 'SCHEDULE_NAME' => 'TBD', + 'SCHEDULE_NAME' => 'Kleiner Sitzungssaal', 'FEEDBACK' => true, 'EMBED' => true, 'TWITTER' => true, ), - 'zimmer8' => array( + 'raum8' => array( 'DISPLAY' => 'Sitzungszimmer 8', 'STREAM' => 'q8', @@ -372,13 +372,13 @@ $GLOBALS['CONFIG']['ROOMS'] = array( 'AUDIO' => true, 'SCHEDULE' => true, - 'SCHEDULE_NAME' => 'TBD', + 'SCHEDULE_NAME' => 'Raum8', 'FEEDBACK' => true, 'EMBED' => true, 'TWITTER' => true, ), - 'zimmer4' => array( + 'raum4' => array( 'DISPLAY' => 'Sitzungszimmer 4', 'STREAM' => 'q', @@ -396,7 +396,7 @@ $GLOBALS['CONFIG']['ROOMS'] = array( 'FEEDBACK' => true, 'EMBED' => true, 'TWITTER' => true, - ) + ) */ ); /** diff --git a/configs/conferences/subscribe8/download.sh b/configs/conferences/subscribe8/download.sh index d92ed32..633d1f6 100755 --- a/configs/conferences/subscribe8/download.sh +++ b/configs/conferences/subscribe8/download.sh @@ -1,7 +1,7 @@ #!/bin/sh # fahrplan -wget --no-check-certificate -q "https://frab.sendegate.de/de/subscribe8/public/schedule.xml" -O /tmp/subscribe8-schedule.xml && mv /tmp/subscribe8-schedule.xml schedule.xml +wget --no-check-certificate -q "https://frab.das-sendezentrum.de/de/subscribe8/public/schedule.xml" -O /tmp/subscribe8-schedule.xml && mv /tmp/subscribe8-schedule.xml schedule.xml # relive wget --no-check-certificate -q "http://live.ber.c3voc.de/releases/relive/subscribe8/index.json" -O /tmp/subscribe8-relive.json && mv /tmp/subscribe8-relive.json relive.json diff --git a/configs/conferences/subscribe8/logo.png b/configs/conferences/subscribe8/logo.png Binary files differnew file mode 100644 index 0000000..9c6d2aa --- /dev/null +++ b/configs/conferences/subscribe8/logo.png @@ -1,8 +1,16 @@ #!/bin/sh + +find . -name "*.php" -print0 | xargs -0 -n1 php -l +if [ $? -ne 0 ]; then + echo "not deploying b0rken code ;)" + exit 1 +fi + ssh voc@lb.dus.c3voc.de 'sudo sh' << EOT cd /srv/nginx/streaming-website git fetch origin git reset --hard origin/master chown -R voc:staff . chown -R downloader configs +./clear_cache EOT diff --git a/model/Schedule.php b/model/Schedule.php index 9fdc32d..c0ff69b 100644 --- a/model/Schedule.php +++ b/model/Schedule.php @@ -238,11 +238,6 @@ class Schedule extends ModelBase return array_search($a, $roomfilter) - array_search($b, $roomfilter); }); } - else - { - // sort by key - ksort($program); - } return $program; } |