diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 01aa607f7..7a4e81f4d 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -202,32 +202,6 @@ class ApiController extends Zend_Controller_Action exit; } } - - public function todayInfoAction() - { - if (Application_Model_Preference::GetAllow3rdPartyApi()){ - // disable the view and the layout - $this->view->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(true); - - $date = new Application_Model_DateHelper; - $utcTimeNow = $date->getUtcTimestamp(); - $utctimeEnd = Application_Model_DateHelper::GetDayEndTimestampInUtc(); - - $result = array("env"=>APPLICATION_ENV, - "schedulerTime"=>gmdate("Y-m-d H:i:s"), - "nextShow"=>Application_Model_Show::GetNextShows($utcTimeNow, 5, $utcTimeEnd)); - - Application_Model_Show::ConvertToLocalTimeZone($result["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); - - header("Content-type: text/javascript"); - echo $_GET['callback'].'('.json_encode($result).')'; - } else { - header('HTTP/1.0 401 Unauthorized'); - print 'You are not allowed to access this resource. '; - exit; - } - } public function weekInfoAction() { diff --git a/airtime_mvc/application/forms/SoundcloudPreferences.php b/airtime_mvc/application/forms/SoundcloudPreferences.php index ad85b22b1..1597bbe19 100644 --- a/airtime_mvc/application/forms/SoundcloudPreferences.php +++ b/airtime_mvc/application/forms/SoundcloudPreferences.php @@ -42,9 +42,10 @@ class Application_Form_SoundcloudPreferences extends Zend_Form_SubForm //SoundCloud Username $this->addElement('text', 'SoundCloudUser', array( 'class' => 'input_text', - 'label' => 'SoundCloud Email:', - 'required' => false, + 'label' => 'SoundCloud Email', + 'required' => true, 'filters' => array('StringTrim'), + 'autocomplete' => 'off', 'value' => Application_Model_Preference::GetSoundCloudUser(), 'decorators' => array( 'ViewHelper' @@ -54,9 +55,10 @@ class Application_Form_SoundcloudPreferences extends Zend_Form_SubForm //SoundCloud Password $this->addElement('password', 'SoundCloudPassword', array( 'class' => 'input_text', - 'label' => 'SoundCloud Password:', - 'required' => false, + 'label' => 'SoundCloud Password', + 'required' => true, 'filters' => array('StringTrim'), + 'autocomplete' => 'off', 'value' => Application_Model_Preference::GetSoundCloudPassword(), 'decorators' => array( 'ViewHelper' diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 85373d13a..799c98e08 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -468,13 +468,13 @@ class Application_Model_Show { return ""; } else { $row = $rows[0]; - + $dt = new DateTime($row["first_show"]." ".$row["start_time"], new DateTimeZone($row["timezone"])); $dt->setTimezone(new DateTimeZone("UTC")); return $dt->format("Y-m-d"); } } - + /** * Get the start time of the current show in UTC timezone. * @@ -673,34 +673,34 @@ class Application_Model_Show { return $days; } - /* Only used for shows that aren't repeating. - * + /* Only used for shows that aren't repeating. + * * @return Boolean: true if show has an instance, otherwise false. */ public function hasInstance(){ return (!is_null($this->getInstance())); } - /* Only used for shows that aren't repeating. - * - * @return CcShowInstancesQuery: An propel object representing a + /* Only used for shows that aren't repeating. + * + * @return CcShowInstancesQuery: An propel object representing a * row in the cc_show_instances table. */ public function getInstance(){ $showInstance = CcShowInstancesQuery::create() ->filterByDbShowId($this->getId()) ->findOne(); - + return $showInstance; } /* Only used for shows that are repeating. Note that this will return - * true even for dates that only have a "modified" show instance (does not + * true even for dates that only have a "modified" show instance (does not * check if the "modified_instance" column is set to true). This is intended - * behaviour. - * - * @param $p_dateTime: Date for which we are checking if instance + * behaviour. + * + * @param $p_dateTime: Date for which we are checking if instance * exists. - * - * @return Boolean: true if show has an instance on $p_dateTime, + * + * @return Boolean: true if show has an instance on $p_dateTime, * otherwise false. */ public function hasInstanceOnDate($p_dateTime){ return (!is_null($this->getInstanceOnDate($p_dateTime))); @@ -710,10 +710,10 @@ class Application_Model_Show { /* Only used for shows that are repeating. Note that this will return * shows that have been "modified" (does not check if the "modified_instance" * column is set to true). This is intended behaviour. - * + * * @param $p_dateTime: Date for which we are getting an instance. - * - * @return CcShowInstancesQuery: An propel object representing a + * + * @return CcShowInstancesQuery: An propel object representing a * row in the cc_show_instances table. */ public function getInstanceOnDate($p_dateTime){ global $CC_DBC; @@ -1071,16 +1071,13 @@ class Application_Model_Show { $timezone = $p_showRow["timezone"]; $start = $first_show." ".$start_time; - $utcStartDateTime = Application_Model_DateHelper::ConvertToUtcDateTime($start, $timezone); + + //start & end UTC DateTimes for the show. + list($utcStartDateTime, $utcEndDateTime) = Application_Model_Show::createUTCStartEndDateTime($start, $duration, $timezone); if ($utcStartDateTime->getTimestamp() < $p_dateTime->getTimestamp()) { - $utcStart = $utcStartDateTime->format("Y-m-d H:i:s"); - $sql = "SELECT timestamp '{$utcStart}' + interval '{$duration}'"; - $utcEndDateTime = new DateTime($CC_DBC->GetOne($sql), new DateTimeZone("UTC")); - - $date = new Application_Model_DateHelper(); - $currentUtcTimestamp = $date->getUtcTimestamp(); + $currentUtcTimestamp = gmdate("Y-m-d H:i:s"); $show = new Application_Model_Show($show_id); if ($show->hasInstance()){ @@ -1141,8 +1138,7 @@ class Application_Model_Show { $record = $p_showRow["record"]; $timezone = $p_showRow["timezone"]; - $date = new Application_Model_DateHelper(); - $currentUtcTimestamp = $date->getUtcTimestamp(); + $currentUtcTimestamp = gmdate("Y-m-d H:i:s"); if(isset($next_pop_date)) { $start = $next_pop_date." ".$start_time; @@ -1162,9 +1158,7 @@ class Application_Model_Show { while($utcStartDateTime->getTimestamp() <= $p_dateTime->getTimestamp() && (is_null($utcLastShowDateTime) || $utcStartDateTime->getTimestamp() < $utcLastShowDateTime->getTimestamp())){ - $utcStart = $utcStartDateTime->format("Y-m-d H:i:s"); - $sql = "SELECT timestamp '{$utcStart}' + interval '{$duration}'"; - $utcEndDateTime = new DateTime($CC_DBC->GetOne($sql), new DateTimeZone("UTC")); + list($utcStartDateTime, $utcEndDateTime) = Application_Model_Show::createUTCStartEndDateTime($start, $duration, $timezone); if ($show->hasInstanceOnDate($utcStartDateTime)){ $ccShowInstance = $show->getInstanceOnDate($utcStartDateTime); @@ -1199,25 +1193,25 @@ class Application_Model_Show { if ($p_interval == 'P1M'){ - /* When adding months, there is a problem if we are on January 31st and add one month with PHP. + /* When adding months, there is a problem if we are on January 31st and add one month with PHP. * What ends up happening is that since February 31st doesn't exist, the date returned is * March 3rd. For now let's ignore the day and assume we are always working with the * first of each month, and use PHP to add 1 month to this (this will take care of rolling - * over the years 2011->2012, etc.). Then let's append the actual day, and use the php + * over the years 2011->2012, etc.). Then let's append the actual day, and use the php * checkdate() function, to see if it is valid. If not, then we'll just skip this month. */ - + $startDt = new DateTime($start, new DateTimeZone($timezone)); - + /* pass in only the year and month (not the day) */ $dt = new DateTime($startDt->format("Y-m"), new DateTimeZone($timezone)); - + /* Keep adding 1 month, until we find the next month that contains the day * we are looking for (31st day for example) */ do { $dt->add(new DateInterval($p_interval)); } while(!checkdate($dt->format("m"), $startDt->format("d"), $dt->format("Y"))); $dt->setDate($dt->format("Y"), $dt->format("m"), $startDt->format("d")); - + $start = $dt->format("Y-m-d H:i:s"); $dt->setTimezone(new DateTimeZone('UTC')); @@ -1236,49 +1230,78 @@ class Application_Model_Show { Application_Model_Show::setNextPop($start, $show_id, $day); } + /* + * @param $p_start + * timestring format "Y-m-d H:i:s" (not UTC) + * @param $p_duration + * string time interval (h)h:(m)m(:ss) + * @param $p_timezone + * string "Europe/Prague" + * @param $p_offset + * array (days, hours, mins) used for rebroadcast shows. + * + * @return + * array of 2 DateTime objects, start/end time of the show in UTC. + */ + private static function createUTCStartEndDateTime($p_start, $p_duration, $p_timezone=null, $p_offset=null) + { + $timezone = $p_timezone ? $p_timezone : date_default_timezone_get(); + + $startDateTime = new DateTime($p_start, new DateTimeZone($timezone)); + if (isset($p_offset)) { + $startDateTime->add(new DateInterval("P{$p_offset["days"]}DT{$p_offset["hours"]}H{$p_offset["mins"]}M")); + } + //convert time to UTC + $startDateTime->setTimezone(new DateTimeZone('UTC')); + + $endDateTime = clone $startDateTime; + $duration = explode(":", $p_duration); + list($hours, $mins) = array_slice($duration, 0, 2); + $endDateTime->add(new DateInterval("PT{$hours}H{$mins}M")); + + return array($startDateTime, $endDateTime); + } + /* Create rebroadcast instances for a created show marked for recording * - * @param $p_rebroadcasts rows gotten from the db table cc_show_rebroadcasts, tells airtime when to schedule the rebroadcasts. - * @param $p_currentUtcTimestamp a timestring in format "Y-m-d H:i:s", current UTC time. - * @param $p_showId int of the show it belongs to (from cc_show) - * @param $p_showInstanceId the instance id of the created recorded show instance + * @param $p_rebroadcasts + * rows gotten from the db table cc_show_rebroadcasts, tells airtime when to schedule the rebroadcasts. + * @param $p_currentUtcTimestamp + * a timestring in format "Y-m-d H:i:s", current UTC time. + * @param $p_showId + * int of the show it belongs to (from cc_show) + * @param $p_showInstanceId + * the instance id of the created recorded show instance * (from cc_show_instances), used to associate rebroadcasts to this show. - * @param $p_startTime a timestring in format "Y-m-d H:i:s" in the timezone, not UTC of the rebroadcasts' parent recorded show. - * @param $p_duration duration of the show in format 1:0 - * @param $p_timezone string of user's timezone "Europe/Prague" + * @param $p_startTime + * a timestring in format "Y-m-d H:i:s" in the timezone, not UTC of the rebroadcasts' parent recorded show. + * @param $p_duration + * string time interval (h)h:(m)m:(ss) length of the show. + * @param $p_timezone + * string of user's timezone "Europe/Prague" * */ private static function createRebroadcastInstances($p_rebroadcasts, $p_currentUtcTimestamp, $p_showId, $p_showInstanceId, $p_startTime, $p_duration, $p_timezone=null){ - global $CC_DBC; - Logging::log('Count of rebroadcasts '. count($p_rebroadcasts)); + //Y-m-d + //use only the date part of the show start time stamp for the offsets to work properly. + $date = explode(" ", $p_startTime); + $start_date = $date[0]; foreach($p_rebroadcasts as $rebroadcast) { - //use only the date part of the show start time stamp for the offsets to work properly. - $sql = "SELECT date '{$p_startTime}' + interval '{$rebroadcast["day_offset"]}' + interval '{$rebroadcast["start_time"]}'"; - $rebroadcast_start_time = $CC_DBC->GetOne($sql); - Logging::log('rebroadcast start '.$rebroadcast_start_time); + $days = explode(" ", $rebroadcast["day_offset"]); + $time = explode(":", $rebroadcast["start_time"]); + $offset = array("days"=>$days[0], "hours"=>$time[0], "mins"=>$time[1]); - $sql = "SELECT timestamp '{$rebroadcast_start_time}' + interval '{$p_duration}'"; - $rebroadcast_end_time = $CC_DBC->GetOne($sql); - Logging::log('rebroadcast end '.$rebroadcast_end_time); + list($utcStartDateTime, $utcEndDateTime) = Application_Model_Show::createUTCStartEndDateTime($start_date, $p_duration, $p_timezone, $offset); - //convert to UTC, after we have used the defined offsets to calculate rebroadcasts. - $utc_rebroadcast_start_time = Application_Model_DateHelper::ConvertToUtcDateTime($rebroadcast_start_time, $p_timezone); - $utc_rebroadcast_end_time = Application_Model_DateHelper::ConvertToUtcDateTime($rebroadcast_end_time, $p_timezone); - - Logging::log('UTC rebroadcast start '.$utc_rebroadcast_start_time->format("Y-m-d H:i:s")); - Logging::log('UTC rebroadcast end '.$utc_rebroadcast_end_time->format("Y-m-d H:i:s")); - Logging::log('Current UTC timestamp '.$p_currentUtcTimestamp); - - if ($utc_rebroadcast_start_time->format("Y-m-d H:i:s") > $p_currentUtcTimestamp){ - Logging::log('Creating rebroadcast show starting at UTC '.$utc_rebroadcast_start_time->format("Y-m-d H:i:s")); + if ($utcStartDateTime->format("Y-m-d H:i:s") > $p_currentUtcTimestamp){ $newRebroadcastInstance = new CcShowInstances(); $newRebroadcastInstance->setDbShowId($p_showId); - $newRebroadcastInstance->setDbStarts($utc_rebroadcast_start_time->format("Y-m-d H:i:s")); - $newRebroadcastInstance->setDbEnds($utc_rebroadcast_end_time->format("Y-m-d H:i:s")); + $newRebroadcastInstance->setDbStarts($utcStartDateTime); + $newRebroadcastInstance->setDbEnds($utcEndDateTime); $newRebroadcastInstance->setDbRecord(0); $newRebroadcastInstance->setDbRebroadcast(1); $newRebroadcastInstance->setDbOriginalShow($p_showInstanceId); @@ -1552,7 +1575,7 @@ class Application_Model_Show { ." AND si.starts >= TIMESTAMP '$timeStart'" ." AND si.starts < TIMESTAMP $timeEnd" ." ORDER BY si.starts"; - + // defaults to retrieve all shows within the interval if $limit not set if($limit != 0) { $sql = $sql . " LIMIT $limit"; diff --git a/airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml b/airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml index 99456616a..20bcc92c9 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml @@ -40,7 +40,9 @@
- +
element->getElement('SoundCloudUser') ?> @@ -53,7 +55,9 @@
- +
element->getElement('SoundCloudPassword') ?> diff --git a/widgets/js/jquery.showinfo.js b/widgets/js/jquery.showinfo.js index b57f8d7c4..1c75b7918 100644 --- a/widgets/js/jquery.showinfo.js +++ b/widgets/js/jquery.showinfo.js @@ -16,7 +16,9 @@ getServerData(); function updateWidget(){ - var shows = sd.getNextShows(); + var currentShow = sd.getCurrentShow(); + var nextShows = sd.getNextShows(); + var shows = currentShow.length == 0 ? nextShows : currentShow.concat(nextShows); tableString = ""; tableString += "

" + options.text.onAirToday + "

"; @@ -50,7 +52,7 @@ } function getServerData(){ - $.ajax({ url: options.sourceDomain + "api/today-info/", dataType:"jsonp", success:function(data){ + $.ajax({ url: options.sourceDomain + "api/live-info/", dataType:"jsonp", success:function(data){ processData(data); }, error:airtimeScheduleJsonpError}); setTimeout(getServerData, options.updatePeriod*1000);