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 10f5c860a..89e88bbf6 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -296,7 +296,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 2ca559d39..98ec49573 100644 --- a/airtime_mvc/application/models/DateHelper.php +++ b/airtime_mvc/application/models/DateHelper.php @@ -249,12 +249,23 @@ 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 09c6b80b6..20ed5e15d 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -1405,19 +1405,14 @@ class Application_Model_Show { { 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; } @@ -1436,29 +1431,23 @@ class Application_Model_Show { { 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; } @@ -1479,11 +1468,6 @@ class Application_Model_Show { 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," @@ -1492,13 +1476,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; } @@ -1532,6 +1515,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(); @@ -1545,6 +1529,7 @@ class Application_Model_Show { return "INTERVAL '$timezoneHour hours $timezoneMin minutes'"; } + * */ public static function GetMaxLengths() { global $CC_CONFIG, $CC_DBC;