/** * @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; } }
/** * @param string $role * @throws ItemParentIDMissingException * @throws ItemPositionIDMissingException * @throws BaseModuleDialogMethodNotFoundException * @throws BaseModuleDialogClassNotFoundException * @throws BaseModuleDialogFileNotFoundException * @throws BaseModuleDialogNotFoundException * @throws SampleSecurityAccessDeniedException * @throws BaseModuleDialogMissingException */ public static function item_add_edit_handler($role = "add") { if ($_GET['dialog']) { if (!is_numeric($_GET['parent_id'])) { throw new ItemParentIDMissingException(); } if (!is_numeric($_GET['key'])) { throw new ItemPositionIDMissingException(); } $sample = new Sample($_GET['parent_id']); $sample_security = new SampleSecurity($_GET['parent_id']); if ($sample_security->is_access(2, false) == true) { if ($role == "add") { $module_dialog = ModuleDialog::get_by_type_and_internal_name("item_add", $_GET['dialog']); } elseif ($role == "edit") { $module_dialog = ModuleDialog::get_by_type_and_internal_name("item_edit", $_GET['dialog']); } if (is_array($module_dialog) and $module_dialog['class_path']) { if (file_exists($module_dialog['class_path'])) { require_once $module_dialog['class_path']; if (class_exists($module_dialog['class'])) { if (method_exists($module_dialog['class'], $module_dialog['method'])) { $sample_item = new SampleItem($_GET['parent_id']); $sample_item->set_gid($_GET['key']); $current_requirements = $sample->get_requirements(); if ($role == "add") { $module_dialog['class']::$module_dialog['method']($current_requirements[$_GET['key']]['type_id'], $current_requirements[$_GET['key']]['category_id'], "Sample", $_GET['parent_id'], $_GET['key']); } elseif ($role == "edit") { $module_dialog['class']::$module_dialog['method']($current_requirements[$_GET['key']]['fulfilled'][0]['item_id']); } } else { throw new BaseModuleDialogMethodNotFoundException(); } } else { throw new BaseModuleDialogClassNotFoundException(); } } else { throw new BaseModuleDialogFileNotFoundException(); } } else { throw new BaseModuleDialogNotFoundException(); } } else { throw new SampleSecurityAccessDeniedException(); } } else { throw new BaseModuleDialogMissingException(); } }
/** * @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(); } }