From fe71487fa2bac8df02dcbc3d9d2f9f5ce5fb15b6 Mon Sep 17 00:00:00 2001 From: James Date: Wed, 25 Apr 2012 17:21:25 -0400 Subject: [PATCH] CC-3478: Calendar->Show has some inconsistencies on special Days (e.g. switching to Daylight Saving Time) - fixed --- .../controllers/ScheduleController.php | 28 ++++++++--- .../public/js/airtime/schedule/add-show.js | 47 ++++++++++--------- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index bdcc4e2b7..b9b738404 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -31,6 +31,7 @@ class ScheduleController extends Zend_Controller_Action ->addActionContext('set-time-interval', 'json') ->addActionContext('edit-show-instance', 'json') ->addActionContext('dj-edit-show', 'json') + ->addActionContext('calculate-duration', 'json') ->initContext(); $this->sched_sess = new Zend_Session_Namespace("schedule"); @@ -891,12 +892,25 @@ class ScheduleController extends Zend_Controller_Action public function setTimeIntervalAction() { Application_Model_Preference::SetCalendarTimeInterval($this->_getParam('timeInterval')); } + + public function calculateDurationAction() { + global $CC_CONFIG; + + $startParam = $this->_getParam('startTime'); + $endParam = $this->_getParam('endTime'); + + $startDateTime = new DateTime($startParam); + $endDateTime = new DateTime($endParam); + + $UTCStartDateTime = $startDateTime->setTimezone(new DateTimeZone('UTC')); + $UTCEndDateTime = $endDateTime->setTimezone(new DateTimeZone('UTC')); + + $duration = $UTCEndDateTime->diff($UTCStartDateTime); + + $result = $duration->format('%r%Hh %Im'); + + echo Zend_Json::encode($result); + exit(); + } } - - - - - - - diff --git a/airtime_mvc/public/js/airtime/schedule/add-show.js b/airtime_mvc/public/js/airtime/schedule/add-show.js index 212ae7dec..190f372d3 100644 --- a/airtime_mvc/public/js/airtime/schedule/add-show.js +++ b/airtime_mvc/public/js/airtime/schedule/add-show.js @@ -364,12 +364,16 @@ function setAddShowEvents() { // when start date/time changes, set end date/time to start date/time+1 hr $('#add_show_start_date, #add_show_start_time').change(function(){ - var startDate = $('#add_show_start_date').val().split('-'); - var startTime = $('#add_show_start_time').val().split(':'); + var startDateString = $('#add_show_start_date').val(); + var startTimeString = $('#add_show_start_time').val(); + var startDate = startDateString.split('-'); + var startTime = startTimeString.split(':'); var startDateTime = new Date(startDate[0], parseInt(startDate[1], 10)-1, startDate[2], startTime[0], startTime[1], 0, 0); - var endDate = $('#add_show_end_date_no_repeat').val().split('-'); - var endTime = $('#add_show_end_time').val().split(':'); + var endDateString = $('#add_show_end_date_no_repeat').val(); + var endTimeString = $('#add_show_end_time').val() + var endDate = endDateString.split('-'); + var endTime = endTimeString.split(':'); var endDateTime = new Date(endDate[0], parseInt(endDate[1], 10)-1, endDate[2], endTime[0], endTime[1], 0, 0); if(startDateTime.getTime() >= endDateTime.getTime()){ @@ -393,17 +397,23 @@ function setAddShowEvents() { $('#add_show_end_time').val(endTimeFormat); // calculate duration - calculateDuration(endDateTime, startDateTime); + var startDateTimeString = startDateString + " " + startTimeString; + var endDateTimeString = $('#add_show_end_date_no_repeat').val() + " " + $('#add_show_end_time').val(); + calculateDuration(startDateTimeString, endDateTimeString); }); // when end date/time changes, check if the changed date is in past of start date/time $('#add_show_end_date_no_repeat, #add_show_end_time').change(function(){ - var startDate = $('#add_show_start_date').val().split('-'); - var startTime = $('#add_show_start_time').val().split(':'); + var startDateString = $('#add_show_start_date').val(); + var startTimeString = $('#add_show_start_time').val(); + var startDate = startDateString.split('-'); + var startTime = startTimeString.split(':'); var startDateTime = new Date(startDate[0], parseInt(startDate[1], 10)-1, startDate[2], startTime[0], startTime[1], 0, 0); - var endDate = $('#add_show_end_date_no_repeat').val().split('-'); - var endTime = $('#add_show_end_time').val().split(':'); + var endDateString = $('#add_show_end_date_no_repeat').val(); + var endTimeString = $('#add_show_end_time').val() + var endDate = endDateString.split('-'); + var endTime = endTimeString.split(':'); var endDateTime = new Date(endDate[0], parseInt(endDate[1], 10)-1, endDate[2], endTime[0], endTime[1], 0, 0); if(startDateTime.getTime() > endDateTime.getTime()){ @@ -415,7 +425,9 @@ function setAddShowEvents() { } // calculate duration - calculateDuration(endDateTime, startDateTime); + var startDateTimeString = startDateString + " " + startTimeString; + var endDateTimeString = endDateString + " " + endTimeString; + calculateDuration(startDateTimeString, endDateTimeString); }); if($('#cb_custom_auth').attr('checked')){ @@ -434,18 +446,9 @@ function setAddShowEvents() { function calculateDuration(endDateTime, startDateTime){ var duration; - var durationSeconds = (endDateTime.getTime() - startDateTime.getTime())/1000; - if(isNaN(durationSeconds)){ - duration = '1h'; - } - else if(durationSeconds != 0){ - var durationHour = parseInt(durationSeconds/3600, 10); - var durationMin = parseInt((durationSeconds%3600)/60, 10); - duration = (durationHour == 0 ? '' : durationHour+'h'+' ')+(durationMin == 0 ? '' : durationMin+'m'); - }else{ - duration = '0m'; - } - $('#add_show_duration').val(duration); + $.post("/Schedule/calculate-duration", {startTime: startDateTime, endTime: endDateTime}, function(data){ + $('#add_show_duration').val(JSON.parse(data)); + }); } }