From 54e54ca0f730ee02b35a47835738ba00b4d2e2c9 Mon Sep 17 00:00:00 2001 From: Dimitris Efstathiou Date: Mon, 22 Apr 2024 09:50:57 +0300 Subject: [PATCH] pkp/pkp-lib#9674 Fix update clause --- classes/stageAssignment/StageAssignment.php | 13 ++++++------- .../grid/settings/roles/form/UserGroupForm.php | 9 +++++++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/classes/stageAssignment/StageAssignment.php b/classes/stageAssignment/StageAssignment.php index cb605a61a74..37bf08719e2 100644 --- a/classes/stageAssignment/StageAssignment.php +++ b/classes/stageAssignment/StageAssignment.php @@ -199,14 +199,13 @@ public function scopeWithRoleIds(Builder $query, ?array $roleIds): Builder } /** - * Update the model using business params. + * Scope a stageAssignment to only include stage assignments that are related to submissions having a specific contextId. */ - public function scopeUpdateWithParams($query, array $attributes) + public function scopeWithContextId(Builder $query, ?int $contextId): Builder { - $convertedValues = collect($attributes)->mapWithKeys(function ($value, $key) { - return [Str::snake($key) => $value]; - })->toArray(); - - return $query->update($convertedValues); + return $query->when($contextId !== null, function ($query) use ($contextId) { + return $query->join('submissions', 'stage_assignments.submission_id', '=', 'submissions.submission_id') + ->where('submissions.context_id', $contextId); + }); } } diff --git a/controllers/grid/settings/roles/form/UserGroupForm.php b/controllers/grid/settings/roles/form/UserGroupForm.php index 29eca69ed5c..481960ba941 100644 --- a/controllers/grid/settings/roles/form/UserGroupForm.php +++ b/controllers/grid/settings/roles/form/UserGroupForm.php @@ -223,8 +223,13 @@ public function execute(...$functionParams) } else { $permitMetadataEdit = $userGroup->getPermitMetadataEdit(); - StageAssignment::withUserGroupId($userGroupId) - ->updateWithParams(['canChangeMetadata' => $permitMetadataEdit]); + $stageAssignments = StageAssignment::withUserGroupId($userGroupId) + ->withContextId($this->getContextId()) + ->get(); + + foreach ($stageAssignments as $stageAssignment) { + $stageAssignment->update(['canChangeMetadata' => $permitMetadataEdit]); + } } $userGroup->setRecommendOnly($this->getData('recommendOnly') && in_array($userGroup->getRoleId(), $this->getRecommendOnlyRoles()));