Пример #1
0
 /**
  * @see SampleItemFactoryInterface::create()
  * @param integer $sample_id
  * @param integer $item_id
  * @param integer $gid
  * @param string $keywords
  * @param string $description
  * @param bool $parent
  * @return bool
  */
 public static function create($sample_id, $item_id, $gid, $keywords = null, $description = null, $parent_item_id = null, $parent_sample = false, $parent_is_parent_sample = false)
 {
     global $transaction;
     if ($transaction->is_in_transction() == true) {
         $sample = new Sample($sample_id);
         $sample_item = new SampleItem($sample_id);
         $sample_item->set_gid($gid);
         $sample_item->set_parent($parent_sample);
         // For parent sample only
         $sample_item->set_parent_item_id($parent_item_id);
         if ($sample_item->set_item_id($item_id) == false) {
             return false;
         }
         if ($sample_item->link_item() == false) {
             return false;
         }
         if (($class_name = $sample_item->is_classified()) == true) {
             if ($sample_item->set_class($class_name) == false) {
                 return false;
             }
         }
         $description_required = $sample_item->is_description();
         $keywords_required = $sample_item->is_keywords();
         if ($description_required == true xor $keywords_required == true) {
             if ($description_required == false and $keywords_required == true) {
                 $sample_item->set_information(null, $keywords);
             } else {
                 $sample_item->set_information($description, null);
             }
         } else {
             if ($description_required == true and $keywords_required == true) {
                 $sample_item->set_information($description, $keywords);
             }
         }
         $item_holder_type_array = Item::list_holders();
         $item_holder_id_array = array();
         if (is_array($item_holder_type_array) and count($item_holder_type_array) >= 1) {
             foreach ($item_holder_type_array as $key => $value) {
                 $item_holder_id_array[$key] = $value::list_item_holders_by_item_id($sample->get_item_id());
                 if ($key == "sample" and $parent_is_parent_sample == true) {
                     $item_holder_id_array[$key] = array_merge($item_holder_id_array[$key], Sample_Wrapper::get_sample_id_and_gid_by_parent_sample_id($sample_id));
                 }
             }
         }
         $item_holder_add_event = new ItemHolderAddEvent($item_holder_id_array, $sample->get_item_id(), $item_id, $gid);
         $event_handler = new EventHandler($item_holder_add_event);
         if ($event_handler->get_success() == false) {
             return false;
         }
         return true;
     } else {
         return false;
     }
 }
Пример #2
0
 /**
  * @see SampleInterface::delete()
  * @return bool
  * @throws SampleDeleteLocationException
  * @throws SampleDeleteUserException
  * @throws SampleDeleteOrganisationUnitException
  * @throws SampleDeleteItemException
  * @throws SampleDeleteFolderException
  * @throws SampleDeleteEventFailedException
  * @throws SampleDeleteFailedException
  * @throws SampleDeleteItemLinkException
  * @throws SampleNoInstanceException
  */
 public function delete()
 {
     global $transaction;
     if ($this->sample_id and $this->sample) {
         $transaction_id = $transaction->begin();
         try {
             array_push(self::$sample_delete_array, $this->sample_id);
             $tmp_sample_id = $this->sample_id;
             // Location Relations
             $sample_has_location_array = SampleHasLocation_Access::list_entries_by_sample_id($tmp_sample_id);
             if (is_array($sample_has_location_array) and count($sample_has_location_array) >= 1) {
                 foreach ($sample_has_location_array as $key => $value) {
                     $sample_has_location = new SampleHasLocation_Access($value);
                     if ($sample_has_location->delete() == false) {
                         throw new SampleDeleteLocationException();
                     }
                 }
             }
             // Organisation Unit and User Relations
             $sample_security = new SampleSecurity($tmp_sample_id);
             $organisation_unit_array = $sample_security->list_organisation_unit_entries();
             if (is_array($organisation_unit_array) and count($organisation_unit_array) >= 1) {
                 foreach ($organisation_unit_array as $key => $value) {
                     if ($sample_security->delete_organisation_unit($value) == false) {
                         throw new SampleDeleteOrganisationUnitException();
                     }
                 }
             }
             $user_array = $sample_security->list_user_entries();
             if (is_array($user_array) and count($user_array) >= 1) {
                 foreach ($user_array as $key => $value) {
                     if ($sample_security->delete_user($value) == false) {
                         throw new SampleDeleteUserException();
                     }
                 }
             }
             // Items
             $sample_item = new SampleItem($tmp_sample_id);
             $item_array = $sample_item->get_sample_items();
             if (is_array($item_array) and count($item_array) >= 1) {
                 foreach ($item_array as $item_key => $item_value) {
                     $sample_item = new SampleItem($tmp_sample_id);
                     $sample_item->set_item_id($item_value);
                     if ($sample_item->unlink_item() == false) {
                         throw new SampleDeleteItemException();
                     }
                 }
             }
             // Parent-Sample-Sub-Item-Links
             if (SampleItem::delete_remaining_sample_entries($tmp_sample_id) == false) {
                 throw new SampleDeleteItemException();
             }
             parent::delete();
             $sample_delete_event = new SampleDeleteEvent($tmp_sample_id);
             $event_handler = new EventHandler($sample_delete_event);
             if ($event_handler->get_success() == false) {
                 throw new SampleDeleteEventFailedException();
             }
             $sample_is_item = new SampleIsItem_Access($tmp_sample_id);
             if ($sample_is_item->delete() == false) {
                 throw new SampleDeleteItemLinkException();
             }
             if ($this->sample->delete() == false) {
                 throw new SampleDeleteFailedException();
             } else {
                 $this->__destruct();
                 $folder_id = SampleFolder::get_folder_by_sample_id($tmp_sample_id);
                 $folder = Folder::get_instance($folder_id);
                 if ($folder->delete(true, true) == false) {
                     throw new SampleDeleteFolderException();
                 }
             }
         } catch (BaseException $e) {
             if ($transaction_id != null) {
                 $transaction->rollback($transaction_id);
             }
             throw $e;
         }
         if ($transaction_id != null) {
             $transaction->commit($transaction_id);
         }
         return true;
     } else {
         throw new SampleNoInstanceException();
     }
 }
Пример #3
0
 /**
  * @see EventListenerInterface::listen_events()
  * @param object $event_object
  * @return bool
  */
 public static function listen_events($event_object)
 {
     if ($event_object instanceof ItemDeleteEvent) {
         $sample_item = new SampleItem(null);
         $sample_item->set_item_id($event_object->get_item_id());
         if ($sample_item->unlink_item_full() == false) {
             return false;
         }
     }
     return true;
 }