From 1466a9526a8c543cdd3de5b8610c8d3c49aa96a7 Mon Sep 17 00:00:00 2001 From: Stephen Vickers Date: Thu, 12 May 2022 11:50:57 +0100 Subject: [PATCH] Correct handling of Moodle groups belonging to more than one grouping --- src/ApiHook/moodle/MoodleApi.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/ApiHook/moodle/MoodleApi.php b/src/ApiHook/moodle/MoodleApi.php index c7461e8..5911c02 100644 --- a/src/ApiHook/moodle/MoodleApi.php +++ b/src/ApiHook/moodle/MoodleApi.php @@ -279,16 +279,18 @@ private function setGroups($users) // Check that user is not a member of another group in the same grouping if (in_array($setId, $sets)) { // Remove grouping and groups - foreach ($users as $user2) { - foreach ($user2->groups as $groupId) { - if ($this->sourceObject->groups[$groupId]['set'] === $setId) { - unset($user2->groups[$groupId]); + foreach ($this->sourceObject->groupSets[$setId]['groups'] as $groupId) { + if (!is_array($this->sourceObject->groups[$groupId]['set']) && ($this->sourceObject->groups[$groupId]['set'] === $setId)) { + unset($this->sourceObject->groups[$groupId]['set']); + } else if (is_array($this->sourceObject->groups[$groupId]['set']) && in_array($setId, + $this->sourceObject->groups[$groupId]['set'])) { + $pos = array_search($setId, $this->sourceObject->groups[$groupId]['set']); + unset($this->sourceObject->groups[$groupId]['set'][$pos]); + if (empty($this->sourceObject->groups[$groupId]['set'])) { + unset($this->sourceObject->groups[$groupId]['set']); } } } - foreach ($this->sourceObject->groupSets[$setId]['groups'] as $groupId) { - unset($this->sourceObject->groups[$groupId]); - } unset($this->sourceObject->groupSets[$setId]); } elseif (array_key_exists($group, $this->sourceObject->groups)) { $this->sourceObject->groupSets[$setId]['num_members']++;