19declare(strict_types=1);
40use Psr\Http\Message\ServerRequestInterface;
47 private readonly ServerRequestInterface $http_request,
49 private readonly UIFactory $ui_factory,
50 private readonly DataFactory $data_factory,
52 private readonly
string $action,
55 private readonly
bool $has_permission_to_delete =
false,
64 array $visible_column_ids,
67 mixed $additional_viewcontrol_data,
69 mixed $additional_parameters
72 foreach ($records as $record) {
73 yield $row_builder->
buildDataRow((
string) $record[
'code_id'], $record);
77 public function getTableComponent(RegistrationFilterComponent $filter): DataTable
79 $query_params_namespace = [
'registration',
'codes'];
80 $table_uri = $this->data_factory->uri(ILIAS_HTTP_PATH .
'/' . $this->action);
83 [$url_builder, $action_parameter_token, $row_id_token] = $url_builder->acquireParameters(
84 $query_params_namespace,
89 return $this->ui_factory->table()
98 ->withFilter($filter->getFilterData()->getData())
100 ->withRequest($this->http_request)
101 ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token));
108 mixed $additional_viewcontrol_data,
110 mixed $additional_parameters
112 return $this->code_repository->getTotalCodeCount(
131 [$order_field, $order_direction] = $order->
join(
133 fn(array $ret,
string $key,
string $value): array => [$key, $value]
135 $filter = (
new CodeFilter())->withData($filter_data);
137 $codes_data = $this->code_repository->getCodesData(
146 $codes_data = $this->code_repository->getCodesData(
156 $date_format = $this->data_factory->dateFormat()->withTime12($this->actor->getDateFormat());
158 $date_format = $this->data_factory->dateFormat()->withTime24($this->actor->getDateFormat());
162 foreach ($this->rbac_review->getGlobalRoles() as $role_id) {
169 foreach ($codes_data as $k => $code) {
170 $result[$k][
'code'] = $code[
'code'];
171 $result[$k][
'code_id'] = (
int) $code[
'code_id'];
173 $result[$k][
'generated'] = (
new DateTimeImmutable(
'@' . $code[
'generated']))->setTimezone(
174 new DateTimeZone($this->actor->getTimeZone())
177 $result[$k][
'used'] = $date_format->applyTo(
178 (
new DateTimeImmutable(
'@' . $code[
'used']))->setTimezone(
179 new DateTimeZone($this->actor->getTimeZone())
183 $result[$k][
'used'] =
null;
187 $result[$k][
'role'] = $role_map[$code[
'role']] ?? $this->
lng->txt(
'deleted');
189 $result[$k][
'role'] =
'';
192 if (\is_string($code[
'role_local'])) {
194 foreach (explode(
';', $code[
'role_local']) as $role_id) {
200 if (\count($local)) {
202 $result[$k][
'role_local'] = implode(
'<br />', $local);
205 $result[$k][
'role_local'] =
'';
208 if ($code[
'alimit']) {
209 switch ($code[
'alimit']) {
211 $result[$k][
'alimit'] = $this->
lng->txt(
'reg_access_limitation_none');
215 $result[$k][
'alimit'] = $this->
lng->txt(
'reg_access_limitation_mode_absolute_target')
218 $code[
'alimitdt'] ===
null
220 : $this->actor->getDateFormat()->applyTo(
221 (
new DateTimeImmutable($code[
'alimitdt']))->setTimezone(
222 new DateTimeZone($this->actor->getTimeZone())
230 $limit = unserialize($code[
'alimitdt'], [
'allowed_classes' =>
false]);
231 if ((
int) $limit[
'd']) {
232 $limit_caption[] = (
int) $limit[
'd'] .
' ' . $this->
lng->txt(
'days');
234 if ((
int) $limit[
'm']) {
235 $limit_caption[] = (
int) $limit[
'm'] .
' ' . $this->
lng->txt(
'months');
237 if ((
int) $limit[
'y']) {
238 $limit_caption[] = (
int) $limit[
'y'] .
' ' . $this->
lng->txt(
'years');
240 if (\count($limit_caption)) {
241 $result[$k][
'alimit'] = $this->
lng->txt(
'reg_access_limitation_mode_relative_target') .
242 ': ' . implode(
', ', $limit_caption);
261 $this->ui_factory->table()->action()->multi(
262 $this->
lng->txt(
'registration_codes_export'),
263 $url_builder->withParameter($action_parameter_token,
'exportCodes'),
267 if ($this->has_permission_to_delete) {
268 $actions[] = $this->ui_factory->table()->action()->multi(
269 $this->
lng->txt(
'delete'),
270 $url_builder->
withParameter($action_parameter_token,
'deleteConfirmation'),
284 $date_format = $this->data_factory->dateFormat()->withTime12($this->actor->getDateFormat());
286 $date_format = $this->data_factory->dateFormat()->withTime24($this->actor->getDateFormat());
290 'code' => $this->ui_factory->table()->column()
291 ->text($this->
lng->txt(
'registration_code')),
292 'role' => $this->ui_factory->table()->column()
293 ->text($this->
lng->txt(
'registration_codes_roles')),
294 'role_local' => $this->ui_factory->table()->column()
295 ->text($this->
lng->txt(
'registration_codes_roles_local'))
296 ->withIsSortable(
false),
297 'alimit' => $this->ui_factory->table()->column()
298 ->text($this->
lng->txt(
'reg_access_limitations'))
299 ->withIsSortable(
false),
300 'generated' => $this->ui_factory->table()->column()
301 ->date($this->
lng->txt(
'registration_generated'), $date_format),
302 'used' => $this->ui_factory->table()->column()
303 ->text($this->
lng->txt(
'registration_used')),
Builds a Color from either hex- or rgb values.
Both the subject and the direction need to be specified when expressing an order.
join($init, callable $fn)
A simple class to express a naive range of whole positive numbers.
getRecords(Range $range, Order $order, ?array $filter_data)
__construct(private readonly ServerRequestInterface $http_request, private readonly ilLanguage $lng, private readonly UIFactory $ui_factory, private readonly DataFactory $data_factory, private readonly ilRbacReview $rbac_review, private readonly string $action, private readonly ilObjUser $actor, private readonly RegistrationCodeRepository $code_repository, private readonly bool $has_permission_to_delete=false,)
getRows(DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
getActions(URLBuilder $url_builder, URLBuilderToken $action_parameter_token, URLBuilderToken $row_id_token)
getTotalRowCount(mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
withParameter(URLBuilderToken $token, string|array $value)
Change an acquired parameter's value if the supplied token is valid.
Stores all calendar relevant settings.
Class ilObject Basic functions for all objects.
static _lookupTitle(int $obj_id)
class ilRbacReview Contains Review functions of core Rbac.
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
A Column describes the form of presentation for a certain aspect of data, i.e.
buildDataRow(string $id, array $record)
This describes a Data Table.