CC-3065: When editing a show after changing timezone, the time listed under "When" displays time in old timezone

-fixed
This commit is contained in:
Martin Konecny 2011-11-20 14:46:01 -05:00
parent 9bbf1fda17
commit 21bbb983ac
2 changed files with 42 additions and 29 deletions

View file

@ -491,11 +491,11 @@ class ScheduleController extends Zend_Controller_Action
'add_show_genre' => $show->getGenre(), 'add_show_genre' => $show->getGenre(),
'add_show_description' => $show->getDescription())); 'add_show_description' => $show->getDescription()));
$startsDateTime = new DateTime($show->getStartDate()." ".$show->getStartTime(), new DateTimeZone(date_default_timezone_get())); $startsDateTime = new DateTime($show->getStartDate()." ".$show->getStartTime(), new DateTimeZone("UTC"));
$endsDateTime = new DateTime($show->getEndDate()." ".$show->getEndTime(), new DateTimeZone(date_default_timezone_get())); $endsDateTime = new DateTime($show->getEndDate()." ".$show->getEndTime(), new DateTimeZone("UTC"));
//$startsDateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); $startsDateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));
//$endsDateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); $endsDateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));
$formWhen->populate(array('add_show_start_date' => $startsDateTime->format("Y-m-d"), $formWhen->populate(array('add_show_start_date' => $startsDateTime->format("Y-m-d"),
'add_show_start_time' => $startsDateTime->format("H:i"), 'add_show_start_time' => $startsDateTime->format("H:i"),
@ -595,12 +595,14 @@ class ScheduleController extends Zend_Controller_Action
$show = new Application_Model_Show($data['add_show_id']); $show = new Application_Model_Show($data['add_show_id']);
$startDateModified = true; $startDateModified = true;
if ($data['add_show_id'] != -1 && !array_key_exists('add_show_start_date', $data)){ if ($data['add_show_id'] != -1 && !array_key_exists('add_show_start_date', $data)){
//show is being updated and changing the start date was disabled, since the //show is being updated and changing the start date was disabled, since the
//array key does not exist. We need to repopulate this entry from the db. //array key does not exist. We need to repopulate this entry from the db.
$data['add_show_start_date'] = $show->getStartDate(); //The start date will be return in UTC time, so lets convert it to local time.
$startDateModified = false; $dt = Application_Model_DateHelper::ConvertToLocalDateTime($show->getStartDate());
} $data['add_show_start_date'] = $dt->format("Y-m-d");
$startDateModified = false;
}
$data['add_show_hosts'] = $this->_getParam('hosts'); $data['add_show_hosts'] = $this->_getParam('hosts');
$data['add_show_day_check'] = $this->_getParam('days'); $data['add_show_day_check'] = $this->_getParam('days');

View file

@ -448,7 +448,7 @@ class Application_Model_Show {
} }
/** /**
* Get the start date of the current show. * Get the start date of the current show in UTC timezone.
* *
* @return string * @return string
* The start date in the format YYYY-MM-DD * The start date in the format YYYY-MM-DD
@ -457,38 +457,49 @@ class Application_Model_Show {
global $CC_DBC; global $CC_DBC;
$showId = $this->getId(); $showId = $this->getId();
$sql = "SELECT first_show FROM cc_show_days" $sql = "SELECT first_show, start_time, timezone FROM cc_show_days"
." WHERE show_id = $showId" ." WHERE show_id = $showId"
." ORDER BY first_show"; ." ORDER BY first_show"
." LIMIT 1";
$firstDate = $CC_DBC->GetOne($sql); $rows = $CC_DBC->GetAll($sql);
if (is_null($firstDate)){ if (count($rows) == 0){
return ""; return "";
} else { } else {
return $firstDate; $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. * Get the start time of the current show in UTC timezone.
* *
* @return string * @return string
* The start time in the format HH:MM:SS * The start time in the format HH:MM
*/ */
public function getStartTime(){ public function getStartTime(){
global $CC_DBC; global $CC_DBC;
$showId = $this->getId(); $showId = $this->getId();
$sql = "SELECT start_time FROM cc_show_days" $sql = "SELECT first_show, start_time, timezone FROM cc_show_days"
." WHERE show_id = $showId"; ." WHERE show_id = $showId"
." ORDER BY first_show"
." LIMIT 1";
$startTime = $CC_DBC->GetOne($sql); $rows = $CC_DBC->GetAll($sql);
if (is_null($startTime)){ if (count($rows) == 0){
return ""; return "";
} else { } else {
return $startTime; $row = $rows[0];
$dt = new DateTime($row["first_show"]." ".$row["start_time"], new DateTimeZone($row["timezone"]));
$dt->setTimezone(new DateTimeZone("UTC"));
return $dt->format("H:i");
} }
} }
@ -540,7 +551,7 @@ class Application_Model_Show {
*/ */
public function isStartDateTimeInPast(){ public function isStartDateTimeInPast(){
$date = new Application_Model_DateHelper; $date = new Application_Model_DateHelper;
$current_timestamp = $date->getTimestamp(); $current_timestamp = $date->getUtcTimestamp();
return ($current_timestamp > ($this->getStartDate()." ".$this->getStartTime())); return ($current_timestamp > ($this->getStartDate()." ".$this->getStartTime()));
} }
@ -619,9 +630,9 @@ class Application_Model_Show {
$sql .= "WHERE show_id = $p_data[add_show_id]"; $sql .= "WHERE show_id = $p_data[add_show_id]";
$CC_DBC->query($sql); $CC_DBC->query($sql);
$oldStartDateTimeEpoch = strtotime($this->getStartDate()." ".$this->getStartTime()); $dtOld = new DateTime($this->getStartDate()." ".$this->getStartTime(), new DateTimeZone("UTC"));
$newStartDateTimeEpoch = strtotime($p_data['add_show_start_date']." ".$p_data['add_show_start_time']); $dtNew = new DateTime($p_data['add_show_start_date']." ".$p_data['add_show_start_time'], new DateTimeZone(date_default_timezone_get()));
$diff = $newStartDateTimeEpoch - $oldStartDateTimeEpoch; $diff = $dtOld->getTimestamp() - $dtNew->getTimestamp();
$sql = "UPDATE cc_show_instances " $sql = "UPDATE cc_show_instances "
."SET starts = starts + INTERVAL '$diff sec', " ."SET starts = starts + INTERVAL '$diff sec', "