ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilMMTopItemGUI.php
Go to the documentation of this file.
1 <?php
2 
5 
13 {
14  use Hasher;
15 
16  const CMD_VIEW_TOP_ITEMS = 'subtab_topitems';
17  const CMD_ADD = 'topitem_add';
18  const CMD_RESTORE = 'restore';
19  const CMD_CREATE = 'topitem_create';
20  const CMD_EDIT = 'topitem_edit';
21  const CMD_DELETE = 'topitem_delete';
22  const CMD_CONFIRM_DELETE = 'topitem_confirm_delete';
23  const CMD_TRANSLATE = 'topitem_translate';
24  const CMD_UPDATE = 'topitem_update';
25  const CMD_SAVE_TABLE = 'save_table';
26  const CMD_CANCEL = 'cancel';
27  const CMD_RENDER_INTERRUPTIVE = 'render_interruptive_modal';
28  const CMD_CONFIRM_RESTORE = 'confirmRestore';
29  const CMD_FLUSH = 'flush';
30 
31  private function dispatchCommand($cmd)
32  {
33  global $DIC;
34  switch ($cmd) {
35  case self::CMD_VIEW_TOP_ITEMS:
36  $this->access->checkAccessAndThrowException("visible,read");
37  $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, $cmd);
38 
39  return $this->index($DIC);
40  case self::CMD_ADD:
41  $this->access->checkAccessAndThrowException("write");
42  $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, self::CMD_VIEW_TOP_ITEMS, true, self::class);
43 
44  return $this->add($DIC);
45  case self::CMD_CREATE:
46  $this->access->checkAccessAndThrowException("write");
47  $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, self::CMD_VIEW_TOP_ITEMS, true, self::class);
48 
49  return $this->create($DIC);
50  case self::CMD_EDIT:
51  $this->access->checkAccessAndThrowException("write");
52  $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, self::CMD_VIEW_TOP_ITEMS, true, self::class);
53 
54  return $this->edit($DIC);
55  case self::CMD_UPDATE:
56  $this->access->checkAccessAndThrowException("write");
57  $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, self::CMD_VIEW_TOP_ITEMS, true, self::class);
58 
59  return $this->update($DIC);
60  case self::CMD_SAVE_TABLE:
61  $this->access->checkAccessAndThrowException("write");
62  $this->saveTable();
63 
64  break;
65  case self::CMD_CONFIRM_DELETE:
66  $this->access->checkAccessAndThrowException("write");
67 
68  return $this->confirmDelete();
69  case self::CMD_DELETE:
70  $this->access->checkAccessAndThrowException("write");
71  $this->delete();
72  break;
73  case self::CMD_CANCEL:
74  $this->cancel();
75  break;
76  case self::CMD_CONFIRM_RESTORE:
77  return $this->confirmRestore();
78  break;
79  case self::CMD_FLUSH:
80  $this->access->checkAccessAndThrowException('write');
81  $this->flush();
82  break;
83  case self::CMD_RESTORE:
84  $this->access->checkAccessAndThrowException("write");
85 
86  $this->restore();
87  break;
88  case self::CMD_RENDER_INTERRUPTIVE:
89  $this->access->checkAccessAndThrowException("write");
90  $this->renderInterruptiveModal();
91  break;
92  }
93 
94  return "";
95  }
96 
97  private function saveTable()
98  {
99  global $DIC;
100  $r = $DIC->http()->request()->getParsedBody();
101  foreach ($r[self::IDENTIFIER] as $identification_string => $data) {
102  $item = $this->repository->getItemFacadeForIdentificationString($identification_string);
103  $item->setPosition((int) $data['position']);
104  $item->setActiveStatus((bool) $data['active']);
105  $this->repository->updateItem($item);
106  }
107  $this->cancel();
108  }
109 
110  public function executeCommand()
111  {
112  $next_class = $this->ctrl->getNextClass();
113 
114  if ($next_class == '') {
115  $cmd = $this->determineCommand(self::CMD_VIEW_TOP_ITEMS, self::CMD_DELETE);
116  $this->tpl->setContent($this->dispatchCommand($cmd));
117 
118  return;
119  }
120 
121  switch ($next_class) {
122  case strtolower(ilMMItemTranslationGUI::class):
123  $this->tab_handling->initTabs(ilObjMainMenuGUI::TAB_MAIN, self::CMD_VIEW_TOP_ITEMS, true);
124  $g = new ilMMItemTranslationGUI($this->getMMItemFromRequest(), $this->repository);
125  $this->ctrl->forwardCommand($g);
126  break;
127  default:
128  break;
129  }
130  }
131 
135  private function index() : string
136  {
137  if ($this->access->hasUserPermissionTo('write')) {
138  // ADD NEW
140  $b->setCaption($this->lng->txt(self::CMD_ADD), false);
141  $b->setUrl($this->ctrl->getLinkTarget($this, self::CMD_ADD));
142  $this->toolbar->addButtonInstance($b);
143 
144  // REMOVE LOST ITEMS
145  if ($this->repository->hasLostItems()) {
147  $b->setUrl($this->ctrl->getLinkTarget($this, self::CMD_FLUSH));
148  $b->setCaption($this->lng->txt(self::CMD_FLUSH), false);
149  $this->toolbar->addButtonInstance($b);
150  }
151  }
152 
153  // TABLE
154  $table = new ilMMTopItemTableGUI($this, new ilMMItemRepository(), $this->access);
155  $table->setShowRowsSelector(false);
156 
157  return $table->getHTML();
158  }
159 
160  private function cancel()
161  {
162  $this->ctrl->redirectByClass(self::class, self::CMD_VIEW_TOP_ITEMS);
163  }
164 
165  private function doubleCancel()
166  {
167  $this->ctrl->redirectByClass(self::class, self::CMD_CANCEL);
168  }
169 
175  private function add(\ILIAS\DI\Container $DIC) : string
176  {
177  $f = new ilMMTopItemFormGUI($DIC->ctrl(), $DIC->ui()->factory(), $DIC->ui()->renderer(), $this->lng, $DIC->http(), $this->repository->getItemFacade(), $this->repository);
178 
179  return $f->getHTML();
180  }
181 
187  private function create(\ILIAS\DI\Container $DIC)
188  {
189  $f = new ilMMTopItemFormGUI($DIC->ctrl(), $DIC->ui()->factory(), $DIC->ui()->renderer(), $this->lng, $DIC->http(), $this->repository->getItemFacade(), $this->repository);
190  if ($f->save()) {
191  $this->cancel();
192  }
193 
194  return $f->getHTML();
195  }
196 
202  private function edit(\ILIAS\DI\Container $DIC) : string
203  {
204  $f = new ilMMTopItemFormGUI($DIC->ctrl(), $DIC->ui()->factory(), $DIC->ui()->renderer(), $this->lng, $DIC->http(), $this->getMMItemFromRequest(), $this->repository);
205 
206  return $f->getHTML();
207  }
208 
214  private function update(\ILIAS\DI\Container $DIC)
215  {
216  $item = $this->getMMItemFromRequest();
217  if ($item->isEditable()) {
218  $f = new ilMMTopItemFormGUI($DIC->ctrl(), $DIC->ui()->factory(), $DIC->ui()->renderer(), $this->lng, $DIC->http(), $item, $this->repository);
219  if ($f->save()) {
220  $this->cancel();
221  }
222 
223  return $f->getHTML();
224  }
225 
226  return "";
227  }
228 
229  private function delete()
230  {
231  $item = $this->getMMItemFromRequest();
232  if ($item->isDeletable()) {
233  $this->repository->deleteItem($item);
234  }
235  ilUtil::sendSuccess($this->lng->txt("msg_topitem_deleted"), true);
236  $this->cancel();
237  }
238 
243  private function confirmDelete() : string
244  {
245  $this->ctrl->saveParameterByClass(self::class, self::IDENTIFIER);
246  $i = $this->getMMItemFromRequest();
247  $c = new ilConfirmationGUI();
248  $c->addItem(self::IDENTIFIER, $this->hash($i->getId()), $i->getDefaultTitle());
249  $c->setFormAction($this->ctrl->getFormActionByClass(self::class));
250  $c->setConfirm($this->lng->txt(self::CMD_DELETE), self::CMD_DELETE);
251  $c->setCancel($this->lng->txt(self::CMD_CANCEL), self::CMD_CANCEL);
252  $c->setHeaderText($this->lng->txt(self::CMD_CONFIRM_DELETE));
253 
254  return $c->getHTML();
255  }
256 
257  private function confirmRestore() : string
258  {
259  $c = new ilConfirmationGUI();
260  $c->setFormAction($this->ctrl->getFormActionByClass(self::class));
261  $c->setConfirm($this->lng->txt(self::CMD_DELETE), self::CMD_RESTORE);
262  $c->setCancel($this->lng->txt(self::CMD_CANCEL), self::CMD_CANCEL);
263  $c->setHeaderText($this->lng->txt('msg_restore_confirm'));
264 
265  return $c->getHTML();
266  }
267 
268  private function flush()
269  {
270  $this->repository->flushLostItems();
271  ilUtil::sendSuccess($this->lng->txt("msg_subitem_flushed"), true);
272  $this->cancel();
273  }
274 
275  private function restore()
276  {
283 
284  $r = function ($path, $xml_name) {
285  foreach (new DirectoryIterator($path) as $fileInfo) {
286  $filename = $fileInfo->getPathname() . $xml_name;
287  if ($fileInfo->isDir() && !$fileInfo->isDot() && file_exists($filename)) {
288  $xml = simplexml_load_file($filename);
289  if (isset($xml->gsproviders)) {
290  foreach ($xml->gsproviders as $item) {
291  if (isset($item->gsprovider)) {
292  foreach ($item->gsprovider as $provider) {
293  $attributes = $provider->attributes();
294  if ($attributes->purpose == StaticMainMenuProvider::PURPOSE_MAINBAR) {
295  $classname = $attributes->class_name[0];
296  ilGSProviderStorage::registerIdentifications($classname, StaticMainMenuProvider::PURPOSE_MAINBAR);
297  }
298  }
299  }
300  }
301  }
302  }
303  }
304  };
305  $r("./Services", "/service.xml");
306  $r("./Modules", "/module.xml");
307 
308  ilGlobalCache::flushAll();
309 
310  ilUtil::sendSuccess($this->lng->txt('msg_restored'), true);
311 
312  $this->cancel();
313  }
314 }
Class ilMMAbstractItemGUI.
$path
Definition: aliased.php:25
global $DIC
Definition: saml.php:7
update(\ILIAS\DI\Container $DIC)
static registerIdentifications(string $class_name, string $purpose)
Class BaseForm.
Class ilMMItemRepository.
add(\ILIAS\DI\Container $DIC)
$r
Definition: example_031.php:79
repository()
Definition: repository.php:5
edit(\ILIAS\DI\Container $DIC)
Class HTTPServicesTest.
Class ilMMTopItemGUI ilMMTopItemGUI: ilObjMainMenuGUI ilMMTopItemGUI: ilMMItemTranslationGUI.
Class ilMMItemTranslationGUI.
if(array_key_exists('yes', $_REQUEST)) $attributes
Definition: getconsent.php:85
$filename
Definition: buildRTE.php:89
$i
Definition: disco.tpl.php:19
Class ilMMTopItemFormGUI.
create(\ILIAS\DI\Container $DIC)
if(empty($password)) $table
Definition: pwgen.php:24
hash(StreamInterface $stream, $algo, $rawOutput=false)
Calculate a hash of a Stream.
Definition: functions.php:406
Class ilMMTopItemTableGUI.
Confirmation screen class.
$data
Definition: bench.php:6
determineCommand(string $standard, string $delete)