ILIAS  trunk Revision v12.0_alpha-1613-gae4c99ebb18
TableActionModalTrait.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
28use ILIAS\UI\Renderer as UIRenderer;
29
34{
35 public const string SHOW_MODAL_ACTION = 'showModalAction';
36
37 public const string SUBMIT_MODAL_ACTION = 'submitModalAction';
38
39 private readonly HttpService $http;
40
41 private readonly UIRenderer $ui_renderer;
42
43 public function onExecute(
44 URLBuilder $url_builder,
45 URLBuilderToken $row_id_token,
46 URLBuilderToken $action_token,
47 URLBuilderToken $action_type_token
48 ): ?Modal {
49 return match($this->http->resolveRowParameter($action_type_token->getName())) {
50 self::SUBMIT_MODAL_ACTION => $this->submit($url_builder, $row_id_token, $action_token, $action_type_token),
51 default => $this->showModal($url_builder, $row_id_token, $action_token, $action_type_token),
52 };
53 }
54
55 protected function showModal(
56 URLBuilder $url_builder,
57 URLBuilderToken $row_id_token,
58 URLBuilderToken $action_token,
59 URLBuilderToken $action_type_token,
60 ): void {
61 $selected_ids = $this->http->resolveRowParameters($row_id_token->getName());
62 $all_records_selected = $selected_ids === HttpService::ALL_OBJECTS;
63
64 if ($all_records_selected) {
65 $selected_ids = null;
66 } else {
67 $selected_ids = is_string($selected_ids) ? [] : $selected_ids;
68 }
69
70 $selected_records = array_filter(
71 $this->resolveRecords($selected_ids),
72 fn(mixed $record): bool => $this->allowActionForRecord($record)
73 );
74
75 $this->http->sendAsync(
76 $this->ui_renderer->renderAsync(
77 $this->getModal(
78 $url_builder
79 ->withParameter($row_id_token, $all_records_selected ? HttpService::ALL_OBJECTS : ($selected_ids ?? []))
80 ->withParameter($action_token, $this->getActionId())
81 ->withParameter($action_type_token, self::SUBMIT_MODAL_ACTION),
82 $selected_records,
83 $all_records_selected
84 )
85 )
86 );
87 }
88
89 protected function submit(
90 URLBuilder $url_builder,
91 URLBuilderToken $row_id_token,
92 URLBuilderToken $action_token,
93 URLBuilderToken $action_type_token,
94 ): ?Modal {
95 $selected_ids = $this->http->resolveRowParameters($row_id_token->getName());
96 $all_records_selected = $selected_ids === HttpService::ALL_OBJECTS;
97
98 if ($all_records_selected) {
99 $selected_ids = null;
100 } else {
101 $selected_ids = is_string($selected_ids) ? [] : $selected_ids;
102 }
103
104 if (!$all_records_selected && $selected_ids === []) {
106 return null;
107 }
108
109 $selected_records = array_filter(
110 $this->resolveRecords($selected_ids),
111 fn(mixed $record): bool => $this->allowActionForRecord($record)
112 );
113
114 if ($selected_records === []) {
116 return null;
117 }
118
119 return $this->onSubmit(
120 $url_builder
121 ->withParameter($row_id_token, $all_records_selected ? HttpService::ALL_OBJECTS : $selected_ids)
122 ->withParameter($action_token, $this->getActionId())
123 ->withParameter($action_type_token, self::SUBMIT_MODAL_ACTION),
124 $selected_records,
125 $all_records_selected
126 );
127 }
128
129 protected function showErrorMessage(string $message): void
130 {
131 $this->tpl->setOnScreenMessage(ilGlobalTemplateInterface::MESSAGE_TYPE_FAILURE, $message, true);
132 }
133
134 protected function showSuccessMessage(string $message): void
135 {
136 $this->tpl->setOnScreenMessage(ilGlobalTemplateInterface::MESSAGE_TYPE_SUCCESS, $message, true);
137 }
138
139 public function getSelectionErrorMessage(): ?string
140 {
141 return $this->lng->txt('no_valid_selection');
142 }
143
147 abstract protected function getModal(
148 URLBuilder $url_builder,
149 array $selected_records,
150 bool $all_records_selected
151 ): ?Modal;
152
156 abstract protected function onSubmit(
157 URLBuilder $url_builder,
158 array $selected_records,
159 bool $all_records_selected
160 ): ?Modal;
161
162 abstract protected function resolveRecords(?array $selected_ids = null): array;
163}
withParameter(URLBuilderToken $token, string|array $value)
Change an acquired parameter's value if the supplied token is valid.
Definition: URLBuilder.php:166
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This describes commonalities between the different modals.
Definition: Modal.php:35
An entity that renders components to a string output.
Definition: Renderer.php:31
showModal(URLBuilder $url_builder, URLBuilderToken $row_id_token, URLBuilderToken $action_token, URLBuilderToken $action_type_token,)
getModal(URLBuilder $url_builder, array $selected_records, bool $all_records_selected)
resolveRecords(?array $selected_ids=null)
trait TableActionModalTrait
@template RecordType
onExecute(URLBuilder $url_builder, URLBuilderToken $row_id_token, URLBuilderToken $action_token, URLBuilderToken $action_type_token)
submit(URLBuilder $url_builder, URLBuilderToken $row_id_token, URLBuilderToken $action_token, URLBuilderToken $action_type_token,)
onSubmit(URLBuilder $url_builder, array $selected_records, bool $all_records_selected)
static http()
Fetches the global http state from ILIAS.