CC-2336 Some Show Editing Features Seem to have been lost

recovered everything that original worked I think will keep looking,
still problems with editing a show which has already started.
This commit is contained in:
Naomi Aro 2011-05-30 12:24:39 -04:00
parent ab948b8dcb
commit f7de484461
6 changed files with 125 additions and 82 deletions

View File

@ -446,10 +446,14 @@ class ScheduleController extends Zend_Controller_Action
'add_show_description' => $show->getDescription())); 'add_show_description' => $show->getDescription()));
$formWhen->populate(array('add_show_start_date' => $show->getStartDate(), $formWhen->populate(array('add_show_start_date' => $show->getStartDate(),
'add_show_start_time' => Show::removeSecondsFromTime($show->getStartTime()), 'add_show_start_time' => DateHelper::removeSecondsFromTime($show->getStartTime()),
'add_show_duration' => $show->getDuration(), 'add_show_duration' => $show->getDuration(),
'add_show_repeats' => $show->isRepeating() ? 1 : 0)); 'add_show_repeats' => $show->isRepeating() ? 1 : 0));
if ($show->isStartDateTimeInPast()){
$formWhen->getElement('add_show_start_date')->setOptions(array('disabled' => true));
}
$days = array(); $days = array();
$showDays = CcShowDaysQuery::create()->filterByDbShowId($showInstance->getShowId())->find(); $showDays = CcShowDaysQuery::create()->filterByDbShowId($showInstance->getShowId())->find();
foreach($showDays as $showDay){ foreach($showDays as $showDay){
@ -476,7 +480,7 @@ class ScheduleController extends Zend_Controller_Action
$i = 1; $i = 1;
foreach ($rebroadcastsRelative as $rebroadcast){ foreach ($rebroadcastsRelative as $rebroadcast){
$rebroadcastFormValues["add_show_rebroadcast_date_$i"] = $rebroadcast['day_offset']; $rebroadcastFormValues["add_show_rebroadcast_date_$i"] = $rebroadcast['day_offset'];
$rebroadcastFormValues["add_show_rebroadcast_time_$i"] = Show::removeSecondsFromTime($rebroadcast['start_time']); $rebroadcastFormValues["add_show_rebroadcast_time_$i"] = DateHelper::removeSecondsFromTime($rebroadcast['start_time']);
$i++; $i++;
} }
$formRebroadcast->populate($rebroadcastFormValues); $formRebroadcast->populate($rebroadcastFormValues);
@ -486,7 +490,7 @@ class ScheduleController extends Zend_Controller_Action
$i = 1; $i = 1;
foreach ($rebroadcastsAbsolute as $rebroadcast){ foreach ($rebroadcastsAbsolute as $rebroadcast){
$rebroadcastAbsoluteFormValues["add_show_rebroadcast_date_absolute_$i"] = $rebroadcast['start_date']; $rebroadcastAbsoluteFormValues["add_show_rebroadcast_date_absolute_$i"] = $rebroadcast['start_date'];
$rebroadcastAbsoluteFormValues["add_show_rebroadcast_time_absolute_$i"] = Show::removeSecondsFromTime($rebroadcast['start_time']); $rebroadcastAbsoluteFormValues["add_show_rebroadcast_time_absolute_$i"] = DateHelper::removeSecondsFromTime($rebroadcast['start_time']);
$i++; $i++;
} }
$formAbsoluteRebroadcast->populate($rebroadcastAbsoluteFormValues); $formAbsoluteRebroadcast->populate($rebroadcastAbsoluteFormValues);
@ -548,6 +552,16 @@ class ScheduleController extends Zend_Controller_Action
$data[$j["name"]] = $j["value"]; $data[$j["name"]] = $j["value"];
} }
$show = new Show($data['add_show_id']);
$startDateModified = true;
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
//array key does not exist. We need to repopulate this entry from the db.
$data['add_show_start_date'] = $show->getStartDate();
$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');
@ -586,11 +600,10 @@ class ScheduleController extends Zend_Controller_Action
$what = $formWhat->isValid($data); $what = $formWhat->isValid($data);
$when = $formWhen->isValid($data); $when = $formWhen->isValid($data);
if($when) { if($when) {
$when = $formWhen->checkReliantFields($data); $when = $formWhen->checkReliantFields($data, $startDateModified);
} }
if($data["add_show_repeats"]) { if($data["add_show_repeats"]) {
$repeats = $formRepeats->isValid($data); $repeats = $formRepeats->isValid($data);
if($repeats) { if($repeats) {
$repeats = $formRepeats->checkReliantFields($data); $repeats = $formRepeats->checkReliantFields($data);
@ -636,7 +649,6 @@ class ScheduleController extends Zend_Controller_Action
//update this option. //update this option.
$record = false; $record = false;
if ($data['add_show_id'] != -1){ if ($data['add_show_id'] != -1){
$show = new Show($data['add_show_id']);
$data['add_show_record'] = $show->isRecorded(); $data['add_show_record'] = $show->isRecorded();
$record = $formRecord->isValid($data); $record = $formRecord->isValid($data);
$formRecord->getElement('add_show_record')->setOptions(array('disabled' => true)); $formRecord->getElement('add_show_record')->setOptions(array('disabled' => true));
@ -676,6 +688,9 @@ class ScheduleController extends Zend_Controller_Action
if ($data['add_show_id'] != -1){ if ($data['add_show_id'] != -1){
$this->view->addNewShow = false; $this->view->addNewShow = false;
} }
if (!$startDateModified){
$formWhen->getElement('add_show_start_date')->setOptions(array('disabled' => true));
}
$this->view->form = $this->view->render('schedule/add-show-form.phtml'); $this->view->form = $this->view->render('schedule/add-show-form.phtml');
} }

View File

@ -48,8 +48,8 @@ class Application_Form_AddShowAbsoluteRebroadcastDates extends Zend_Form_SubForm
$this->getElement('add_show_rebroadcast_date_absolute_'.$i)->setErrors(array("Day must be specified")); $this->getElement('add_show_rebroadcast_date_absolute_'.$i)->setErrors(array("Day must be specified"));
$valid = false; $valid = false;
} }
if (trim($time) == ""){ if (trim($time) == ""){
$this->getElement('add_show_rebroadcast_time_absolute_'.$i)->setErrors(array("Time must be specified")); $this->getElement('add_show_rebroadcast_time_absolute_'.$i)->setErrors(array("Time must be specified"));
$valid = false; $valid = false;
@ -60,7 +60,7 @@ class Application_Form_AddShowAbsoluteRebroadcastDates extends Zend_Form_SubForm
continue; continue;
} }
$show_start_time = $formData['add_show_start_date']."".$formData['add_show_start_time']; $show_start_time = $formData['add_show_start_date']." ".$formData['add_show_start_time'];
$show_end = new DateTime($show_start_time); $show_end = new DateTime($show_start_time);
$duration = $formData['add_show_duration']; $duration = $formData['add_show_duration'];
@ -70,7 +70,7 @@ class Application_Form_AddShowAbsoluteRebroadcastDates extends Zend_Form_SubForm
$show_end->add(new DateInterval("PT$duration[1]M")); $show_end->add(new DateInterval("PT$duration[1]M"));
$show_end->add(new DateInterval("PT1H"));//min time to wait until a rebroadcast $show_end->add(new DateInterval("PT1H"));//min time to wait until a rebroadcast
$rebroad_start = $day."".$formData['add_show_rebroadcast_time_absolute_'.$i]; $rebroad_start = $day." ".$formData['add_show_rebroadcast_time_absolute_'.$i];
$rebroad_start = new DateTime($rebroad_start); $rebroad_start = new DateTime($rebroad_start);
if($rebroad_start < $show_end) { if($rebroad_start < $show_end) {

View File

@ -53,8 +53,8 @@ class Application_Form_AddShowRebroadcastDates extends Zend_Form_SubForm
$this->getElement('add_show_rebroadcast_date_'.$i)->setErrors(array("Day must be specified")); $this->getElement('add_show_rebroadcast_date_'.$i)->setErrors(array("Day must be specified"));
$valid = false; $valid = false;
} }
if (trim($time) == ""){ if (trim($time) == ""){
$this->getElement('add_show_rebroadcast_time_'.$i)->setErrors(array("Time must be specified")); $this->getElement('add_show_rebroadcast_time_'.$i)->setErrors(array("Time must be specified"));
$valid = false; $valid = false;
@ -68,7 +68,7 @@ class Application_Form_AddShowRebroadcastDates extends Zend_Form_SubForm
$days = explode(" ", $days); $days = explode(" ", $days);
$day = $days[0]; $day = $days[0];
$show_start_time = $formData['add_show_start_date']."".$formData['add_show_start_time']; $show_start_time = $formData['add_show_start_date']." ".$formData['add_show_start_time'];
$show_end = new DateTime($show_start_time); $show_end = new DateTime($show_start_time);
$duration = $formData['add_show_duration']; $duration = $formData['add_show_duration'];
@ -78,7 +78,7 @@ class Application_Form_AddShowRebroadcastDates extends Zend_Form_SubForm
$show_end->add(new DateInterval("PT$duration[1]M")); $show_end->add(new DateInterval("PT$duration[1]M"));
$show_end->add(new DateInterval("PT1H"));//min time to wait until a rebroadcast $show_end->add(new DateInterval("PT1H"));//min time to wait until a rebroadcast
$rebroad_start = $formData['add_show_start_date']."".$formData['add_show_rebroadcast_time_'.$i]; $rebroad_start = $formData['add_show_start_date']." ".$formData['add_show_rebroadcast_time_'.$i];
$rebroad_start = new DateTime($rebroad_start); $rebroad_start = new DateTime($rebroad_start);
$rebroad_start->add(new DateInterval("P".$day."D")); $rebroad_start->add(new DateInterval("P".$day."D"));

View File

@ -59,20 +59,22 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
} }
public function checkReliantFields($formData) { public function checkReliantFields($formData, $startDateModified) {
$valid = true; $valid = true;
$now_timestamp = date("Y-m-d H:i:s"); $now_timestamp = date("Y-m-d H:i:s");
$start_timestamp = $formData['add_show_start_date']."".$formData['add_show_start_time']; $start_timestamp = $formData['add_show_start_date']." ".$formData['add_show_start_time'];
$now_epoch = strtotime($now_timestamp); $now_epoch = strtotime($now_timestamp);
$start_epoch = strtotime($start_timestamp); $start_epoch = strtotime($start_timestamp);
if($start_epoch < $now_epoch) { if ((($formData['add_show_id'] != -1) && $startDateModified) || ($formData['add_show_id'] == -1)){
$this->getElement('add_show_start_time')->setErrors(array('Cannot create show in the past')); if($start_epoch < $now_epoch) {
$valid = false; $this->getElement('add_show_start_time')->setErrors(array('Cannot create show in the past'));
} $valid = false;
}
}
if(strtotime("00:00") == strtotime($formData["add_show_duration"])) { if(strtotime("00:00") == strtotime($formData["add_show_duration"])) {
$this->getElement('add_show_duration')->setErrors(array('Cannot have duration 00:00')); $this->getElement('add_show_duration')->setErrors(array('Cannot have duration 00:00'));

View File

@ -83,5 +83,40 @@ class DateHelper
return $hours.":".$minutes.":".$seconds.".".$ms; return $hours.":".$minutes.":".$seconds.".".$ms;
} }
/**
* This function formats a time by removing seconds
*
* When we receive a time from the database we get the
* format "hh:mm:ss". But when dealing with show times, we
* do not care about the seconds.
*
* @param int $p_timestamp
* The value which to format.
* @return int
* The timestamp with the new format "hh:mm", or
* the original input parameter, if it does not have
* the correct format.
*/
public static function removeSecondsFromTime($p_timestamp)
{
//Format is in hh:mm:ss. We want hh:mm
$timeExplode = explode(":", $p_timestamp);
if (count($timeExplode) == 3)
return $timeExplode[0].":".$timeExplode[1];
else
return $p_timestamp;
}
public static function getDateFromTimestamp($p_timestamp){
$explode = explode(" ", $p_timestamp);
return $explode[0];
}
public static function getTimeFromTimestamp($p_timestamp){
$explode = explode(" ", $p_timestamp);
return $explode[1];
}
} }

View File

@ -402,6 +402,19 @@ class Show {
} }
} }
/**
* Indicate whether the starting point of the show is in the
* past.
*
* @return boolean
* true if the StartDate is in the past, false otherwise
*/
public function isStartDateTimeInPast(){
$date = new DateHelper;
$current_timestamp = $date->getTimestamp();
return ($current_timestamp > $this->getStartDate()." ".$this->getStartTime());
}
/** /**
* Get the ID's of future instance of the current show. * Get the ID's of future instance of the current show.
* *
@ -533,8 +546,7 @@ class Show {
public static function deletePossiblyInvalidInstances($p_data, $p_show, $p_endDate, $isRecorded, $repeatType) public static function deletePossiblyInvalidInstances($p_data, $p_show, $p_endDate, $isRecorded, $repeatType)
{ {
if ($p_data['add_show_repeats'] != $p_show->isRepeating() if (($p_data['add_show_repeats'] != $p_show->isRepeating()) || $isRecorded){
|| $isRecorded){
//repeat option was toggled or show is recorded. //repeat option was toggled or show is recorded.
$p_show->deleteAllInstances(); $p_show->deleteAllInstances();
} }
@ -561,7 +573,8 @@ class Show {
if ($repeatType != $p_show->getRepeatType()){ if ($repeatType != $p_show->getRepeatType()){
//repeat type changed. //repeat type changed.
$p_show->deleteAllInstances(); $p_show->deleteAllInstances();
} else { }
else {
//repeat type is the same, check if the days of the week are the same //repeat type is the same, check if the days of the week are the same
$repeatingDaysChanged = false; $repeatingDaysChanged = false;
$showDaysArray = $p_show->getShowDays(); $showDaysArray = $p_show->getShowDays();
@ -571,7 +584,8 @@ class Show {
if (count($intersect) != count($p_data['add_show_day_check'])){ if (count($intersect) != count($p_data['add_show_day_check'])){
$repeatingDaysChanged = true; $repeatingDaysChanged = true;
} }
} else { }
else {
$repeatingDaysChanged = true; $repeatingDaysChanged = true;
} }
@ -589,7 +603,8 @@ class Show {
if ((strlen($p_show->getRepeatingEndDate()) == 0) == $p_data['add_show_no_end']){ if ((strlen($p_show->getRepeatingEndDate()) == 0) == $p_data['add_show_no_end']){
//show "Never Ends" option was toggled. //show "Never Ends" option was toggled.
if ($p_data['add_show_no_end']){ if ($p_data['add_show_no_end']){
} else { }
else {
$p_show->removeAllInstancesFromDate($p_endDate); $p_show->removeAllInstancesFromDate($p_endDate);
} }
} }
@ -608,7 +623,7 @@ class Show {
/** /**
* Create a show. * Create a show.
* *
* Note: end dates are inclusive. * Note: end dates are non inclusive.
* *
* @param array $data * @param array $data
* @return int * @return int
@ -718,15 +733,16 @@ class Show {
} }
//check if we are adding or updating a show, and if updating //check if we are adding or updating a show, and if updating
//erase all the show's show_rebroadcast information first. //erase all the show's future show_rebroadcast information first.
if ($data['add_show_id'] != -1){ if (($data['add_show_id'] != -1) && $data['add_show_rebroadcast']){
CcShowRebroadcastQuery::create()->filterByDbShowId($data['add_show_id'])->delete(); CcShowRebroadcastQuery::create()
->filterByDbShowId($data['add_show_id'])
->filterByDbStartTime($currentTimestamp, Criteria::GREATER_EQUAL)
->delete();
} }
//adding rows to cc_show_rebroadcast //adding rows to cc_show_rebroadcast
if ($isRecorded && $data['add_show_rebroadcast'] && $repeatType != -1) { if ($isRecorded && $data['add_show_rebroadcast'] && $repeatType != -1) {
for ($i=1; $i<=10; $i++) { for ($i=1; $i<=10; $i++) {
if ($data['add_show_rebroadcast_date_'.$i]) { if ($data['add_show_rebroadcast_date_'.$i]) {
$showRebroad = new CcShowRebroadcast(); $showRebroad = new CcShowRebroadcast();
$showRebroad->setDbDayOffset($data['add_show_rebroadcast_date_'.$i]); $showRebroad->setDbDayOffset($data['add_show_rebroadcast_date_'.$i]);
@ -735,10 +751,9 @@ class Show {
$showRebroad->save(); $showRebroad->save();
} }
} }
} else if ($isRecorded && $data['add_show_rebroadcast'] && $repeatType == -1){ }
else if ($isRecorded && $data['add_show_rebroadcast'] && $repeatType == -1){
for ($i=1; $i<=10; $i++) { for ($i=1; $i<=10; $i++) {
if ($data['add_show_rebroadcast_date_absolute_'.$i]) { if ($data['add_show_rebroadcast_date_absolute_'.$i]) {
$sql = "SELECT date '{$data['add_show_rebroadcast_date_absolute_'.$i]}' - date '{$data['add_show_start_date']}' "; $sql = "SELECT date '{$data['add_show_rebroadcast_date_absolute_'.$i]}' - date '{$data['add_show_start_date']}' ";
$r = $con->query($sql); $r = $con->query($sql);
@ -877,6 +892,9 @@ class Show {
$showInstance->correctScheduleStartTimes(); $showInstance->correctScheduleStartTimes();
} }
$date = new DateHelper();
$currentTimestamp = $date->getTimestamp();
$sql = "SELECT * FROM cc_show_rebroadcast WHERE show_id={$show_id}"; $sql = "SELECT * FROM cc_show_rebroadcast WHERE show_id={$show_id}";
$rebroadcasts = $CC_DBC->GetAll($sql); $rebroadcasts = $CC_DBC->GetAll($sql);
@ -890,14 +908,16 @@ class Show {
$sql = "SELECT timestamp '{$rebroadcast_start_time}' + interval '{$duration}'"; $sql = "SELECT timestamp '{$rebroadcast_start_time}' + interval '{$duration}'";
$rebroadcast_end_time = $CC_DBC->GetOne($sql); $rebroadcast_end_time = $CC_DBC->GetOne($sql);
$newRebroadcastInstance = new CcShowInstances(); if ($rebroadcast_start_time > $currentTimestamp){
$newRebroadcastInstance->setDbShowId($show_id); $newRebroadcastInstance = new CcShowInstances();
$newRebroadcastInstance->setDbStarts($rebroadcast_start_time); $newRebroadcastInstance->setDbShowId($show_id);
$newRebroadcastInstance->setDbEnds($rebroadcast_end_time); $newRebroadcastInstance->setDbStarts($rebroadcast_start_time);
$newRebroadcastInstance->setDbRecord(0); $newRebroadcastInstance->setDbEnds($rebroadcast_end_time);
$newRebroadcastInstance->setDbRebroadcast(1); $newRebroadcastInstance->setDbRecord(0);
$newRebroadcastInstance->setDbOriginalShow($show_instance_id); $newRebroadcastInstance->setDbRebroadcast(1);
$newRebroadcastInstance->save(); $newRebroadcastInstance->setDbOriginalShow($show_instance_id);
$newRebroadcastInstance->save();
}
} }
} }
RabbitMq::PushSchedule(); RabbitMq::PushSchedule();
@ -927,6 +947,9 @@ class Show {
$sql = "SELECT timestamp '{$start}' + interval '{$duration}'"; $sql = "SELECT timestamp '{$start}' + interval '{$duration}'";
$end = $CC_DBC->GetOne($sql); $end = $CC_DBC->GetOne($sql);
$date = new DateHelper();
$currentTimestamp = $date->getTimestamp();
if ($show->hasInstanceOnDate($start)){ if ($show->hasInstanceOnDate($start)){
$ccShowInstance = $show->getInstanceOnDate($start); $ccShowInstance = $show->getInstanceOnDate($start);
$newInstance = false; $newInstance = false;
@ -934,11 +957,14 @@ class Show {
$ccShowInstance = new CcShowInstances(); $ccShowInstance = new CcShowInstances();
$newInstance = true; $newInstance = true;
} }
$ccShowInstance->setDbShowId($show_id);
$ccShowInstance->setDbStarts($start); if ($start > $currentTimestamp){
$ccShowInstance->setDbEnds($end); $ccShowInstance->setDbShowId($show_id);
$ccShowInstance->setDbRecord($record); $ccShowInstance->setDbStarts($start);
$ccShowInstance->save(); $ccShowInstance->setDbEnds($end);
$ccShowInstance->setDbRecord($record);
$ccShowInstance->save();
}
$show_instance_id = $ccShowInstance->getDbId(); $show_instance_id = $ccShowInstance->getDbId();
$showInstance = new ShowInstance($show_instance_id); $showInstance = new ShowInstance($show_instance_id);
@ -1132,41 +1158,6 @@ class Show {
return $event; return $event;
} }
public static function getDateFromTimestamp($p_timestamp){
$explode = explode(" ", $p_timestamp);
return $explode[0];
}
public static function getTimeFromTimestamp($p_timestamp){
$explode = explode(" ", $p_timestamp);
return $explode[1];
}
/**
* This function formats a time by removing seconds
*
* When we receive a time from the database we get the
* format "hh:mm:ss". But when dealing with show times, we
* do not care about the seconds.
*
* @param int $p_timestamp
* The value which to format.
* @return int
* The timestamp with the new format "hh:mm", or
* the original input parameter, if it does not have
* the correct format.
*/
public static function removeSecondsFromTime($p_timestamp)
{
//Format is in hh:mm:ss. We want hh:mm
$timeExplode = explode(":", $p_timestamp);
if (count($timeExplode) == 3)
return $timeExplode[0].":".$timeExplode[1];
else
return $p_timestamp;
}
} }
class ShowInstance { class ShowInstance {