ILIAS  release_8 Revision v8.24
class.ilMMSubItemGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use ILIAS\GlobalScreen\Scope\MainMenu\Collector\Renderer\Hasher;
22
30{
31 use Hasher;
32
33 public const CMD_VIEW_SUB_ITEMS = 'subtab_subitems';
34 public const CMD_ADD = 'subitem_add';
35 public const CMD_CREATE = 'subitem_create';
36 public const CMD_CONFIRM_MOVE = 'confirm_move';
37 public const CMD_MOVE = 'move';
38 public const CMD_DELETE = 'delete';
39 public const CMD_CONFIRM_DELETE = 'subitem_confirm_delete';
40 public const CMD_EDIT = 'subitem_edit';
41 public const CMD_TRANSLATE = 'subitem_translate';
42 public const CMD_UPDATE = 'subitem_update';
43 public const CMD_SAVE_TABLE = 'save_table';
44 public const CMD_APPLY_FILTER = 'applyFilter';
45 public const CMD_RESET_FILTER = 'resetFilter';
46 public const CMD_RENDER_INTERRUPTIVE = 'render_interruptive_modal';
47 public const CMD_CANCEL = 'cancel';
48
49 private function dispatchCommand(string $cmd): string
50 {
51 global $DIC;
52 switch ($cmd) {
53 case self::CMD_ADD:
54 $this->access->checkAccessAndThrowException('write');
55 $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, ilMMSubItemGUI::CMD_VIEW_SUB_ITEMS, true, self::class);
56
57 return $this->add($DIC);
59 $this->access->checkAccessAndThrowException('write');
60 $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, ilMMSubItemGUI::CMD_VIEW_SUB_ITEMS, true, self::class);
61
62 return $this->create($DIC);
63 case self::CMD_EDIT:
64 $this->access->checkAccessAndThrowException('write');
65 $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, ilMMSubItemGUI::CMD_VIEW_SUB_ITEMS, true, self::class);
66
67 return $this->edit($DIC);
69 $this->access->checkAccessAndThrowException('write');
70 $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, ilMMSubItemGUI::CMD_VIEW_SUB_ITEMS, true, self::class);
71
72 return $this->update($DIC);
74 $this->access->checkAccessAndThrowException('visible,read');
75 $this->applyFilter();
76 break;
78 $this->access->checkAccessAndThrowException('visible,read');
79 $this->resetFilter();
80 break;
82 $this->access->checkAccessAndThrowException('visible,read');
83 $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, $cmd);
84
85 return $this->index();
87 $this->access->checkAccessAndThrowException('write');
88 $this->saveTable();
89 break;
91 $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, ilMMSubItemGUI::CMD_VIEW_SUB_ITEMS, true, self::class);
92 $this->access->checkAccessAndThrowException('write');
93
94 return $this->confirmDelete();
96 $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, ilMMSubItemGUI::CMD_VIEW_SUB_ITEMS, true, self::class);
97 $this->access->checkAccessAndThrowException('write');
98
99 return $this->confirmMove();
100 case self::CMD_MOVE:
101 $this->access->checkAccessAndThrowException('write');
102 $this->move();
103 break;
104 case self::CMD_DELETE:
105 $this->access->checkAccessAndThrowException('write');
106 $this->delete();
107 break;
108 case self::CMD_CANCEL:
109 $this->cancel();
110 break;
111 case self::CMD_FLUSH:
112 $this->access->checkAccessAndThrowException('write');
113 $this->flush();
114 break;
115 }
116
117 return "";
118 }
119
120 private function saveTable(): void
121 {
122 global $DIC;
123 $r = $DIC->http()->request()->getParsedBody();
124 foreach ($r[self::IDENTIFIER] as $identification_string => $data) {
125 $item = $this->repository->getItemFacadeForIdentificationString($this->unhash($identification_string));
126 $position = (int) $data['position'];
127 $item->setPosition($position);
128 $item->setActiveStatus(isset($data['active']) && $data['active']);
129 $item->setParent($this->unhash((string) $data['parent']));
130 $this->repository->updateItem($item);
131 }
132 $this->cancel();
133 }
134
135 public function executeCommand(): void
136 {
137 $next_class = $this->ctrl->getNextClass();
138
139 if ('' === $next_class) {
140 $cmd = $this->determineCommand(self::CMD_VIEW_SUB_ITEMS, self::CMD_DELETE);
141 $this->tpl->setContent($this->dispatchCommand($cmd));
142
143 return;
144 }
145
146 switch ($next_class) {
147 case strtolower(ilMMItemTranslationGUI::class):
148 $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, self::CMD_VIEW_SUB_ITEMS, true, $this->ctrl->getCallHistory()[2][ilCtrlInterface::PARAM_CMD_CLASS] ?? '');
149 $g = new ilMMItemTranslationGUI($this->getMMItemFromRequest(), $this->repository);
150 $this->ctrl->forwardCommand($g);
151 break;
152 default:
153 break;
154 }
155 }
156
162 private function add($DIC): string
163 {
164 $f = new ilMMSubitemFormGUI($DIC->ctrl(), $DIC->ui()->factory(), $DIC->ui()->renderer(), $this->lng, $this->repository->getItemFacade(), $this->repository);
165
166 return $f->getHTML();
167 }
168
174 private function create($DIC): string
175 {
176 $f = new ilMMSubitemFormGUI($DIC->ctrl(), $DIC->ui()->factory(), $DIC->ui()->renderer(), $this->lng, $this->repository->getItemFacade(), $this->repository);
177 if ($f->save()) {
178 $this->cancel();
179 }
180
181 return $f->getHTML();
182 }
183
189 private function edit($DIC): string
190 {
191 $f = new ilMMSubitemFormGUI($DIC->ctrl(), $DIC->ui()->factory(), $DIC->ui()->renderer(), $this->lng, $this->getMMItemFromRequest(), $this->repository);
192
193 return $f->getHTML();
194 }
195
201 private function update($DIC): string
202 {
203 $f = new ilMMSubitemFormGUI($DIC->ctrl(), $DIC->ui()->factory(), $DIC->ui()->renderer(), $this->lng, $this->getMMItemFromRequest(), $this->repository);
204 if ($f->save()) {
205 $this->cancel();
206 }
207
208 return $f->getHTML();
209 }
210
211 private function applyFilter(): void
212 {
213 $table = new ilMMSubItemTableGUI($this, $this->repository, $this->access);
214 $table->writeFilterToSession();
215
216 $this->cancel();
217 }
218
219 private function resetFilter(): void
220 {
221 $table = new ilMMSubItemTableGUI($this, $this->repository, $this->access);
222 $table->resetFilter();
223 $table->resetOffset();
224
225 $this->cancel();
226 }
227
231 private function index(): string
232 {
233 // ADD NEW
234 if ($this->access->hasUserPermissionTo('write')) {
236 $b->setUrl($this->ctrl->getLinkTarget($this, ilMMSubItemGUI::CMD_ADD));
237 $b->setCaption($this->lng->txt(ilMMSubItemGUI::CMD_ADD), false);
238
239 $this->toolbar->addButtonInstance($b);
240
241 // REMOVE LOST ITEMS
242 if ($this->repository->hasLostItems()) {
244 $b->setUrl($this->ctrl->getLinkTarget($this, self::CMD_FLUSH));
245 $b->setCaption($this->lng->txt(self::CMD_FLUSH), false);
246 $this->toolbar->addButtonInstance($b);
247 }
248 }
249
250 // TABLE
251 $table = new ilMMSubItemTableGUI($this, $this->repository, $this->access);
252 $table->setShowRowsSelector(false);
253
254 return $table->getHTML();
255 }
256
257 private function delete(): void
258 {
259 $item = $this->getMMItemFromRequest();
260 if ($item->isDeletable()) {
261 $this->repository->deleteItem($item);
262 }
263
264 $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_subitem_deleted"), true);
265 $this->cancel();
266 }
267
268 protected function cancel(): void
269 {
270 $this->ctrl->redirectByClass(self::class, self::CMD_VIEW_SUB_ITEMS);
271 }
272
277 private function confirmDelete(): string
278 {
279 $this->ctrl->saveParameterByClass(self::class, self::IDENTIFIER);
280 $i = $this->getMMItemFromRequest();
281 $c = new ilConfirmationGUI();
282 $c->addItem(self::IDENTIFIER, $this->hash($i->getId()), $i->getDefaultTitle());
283 $c->setFormAction($this->ctrl->getFormActionByClass(self::class));
284 $c->setConfirm($this->lng->txt(self::CMD_DELETE), self::CMD_DELETE);
285 $c->setCancel($this->lng->txt(self::CMD_CANCEL), self::CMD_CANCEL);
286 $c->setHeaderText($this->lng->txt(self::CMD_CONFIRM_DELETE));
287
288 return $c->getHTML();
289 }
290
295 private function confirmMove(): string
296 {
297 $this->ctrl->saveParameterByClass(self::class, self::IDENTIFIER);
298 $i = $this->getMMItemFromRequest();
299 $c = new ilConfirmationGUI();
300 $c->addItem(self::IDENTIFIER, $this->hash($i->getId()), $i->getDefaultTitle());
301 $c->setFormAction($this->ctrl->getFormActionByClass(self::class));
302 $c->setConfirm($this->lng->txt(self::CMD_MOVE), self::CMD_MOVE);
303 $c->setCancel($this->lng->txt(self::CMD_CANCEL), self::CMD_CANCEL);
304 $c->setHeaderText($this->lng->txt(self::CMD_CONFIRM_MOVE));
305
306 return $c->getHTML();
307 }
308
309 private function move(): void
310 {
311 $item = $this->getMMItemFromRequest();
312 if ($item->isInterchangeable()) {
313 $item->setParent('');
314 $this->repository->updateItem($item);
315 }
316
317 $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_moved"), true);
318 $this->cancel();
319 }
320}
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilMMAbstractItemGUI.
determineCommand(string $standard, string $delete)
Class ilMMItemTranslationGUI.
Class ilMMTopItemGUI @ilCtrl_IsCalledBy ilMMSubItemGUI: ilObjMainMenuGUI @ilCtrl_Calls ilMMSubItemGUI...
dispatchCommand(string $cmd)
Class ilMMSubItemTableGUI.
Class ilMMSubitemFormGUI.
$c
Definition: cli.php:38
global $DIC
Definition: feed.php:28
$i
Definition: metadata.php:41