ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
LDAPRoleMappingTable.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
32 
34 {
44  private ?array $records = null;
45 
46  public function __construct(
47  private readonly ServerRequestInterface $http_request,
48  private readonly ilLanguage $lng,
49  private readonly UIFactory $ui_factory,
50  private readonly DataFactory $data_factory,
51  private readonly int $server_id,
52  private readonly ilObjectDataCache $object_data_cache,
53  private readonly ilRbacReview $rbac_review,
54  ) {
55  }
56 
57  public function getRows(
58  ILIAS\UI\Component\Table\DataRowBuilder $row_builder,
59  array $visible_column_ids,
60  Range $range,
61  Order $order,
62  ?array $filter_data,
63  ?array $additional_parameters,
64  ): Generator {
65  $records = $this->getRecords($range, $order);
66  foreach ($records as $record) {
67  yield $row_builder->buildDataRow((string) $record['id'], $record);
68  }
69  }
70 
71  public function initRecords(): void
72  {
73  if ($this->records === null) {
74  $this->records = [];
75  $mapping_instance = ilLDAPRoleGroupMappingSettings::_getInstanceByServerId($this->server_id);
76  $mappings = $mapping_instance->getMappings();
77  foreach ($mappings as $item) {
78  $title = $this->object_data_cache->lookupTitle($this->rbac_review->getObjectOfRole((int) $item['role']));
79  $this->records[] = [
80  'id' => $item['mapping_id'],
81  'title' => ilStr::shortenTextExtended($title, 30, true),
82  'role' => $item['role_name'],
83  'dn' => $item['dn'],
84  'url' => $item['url'],
85  'member_attribute' => $item['member_attribute'],
86  'info' => ilLegacyFormElementsUtil::prepareFormOutput($item['info'])
87  ];
88  }
89  }
90  }
91 
92  public function getComponent(): DataTable
93  {
94  $query_params_namespace = ['ldap', 'role', 'mapping'];
95  $table_uri = $this->data_factory->uri($this->http_request->getUri()->__toString());
96  $url_builder = new URLBuilder($table_uri);
97  [$url_builder, $action_parameter_token, $row_id_token] = $url_builder->acquireParameters(
98  $query_params_namespace,
99  'table_action',
100  'mapping_ids'
101  );
102 
103  return $this->ui_factory->table()
104  ->data(
105  $this,
106  $this->lng->txt('mail_templates'),
107  $this->getColumns()
108  )
109  ->withTitle($this->lng->txt('ldap_role_group_assignments'))
110  ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token))
111  ->withId(
112  'ldap_role_mapping_table'
113  )
114  ->withOrder(new Order('title', Order::DESC))
115  ->withRequest($this->http_request);
116  }
117 
118  public function getTotalRowCount(?array $filter_data, ?array $additional_parameters): ?int
119  {
120  $this->initRecords();
121 
122  return count((array) $this->records);
123  }
124 
136  private function getRecords(Range $range, Order $order): array
137  {
138  $this->initRecords();
139  $records = $this->records;
140 
141  if ($order) {
142  $records = $this->orderRecords($records, $order);
143  }
144 
145  if ($range) {
146  $records = $this->limitRecords($records, $range);
147  }
148 
149  return $records;
150  }
151 
155  public function getActions(URLBuilder $url_builder, URLBuilderToken $action_parameter_token, URLBuilderToken $row_id_token): array
156  {
157  $actions = [];
158  $actions['delete'] = $this->ui_factory->table()->action()->multi(
159  $this->lng->txt('delete'),
160  $url_builder->withParameter($action_parameter_token, 'confirmDeleteRoleMapping'),
161  $row_id_token
162  );
163 
164  $actions['copy'] = $this->ui_factory->table()->action()->single(
165  $this->lng->txt('copy'),
166  $url_builder->withParameter($action_parameter_token, 'addRoleMapping'),
167  $row_id_token
168  );
169 
170  $actions['edit'] = $this->ui_factory->table()->action()->single(
171  $this->lng->txt('edit'),
172  $url_builder->withParameter($action_parameter_token, 'editRoleMapping'),
173  $row_id_token
174  );
175 
176  return $actions;
177  }
178 
199  private function limitRecords(array $records, Range $range): array
200  {
201  return array_slice($records, $range->getStart(), $range->getLength());
202  }
203 
224  private function orderRecords(array $records, Order $order): array
225  {
226  [$order_field, $order_direction] = $order->join(
227  [],
228  fn($ret, $key, $value) => [$key, $value]
229  );
230  usort($records, static fn(array $left, array $right): int => ilStr::strCmp(
231  $left[$order_field] ?? '',
232  $right[$order_field] ?? ''
233  ));
234 
235  if ($order_direction === Order::DESC) {
236  $records = array_reverse($records);
237  }
238 
239  return $records;
240  }
241 
245  private function getColumns(): array
246  {
247  return [
248  'title' => $this->ui_factory->table()->column()->text($this->lng->txt('title')),
249  'role' => $this->ui_factory->table()->column()->text($this->lng->txt('obj_role')),
250  'dn' => $this->ui_factory->table()->column()->text($this->lng->txt('ldap_group_dn')),
251  'url' => $this->ui_factory->table()->column()->text($this->lng->txt('ldap_server')),
252  'member_attribute' => $this->ui_factory->table()->column()->text($this->lng->txt('ldap_group_member')),
253  'info' => $this->ui_factory->table()->column()->text($this->lng->txt('ldap_info_text')),
254  ];
255  }
256 }
orderRecords(array $records, Order $order)
join($init, callable $fn)
Definition: Order.php:75
Interface Observer Contains several chained tasks and infos about them.
getTotalRowCount(?array $filter_data, ?array $additional_parameters)
Mainly for the purpose of pagination-support, it is important to know about the total number of recor...
static prepareFormOutput($a_str, bool $a_strip=false)
getRows(ILIAS\UI\Component\Table\DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, ?array $filter_data, ?array $additional_parameters,)
This is called by the table to retrieve rows; map data-records to rows using the $row_builder e...
Both the subject and the direction need to be specified when expressing an order. ...
Definition: Order.php:28
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static strCmp(string $a, string $b)
Definition: class.ilStr.php:87
static _getInstanceByServerId(int $a_server_id)
Get instance of class.
withParameter(URLBuilderToken $token, string|array $value)
Change an acquired parameter&#39;s value if the supplied token is valid.
Definition: URLBuilder.php:166
global $lng
Definition: privfeed.php:31
static shortenTextExtended(string $a_str, int $a_len, bool $a_dots=false, bool $a_next_blank=false, bool $a_keep_extension=false)
getRecords(Range $range, Order $order)
getActions(URLBuilder $url_builder, URLBuilderToken $action_parameter_token, URLBuilderToken $row_id_token)
URLBuilder.
Definition: URLBuilder.php:40
A simple class to express a naive range of whole positive numbers.
Definition: Range.php:28
__construct(private readonly ServerRequestInterface $http_request, private readonly ilLanguage $lng, private readonly UIFactory $ui_factory, private readonly DataFactory $data_factory, private readonly int $server_id, private readonly ilObjectDataCache $object_data_cache, private readonly ilRbacReview $rbac_review,)
limitRecords(array $records, Range $range)