ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
MailAttachmentTableGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
23use ilStr;
24use ilUtil;
25
27{
28 private readonly \ILIAS\UI\URLBuilder $url_builder;
29 private readonly \ILIAS\UI\URLBuilderToken $action_parameter_token;
30 private readonly \ILIAS\UI\URLBuilderToken $row_id_token;
31 private readonly \ILIAS\Data\Factory $data_factory;
32
36 public function __construct(
37 private readonly \ilMailAttachmentGUI $parent_gui,
38 private readonly \ilObjUser $actor,
39 private readonly array $records,
40 private readonly \ILIAS\UI\Factory $ui_factory,
41 private readonly \ILIAS\UI\Renderer $ui_renderer,
42 private readonly \ilLanguage $lng,
43 private readonly \ilCtrlInterface $ctrl,
44 private readonly \Psr\Http\Message\ServerRequestInterface $http_request,
45 private readonly \ILIAS\Data\Factory $df,
46 private readonly string $parent_cmd,
47 private readonly AttachmentManagement $mode
48 ) {
49 $form_action = $this->df->uri(
50 ilUtil::_getHttpPath() . '/' .
51 $this->ctrl->getLinkTarget($this->parent_gui, $this->parent_cmd)
52 );
53
54 [
58 ] = (new \ILIAS\UI\URLBuilder($form_action))->acquireParameters(
59 ['mail', 'attachments'],
60 'table_action',
61 'filename'
62 );
63
64 $this->data_factory = new \ILIAS\Data\Factory();
65 }
66
67 public function get(): \ILIAS\UI\Component\Table\Data
68 {
69 return $this->ui_factory
70 ->table()
71 ->data(
72 $this,
73 $this->lng->txt('attachment'),
74 $this->getColumnDefinition(),
75 )
76 ->withId(str_replace('\\', '', self::class) . '_' . $this->mode->name)
77 ->withOrder(new \ILIAS\Data\Order('filename', \ILIAS\Data\Order::ASC))
78 ->withRange(new \ILIAS\Data\Range(0, 50))
79 ->withActions($this->getActions())
80 ->withRequest($this->http_request);
81 }
82
86 private function getColumnDefinition(): array
87 {
88 if ((int) $this->actor->getTimeFormat() === \ilCalendarSettings::TIME_FORMAT_12) {
89 $date_format = $this->data_factory->dateFormat()->withTime12($this->actor->getDateFormat());
90 } else {
91 $date_format = $this->data_factory->dateFormat()->withTime24($this->actor->getDateFormat());
92 }
93
94 return [
95 'filename' => $this->ui_factory
96 ->table()
97 ->column()
98 ->text($this->lng->txt('mail_file_name'))
99 ->withIsSortable(true),
100 'filesize' => $this->ui_factory
101 ->table()
102 ->column()
103 ->text($this->lng->txt('mail_file_size'))
104 ->withIsSortable(true),
105 'filecreatedate' => $this->ui_factory
106 ->table()
107 ->column()
108 ->date($this->lng->txt('create_date'), $date_format)
109 ->withIsSortable(true),
110 ];
111 }
112
116 private function getActions(): array
117 {
118 $actions = [];
119
120 if ($this->mode === AttachmentManagement::CONSUME) {
121 $actions['saveAttachments'] = $this->ui_factory->table()->action()->multi(
122 $this->lng->txt('mail_adopt_selected_attachements'),
123 $this->url_builder->withParameter(
124 $this->action_parameter_token,
125 self::TABLE_ACTION_SAVE_ATTACHMENTS
126 ),
127 $this->row_id_token
128 );
129 } else {
130 $actions['deleteAttachments'] = $this->ui_factory->table()->action()->multi(
131 $this->lng->txt('delete'),
132 $this->url_builder->withParameter(
133 $this->action_parameter_token,
134 self::TABLE_CONFIRM_DELETE_ATTACHMENTS
135 ),
136 $this->row_id_token
137 );
138 }
139
140 return $actions;
141 }
142
146 private function getRecords(\ILIAS\Data\Range $range, \ILIAS\Data\Order $order): array
147 {
148 $records = $this->records;
149
150 [$order_field, $order_direction] = $order->join([], static fn($ret, $key, $value) => [$key, $value]);
151
152 usort($records, static function (array $left, array $right) use ($order_field): int {
153 if ($order_field === 'filename') {
154 return ilStr::strCmp($left[$order_field], $right[$order_field]);
155 }
156
157 return $left[$order_field] <=> $right[$order_field];
158 });
159
160 if ($order_direction === 'DESC') {
161 $records = array_reverse($records);
162 }
163
164 $records = \array_slice($records, $range->getStart(), $range->getLength());
165
166 return $records;
167 }
168
169 public function getRows(
170 \ILIAS\UI\Component\Table\DataRowBuilder $row_builder,
171 array $visible_column_ids,
173 \ILIAS\Data\Order $order,
174 mixed $additional_viewcontrol_data,
175 mixed $filter_data,
176 mixed $additional_parameters
177 ): \Generator {
178 foreach ($this->getRecords($range, $order) as $item) {
179 $record = [
180 'filename' => $item['filename'],
181 'filesize' => ilUtil::formatSize($item['filesize'], 'long'),
182 'filecreatedate' => (new \DateTimeImmutable('@' . $item['filecreatedate']))->setTimezone(
183 new \DateTimeZone($this->actor->getTimeZone())
184 )
185 ];
186
187 yield $row_builder
188 ->buildDataRow(urlencode($record['filename']), $record);
189 }
190 }
191
192 public function getTotalRowCount(
193 mixed $additional_viewcontrol_data,
194 mixed $filter_data,
195 mixed $additional_parameters
196 ): ?int {
197 return \count($this->records);
198 }
199}
Builds data types.
Definition: Factory.php:36
Both the subject and the direction need to be specified when expressing an order.
Definition: Order.php:29
A simple class to express a naive range of whole positive numbers.
Definition: Range.php:29
readonly ILIAS UI URLBuilderToken $row_id_token
__construct(private readonly \ilMailAttachmentGUI $parent_gui, private readonly \ilObjUser $actor, private readonly array $records, private readonly \ILIAS\UI\Factory $ui_factory, private readonly \ILIAS\UI\Renderer $ui_renderer, private readonly \ilLanguage $lng, private readonly \ilCtrlInterface $ctrl, private readonly \Psr\Http\Message\ServerRequestInterface $http_request, private readonly \ILIAS\Data\Factory $df, private readonly string $parent_cmd, private readonly AttachmentManagement $mode)
getRows(\ILIAS\UI\Component\Table\DataRowBuilder $row_builder, array $visible_column_ids, \ILIAS\Data\Range $range, \ILIAS\Data\Order $order, mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
readonly ILIAS UI URLBuilderToken $action_parameter_token
getTotalRowCount(mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
Mainly for the purpose of pagination-support, it is important to know about the total number of recor...
getRecords(\ILIAS\Data\Range $range, \ILIAS\Data\Order $order)
Definition: UI.php:24
language handling
User class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: class.ilStr.php:20
static strCmp(string $a, string $b)
Definition: class.ilStr.php:87
Util class various functions, usage as namespace.
static formatSize(int $size, string $a_mode='short', ?ilLanguage $a_lng=null)
Returns the specified file size value in a human friendly form.
static _getHttpPath()
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
An entity that renders components to a string output.
Definition: Renderer.php:31
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
global $lng
Definition: privfeed.php:31