ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
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;
40  protected Data\Factory $df;
41  protected Service\SkillInternalManagerService $skill_manager;
42  protected Access\SkillManagementAccess $skill_management_access_manager;
43  protected Tree\SkillTreeManager $skill_tree_manager;
44  protected Tree\SkillTreeFactory $skill_tree_factory;
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()->link($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_delete = $this->df->uri(
90  ILIAS_HTTP_PATH . "/" . $this->ctrl->getLinkTargetByClass("ilobjskilltreegui", "delete")
91  );
92  $url_builder_delete = new UI\URLBuilder($uri_delete);
93  list($url_builder_delete, $action_parameter_token_delete, $row_id_token_delete) =
94  $url_builder_delete->acquireParameters(
95  $query_params_namespace,
96  "action",
97  "tree_ids"
98  );
99 
100  $actions = [];
101  if ($this->skill_management_access_manager->hasCreateTreePermission()) {
102  $actions["delete"] = $this->ui_fac->table()->action()->multi(
103  $this->lng->txt("delete"),
104  $url_builder_delete->withParameter($action_parameter_token_delete, "deleteTrees"),
105  $row_id_token_delete
106  );
107  }
108 
109  return $actions;
110  }
111 
112  protected function getDataRetrieval(): UI\Component\Table\DataRetrieval
113  {
114  $data_retrieval = new class (
120  ) implements UI\Component\Table\DataRetrieval {
121  use TableRecords;
122 
123  public function __construct(
124  protected Service\SkillInternalManagerService $skill_manager,
125  protected Tree\SkillTreeManager $skill_tree_manager,
126  protected Tree\SkillTreeFactory $skill_tree_factory,
127  protected UI\Factory $ui_fac,
128  protected \ilCtrl $ctrl
129  ) {
130  }
131 
132  public function getRows(
133  UI\Component\Table\DataRowBuilder $row_builder,
134  array $visible_column_ids,
135  Data\Range $range,
136  Data\Order $order,
137  ?array $filter_data,
138  ?array $additional_parameters
139  ): \Generator {
140  $records = $this->getRecords($range, $order);
141  foreach ($records as $idx => $record) {
142  $row_id = (string) $record["tree_id"];
143 
144  yield $row_builder->buildDataRow($row_id, $record);
145  }
146  }
147 
148  public function getTotalRowCount(
149  ?array $filter_data,
150  ?array $additional_parameters
151  ): ?int {
152  return count($this->getRecords());
153  }
154 
155  protected function getRecords(Data\Range $range = null, Data\Order $order = null): array
156  {
157  $items = array_filter(array_map(
158  function (\ilObjSkillTree $skillTree): array {
159  $tree_access_manager = $this->skill_manager->getTreeAccessManager($skillTree->getRefId());
160  if ($tree_access_manager->hasVisibleTreePermission()) {
161  return [
162  "tree" => $skillTree
163  ];
164  }
165  return [];
166  },
167  iterator_to_array($this->skill_tree_manager->getTrees())
168  ));
169 
170  $records = [];
171  $i = 0;
172  foreach ($items as $item) {
174  $tree_obj = $item["tree"];
175  $tree = $this->skill_tree_factory->getTreeById($tree_obj->getId());
176  $records[$i]["tree_id"] = $tree->readRootId();
177  $this->ctrl->setParameterByClass("ilobjskilltreegui", "ref_id", $tree_obj->getRefId());
178  $records[$i]["title"] = $this->ui_fac->link()->standard(
179  $tree_obj->getTitle(),
180  $this->ctrl->getLinkTargetByClass("ilobjskilltreegui", "editSkills")
181  );
182  $this->ctrl->clearParameterByClass("ilobjskilltreegui", "ref_id");
183  $i++;
184  }
185 
186  if ($order) {
187  $records = $this->orderRecords($records, $order);
188  }
189 
190  if ($range) {
191  $records = $this->limitRecords($records, $range);
192  }
193 
194  return $records;
195  }
196  };
197 
198  return $data_retrieval;
199  }
200 }
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...
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
Service SkillInternalManagerService $skill_manager
$ref_id
Definition: ltiauth.php:66
This is how the factory for UI elements looks.
Definition: Factory.php:37
global $DIC
Definition: shib_login.php:25
Access SkillManagementAccess $skill_management_access_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...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...