diff --git a/airtime_mvc/application/common/DateHelper.php b/airtime_mvc/application/common/DateHelper.php index cf1d8291b..d1764c28a 100644 --- a/airtime_mvc/application/common/DateHelper.php +++ b/airtime_mvc/application/common/DateHelper.php @@ -45,6 +45,22 @@ class Application_Common_DateHelper return gmdate("H:i:s", $this->_dateTime); } + public static function getUserTimezoneOffset() + { + $userTimezone = new DateTimeZone(Application_Model_Preference::GetUserTimezone()); + $now = new DateTime("now", $userTimezone); + + return $now->format("Z"); + } + + public static function getStationTimezoneOffset() + { + $stationTimezone = new DateTimeZone(Application_Model_Preference::GetDefaultTimezone()); + $now = new DateTime("now", $stationTimezone); + + return $now->format("Z"); + } + /** * * @return DateTime - YYYY-MM-DD 00:00 in station timezone of today @@ -374,6 +390,21 @@ class Application_Common_DateHelper return $d->format($format); } + /* + * @param $datetime string Y-m-d H:i:s in user timezone + * + * @return string Y-m-d H:i:s in UTC timezone + */ + public static function UserTimezoneStringToUTCString($datetime, $format="Y-m-d H:i:s") { + $userTimezone = new DateTimeZone(Application_Model_Preference::GetUserTimezone()); + $utcTimezone = new DateTimeZone("UTC"); + + $d = new DateTime($datetime, $userTimezone); + $d->setTimezone($utcTimezone); + + return $d->format($format); + } + /** * Convert the columns given in the array $columnsToConvert in the * database result $rows to local timezone. diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index a15e0081e..da671cd80 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -68,33 +68,6 @@ class ApiController extends Zend_Controller_Action "version" => Application_Model_Preference::GetAirtimeVersion())); } - /** - * Sets up and send init values used in the Calendar. - * This is only being used by schedule.js at the moment. - */ - public function calendarInitAction() - { - if (is_null(Zend_Auth::getInstance()->getStorage()->read())) { - header('HTTP/1.0 401 Unauthorized'); - print _('You are not allowed to access this resource.'); - - return; - } - - $tz = new DateTimeZone(Application_Model_Preference::GetUserTimezone()); - $now = new DateTime("now", $tz); - - $this->view->calendarInit = array( - "timestamp" => time(), - "timezoneOffset" => $now->format("Z"), - "timeScale" => Application_Model_Preference::GetCalendarTimeScale(), - "timeInterval" => Application_Model_Preference::GetCalendarTimeInterval(), - "weekStartDay" => Application_Model_Preference::GetWeekStartDay() - ); - - $this->_helper->json->sendJson(array()); - } - /** * Allows remote client to download requested media file. * diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 2f1d62e0e..9737d6231 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -51,7 +51,7 @@ class ScheduleController extends Zend_Controller_Action "var calendarPref = {};\n". "calendarPref.weekStart = ".Application_Model_Preference::GetWeekStartDay().";\n". "calendarPref.timestamp = ".time().";\n". - "calendarPref.timezoneOffset = ".date("Z").";\n". + "calendarPref.timezoneOffset = ".Application_Common_DateHelper::getUserTimezoneOffset().";\n". "calendarPref.timeScale = '".Application_Model_Preference::GetCalendarTimeScale()."';\n". "calendarPref.timeInterval = ".Application_Model_Preference::GetCalendarTimeInterval().";\n". "calendarPref.weekStartDay = ".Application_Model_Preference::GetWeekStartDay().";\n". @@ -61,7 +61,8 @@ class ScheduleController extends Zend_Controller_Action $this->view->headScript()->appendFile($baseUrl.'js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); //full-calendar-functions.js requires this variable, so that datePicker widget can be offset to server time instead of client time - $this->view->headScript()->appendScript("var timezoneOffset = ".date("Z")."; //in seconds"); + //this should be as a default, however with our new drop down timezone changing for shows, we should reset this offset then?? + $this->view->headScript()->appendScript("var timezoneOffset = ".Application_Common_DateHelper::getStationTimezoneOffset()."; //in seconds"); //set offset to ensure it loads last $this->view->headScript()->offsetSetFile(90, $baseUrl.'js/airtime/schedule/full-calendar-functions.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); diff --git a/airtime_mvc/application/forms/AddShowRepeats.php b/airtime_mvc/application/forms/AddShowRepeats.php index 6045c3d78..a8179ccd8 100644 --- a/airtime_mvc/application/forms/AddShowRepeats.php +++ b/airtime_mvc/application/forms/AddShowRepeats.php @@ -83,8 +83,8 @@ class Application_Form_AddShowRepeats extends Zend_Form_SubForm } public function isValid($formData) { - if (parent::isValid($formData)) { - return $this->checkReliantFields($formData); + if (parent::isValid($formData)) { + return $this->checkReliantFields($formData); } else { return false; } @@ -95,15 +95,18 @@ class Application_Form_AddShowRepeats extends Zend_Form_SubForm if (!$formData['add_show_no_end']) { $start_timestamp = $formData['add_show_start_date']; $end_timestamp = $formData['add_show_end_date']; - - $start_epoch = strtotime($start_timestamp); - $end_epoch = strtotime($end_timestamp); - - if ($end_epoch < $start_epoch) { + $showTimeZone = new DateTimeZone($formData['add_show_timezone']); + + //We're assuming all data is valid at this point (timezone, etc.). + + $startDate = new DateTime($start_timestamp, $showTimeZone); + $endDate = new DateTime($end_timestamp, $showTimeZone); + + if ($endDate < $startDate) { $this->getElement('add_show_end_date')->setErrors(array(_('End date must be after start date'))); - return false; } + return true; } if (!isset($formData['add_show_day_check'])) { diff --git a/airtime_mvc/application/models/Datatables.php b/airtime_mvc/application/models/Datatables.php index d39a939fa..f74d0fecc 100644 --- a/airtime_mvc/application/models/Datatables.php +++ b/airtime_mvc/application/models/Datatables.php @@ -11,9 +11,11 @@ class Application_Model_Datatables $isRange = false; if (strstr($term, '~')) { $info = explode('~', $term); - if ($dbname == 'utime' || $dbname == 'mtime') { - $input1 = isset($info[0])?Application_Common_DateHelper::ConvertToUtcDateTimeString($info[0]):null; - $input2 = isset($info[1])?Application_Common_DateHelper::ConvertToUtcDateTimeString($info[1]):null; + if ($dbname == 'utime' || $dbname == 'mtime' || $dbname == 'lptime') { + + $input1 = ($info[0] != "") ? Application_Common_DateHelper::UserTimezoneStringToUTCString($info[0]) : null; + $input2 = ($info[1] != "") ? Application_Common_DateHelper::UserTimezoneStringToUTCString($info[1]) : null; + } else if($dbname == 'bit_rate' || $dbname == 'sample_rate') { $input1 = isset($info[0])?doubleval($info[0]) * 1000:null; $input2 = isset($info[1])?doubleval($info[1]) * 1000:null; @@ -50,6 +52,8 @@ class Application_Model_Datatables } } } + + Logging::info($where); return $where; } /*