From e580acd1b96990739c2821423b66e2b14755352c Mon Sep 17 00:00:00 2001 From: Ahmed Hamouda Date: Fri, 6 Feb 2026 12:56:00 +0100 Subject: [PATCH] resolve 'ilTestParticipantAccessFilter not found' error in ilSoapTestAdministration::getTestResults() --- .../class.ilSoapTestAdministration.php | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/components/ILIAS/soap/classes/class.ilSoapTestAdministration.php b/components/ILIAS/soap/classes/class.ilSoapTestAdministration.php index 41c54109efab..b5c92e1ab337 100755 --- a/components/ILIAS/soap/classes/class.ilSoapTestAdministration.php +++ b/components/ILIAS/soap/classes/class.ilSoapTestAdministration.php @@ -560,6 +560,7 @@ public function removeTestResults(string $sid, int $test_ref_id, array $a_user_i ); } + /** @var ilObjTest|null $tst */ if (!$tst = ilObjectFactory::getInstanceByRefId($test_ref_id, false)) { return $this->raiseError('No test found for id: ' . $test_ref_id, 'Client'); } @@ -575,10 +576,9 @@ public function removeTestResults(string $sid, int $test_ref_id, array $a_user_i $a_user_ids = $a_user_ids['item']; } + $accessFilter = $this->getAccessResultsUserFilter($test_ref_id); $part = new ilTestParticipantData($GLOBALS['DIC']['ilDB'], $GLOBALS['DIC']['lng']); - $part->setParticipantAccessFilter( - ilTestParticipantAccessFilter::getManageParticipantsUserFilter($test_ref_id) - ); + $part->setParticipantAccessFilter($accessFilter); $part->setUserIdsFilter((array) $a_user_ids); $part->load($tst->getTestId()); $tst->removeTestResults($part); @@ -606,8 +606,9 @@ public function getTestResults(string $sid, int $test_ref_id, bool $sum_only) global $DIC; $rbacsystem = $DIC['rbacsystem']; - $tree = $DIC['tree']; - $ilLog = $DIC['ilLog']; + $il_user = $DIC['ilUser']; + $il_lng = $DIC['lng']; + $il_db = $DIC['ilDB']; if (ilObject::_isInTrash($test_ref_id)) { return $this->raiseError( @@ -651,8 +652,13 @@ public function getTestResults(string $sid, int $test_ref_id, bool $sum_only) $test_obj = new ilObjTest($obj_id, false); $participants = $test_obj->getTestParticipants(); - $accessFilter = ilTestParticipantAccessFilter::getAccessResultsUserFilter($test_ref_id); - $participantList = new ilTestParticipantList($test_obj); + $accessFilter = $this->getAccessResultsUserFilter($test_ref_id); + $participantList = new ilTestParticipantList( + $test_obj, + $il_user, + $il_lng, + $il_db, + ); $participantList->initializeFromDbRows($participants); $participantList = $participantList->getAccessFilteredList($accessFilter); $participantList = $participantList->getScoredParticipantList(); @@ -730,4 +736,15 @@ protected function getTestAccess(int $refId): ilTestAccess $testId = ilObjTestAccess::_getTestIDFromObjectID(ilObject::_lookupObjectId($refId)); return new ilTestAccess($refId, $testId); } + + private function getAccessResultsUserFilter(int $ref_id): \Closure + { + global $DIC; + + $ilAccess = $DIC['ilAccess']; + + $factory = new ilTestParticipantAccessFilterFactory($ilAccess); + + return $factory->getAccessResultsUserFilter($ref_id); + } }