From bdd3444acf3921c04c99cc779dc42baa86743eff Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 11 Apr 2012 16:45:03 -0400 Subject: [PATCH 1/5] CC-3548: Schedule: Separate repeate show template and single instance on 'When' section -in progress --- .../controllers/ScheduleController.php | 300 +++++------------- airtime_mvc/application/forms/AddShowWhen.php | 4 +- airtime_mvc/application/models/Schedule.php | 162 ++++++++++ 3 files changed, 240 insertions(+), 226 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index fe9c96ef8..48bb9fe9a 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -12,6 +12,7 @@ class ScheduleController extends Zend_Controller_Action ->addActionContext('make-context-menu', 'json') ->addActionContext('add-show-dialog', 'json') ->addActionContext('add-show', 'json') + ->addActionContext('edit-show', 'json') ->addActionContext('move-show', 'json') ->addActionContext('resize-show', 'json') ->addActionContext('delete-show', 'json') @@ -19,8 +20,7 @@ class ScheduleController extends Zend_Controller_Action ->addActionContext('clear-show', 'json') ->addActionContext('get-current-playlist', 'json') ->addActionContext('remove-group', 'json') - ->addActionContext('edit-show', 'json') - ->addActionContext('add-show', 'json') + ->addActionContext('populate-show-form', 'json') ->addActionContext('cancel-show', 'json') ->addActionContext('cancel-current-show', 'json') ->addActionContext('get-form', 'json') @@ -265,13 +265,13 @@ class ScheduleController extends Zend_Controller_Action } else { if($instance->isRepeating()){ $menu["edit"] = array("name"=> "Edit", "icon" => "edit", "items" => array()); - $menu["edit"]["items"]["instance"] = array("name"=> "Edit Show Instance", "icon" => "edit", "url" => "/Schedule/edit-show"); - $menu["edit"]["items"]["all"] = array("name"=> "Edit Show", "icon" => "edit", "url" => "/Schedule/edit-show"); + $menu["edit"]["items"]["instance"] = array("name"=> "Edit Show Instance", "icon" => "edit", "url" => "/Schedule/populate-show-form"); + $menu["edit"]["items"]["all"] = array("name"=> "Edit Show", "icon" => "edit", "url" => "/Schedule/populate-show-form"); }else{ if($instance->isRebroadcast()){ - $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"rebroadcast", "url" => "/Schedule/edit-show"); + $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"rebroadcast", "url" => "/Schedule/populate-show-form"); }else{ - $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"all", "url" => "/Schedule/edit-show"); + $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"all", "url" => "/Schedule/populate-show-form"); } } if($isAdminOrPM){ @@ -286,13 +286,13 @@ class ScheduleController extends Zend_Controller_Action if($instance->isRepeating()){ $menu["edit"] = array("name"=> "Edit", "icon" => "edit", "items" => array()); - $menu["edit"]["items"]["instance"] = array("name"=> "Edit Show Instance", "icon" => "edit", "url" => "/Schedule/edit-show"); - $menu["edit"]["items"]["all"] = array("name"=> "Edit Show", "icon" => "edit", "url" => "/Schedule/edit-show"); + $menu["edit"]["items"]["instance"] = array("name"=> "Edit Show Instance", "icon" => "edit", "url" => "/Schedule/populate-show-form"); + $menu["edit"]["items"]["all"] = array("name"=> "Edit Show", "icon" => "edit", "url" => "/Schedule/populate-show-form"); }else{ if($instance->isRebroadcast()){ - $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"rebroadcast", "url" => "/Schedule/edit-show"); + $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"rebroadcast", "url" => "/Schedule/populate-show-form"); }else{ - $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"all", "url" => "/Schedule/edit-show"); + $menu["edit"] = array("name"=> "Edit Show", "icon" => "edit", "_type"=>"all", "url" => "/Schedule/populate-show-form"); } } @@ -438,7 +438,7 @@ class ScheduleController extends Zend_Controller_Action unset($this->view->showContent); } - public function editShowAction() + public function populateShowFormAction() { $userInfo = Zend_Auth::getInstance()->getStorage()->read(); $user = new Application_Model_User($userInfo->id); @@ -452,8 +452,10 @@ class ScheduleController extends Zend_Controller_Action if ($type == "instance"){ $this->view->action = "edit-show-instance"; - }else if($type == "rebroadcast"){ + } else if($type == "rebroadcast") { $this->view->action = "edit-show-rebroadcast"; + } else { + $this->view->action = "edit-show"; } try{ @@ -625,19 +627,7 @@ class ScheduleController extends Zend_Controller_Action $this->view->form = $this->view->render('schedule/add-show-form.phtml'); } } - - public function editShowInstanceAction(){ - $js = $this->_getParam('data'); - $data = array(); - - //need to convert from serialized jQuery array. - foreach($js as $j){ - $data[$j["name"]] = $j["value"]; - } - - } - public function editShowRebroadcastAction(){ $js = $this->_getParam('data'); $data = array(); @@ -668,15 +658,7 @@ class ScheduleController extends Zend_Controller_Action $this->view->edit = true; } - //for 2.2 - /* - public function editShowAction(){ - - } - */ - - public function addShowAction() - { + public function editShowInstanceAction(){ $js = $this->_getParam('data'); $data = array(); @@ -685,15 +667,18 @@ class ScheduleController extends Zend_Controller_Action $data[$j["name"]] = $j["value"]; } - $show = new Application_Model_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. - //The start date will be return in UTC time, so lets convert it to local time. - $dt = Application_Model_DateHelper::ConvertToLocalDateTime($show->getStartDate()); - $data['add_show_start_date'] = $dt->format("Y-m-d"); - $startDateModified = false; + + } + + public function editShowAction(){ + + //1) Get add_show_start_date since it might not have been sent + $js = $this->_getParam('data'); + $data = array(); + + //need to convert from serialized jQuery array. + foreach($js as $j){ + $data[$j["name"]] = $j["value"]; } $data['add_show_hosts'] = $this->_getParam('hosts'); @@ -703,192 +688,59 @@ class ScheduleController extends Zend_Controller_Action $data['add_show_day_check'] = null; } - $userInfo = Zend_Auth::getInstance()->getStorage()->read(); - $user = new Application_Model_User($userInfo->id); - $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); - $isDJ = $user->isHost($show->getId()); - - $isSaas = Application_Model_Preference::GetPlanLevel() == 'disabled'?false:true; - $record = false; - - $formWhat = new Application_Form_AddShowWhat(); - $formWho = new Application_Form_AddShowWho(); - $formWhen = new Application_Form_AddShowWhen(); - $formRepeats = new Application_Form_AddShowRepeats(); - $formStyle = new Application_Form_AddShowStyle(); - $formLive = new Application_Form_AddShowLiveStream(); - - $formWhat->removeDecorator('DtDdWrapper'); - $formWho->removeDecorator('DtDdWrapper'); - $formWhen->removeDecorator('DtDdWrapper'); - $formRepeats->removeDecorator('DtDdWrapper'); - $formStyle->removeDecorator('DtDdWrapper'); - $formLive->removeDecorator('DtDdWrapper'); - - $what = $formWhat->isValid($data); - $when = $formWhen->isValid($data); - $live = $formLive->isValid($data); - if($when) { - $when = $formWhen->checkReliantFields($data, $startDateModified); + $show = new Application_Model_Show($data['add_show_id']); + $validateStartDate = true; + + if (!array_key_exists('add_show_start_date', $data)){ + //Changing the start date was disabled, since the + //array key does not exist. We need to repopulate this entry from the db. + //The start date will be returned in UTC time, so lets convert it to local time. + $dt = Application_Model_DateHelper::ConvertToLocalDateTime($show->getStartDate()); + $data['add_show_start_date'] = $dt->format("Y-m-d"); + $validateStartDate = false; } - - - //The way the following code works is that is parses the hour and - //minute from a string with the format "1h 20m" or "2h" or "36m". - //So we are detecting whether an hour or minute value exists via strpos - //and then parse appropriately. A better way to do this in the future is - //actually pass the format from javascript in the format hh:mm so we don't - //have to do this extra String parsing. - $hPos = strpos($data["add_show_duration"], 'h'); - $mPos = strpos($data["add_show_duration"], 'm'); - - $hValue = 0; - $mValue = 0; - - if($hPos !== false){ - $hValue = trim(substr($data["add_show_duration"], 0, $hPos)); - } - if($mPos !== false){ - $hPos = $hPos === FALSE ? 0 : $hPos+1; - $mValue = trim(substr($data["add_show_duration"], $hPos, -1 )); - } - - $data["add_show_duration"] = $hValue.":".$mValue; - - if(!$isSaas){ - $formRecord = new Application_Form_AddShowRR(); - $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates(); - $formRebroadcast = new Application_Form_AddShowRebroadcastDates(); - - $formRecord->removeDecorator('DtDdWrapper'); - $formAbsoluteRebroadcast->removeDecorator('DtDdWrapper'); - $formRebroadcast->removeDecorator('DtDdWrapper'); - - //If show is a new show (not updated), then get - //isRecorded from POST data. Otherwise get it from - //the database since the user is not allowed to - //update this option. - if ($data['add_show_id'] != -1){ - $data['add_show_record'] = $show->isRecorded(); - $record = $formRecord->isValid($data); - $formRecord->getElement('add_show_record')->setOptions(array('disabled' => true)); - } else { - $record = $formRecord->isValid($data); - } - } - - if($data["add_show_repeats"]) { - $repeats = $formRepeats->isValid($data); - if($repeats) { - $repeats = $formRepeats->checkReliantFields($data); - } - if(!$isSaas){ - $formAbsoluteRebroadcast->reset(); - //make it valid, results don't matter anyways. - $rebroadAb = 1; - - if ($data["add_show_rebroadcast"]) { - $rebroad = $formRebroadcast->isValid($data); - if($rebroad) { - $rebroad = $formRebroadcast->checkReliantFields($data); - } - } - else { - $rebroad = 1; - } - } - } - else { - $repeats = 1; - if(!$isSaas){ - $formRebroadcast->reset(); - //make it valid, results don't matter anyways. - $rebroad = 1; - - if ($data["add_show_rebroadcast"]) { - $rebroadAb = $formAbsoluteRebroadcast->isValid($data); - if($rebroadAb) { - $rebroadAb = $formAbsoluteRebroadcast->checkReliantFields($data); - } - } - else { - $rebroadAb = 1; - } - } - } - - $who = $formWho->isValid($data); - $style = $formStyle->isValid($data); - if ($what && $when && $repeats && $who && $style && $live) { - if(!$isSaas){ - if($record && $rebroadAb && $rebroad){ - if ($isAdminOrPM || $isDJ) { - Application_Model_Show::create($data); - } - - //send back a new form for the user. - Application_Model_Schedule::createNewFormSections($this->view); - - $this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); - }else{ - $this->view->what = $formWhat; - $this->view->when = $formWhen; - $this->view->repeats = $formRepeats; - $this->view->who = $formWho; - $this->view->style = $formStyle; - $this->view->rr = $formRecord; - $this->view->absoluteRebroadcast = $formAbsoluteRebroadcast; - $this->view->rebroadcast = $formRebroadcast; - $this->view->live = $formLive; - $this->view->addNewShow = true; - - //the form still needs to be "update" since - //the validity test failed. - if ($data['add_show_id'] != -1){ - $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'); - - } - }else{ - if ($isAdminOrPM || $isDJ) { - Application_Model_Show::create($data); - } - - //send back a new form for the user. - Application_Model_Schedule::createNewFormSections($this->view); - - $this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); - } - } - else { - $this->view->what = $formWhat; - $this->view->when = $formWhen; - $this->view->repeats = $formRepeats; - $this->view->who = $formWho; - $this->view->style = $formStyle; - $this->view->live = $formLive; - - if(!$isSaas){ - $this->view->rr = $formRecord; - $this->view->absoluteRebroadcast = $formAbsoluteRebroadcast; - $this->view->rebroadcast = $formRebroadcast; - } + + $data['add_show_record'] = $show->isRecorded(); + + $success = Application_Model_Schedule::addUpdateShow($data, $this, $validateStartDate); + + if ($success){ $this->view->addNewShow = true; - - //the form still needs to be "update" since - //the validity test failed. - if ($data['add_show_id'] != -1){ - $this->view->addNewShow = false; - } - if (!$startDateModified){ - $formWhen->getElement('add_show_start_date')->setOptions(array('disabled' => true)); + $this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); + } else { + if (!$validateStartDate){ + $this->view->when->getElement('add_show_start_date')->setOptions(array('disabled' => true)); } + $this->view->rr->getElement('add_show_record')->setOptions(array('disabled' => true)); + $this->view->addNewShow = false; + $this->view->form = $this->view->render('schedule/add-show-form.phtml'); + } + } + + public function addShowAction(){ + $js = $this->_getParam('data'); + $data = array(); + //need to convert from serialized jQuery array. + foreach($js as $j){ + $data[$j["name"]] = $j["value"]; + } + + $data['add_show_hosts'] = $this->_getParam('hosts'); + $data['add_show_day_check'] = $this->_getParam('days'); + + if($data['add_show_day_check'] == "") { + $data['add_show_day_check'] = null; + } + + $validateStartDate = true; + $success = Application_Model_Schedule::addUpdateShow($data, $this, $validateStartDate); + + if ($success){ + $this->view->addNewShow = true; + $this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); + } else { + $this->view->addNewShow = true; $this->view->form = $this->view->render('schedule/add-show-form.phtml'); } } diff --git a/airtime_mvc/application/forms/AddShowWhen.php b/airtime_mvc/application/forms/AddShowWhen.php index 1493c4ace..ed10c89a9 100644 --- a/airtime_mvc/application/forms/AddShowWhen.php +++ b/airtime_mvc/application/forms/AddShowWhen.php @@ -83,7 +83,7 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm } - public function checkReliantFields($formData, $startDateModified) { + public function checkReliantFields($formData, $validateStartDate) { $valid = true; $start_time = $formData['add_show_start_date']." ".$formData['add_show_start_time']; @@ -92,7 +92,7 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm $nowDateTime = new DateTime(); $showStartDateTime = new DateTime($start_time); - if ((($formData['add_show_id'] != -1) && $startDateModified) || ($formData['add_show_id'] == -1)){ + if ($validateStartDate){ if($showStartDateTime->getTimestamp() < $nowDateTime->getTimestamp()) { $this->getElement('add_show_start_time')->setErrors(array('Cannot create show in the past')); $valid = false; diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 577ea702b..ce07fe3de 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -616,4 +616,166 @@ class Application_Model_Schedule { } $p_view->addNewShow = true; } + + public static function addUpdateShow($data, $controller, $validateStartDate){ + + $userInfo = Zend_Auth::getInstance()->getStorage()->read(); + $user = new Application_Model_User($userInfo->id); + $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); + + $isSaas = Application_Model_Preference::GetPlanLevel() == 'disabled'?false:true; + $record = false; + + $formWhat = new Application_Form_AddShowWhat(); + $formWho = new Application_Form_AddShowWho(); + $formWhen = new Application_Form_AddShowWhen(); + $formRepeats = new Application_Form_AddShowRepeats(); + $formStyle = new Application_Form_AddShowStyle(); + $formLive = new Application_Form_AddShowLiveStream(); + + $formWhat->removeDecorator('DtDdWrapper'); + $formWho->removeDecorator('DtDdWrapper'); + $formWhen->removeDecorator('DtDdWrapper'); + $formRepeats->removeDecorator('DtDdWrapper'); + $formStyle->removeDecorator('DtDdWrapper'); + $formLive->removeDecorator('DtDdWrapper'); + + $what = $formWhat->isValid($data); + $when = $formWhen->isValid($data); + $live = $formLive->isValid($data); + if($when) { + $when = $formWhen->checkReliantFields($data, $validateStartDate); + } + + //The way the following code works is that is parses the hour and + //minute from a string with the format "1h 20m" or "2h" or "36m". + //So we are detecting whether an hour or minute value exists via strpos + //and then parse appropriately. A better way to do this in the future is + //actually pass the format from javascript in the format hh:mm so we don't + //have to do this extra String parsing. + $hPos = strpos($data["add_show_duration"], 'h'); + $mPos = strpos($data["add_show_duration"], 'm'); + + $hValue = 0; + $mValue = 0; + + if($hPos !== false){ + $hValue = trim(substr($data["add_show_duration"], 0, $hPos)); + } + if($mPos !== false){ + $hPos = $hPos === FALSE ? 0 : $hPos+1; + $mValue = trim(substr($data["add_show_duration"], $hPos, -1 )); + } + + $data["add_show_duration"] = $hValue.":".$mValue; + + if(!$isSaas){ + $formRecord = new Application_Form_AddShowRR(); + $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates(); + $formRebroadcast = new Application_Form_AddShowRebroadcastDates(); + + $formRecord->removeDecorator('DtDdWrapper'); + $formAbsoluteRebroadcast->removeDecorator('DtDdWrapper'); + $formRebroadcast->removeDecorator('DtDdWrapper'); + + + $record = $formRecord->isValid($data); + } + + if($data["add_show_repeats"]) { + $repeats = $formRepeats->isValid($data); + if($repeats) { + $repeats = $formRepeats->checkReliantFields($data); + } + if(!$isSaas){ + $formAbsoluteRebroadcast->reset(); + //make it valid, results don't matter anyways. + $rebroadAb = 1; + + if ($data["add_show_rebroadcast"]) { + $rebroad = $formRebroadcast->isValid($data); + if($rebroad) { + $rebroad = $formRebroadcast->checkReliantFields($data); + } + } else { + $rebroad = 1; + } + } + } else { + $repeats = 1; + if(!$isSaas){ + $formRebroadcast->reset(); + //make it valid, results don't matter anyways. + $rebroad = 1; + + if ($data["add_show_rebroadcast"]) { + $rebroadAb = $formAbsoluteRebroadcast->isValid($data); + if($rebroadAb) { + $rebroadAb = $formAbsoluteRebroadcast->checkReliantFields($data); + } + } else { + $rebroadAb = 1; + } + } + } + + $who = $formWho->isValid($data); + $style = $formStyle->isValid($data); + if ($what && $when && $repeats && $who && $style && $live) { + if(!$isSaas){ + if($record && $rebroadAb && $rebroad){ + if ($isAdminOrPM) { + Application_Model_Show::create($data); + } + + //send back a new form for the user. + Application_Model_Schedule::createNewFormSections($controller->view); + + //$controller->view->newForm = $controller->view->render('schedule/add-show-form.phtml'); + return true; + } else { + $controller->view->what = $formWhat; + $controller->view->when = $formWhen; + $controller->view->repeats = $formRepeats; + $controller->view->who = $formWho; + $controller->view->style = $formStyle; + $controller->view->rr = $formRecord; + $controller->view->absoluteRebroadcast = $formAbsoluteRebroadcast; + $controller->view->rebroadcast = $formRebroadcast; + $controller->view->live = $formLive; + //$controller->view->addNewShow = !$editShow; + + //$controller->view->form = $controller->view->render('schedule/add-show-form.phtml'); + return false; + + } + } else { + if ($isAdminOrPM) { + Application_Model_Show::create($data); + } + + //send back a new form for the user. + Application_Model_Schedule::createNewFormSections($controller->view); + + //$controller->view->newForm = $controller->view->render('schedule/add-show-form.phtml'); + return true; + } + } else { + $controller->view->what = $formWhat; + $controller->view->when = $formWhen; + $controller->view->repeats = $formRepeats; + $controller->view->who = $formWho; + $controller->view->style = $formStyle; + $controller->view->live = $formLive; + + if(!$isSaas){ + $controller->view->rr = $formRecord; + $controller->view->absoluteRebroadcast = $formAbsoluteRebroadcast; + $controller->view->rebroadcast = $formRebroadcast; + } + //$controller->view->addNewShow = !$editShow; + //$controller->view->form = $controller->view->render('schedule/add-show-form.phtml'); + return false; + } + } } From 071874626e34892c5c006a2d958ab10eaebf30a1 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 12 Apr 2012 11:49:39 -0400 Subject: [PATCH 2/5] -change git submodule to public repo for time being --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 8d910dab9..937e8eb94 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "python_apps/pypo/liquidsoap_bin"] path = python_apps/pypo/liquidsoap_bin - url = git@dev.sourcefabric.org:airtime-liquidsoap + url = git://github.com/sourcefabric/airtime-liquidsoap.git From 5a8df0321e25b0924b217c772ae3b074c878099e Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 12 Apr 2012 11:54:51 -0400 Subject: [PATCH 3/5] CC-3548: Schedule: Separate repeate show template and single instance on 'When' section -in progress --- .../controllers/ScheduleController.php | 92 ++++++++++++++++--- airtime_mvc/application/forms/AddShowWhat.php | 6 ++ airtime_mvc/application/models/Preference.php | 6 +- airtime_mvc/application/models/Schedule.php | 3 +- 4 files changed, 91 insertions(+), 16 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 48bb9fe9a..02031b90b 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -21,6 +21,7 @@ class ScheduleController extends Zend_Controller_Action ->addActionContext('get-current-playlist', 'json') ->addActionContext('remove-group', 'json') ->addActionContext('populate-show-form', 'json') + ->addActionContext('populate-show-instance-form', 'json') ->addActionContext('cancel-show', 'json') ->addActionContext('cancel-current-show', 'json') ->addActionContext('get-form', 'json') @@ -265,7 +266,7 @@ class ScheduleController extends Zend_Controller_Action } else { if($instance->isRepeating()){ $menu["edit"] = array("name"=> "Edit", "icon" => "edit", "items" => array()); - $menu["edit"]["items"]["instance"] = array("name"=> "Edit Show Instance", "icon" => "edit", "url" => "/Schedule/populate-show-form"); + $menu["edit"]["items"]["instance"] = array("name"=> "Edit Show Instance", "icon" => "edit", "url" => "/Schedule/populate-show-instance-form"); $menu["edit"]["items"]["all"] = array("name"=> "Edit Show", "icon" => "edit", "url" => "/Schedule/populate-show-form"); }else{ if($instance->isRebroadcast()){ @@ -286,7 +287,7 @@ class ScheduleController extends Zend_Controller_Action if($instance->isRepeating()){ $menu["edit"] = array("name"=> "Edit", "icon" => "edit", "items" => array()); - $menu["edit"]["items"]["instance"] = array("name"=> "Edit Show Instance", "icon" => "edit", "url" => "/Schedule/populate-show-form"); + $menu["edit"]["items"]["instance"] = array("name"=> "Edit Show Instance", "icon" => "edit", "url" => "/Schedule/populate-show-instance-form"); $menu["edit"]["items"]["all"] = array("name"=> "Edit Show", "icon" => "edit", "url" => "/Schedule/populate-show-form"); }else{ if($instance->isRebroadcast()){ @@ -438,6 +439,67 @@ class ScheduleController extends Zend_Controller_Action unset($this->view->showContent); } + public function populateShowInstanceFormAction(){ + $formWhat = new Application_Form_AddShowWhat(); + $formWho = new Application_Form_AddShowWho(); + $formWhen = new Application_Form_AddShowWhen(); + $formRepeats = new Application_Form_AddShowRepeats(); + $formStyle = new Application_Form_AddShowStyle(); + $formLive = new Application_Form_AddShowLiveStream(); + + $formWhat->removeDecorator('DtDdWrapper'); + $formWho->removeDecorator('DtDdWrapper'); + $formWhen->removeDecorator('DtDdWrapper'); + $formRepeats->removeDecorator('DtDdWrapper'); + $formStyle->removeDecorator('DtDdWrapper'); + + $this->view->what = $formWhat; + $this->view->when = $formWhen; + $this->view->repeats = $formRepeats; + $this->view->who = $formWho; + $this->view->style = $formStyle; + $this->view->live = $formLive; + $this->view->addNewShow = false; + + $showInstanceId = $this->_getParam('id'); + + $show_instance = CcShowInstancesQuery::create()->findPK($showInstanceId); + + $starts_string = $show_instance->getDbStarts(); + $ends_string = $show_instance->getDbEnds(); + + $starts_datetime = new DateTime($starts_string, new DateTimeZone("UTC")); + $ends_datetime = new DateTime($ends_string, new DateTimeZone("UTC")); + + $starts_datetime->setTimezone(new DateTimeZone(date_default_timezone_get())); + $ends_datetime->setTimezone(new DateTimeZone(date_default_timezone_get())); + + $instance_duration = $starts_datetime->diff($ends_datetime); + + $formValues = array('add_show_start_date' => $starts_datetime->format("Y-m-d"), + 'add_show_start_time' => $starts_datetime->format("H:i"), + 'add_show_end_date_no_repeat' => $ends_datetime->format("Y-m-d"), + 'add_show_end_time' => $ends_datetime->format("H:i"), + 'add_show_duration' => $instance_duration->format("%h")); + + $formWhen->populate($formValues); + + $formWhat->disable(); + $formWho->disable(); + $formWhen->disableRepeatCheckbox(); + $formRepeats->disable(); + $formStyle->disable(); + + /* + $formRecord->disable(); + $formAbsoluteRebroadcast->disable(); + $formRebroadcast->disable(); + */ + + $this->view->action = "edit-show-instance"; + $this->view->newForm = $this->view->render('schedule/add-show-form.phtml'); + } + public function populateShowFormAction() { $userInfo = Zend_Auth::getInstance()->getStorage()->read(); @@ -450,9 +512,7 @@ class ScheduleController extends Zend_Controller_Action // repeating shows. It's value is either "instance","rebroadcast", or "all" $type = $this->_getParam('type'); - if ($type == "instance"){ - $this->view->action = "edit-show-instance"; - } else if($type == "rebroadcast") { + if($type == "rebroadcast") { $this->view->action = "edit-show-rebroadcast"; } else { $this->view->action = "edit-show"; @@ -500,6 +560,7 @@ class ScheduleController extends Zend_Controller_Action $show = new Application_Model_Show($showInstance->getShowId()); $formWhat->populate(array('add_show_id' => $show->getId(), + 'add_show_instance_id' => $showInstanceId, 'add_show_name' => $show->getName(), 'add_show_url' => $show->getUrl(), 'add_show_genre' => $show->getGenre(), @@ -590,7 +651,7 @@ class ScheduleController extends Zend_Controller_Action $i++; } $formAbsoluteRebroadcast->populate($rebroadcastAbsoluteFormValues); - if(!$isAdminOrPM || $type == "instance"){ + if(!$isAdminOrPM){ $formRecord->disable(); $formAbsoluteRebroadcast->disable(); $formRebroadcast->disable(); @@ -605,14 +666,6 @@ class ScheduleController extends Zend_Controller_Action $formStyle->disable(); } - if($type == "instance"){ - $formWhat->disable(); - $formWho->disable(); - $formWhen->disableRepeatCheckbox(); - $formRepeats->disable(); - $formStyle->disable(); - } - if($type == "rebroadcast"){ $formWhen->disable(); } @@ -668,6 +721,17 @@ class ScheduleController extends Zend_Controller_Action } + $start_dt = new DateTime($data['add_show_start_date']." ".$data['add_show_start_time'], new DateTimeZone(date_default_timezone_get())); + $start_dt->setTimezone(new DateTimeZone('UTC')); + + $end_dt = new DateTime($data['add_show_end_date_no_repeat']." ".$data['add_show_end_time'], new DateTimeZone(date_default_timezone_get())); + $end_dt->setTimezone(new DateTimeZone('UTC')); + + //add_show_instance_id not being populated by populateShowInstanceFormAction. + $ccShowInstance = CcShowInstancesQuery::create()->findPK($data["add_show_instance_id"]); + $ccShowInstance->setDbStarts($start_dt); + $ccShowInstance->setDbEnds($end_dt); + $ccShowInstance->save(); } public function editShowAction(){ diff --git a/airtime_mvc/application/forms/AddShowWhat.php b/airtime_mvc/application/forms/AddShowWhat.php index 10ed22415..5e91a38b4 100644 --- a/airtime_mvc/application/forms/AddShowWhat.php +++ b/airtime_mvc/application/forms/AddShowWhat.php @@ -14,6 +14,12 @@ class Application_Form_AddShowWhat extends Zend_Form_SubForm 'decorators' => array('ViewHelper') )); + // Hidden element to indicate the instance id of the show + // being edited. + $this->addElement('hidden', 'add_show_instance_id', array( + 'decorators' => array('ViewHelper') + )); + // Add name element $this->addElement('text', 'add_show_name', array( 'label' => 'Name:', diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index f93cf09f9..1d1193334 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -543,7 +543,11 @@ class Application_Model_Preference } public static function GetAirtimeVersion(){ - return self::GetValue("system_version"); + if (defined('APPLICATION_ENV') && APPLICATION_ENV == "development"){ + return self::GetValue("system_version")."+".exec("git rev-parse --short HEAD"); + } else { + return self::GetValue("system_version"); + } } public static function GetLatestVersion(){ diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index ce07fe3de..91661e001 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -592,7 +592,8 @@ class Application_Model_Schedule { $p_view->style = $formStyle; $p_view->live = $formLive; - $formWhat->populate(array('add_show_id' => '-1')); + $formWhat->populate(array('add_show_id' => '-1', + 'add_show_instance_id' => '-1')); $formWhen->populate(array('add_show_start_date' => date("Y-m-d"), 'add_show_start_time' => '00:00', 'add_show_end_date_no_repeate' => date("Y-m-d"), From adddd1085cfd60a08182c07a9acf841ac19eda4a Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Thu, 12 Apr 2012 18:00:38 +0200 Subject: [PATCH 4/5] CC-3592 : Calendar-> Recorded Shows do not get Rebroadcasted at the moment added a flag whether to check user permissions or not. --- airtime_mvc/application/models/Scheduler.php | 11 +++++++++-- airtime_mvc/application/models/ShowInstance.php | 7 ++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index ea179af4e..7515ac0b4 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -16,8 +16,10 @@ class Application_Model_Scheduler { private $epochNow; private $nowDT; private $user; + + private $checkUserPermissions = true; - public function __construct($id = null) { + public function __construct() { $this->con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); @@ -27,6 +29,11 @@ class Application_Model_Scheduler { $this->user = Application_Model_User::GetCurrentUser(); } + public function setCheckUserPermissions($value) { + $this->checkUserPermissions = $value; + } + + /* * make sure any incoming requests for scheduling are ligit. * @@ -83,7 +90,7 @@ class Application_Model_Scheduler { $id = $instance->getDbId(); $show = $instance->getCcShow($this->con); - if ($this->user->canSchedule($show->getDbId()) === false) { + if ($this->checkUserPermissions && $this->user->canSchedule($show->getDbId()) === false) { throw new Exception("You are not allowed to schedule show {$show->getDbName()}."); } diff --git a/airtime_mvc/application/models/ShowInstance.php b/airtime_mvc/application/models/ShowInstance.php index 142b2998c..8e096aad3 100644 --- a/airtime_mvc/application/models/ShowInstance.php +++ b/airtime_mvc/application/models/ShowInstance.php @@ -352,7 +352,7 @@ class Application_Model_ShowInstance { * @param int $plId * Playlist ID. */ - public function addPlaylistToShow($pl_id) + public function addPlaylistToShow($pl_id, $checkUserPerm = true) { $ts = intval($this->_showInstance->getDbLastScheduled("U")) ? : 0; $id = $this->_showInstance->getDbId(); @@ -369,12 +369,13 @@ class Application_Model_ShowInstance { * * @param int $file_id */ - public function addFileToShow($file_id) + public function addFileToShow($file_id, $checkUserPerm = true) { $ts = intval($this->_showInstance->getDbLastScheduled("U")) ? : 0; $id = $this->_showInstance->getDbId(); $scheduler = new Application_Model_Scheduler(); + $scheduler->setCheckUserPermissions($checkUserPerm); $scheduler->scheduleAfter( array(array("id" => 0, "instance" => $id, "timestamp" => $ts)), array(array("id" => $file_id, "type" => "audioclip")) @@ -553,7 +554,7 @@ class Application_Model_ShowInstance { try { $rebroad = new Application_Model_ShowInstance($rebroadcast->getDbId()); - $rebroad->addFileToShow($file_id); + $rebroad->addFileToShow($file_id, false); } catch (Exception $e) { Logging::log("{$e->getFile()}"); From e2adaff5cff841e27118b55095e087612c9e3cf7 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Thu, 12 Apr 2012 18:07:16 +0200 Subject: [PATCH 5/5] CC-3630 : Deleting files from organize folder if they don't have correct Meta data --- .../airtimefilemonitor/airtimeprocessevent.py | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py b/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py index a5c6055dc..40022f571 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py @@ -137,8 +137,13 @@ class AirtimeProcessEvent(ProcessEvent): if self.mmc.is_parent_directory(pathname, self.config.organize_directory): #file was created in /srv/airtime/stor/organize. Need to process and move #to /srv/airtime/stor/imported + oldPath = pathname pathname = self.mmc.organize_new_file(pathname) - name = os.path.basename(pathname) + + #delete files from organize if they can not be read properly. + if pathname is None: + os.remove(oldPath) + return self.mmc.set_needed_file_permissions(pathname, dir) is_recorded = self.mmc.is_parent_directory(pathname, self.config.recorded_directory) @@ -237,6 +242,11 @@ class AirtimeProcessEvent(ProcessEvent): del self.cookies_IN_MOVED_FROM[event.cookie] if self.mmc.is_parent_directory(event.pathname, self.config.organize_directory): filepath = self.mmc.organize_new_file(event.pathname) + + #delete files from organize if they can not be read properly. + if filepath is None: + os.remove(event.pathname) + else: filepath = event.pathname @@ -244,7 +254,11 @@ class AirtimeProcessEvent(ProcessEvent): self.file_events.append({'filepath': filepath, 'mode': self.config.MODE_MOVED}) else: if self.mmc.is_parent_directory(event.pathname, self.config.organize_directory): - self.mmc.organize_new_file(event.pathname) + filepath = self.mmc.organize_new_file(event.pathname) + + #delete files from organize if they can not be read properly. + if filepath is None: + os.remove(event.pathname) else: #show dragged from unwatched folder into a watched folder. Do not "organize".:q! if self.mmc.is_parent_directory(event.pathname, self.config.recorded_directory): @@ -285,8 +299,10 @@ class AirtimeProcessEvent(ProcessEvent): if not dir: if self.mmc.is_audio_file(pathname): if pathname in self.ignore_event: + self.logger.info("pathname in ignore event") self.ignore_event.remove(pathname) elif not self.mmc.is_parent_directory(pathname, self.config.organize_directory): + self.logger.info("deleting a file not in organize") #we don't care if a file was deleted from the organize directory. self.file_events.append({'filepath': pathname, 'mode': self.config.MODE_DELETE})