19declare(strict_types=1);
45use Psr\Http\Message\RequestInterface;
46use Psr\Http\Message\ServerRequestInterface;
55 private readonly ServerRequestInterface|RequestInterface
$request;
67 private readonly Closure $criterion_as_component,
69 private readonly
UI $ui,
71 private readonly
object $gui,
72 private readonly ?
EditLinks $edit_links =
null,
73 ServerRequestInterface|RequestInterface|
null $request =
null,
85 $this->usr_timezone = new \DateTimeZone($this->
user->getTimeZone());
92 $uiTable = $this->
ui->create()->table();
95 $date_format = $this->data_factory->dateFormat()->withTime12($this->
user->getDateFormat());
97 $date_format = $this->data_factory->dateFormat()->withTime24($this->
user->getDateFormat());
100 $table = $uiTable->ordering(
102 (
new URI((
string) $this->request->getUri()))->withParameter(
'cmd',
'saveOrder'),
103 $this->ui->txt(
'tbl_docs_title'),
105 'title' => $uiTable->column()->text($this->ui->txt(
'tbl_docs_head_title')),
106 'created' => $uiTable->column()->date($this->ui->txt(
'tbl_docs_head_created'), $date_format),
107 'change' => $uiTable->column()->date($this->ui->txt(
'tbl_docs_head_last_change'), $date_format),
108 'criteria' => $uiTable->column()->text($this->ui->txt(
'tbl_docs_head_criteria')),
111 ->withId(
'legalDocsTable')
112 ->withRequest($this->request);
114 if ($this->edit_links) {
123 array $visible_column_ids
125 foreach ($this->
repository->all() as $document) {
132 $criterion_components = [];
133 foreach ($document->
criteria() as $criterion) {
134 $criterion_components[] = $this->
ui->create()->legacy()->content(
'<div style="display: flex; gap: 1rem;">');
135 $criterion_components[] = $this->criterionName($criterion);
137 if ($this->edit_links) {
138 $delete_modal = $this->
ui->create()->modal()->interruptive(
139 $this->
ui->txt(
'doc_detach_crit_confirm_title'),
140 $this->ui->txt(
'doc_sure_detach_crit'),
141 $this->edit_links->deleteCriterion($document, $criterion)
144 $dropdown = $this->
ui->create()->dropdown()->standard([
145 $this->
ui->create()->button()->shy(
146 $this->ui->txt(
'edit'),
147 $this->edit_links->editCriterion($document, $criterion)
149 $this->ui->create()->button()->shy(
150 $this->ui->txt(
'delete'),
152 )->withOnClick($delete_modal->getShowSignal())
155 $this->modals[] = $delete_modal;
156 $criterion_components[] = $dropdown;
159 $criterion_components[] = $this->
ui->create()->legacy()->content(
'</div>');
163 'id' => $document->
id(),
164 'title' => $this->ui_renderer->render($this->
modal->create($document->
content())),
165 'created' => $document->
meta()->creation()->time()->setTimezone($this->usr_timezone),
166 'change' => $document->
meta()->lastModification()->time()->setTimezone($this->usr_timezone),
167 'criteria' => $this->ui_renderer->render($criterion_components),
174 return ($this->criterion_as_component)($criterion->
content());
178 mixed $additional_viewcontrol_data,
180 mixed $additional_parameters
189 $html = $this->ui_renderer->render($this->table);
191 return $html . $this->ui_renderer->render([...$this->
modal->popComponents(), ...$this->modals]);
200 self::CMD_DELETE_DOCUMENTS => $this->buildTableAction(self::CMD_DELETE_DOCUMENTS, $this->
ui->txt(
'delete'),
true),
201 self::CMD_EDIT_DOCUMENT => $this->buildTableAction(self::CMD_EDIT_DOCUMENT, $this->
ui->txt(
'edit')),
202 self::CMD_ADD_CRITERION => $this->buildTableAction(
203 self::CMD_ADD_CRITERION,
204 $this->
ui->txt(
'tbl_docs_action_add_criterion')
206 self::CMD_DELETE_DOCUMENT => $this->buildTableAction(self::CMD_DELETE_DOCUMENT, $this->
ui->txt(
'delete')),
210 private function buildTableAction(
string $cmd,
string $title,
bool $multi =
false):
Single|
Multi
212 $uri = $this->data_factory->uri(
213 ILIAS_HTTP_PATH .
'/' . $this->
ctrl->getLinkTarget($this->gui, $cmd)
223 $action_parameter_token,
225 ] = (
new URLBuilder($uri))->acquireParameters(
232 return $this->
ui->create()->table()->action()->multi(
234 $url_builder->withParameter($action_parameter_token, $cmd),
239 return $this->
ui->create()->table()->action()->single(
241 $url_builder->withParameter($action_parameter_token, $cmd),
The scope of this class is split ilias-conform URI's into components.
readonly Factory $data_factory
readonly Renderer $ui_renderer
__construct(private readonly Closure $criterion_as_component, private readonly DocumentRepository $repository, private readonly UI $ui, private readonly DocumentModal $modal, private readonly object $gui, private readonly ?EditLinks $edit_links=null, ServerRequestInterface|RequestInterface|null $request=null, ?Factory $data_factory=null, ?ilCtrlInterface $ctrl=null, ?Renderer $ui_renderer=null, ?ilObjUser $user=null)
buildTableRow(OrderingRowBuilder $row_builder, Document $document)
const CMD_DELETE_DOCUMENT
readonly ServerRequestInterface RequestInterface $request
getTotalRowCount(mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
readonly DateTimeZone $usr_timezone
getRows(OrderingRowBuilder $row_builder, array $visible_column_ids)
This is called by the (ordering-)table to retrieve rows; map data-records to rows using the $row_buil...
readonly ilCtrlInterface $ctrl
criterionName(Criterion $criterion)
const CMD_DELETE_DOCUMENTS
Stores all calendar relevant settings.
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
A component is the most general form of an entity in the UI.
buildOrderingRow(string $id, array $record)
This describes a Table to specify the order of its data (rows).
withActions(array $actions)
An entity that renders components to a string output.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
modal(string $title="", string $cancel_label="")