public static function edit_parameter_item($item_id) { if (is_numeric($item_id)) { $data_entity_id = DataEntity::get_entry_by_item_id($item_id); $parameter_id = Parameter::get_parameter_id_by_data_entity_id($data_entity_id); $parameter = Parameter::get_instance($parameter_id); if ($parameter->is_read_access()) { self::detail($parameter, http_build_query(Retrace::resolve_retrace_string($_GET['retrace'])), false); } } else { throw new ItemIDMissingException(); } }
/** * @see SampleInterface::clone_sample() * @param integer $source_sample_id * @param string $name * @param integer $manufacturer_id * @param integer $location_id * @param string $desc * @param integer $language_id * @param string $date_of_expiry * @param integer $expiry_warning * @param array $value_array * @param array $item_array * @return integer * @throws SampleCloneIDMissingException * @throws SampleCloneCreateException * @throws SampleCloneCreateFolderException * @throws SampleCloneCreateSubFolderException * @throws SampleCloneCreateAsItemException * @throws SampleCloneCreateLocationException * @throws SampleCloneCreateFailedException * @throws SampleCloneUserException * @throws SampleCloneOrganisationUnitException * @throws SampleCloneLocationException * @throws SampleCloneValueException * @throws SampleCloneFileException * @throws SampleCloneParentException * @throws SampleCloneItemException */ public function clone_sample($source_sample_id, $name, $manufacturer_id, $location_id, $desc, $language_id, $date_of_expiry, $expiry_warning, $value_array, $item_array) { global $user, $transaction; if (is_numeric($source_sample_id) and $name) { $source_sample = new Sample($source_sample_id); $source_sample_security = new SampleSecurity($source_sample_id); $source_sample_folder_id = SampleFolder::get_folder_by_sample_id($source_sample_id); $transaction_id = $transaction->begin(); try { if (($sample_id = $this->sample->create($name, $user->get_user_id(), $source_sample->get_template_id(), $manufacturer_id, $desc, $language_id, $date_of_expiry, $expiry_warning)) == null) { throw new SampleCloneCreateFailedException(); } if ($desc) { $this->sample->set_comment_text_search_vector($desc, "english"); } $sub_folder_name_array = $this->create_sample_folder($sample_id, $source_sample->get_template_id()); $this->create_sample_item($sample_id); $sample_security = new SampleSecurity($sample_id); $source_sample_user_list = $source_sample_security->list_users(); if (is_array($source_sample_user_list) and count($source_sample_user_list) >= 1) { foreach ($source_sample_user_list as $key => $value) { if ($sample_security->create_user($value, true, true) == null) { throw new SampleCloneUserException(); } } } $source_sample_organisation_list = $source_sample_security->list_organisation_units(); if (is_array($source_sample_organisation_list) and count($source_sample_organisation_list) >= 1) { foreach ($source_sample_organisation_list as $key => $value) { if ($sample_security->create_organisation_unit($value) == null) { throw new SampleCloneOrganisationUnitException(); } } } // Locations $source_sample_location_array = SampleHasLocation_Access::list_entries_by_sample_id($source_sample_id); $end_sample_has_location_access = new SampleHasLocation_Access(end($source_sample_location_array)); if (is_array($source_sample_location_array) and count($source_sample_location_array) >= 1) { if ($location_id != $end_sample_has_location_access->get_location_id()) { $add_new_location = true; } else { $add_new_location = false; } foreach ($source_sample_location_array as $key => $value) { $current_sample_has_location_access = new SampleHasLocation_Access($value); $sample_has_location_access = new SampleHasLocation_Access(null); if ($sample_has_location_access->create($sample_id, $current_sample_has_location_access->get_location_id(), $user->get_user_id()) == null) { throw new SampleCloneLocationException(); } } } else { $add_new_location = true; } if (is_numeric($location_id) and $add_new_location == true and $location_id > 0) { // Create First Location $sample_has_location_access = new SampleHasLocation_Access(null); if ($sample_has_location_access->create($sample_id, $location_id, $user->get_user_id()) == null) { throw new SampleCloneCreateLocationException("Could not create location"); } } if (is_array($value_array) and count($item_array) >= 1) { $value_item_array = array(); $value_data_array = array(); foreach ($value_array as $key => $value) { $key = str_replace("value-", "", $key); $key_array = explode("-", $key, 2); if ($key_array[0] == "item") { $value_item_array[$key_array[1]] = $value; } elseif (is_numeric($key_array[0])) { $value_data_array[$key_array[0]][$key_array[1]] = $value; } } if (is_array($value_item_array) and count($value_item_array) >= 1) { foreach ($value_item_array as $key => $value) { $gid = SampleItem::get_gid_by_item_id_and_sample_id($value, $source_sample_id); $data_entity_id = DataEntity::get_entry_by_item_id($value); $value_id = Value::get_value_id_by_data_entity_id($data_entity_id); if (is_numeric($value_id)) { $value_obj = Value::get_instance($value_id); $parent_folder_id = $value_obj->get_parent_folder_id(); $value_type_id = $value_obj->get_type_id(); if ($parent_folder_id == $source_sample_folder_id) { $new_folder_id = $this->sample_folder_id; } else { $folder_name = Folder::get_name_by_id($parent_folder_id); $new_folder_id = array_search(trim(strtolower($folder_name)), $sub_folder_name_array); } if (is_numeric($new_folder_id) and is_numeric($value_type_id)) { $new_value_obj = Value::get_instance(null); $new_value_obj->create($new_folder_id, $user->get_user_id(), $value_type_id, $value_data_array[$key]); $new_value_item_id = $new_value_obj->get_item_id(); $sample_item = new SampleItem($sample_id); $sample_item->set_gid($gid); if ($sample_item->set_item_id($new_value_item_id) == false) { throw new SampleCloneValueException(); } if ($sample_item->link_item() == false) { throw new SampleCloneValueException(); } } } } } } if (is_array($item_array) and count($item_array) >= 1) { $item_type_array = array(); $item_data_array = array(); foreach ($item_array as $key => $value) { if ($value[1] == "1") { $item_explode_array = explode("-", $value[0], 2); if (!in_array($item_explode_array[0], $item_type_array)) { array_push($item_type_array, $item_explode_array[0]); } if (!is_array($item_data_array[$item_explode_array[0]])) { $item_data_array[$item_explode_array[0]] = array(); } array_push($item_data_array[$item_explode_array[0]], $item_explode_array[1]); } } if (is_array($item_type_array) and count($item_type_array) >= 1) { foreach ($item_type_array as $key => $value) { if ($value == "parent") { foreach ($item_data_array[$value] as $data_key => $data_value) { $parent_item_explode_array = explode("-", $data_value, 2); if ($parent_item_explode_array[0] and $parent_item_explode_array[1]) { $item_add_holder_event = new ItemAddHolderEvent($parent_item_explode_array[1], $parent_item_explode_array[0], $this->item_id); $event_handler = new EventHandler($item_add_holder_event); if ($event_handler->get_success() == false) { throw new SampleCloneParentException(); } } } } elseif ($value == "file") { if (is_array($item_data_array[$value]) and count($item_data_array[$value]) >= 1) { foreach ($item_data_array[$value] as $data_key => $data_value) { $gid = SampleItem::get_gid_by_item_id_and_sample_id($data_value, $source_sample_id); $data_entity_id = DataEntity::get_entry_by_item_id($data_value); $file_id = File::get_file_id_by_data_entity_id($data_entity_id); if ($file_id) { $file_obj = File::get_instance($file_id); $parent_folder_id = $file_obj->get_parent_folder_id(); if ($parent_folder_id == $source_sample_folder_id) { $new_folder_id = $this->sample_folder_id; } else { $folder_name = Folder::get_name_by_id($parent_folder_id); $new_folder_id = array_search(trim(strtolower($folder_name)), $sub_folder_name_array); } if (is_numeric($new_folder_id)) { if ($file_obj->copy($new_folder_id) == false) { throw new SampleCloneFileException(); } $new_file_item_id = $file_obj->get_item_id(); $sample_item = new SampleItem($sample_id); $sample_item->set_gid($gid); if ($sample_item->set_item_id($new_file_item_id) == false) { throw new SampleCloneFileException(); } if ($sample_item->link_item() == false) { throw new SampleCloneFileException(); } } } } } } else { if (is_array($item_data_array[$value]) and count($item_data_array[$value]) >= 1) { $handling_class = Item::get_handling_class_by_type($value); if ($handling_class) { foreach ($item_data_array[$value] as $data_key => $data_value) { $gid = SampleItem::get_gid_by_item_id_and_sample_id($data_value, $source_sample_id); $new_item_id = $handling_class::clone_item($data_value); if ($new_item_id) { $sample_item = new SampleItem($sample_id); $sample_item->set_gid($gid); if ($sample_item->set_item_id($new_item_id) == false) { throw new SampleCloneItemException(); } if ($sample_item->link_item() == false) { throw new SampleCloneItemException(); } } } } } } } } } } catch (BaseException $e) { if (is_object($this->sample_folder_object)) { $this->sample_folder_object->delete(true, true); } if ($transaction_id != null) { $transaction->rollback($transaction_id); } throw $e; } if ($transaction_id != null) { $transaction->commit($transaction_id); } self::__construct($sample_id); return $sample_id; } else { throw new SampleCloneIDMissingException(); } }
/** * @see ProjectInterface::get_description() * @return string */ public function get_description() { if ($this->project_id) { $project_item = new ProjectItem($this->project_id); $item_array = $project_item->get_project_items(); if (is_array($item_array) and count($item_array) >= 1) { foreach ($item_array as $item_key => $item_value) { if (DataEntity::is_kind_of("value", $item_value) == true) { $data_entity_id = DataEntity::get_entry_by_item_id($item_value); $value_id = Value::get_value_id_by_data_entity_id($data_entity_id); if (Value::is_entry_type_of($value_id, 2) == true) { $description_id = $value_id; } } } } $value = Value::get_instance($description_id); if ($value->get_type_id() == 2) { return unserialize($value->get_value()); } } else { return null; } }
/** * @see EventListenerInterface::listen_events() * @param object $event_object * @return bool */ public static function listen_events($event_object) { global $transaction; if ($event_object instanceof ItemAddHolderEvent) { $type = $event_object->get_type(); if ($type == "sample") { $sample_id = $event_object->get_id(); $item_id = $event_object->get_item_id(); $gid = $event_object->get_gid(); $transaction_id = $transaction->begin(); if (self::create($sample_id, $item_id, $gid, null, null) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } else { if ($transaction_id != null) { $transaction->commit($transaction_id); } } } } if ($event_object instanceof ItemAddEvent) { $get_array = $event_object->get_get_array(); $post_array = $event_object->get_post_array(); $item_holder = $event_object->get_item_holder(); $item_holder_name = $event_object->get_item_holder_name(); if ($get_array['nav'] == "sample" and is_numeric($get_array['sample_id']) and !$get_array['parent'] and !$get_array['parent_key']) { $transaction_id = $transaction->begin(); if ($get_array['parent_sample'] == "1") { $parent = true; } else { $parent = false; } if ($item_holder == true and $item_holder_name) { $item_holder_class = Item::get_holder_handling_class_by_name($item_holder_name); $item_holder_instance = $item_holder_class::get_instance_by_item_id($event_object->get_item_id()); if (self::$sample_instance_array[$get_array['sample_id']]) { $sample = self::$sample_instance_array[$get_array['sample_id']]; } else { $sample = new Sample($get_array['sample_id']); self::$sample_instance_array[$get_array['sample_id']] = $sample; } $required_sub_item_array = $sample->list_required_sub_items($get_array['key']); if (is_array($required_sub_item_array) and count($required_sub_item_array) >= 1) { if ($required_sub_item_array[0] == "all") { $sub_item_array = $item_holder_instance->get_item_holder_items(null); if (is_array($sub_item_array) and count($sub_item_array)) { foreach ($sub_item_array as $sub_item_key => $sub_item_value) { if (self::create($get_array['sample_id'], $sub_item_value, null, null, null, $event_object->get_item_id()) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if (DataEntity::is_kind_of("file", $sub_item_value) or DataEntity::is_kind_of("value", $sub_item_value) or DataEntity::is_kind_of("parameter", $sub_item_value)) { $data_entity_id = DataEntity::get_entry_by_item_id($sub_item_value); $folder_id = $sample->get_item_holder_value("folder_id"); $parent_data_entity_id = Folder::get_data_entity_id_by_folder_id($folder_id); $child_data_entity = new DataEntity($data_entity_id); if ($child_data_entity->set_as_child_of($parent_data_entity_id, true, $parent_item_id) == false) { return false; } } } } } else { foreach ($required_sub_item_array as $key => $value) { $sub_item_array = $item_holder_instance->get_item_holder_items($value); if (is_array($sub_item_array) and count($sub_item_array)) { foreach ($sub_item_array as $sub_item_key => $sub_item_value) { if (self::create($get_array['sample_id'], $sub_item_value, null, null, null, $event_object->get_item_id()) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if (DataEntity::is_kind_of("file", $sub_item_value) or DataEntity::is_kind_of("value", $sub_item_value) or DataEntity::is_kind_of("parameter", $sub_item_value)) { $data_entity_id = DataEntity::get_entry_by_item_id($sub_item_value); $folder_id = $sample->get_item_holder_value("folder_id"); $parent_data_entity_id = Folder::get_data_entity_id_by_folder_id($folder_id); $child_data_entity = new DataEntity($data_entity_id); if ($child_data_entity->set_as_child_of($parent_data_entity_id, true, $parent_item_id) == false) { return false; } } } } } } } } if (self::create($get_array['sample_id'], $event_object->get_item_id(), $get_array['key'], $post_array['keywords'], $post_array['description'], null, $parent) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } else { if ($transaction_id != null) { $transaction->commit($transaction_id); } } } if (($get_array['parent'] == "sample" or $get_array['parent'] == "parentsample") and is_numeric($get_array['key']) and is_numeric($get_array['parent_key'])) { $transaction_id = $transaction->begin(); if (is_numeric($get_array['parent_id'])) { if ($get_array['parent'] == "parentsample") { $parent_sample = true; } else { $parent_sample = false; } if (self::create($get_array['parent_id'], $event_object->get_item_id(), $get_array['key'], null, null, null, false, $parent_sample) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } else { if ($transaction_id != null) { $transaction->commit($transaction_id); } } } elseif ($get_array['nav']) { $handling_class = Item::get_holder_handling_class_by_name($get_array['nav']); if (class_exists($handling_class)) { $item_holder = new $handling_class($get_array[$get_array['nav'] . '_id']); $parent_id_array = $item_holder->get_item_add_information($get_array['parent_key']); if (is_array($parent_id_array['fulfilled']) and count($parent_id_array['fulfilled']) >= 1) { foreach ($parent_id_array['fulfilled'] as $key => $value) { if (self::create($value['id'], $event_object->get_item_id(), $get_array['key']) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } if ($transaction_id != null) { $transaction->commit($transaction_id); } } } else { return false; } } } } if ($event_object instanceof ItemHolderAddEvent) { $id_array = $event_object->get_id_array(); $item_id = $event_object->get_item_id(); $parent_item_id = $event_object->get_parent_item_id(); $pos_id = $event_object->get_pos_id(); if (is_array($id_array) and count($id_array) >= 1) { if (is_array($id_array['sample']) and count($id_array['sample']) >= 1) { foreach ($id_array['sample'] as $key => $value) { $sample = new Sample($value['id']); if ($sample->is_sub_item_required($value['pos_id'], $pos_id) == true) { if (self::create($value['id'], $item_id, null, null, null, $parent_item_id, false) == false) { return false; } if (DataEntity::is_kind_of("file", $item_id) or DataEntity::is_kind_of("value", $item_id) or DataEntity::is_kind_of("parameter", $sub_item_value)) { $data_entity_id = DataEntity::get_entry_by_item_id($item_id); $folder_id = $sample->get_item_holder_value("folder_id"); $parent_data_entity_id = Folder::get_data_entity_id_by_folder_id($folder_id); $child_data_entity = new DataEntity($data_entity_id); if ($child_data_entity->set_as_child_of($parent_data_entity_id, true, $parent_item_id) == false) { return false; } } } } } } } return true; }