ILIAS  release_8 Revision v8.24
class.ilLTIConsumerAdministrationGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use GuzzleHttp\Client;
22use GuzzleHttp\Psr7\Uri;
23
33{
34 public const REDIRECTION_CMD_PARAMETER = 'redirectCmd';
35
36 public const CMD_SHOW_GLOBAL_PROVIDER = 'showGlobalProvider';
37 public const CMD_APPLY_GLOBAL_PROVIDER_FILTER = 'applyGlobalProviderFilter';
38 public const CMD_RESET_GLOBAL_PROVIDER_FILTER = 'resetGlobalProviderFilter';
39 public const CMD_SHOW_GLOBAL_PROVIDER_FORM = 'showGlobalProviderForm';
40 public const CMD_SAVE_GLOBAL_PROVIDER_FORM = 'saveGlobalProviderForm';
41 public const CMD_SHOW_GLOBAL_PROVIDER_IMPORT = 'showGlobalProviderImport';
42 public const CMD_SAVE_GLOBAL_PROVIDER_IMPORT = 'saveGlobalProviderImport';
43
44 public const CMD_SHOW_USER_PROVIDER = 'showUserProvider';
45 public const CMD_SHOW_USER_PROVIDER_FORM = 'showUserProviderForm';
46 public const CMD_SAVE_USER_PROVIDER_FORM = 'saveUserProviderForm';
47
48 public const CMD_ACCEPT_PROVIDER_AS_GLOBAL = 'acceptProviderAsGlobal';
49 public const CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI = 'acceptProviderAsGlobalMulti';
50 public const CMD_RESET_PROVIDER_TO_USER_SCOPE = 'resetProviderToUserScope';
51 public const CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI = 'resetProviderToUserScopeMulti';
52
53 public const CMD_DELETE_GLOBAL_PROVIDER = 'deleteGlobalProvider';
54 public const CMD_DELETE_GLOBAL_PROVIDER_MULTI = 'deleteGlobalProviderMulti';
55 public const CMD_DELETE_USER_PROVIDER = 'deleteUserProvider';
56 public const CMD_DELETE_USER_PROVIDER_MULTI = 'deleteUserProviderMulti';
57 public const CMD_PERFORM_DELETE_PROVIDERS = 'performDeleteProviders';
58
59 public const CMD_SHOW_SETTINGS = 'showSettings';
60 public const CMD_SAVE_SETTINGS = 'saveSettings';
61 public const CMD_ROLE_AUTOCOMPLETE = 'roleAutocomplete';
62
63 public const CMD_SHOW_USAGES = 'showUsages';
64
65 public const ALLOWED_FILE_EXT = ['jpg', 'jpeg', 'png', 'gif', 'ico', 'svg'];
66
67 private array $_importedXmlData = [];
68 private \ilGlobalTemplateInterface $main_tpl;
69
70 public function __construct()
71 {
72 global $DIC;
73 $this->main_tpl = $DIC->ui()->mainTemplate(); /* @var \ILIAS\DI\Container $DIC */
74
75 $DIC->language()->loadLanguageModule("rep");
76
77 //$this->performProviderImport($this->xml2());
78 }
79
80 protected function initSubTabs(): void
81 {
82 global $DIC; /* @var \ILIAS\DI\Container $DIC */
83
84 $DIC->tabs()->clearSubTabs();
85
86 $DIC->tabs()->addSubTab(
87 'global_provider',
88 $DIC->language()->txt('global_provider_subtab'),
89 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER)
90 );
91
92 $DIC->tabs()->addSubTab(
93 'user_provider',
94 $DIC->language()->txt('user_provider_subtab'),
95 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_USER_PROVIDER)
96 );
97
98 /* currently no settings at all
99 $DIC->tabs()->addSubTab('settings',
100 $DIC->language()->txt('settings_subtab'),
101 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_SETTINGS)
102 );*/
103
104 // TODO: Implement Screen showing all Objects in Reporsitory
105 $DIC->tabs()->addSubTab(
106 'usage',
107 $DIC->language()->txt('usage_subtab'),
108 $DIC->ctrl()->getLinkTarget($this, 'showUsages')
109 );
110 }
111
112 public function executeCommand(): void
113 {
114 global $DIC; /* @var \ILIAS\DI\Container $DIC */
115
116 $this->initSubTabs();
117
118 switch ($DIC->ctrl()->getNextClass()) {
119 default:
120
121 $cmd = $DIC->ctrl()->getCmd(self::CMD_SHOW_GLOBAL_PROVIDER) . 'Cmd';
122 $this->{$cmd}();
123 }
124 }
125
126 // todo?
127 protected function applyGlobalProviderFilterCmd(): void
128 {
129 $table = $this->buildProviderTable($this, self::CMD_SHOW_GLOBAL_PROVIDER);
130 $table->writeFilterToSession();
131 $table->resetOffset();
132 $this->showGlobalProviderCmd();
133 }
134
135 protected function resetGlobalProviderFilterCmd(): void
136 {
137 $table = $this->buildProviderTable($this, self::CMD_SHOW_GLOBAL_PROVIDER);
138 $table->resetFilter();
139 $table->resetOffset();
140 $this->showGlobalProviderCmd();
141 }
142
143 protected function showGlobalProviderCmd(): void
144 {
145 global $DIC; /* @var \ILIAS\DI\Container $DIC */
146
147 $DIC->tabs()->activateSubTab('global_provider');
148
149 $button = $DIC->ui()->factory()->button()->standard(
150 $DIC->language()->txt('lti_add_global_provider'),
151 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM)
152 );
153
154 $DIC->toolbar()->addComponent($button);
155
156 $button = $DIC->ui()->factory()->button()->standard(
157 $DIC->language()->txt('lti_import_global_provider'),
158 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_IMPORT)
159 );
160
161 $DIC->toolbar()->addComponent($button);
162
163 $table = $this->buildProviderTable($this, self::CMD_SHOW_GLOBAL_PROVIDER);
164 $table->setEditProviderCmd(self::CMD_SHOW_GLOBAL_PROVIDER_FORM);
165 $table->setDeleteProviderCmd(self::CMD_DELETE_GLOBAL_PROVIDER);
166 $table->setDeleteProviderMultiCmd(self::CMD_DELETE_GLOBAL_PROVIDER_MULTI);
167 $table->setResetProviderToUserScopeCmd(self::CMD_RESET_PROVIDER_TO_USER_SCOPE);
168 $table->setResetProviderToUserScopeMultiCmd(self::CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI);
169
170 $table->init();
171
172 $providerList = new ilLTIConsumeProviderList();
173 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_GLOBAL);
174
175 if ($table->getFilterItemByPostVar('title')->getValue()) {
176 $providerList->setTitleFilter($table->getFilterItemByPostVar('title')->getValue());
177 }
178
179 if ($table->getFilterItemByPostVar('category')->getValue()) {
180 $providerList->setCategoryFilter($table->getFilterItemByPostVar('category')->getValue());
181 }
182
183 if ($table->getFilterItemByPostVar('keyword')->getValue()) {
184 $providerList->setKeywordFilter($table->getFilterItemByPostVar('keyword')->getValue());
185 }
186
187 if ($table->getFilterItemByPostVar('outcome')->getChecked()) {
188 $providerList->setHasOutcomeFilter(true);
189 }
190
191 if ($table->getFilterItemByPostVar('internal')->getChecked()) {
192 $providerList->setIsExternalFilter(false);
193 }
194
195 if ($table->getFilterItemByPostVar('with_key')->getChecked()) {
196 $providerList->setIsProviderKeyCustomizableFilter(false);
197 }
198
199 $providerList->load();
200
201 $table->setData($providerList->getTableData());
202
203 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
204 }
205
210 protected function showGlobalProviderFormCmd(?ilLTIConsumeProviderFormGUI $form = null): void
211 {
212 global $DIC; /* @var \ILIAS\DI\Container $DIC */
213
214 $DIC->tabs()->activateSubTab('global_provider');
215
216 if ($form === null) {
217 if ($DIC->http()->wrapper()->query()->has('provider_id')) {
218 $DIC->ctrl()->saveParameter($this, 'provider_id');
219 $provider = new ilLTIConsumeProvider((int) $DIC->http()->wrapper()->query()->retrieve('provider_id', $DIC->refinery()->kindlyTo()->int()));
220 } else {
222 }
223
224 $form = $this->buildProviderForm(
225 $provider,
226 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
227 self::CMD_SHOW_GLOBAL_PROVIDER
228 );
229 }
230
231 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
232 }
233
234 protected function saveGlobalProviderFormCmd(): void
235 {
236 global $DIC; /* @var \ILIAS\DI\Container $DIC */
237
238 $provider = $this->fetchProvider();
239
240 $form = $this->buildProviderForm(
241 $provider,
242 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
243 self::CMD_SHOW_GLOBAL_PROVIDER
244 );
245
246 if ($form->checkInput()) {
247 $form->initProvider($provider);
248
249 if (!$provider->getCreator()) {
250 $provider->setCreator($DIC->user()->getId());
251 }
252
253 $provider->setIsGlobal(true);
254 $provider->save();
255
256 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
257 }
258
259 $this->showGlobalProviderFormCmd($form);
260 }
261
262 protected function showGlobalProviderImportCmd(ilPropertyFormGUI $form = null): void
263 {
264 global $DIC; /* @var \ILIAS\DI\Container $DIC */
265
266 $DIC->tabs()->activateSubTab('global_provider');
267
268 if ($form === null) {
269 $form = $this->buildProviderImportForm(
270 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
271 self::CMD_SHOW_GLOBAL_PROVIDER
272 );
273 }
274
275 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
276 }
277
278 protected function saveGlobalProviderImportCmd(): void
279 {
280 global $DIC; /* @var \ILIAS\DI\Container $DIC */
281
282 $form = $this->buildProviderImportForm(
283 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
284 self::CMD_SHOW_GLOBAL_PROVIDER
285 );
286
287 if (!$form->checkInput()) {
288 $this->showGlobalProviderImportCmd($form);
289 return;
290 }
291
292 $fileData = (array) $DIC->http()->wrapper()->post()->retrieve('provider_xml', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->string()));
293
294 if (!$fileData['tmp_name']) {
295 $this->showGlobalProviderImportCmd($form);
296 return;
297 }
298
299 $providerXml = file_get_contents($fileData['tmp_name']);
300
301 $provider = $this->performProviderImport($providerXml);
302
303 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('provider_import_success_msg'));
304 $DIC->ctrl()->setParameter($this, 'provider_id', $provider->getId());
305 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM);
306 }
307
311 protected function buildProviderImportForm(string $saveCommand, string $cancelCommand): \ilPropertyFormGUI
312 {
313 global $DIC; /* @var \ILIAS\DI\Container $DIC */
314
315 $form = new ilPropertyFormGUI();
316
317 $form->setTitle($DIC->language()->txt('form_import_provider'));
318
319 $form->setFormAction($DIC->ctrl()->getFormAction($this));
320
321 $form->addCommandButton($saveCommand, $DIC->language()->txt('import'));
322 $form->addCommandButton($cancelCommand, $DIC->language()->txt('cancel'));
323
324 $provXmlUpload = new ilFileInputGUI($DIC->language()->txt('field_provider_xml'), 'provider_xml');
325 $provXmlUpload->setInfo($DIC->language()->txt('field_provider_xml_info'));
326 $provXmlUpload->setRequired(true);
327 $provXmlUpload->setSuffixes(['xml']);
328 $form->addItem($provXmlUpload);
329
330 return $form;
331 }
332
338 protected function performProviderImport(string $providerXml): \ilLTIConsumeProvider
339 {
340 $doc = new DOMDocument();
341 $doc->loadXML($providerXml);
342 $xPath = new DOMXPath($doc);
343 $this->_importedXmlData = [
344 'title' => $xPath->query("//*[local-name() = 'title']")->item(0)->nodeValue,
345 'description' => null !== ($desc = $xPath->query("//*[local-name() = 'description']")->item(0)->nodeValue) ? $desc : '',
346 'provider_url' => $xPath->query("//*[local-name() = 'launch_url']")->item(0)->nodeValue,
347 'provider_icon' => $xPath->query("//*[local-name() = 'icon']")->item(0)->nodeValue,
348 'launch_method' => 'newWin',
349 ];
350
351 // DONE ?
357 return $this->prepareProvider();
358 }
359
366 {
368 $provider->setTitle($this->getInput('title'));
369 $provider->setDescription($this->getInput('description'));
370 if (null !== $this->getInput('provider_url')) {
371 $provider->setProviderUrl($this->getInput('provider_url'));
372 }
373 $provider->setIsGlobal(true);
374 $provider->save();
375
376 // PROVIDER ICON
377 $pId = $provider->getId();
378 if (null !== $pIconFileName = $this->getIconXml($this->getInput('provider_icon'), (string) $pId)) {
379 $provider->setProviderIconFilename($pIconFileName);
380 $provider->update();
381 $provider->update();
382 }
383
384 return $provider;
385 }
386
391 private function getInput($key): string
392 {
393 if (!is_bool($this->_importedXmlData[$key])) {
394 $this->_importedXmlData[$key] = trim($this->_importedXmlData[$key]);
395 }
396 return $this->_importedXmlData[$key];
397 }
398
402 private function getIconXml(string $url, string $pId): ?string
403 {
404 global $DIC;
405
406 $regex = '~(.+)://([^/]+)/([^?]+)\??(.*)~';
407 preg_match_all($regex, $url, $urlPart, PREG_SET_ORDER);
408 $urlPart = $urlPart[0];
409 //var_dump([$url, $urlPart]); exit;
410 $fileExt = strtolower(substr($urlPart[3], strrpos($urlPart[3], '.') + 1));
411 //var_dump($fileExt); exit;
412 if (true !== $this->checkIconFileExtension($fileExt)) {
413 return null;
414 }
415 $finalIcoName = $pId . '.' . $fileExt;
416
418 $uri = new Uri($urlPart[0]);
419 $uri->withScheme($urlPart[1])
420 ->withHost($urlPart[2])
421 ->withPath($urlPart[3])
422 ->withQuery($urlPart[4]);
423 //var_dump($uri); exit;
425 $httpClient = new Client();
426 $response = $httpClient->get($uri);
427 //var_dump($response); exit;
429 $icoResource = $response->getBody();
430 $ico = $icoResource->getContents();
431
432 if (false === $this->checkIconFileVirus($ico)) {
433 $DIC->filesystem()->web()->put('lti_data/provider_icon/' . $finalIcoName, $ico); // $DIC->filesystem()->web()->readAndDelete('lti_data/provider_icon/' . $tempIcoName)
434 } else {
435 return null;
436 }
437
438 return $finalIcoName;
439 }
440
441 private function checkIconFileExtension(string $ext): bool
442 {
443 // todo - check?
444 return false !== ($check = array_search($ext, self::ALLOWED_FILE_EXT)) ? true : false;
445 }
446
447 private function checkIconFileVirus(string $ico): bool
448 {
450 if (!$virusScan) {
451 return false;
452 }
453 return $virusScan->scanBuffer($ico);
454 // return false === (bool)$virusScan->scanBuffer($ico) ? false : true;
455 }
456
457 protected function showUserProviderCmd(): void
458 {
459 global $DIC; /* @var \ILIAS\DI\Container $DIC */
460
461 $DIC->tabs()->activateSubTab('user_provider');
462
463 $providerList = new ilLTIConsumeProviderList();
464 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_USER);
465 $providerList->load();
466
467 $table = $this->buildProviderTable($this, self::CMD_SHOW_USER_PROVIDER);
468 $table->setEditProviderCmd(self::CMD_SHOW_USER_PROVIDER_FORM);
469 $table->setAcceptProviderAsGlobalMultiCmd(self::CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI);
470 $table->setAcceptProviderAsGlobalCmd(self::CMD_ACCEPT_PROVIDER_AS_GLOBAL);
471 $table->setDeleteProviderCmd(self::CMD_DELETE_USER_PROVIDER);
472 $table->setDeleteProviderMultiCmd(self::CMD_DELETE_USER_PROVIDER_MULTI);
473
474 $table->setData($providerList->getTableData());
475
476 $table->init();
477
478 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
479 }
480
485 protected function showUserProviderFormCmd(?ilLTIConsumeProviderFormGUI $form = null): void
486 {
487 global $DIC; /* @var \ILIAS\DI\Container $DIC */
488
489 $DIC->tabs()->activateSubTab('user_provider');
490
491 if ($form === null) {
492 if ($DIC->http()->wrapper()->query()->has('provider_id')) {
493 $DIC->ctrl()->saveParameter($this, 'provider_id');
494 $provider = new ilLTIConsumeProvider((int) $DIC->http()->wrapper()->query()->retrieve('provider_id', $DIC->refinery()->kindlyTo()->int()));
495 } else {
497 }
498
499 $form = $this->buildProviderForm(
500 $provider,
501 self::CMD_SAVE_USER_PROVIDER_FORM,
502 self::CMD_SHOW_USER_PROVIDER
503 );
504 }
505
506 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
507 }
508
515 protected function saveUserProviderFormCmd(): void
516 {
517 global $DIC; /* @var \ILIAS\DI\Container $DIC */
518
519 $provider = $this->fetchProvider();
520
521 $form = $this->buildProviderForm(
522 $provider,
523 self::CMD_SAVE_USER_PROVIDER_FORM,
524 self::CMD_SHOW_USER_PROVIDER
525 );
526
527 if ($form->checkInput()) {
528 $form->initProvider($provider);
529 $provider->setIsGlobal(false);
530 $provider->save();
531
532 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
533 }
534
535 $this->showUserProviderFormCmd($form);
536 }
537
541 protected function acceptProviderAsGlobalMultiCmd(): void
542 {
543 global $DIC; /* @var \ILIAS\DI\Container $DIC */
544
545 $providers = $this->fetchProviderMulti();
546
547 if (!count($providers)) {
548 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_no_provider_selected'), true);
549 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
550 }
551
552 foreach ($providers as $provider) {
553 if (!$provider->isAcceptableAsGlobal()) {
554 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_at_least_one_not_acceptable_as_global'), true);
555 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
556 }
557 }
558
559 $this->performAcceptProvidersAsGlobal($providers);
560
561 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_accept_as_global_multi'), true);
562 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
563 }
564
568 protected function acceptProviderAsGlobalCmd(): void
569 {
570 global $DIC; /* @var \ILIAS\DI\Container $DIC */
571
572 $provider = $this->fetchProvider();
573
574 if ($provider->isAcceptableAsGlobal()) {
576 }
577
578 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_accept_as_global'), true);
579 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
580 }
581
588 protected function performAcceptProvidersAsGlobal(array $providers): void
589 {
590 global $DIC; /* @var \ILIAS\DI\Container $DIC */
591
592 foreach ($providers as $provider) {
593 $provider->setIsGlobal(true);
594 $provider->setAcceptedBy($DIC->user()->getId());
595 $provider->save();
596 }
597 }
598
602 protected function resetProviderToUserScopeMultiCmd(): void
603 {
604 global $DIC; /* @var \ILIAS\DI\Container $DIC */
605
606 $providers = $this->fetchProviderMulti();
607
608 if (!count($providers)) {
609 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_no_provider_selected'), true);
610 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
611 }
612
613 foreach ($providers as $provider) {
614 if (!$provider->isResetableToUserDefined()) {
615 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_at_least_one_not_resetable_to_usr_def'), true);
616 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
617 }
618 }
619
620 $this->performResetProvidersToUserScope($providers);
621
622 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_reset_to_usr_def_multi'), true);
623 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
624 }
625
629 protected function resetProviderToUserScopeCmd(): void
630 {
631 global $DIC; /* @var \ILIAS\DI\Container $DIC */
632
633 $provider = $this->fetchProvider();
634
635 if ($provider->isResetableToUserDefined()) {
637 }
638
639 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_reset_to_usr_def'), true);
640 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
641 }
642
649 protected function performResetProvidersToUserScope(array $providers): void
650 {
651 foreach ($providers as $provider) {
652 $provider->setIsGlobal(false);
653 $provider->setAcceptedBy(0);
654 $provider->save();
655 }
656 }
657
661 protected function deleteGlobalProviderMultiCmd(): void
662 {
663 global $DIC; /* @var \ILIAS\DI\Container $DIC */
664
665 $DIC->tabs()->activateSubTab('global_provider');
666
667 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
668
669 $providers = $this->fetchProviderMulti();
670
671 if (!$this->validateProviderDeletionSelection($providers)) {
672 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
673 }
674
675 $this->confirmDeleteProviders($providers, self::CMD_SHOW_GLOBAL_PROVIDER);
676 }
677
681 protected function deleteGlobalProviderCmd(): void
682 {
683 global $DIC; /* @var \ILIAS\DI\Container $DIC */
684
685 $DIC->tabs()->activateSubTab('global_provider');
686
687 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
688
689 $provider = $this->fetchProvider();
690 $providers = [$provider->getId() => $provider];
691
692 if (!$this->validateProviderDeletionSelection($providers)) {
693 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
694 }
695
696 $this->confirmDeleteProviders($providers, self::CMD_SHOW_GLOBAL_PROVIDER);
697 }
698
702 protected function deleteUserProviderMultiCmd(): void
703 {
704 global $DIC; /* @var \ILIAS\DI\Container $DIC */
705
706 $DIC->tabs()->activateSubTab('user_provider');
707
708 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
709
710 $providers = $this->fetchProviderMulti();
711
712 if (!$this->validateProviderDeletionSelection($providers)) {
713 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
714 }
715
716 $this->confirmDeleteProviders($providers, self::CMD_SHOW_USER_PROVIDER);
717 }
718
722 protected function deleteUserProviderCmd(): void
723 {
724 global $DIC; /* @var \ILIAS\DI\Container $DIC */
725
726 $DIC->tabs()->activateSubTab('global_provider');
727
728 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
729
730 $provider = $this->fetchProvider();
731 $providers = [$provider->getId() => $provider];
732
733 if (!$this->validateProviderDeletionSelection($providers)) {
734 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
735 }
736
737 $this->confirmDeleteProviders($providers, self::CMD_SHOW_USER_PROVIDER);
738 }
739
740 protected function validateProviderDeletionSelection(array $providers): bool
741 {
742 global $DIC; /* @var \ILIAS\DI\Container $DIC */
743
744 if (!count($providers)) {
745 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_no_provider_selected'), true);
746 return false;
747 }
748
749 $providerList = $this->getProviderListForIds(array_keys($providers));
750
751 foreach ($providers as $provider) {
752 if ($providerList->hasUsages($provider->getId())) {
753 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_at_least_one_prov_has_usages'), true);
754 return false;
755 }
756 }
757
758 return true;
759 }
760
764 protected function confirmDeleteProviders(array $providers, string $cancelCommand): void
765 {
766 global $DIC; /* @var \ILIAS\DI\Container $DIC */
767
768 $confirmationGUI = new ilConfirmationGUI();
769
770 $confirmationGUI->setFormAction($DIC->ctrl()->getFormAction($this));
771 $confirmationGUI->setCancel($DIC->language()->txt('cancel'), $cancelCommand);
772 $confirmationGUI->setConfirm($DIC->language()->txt('confirm'), self::CMD_PERFORM_DELETE_PROVIDERS);
773
774 $confirmationGUI->setHeaderText($DIC->language()->txt('lti_confirm_delete_providers'));
775
776 foreach ($providers as $provider) {
777 /* @var ilLTIConsumeProvider $provider */
778
779 if ($provider->getProviderIcon()->exists()) {
780 $providerIcon = $provider->getProviderIcon()->getAbsoluteFilePath();
781 } else {
782 $providerIcon = ilObject::_getIcon(0, "small", "lti");
783 }
784
785 $confirmationGUI->addItem(
786 'provider_ids[]',
787 (string) $provider->getId(),
788 htmlspecialchars($provider->getTitle()),
789 $providerIcon
790 );
791 }
792
793 $DIC->ui()->mainTemplate()->setContent($confirmationGUI->getHTML());
794 }
795
799 protected function performDeleteProvidersCmd(): void
800 {
801 global $DIC; /* @var \ILIAS\DI\Container $DIC */
802
803 $providers = $this->fetchProviderMulti();
804
805 if ($this->validateProviderDeletionSelection($providers)) {
806 foreach ($providers as $provider) {
807 $provider->delete();
808 }
809
810 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_delete_provider'), true);
811 }
812
813 $DIC->ctrl()->redirect($this, $DIC->http()->wrapper()->query()->retrieve(self::REDIRECTION_CMD_PARAMETER, $DIC->refinery()->kindlyTo()->string()));
814 }
815
816 protected function buildProviderTable(ilLTIConsumerAdministrationGUI $parentGui, string $parentCmd): \ilLTIConsumerProviderTableGUI
817 {
819 $parentGui,
820 $parentCmd
821 );
822
823 $table->setFilterCommand(self::CMD_APPLY_GLOBAL_PROVIDER_FILTER);
824 $table->setResetCommand(self::CMD_RESET_GLOBAL_PROVIDER_FILTER);
825
826 $table->setAvailabilityColumnEnabled(true);
827 $table->setProviderCreatorColumnEnabled(true);
828
829 $table->setActionsColumnEnabled(true);
830 $table->setDetailedUsagesEnabled(true);
831
832 return $table;
833 }
834
835 protected function showUsagesCmd(): void
836 {
837 global $DIC;
838
839 $DIC->tabs()->activateSubTab('usage');
840
841 $providerList = new ilLTIConsumeProviderList();
842 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_GLOBAL);
843 $providerList->load();
844
845 $table = new ilLTIConsumerProviderUsageTableGUI($this, self::CMD_SHOW_USAGES);
846 $table->setData($providerList->getTableDataUsedBy());
847 $table->init();
848
849 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
850 }
851
855 protected function buildProviderForm(ilLTIConsumeProvider $provider, string $saveCmd, string $cancelCmd): \ilLTIConsumeProviderFormGUI
856 {
857 global $DIC; /* @var \ILIAS\DI\Container $DIC */
858
860 $form->setAdminContext(true);
861 $form->initForm($DIC->ctrl()->getFormAction($this), $saveCmd, $cancelCmd);
862
863 return $form;
864 }
865
869 protected function fetchProvider(): \ilLTIConsumeProvider
870 {
871 global $DIC;
872
873 if ($DIC->http()->wrapper()->query()->has('provider_id')) {
875 (int) $DIC->http()->wrapper()->query()->retrieve('provider_id', $DIC->refinery()->kindlyTo()->int())
876 );
877 } else {
879 }
880 return $provider;
881 }
882
887 protected function fetchProviderMulti(): array
888 {
889 global $DIC;
890 $providers = [];
891
892 if (!$DIC->http()->wrapper()->post()->has('provider_ids') ||
893 !$DIC->http()->wrapper()->post()->retrieve('provider_ids', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->int()))
894 ) {
895 return $providers;
896 }
897 $provider_ids = $DIC->http()->wrapper()->post()->retrieve('provider_ids', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->int()));
898
899 foreach ($provider_ids as $providerId) {
900 $providers[(int) $providerId] = new ilLTIConsumeProvider((int) $providerId);
901 }
902
903 return $providers;
904 }
905
906
907 protected function showSettingsCmd(?ilPropertyFormGUI $form = null): void
908 {
909 // todo - check
910 global $DIC; /* @var \ILIAS\DI\Container $DIC */
911
912 return; // no settings at all currently
913
914 $DIC->tabs()->activateSubTab('settings');
915
916 if ($form === null) {
917 $form = $this->buildSettingsForm();
918 }
919
920 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
921 }
922
923 protected function saveSettingsCmd(): void
924 {
925 // todo - check
926 global $DIC; /* @var \ILIAS\DI\Container $DIC */
927
928 return; // no settings at all currently
929
930 $form = $this->buildSettingsForm();
931
932 if (!$form->checkInput()) {
933 $this->showSettingsCmd($form);
934 return;
935 }
936
937 $DIC->ctrl()->redirect($this, self::CMD_SHOW_SETTINGS);
938 }
939
944 {
945 global $DIC; /* @var \ILIAS\DI\Container $DIC */
946
947 $form = new ilPropertyFormGUI();
948
949 $form->setFormAction($DIC->ctrl()->getFormAction($this));
950 $form->addCommandButton(self::CMD_SAVE_SETTINGS, $DIC->language()->txt('save'));
951 $form->setTitle($DIC->language()->txt('lti_global_settings_form'));
952
953 return $form;
954 }
955
956 protected function getProviderListForIds(array $providerIds): ilLTIConsumeProviderList
957 {
958 $providerList = new ilLTIConsumeProviderList();
959 $providerList->setIdsFilter($providerIds);
960 $providerList->load();
961 $providerList->loadUsages();
962 return $providerList;
963 }
964}
$check
Definition: buildRTE.php:81
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a file property in a property form.
buildProviderTable(ilLTIConsumerAdministrationGUI $parentGui, string $parentCmd)
showGlobalProviderImportCmd(ilPropertyFormGUI $form=null)
buildProviderImportForm(string $saveCommand, string $cancelCommand)
showUserProviderFormCmd(?ilLTIConsumeProviderFormGUI $form=null)
buildProviderForm(ilLTIConsumeProvider $provider, string $saveCmd, string $cancelCmd)
showGlobalProviderFormCmd(?ilLTIConsumeProviderFormGUI $form=null)
confirmDeleteProviders(array $providers, string $cancelCommand)
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
This class represents a property form user interface.
global $DIC
Definition: feed.php:28
$provider
Definition: ltitoken.php:83
if(empty($clientId)) $providerId
Definition: ltitoken.php:82
string $key
Consumer key/client ID value.
Definition: System.php:193
$url
$response