/** * @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; } }
/** * @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(); } }
/** * @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; }