diff --git a/LICENSE_3RD_PARTY b/LICENSE_3RD_PARTY index 892af37a1..06dcf9016 100644 --- a/LICENSE_3RD_PARTY +++ b/LICENSE_3RD_PARTY @@ -29,8 +29,19 @@ Linked code: - License: LGPLv3 * Soundcloud php api wrapper - - https://github.com/mptre/php-soundcloud/blob/master/Services/Soundcloud.php + - Web site: https://github.com/mptre/php-soundcloud/blob/master/Services/Soundcloud.php - License: MIT + - Compatible with the GPL: Yes. See http://www.gnu.org/licenses/license-list.html + + * Kombu + - Web site: http://pypi.python.org/pypi/kombu/ + - License: New BSD + - Compatible with GPLv3? Yes. + + * PHP-AMQPLIB + - Web site: https://github.com/tnc/php-amqplib + - License: LGPLv2.1 + - Compatible with GPLv3? Yes ---------------- Non-linked code: diff --git a/application/configs/conf.php b/application/configs/conf.php index 74c3b10ac..b96db1f1d 100644 --- a/application/configs/conf.php +++ b/application/configs/conf.php @@ -61,38 +61,6 @@ $CC_CONFIG = array( 'zendPath' => dirname(__FILE__).'/../../library/Zend', 'phingPath' => dirname(__FILE__).'/../../library/phing', - // name of admin group - //'AdminsGr' => 'Admins', - - // name of station preferences group -// 'StationPrefsGr'=> 'StationPrefs', - - // name of 'all users' group - //'AllGr' => 'All', - - /* ==================================== application-specific configuration */ -// 'objtypes' => array( -// 'Storage' => array(/*'Folder',*/ 'File' /*, 'Replica'*/), -// 'File' => array(), -// 'audioclip' => array(), -// 'playlist' => array(), -// ), -// 'allowedActions'=> array( -// 'File' => array('editPrivs', 'write', 'read'), -// 'audioclip' => array('editPrivs', 'write', 'read'), -// 'playlist' => array('editPrivs', 'write', 'read'), -// ), -// 'allActions' => array( -// 'editPrivs', 'write', 'read', 'subjects' -// ), - - /* =================================================== cron configuration */ - 'cronUserName' => 'www-data', -# 'lockfile' => dirname(__FILE__).'/cron/cron.lock', - 'lockfile' => dirname(__FILE__).'/stor/buffer/cron.lock', - 'cronfile' => dirname(__FILE__).'/cron/croncall.php', - 'paramdir' => dirname(__FILE__).'/cron/params', -// 'systemPrefId' => "0", // ID for system prefs in prefs table ); // Add database table names @@ -119,11 +87,6 @@ $CC_CONFIG['permSequence'] = $CC_CONFIG['permTable'].'_id'; $CC_CONFIG['subjSequence'] = $CC_CONFIG['subjTable'].'_id'; $CC_CONFIG['smembSequence'] = $CC_CONFIG['smembTable'].'_id'; -// System users/groups - they cannot be deleted -//$CC_CONFIG['sysSubjs'] = array( -// 'root', /*$CC_CONFIG['AdminsGr'],*/ /*$CC_CONFIG['AllGr'],*/ $CC_CONFIG['StationPrefsGr'] -//); - // Add libs to the PHP path $old_include_path = get_include_path(); set_include_path('.'.PATH_SEPARATOR.$CC_CONFIG['pearPath'] diff --git a/application/controllers/ApiController.php b/application/controllers/ApiController.php index 7f1cf524e..4f5f4eae3 100644 --- a/application/controllers/ApiController.php +++ b/application/controllers/ApiController.php @@ -104,8 +104,6 @@ class ApiController extends Zend_Controller_Action } public function liveInfoAction(){ - global $CC_CONFIG; - // disable the view and the layout $this->view->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); @@ -126,6 +124,22 @@ class ApiController extends Zend_Controller_Action echo $_GET['callback'].'('.json_encode($result).')'; } + public function weekInfoAction(){ + // disable the view and the layout + $this->view->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(true); + + $dow = array("sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"); + + $result = array(); + for ($i=0; $i<7; $i++){ + $result[$dow[$i]] = Show_DAL::GetShowsByDayOfWeek($i); + } + + header("Content-type: text/javascript"); + echo $_GET['callback'].'('.json_encode($result).')'; + } + public function scheduleAction() { global $CC_CONFIG; diff --git a/application/models/Schedule.php b/application/models/Schedule.php index d1d556e1f..d336546a5 100644 --- a/application/models/Schedule.php +++ b/application/models/Schedule.php @@ -466,6 +466,30 @@ class Schedule { { global $CC_CONFIG, $CC_DBC; + $sql = "SELECT DISTINCT" + ." pt.name," + ." ft.track_title," + ." ft.artist_name," + ." ft.album_title," + ." st.starts," + ." st.ends," + ." st.clip_length," + ." st.media_item_played," + ." st.group_id," + ." show.name as show_name," + ." st.instance_id" + ." FROM $CC_CONFIG[scheduleTable] st" + ." LEFT JOIN $CC_CONFIG[filesTable] ft" + ." ON st.file_id = ft.id" + ." LEFT JOIN $CC_CONFIG[playListTable] pt" + ." ON st.playlist_id = pt.id" + ." LEFT JOIN $CC_CONFIG[showInstances] si" + ." ON st.instance_id = si.id" + ." LEFT JOIN $CC_CONFIG[showTable] show" + ." ON si.show_id = show.id" + ." WHERE st.starts < si.ends"; + +/* $sql = "SELECT DISTINCT pt.name, ft.track_title, ft.artist_name, ft.album_title, st.starts, st.ends, st.clip_length, st.media_item_played, st.group_id, show.name as show_name, st.instance_id" ." FROM $CC_CONFIG[scheduleTable] st, $CC_CONFIG[filesTable] ft, $CC_CONFIG[playListTable] pt, $CC_CONFIG[showInstances] si, $CC_CONFIG[showTable] show" ." WHERE st.playlist_id = pt.id" @@ -473,6 +497,7 @@ class Schedule { ." AND st.instance_id = si.id" ." AND si.show_id = show.id" ." AND st.starts < si.ends"; +*/ if ($timePeriod < 0){ $sql .= " AND st.ends < TIMESTAMP '$timeStamp'" @@ -628,17 +653,24 @@ class Schedule { * @param string $p_toDateTime * In the format "YYYY-MM-DD-HH-mm-SS" */ - public static function GetScheduledPlaylists() + public static function GetScheduledPlaylists($p_fromDateTime = null, $p_toDateTime = null) { global $CC_CONFIG, $CC_DBC; - $t1 = new DateTime(); - $range_start = $t1->format("Y-m-d H:i:s"); - - $t2 = new DateTime(); - $t2->add(new DateInterval("PT24H")); - $range_end = $t2->format("Y-m-d H:i:s"); - + if (is_null($p_fromDateTime)) { + $t1 = new DateTime(); + $range_start = $t1->format("Y-m-d H:i:s"); + } else { + $range_start = Schedule::PypoTimeToAirtimeTime($p_fromDateTime); + } + if (is_null($p_fromDateTime)) { + $t2 = new DateTime(); + $t2->add(new DateInterval("PT24H")); + $range_end = $t2->format("Y-m-d H:i:s"); + } else { + $range_end = Schedule::PypoTimeToAirtimeTime($p_toDateTime); + } + // Scheduler wants everything in a playlist $data = Schedule::GetItems($range_start, $range_end, true); $playlists = array(); diff --git a/application/models/Shows.php b/application/models/Shows.php index 8aa83beae..cf7df53ab 100644 --- a/application/models/Shows.php +++ b/application/models/Shows.php @@ -58,6 +58,24 @@ class Show { $show->setDbBackgroundColor($backgroundColor); } + public function getHosts() + { + global $CC_DBC; + + $sql = "SELECT first_name, last_name + FROM cc_show_hosts LEFT JOIN cc_subjs ON cc_show_hosts.subjs_id = cc_subjs.id + WHERE show_id = {$this->_showId}"; + + $hosts = $CC_DBC->GetAll($sql); + + $res = array(); + foreach($hosts as $host) { + $res[] = $host['first_name']." ".$host['last_name']; + } + + return $res; + } + public function cancelShow($day_timestamp) { global $CC_DBC; @@ -930,7 +948,31 @@ class Show_DAL { ." OR (si.starts < TIMESTAMP '$timeNow' + INTERVAL '$end seconds' AND si.ends > TIMESTAMP '$timeNow' + INTERVAL '$end seconds'))" //checking for st.starts IS NULL so that the query also returns shows that do not have any items scheduled. ." AND (st.starts < si.ends OR st.starts IS NULL)" - ." ORDER BY st.starts"; + ." ORDER BY si.starts, st.starts"; + + return $CC_DBC->GetAll($sql); + } + + public static function GetShowsByDayOfWeek($day){ + //DOW FROM TIMESTAMP + //The day of the week (0 - 6; Sunday is 0) (for timestamp values only) + + //SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); + //Result: 5 + + global $CC_CONFIG, $CC_DBC; + $sql = "SELECT" + ." si.starts as show_starts," + ." si.ends as show_ends," + ." s.name as show_name," + ." s.url as url" + ." FROM $CC_CONFIG[showInstances] si" + ." LEFT JOIN $CC_CONFIG[showTable] s" + ." ON si.show_id = s.id" + ." WHERE EXTRACT(DOW FROM si.starts) = $day" + ." AND EXTRACT(WEEK FROM si.starts) = EXTRACT(WEEK FROM localtimestamp)"; + + //echo $sql; return $CC_DBC->GetAll($sql); } diff --git a/application/models/StoredFile.php b/application/models/StoredFile.php index ecff91caa..cd98aff60 100644 --- a/application/models/StoredFile.php +++ b/application/models/StoredFile.php @@ -1481,7 +1481,8 @@ class StoredFile { public function getFileUrl() { global $CC_CONFIG; - return "http://".$CC_CONFIG["storageUrlHost"] + return "http://$CC_CONFIG[storageUrlHost]" + .":$CC_CONFIG[storageUrlPort]" .$CC_CONFIG["apiPath"]."get-media/file/" .$this->gunid.".".$this->getFileExtension(); } diff --git a/build/schema.xml b/build/schema.xml index f00ad14fb..3bd235e09 100644 --- a/build/schema.xml +++ b/build/schema.xml @@ -24,13 +24,6 @@ - - - - - - -
@@ -295,45 +288,4 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/install/airtime-install.php b/install/airtime-install.php index e0c068d2d..227b1388f 100644 --- a/install/airtime-install.php +++ b/install/airtime-install.php @@ -52,9 +52,6 @@ AirtimeInstall::CreateSymlinks($CC_CONFIG["storageDir"]); echo "* Importing sample audio clips".PHP_EOL; system(__DIR__."/../utils/airtime-import --copy ../audio_samples/ > /dev/null"); -echo "* Python eggs Setup".PHP_EOL; -AirtimeInstall::SetUpPythonEggs(); - echo PHP_EOL."*** Pypo Installation ***".PHP_EOL; system("python ".__DIR__."/../python_apps/pypo/install/pypo-install.py"); diff --git a/install/installInit.php b/install/installInit.php index c49314672..1a47f4d9f 100644 --- a/install/installInit.php +++ b/install/installInit.php @@ -203,13 +203,6 @@ class AirtimeInstall { system($command); } - public static function SetUpPythonEggs() - { - //install poster streaming upload - $command = "sudo easy_install poster"; - @exec($command); - } - public static function DeleteFilesRecursive($p_path) { $command = "rm -rf $p_path"; diff --git a/plugins/jquery.showinfo.js b/plugins/jquery.showinfo.js index c31381a10..87b5c1ad8 100644 --- a/plugins/jquery.showinfo.js +++ b/plugins/jquery.showinfo.js @@ -6,6 +6,7 @@ sourceDomain: "http://localhost/", //where to get show status from }; var options = $.extend(defaults, options); + options.sourceDomain = addEndingBackslash(options.sourceDomain); return this.each(function() { var obj = $(this); @@ -58,7 +59,7 @@ $.ajax({ url: options.sourceDomain + "api/live-info/", dataType:"jsonp", success:function(data){ processData(data); }, error:function(jqXHR, textStatus, errorThrown){}}); - setTimeout(getServerData, defaults.updatePeriod*1000); + setTimeout(getServerData, options.updatePeriod*1000); } }); }; @@ -71,9 +72,10 @@ var defaults = { updatePeriod: 5, //seconds sourceDomain: "http://localhost/", //where to get show status from - audioStreamSource: "" //where to get audio stream from + audioStreamSource: "http://localhost:8000/airtime.mp3" //where to get audio stream from }; var options = $.extend(defaults, options); + options.sourceDomain = addEndingBackslash(options.sourceDomain); return this.each(function() { var obj = $(this); @@ -106,7 +108,7 @@ } obj.empty(); - obj.append("Listen WADR Live"); + obj.append("Listen WADR Live"); obj.append("

"+showStatus+" >>

"); obj.append("