From a0217f715fe25bfe5b507ad6985431a0ab489856 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 15 Nov 2011 15:45:08 -0500 Subject: [PATCH] CC-3037: Nowplaying bar not showing current show -fixed --- .../application/controllers/ApiController.php | 13 ++++++- .../controllers/ScheduleController.php | 22 ++++++++++- airtime_mvc/application/models/DateHelper.php | 21 ++++++++--- airtime_mvc/application/models/Nowplaying.php | 4 +- airtime_mvc/application/models/Schedule.php | 15 +++++--- airtime_mvc/application/models/Show.php | 37 ++++++------------- 6 files changed, 72 insertions(+), 40 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index c6d845b5b..7ec424199 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -188,6 +188,10 @@ class ApiController extends Zend_Controller_Action "nextShow"=>Application_Model_Show::GetNextShows($timeNow, 5), "timezone"=> date("T"), "timezoneOffset"=> date("Z")); + + //Convert from UTC to localtime for user. + Application_Model_Show::ConvertToLocalTimeZone($result["currentShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); + Application_Model_Show::ConvertToLocalTimeZone($result["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); //echo json_encode($result); header("Content-type: text/javascript"); @@ -213,6 +217,8 @@ class ApiController extends Zend_Controller_Action $result = array("env"=>APPLICATION_ENV, "schedulerTime"=>gmdate("Y-m-d H:i:s"), "nextShow"=>Application_Model_Show::GetNextShows($timeNow, 5, $timeEnd)); + + Application_Model_Show::ConvertToLocalTimeZone($result["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); header("Content-type: text/javascript"); echo $_GET['callback'].'('.json_encode($result).')'; @@ -234,7 +240,10 @@ class ApiController extends Zend_Controller_Action $result = array(); for ($i=0; $i<7; $i++){ - $result[$dow[$i]] = Application_Model_Show::GetShowsByDayOfWeek($i); + $shows = Application_Model_Show::GetShowsByDayOfWeek($i); + Application_Model_Show::ConvertToLocalTimeZone($shows, array("show_starts", "show_ends")); + + $result[$dow[$i]] = $shows; } header("Content-type: text/javascript"); @@ -361,6 +370,8 @@ class ApiController extends Zend_Controller_Action $this->view->is_recording = false; $rows = Application_Model_Show::GetCurrentShow($today_timestamp); + Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp")); + if (count($rows) > 0){ $this->view->is_recording = ($rows[0]['record'] == 1); } diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index d244097ca..4c9e3068d 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -293,7 +293,27 @@ class ScheduleController extends Zend_Controller_Action public function getCurrentPlaylistAction() { - $this->view->entries = Application_Model_Schedule::GetPlayOrderRange(); + + $range = Application_Model_Schedule::GetPlayOrderRange(); + + /* Convert all UTC times to localtime before sending back to user. */ + if (isset($range["previous"])){ + $range["previous"]["starts"] = Application_Model_DateHelper::ConvertToLocalDateTimeString($range["previous"]["starts"]); + $range["previous"]["ends"] = Application_Model_DateHelper::ConvertToLocalDateTimeString($range["previous"]["ends"]); + } + if (isset($range["current"])){ + $range["current"]["starts"] = Application_Model_DateHelper::ConvertToLocalDateTimeString($range["current"]["starts"]); + $range["current"]["ends"] = Application_Model_DateHelper::ConvertToLocalDateTimeString($range["current"]["ends"]); + } + if (isset($range["next"])){ + $range["next"]["starts"] = Application_Model_DateHelper::ConvertToLocalDateTimeString($range["next"]["starts"]); + $range["next"]["ends"] = Application_Model_DateHelper::ConvertToLocalDateTimeString($range["next"]["ends"]); + } + + Application_Model_Show::ConvertToLocalTimeZone($range["currentShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); + Application_Model_Show::ConvertToLocalTimeZone($range["nextShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); + + $this->view->entries = $range; } public function findPlaylistsAction() diff --git a/airtime_mvc/application/models/DateHelper.php b/airtime_mvc/application/models/DateHelper.php index 1ab295d7b..b1d01f4f4 100644 --- a/airtime_mvc/application/models/DateHelper.php +++ b/airtime_mvc/application/models/DateHelper.php @@ -245,11 +245,22 @@ class Application_Model_DateHelper return $dateTime; } - public static function ConvertToLocalDateTimeString($p_dateString, $format="Y-m-d H:i:s"){ - $dateTime = new DateTime($p_dateString, new DateTimeZone("UTC")); - $dateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); - - return $dateTime->format($format); + /* Convenience method to return a date formatted into a String rather than a + * DateTime object. Note that if an empty string is provided for $p_dateString + * then the current time is provided. + * + * @param $p_dateString + * Date string in UTC timezone. + * @param $p_format + * Format which the string should be returned in. + * + * @return string + * Date String in localtime + * */ + public static function ConvertToLocalDateTimeString($p_dateString, $p_format="Y-m-d H:i:s"){ + if (is_null($p_dateString) || strlen($p_dateString) == 0) + return $p_dateString; + return self::ConvertToLocalDateTime($p_dateString)->format($p_format); } } diff --git a/airtime_mvc/application/models/Nowplaying.php b/airtime_mvc/application/models/Nowplaying.php index 50aafd72b..88540d867 100644 --- a/airtime_mvc/application/models/Nowplaying.php +++ b/airtime_mvc/application/models/Nowplaying.php @@ -101,7 +101,9 @@ class Application_Model_Nowplaying $data[] = self::CreateGapRow($gapTime); } - return array("currentShow"=>Application_Model_Show::GetCurrentShow($timeNow), "rows"=>$data); + $rows = Application_Model_Show::GetCurrentShow($timeNow); + Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp")); + return array("currentShow"=>$rows, "rows"=>$data); } public static function ShouldShowPopUp(){ diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 3fb7df805..725578348 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -145,15 +145,18 @@ class Application_Model_Schedule { $date = new Application_Model_DateHelper; $timeNow = $date->getTimestamp(); - return array("env"=>APPLICATION_ENV, + $utcTimeNow = $date->getUtcTimestamp(); + $range = array("env"=>APPLICATION_ENV, "schedulerTime"=>$timeNow, - "previous"=>Application_Model_Dashboard::GetPreviousItem($timeNow), - "current"=>Application_Model_Dashboard::GetCurrentItem($timeNow), - "next"=>Application_Model_Dashboard::GetNextItem($timeNow), - "currentShow"=>Application_Model_Show::GetCurrentShow($timeNow), - "nextShow"=>Application_Model_Show::GetNextShows($timeNow, 1), + "previous"=>Application_Model_Dashboard::GetPreviousItem($utcTimeNow), + "current"=>Application_Model_Dashboard::GetCurrentItem($utcTimeNow), + "next"=>Application_Model_Dashboard::GetNextItem($utcTimeNow), + "currentShow"=>Application_Model_Show::GetCurrentShow($utcTimeNow), + "nextShow"=>Application_Model_Show::GetNextShows($utcTimeNow, 1), "timezone"=> date("T"), "timezoneOffset"=> date("Z")); + + return $range; } public static function GetLastScheduleItem($p_timeNow){ diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 1990663df..3f8922bff 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -1373,20 +1373,15 @@ class Application_Model_Show { public static function GetCurrentShow($timeNow) { global $CC_CONFIG, $CC_DBC; - - // Need this in the query below, so that we are NOT comparing UTC - // timestamps si.starts/si.ends with local timestamps $timeNow - $timezoneInterval = Application_Model_Show::GetTimezoneIntervalString(true); $sql = "SELECT si.starts as start_timestamp, si.ends as end_timestamp, s.name, s.id, si.id as instance_id, si.record, s.url" ." FROM $CC_CONFIG[showInstances] si, $CC_CONFIG[showTable] s" ." WHERE si.show_id = s.id" - ." AND si.starts <= TIMESTAMP '$timeNow' + $timezoneInterval" - ." AND si.ends > TIMESTAMP '$timeNow' + $timezoneInterval"; + ." AND si.starts <= TIMESTAMP '$timeNow'" + ." AND si.ends > TIMESTAMP '$timeNow'"; // Convert back to local timezone $rows = $CC_DBC->GetAll($sql); - Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp")); return $rows; } @@ -1404,30 +1399,24 @@ class Application_Model_Show { public static function GetNextShows($timeNow, $limit, $timeEnd = "") { global $CC_CONFIG, $CC_DBC; - - // Need this in the query below, so that we are NOT comparing UTC - // timestamps si.starts with local timestamps $timeNow - $timezoneInterval = Application_Model_Show::GetTimezoneIntervalString(true); - + // defaults to retrieving shows from next 2 days if no end time has // been specified if($timeEnd == "") { - $timeEnd = "'$timeNow' + INTERVAL '2 days' + $timezoneInterval"; + $timeEnd = "'$timeNow' + INTERVAL '2 days'"; } else { - $timeEnd = "'$timeEnd' + $timezoneInterval"; + $timeEnd = "'$timeEnd'"; } $sql = "SELECT *, si.starts as start_timestamp, si.ends as end_timestamp FROM " ." $CC_CONFIG[showInstances] si, $CC_CONFIG[showTable] s" ." WHERE si.show_id = s.id" - ." AND si.starts >= TIMESTAMP '$timeNow' + $timezoneInterval" + ." AND si.starts >= TIMESTAMP '$timeNow'" ." AND si.starts < TIMESTAMP $timeEnd" ." ORDER BY si.starts" ." LIMIT $limit"; - // Convert timestamps to local timezone $rows = $CC_DBC->GetAll($sql); - Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp")); return $rows; } @@ -1447,12 +1436,7 @@ class Application_Model_Show { //Result: 5 global $CC_CONFIG, $CC_DBC; - - // Need this in the query below, so that we are NOT extracting DOW and WEEK - // information from UTC timestamps si.starts, and comparing with a local - // timezone based variable $day and localtimestamp - $timezoneInterval = Application_Model_Show::GetTimezoneIntervalString(); - + $sql = "SELECT" ." si.starts as show_starts," ." si.ends as show_ends," @@ -1461,13 +1445,12 @@ class Application_Model_Show { ." FROM $CC_CONFIG[showInstances] si" ." LEFT JOIN $CC_CONFIG[showTable] s" ." ON si.show_id = s.id" - ." WHERE EXTRACT(DOW FROM si.starts + $timezoneInterval) = $day" - ." AND EXTRACT(WEEK FROM si.starts + $timezoneInterval) = EXTRACT(WEEK FROM localtimestamp)" + ." WHERE EXTRACT(DOW FROM si.starts) = $day" + ." AND EXTRACT(WEEK FROM si.starts) = EXTRACT(WEEK FROM localtimestamp)" ." ORDER BY si.starts"; // Convert result timestamps to local timezone $rows = $CC_DBC->GetAll($sql); - Application_Model_Show::ConvertToLocalTimeZone($rows, array("show_starts", "show_ends")); return $rows; } @@ -1501,6 +1484,7 @@ class Application_Model_Show { * * @param type $fromLocalToUtc true if we're converting from local to UTC */ + /* public static function GetTimeZoneIntervalString($fromLocalToUtc = false) { $date = new Application_Model_DateHelper; $timezoneHour = $date->getLocalOffsetHour(); @@ -1514,6 +1498,7 @@ class Application_Model_Show { return "INTERVAL '$timezoneHour hours $timezoneMin minutes'"; } + * */ public static function GetMaxLengths() { global $CC_CONFIG, $CC_DBC;