ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.LevelResourcesTable.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
22 namespace ILIAS\Skill\Table;
23 
24 use ILIAS\Data;
25 use ILIAS\UI;
31 
36 {
37  protected \ilCtrl $ctrl;
38  protected \ilLanguage $lng;
39  protected UI\Factory $ui_fac;
40  protected UI\Renderer $ui_ren;
41  protected ServerRequestInterface $request;
43  protected Data\Factory $df;
44  protected \ilTree $tree;
48  protected string $requested_table_action = "";
52  protected array $requested_table_rep_ref_ids = [];
53  protected int $base_skill_id = 0;
54  protected int $tref_id = 0;
55  protected int $requested_level_id = 0;
56 
57  public function __construct(int $ref_id, int $base_skill_id, int $tref_id, int $requested_level_id)
58  {
59  global $DIC;
60 
61  $this->ctrl = $DIC->ctrl();
62  $this->lng = $DIC->language();
63  $this->ui_fac = $DIC->ui()->factory();
64  $this->ui_ren = $DIC->ui()->renderer();
65  $this->request = $DIC->http()->request();
66  $this->query = $DIC->http()->wrapper()->query();
67  $this->df = new Data\Factory();
68  $this->tree = $DIC->repositoryTree();
69  $this->tree_access_manager = $DIC->skills()->internal()->manager()->getTreeAccessManager($ref_id);
70  $this->resource_manager = $DIC->skills()->internal()->manager()->getResourceManager();
71  $this->admin_gui_request = $DIC->skills()->internal()->gui()->admin_request();
72  $this->requested_table_action = $this->admin_gui_request->getTableLevelResourcesAction();
73  $this->requested_table_rep_ref_ids = $this->admin_gui_request->getTableRepoRefIds();
74  $this->base_skill_id = $base_skill_id;
75  $this->tref_id = $tref_id;
76  $this->requested_level_id = $requested_level_id;
77  }
78 
79  public function getComponent(): UI\Component\Table\Data
80  {
81  $columns = $this->getColumns();
82  $actions = $this->getActions();
83  $data_retrieval = $this->getDataRetrieval();
84 
85  if ($this->requested_table_action === "removeResources") {
86  $items = [];
87  foreach ($this->requested_table_rep_ref_ids as $id) {
88  if ($id === "ALL_OBJECTS") {
89  $resources = $this->resource_manager->getResourcesOfLevel(
90  $this->base_skill_id,
91  $this->tref_id,
92  $this->requested_level_id
93  );
94  foreach ($resources as $resource) {
95  $obj_id = \ilObject::_lookupObjId($resource->getRepoRefId());
96  $obj_type = \ilObject::_lookupType($obj_id);
97  $items[] = $this->ui_fac->modal()->interruptiveItem()->standard(
98  (string) $resource->getRepoRefId(),
99  \ilObject::_lookupTitle($obj_id),
100  $this->ui_fac->image()->standard(
101  \ilObject::_getIcon($obj_id, "small", $obj_type),
102  $this->lng->txt("icon") . " " . $this->lng->txt("obj_" . $obj_type)
103  )
104  );
105  }
106  } else {
107  $obj_id = \ilObject::_lookupObjId((int) $id);
108  $obj_type = \ilObject::_lookupType($obj_id);
109  $items[] = $this->ui_fac->modal()->interruptiveItem()->standard(
110  $id,
111  \ilObject::_lookupTitle($obj_id),
112  $this->ui_fac->image()->standard(
113  \ilObject::_getIcon($obj_id, "small", $obj_type),
114  $this->lng->txt("icon") . " " . $this->lng->txt("obj_" . $obj_type)
115  )
116  );
117  }
118  }
119  echo($this->ui_ren->renderAsync([
120  $this->ui_fac->modal()->interruptive(
121  "",
122  empty($items) ? $this->lng->txt("no_checkbox") : $this->lng->txt("skmg_confirm_level_resources_removal"),
123  $this->ctrl->getFormActionByClass("ilbasicskillgui", "removeLevelResources")
124  )
125  ->withAffectedItems($items)
126  ->withActionButtonLabel(empty($items) ? $this->lng->txt("ok") : $this->lng->txt("delete"))
127  ]));
128  exit();
129  }
130 
131  $table = $this->ui_fac->table()
132  ->data($this->lng->txt("skmg_suggested_resources"), $columns, $data_retrieval)
133  ->withId(
134  self::class . "_" .
135  $this->base_skill_id . "_" .
136  $this->tref_id . "_" .
137  $this->requested_level_id
138  )
139  ->withActions($actions)
140  ->withRequest($this->request);
141 
142  return $table;
143  }
144 
145  protected function getColumns(): array
146  {
147  $columns = [
148  "type" => $this->ui_fac->table()->column()->statusIcon($this->lng->txt("type"))
149  ->withIsSortable(false),
150  "title" => $this->ui_fac->table()->column()->text($this->lng->txt("title")),
151  "path" => $this->ui_fac->table()->column()->text($this->lng->txt("path"))
152  ->withIsSortable(false),
153  "suggested" => $this->ui_fac->table()->column()->text($this->lng->txt("skmg_suggested"))
154  ->withIsSortable(false),
155  "lp_trigger" => $this->ui_fac->table()->column()->text($this->lng->txt("skmg_lp_triggers_level"))
156  ->withIsSortable(false),
157  ];
158 
159  return $columns;
160  }
161 
162  protected function getActions(): array
163  {
164  $query_params_namespace = ["skl_level_resources_table"];
165 
166  $uri_suggested = $this->df->uri(
167  ILIAS_HTTP_PATH . "/" . $this->ctrl->getLinkTargetByClass("ilbasicskillgui", "saveResourcesAsSuggested")
168  );
169  $url_builder_suggested = new UI\URLBuilder($uri_suggested);
170  list($url_builder_suggested, $action_parameter_token_suggested, $row_id_token_suggested) =
171  $url_builder_suggested->acquireParameters(
172  $query_params_namespace,
173  "action",
174  "rep_ref_ids"
175  );
176 
177  $uri_not_suggested = $this->df->uri(
178  ILIAS_HTTP_PATH . "/" . $this->ctrl->getLinkTargetByClass("ilbasicskillgui", "saveResourcesAsNotSuggested")
179  );
180  $url_builder_not_suggested = new UI\URLBuilder($uri_not_suggested);
181  list($url_builder_not_suggested, $action_parameter_token_not_suggested, $row_id_token_not_suggested) =
182  $url_builder_not_suggested->acquireParameters(
183  $query_params_namespace,
184  "action",
185  "rep_ref_ids"
186  );
187 
188  $uri_trigger = $this->df->uri(
189  ILIAS_HTTP_PATH . "/" . $this->ctrl->getLinkTargetByClass("ilbasicskillgui", "saveResourcesAsTrigger")
190  );
191  $url_builder_trigger = new UI\URLBuilder($uri_trigger);
192  list($url_builder_trigger, $action_parameter_token_trigger, $row_id_token_trigger) =
193  $url_builder_trigger->acquireParameters(
194  $query_params_namespace,
195  "action",
196  "rep_ref_ids"
197  );
198 
199  $uri_no_trigger = $this->df->uri(
200  ILIAS_HTTP_PATH . "/" . $this->ctrl->getLinkTargetByClass("ilbasicskillgui", "saveResourcesAsNoTrigger")
201  );
202  $url_builder_no_trigger = new UI\URLBuilder($uri_no_trigger);
203  list($url_builder_no_trigger, $action_parameter_token_no_trigger, $row_id_token_no_trigger) =
204  $url_builder_no_trigger->acquireParameters(
205  $query_params_namespace,
206  "action",
207  "rep_ref_ids"
208  );
209 
210  $url_builder_remove = new UI\URLBuilder($this->df->uri($this->request->getUri()->__toString()));
211  list($url_builder_remove, $action_parameter_token_remove, $row_id_token_remove) =
212  $url_builder_remove->acquireParameters(
213  $query_params_namespace,
214  "action",
215  "rep_ref_ids"
216  );
217 
218  $actions = [];
219  if ($this->tree_access_manager->hasManageCompetencesPermission()) {
220  $actions = [
221  "setSuggested" => $this->ui_fac->table()->action()->standard(
222  $this->lng->txt("skmg_set_as_suggested"),
223  $url_builder_suggested->withParameter($action_parameter_token_suggested, "setSuggested"),
224  $row_id_token_suggested
225  ),
226  "unsetSuggested" => $this->ui_fac->table()->action()->standard(
227  $this->lng->txt("skmg_set_as_no_suggested"),
228  $url_builder_not_suggested->withParameter($action_parameter_token_not_suggested, "unsetSuggested"),
229  $row_id_token_not_suggested
230  ),
231  "setTrigger" => $this->ui_fac->table()->action()->standard(
232  $this->lng->txt("skmg_set_as_lp_trigger"),
233  $url_builder_trigger->withParameter($action_parameter_token_trigger, "setTrigger"),
234  $row_id_token_trigger
235  ),
236  "unsetTrigger" => $this->ui_fac->table()->action()->standard(
237  $this->lng->txt("skmg_set_as_no_lp_trigger"),
238  $url_builder_no_trigger->withParameter($action_parameter_token_no_trigger, "unsetTrigger"),
239  $row_id_token_no_trigger
240  ),
241  "remove" => $this->ui_fac->table()->action()->multi(
242  $this->lng->txt("remove"),
243  $url_builder_remove->withParameter($action_parameter_token_remove, "removeResources"),
244  $row_id_token_remove
245  )
246  ->withAsync()
247  ];
248  }
249 
250  return $actions;
251  }
252 
253  protected function getDataRetrieval(): UI\Component\Table\DataRetrieval
254  {
255  $data_retrieval = new class (
256  $this->lng,
259  $this->tree,
264  ) implements UI\Component\Table\DataRetrieval {
265  use TableRecords;
266 
267  public function __construct(
268  protected \ilLanguage $lng,
269  protected UI\Factory $ui_fac,
270  protected UI\Renderer $ui_ren,
271  protected \ilTree $tree,
272  protected Resource\SkillResourcesManager $resource_manager,
273  protected int $base_skill_id,
274  protected int $tref_id,
275  protected int $level_id
276  ) {
277  }
278 
279  public function getRows(
280  UI\Component\Table\DataRowBuilder $row_builder,
281  array $visible_column_ids,
282  Data\Range $range,
283  Data\Order $order,
284  ?array $filter_data,
285  ?array $additional_parameters
286  ): \Generator {
287  $records = $this->getRecords($range, $order);
288  foreach ($records as $idx => $record) {
289  $row_id = (string) $record["rep_ref_id"];
290 
291  yield $row_builder->buildDataRow($row_id, $record)
292  ->withDisabledAction("setSuggested", ($record["suggested"] === $this->lng->txt("yes")))
293  ->withDisabledAction("unsetSuggested", ($record["suggested"] === $this->lng->txt("no")))
294  ->withDisabledAction("setTrigger", ($record["lp_trigger"] === $this->lng->txt("yes")))
295  ->withDisabledAction("setTrigger", ($record["lp_trigger"] === $this->lng->txt("not_available")))
296  ->withDisabledAction("unsetTrigger", ($record["lp_trigger"] === $this->lng->txt("no")))
297  ->withDisabledAction("unsetTrigger", ($record["lp_trigger"] === $this->lng->txt("not_available")));
298  }
299  }
300 
301  public function getTotalRowCount(
302  ?array $filter_data,
303  ?array $additional_parameters
304  ): ?int {
305  return count($this->getRecords());
306  }
307 
308  protected function getRecords(Data\Range $range = null, Data\Order $order = null): array
309  {
310  $resources = $this->resource_manager->getResourcesOfLevel(
311  $this->base_skill_id,
312  $this->tref_id,
313  $this->level_id
314  );
315 
316  $records = [];
317  $i = 0;
318  foreach ($resources as $resource) {
319  $ref_id = $resource->getRepoRefId();
320  $obj_id = \ilObject::_lookupObjId($ref_id);
321  $obj_type = \ilObject::_lookupType($obj_id);
322 
323  $records[$i]["rep_ref_id"] = $ref_id;
324  $records[$i]["title"] = \ilObject::_lookupTitle($obj_id);
325  $records[$i]["suggested"] = $resource->getImparting()
326  ? $this->lng->txt("yes")
327  : $this->lng->txt("no");
328 
329  if (!\ilObjectLP::isSupportedObjectType($obj_type)) {
330  $trigger = $this->lng->txt("not_available");
331  } elseif ($resource->getTrigger()) {
332  $trigger = $this->lng->txt("yes");
333  } else {
334  $trigger = $this->lng->txt("no");
335  }
336  $records[$i]["lp_trigger"] = $trigger;
337 
338  $icon = $this->ui_fac->symbol()->icon()->standard(
339  $obj_type,
340  $this->lng->txt("icon") . " " . $this->lng->txt($obj_type),
341  "medium"
342  );
343  $records[$i]["type"] = $icon;
344 
345  $path = $this->tree->getPathFull($ref_id);
346  $path_items = [];
347  foreach ($path as $p) {
348  if ($p["type"] != "root" && $p["child"] != $ref_id) {
349  $path_items[] = $p["title"];
350  }
351  }
352  $records[$i]["path"] = implode(" > ", $path_items);
353 
354  $i++;
355  }
356 
357  if ($order) {
358  $records = $this->orderRecords($records, $order);
359  }
360 
361  if ($range) {
362  $records = $this->limitRecords($records, $range);
363  }
364 
365  return $records;
366  }
367  };
368 
369  return $data_retrieval;
370  }
371 }
An entity that renders components to a string output.
Definition: Renderer.php:30
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
exit
Definition: login.php:29
$resources
Definition: ltiservices.php:68
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
static isSupportedObjectType(string $type)
Request wrapper for guis in skill administration.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Resource SkillResourcesManager $resource_manager
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$path
Definition: ltiservices.php:32
Both the subject and the direction need to be specified when expressing an order. ...
Definition: Order.php:12
static _lookupObjId(int $ref_id)
global $DIC
Definition: feed.php:28
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(int $ref_id, int $base_skill_id, int $tref_id, int $requested_level_id)
$ref_id
Definition: ltiauth.php:67
static _lookupTitle(int $obj_id)
Builds data types.
Definition: Factory.php:35
Service SkillAdminGUIRequest $admin_gui_request
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _lookupType(int $id, bool $reference=false)
A simple class to express a range of whole positive numbers.
Definition: Range.php:30
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...