diff --git a/classes/lti/OpencastLTI.php b/classes/lti/OpencastLTI.php index 4d914a9d97667c54c22ca88bb0005542617b9fcd..fdf69f3048af9e6eb7d9c6a43f6f1dc86013d7ce 100644 --- a/classes/lti/OpencastLTI.php +++ b/classes/lti/OpencastLTI.php @@ -352,7 +352,17 @@ class OpencastLTI // check, if the calculated and actual acls differ and update if so if ($oc_acl <> $acl->toArray()) { - $client->setACL($target_id, $acl); + // To only touch ACLs set by the Stud.IP plugin, + // copy over existing ACLs which aren't handled by Stud.IP. + foreach ($oc_acl as $oc_acl_entry) { + if (!preg_match('~(?:[0-9a-f]{32}_(?:Instructor|Learner)|ROLE_ANONYMOUS|ROLE_ADMIN)~', $oc_acl_entry['role'])) { + $e = new \AccessControlEntity($oc_acl_entry['role'], $oc_acl_entry['action'], $oc_acl_entry['allow']); + $acl->add_ace($e); + } + } + if ($oc_acl <> $acl->toArray()) { + $client->setACL($target_id, $acl); + } } }