Added back editing a repeating show instance feature

This commit is contained in:
denise 2013-03-27 16:25:39 -04:00
parent e259639d1a
commit 731b86b36c
5 changed files with 158 additions and 23 deletions

View file

@ -22,7 +22,7 @@ class ScheduleController extends Zend_Controller_Action
->addActionContext('get-current-playlist', 'json') ->addActionContext('get-current-playlist', 'json')
->addActionContext('remove-group', 'json') ->addActionContext('remove-group', 'json')
->addActionContext('populate-show-form', 'json') ->addActionContext('populate-show-form', 'json')
->addActionContext('populate-show-instance-form', 'json') ->addActionContext('populate-repeating-show-instance-form', 'json')
->addActionContext('cancel-show', 'json') ->addActionContext('cancel-show', 'json')
->addActionContext('cancel-current-show', 'json') ->addActionContext('cancel-current-show', 'json')
->addActionContext('get-form', 'json') ->addActionContext('get-form', 'json')
@ -30,7 +30,7 @@ class ScheduleController extends Zend_Controller_Action
->addActionContext('content-context-menu', 'json') ->addActionContext('content-context-menu', 'json')
->addActionContext('set-time-scale', 'json') ->addActionContext('set-time-scale', 'json')
->addActionContext('set-time-interval', 'json') ->addActionContext('set-time-interval', 'json')
->addActionContext('edit-show-instance', 'json') ->addActionContext('edit-repeating-show-instance', 'json')
->addActionContext('dj-edit-show', 'json') ->addActionContext('dj-edit-show', 'json')
->addActionContext('calculate-duration', 'json') ->addActionContext('calculate-duration', 'json')
->addActionContext('get-current-show', 'json') ->addActionContext('get-current-show', 'json')
@ -365,7 +365,7 @@ class ScheduleController extends Zend_Controller_Action
unset($this->view->showContent); unset($this->view->showContent);
} }
public function populateShowInstanceFormAction() public function populateRepeatingShowInstanceFormAction()
{ {
$showId = $this->_getParam('showId'); $showId = $this->_getParam('showId');
$instanceId = $this->_getParam('instanceId'); $instanceId = $this->_getParam('instanceId');
@ -376,7 +376,7 @@ class ScheduleController extends Zend_Controller_Action
$service_showForm->delegateShowInstanceFormPopulation($forms); $service_showForm->delegateShowInstanceFormPopulation($forms);
$this->view->addNewShow = false; $this->view->addNewShow = false;
$this->view->action = "edit-show-instance"; $this->view->action = "edit-repeating-show-instance";
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); $this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
} }
@ -444,7 +444,7 @@ class ScheduleController extends Zend_Controller_Action
$this->view->edit = true; $this->view->edit = true;
}*/ }*/
/*public function editShowInstanceAction(){ public function editRepeatingShowInstanceAction(){
$js = $this->_getParam('data'); $js = $this->_getParam('data');
$data = array(); $data = array();
@ -453,15 +453,39 @@ class ScheduleController extends Zend_Controller_Action
$data[$j["name"]] = $j["value"]; $data[$j["name"]] = $j["value"];
} }
$success = Application_Model_Schedule::updateShowInstance($data, $this); $data['add_show_hosts'] = $this->_getParam('hosts');
if ($success) {
$service_showForm = new Application_Service_ShowFormService(
$data["add_show_id"], $data["add_show_instance_id"]);
$service_show = new Application_Service_ShowService();
$forms = $this->createShowFormAction();
list($data, $validateStartDate, $validateStartTime, $originalShowStartDateTime) =
$service_showForm->preEditShowValidationCheck($data);
if ($service_showForm->validateShowForms($forms, $data, $validateStartDate,
$originalShowStartDateTime, true, $data["add_show_instance_id"])) {
//treat repeating instance has a new and separate show
$service_show->deleteRepeatingInstance($data["add_show_instance_id"]);
$service_show->addUpdateShow($data);
$this->view->addNewShow = true; $this->view->addNewShow = true;
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); $this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
} else { } else {
if (!$validateStartDate) {
$this->view->when->getElement('add_show_start_date')->setOptions(array('disabled' => true));
}
if (!$validateStartTime) {
$this->view->when->getElement('add_show_start_time')->setOptions(array('disabled' => true));
}
$this->view->rr->getElement('add_show_record')->setOptions(array('disabled' => true));
$this->view->addNewShow = false; $this->view->addNewShow = false;
$this->view->action = "edit-show";
$this->view->form = $this->view->render('schedule/add-show-form.phtml'); $this->view->form = $this->view->render('schedule/add-show-form.phtml');
} }
}*/ }
public function editShowAction() public function editShowAction()
{ {

View file

@ -30,10 +30,8 @@ class Application_Service_CalendarService
$isHostOfShow = $this->currentUser->isHostOfShow($this->showId); $isHostOfShow = $this->currentUser->isHostOfShow($this->showId);
//DateTime objects in UTC //DateTime objects in UTC
$startDT = new DateTime($this->ccShowInstance->getDbStarts(), $startDT = $this->ccShowInstance->getDbStarts(null);
new DateTimeZone("UTC")); $endDT = $this->ccShowInstance->getDbEnds(null);
$endDT = new DateTime($this->ccShowInstance->getDbEnds(),
new DateTimeZone("UTC"));
//timestamps //timestamps
$start = $startDT->getTimestamp(); $start = $startDT->getTimestamp();
@ -126,7 +124,7 @@ class Application_Service_CalendarService
$menu["edit"]["items"]["instance"] = array( $menu["edit"]["items"]["instance"] = array(
"name" => _("Edit This Instance"), "name" => _("Edit This Instance"),
"icon" => "edit", "icon" => "edit",
"url" => $baseUrl."Schedule/populate-show-instance-form"); "url" => $baseUrl."Schedule/populate-repeating-show-instance-form");
} else { } else {
$menu["edit"] = array( $menu["edit"] = array(
"name"=> _("Edit Show"), "name"=> _("Edit Show"),
@ -141,7 +139,6 @@ class Application_Service_CalendarService
//show is repeating so give user the option to delete all //show is repeating so give user the option to delete all
//repeating instances or just the one //repeating instances or just the one
if ($isRepeating) { if ($isRepeating) {
//create delete sub menu.
$menu["del"] = array( $menu["del"] = array(
"name"=> _("Delete"), "name"=> _("Delete"),
"icon" => "delete", "icon" => "delete",

View file

@ -8,9 +8,10 @@ class Application_Service_SchedulerService
*/ */
public static function updateScheduleStartTime($instanceIds, $diff) public static function updateScheduleStartTime($instanceIds, $diff)
{ {
$con = Propel::getConnection();
if (count($instanceIds) > 0 && $diff != 0) { if (count($instanceIds) > 0 && $diff != 0) {
$showIdList = implode(",", $instanceIds); $showIdList = implode(",", $instanceIds);
$sql = <<<SQL /*$sql = <<<SQL
UPDATE cc_schedule UPDATE cc_schedule
SET starts = starts + :diff1::INTERVAL, SET starts = starts + :diff1::INTERVAL,
ends = ends + :diff2::INTERVAL ends = ends + :diff2::INTERVAL
@ -20,7 +21,12 @@ SQL;
Application_Common_Database::prepareAndExecute($sql, Application_Common_Database::prepareAndExecute($sql,
array(':diff1' => $diff, ':diff2' => $diff, array(':diff1' => $diff, ':diff2' => $diff,
':showIds' => $showIdList), ':showIds' => $showIdList),
'execute'); 'execute');*/
$sql = "UPDATE cc_schedule "
."SET starts = starts + INTERVAL '$diff sec', "
."ends = ends + INTERVAL '$diff sec' "
."WHERE instance_id IN ($showIdList)";
$con->exec($sql);
} }
} }

View file

@ -76,6 +76,17 @@ class Application_Service_ShowFormService
public function delegateShowInstanceFormPopulation($forms) public function delegateShowInstanceFormPopulation($forms)
{ {
$this->populateFormWhat($forms["what"]); $this->populateFormWhat($forms["what"]);
$this->populateInstanceFormWhen($forms["when"]);
$this->populateFormWho($forms["who"]);
$this->populateFormLive($forms["live"]);
$this->populateFormStyle($forms["style"]);
//no need to populate these forms since the user won't
//be able to see them
$forms["repeats"]->disable();
$forms["record"]->disable();
$forms["rebroadcast"]->disable();
$forms["abs_rebroadcast"]->disable();
} }
/** /**
@ -92,6 +103,7 @@ class Application_Service_ShowFormService
$this->populateFormRepeats($forms["repeats"]); $this->populateFormRepeats($forms["repeats"]);
$this->populateFormWho($forms["who"]); $this->populateFormWho($forms["who"]);
$this->populateFormStyle($forms["style"]); $this->populateFormStyle($forms["style"]);
$this->populateFormLive($forms["live"]);
$this->populateFormRecord($forms["record"]); $this->populateFormRecord($forms["record"]);
$this->populateFormRebroadcastRelative($forms["rebroadcast"]); $this->populateFormRebroadcastRelative($forms["rebroadcast"]);
$this->populateFormRebroadcastAbsolute($forms["abs_rebroadcast"]); $this->populateFormRebroadcastAbsolute($forms["abs_rebroadcast"]);
@ -137,6 +149,36 @@ class Application_Service_ShowFormService
'add_show_repeats' => $ccShowDay->isRepeating() ? 1 : 0)); 'add_show_repeats' => $ccShowDay->isRepeating() ? 1 : 0));
} }
private function populateInstanceFormWhen($form)
{
$ccShowInstance = CcShowInstancesQuery::create()->findPk($this->instanceId);
$timezone = new DateTimeZone(Application_Model_Preference::GetTimezone());
//DateTime object in UTC
$showStart = $ccShowInstance->getDbStarts(null);
$showStart->setTimezone($timezone);
$showEnd = $ccShowInstance->getDbEnds(null);
$showEnd->setTimezone($timezone);
//if the show has started, do not allow editing on the start time
if ($showStart->getTimestamp() <= time()) {
$form->disableStartDateAndTime();
}
$form->populate(
array(
'add_show_start_date' => $showStart->format("Y-m-d"),
'add_show_start_time' => $showStart->format("H:i"),
'add_show_end_date_no_repeat' => $showEnd->format("Y-m-d"),
'add_show_end_time' => $showEnd->format("H:i"),
'add_show_duration' => $this->calculateDuration(
$showStart->format("Y-m-d H:i:s"), $showEnd->format("Y-m-d H:i:s")),
'add_show_repeats' => 0));
$form->getElement('add_show_repeats')->setOptions(array("disabled" => true));
}
private function populateFormRepeats($form) private function populateFormRepeats($form)
{ {
$ccShowDays = $this->ccShow->getCcShowDays(); $ccShowDays = $this->ccShow->getCcShowDays();
@ -194,6 +236,16 @@ class Application_Service_ShowFormService
'add_show_color' => $this->ccShow->getDbColor())); 'add_show_color' => $this->ccShow->getDbColor()));
} }
private function populateFormLive($form)
{
$form->populate(
array(
"cb_airtime_auth" => $this->ccShow->getDbLiveStreamUsingAirtimeAuth(),
"cb_custom_auth" => $this->ccShow->getDbLiveStreamUsingCustomAuth(),
"custom_username" => $this->ccShow->getDbLiveStreamUser(),
"custom_password" => $this->ccShow->getDbLiveStreamPass()));
}
private function populateFormRecord($form) private function populateFormRecord($form)
{ {
$form->populate( $form->populate(
@ -388,7 +440,7 @@ SQL;
$sign = $duration->format('%r'); $sign = $duration->format('%r');
return sprintf('%s%02dh %02dm', $sign, $hour, $min); return sprintf('%s%02dh %02dm', $sign, $hour, $min);
} else { } else {
return $duration->format('%r%Hh %Im'); return $duration->format('%Hh %Im');
} }
} catch (Exception $e) { } catch (Exception $e) {
return "Invalid Date"; return "Invalid Date";

View file

@ -17,6 +17,19 @@ class Application_Service_ShowService
} }
} }
/**
*
* When the user is editing a single instance of a repeating show
* we want to treat it as a completely new show so we need to delete
* the instance first
*
* @param $instanceId
*/
public function deleteRepeatingInstance($instanceId)
{
CcShowInstancesQuery::create()->findPk($instanceId)->delete();
}
public function addUpdateShow($showData, $isUpdate=false) public function addUpdateShow($showData, $isUpdate=false)
{ {
$service_user = new Application_Service_UserService(); $service_user = new Application_Service_UserService();
@ -30,7 +43,6 @@ class Application_Service_ShowService
} else { } else {
$repeatType = -1; $repeatType = -1;
} }
//$repeatType = ($showData['add_show_repeats']) ? $showData['add_show_repeat_type'] : -1;
$isRecorded = (isset($showData['add_show_record']) && $showData['add_show_record']) ? 1 : 0; $isRecorded = (isset($showData['add_show_record']) && $showData['add_show_record']) ? 1 : 0;
$isRebroadcast = (isset($showData['add_show_rebroadcast']) && $showData['add_show_rebroadcast']) ? 1 : 0; $isRebroadcast = (isset($showData['add_show_rebroadcast']) && $showData['add_show_rebroadcast']) ? 1 : 0;
@ -40,7 +52,7 @@ class Application_Service_ShowService
$con = Propel::getConnection(); $con = Propel::getConnection();
$con->beginTransaction(); $con->beginTransaction();
try { try {
if (!$this->currentUser->isAdminOrPM()) { if (!$currentUser->isAdminOrPM()) {
throw new Exception("Permission denied"); throw new Exception("Permission denied");
} }
//update ccShow //update ccShow
@ -52,7 +64,7 @@ class Application_Service_ShowService
// schedule start/end times // schedule start/end times
$this->applyShowStartEndDifference($showData); $this->applyShowStartEndDifference($showData);
$this->deleteRebroadcastInstances(); $this->deleteRebroadcastInstances();
$this->deleteCcShowDays(); //$this->deleteCcShowDays();
$this->deleteCcShowHosts(); $this->deleteCcShowHosts();
if ($isRebroadcast) { if ($isRebroadcast) {
//delete entry in cc_show_rebroadcast //delete entry in cc_show_rebroadcast
@ -105,7 +117,7 @@ class Application_Service_ShowService
if (!is_null($end)) { if (!is_null($end)) {
$populateUntil = $end; $populateUntil = $end;
} }
Logging::info($ccShowDays);
foreach ($ccShowDays as $day) { foreach ($ccShowDays as $day) {
switch ($day->getDbRepeatType()) { switch ($day->getDbRepeatType()) {
case NO_REPEAT: case NO_REPEAT:
@ -379,6 +391,14 @@ SQL;
} }
} }
foreach ($daysRemoved as $day) {
//delete the cc_show_day entries as well
CcShowDaysQuery::create()
->filterByDbShowId($showId)
->filterByDbDay($day)
->delete();
}
$uncheckedDays = pg_escape_string(implode(",", $daysRemovedUTC)); $uncheckedDays = pg_escape_string(implode(",", $daysRemovedUTC));
$sql = <<<SQL $sql = <<<SQL
@ -392,6 +412,7 @@ SQL;
Application_Common_Database::prepareAndExecute( $sql, array( Application_Common_Database::prepareAndExecute( $sql, array(
":timestamp" => gmdate("Y-m-d H:i:s"), ":showId" => $showId), ":timestamp" => gmdate("Y-m-d H:i:s"), ":showId" => $showId),
"execute"); "execute");
} }
private function deleteAllInstances($showId) private function deleteAllInstances($showId)
@ -857,6 +878,27 @@ SQL;
} }
} }
private function hasCcShowDay($repeatType, $day)
{
return $this->getCcShowDay($repeatType, $day) ? true : false;
}
private function getCcShowDay($repeatType, $day)
{
$ccShowDay = CcShowDaysQuery::create()
->filterByDbShowId($this->ccShow->getDbId())
->filterByDbDay($day)
->filterByDbRepeatType($repeatType)
->limit(1)
->find();
if ($ccShowDay->isEmpty()) {
return false;
} else {
return $ccShowDay[0];
}
}
/** /**
* *
* Sets the fields for a cc_show table row * Sets the fields for a cc_show table row
@ -923,7 +965,11 @@ SQL;
// Don't set day for monthly repeat type, it's invalid // Don't set day for monthly repeat type, it's invalid
if ($showData['add_show_repeats'] && $showData['add_show_repeat_type'] == 2) { if ($showData['add_show_repeats'] && $showData['add_show_repeat_type'] == 2) {
if ($this->hasCcShowDay($repeatType, null)) {
$showDay = $this->getCcShowDay($repeatType, null);
} else {
$showDay = new CcShowDays(); $showDay = new CcShowDays();
}
$showDay->setDbFirstShow($startDateTime->format("Y-m-d")); $showDay->setDbFirstShow($startDateTime->format("Y-m-d"));
$showDay->setDbLastShow($endDate); $showDay->setDbLastShow($endDate);
$showDay->setDbStartTime($startDateTime->format("H:i:s")); $showDay->setDbStartTime($startDateTime->format("H:i:s"));
@ -932,6 +978,9 @@ SQL;
$showDay->setDbRepeatType($repeatType); $showDay->setDbRepeatType($repeatType);
$showDay->setDbShowId($showId); $showDay->setDbShowId($showId);
$showDay->setDbRecord($isRecorded); $showDay->setDbRecord($isRecorded);
//in case we are editing a show we need to set this to the first show
//so when editing, the date period iterator will start from the beginning
$showDay->setDbNextPopDate($startDateTime->format("Y-m-d"));
$showDay->save(); $showDay->save();
} else { } else {
foreach ($showData['add_show_day_check'] as $day) { foreach ($showData['add_show_day_check'] as $day) {
@ -946,7 +995,11 @@ SQL;
$startDateTimeClone->add(new DateInterval("P".$daysAdd."D")); $startDateTimeClone->add(new DateInterval("P".$daysAdd."D"));
} }
if (is_null($endDate) || $startDateTimeClone->getTimestamp() <= $endDateTime->getTimestamp()) { if (is_null($endDate) || $startDateTimeClone->getTimestamp() <= $endDateTime->getTimestamp()) {
if ($this->hasCcShowDay($repeatType, $day)) {
$showDay = $this->getCcShowDay($repeatType, $day);
} else {
$showDay = new CcShowDays(); $showDay = new CcShowDays();
}
$showDay->setDbFirstShow($startDateTimeClone->format("Y-m-d")); $showDay->setDbFirstShow($startDateTimeClone->format("Y-m-d"));
$showDay->setDbLastShow($endDate); $showDay->setDbLastShow($endDate);
$showDay->setDbStartTime($startDateTimeClone->format("H:i")); $showDay->setDbStartTime($startDateTimeClone->format("H:i"));
@ -956,6 +1009,9 @@ SQL;
$showDay->setDbRepeatType($repeatType); $showDay->setDbRepeatType($repeatType);
$showDay->setDbShowId($showId); $showDay->setDbShowId($showId);
$showDay->setDbRecord($isRecorded); $showDay->setDbRecord($isRecorded);
//in case we are editing a show we need to set this to the first show
//so when editing, the date period iterator will start from the beginning
$showDay->setDbNextPopDate($startDateTimeClone->format("Y-m-d"));
$showDay->save(); $showDay->save();
} }
} }