/** * @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(); } }
/** * @throws SampleIDMissingException * @throws SampleSecurityAccessDeniedException */ public static function user_permission_add() { global $user; if ($_GET['sample_id']) { $sample_id = $_GET['sample_id']; $sample = new Sample($sample_id); $sample_security = new SampleSecurity($sample_id); if ($sample->get_owner_id() == $user->get_user_id() or $user->is_admin() == true) { if ($_GET['nextpage'] == 1) { if (is_numeric($_POST['user'])) { if ($sample_security->is_user($_POST['user']) == true) { $page_1_passed = false; $error = "This user was already added."; } else { $page_1_passed = true; } } else { $page_1_passed = false; $error = "You must select an user."; } } elseif ($_GET['nextpage'] > 1) { $page_1_passed = true; } else { $page_1_passed = false; $error = ""; } if ($page_1_passed == false) { $template = new HTMLTemplate("sample/int_admin/user_permission_add_page_1.html"); $paramquery = $_GET; $paramquery['nextpage'] = "1"; $params = http_build_query($paramquery, '', '&'); $template->set_var("params", $params); $template->set_var("error", $error); $user_array = User::list_entries(); $result = array(); $counter = 0; foreach ($user_array as $key => $value) { $user = new User($value); $result[$counter]['value'] = $value; $result[$counter]['content'] = $user->get_username() . " (" . $user->get_full_name(false) . ")"; $counter++; } $template->set_var("option", $result); $template->output(); } else { if ($_GET['nextpage'] == 2) { $page_2_passed = true; } else { $page_2_passed = false; } if ($page_2_passed == false) { $template = new HTMLTemplate("sample/int_admin/user_permission_add_page_2.html"); $paramquery = $_GET; $paramquery['nextpage'] = "2"; $params = http_build_query($paramquery, '', '&'); $template->set_var("params", $params); $template->set_var("user", $_POST['user']); $template->output(); } else { $paramquery = $_GET; unset($paramquery['nextpage']); unset($paramquery['sure']); $paramquery['nav'] = "sample"; $paramquery['run'] = "admin_permission_user"; $params = http_build_query($paramquery); if ($_POST['read'] == "1") { $read = true; } else { $read = false; } if ($_POST['write'] == "1") { $write = true; } else { $write = false; } if ($sample_security->create_user($_POST['user'], $read, $write) != null) { Common_IO::step_proceed($params, "Add Permission", "Operation Successful", null); } else { Common_IO::step_proceed($params, "Add Permission", "Operation Failed", null); } } } } else { throw new SampleSecurityAccessDeniedException(); } } else { throw new SampleIDMissingException(); } }