ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
QuestionsTable.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
24use ILIAS\Test\Questions\Properties\Repository as TestQuestionsRepository;
25use ILIAS\Test\Questions\Properties\Properties as TestQuestionProperties;
26use ILIAS\Refinery\Factory as Refinery;
27use ILIAS\UI\Factory as UIFactory;
32use Psr\Http\Message\ServerRequestInterface;
33
35{
39 public function __construct(
40 private readonly UIFactory $ui_factory,
41 private readonly Refinery $refinery,
42 private readonly ServerRequestInterface $request,
43 private readonly QuestionsTableActions $table_actions,
44 private readonly Language $lng,
45 private readonly \ilObjTest $test_obj,
46 private readonly TestQuestionsRepository $questionrepository,
47 private readonly TitleColumnsBuilder $title_builder,
48 ) {
49 }
50
51 public function getTableComponent(): Ordering
52 {
53 $table = $this->ui_factory->table()->ordering(
54 $this,
55 $this->table_actions->getOrderActionUrl(),
56 $this->lng->txt('list_of_questions'),
57 $this->getColumns(),
58 )
59 ->withId((string) $this->test_obj->getId())
60 ->withActions($this->table_actions->getActions())
61 ->withRequest($this->request);
62
63 if ($this->test_obj->isRandomTest()
64 || $this->test_obj->evalTotalPersons() !== 0) {
65 return $table->withOrderingDisabled(true);
66 }
67
68 return $table;
69 }
70
71 public function getRows(
72 OrderingRowBuilder $row_builder,
73 array $visible_column_ids
74 ): \Generator {
75 foreach ($this->getRecords() as $record) {
76 $row = $record->getAsQuestionsTableRow(
77 $this->lng,
78 $this->ui_factory,
79 $this->refinery,
80 $this->table_actions->getQuestionTargetLinkBuilder(),
81 $row_builder,
82 $this->title_builder
83 );
84 yield $this->table_actions->setDisabledActions($row, $record);
85 }
86 }
87
88 private function getColumns(): array
89 {
90 $f = $this->ui_factory;
91 $columns = [
92 'question_id' => $f->table()->column()->text($this->lng->txt('question_id'))
93 ->withIsOptional(true, false),
94 'title' => $f->table()->column()->link($this->lng->txt('tst_question_title')),
95 'description' => $f->table()->column()->text($this->lng->txt('description'))
96 ->withIsOptional(true, false),
97 'complete' => $f->table()->column()->boolean(
98 $this->lng->txt('question_complete_title'),
99 $f->symbol()->icon()->custom('assets/images/standard/icon_checked.svg', '', 'small'),
100 $f->symbol()->icon()->custom('assets/images/standard/icon_alert.svg', '', 'small')
101 ),
102 'type_tag' => $f->table()->column()->text($this->lng->txt('tst_question_type')),
103 'points' => $f->table()->column()->text($this->lng->txt('points')),
104 'author' => $f->table()->column()->text($this->lng->txt('author'))
105 ->withIsOptional(true, false),
106 'lifecycle' => $f->table()->column()->text($this->lng->txt('qst_lifecycle'))
107 ->withIsOptional(true, false),
108 'qpl' => $f->table()->column()->link($this->lng->txt('qpl')),
109 'nr_of_answers' => $f->table()->column()->number($this->lng->txt('number_of_answers'))
110 ->withIsOptional(true, false),
111 'average_points' => $f->table()->column()->number($this->lng->txt('average_reached_points'))
112 ->withIsOptional(true, false),
113 'percentage_points_achieved' => $f->table()->column()->text($this->lng->txt('percentage_points_achieved'))
114 ->withIsOptional(true, false),
115 ];
116
117 return $columns;
118 }
119
120 private function getActions(): array
121 {
122 $this->table_actions->getActions();
123 }
124
125 private function getRecords(): \Generator
126 {
127 $records = $this->questionrepository
128 ->getQuestionPropertiesWithAggregatedResultsForTest($this->test_obj);
129 usort(
130 $records,
131 static fn(TestQuestionProperties $a, TestQuestionProperties $b): int =>
132 $a->getSequenceInformation()?->getPlaceInSequence() <=> $b->getSequenceInformation()?->getPlaceInSequence()
133 );
134 yield from $records;
135 }
136}
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
Builds data types.
Definition: Factory.php:36
getRows(OrderingRowBuilder $row_builder, array $visible_column_ids)
This is called by the (ordering-)table to retrieve rows; map data-records to rows using the $row_buil...
__construct(private readonly UIFactory $ui_factory, private readonly Refinery $refinery, private readonly ServerRequestInterface $request, private readonly QuestionsTableActions $table_actions, private readonly Language $lng, private readonly \ilObjTest $test_obj, private readonly TestQuestionsRepository $questionrepository, private readonly TitleColumnsBuilder $title_builder,)
This describes a Table to specify the order of its data (rows).
Definition: Ordering.php:29
withId(string $id)
The DataTable comes with a storage to keep e.g.
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
global $lng
Definition: privfeed.php:31