From 02355d304d2b5c2342229a096b951906794b4dac Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Mon, 25 Nov 2024 15:22:22 -0800 Subject: [PATCH] Add process name filter --- ProcessMaker/Filters/BaseFilter.php | 20 +++++++++++++++++++ .../Traits/TaskControllerIndexMethods.php | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ProcessMaker/Filters/BaseFilter.php b/ProcessMaker/Filters/BaseFilter.php index 966ba9b76b..66b245d06a 100644 --- a/ProcessMaker/Filters/BaseFilter.php +++ b/ProcessMaker/Filters/BaseFilter.php @@ -27,6 +27,8 @@ abstract class BaseFilter public const TYPE_PROCESS = 'Process'; + public const TYPE_PROCESS_NAME = 'ProcessName'; + public const TYPE_RELATIONSHIP = 'Relationship'; public string|null $subjectValue; @@ -96,6 +98,8 @@ private function apply($query): void $this->valueAliasAdapter($valueAliasMethod, $query); } elseif ($this->subjectType === self::TYPE_PROCESS) { $this->filterByProcessId($query); + } elseif ($this->subjectType === self::TYPE_PROCESS_NAME) { + $this->filterByProcessName($query); } elseif ($this->subjectType === self::TYPE_RELATIONSHIP) { $this->filterByRelationship($query); } elseif ($this->isJsonData() && $query->getModel() instanceof ProcessRequestToken) { @@ -224,6 +228,10 @@ private function subject() return $this->relationshipSubjectTypeParts()[1]; } + if ($this->subjectType === self::TYPE_PROCESS_NAME) { + return 'name'; + } + return $this->subjectValue; } @@ -298,6 +306,18 @@ private function filterByProcessId(Builder $query): void } } + private function filterByProcessName(Builder $query): void + { + if ($query->getModel() instanceof ProcessRequestToken) { + $query->whereIn('process_request_id', function ($query) { + $query->select('id')->from('process_requests'); + $this->applyQueryBuilderMethod($query); + }); + } else { + $query->whereIn('name', (array) $this->value()); + } + } + private function filterByRelationship(Builder $query): void { $relationshipName = $this->relationshipSubjectTypeParts()[0]; diff --git a/ProcessMaker/Traits/TaskControllerIndexMethods.php b/ProcessMaker/Traits/TaskControllerIndexMethods.php index 8fa0d17d24..078843c950 100644 --- a/ProcessMaker/Traits/TaskControllerIndexMethods.php +++ b/ProcessMaker/Traits/TaskControllerIndexMethods.php @@ -320,7 +320,7 @@ private function applyForCurrentUser($query, $user) ->orWhereIn('id', $user->availableSelfServiceTaskIds()); }); } - + public function applyProcessManager($query, $user) { $ids = Process::select(['id']) @@ -329,7 +329,7 @@ public function applyProcessManager($query, $user) ->get() ->toArray(); - $query->orWhere(function ($query) use ($ids) { + $query->where(function ($query) use ($ids) { $query->whereIn('process_request_tokens.process_id', array_column($ids, 'id')) ->where('process_request_tokens.status', 'ACTIVE'); });