ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilMMTopItemGUI.php
Go to the documentation of this file.
1<?php
2
3use ILIAS\GlobalScreen\Scope\MainMenu\Collector\Renderer\Hasher;
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) {
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);
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);
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);
61 $this->access->checkAccessAndThrowException("write");
62 $this->saveTable();
63
64 break;
66 $this->access->checkAccessAndThrowException("write");
67
68 return $this->confirmDelete();
70 $this->access->checkAccessAndThrowException("write");
71 $this->delete();
72 break;
74 $this->cancel();
75 break;
77 return $this->confirmRestore();
78 break;
79 case self::CMD_FLUSH:
80 $this->access->checkAccessAndThrowException('write');
81 $this->flush();
82 break;
84 $this->access->checkAccessAndThrowException("write");
85
86 $this->restore();
87 break;
89 $this->access->checkAccessAndThrowException("write");
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}
$path
Definition: aliased.php:25
$filename
Definition: buildRTE.php:89
An exception for terminatinating execution or to throw for unit testing.
Confirmation screen class.
static registerIdentifications(string $class_name, string $purpose)
static getInstance()
Factory.
Class ilMMAbstractItemGUI.
determineCommand(string $standard, string $delete)
Class ilMMItemRepository.
Class ilMMItemTranslationGUI.
Class ilMMTopItemFormGUI.
Class ilMMTopItemGUI @ilCtrl_IsCalledBy ilMMTopItemGUI: ilObjMainMenuGUI @ilCtrl_Calls ilMMTopItemGUI...
update(\ILIAS\DI\Container $DIC)
create(\ILIAS\DI\Container $DIC)
add(\ILIAS\DI\Container $DIC)
edit(\ILIAS\DI\Container $DIC)
Class ilMMTopItemTableGUI.
$i
Definition: disco.tpl.php:19
$r
Definition: example_031.php:79
if(array_key_exists('yes', $_REQUEST)) $attributes
Definition: getconsent.php:85
Class HTTPServicesTest.
hash(StreamInterface $stream, $algo, $rawOutput=false)
Calculate a hash of a Stream.
Definition: functions.php:406
Class BaseForm.
if(empty($password)) $table
Definition: pwgen.php:24
repository()
Definition: repository.php:5
global $DIC
Definition: saml.php:7
$data
Definition: bench.php:6