<?php require_once('program.php'); function link_index() { return ''; } function link_room($room) { return rawurlencode($room).'/'; } function link_player($room, $format = 'hd', $translated = false) { $defaultformat = room_has_hd($room) ? 'hd' : 'sd'; return rawurlencode($room).'/'.(($defaultformat == $format || 'video' == $format) ? '' : rawurlencode($format).'/').($translated ? 'translated/' : ''); } function link_stream($protocol, $room, $format, $translated = false) { $language = $translated ? 'translated' : 'native'; switch ($protocol) { case 'rtmp': return 'rtmp://cdn.c3voc.de/stream/'.rawurlencode(streamname($room)).'_'.rawurlencode($language).'_'.rawurlencode($format); case 'hls': return 'http://cdn.c3voc.de/hls/'.rawurlencode(streamname($room)).'_'.rawurlencode($language).($format == 'auto' ? '' : '_'.rawurlencode($format)).'.m3u8'; case 'webm': return 'http://cdn.c3voc.de/'.rawurlencode(streamname($room)).'_'.rawurlencode($language).'_'.rawurlencode($format).'.webm'; case 'music': return 'http://cdn.c3voc.de/'.rawurlencode(streamname($room)).'.'.rawurlencode($format); case 'audio': return 'http://cdn.c3voc.de/'.rawurlencode(streamname($room)).'_'.rawurlencode($language).'.'.rawurlencode($format); case 'slide': return 'http://cdn.c3voc.de/slides/'.rawurlencode(streamname($room)).'/current.png'; } return '#'; } function link_vod($id) { return 'relive/'.rawurlencode($id).'/'; } function streamname($room) { switch($room) { case 'saal1': return 's1'; case 'saal2': return 's2'; case 'saalg': return 's3'; case 'saal6': return 's4'; case 'sendezentrum': return 's5'; default: return $room; } } function irc_channel($room) { return '31C3-hall-'.strtoupper(substr($room, 4, 1)); } function twitter_hashtag($room) { return '#hall'.strtoupper(substr($room, 4, 1)); } function format_text($format) { return @$GLOBALS['CONFIG']['FORMAT_TEXT'][$format] ?: ''; } function baseurl() { if(isset($GLOBALS['CONFIG']['baseurl'])) return $GLOBALS['CONFIG']['baseurl']; $base = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']) ? 'https://' : 'http://'; $base .= $_SERVER['HTTP_HOST']; $base .= forceslash(dirname($_SERVER['SCRIPT_NAME'])); return $base; } function forceslash($url) { $url = rtrim($url, '/'); if(strlen($url) > 0) $url .= '/'; return $url; } function strtoduration($str) { $parts = explode(':', $str); return ((int)$parts[0] * 60 + (int)$parts[1]) * 60; } function has($keychain) { return _has($GLOBALS['CONFIG'], $keychain); } function _has($array, $keychain) { if(!is_array($keychain)) $keychain = explode('.', $keychain); $key = $keychain[0]; if(!isset($array[$key])) return false; if(count($keychain) == 1) return true; return _has($array[$key], array_slice($keychain, 1)); } function get($keychain, $default = null) { return _get($GLOBALS['CONFIG'], $keychain, $default); } function _get($array, $keychain, $default) { if(!is_array($keychain)) $keychain = explode('.', $keychain); $key = $keychain[0]; if(!isset($array[$key])) return $default; if(count($keychain) == 1) return $array[$key]; return _get($array[$key], array_slice($keychain, 1), $default); } function room_has_hd($room) { $formats = get("ROOMS.$room.FORMATS"); return count(array_intersect(array('rtmp-hd', 'hls-hd', 'webm-hd'), $formats)) > 0; } function room_has_sd($room) { $formats = get("ROOMS.$room.FORMATS"); return count(array_intersect(array('rtmp-sd', 'hls-sd', 'webm-sd'), $formats)) > 0; } function room_has_video($room) { return room_has_hd($room) || room_has_sd($room); } function room_has_audio($room) { $formats = get("ROOMS.$room.FORMATS"); return count(array_intersect(array('audio-mp3', 'audio-opus', 'audio-ogg'), $formats)) > 0; } function room_has_music($room) { $formats = get("ROOMS.$room.FORMATS"); return count(array_intersect(array('music-mp3', 'music-opus', 'music-ogg'), $formats)) > 0; } function room_has_slides($room) { $formats = get("ROOMS.$room.FORMATS"); return count(array_intersect(array('slides'), $formats)) > 0; } function room_has_rtmp($room) { $formats = get("ROOMS.$room.FORMATS"); return count(array_intersect(array('rtmp-hd', 'rtmp-sd'), $formats)) > 0; } function room_has_webm($room) { $formats = get("ROOMS.$room.FORMATS"); return count(array_intersect(array('webm-hd', 'webm-sd'), $formats)) > 0; } function room_has_hls($room) { $formats = get("ROOMS.$room.FORMATS"); return count(array_intersect(array('hls-hd', 'hls-sd'), $formats)) > 0; } function room_has_irc($room) { return get("ROOMS.$room.IRC") && has("IRC"); } function room_has_twitter($room) { return get("ROOMS.$room.TWITTER") && has("TWITTER"); } function room_has_chat($room) { return room_has_irc($room) || room_has_twitter($room); } function room_get_irc_url($room) { $cfg = get("ROOMS.$room.IRC_CONFIG", get("IRC")); return sprintf($cfg['URL'], rawurlencode($room)); } function room_get_irc_display($room) { $cfg = get("ROOMS.$room.IRC_CONFIG", get("IRC")); return sprintf($cfg['DISPLAY'], $room); } function room_get_twitter_hashtag($room) { $cfg = get("ROOMS.$room.TWITTER_CONFIG", get("TWITTER")); return sprintf($cfg['TEXT'], $room); } function room_get_twitter_display($room) { $cfg = get("ROOMS.$room.TWITTER_CONFIG", get("TWITTER")); return sprintf($cfg['DISPLAY'], $room); } function startswith($needle, $haystack) { return substr($haystack, 0, strlen($needle)) == $needle; } function relive_talks() { $talks = @file_get_contents(get('OVERVIEW.RELIVE_JSON')); $talks = utf8_decode($talks); $talks = (array)json_decode($talks, true); usort($talks, function($a, $b) { $sort = array('live', 'recorded', 'released'); return array_search($a['status'], $sort) > array_search($b['status'], $sort); }); $talks_by_id = array(); foreach ($talks as $value) { $talks_by_id[$value['id']] = $value; } return $talks_by_id; }