ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
ILIAS\Test\Questions\Presentation\QuestionsBrowserTable Class Reference
+ Inheritance diagram for ILIAS\Test\Questions\Presentation\QuestionsBrowserTable:
+ Collaboration diagram for ILIAS\Test\Questions\Presentation\QuestionsBrowserTable:

Public Member Functions

 __construct (private readonly string $table_id, private readonly \ilObjUser $current_user, private readonly UIFactory $ui_factory, private readonly UIRenderer $ui_renderer, private readonly \ilLanguage $lng, private readonly \ilCtrl $ctrl, private readonly DataFactory $data_factory, private readonly \ilAssQuestionList $question_list, private readonly TaxonomyService $taxonomy, private readonly string $parent_title)
 
 getComponent (ServerRequestInterface $request, ?array $filter)
 
 getColumns ()
 
 getActions ()
 
 getRows (DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
 This is called by the table to retrieve rows; map data-records to rows using the $row_builder e.g. More...
 
 getTotalRowCount (mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
 Mainly for the purpose of pagination-support, it is important to know about the total number of records available. More...
 
 loadRecords (array $filters=[], ?Order $order=null, ?Range $range=null)
 
 getRows (DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
 This is called by the table to retrieve rows; map data-records to rows using the $row_builder e.g. More...
 
 getTotalRowCount (mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
 Mainly for the purpose of pagination-support, it is important to know about the total number of records available. More...
 

Data Fields

const ACTION_INSERT = 'insert'
 

Private Member Functions

 getInsertAction ()
 
 getParentObjectLink (array $record)
 
 addFiltersToQuestionList (array $filters)
 
 resolveTaxonomiesRowData (int $obj_fi, int $questionId)
 
 loadTaxonomyAssignmentData (int $parentObjId, int $questionId, array $available_taxonomy_ids)
 

Detailed Description

Definition at line 39 of file QuestionsBrowserTable.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::__construct ( private readonly string  $table_id,
private readonly \ilObjUser  $current_user,
private readonly UIFactory  $ui_factory,
private readonly UIRenderer  $ui_renderer,
private readonly \ilLanguage  $lng,
private readonly \ilCtrl  $ctrl,
private readonly DataFactory  $data_factory,
private readonly \ilAssQuestionList  $question_list,
private readonly TaxonomyService  $taxonomy,
private readonly string  $parent_title 
)

Definition at line 43 of file QuestionsBrowserTable.php.

54 {
55 }

Member Function Documentation

◆ addFiltersToQuestionList()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::addFiltersToQuestionList ( array  $filters)
private

Definition at line 207 of file QuestionsBrowserTable.php.

207 : void
208 {
209 foreach (array_filter($filters) as $key => $filter) {
210 if ($key === 'commented') {
211 $this->question_list->setCommentFilter((int) $filter);
212 continue;
213 }
214
215 $this->question_list->addFieldFilter($key, $filter);
216 }
217 }

◆ getActions()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::getActions ( )

Definition at line 119 of file QuestionsBrowserTable.php.

119 : array
120 {
121 return [self::ACTION_INSERT => $this->getInsertAction()];
122 }

References ILIAS\Test\Questions\Presentation\QuestionsBrowserTable\getInsertAction().

Referenced by ILIAS\Test\Questions\Presentation\QuestionsBrowserTable\getComponent().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getColumns()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::getColumns ( )

Definition at line 69 of file QuestionsBrowserTable.php.

69 : array
70 {
71 $column_factory = $this->ui_factory->table()->column();
72 $icon_factory = $this->ui_factory->symbol()->icon();
73 $iconYes = $icon_factory->custom('assets/images/standard/icon_checked.svg', 'yes');
74 $iconNo = $icon_factory->custom('assets/images/standard/icon_unchecked.svg', 'no');
75
76 $columns = [
77 'title' => $column_factory->text(
78 $this->lng->txt('tst_question_title')
79 )->withIsOptional(false, true),
80 'description' => $column_factory->text(
81 $this->lng->txt('description')
82 )->withIsOptional(true, true),
83 'question_type' => $column_factory->text(
84 $this->lng->txt('tst_question_type')
85 )->withIsOptional(false, true),
86 'points' => $column_factory->number(
87 $this->lng->txt('points')
88 )->withIsOptional(false, true),
89 'author' => $column_factory->text(
90 $this->lng->txt('author')
91 )->withIsOptional(true, false),
92 'lifecycle' => $column_factory->text(
93 $this->lng->txt('qst_lifecycle')
94 )->withIsOptional(true, false),
95 'parent_title' => $column_factory->link(
96 $this->lng->txt($this->parent_title)
97 )->withIsOptional(false, true),
98 'taxonomies' => $column_factory->text(
99 $this->lng->txt('qpl_settings_subtab_taxonomies')
100 )->withIsOptional(false, true),
101 'feedback' => $column_factory->boolean(
102 $this->lng->txt('tst_feedback'),
103 $iconYes,
104 $iconNo
105 )->withIsOptional(true, false),
106 'created' => $column_factory->date(
107 $this->lng->txt('created'),
108 $this->current_user->getDateTimeFormat()
109 )->withIsOptional(true, false),
110 'tstamp' => $column_factory->date(
111 $this->lng->txt('updated'),
112 $this->current_user->getDateTimeFormat()
113 )->withIsOptional(true, false)
114 ];
115
116 return array_map(static fn(Column $column): Column => $column->withIsSortable(true), $columns);
117 }

References ILIAS\Repository\lng(), and ILIAS\UI\Component\Table\Column\Column\withIsSortable().

+ Here is the call graph for this function:

◆ getComponent()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::getComponent ( ServerRequestInterface  $request,
?array  $filter 
)

Definition at line 57 of file QuestionsBrowserTable.php.

57 : Data
58 {
59 return $this->ui_factory->table()->data(
60 $this,
61 $this->lng->txt('list_of_questions'),
62 $this->getColumns(),
63 )->withId($this->table_id)
64 ->withActions($this->getActions())
65 ->withRequest($request)
66 ->withFilter($filter);
67 }
$request
@ilCtrl_Calls ilObjLearningSequenceContentGUI: ilObjLearningSequenceConditionsGUI
Definition: ltiauth.php:39

References ILIAS\Test\Questions\Presentation\QuestionsBrowserTable\getActions(), ILIAS\Repository\lng(), and ILIAS\UI\Component\Table\Data\withId().

+ Here is the call graph for this function:

◆ getInsertAction()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::getInsertAction ( )
private

Definition at line 124 of file QuestionsBrowserTable.php.

124 : TableAction
125 {
126 $url_builder = new URLBuilder($this->data_factory->uri(
127 ILIAS_HTTP_PATH . "/{$this->ctrl->getLinkTargetByClass(
128 ilTestQuestionBrowserTableGUI::class,
129 ilTestQuestionBrowserTableGUI::CMD_INSERT_QUESTIONS
130 )}"
131 ));
132
133 [$url_builder, $row_id_token] = $url_builder->acquireParameters(['qlist'], 'q_id');
134
135 return $this->ui_factory->table()->action()->standard(
136 $this->lng->txt('tst_insert_in_test'),
137 $url_builder,
138 $row_id_token
139 );
140 }

References ILIAS\Repository\lng().

Referenced by ILIAS\Test\Questions\Presentation\QuestionsBrowserTable\getActions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getParentObjectLink()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::getParentObjectLink ( array  $record)
private

Definition at line 168 of file QuestionsBrowserTable.php.

168 : Standard
169 {
170 [$parent_class, $parent_command] = match($record['parent_type']) {
171 'qpl' => [\ilObjQuestionPoolGUI::class, \ilObjQuestionPoolGUI::DEFAULT_CMD],
172 'tst' => [\ilObjTestGUI::class, \ilObjTestGUI::SHOW_QUESTIONS_CMD],
173 default => throw new \RuntimeException("Unsupported parent type {$record['parent_type']}"),
174 };
175
176 $this->ctrl->setParameterByClass($parent_class, 'ref_id', $record['parent_ref_id']);
177 $link = $this->ui_factory->link()->standard(
178 $record['parent_title'],
179 $this->ctrl->getLinkTargetByClass($parent_class, $parent_command),
180 );
181 $this->ctrl->setParameterByClass($parent_class, 'ref_id', null);
182
183 return $link;
184 }

References ILIAS\Repository\ctrl(), ilObjQuestionPoolGUI\DEFAULT_CMD, and ilObjTestGUI\SHOW_QUESTIONS_CMD.

Referenced by ILIAS\Test\Questions\Presentation\QuestionsBrowserTable\getRows().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getRows()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::getRows ( DataRowBuilder  $row_builder,
array  $visible_column_ids,
Range  $range,
Order  $order,
mixed  $additional_viewcontrol_data,
mixed  $filter_data,
mixed  $additional_parameters 
)

This is called by the table to retrieve rows; map data-records to rows using the $row_builder e.g.

yield $row_builder->buildStandardRow($row_id, $record).

Parameters
string[]$visible_column_ids

Implements ILIAS\UI\Component\Table\DataRetrieval.

Definition at line 142 of file QuestionsBrowserTable.php.

150 : \Generator {
151 $timezone = new \DateTimeZone($this->current_user->getTimeZone());
152 foreach ($this->loadRecords($filter_data ?? [], $order, $range) as $record) {
153 $question_id = $record['question_id'];
154
155 $record['question_type'] = $record['question_type'];
156 $record['complete'] = (bool) $record['complete'];
157 $record['lifecycle'] = new \ilAssQuestionLifecycle($record['lifecycle'])->getTranslation($this->lng) ?? '';
158
159 $record['created'] = (new \DateTimeImmutable("@{$record['created']}"))->setTimezone($timezone);
160 $record['tstamp'] = (new \DateTimeImmutable("@{$record['tstamp']}"))->setTimezone($timezone);
161 $record['taxonomies'] = $this->resolveTaxonomiesRowData($record['obj_fi'], $question_id);
162 $record['parent_title'] = $this->getParentObjectLink($record);
163
164 yield $row_builder->buildDataRow((string) $question_id, $record);
165 }
166 }
loadRecords(array $filters=[], ?Order $order=null, ?Range $range=null)
buildDataRow(string $id, array $record)

References ILIAS\UI\Component\Table\DataRowBuilder\buildDataRow(), ILIAS\Test\Questions\Presentation\QuestionsBrowserTable\getParentObjectLink(), ILIAS\Repository\lng(), and ILIAS\Test\Questions\Presentation\QuestionsBrowserTable\resolveTaxonomiesRowData().

+ Here is the call graph for this function:

◆ getTotalRowCount()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::getTotalRowCount ( mixed  $additional_viewcontrol_data,
mixed  $filter_data,
mixed  $additional_parameters 
)

Mainly for the purpose of pagination-support, it is important to know about the total number of records available.

Given the nature of a DataTable, which is, opposite to a PresentationTable, rather administrative than explorative, this information will increase user experience quite a bit. However, you may return null, if the call is to costly, but expect the View Control to look a little different in this case.

Make sure that potential filters or user restrictions are being applied to the count.

Implements ILIAS\UI\Component\Table\DataRetrieval.

Definition at line 186 of file QuestionsBrowserTable.php.

190 : int {
191 $filter_data ??= [];
192 $this->addFiltersToQuestionList($filter_data);
193 return $this->question_list->getTotalRowCount($additional_viewcontrol_data, $filter_data, $additional_parameters);
194 }

◆ loadRecords()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::loadRecords ( array  $filters = [],
?Order  $order = null,
?Range  $range = null 
)

Definition at line 196 of file QuestionsBrowserTable.php.

196 : array
197 {
198 $this->addFiltersToQuestionList($filters);
199
200 $this->question_list->setOrder($order);
201 $this->question_list->setRange($range);
202 $this->question_list->load();
203
204 return $this->question_list->getQuestionDataArray();
205 }

References ILIAS\UI\Implementation\Component\Table\$range.

◆ loadTaxonomyAssignmentData()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::loadTaxonomyAssignmentData ( int  $parentObjId,
int  $questionId,
array  $available_taxonomy_ids 
)
private

Definition at line 240 of file QuestionsBrowserTable.php.

240 : array
241 {
242 $taxonomyAssignmentData = [];
243
244 foreach ($available_taxonomy_ids as $taxId) {
245 $taxTree = new \ilTaxonomyTree($taxId);
246 $assignments = (new \ilTaxNodeAssignment(
247 'qpl',
248 $parentObjId,
249 'quest',
250 $taxId
251 ))->getAssignmentsOfItem($questionId);
252
253 foreach ($assignments as $assData) {
254 $taxId = $assData['tax_id'];
255 if (!isset($taxonomyAssignmentData[$taxId])) {
256 $taxonomyAssignmentData[$taxId] = [];
257 }
258
259 $nodeId = $assData['node_id'];
260 $assData['node_lft'] = $taxTree->getNodeData($nodeId)['lft'];
261 $taxonomyAssignmentData[$taxId][$nodeId] = $assData;
262 }
263 }
264
265 return $taxonomyAssignmentData;
266 }

◆ resolveTaxonomiesRowData()

ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::resolveTaxonomiesRowData ( int  $obj_fi,
int  $questionId 
)
private

Definition at line 219 of file QuestionsBrowserTable.php.

219 : string
220 {
221 $available_taxonomy_ids = $this->taxonomy->getUsageOfObject($obj_fi);
222 $data = $this->loadTaxonomyAssignmentData($obj_fi, $questionId, $available_taxonomy_ids);
223
224 $taxonomies = [];
225
226 foreach ($data as $taxonomyId => $taxData) {
227 $taxonomies[] = \ilObject::_lookupTitle($taxonomyId);
228 $taxonomies[] = $this->ui_renderer->render(
229 $this->ui_factory->listing()->unordered(
230 array_map(static function ($node) {
231 return \ilTaxonomyNode::_lookupTitle($node['node_id']);
232 }, $taxData)
233 )
234 );
235 }
236
237 return implode('', $taxonomies);
238 }
loadTaxonomyAssignmentData(int $parentObjId, int $questionId, array $available_taxonomy_ids)
static _lookupTitle(int $obj_id)
$data
Definition: storeScorm.php:45

References $data, and ilObject\_lookupTitle().

Referenced by ILIAS\Test\Questions\Presentation\QuestionsBrowserTable\getRows().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ ACTION_INSERT

const ILIAS\Test\Questions\Presentation\QuestionsBrowserTable::ACTION_INSERT = 'insert'

Definition at line 41 of file QuestionsBrowserTable.php.


The documentation for this class was generated from the following file: