ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.TreeTable.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;
30 
34 class TreeTable
35 {
36  protected \ilCtrl $ctrl;
37  protected \ilLanguage $lng;
38  protected UI\Factory $ui_fac;
39  protected ServerRequestInterface $request;
40  protected Data\Factory $df;
45 
46  public function __construct(int $ref_id)
47  {
48  global $DIC;
49 
50  $this->ctrl = $DIC->ctrl();
51  $this->lng = $DIC->language();
52  $this->ui_fac = $DIC->ui()->factory();
53  $this->request = $DIC->http()->request();
54  $this->df = new Data\Factory();
55  $this->skill_manager = $DIC->skills()->internal()->manager();
56  $this->skill_management_access_manager = $this->skill_manager->getManagementAccessManager($ref_id);
57  $this->skill_tree_manager = $this->skill_manager->getTreeManager();
58  $this->skill_tree_factory = $DIC->skills()->internal()->factory()->tree();
59  }
60 
61  public function getComponent(): UI\Component\Table\Data
62  {
63  $columns = $this->getColumns();
64  $actions = $this->getActions();
65  $data_retrieval = $this->getDataRetrieval();
66 
67  $table = $this->ui_fac->table()
68  ->data($this->lng->txt("skmg_skill_trees"), $columns, $data_retrieval)
69  ->withId(self::class)
70  ->withActions($actions)
71  ->withRequest($this->request);
72 
73  return $table;
74  }
75 
76  protected function getColumns(): array
77  {
78  $columns = [
79  "title" => $this->ui_fac->table()->column()->text($this->lng->txt("title"))
80  ];
81 
82  return $columns;
83  }
84 
85  protected function getActions(): array
86  {
87  $query_params_namespace = ["skl_tree_table"];
88 
89  $uri_edit = $this->df->uri(
90  ILIAS_HTTP_PATH . "/" . $this->ctrl->getLinkTargetByClass("ilobjskilltreegui", "editSkills")
91  );
92  $url_builder_edit = new UI\URLBuilder($uri_edit);
93  list($url_builder_edit, $action_parameter_token_edit, $row_id_token_edit) =
94  $url_builder_edit->acquireParameters(
95  $query_params_namespace,
96  "action",
97  "tree_ids"
98  );
99 
100  $uri_delete = $this->df->uri(
101  ILIAS_HTTP_PATH . "/" . $this->ctrl->getLinkTargetByClass("ilobjskilltreegui", "delete")
102  );
103  $url_builder_delete = new UI\URLBuilder($uri_delete);
104  list($url_builder_delete, $action_parameter_token_delete, $row_id_token_delete) =
105  $url_builder_delete->acquireParameters(
106  $query_params_namespace,
107  "action",
108  "tree_ids"
109  );
110 
111  $actions = [
112  "edit" => $this->ui_fac->table()->action()->single(
113  $this->lng->txt("edit"),
114  $url_builder_edit->withParameter($action_parameter_token_edit, "editTree"),
115  $row_id_token_edit
116  )
117  ];
118  if ($this->skill_management_access_manager->hasCreateTreePermission()) {
119  $actions["delete"] = $this->ui_fac->table()->action()->multi(
120  $this->lng->txt("delete"),
121  $url_builder_delete->withParameter($action_parameter_token_delete, "deleteTrees"),
122  $row_id_token_delete
123  );
124  }
125 
126  return $actions;
127  }
128 
129  protected function getDataRetrieval(): UI\Component\Table\DataRetrieval
130  {
131  $data_retrieval = new class (
135  ) implements UI\Component\Table\DataRetrieval {
136  use TableRecords;
137 
138  public function __construct(
139  protected Service\SkillInternalManagerService $skill_manager,
140  protected Tree\SkillTreeManager $skill_tree_manager,
141  protected Tree\SkillTreeFactory $skill_tree_factory
142  ) {
143  }
144 
145  public function getRows(
146  UI\Component\Table\DataRowBuilder $row_builder,
147  array $visible_column_ids,
148  Data\Range $range,
149  Data\Order $order,
150  ?array $filter_data,
151  ?array $additional_parameters
152  ): \Generator {
153  $records = $this->getRecords($range, $order);
154  foreach ($records as $idx => $record) {
155  $row_id = (string) $record["tree_id"];
156 
157  yield $row_builder->buildDataRow($row_id, $record);
158  }
159  }
160 
161  public function getTotalRowCount(
162  ?array $filter_data,
163  ?array $additional_parameters
164  ): ?int {
165  return count($this->getRecords());
166  }
167 
168  protected function getRecords(Data\Range $range = null, Data\Order $order = null): array
169  {
170  $items = array_filter(array_map(
171  function (\ilObjSkillTree $skillTree): array {
172  $tree_access_manager = $this->skill_manager->getTreeAccessManager($skillTree->getRefId());
173  if ($tree_access_manager->hasVisibleTreePermission()) {
174  return [
175  "tree" => $skillTree
176  ];
177  }
178  return [];
179  },
180  iterator_to_array($this->skill_tree_manager->getTrees())
181  ));
182 
183  $records = [];
184  $i = 0;
185  foreach ($items as $item) {
187  $tree_obj = $item["tree"];
188  $tree = $this->skill_tree_factory->getTreeById($tree_obj->getId());
189  $records[$i]["tree_id"] = $tree->readRootId();
190  $records[$i]["title"] = $tree_obj->getTitle();
191  $i++;
192  }
193 
194  if ($order) {
195  $records = $this->orderRecords($records, $order);
196  }
197 
198  if ($range) {
199  $records = $this->limitRecords($records, $range);
200  }
201 
202  return $records;
203  }
204  };
205 
206  return $data_retrieval;
207  }
208 }
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...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Service SkillInternalManagerService $skill_manager
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...
Both the subject and the direction need to be specified when expressing an order. ...
Definition: Order.php:12
global $DIC
Definition: feed.php:28
Access SkillManagementAccess $skill_management_access_manager
$ref_id
Definition: ltiauth.php:67
Builds data types.
Definition: Factory.php:35
Tree SkillTreeFactory $skill_tree_factory
ServerRequestInterface $request
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
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...
Tree SkillTreeManager $skill_tree_manager
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...