19 declare(strict_types=1);
47 return $this->test_obj;
52 $this->test_obj = $test_obj;
57 $this->participants[] = $participant;
62 foreach ($this as $participant) {
63 if ($participant->getUsrId() != $usr_id) {
74 foreach ($this as $participant) {
75 if ($participant->getActiveId() != $active_id) {
86 foreach ($this as $participant) {
87 if ($participant->hasUnfinishedPasses()) {
97 foreach ($this as $participant) {
98 if ($participant->hasScoring()) {
110 foreach ($this as $participant) {
111 $usrIds[] = $participant->getUsrId();
121 foreach ($this as $participant) {
122 $activeIds[] = $participant->getActiveId();
130 foreach ($this as $participant) {
131 if ($participant->getActiveId() == $active_id) {
145 foreach ($this as $participant) {
146 if (in_array($participant->getUsrId(), $usr_ids)) {
147 $participant = clone $participant;
148 $access_filtered_list->addParticipant($participant);
152 return $access_filtered_list;
157 return current($this->participants);
161 next($this->participants);
165 return key($this->participants);
169 return key($this->participants) !==
null;
173 reset($this->participants);
178 foreach ($db_rows as $row_data) {
181 if ((
int) $row_data[
'active_id']) {
182 $participant->setActiveId((
int) $row_data[
'active_id']);
185 $participant->setUsrId((
int) $row_data[
'usr_id']);
187 $participant->setLogin($row_data[
'login'] ??
'');
188 $participant->setLastname($row_data[
'lastname']);
189 $participant->setFirstname($row_data[
'firstname'] ??
'');
190 $participant->setMatriculation($row_data[
'matriculation'] ??
'');
191 $participant->setActiveStatus((
bool) ($row_data[
'active'] ??
false));
192 $participant->setFinishedTries((
int) $row_data[
'tries']);
193 $participant->setTestFinished((
bool) $row_data[
'test_finished']);
194 $participant->setUnfinishedPasses((
bool) $row_data[
'unfinished_passes']);
206 while ($row = $this->db->fetchAssoc(
$res)) {
209 $scoring->setActiveId((
int) $row[
'active_fi']);
210 $scoring->setScoredPass((
int) $row[
'pass']);
212 $scoring->setAnsweredQuestions((
int) $row[
'answeredquestions']);
213 $scoring->setTotalQuestions((
int) $row[
'questioncount']);
215 $scoring->setReachedPoints((
float) $row[
'reached_points']);
216 $scoring->setMaxPoints((
float) $row[
'max_points']);
218 $scoring->setPassed((
bool) $row[
'passed']);
219 $scoring->setFinalMark((
string) $row[
'mark_short']);
223 $scored_participant_list->addParticipant(
228 return $scored_participant_list;
233 $IN_activeIds = $this->db->in(
241 SELECT * FROM tst_result_cache tres 243 INNER JOIN tst_pass_result pres 244 ON pres.active_fi = tres.active_fi 245 AND pres.pass = tres.pass 256 foreach ($this as $participant) {
258 'usr_id' => $participant->getUsrId(),
259 'active_id' => $participant->getActiveId(),
260 'login' => $participant->getLogin(),
261 'firstname' => $participant->getFirstname(),
262 'lastname' => $participant->getLastname()
275 foreach ($this as $participant) {
276 if (!$participant->hasScoring()) {
281 'usr_id' => $participant->getUsrId(),
282 'active_id' => $participant->getActiveId(),
283 'login' => $participant->getLogin(),
284 'firstname' => $participant->getFirstname(),
285 'lastname' => $participant->getLastname(),
289 if ($participant->getScoring()) {
290 $row[
'scored_pass'] = $participant->getScoring()->getScoredPass();
291 $row[
'answered_questions'] = $participant->getScoring()->getAnsweredQuestions();
292 $row[
'total_questions'] = $participant->getScoring()->getTotalQuestions();
293 $row[
'reached_points'] = $participant->getScoring()->getReachedPoints();
294 $row[
'max_points'] = $participant->getScoring()->getMaxPoints();
295 $row[
'percent_result'] = $participant->getScoring()->getPercentResult();
296 $row[
'passed_status'] = $participant->getScoring()->isPassed();
297 $row[
'final_mark'] = $participant->getScoring()->getFinalMark();
298 $row[
'scored_pass_finished_timestamp'] = ilObjTest::lookupLastTestPassAccess(
299 $participant->getActiveId(),
300 $participant->getScoring()->getScoredPass()
302 $row[
'finished_passes'] = $participant->getFinishedTries();
303 $row[
'has_unfinished_passes'] = $participant->hasUnfinishedPasses();
314 if ($active_id ===
null) {
320 if ($max_pass_index ===
null) {
324 return $max_pass_index + 1;
329 if ($active_id ===
null) {
333 return $this->
getTestObj()->_getLastAccess($active_id);
338 if ($this->
getTestObj()->getMainSettings()->getAccessSettings()->getFixedParticipants() && !$participant->
getActiveId()) {
348 return $this->
lng->txt(
"deleted_user");
352 return $this->
lng->txt(
'anonymous');
static _getParticipantData($active_id)
Retrieves a participant name from active id.
buildInviteeFullname(ilTestParticipant $participant)
getScoredParticipantList()
getParticipantByUsrId(int $usr_id)
setTestObj(ilObjTest $test_obj)
buildFullname(ilTestParticipant $participant)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
addParticipant(ilTestParticipant $participant)
static _getMaxPass($active_id)
Retrieves the maximum pass of a given user for a given test in which the user answered at least one q...
__construct(private ilObjTest $test_obj, private ilObjUser $user, private ilLanguage $lng, private ilDBInterface $db)
isActiveIdInList(int $active_id)
getParticipantByActiveId($active_id)
lookupNrOfTries(?int $active_id)
buildParticipantsFullname(ilTestParticipant $participant)
lookupLastAccess(?int $active_id)
initializeFromDbRows(array $db_rows)
getAccessFilteredList(Closure $user_access_filter)