diff --git a/app/Domain/Projects/Hxcontrollers/ProjectCardProgress.php b/app/Domain/Projects/Hxcontrollers/ProjectCardProgress.php index a7596f28a9..2c441d08d8 100644 --- a/app/Domain/Projects/Hxcontrollers/ProjectCardProgress.php +++ b/app/Domain/Projects/Hxcontrollers/ProjectCardProgress.php @@ -82,7 +82,7 @@ public function getProgress() { $project['progress'] = $this->projectsService->getProjectProgress($project['id']); $projectComment = $this->commentsService->getComments("project", $project['id']); - $project['team'] = $this->projectsService->getUsersAssignedToProject($project['id']); + $project['team'] = $this->projectsService->getUsersAssignedToProject($project['id'], true); if (is_array($projectComment) && count($projectComment) > 0) { $project['lastUpdate'] = $projectComment[0]; diff --git a/app/Domain/Projects/Repositories/Projects.php b/app/Domain/Projects/Repositories/Projects.php index 79dcdbdc51..6e4fd31909 100644 --- a/app/Domain/Projects/Repositories/Projects.php +++ b/app/Domain/Projects/Repositories/Projects.php @@ -132,13 +132,15 @@ public function getAll(bool $showClosedProjects = false): array } /** - * getUsersAssignedToProject - get one project + * Gets all users that have access to a project. + * For direct access only set the teamOnly flag to true * * @access public * @param $id * @return array|bool + * */ - public function getUsersAssignedToProject($id): array|bool + public function getUsersAssignedToProject($id, $teamOnly): array|bool { $query = "SELECT @@ -156,26 +158,35 @@ public function getUsersAssignedToProject($id): array|bool LEFT JOIN zp_projects ON zp_relationuserproject.projectId = zp_projects.id WHERE zp_relationuserproject.projectId = :projectId - AND !(zp_user.source <=> 'api') AND zp_user.id IS NOT NULL - AND + AND !(zp_user.source <=> 'api') AND zp_user.id IS NOT NULL"; + + if($teamOnly === false) { + + $query .= " AND zp_projects.id IN (SELECT projectId FROM zp_relationuserproject WHERE zp_relationuserproject.userId = :userId) OR zp_projects.psettings = 'all' OR (zp_projects.psettings = 'client' AND zp_projects.clientId = :clientId) - OR (:requesterRole = 'admin' OR :requesterRole = 'manager') - AND zp_user.id IS NOT NULL + OR (:requesterRole = 'admin' OR :requesterRole = 'manager')"; + } + + $query .= " AND zp_user.id IS NOT NULL GROUP BY zp_user.id ORDER BY zp_user.lastname"; $stmn = $this->db->database->prepare($query); $stmn->bindValue(':projectId', $id, PDO::PARAM_INT); - $stmn->bindValue(':userId', session("userdata.id") ?? '-1', PDO::PARAM_INT); - $stmn->bindValue(':clientId', session("userdata.clientId") ?? '-1', PDO::PARAM_INT); + if($teamOnly === false) { + + $stmn->bindValue(':userId', session("userdata.id") ?? '-1', PDO::PARAM_INT); + $stmn->bindValue(':clientId', session("userdata.clientId") ?? '-1', PDO::PARAM_INT); + + if (session()->exists("userdata")) { + $stmn->bindValue(':requesterRole', session("userdata.role"), PDO::PARAM_INT); + } else { + $stmn->bindValue(':requesterRole', -1, PDO::PARAM_INT); + } - if (session()->exists("userdata")) { - $stmn->bindValue(':requesterRole', session("userdata.role"), PDO::PARAM_INT); - } else { - $stmn->bindValue(':requesterRole', -1, PDO::PARAM_INT); } $stmn->execute(); diff --git a/app/Domain/Projects/Services/Projects.php b/app/Domain/Projects/Services/Projects.php index 46fb9f6c08..f633434143 100644 --- a/app/Domain/Projects/Services/Projects.php +++ b/app/Domain/Projects/Services/Projects.php @@ -882,16 +882,17 @@ public function resetCurrentProject(): void /** - * Gets all the users assigned to a specific project. + * Gets all users that have access to a project. + * For direct access only set the teamOnly flag to true * * @param int $projectId The ID of the project. * @return array An array of users assigned to the project. * * @api */ - public function getUsersAssignedToProject($projectId): array + public function getUsersAssignedToProject($projectId, $teamOnly = false): array { - $users = $this->projectRepository->getUsersAssignedToProject($projectId); + $users = $this->projectRepository->getUsersAssignedToProject($projectId, $teamOnly); foreach ($users as $key => $user) { @@ -1455,14 +1456,14 @@ public function getProjectSetupChecklist($projectId): array $progressSteps["define"]["tasks"]["description"]["status"] = "done"; } - /* - if ($project['numUsers'] > 1) { - $progressSteps["define"]["tasks"]["defineTeam"]["status"] = "done"; - } + /* + if ($project['numUsers'] > 1) { + $progressSteps["define"]["tasks"]["defineTeam"]["status"] = "done"; + } - if ($project['numDefinitionCanvas'] >= 1) { - $progressSteps["define"]["tasks"]["createBlueprint"]["status"] = "done"; - }*/ + if ($project['numDefinitionCanvas'] >= 1) { + $progressSteps["define"]["tasks"]["createBlueprint"]["status"] = "done"; + }*/ $goals = app()->make(GoalcanvaRepository::class); $allCanvas = $goals->getAllCanvas($projectId); @@ -1475,14 +1476,14 @@ public function getProjectSetupChecklist($projectId): array $progressSteps["define"]["goals"]["setGoals"]["status"] = "done"; } - /* - if ($project['numberMilestones'] >= 1) { - $progressSteps["timeline"]["tasks"]["createMilestones"]["status"] = "done"; - } + /* + if ($project['numberMilestones'] >= 1) { + $progressSteps["timeline"]["tasks"]["createMilestones"]["status"] = "done"; + } - if ($project['numberOfTickets'] >= 1) { - $progressSteps["implementation"]["tasks"]["createTasks"]["status"] = "done"; - }*/ + if ($project['numberOfTickets'] >= 1) { + $progressSteps["implementation"]["tasks"]["createTasks"]["status"] = "done"; + }*/ $percentDone = $this->getProjectProgress($projectId); if ($percentDone['percent'] >= 80) {