コード例 #1
0
ファイル: project_admin.io.php プロジェクト: suxinde2009/www
 /**
  * @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();
     }
 }
コード例 #2
0
 /**
  * @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");
     }
 }
コード例 #3
0
ファイル: project.class.php プロジェクト: suxinde2009/www
 /**
  * @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");
     }
 }
コード例 #4
0
 /**
  * @return object
  */
 public static function get_instance($permission_id)
 {
     if (ProjectPermissionUser::is_case($permission_id) == true) {
         return new ProjectPermissionUser($permission_id);
     } elseif (ProjectPermissionGroup::is_case($permission_id) == true) {
         return new ProjectPermissionGroup($permission_id);
     } elseif (ProjectPermissionOrganisationUnit::is_case($permission_id) == true) {
         return new ProjectPermissionOrganisationUnit($permission_id);
     }
 }