/** * @see ProjectInterface::create() * @param integer $organisation_unit_id * @param integer $parent_project_id * @param string $name * @param integer $owner_id * @param integer $template_id * @param string $description * @return integer * @throws ProjectCreateException * @throws ProjectCreateProjectExistsException * @throws ProjectCreateStatusException * @throws ProjectCreateFolderException * @throws ProjectCreateStatusFolderException * @throws ProjectCreateStatusSubFolderException * @throws ProjectCreateSupplementaryFolderException * @throws ProjectCreateDescriptionException * @throws ProjectCreateMasterDataException * @throws ProjectCreatePermissionUserException * @throws ProjectCreatePermissionLeaderException * @throws ProjectCreatePermissionGroupException * @throws ProjectCreatePermissionOrganisationUnitException * @throws ProjectCreatePermissionQualityManagerException */ public function create($organisation_unit_id, $parent_project_id, $name, $owner_id, $template_id, $description) { global $transaction; if ($organisation_unit_id xor $parent_project_id) { if ($name and $owner_id and $template_id and $description and $this->project) { if ($organisation_unit_id) { $organisation_unit = new OrganisationUnit($organisation_unit_id); if ($organisation_unit->is_permission($owner_id)) { if (self::exist_project_name($organisation_unit_id, null, $name) == true) { throw new ProjectCreateProjectExistsException("Project already exists in this Organisation Unit"); } } else { throw new ProjectCreateException("Cannot access on this Organisation Unit"); } } else { if (self::exist_project_name(null, $parent_project_id, $name) == true) { throw new ProjectCreateProjectExistsException("Project already exists in this Project"); } } $transaction_id = $transaction->begin(); $user = new User($owner_id); $project_user = new ProjectUserData($owner_id); $project_quota = $project_user->get_quota(); // Create Project if (($project_id = $this->project->create($organisation_unit_id, $parent_project_id, $name, $owner_id, $template_id, $project_quota)) == null) { if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateException("Could not create Project in DB"); } else { self::__construct($project_id); $project_template = new ProjectTemplate($template_id); $project_all_status_array = $project_template->get_all_status(); $project_has_project_status = new ProjectHasProjectStatus_Access(null); if ($project_has_project_status->create($project_id, $project_all_status_array[0]) != true) { if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateStatusException("Could not create status"); } if ($organisation_unit_id) { $base_folder_id = constant("PROJECT_FOLDER_ID"); } else { $base_folder_id = ProjectFolder::get_folder_by_project_id($parent_project_id); } $base_folder = Folder::get_instance($base_folder_id); $path = new Path($base_folder->get_path()); $path->add_element($project_id); $project_folder = new ProjectFolder(null); if (($folder_id = $project_folder->create($project_id, $base_folder_id)) == null) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateFolderException("Could not create main folder"); } // Create Supplementary Folder $supplementary_path = new Path($path->get_path_string()); $supplementary_path->add_element("supplementary"); $supplementary_folder = Folder::get_instance(null); if ($supplementary_folder->create("supplementary", $folder_id, $supplementary_path->get_path_string(), $owner_id, null) == null) { $project_folder->delete(); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateSupplementaryFolderException("Could not create supplementary folder"); } // Status Folder $folder_array = array(); foreach ($project_all_status_array as $key => $value) { $project_status_array = $project_template->get_status_requirements($value); if (is_array($project_status_array) and count($project_status_array) >= 1) { foreach ($project_status_array as $status_key => $status_value) { if (!in_array($value, $folder_array)) { array_push($folder_array, $value); } } } } foreach ($folder_array as $key => $value) { $projet_status_folder = new ProjectStatusFolder(null); if (($status_folder_id = $projet_status_folder->create($project_id, $value)) == null) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateStatusFolderException("Could not create status folder"); } $project_status = new ProjectStatus($value); $project_status_requirements = $project_template->get_status_requirements($value); // Create Subfolder $sub_folder_array = array(); foreach ($project_status_requirements as $sub_key => $sub_value) { if (($sub_value['type'] == "file" or $sub_value['type'] == "value") and $sub_value['folder']) { if (array_search(trim($sub_value['folder']), $sub_folder_array) === false) { array_push($sub_folder_array, trim($sub_value['folder'])); } } } if (is_array($sub_folder_array) and count($sub_folder_array) >= 1) { foreach ($sub_folder_array as $sub_key => $sub_value) { $folder_name = strtolower(trim($sub_value)); $folder_name = str_replace(" ", "-", $folder_name); $folder_path = new Path($projet_status_folder->get_path()); $folder_path->add_element($folder_name); $sub_folder = Folder::get_instance(null); if ($sub_folder->create($sub_value, $status_folder_id, $folder_path->get_path_string(), $user->get_user_id(), null) == null) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateStatusSubFolderException("Could not create status sub folder"); } } } } // Create Project Description $value = Value::get_instance(null); if ($value->create($folder_id, $owner_id, 2, $description) == null) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateDescriptionException("Could not create description value"); } $project_item = new ProjectItem($project_id); $project_item->set_gid(1); $project_item->set_status_id(1); $project_item->set_item_id($value->get_item_id()); if ($project_item->link_item() == false) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateDescriptionException("Could not create description item link"); } if ($project_item->set_required(true) == false) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateDescriptionException("Could not create description item role"); } // Create Project Master Data if ($this->template_data_array and is_numeric($this->template_data_type_id)) { $value = Value::get_instance(null); if ($value->create($folder_id, $owner_id, $this->template_data_type_id, $this->template_data_array) == null) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateMasterDataException("Could not create master-data value"); } $project_item = new ProjectItem($project_id); $project_item->set_gid(1); $project_item->set_status_id(1); $project_item->set_item_id($value->get_item_id()); if ($project_item->link_item() == false) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateMasterDataException("Could not create master-data item link"); } if ($project_item->set_required(true) == false) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreateMasterDataException("Could not create master-data item role"); } } // Permissions if ($organisation_unit_id) { $organisation_unit = new OrganisationUnit($organisation_unit_id); try { $project_permission = new ProjectPermissionUser(null); $project_permission->create($owner_id, $project_id, (int) Registry::get_value("project_user_default_permission"), null, 1); } catch (ProjectPermissionUserException $e) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreatePermissionUserException("Could not create user/owner permission"); } $leader_array = $organisation_unit->list_leaders(); if (is_array($leader_array) and count($leader_array) >= 1) { foreach ($leader_array as $key => $value) { try { $project_permission = new ProjectPermissionUser(null); $project_permission->create($value, $project_id, (int) Registry::get_value("project_leader_default_permission"), null, 2); } catch (ProjectPermissionUserException $e) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreatePermissionLeaderException("Could not create leader permission"); } } } try { $project_permission = new ProjectPermissionOrganisationUnit(null); $project_permission->create($organisation_unit_id, $project_id, (int) Registry::get_value("project_organisation_unit_default_permission"), null, 3); } catch (ProjectPermissionOrganisationUnitException $e) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreatePermissionOrganisationUnitException("Could not create Organisation Unit permission"); } $quality_manager_array = $organisation_unit->list_quality_managers(); if (is_array($quality_manager_array) and count($quality_manager_array) >= 1) { foreach ($quality_manager_array as $key => $value) { try { $project_permission = new ProjectPermissionUser(null); $project_permission->create($value, $project_id, (int) Registry::get_value("project_quality_manager_default_permission"), null, 5); } catch (ProjectPermissionUserException $e) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreatePermissionQualityManagerException("Could not create quality-manager permission"); } } } $group_array = $organisation_unit->list_groups(); if (is_array($group_array) and count($group_array) >= 1) { foreach ($group_array as $key => $value) { try { $project_permission = new ProjectPermissionGroup(null); $project_permission->create($value, $project_id, (int) Registry::get_value("project_group_default_permission"), null, 4); } catch (ProjectPermissionGroupException $e) { $project_folder->delete(true, true); if ($transaction_id != null) { $transaction->rollback($transaction_id, false); } throw new ProjectCreatePermissionGroupException("Could not create group permissions"); } } } } self::__construct($project_id); if ($transaction_id != null) { $transaction->commit($transaction_id); } return $project_id; } } else { throw new ProjectCreateException("Needed values are missing"); } } else { throw new ProjectCreateException("Project target is ambiguous"); } }
/** * @throws ProjectIDMissingException * @throws ProjectSecurityAccessDeniedException */ public static function permission_add_organisation_unit() { global $project_security, $user; if ($_GET['project_id']) { $project_id = $_GET['project_id']; $project = new Project($project_id); if ($user->get_user_id() == $project->get_owner_id() or $project_security->is_access(2, false) == true or $project_security->is_access(4, false) == true or $project_security->is_access(7, false) == true) { if ($_GET['nextpage'] == 1) { if (is_numeric($_POST['ou'])) { $page_1_passed = true; } else { $page_1_passed = false; $error = "You must select an organisation unit."; } } elseif ($_GET['nextpage'] > 1) { $page_1_passed = true; } else { $page_1_passed = false; $error = ""; } if ($page_1_passed == false) { $template = new HTMLTemplate("project/admin/permission_add_ou.html"); $paramquery = $_GET; $paramquery['nextpage'] = "1"; $params = http_build_query($paramquery, '', '&'); $template->set_var("params", $params); $template->set_var("error", $error); $organisation_unit_array = OrganisationUnit::list_entries(); $result = array(); $counter = 0; foreach ($organisation_unit_array as $key => $value) { $organisation_unit = new OrganisationUnit($value); $result[$counter]['value'] = $value; $result[$counter]['content'] = $organisation_unit->get_name(); $counter++; } $template->set_var("option", $result); $template->output(); } else { if ($_GET['nextpage'] == 2) { if ($_POST['re'] == "1" or $_POST['sr'] == "1" or $_POST['wr'] == "1" or $_POST['sw'] == "1" or $_POST['ra'] == "1" or $_POST['de'] == "1" or $_POST['sp'] == "1") { $page_2_passed = true; } else { $page_2_passed = false; $error = "You must select min. one permission."; } } elseif ($_GET['nextpage'] > 2) { $page_2_passed = true; } else { $page_2_passed = false; $error = ""; } if ($page_2_passed == false) { $template = new HTMLTemplate("project/admin/permission_add_edit.html"); $template->set_var("add_edit", "Add"); $new_ou = new OrganisationUnit($_POST['ou']); $paramquery = $_GET; $paramquery['nextpage'] = "2"; $params = http_build_query($paramquery, '', '&'); $template->set_var("params", $params); $template->set_var("name", $new_ou->get_name()); $template->set_var("type", "user"); $template->set_var("error", $error); if ($project_security->is_access(2, false) or $project->get_owner_id() == $user->get_user_id()) { $template->set_var("disabled_re", ""); } else { $template->set_var("disabled_re", "disabled"); } if ($project_security->is_access(7, false) or $project->get_owner_id() == $user->get_user_id()) { $template->set_var("disabled_sr", ""); } else { $template->set_var("disabled_sr", "disabled"); } if ($project_security->is_access(4, false) or $project->get_owner_id() == $user->get_user_id()) { $template->set_var("disabled_wr", ""); } else { $template->set_var("disabled_wr", "disabled"); } if ($project_security->is_access(7, false) or $project->get_owner_id() == $user->get_user_id()) { $template->set_var("disabled_sw", ""); } else { $template->set_var("disabled_sw", "disabled"); } if ($project_security->is_access(7, false)) { $template->set_var("disabled_ra", ""); $template->set_var("disabled_de", ""); $template->set_var("disabled_sp", ""); } else { $template->set_var("disabled_ra", "disabled"); $template->set_var("disabled_de", "disabled"); $template->set_var("disabled_sp", "disabled"); } $template->set_var("checked_re", ""); $template->set_var("checked_sr", ""); $template->set_var("checked_wr", ""); $template->set_var("checked_sw", ""); $template->set_var("checked_ra", ""); $template->set_var("checked_de", ""); $template->set_var("checked_sp", ""); $template->set_var("user", ""); $template->set_var("group", ""); $template->set_var("ou", $_POST['ou']); $template->output(); } else { $paramquery = $_GET; unset($paramquery['nextpage']); unset($paramquery['id']); $paramquery['run'] = "admin_permission"; $params = http_build_query($paramquery); $project_permission = new ProjectPermissionOrganisationUnit(null); $new_permssion = 0; if ($_POST['re'] == "1") { $new_permission = $new_permission + 1; } if ($_POST['sr'] == "1") { $new_permission = $new_permission + 2; } if ($_POST['wr'] == "1") { $new_permission = $new_permission + 4; } if ($_POST['sw'] == "1") { $new_permission = $new_permission + 8; } if ($_POST['ra'] == "1") { $new_permission = $new_permission + 16; } if ($_POST['de'] == "1") { $new_permission = $new_permission + 32; } if ($_POST['sp'] == "1") { $new_permission = $new_permission + 64; } if ($project_permission->create($_POST['ou'], $project_id, $new_permission, $user->get_user_id(), 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 ProjectSecurityAccessDeniedException(); } } else { throw new ProjectIDMissingException(); } }
/** * @see ProjectSecurityInterface::change_organisation_unit_permission() * @param integer $organisation_unit_id * @return bool * @throws ProjectSecurityChangeException */ public function change_organisation_unit_permission($organisation_unit_id) { global $transaction; if (is_numeric($organisation_unit_id)) { $transaction_id = $transaction->begin(); $organisation_unit = new OrganisationUnit($organisation_unit_id); $project_permission_ou_group_array = ProjectPermission::list_entries_by_project_id_and_intention($this->project_id, 4); if (is_array($project_permission_ou_group_array) and count($project_permission_ou_group_array) >= 1) { foreach ($project_permission_ou_group_array as $key => $value) { try { $project_permission = ProjectPermission::get_instance($value); $project_permission->delete() == false; } catch (ProjectPermissionException $e) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } throw new ProjectSecurityChangeException(); } } } $project_permission_array = ProjectPermission::list_entries_by_project_id_and_intention($this->project_id, 3); if (count($project_permission_array) > 0 and is_numeric($project_permission_array[0])) { $project_permission = ProjectPermission::get_instance($project_permission_array[0]); if (($return_value = $project_permission->set_organisation_unit_id($organisation_unit_id)) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } throw new ProjectSecurityChangeException(); } } else { try { $project_permission = new ProjectPermissionOrganisationUnit(null); $return_value = $project_permission->create($organisation_unit_id, $this->project_id, (int) Registry::get_value("project_organisation_unit_default_permission"), null, 3); } catch (ProjectPermissionOrganisationUnitException $e) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } throw new ProjectSecurityChangeException(); } } $group_array = $organisation_unit->list_groups(); if (is_array($group_array) and count($group_array) >= 1) { foreach ($group_array as $key => $value) { try { $project_permission = new ProjectPermissionGroup(null); $project_permission->create($value, $this->project_id, (int) Registry::get_value("project_group_default_permission"), null, 4); } catch (ProjectPermissionGroupException $e) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } throw new ProjectSecurityChangeException(); } } } if ($transaction_id != null) { $transaction->commit($transaction_id); } return $return_value; } else { throw new ProjectSecurityChangeException("Missing Information"); } }