19 declare(strict_types=1);
39 private readonly
int $question_id
52 array $visible_column_ids,
56 ?array $additional_parameters
58 if ($this->participant_data ===
null) {
63 foreach (
$data as $row) {
64 if (in_array($row[
'usr_id'], $this->test_obj->getAnonOnlyParticipantIds())) {
76 ?array $additional_parameters
78 if ($this->participant_data ===
null) {
81 return count($this->participant_data);
86 return $this->test_obj->getMaxPassOfTest();
91 $complete_feedback = $this->test_obj->getCompleteManualFeedback($question_id);
92 $data = $this->test_obj->getCompleteEvaluationData();
94 $participants =
$data->getParticipants();
95 $accessible_user_ids = call_user_func(
96 $this->participant_access_filter_factory->getScoreParticipantsUserFilter($this->test_obj->getRefId()),
99 $accessible_participants = array_filter(
105 array_keys($accessible_participants),
106 $this->
getDataRowClosure($question_id, $accessible_participants, $complete_feedback),
114 $key = key($order->
get());
115 $direction = $order->
get()[$key];
117 $this->participant_data,
118 static function (array
$a, array
$b) use ($key, $direction):
int {
119 $left = $a[$key] ??
null;
120 $right = $b[$key] ??
null;
121 if ($direction ===
'ASC') {
122 return $left <=> $right;
124 return $right <=> $left;
131 array $filtered_participants,
132 array $complete_feedback
137 ) use ($question_id, $filtered_participants, $complete_feedback): array {
141 $filtered_participants,
144 return [...$c, ...$array_of_attempts];
151 array $filtered_participants,
152 array $complete_feedback
155 $filtered_participants[$active_id]->getPasses(),
159 ) use ($question_id, $active_id, $filtered_participants, $complete_feedback): array {
161 $feedback_data = $complete_feedback[$active_id][$pd->
getPass()][$question_id] ?? [];
166 $current_participant = $filtered_participants[$active_id];
169 "{$active_id}_{$pd->getPass()}",
178 'usr_id' => $current_participant->getUserId()
181 if (isset($feedback_data[
'finalized_tstamp'])
182 && $feedback_data[
'finalized_tstamp'] !== 0) {
184 '@' . $feedback_data[
'finalized_tstamp']
186 )->setTimezone($this->timezone);
198 ?array $question_info,
201 if ($this->filter_data === []) {
206 && ($question_info ===
null || $question_info[
'isAnwered'] ===
false)
210 && (!isset($feedback_data[
'finalized_evaluation']) || $feedback_data[
'finalized_evaluation'] !== 1)
212 && isset($feedback_data[
'finalized_evaluation']) && $feedback_data[
'finalized_evaluation'] === 1) {
241 if (isset($feedback_data[
'finalized_by_usr_id'])
242 && $feedback_data[
'finalized_by_usr_id'] !==
'') {
243 return \ilObjUser::_lookupFullname($feedback_data[
'finalized_by_usr_id']);
getRows(DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, ?array $filter_data, ?array $additional_parameters)
This is called by the table to retrieve rows; map data-records to rows using the $row_builder e...
isFilteredAttempt(\ilTestEvaluationPassData $pd, ?array $question_info, array $feedback_data)
const COLUMN_FINALIZED_ON
buildFilteredArrayOfAttempts(int $question_id, int $active_id, array $filtered_participants, array $complete_feedback)
getTotalRowCount(?array $filter_data, ?array $additional_parameters)
Mainly for the purpose of pagination-support, it is important to know about the total number of recor...
const FILTER_FIELD_ONLY_ANSWERED
buildUserIdArrayFromParticipants(array $participants)
buildFinalizedByName(array $feedback_data)
Both the subject and the direction need to be specified when expressing an order. ...
buildDataRow(string $id, array $record)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
const COLUMN_FINALIZED_BY
__construct(private readonly Language $lng, private readonly \DateTimeZone $timezone, private readonly \ilTestParticipantAccessFilterFactory $participant_access_filter_factory, private readonly \ilObjTest $test_obj, private readonly int $question_id)
const COLUMN_POINTS_AVAILABLE
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
static buildExamId($active_id, $pass, $test_obj_id=null)
getAnsweredQuestionByQuestionId(int $question_id)
A simple class to express a naive range of whole positive numbers.
withFilterData(array $filter_data)
getDataRowClosure(int $question_id, array $filtered_participants, array $complete_feedback)
const COLUMN_POINTS_REACHED
getFilteredData(int $question_id)