Example #1
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);
     }
 }