/** * @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"); } }