From 9fb781e06692bd5eb18c22b5c952b68822be3fd4 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 4152d2f16cdd..28c9533acad4 100755 --- a/components/ILIAS/soap/classes/class.ilSoapTestAdministration.php +++ b/components/ILIAS/soap/classes/class.ilSoapTestAdministration.php @@ -514,6 +514,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'); } @@ -529,10 +530,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); @@ -560,8 +560,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( @@ -605,8 +606,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(); @@ -684,4 +690,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); + } }