コード例 #1
0
 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"];
     }
     $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_day_check'] = $this->_getParam('days');
     if ($data['add_show_day_check'] == "") {
         $data['add_show_day_check'] = null;
     }
     $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();
     $formRecord = new Application_Form_AddShowRR();
     $formAbsoluteRebroadcast = new Application_Form_AddShowAbsoluteRebroadcastDates();
     $formRebroadcast = new Application_Form_AddShowRebroadcastDates();
     $formWhat->removeDecorator('DtDdWrapper');
     $formWho->removeDecorator('DtDdWrapper');
     $formWhen->removeDecorator('DtDdWrapper');
     $formRepeats->removeDecorator('DtDdWrapper');
     $formStyle->removeDecorator('DtDdWrapper');
     $formRecord->removeDecorator('DtDdWrapper');
     $formAbsoluteRebroadcast->removeDecorator('DtDdWrapper');
     $formRebroadcast->removeDecorator('DtDdWrapper');
     $what = $formWhat->isValid($data);
     $when = $formWhen->isValid($data);
     if ($when) {
         $when = $formWhen->checkReliantFields($data, $startDateModified);
     }
     //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 ($data["add_show_repeats"]) {
         $repeats = $formRepeats->isValid($data);
         if ($repeats) {
             $repeats = $formRepeats->checkReliantFields($data);
         }
         $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 {
         $formRebroadcast->reset();
         //make it valid, results don't matter anyways.
         $repeats = 1;
         $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 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.
     $record = false;
     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 ($what && $when && $repeats && $who && $style && $record && $rebroadAb && $rebroad) {
         $userInfo = Zend_Auth::getInstance()->getStorage()->read();
         $user = new User($userInfo->id);
         if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
             Show::create($data);
         }
         //send back a new form for the user.
         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->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');
     }
 }