ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilMMSubItemGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
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);
58  case self::CMD_CREATE:
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);
68  case self::CMD_UPDATE:
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);
73  case self::CMD_APPLY_FILTER:
74  $this->access->checkAccessAndThrowException('visible,read');
75  $this->applyFilter();
76  break;
77  case self::CMD_RESET_FILTER:
78  $this->access->checkAccessAndThrowException('visible,read');
79  $this->resetFilter();
80  break;
81  case self::CMD_VIEW_SUB_ITEMS:
82  $this->access->checkAccessAndThrowException('visible,read');
83  $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, $cmd);
84 
85  return $this->index();
86  case self::CMD_SAVE_TABLE:
87  $this->access->checkAccessAndThrowException('write');
88  $this->saveTable();
89  break;
90  case self::CMD_CONFIRM_DELETE:
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();
95  case self::CMD_CONFIRM_MOVE:
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 }
Class ilMMAbstractItemGUI.
$c
Definition: cli.php:38
Class ilMMSubItemTableGUI.
global $DIC
Definition: feed.php:28
Class ilMMTopItemGUI ilMMSubItemGUI: ilObjMainMenuGUI ilMMSubItemGUI: ilMMItemTranslationGUI.
Class ilMMSubitemFormGUI.
Class ilMMItemTranslationGUI.
ilMMItemRepository $repository
dispatchCommand(string $cmd)
$i
Definition: metadata.php:41
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
determineCommand(string $standard, string $delete)