示例#1
0
 public function save_selection()
 {
     $flash = Flash::Instance();
     $db = DB::Instance();
     $errors = array();
     $db->StartTrans();
     $type = $this->_data['type'];
     $output_details = $this->output_types[$type];
     $selected = empty($_SESSION['selected_output'][$type]) ? array() : $_SESSION['selected_output'][$type];
     $header_data = array();
     $header_data = $this->_data;
     if (!empty($this->_data['output_header_id'])) {
         $header_id = $this->_data['output_header_id'];
         $detail = new DataObjectCollection(DataObjectFactory::Factory('OutputDetail'));
         $sh = new SearchHandler($detail, FALSE);
         $sh->addConstraintChain(new Constraint('output_header_id', '=', $header_id));
         $detail->delete($this->_data['output_header_id']);
         $header_data['id'] = $header_id;
     }
     $header_data['class'] = $this->modeltype;
     $header_data['process'] = $output_details['printaction'];
     $header = DataObject::Factory($header_data, $errors, 'OutputHeader');
     if ($header && $header->save() && count($errors) == 0) {
         $header_id = $header->id;
         $lines_data = array();
         foreach ($selected as $id => $value) {
             if ($value['select'] == 'true') {
                 $value['output_header_id'] = $header_id;
                 $value['select_id'] = $id;
                 $lines_data[] = $value;
             }
         }
         foreach ($lines_data as $line_data) {
             $line = DataObject::Factory($line_data, $errors, 'OutputDetail');
             if (!$line || count($errors) > 0 || !$line->save()) {
                 $errors[] = 'Error saving output detail';
                 break;
             }
         }
     } else {
         $errors[] = 'Error saving output header';
     }
     if (count($errors) > 0) {
         $flash->addErrors($errors);
         $db->FailTrans();
         $db->CompleteTrans();
         $this->refresh();
     } else {
         $db->CompleteTrans();
         $_SESSION['selected_output'][$type] = array();
         sendTo($this->name, 'output_summary', $this->_modules, array('type' => $type));
     }
 }
示例#2
0
 public function save_relationships()
 {
     $flash = Flash::Instance();
     $errors = array();
     $itemlink = array();
     $selectedlinks = array();
     $db = DB::Instance();
     $db->StartTrans();
     $selected_items = $_SESSION['selected_items']['data'];
     $deleted_items = $_SESSION['selected_items']['delete'];
     $selected_targets = $_SESSION['selected_targets']['data'];
     $deleted_targets = $_SESSION['selected_targets']['delete'];
     if (!empty($deleted_targets) || !empty($deleted_items)) {
         // Need to delete any relationship that are just about to be saved
         $do = new DataObject($this->linkTableName);
         $doc = new DataObjectCollection($do);
         $sh = new SearchHandler($doc, false);
         $cc1 = new ConstraintChain();
         if (!empty($deleted_targets)) {
             $cc1->add(new Constraint('item_id', 'IN', '(' . implode(',', array_keys($selected_items)) . ')'));
             $cc1->add(new Constraint('target_id', 'IN', '(' . implode(',', array_keys($deleted_targets)) . ')'));
         }
         $cc2 = new ConstraintChain();
         if (!empty($deleted_items)) {
             $cc2->add(new Constraint('item_id', 'IN', '(' . implode(',', array_keys($deleted_items)) . ')'));
             $cc2->add(new Constraint('target_id', 'IN', '(' . implode(',', array_keys($selected_targets)) . ')'));
         }
         $sh->addConstraint($cc1);
         $sh->addConstraint($cc2, 'OR');
         $deleted = $doc->delete($sh);
         if ($deleted > 0) {
             $flash->addWarning($deleted . ' relationships deleted');
         }
     }
     $selectedlinks = array();
     foreach ($selected_items as $item_key => $item_data) {
         foreach ($selected_targets as $target_key => $target_data) {
             $do = new DataObject($this->linkTableName);
             $cc = new ConstraintChain();
             $cc->add(new Constraint('item_id', '=', $item_key));
             $cc->add(new Constraint('target_id', '=', $target_key));
             $do->loadBy($cc);
             if (!$do->isLoaded()) {
                 // Only save links that do not exist
                 $selectedlinks[] = array('item_id' => $item_key, 'target_id' => $target_key);
             }
         }
     }
     if (count($selectedlinks) > 0) {
         $result = SelectorCollection::saveAssociations($selectedlinks, $this->linkTableName, $errors);
     } else {
         $flash->addWarning('These relationships already exist - no data saved');
         $result = true;
     }
     if ($result) {
         $db->CompleteTrans();
         unset($_SESSION['selected_items']);
         unset($_SESSION['selected_targets']);
         $flash->addMessage(count($selectedlinks) . " relationships saved successfully");
         sendTo($this->name, 'index', $this->_modules);
     } else {
         $db->FailTrans();
         $db->CompleteTrans();
         $flash->addErrors($errors);
         $flash->addError("Error saving relationships");
         sendTo($this->name, 'confirm_relationships', $this->_modules);
     }
 }