diff --git a/ProcessMaker/Traits/SearchAutocompleteTrait.php b/ProcessMaker/Traits/SearchAutocompleteTrait.php index f1aba417f5..5b4cad62c2 100644 --- a/ProcessMaker/Traits/SearchAutocompleteTrait.php +++ b/ProcessMaker/Traits/SearchAutocompleteTrait.php @@ -190,21 +190,38 @@ private function searchProjects($query) $projectModalClass = 'ProcessMaker\Package\Projects\Models\Project'; $project = new $projectModalClass; - if (empty($query)) { - $results = $project->get(); - } else { - $results = $project->pmql('title = "' . $query . '"', function ($expression) { - return function ($query) use ($expression) { - $query->where($expression->field->field(), 'LIKE', '%' . $expression->value->value() . '%'); - }; - })->get(); - } + $projectMemberModalClass = 'ProcessMaker\Package\Projects\Models\ProjectMember'; + $projectMember = new $projectMemberModalClass; + $user = Auth::user(); + $ids = $projectMember->getProjectWhereTheUserIsMember($user); + + $results = empty($query) + ? $this->searchProjectsNoQuery($project, $user, $ids) + : $this->searchProjectsWithQuery($project, $query, $user, $ids); return $results->map(function ($request) { return $request->only(['id', 'title']); }); } + private function searchProjectsNoQuery($project, $user, $ids) + { + return $project->where(function ($query) use ($user, $ids) { + $query->owner($user->id)->orWhereIn('id', $ids); + })->get(); + } + + private function searchProjectsWithQuery($project, $query, $user, $ids) + { + return $project->pmql('title = "' . $query . '"', function ($expression) use ($user, $ids) { + return function ($query) use ($expression, $user, $ids) { + $query->owner($user->id) + ->orWhereIn('id', $ids) + ->where($expression->field->field(), 'LIKE', '%' . $expression->value->value() . '%'); + }; + })->get(); + } + private function searchProjectMembers($query) { return (object) [ diff --git a/resources/js/components/shared/PmqlInputFilters.vue b/resources/js/components/shared/PmqlInputFilters.vue index 7f4afb711d..836fe931db 100644 --- a/resources/js/components/shared/PmqlInputFilters.vue +++ b/resources/js/components/shared/PmqlInputFilters.vue @@ -695,10 +695,9 @@ export default { this.allLoading(true); const { data } = await ProcessMaker.apiClient.get("/projects/search?type=project_all"); - - if (data.projects) { - this.projectOptions = data.projects; - } + + this.projectOptions = data.projects ? data.projects : []; + if (data.members?.users) { const usersWithMappedNames = data.members.users .filter(user => !!user)