ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
RandomQuestionSetSourcePoolDefinitionListTable.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Test\Questions;
22 
24 use ILIAS\Data\URI;
33 use ilTestRandomQuestionSetSourcePoolDefinitionList as PoolDefinitionList;
36 
38 {
39  private URI $target;
42 
43  public function __construct(
44  private readonly \ilCtrlInterface $ctrl,
45  private readonly \ilLanguage $lng,
46  private readonly UIFactory $ui_factory,
47  private readonly DataFactory $data_factory,
48  private readonly ServerRequestInterface $request,
49  private readonly TitleColumnsBuilder $title_builder,
50  private readonly \ilTestQuestionFilterLabelTranslator $taxonomy_translator,
51  private readonly PoolDefinitionList $source_pool_definition_list,
52  private readonly bool $editable,
53  private readonly bool $show_amount
54  ) {
55  $this->target = $this->data_factory->uri((string) $this->request->getUri());
56  $this->url_builder = new URLBuilder($this->target);
57  [$this->url_builder, $this->id_token] = $this->url_builder->acquireParameters(
58  ['src_pool_def'],
59  'id'
60  );
61  }
62 
63  public function getRows(OrderingRowBuilder $row_builder, array $visible_column_ids): \Generator
64  {
65  foreach ($this->getData() as $qp) {
66  $record = [
67  'sequence_position' => (int) $qp['sequence_position'],
68  'source_pool_label' => $this->title_builder->buildAccessCheckedQuestionpoolTitleAsLink(
69  $qp['ref_id'],
70  $qp['source_pool_label'],
71  true
72  ),
73  'taxonomy_filter' => $this->taxonomy_translator->getTaxonomyFilterLabel(
74  $qp['taxonomy_filter'],
75  '<br />'
76  ),
77  'lifecycle_filter' => $this->taxonomy_translator->getLifecycleFilterLabel($qp['lifecycle_filter']),
78  'type_filter' => $this->taxonomy_translator->getTypeFilterLabel($qp['type_filter']),
79  'question_amount' => (int) $qp['question_amount']
80  ];
81  yield $row_builder->buildOrderingRow((string) $qp['def_id'], $record);
82  }
83  }
84 
85  private function getData(): array
86  {
87  $data = [];
88 
89  foreach ($this->source_pool_definition_list as $source_pool_definition) {
90  $taxonomie_filter = $source_pool_definition->getOriginalTaxonomyFilter();
91  if ($taxonomie_filter === []) {
92  $taxonomie_filter = $source_pool_definition->getMappedTaxonomyfilter();
93  }
94  $set = [];
95  $set['def_id'] = $source_pool_definition->getId();
96  $set['sequence_position'] = $source_pool_definition->getSequencePosition();
97  $set['source_pool_label'] = $source_pool_definition->getPoolTitle();
98  $set['taxonomy_filter'] = $taxonomie_filter;
99  $set['lifecycle_filter'] = $source_pool_definition->getLifecycleFilter();
100  $set['type_filter'] = $source_pool_definition->getTypeFilter();
101  // fau.
102  $set['question_amount'] = $source_pool_definition->getQuestionAmount();
103  $set['ref_id'] = $source_pool_definition->getPoolRefId();
104  $data[] = $set;
105  }
106 
107  usort($data, fn($a, $b) => $a['sequence_position'] <=> $b['sequence_position']);
108  return $data;
109  }
110 
111  public function getComponent(): OrderingTable
112  {
113  return $this->ui_factory->table()
114  ->ordering(
115  $this->lng->txt('tst_src_quest_pool_def_list_table'),
116  $this->getColumns(),
117  $this,
118  $this->getTarget(ConfigGUI::CMD_SAVE_SRC_POOL_DEF_LIST)
119  )
120  ->withActions($this->getActions())
121  ->withRequest($this->request)
122  ->withOrderingDisabled(!$this->editable)
123  ->withId('src_pool_def_list');
124  }
125 
126  public function applySubmit(RequestDataCollector $request): void
127  {
128  $quest_pos = array_flip($this->getComponent()->getData());
129 
130  foreach ($this->source_pool_definition_list as $source_pool_definition) {
131  $pool_id = $source_pool_definition->getId();
132  $sequence_pos = array_key_exists($pool_id, $quest_pos) ? $quest_pos[$pool_id] : 0;
133  $source_pool_definition->setSequencePosition($sequence_pos);
134  }
135  }
136 
140  private function getColumns(): array
141  {
142  $column_factory = $this->ui_factory->table()->column();
143  $columns_definition = [
144  'sequence_position' => $column_factory->number($this->lng->txt('position'))->withUnit('.'),
145  'source_pool_label' => $column_factory->link($this->lng->txt('tst_source_question_pool')),
146  'taxonomy_filter' => $column_factory->text(
147  $this->lng->txt('tst_filter_taxonomy') . ' / ' . $this->lng->txt('tst_filter_tax_node')
148  ),
149  'lifecycle_filter' => $column_factory->text($this->lng->txt('qst_lifecycle')),
150  'type_filter' => $column_factory->text($this->lng->txt('tst_filter_question_type')),
151  'question_amount' => $column_factory->number($this->lng->txt('tst_question_amount')),
152  ];
153 
154  $columns_conditions = [
155  'sequence_position' => !$this->editable,
156  'question_amount' => $this->show_amount,
157  ];
158 
159  return array_filter($columns_definition, function ($key) use ($columns_conditions) {
160  return !isset($columns_conditions[$key]) || $columns_conditions[$key];
161  }, ARRAY_FILTER_USE_KEY);
162  }
163 
167  private function getActions(): array
168  {
169  if (!$this->editable) {
170  return [];
171  }
172  return [
173  'delete' => $this->ui_factory->table()->action()->standard(
174  $this->lng->txt('delete'),
175  $this->url_builder->withURI($this->getTarget(ConfigGUI::CMD_DELETE_SRC_POOL_DEF)),
177  ),
178  'edit' => $this->ui_factory->table()->action()->single(
179  $this->lng->txt('edit'),
180  $this->url_builder->withURI($this->getTarget(ConfigGUI::CMD_SHOW_EDIT_SRC_POOL_DEF_FORM)),
182  )
183  ];
184  }
185 
186  private function getTarget(string $cmd): URI
187  {
188  return $this->target->withParameter('cmd', $cmd);
189  }
190 }
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 \ilCtrlInterface $ctrl, private readonly \ilLanguage $lng, private readonly UIFactory $ui_factory, private readonly DataFactory $data_factory, private readonly ServerRequestInterface $request, private readonly TitleColumnsBuilder $title_builder, private readonly \ilTestQuestionFilterLabelTranslator $taxonomy_translator, private readonly PoolDefinitionList $source_pool_definition_list, private readonly bool $editable, private readonly bool $show_amount)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
The scope of this class is split ilias-conform URI&#39;s into components.
Definition: URI.php:34
global $lng
Definition: privfeed.php:32
buildOrderingRow(string $id, array $record)
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
URLBuilder.
Definition: URLBuilder.php:39
withParameter(string $key, $value)
Get URI with modified parameters.
Definition: URI.php:388