ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
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_SHOW_GLOBAL_PROVIDER_FORM = 'showGlobalProviderForm';
38 public const CMD_SAVE_GLOBAL_PROVIDER_FORM = 'saveGlobalProviderForm';
39 public const CMD_SHOW_GLOBAL_PROVIDER_IMPORT = 'showGlobalProviderImport';
40 public const CMD_SAVE_GLOBAL_PROVIDER_IMPORT = 'saveGlobalProviderImport';
41
42 public const CMD_SHOW_USER_PROVIDER = 'showUserProvider';
43 public const CMD_SHOW_USER_PROVIDER_FORM = 'showUserProviderForm';
44 public const CMD_SAVE_USER_PROVIDER_FORM = 'saveUserProviderForm';
45
46 public const CMD_ACCEPT_PROVIDER_AS_GLOBAL = 'acceptProviderAsGlobal';
47 public const CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI = 'acceptProviderAsGlobalMulti';
48 public const CMD_RESET_PROVIDER_TO_USER_SCOPE = 'resetProviderToUserScope';
49 public const CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI = 'resetProviderToUserScopeMulti';
50
51 public const CMD_DELETE_GLOBAL_PROVIDER = 'deleteGlobalProvider';
52 public const CMD_DELETE_GLOBAL_PROVIDER_MULTI = 'deleteGlobalProviderMulti';
53 public const CMD_DELETE_USER_PROVIDER = 'deleteUserProvider';
54 public const CMD_DELETE_USER_PROVIDER_MULTI = 'deleteUserProviderMulti';
55 public const CMD_PERFORM_DELETE_PROVIDERS = 'performDeleteProviders';
56
57 public const CMD_SHOW_SETTINGS = 'showSettings';
58 public const CMD_SAVE_SETTINGS = 'saveSettings';
59 public const CMD_ROLE_AUTOCOMPLETE = 'roleAutocomplete';
60
61 public const CMD_SHOW_USAGES = 'showUsages';
62
63 public const ALLOWED_FILE_EXT = ['jpg', 'jpeg', 'png', 'gif', 'ico', 'svg'];
64
65 private array $_importedXmlData = [];
66 private \ilGlobalTemplateInterface $main_tpl;
67
68 private bool $hasWritePermission;
69
70 public function __construct(bool $hasWritePermission = false)
71 {
72 global $DIC;
73 $this->hasWritePermission = $hasWritePermission;
74 $this->main_tpl = $DIC->ui()->mainTemplate(); /* @var \ILIAS\DI\Container $DIC */
75
76 $DIC->language()->loadLanguageModule("rep");
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
129 protected function showGlobalProviderCmd(): void
130 {
131 global $DIC; /* @var \ILIAS\DI\Container $DIC */
132
133 $DIC->tabs()->activateSubTab('global_provider');
134
135 if ($this->hasWritePermission) {
136 $button = $DIC->ui()->factory()->button()->standard(
137 $DIC->language()->txt('lti_add_global_provider'),
138 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM)
139 );
140
141 $DIC->toolbar()->addComponent($button);
142
143 $button = $DIC->ui()->factory()->button()->standard(
144 $DIC->language()->txt('lti_import_global_provider'),
145 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_IMPORT)
146 );
147
148 $DIC->toolbar()->addComponent($button);
149 }
150
151
152
153 $table = $this->buildProviderTable($this, self::CMD_SHOW_GLOBAL_PROVIDER);
154 $table->enableResetProviderToUserScope();
155
156 $filter = $table->getFilter();
157 $filter_params = $DIC->uiService()->filter()->getData($filter);
158
159 $providerList = new ilLTIConsumeProviderList();
160 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_GLOBAL);
161 $providerList->setTitleFilter($filter_params['title'] ?? '');
162 $providerList->setKeywordFilter($filter_params['keywords'] ?? '');
163 $providerList->setHasOutcomeFilter(($filter_params['outcome'] ?? '') === '' ? null : $filter_params['outcome'] === 'yes');
164 $providerList->setIsExternalFilter(($filter_params['internal'] ?? '') === '' ? null : $filter_params['internal'] !== 'yes');
165 $providerList->setIsProviderKeyCustomizableFilter(($filter_params['with_key'] ?? '') === '' ? null : $filter_params['with_key'] === 'yes');
166 $providerList->setCategoryFilter($filter_params['category'] ?? '');
167
168 $providerList->load();
169
170 $table->setData($providerList->getTableData());
171
172 $DIC->ui()->mainTemplate()->setContent($DIC->ui()->renderer()->render($filter) . $table->getHTML($this->hasWritePermission));
173 }
174
179 protected function showGlobalProviderFormCmd(?ilLTIConsumeProviderFormGUI $form = null): void
180 {
181 global $DIC; /* @var \ILIAS\DI\Container $DIC */
182
183 $DIC->tabs()->activateSubTab('global_provider');
184
185 if ($form === null) {
186 if ($DIC->http()->wrapper()->query()->has('provider_id')) {
187 $DIC->ctrl()->saveParameter($this, 'provider_id');
188 $provider = new ilLTIConsumeProvider((int) $DIC->http()->wrapper()->query()->retrieve('provider_id', $DIC->refinery()->kindlyTo()->int()));
189 } else {
191 }
192
193 $form = $this->buildProviderForm(
194 $provider,
195 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
196 self::CMD_SHOW_GLOBAL_PROVIDER
197 );
198 }
199
200 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
201 }
202
203 protected function saveGlobalProviderFormCmd(): void
204 {
205 global $DIC; /* @var \ILIAS\DI\Container $DIC */
206
207 $provider = $this->fetchProvider();
208
209 $form = $this->buildProviderForm(
210 $provider,
211 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
212 self::CMD_SHOW_GLOBAL_PROVIDER
213 );
214
215 if ($form->checkInput()) {
216 $form->initProvider($provider);
217
218 if (!$provider->getCreator()) {
219 $provider->setCreator($DIC->user()->getId());
220 }
221
222 $provider->setIsGlobal(true);
223 $provider->save();
224
225 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
226 }
227
228 $this->showGlobalProviderFormCmd($form);
229 }
230
231 protected function showGlobalProviderImportCmd(ilPropertyFormGUI $form = null): void
232 {
233 global $DIC; /* @var \ILIAS\DI\Container $DIC */
234
235 $DIC->tabs()->activateSubTab('global_provider');
236
237 if ($form === null) {
238 $form = $this->buildProviderImportForm(
239 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
240 self::CMD_SHOW_GLOBAL_PROVIDER
241 );
242 }
243
244 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
245 }
246
247 protected function saveGlobalProviderImportCmd(): void
248 {
249 global $DIC; /* @var \ILIAS\DI\Container $DIC */
250
251 $form = $this->buildProviderImportForm(
252 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
253 self::CMD_SHOW_GLOBAL_PROVIDER
254 );
255
256 if (!$form->checkInput()) {
257 $this->showGlobalProviderImportCmd($form);
258 return;
259 }
260
261 $fileData = (array) $DIC->http()->wrapper()->post()->retrieve('provider_xml', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->string()));
262
263 if (!$fileData['tmp_name']) {
264 $this->showGlobalProviderImportCmd($form);
265 return;
266 }
267
268 $providerXml = file_get_contents($fileData['tmp_name']);
269
270 $provider = $this->performProviderImport($providerXml);
271
272 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('provider_import_success_msg'));
273 $DIC->ctrl()->setParameter($this, 'provider_id', $provider->getId());
274 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM);
275 }
276
280 protected function buildProviderImportForm(string $saveCommand, string $cancelCommand): \ilPropertyFormGUI
281 {
282 global $DIC; /* @var \ILIAS\DI\Container $DIC */
283
284 $form = new ilPropertyFormGUI();
285
286 $form->setTitle($DIC->language()->txt('form_import_provider'));
287
288 $form->setFormAction($DIC->ctrl()->getFormAction($this));
289
290 $form->addCommandButton($saveCommand, $DIC->language()->txt('import'));
291 $form->addCommandButton($cancelCommand, $DIC->language()->txt('cancel'));
292
293 $provXmlUpload = new ilFileInputGUI($DIC->language()->txt('field_provider_xml'), 'provider_xml');
294 $provXmlUpload->setInfo($DIC->language()->txt('field_provider_xml_info'));
295 $provXmlUpload->setRequired(true);
296 $provXmlUpload->setSuffixes(['xml']);
297 $form->addItem($provXmlUpload);
298
299 return $form;
300 }
301
307 protected function performProviderImport(string $providerXml): \ilLTIConsumeProvider
308 {
309 $doc = new DOMDocument();
310 $doc->loadXML($providerXml);
311 $xPath = new DOMXPath($doc);
312 $this->_importedXmlData = [
313 'title' => $xPath->query("//*[local-name() = 'title']")->item(0)->nodeValue,
314 'description' => null !== ($desc = $xPath->query("//*[local-name() = 'description']")->item(0)->nodeValue) ? $desc : '',
315 'provider_url' => $xPath->query("//*[local-name() = 'launch_url']")->item(0)->nodeValue,
316 'provider_icon' => $xPath->query("//*[local-name() = 'icon']")->item(0)->nodeValue,
317 'launch_method' => 'newWin',
318 ];
319
320 // DONE ?
326 return $this->prepareProvider();
327 }
328
335 {
337 $provider->setTitle($this->getInput('title'));
338 $provider->setDescription($this->getInput('description'));
339 if (null !== $this->getInput('provider_url')) {
340 $provider->setProviderUrl($this->getInput('provider_url'));
341 }
342 $provider->setIsGlobal(true);
343 $provider->save();
344
345 // PROVIDER ICON
346 $pId = $provider->getId();
347 if (null !== $pIconFileName = $this->getIconXml($this->getInput('provider_icon'), (string) $pId)) {
348 $provider->setProviderIconFilename($pIconFileName);
349 $provider->update();
350 $provider->update();
351 }
352
353 return $provider;
354 }
355
360 private function getInput($key): string
361 {
362 if (!is_bool($this->_importedXmlData[$key])) {
363 $this->_importedXmlData[$key] = trim($this->_importedXmlData[$key]);
364 }
365 return $this->_importedXmlData[$key];
366 }
367
371 private function getIconXml(string $url, string $pId): ?string
372 {
373 global $DIC;
374
375 $regex = '~(.+)://([^/]+)/([^?]+)\??(.*)~';
376 preg_match_all($regex, $url, $urlPart, PREG_SET_ORDER);
377 $urlPart = $urlPart[0];
378 //var_dump([$url, $urlPart]); exit;
379 $fileExt = strtolower(substr($urlPart[3], strrpos($urlPart[3], '.') + 1));
380 //var_dump($fileExt); exit;
381 if (true !== $this->checkIconFileExtension($fileExt)) {
382 return null;
383 }
384 $finalIcoName = $pId . '.' . $fileExt;
385
387 $uri = new Uri($urlPart[0]);
388 $uri->withScheme($urlPart[1])
389 ->withHost($urlPart[2])
390 ->withPath($urlPart[3])
391 ->withQuery($urlPart[4]);
392 //var_dump($uri); exit;
394 $httpClient = new Client();
395 $response = $httpClient->get($uri);
396 //var_dump($response); exit;
398 $icoResource = $response->getBody();
399 $ico = $icoResource->getContents();
400
401 if (false === $this->checkIconFileVirus($ico)) {
402 $DIC->filesystem()->web()->put('lti_data/provider_icon/' . $finalIcoName, $ico); // $DIC->filesystem()->web()->readAndDelete('lti_data/provider_icon/' . $tempIcoName)
403 } else {
404 return null;
405 }
406
407 return $finalIcoName;
408 }
409
410 private function checkIconFileExtension(string $ext): bool
411 {
412 // todo - check?
413 return false !== ($check = array_search($ext, self::ALLOWED_FILE_EXT)) ? true : false;
414 }
415
416 private function checkIconFileVirus(string $ico): bool
417 {
419 if (!$virusScan) {
420 return false;
421 }
422 return $virusScan->scanBuffer($ico);
423 // return false === (bool)$virusScan->scanBuffer($ico) ? false : true;
424 }
425
429 protected function showUserProviderCmd(): void
430 {
431 global $DIC; /* @var \ILIAS\DI\Container $DIC */
432
433 $DIC->tabs()->activateSubTab('user_provider');
434
435 $table = $this->buildProviderTable($this, self::CMD_SHOW_USER_PROVIDER);
436 $table->enableAcceptProviderAsGlobal();
437
438 $filter = $table->getFilter();
439 $filter_params = $DIC->uiService()->filter()->getData($filter);
440
441 $providerList = new ilLTIConsumeProviderList();
442 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_USER);
443 $providerList->setTitleFilter($filter_params['title'] ?? '');
444 $providerList->setKeywordFilter($filter_params['keywords'] ?? '');
445 $providerList->setHasOutcomeFilter(($filter_params['outcome'] ?? '') === '' ? null : $filter_params['outcome'] === 'yes');
446 $providerList->setIsExternalFilter(($filter_params['internal'] ?? '') === '' ? null : $filter_params['internal'] !== 'yes');
447 $providerList->setIsProviderKeyCustomizableFilter(($filter_params['with_key'] ?? '') === '' ? null : $filter_params['with_key'] === 'yes');
448 $providerList->setCategoryFilter($filter_params['category'] ?? '');
449
450 $providerList->load();
451
452 $table->setData($providerList->getTableData());
453
454 $DIC->ui()->mainTemplate()->setContent($DIC->ui()->renderer()->render($filter) . $table->getHTML($this->hasWritePermission));
455 }
456
461 protected function showUserProviderFormCmd(?ilLTIConsumeProviderFormGUI $form = null): void
462 {
463 global $DIC; /* @var \ILIAS\DI\Container $DIC */
464
465 $DIC->tabs()->activateSubTab('user_provider');
466
467 if ($form === null) {
468 if ($DIC->http()->wrapper()->query()->has('provider_id')) {
469 $DIC->ctrl()->saveParameter($this, 'provider_id');
470 $provider = new ilLTIConsumeProvider((int) $DIC->http()->wrapper()->query()->retrieve('provider_id', $DIC->refinery()->kindlyTo()->int()));
471 } else {
473 }
474
475 $form = $this->buildProviderForm(
476 $provider,
477 self::CMD_SAVE_USER_PROVIDER_FORM,
478 self::CMD_SHOW_USER_PROVIDER
479 );
480 }
481
482 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
483 }
484
491 protected function saveUserProviderFormCmd(): void
492 {
493 global $DIC; /* @var \ILIAS\DI\Container $DIC */
494
495 $provider = $this->fetchProvider();
496
497 $form = $this->buildProviderForm(
498 $provider,
499 self::CMD_SAVE_USER_PROVIDER_FORM,
500 self::CMD_SHOW_USER_PROVIDER
501 );
502
503 if ($form->checkInput()) {
504 $form->initProvider($provider);
505 $provider->setIsGlobal(false);
506 $provider->save();
507
508 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
509 }
510
511 $this->showUserProviderFormCmd($form);
512 }
513
517 protected function acceptProviderAsGlobalMultiCmd(): void
518 {
519 global $DIC; /* @var \ILIAS\DI\Container $DIC */
520
521 $providers = $this->fetchProviderMulti();
522
523 if (!count($providers)) {
524 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_no_provider_selected'), true);
525 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
526 }
527
528 foreach ($providers as $provider) {
529 if (!$provider->isAcceptableAsGlobal()) {
530 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_at_least_one_not_acceptable_as_global'), true);
531 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
532 }
533 }
534
535 $this->performAcceptProvidersAsGlobal($providers);
536
537 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_accept_as_global_multi'), true);
538 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
539 }
540
544 protected function acceptProviderAsGlobalCmd(): void
545 {
546 global $DIC; /* @var \ILIAS\DI\Container $DIC */
547
548 $provider = $this->fetchProvider();
549
550 if ($provider->isAcceptableAsGlobal()) {
552 }
553
554 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_accept_as_global'), true);
555 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
556 }
557
564 protected function performAcceptProvidersAsGlobal(array $providers): void
565 {
566 global $DIC; /* @var \ILIAS\DI\Container $DIC */
567
568 foreach ($providers as $provider) {
569 $provider->setIsGlobal(true);
570 $provider->setAcceptedBy($DIC->user()->getId());
571 $provider->save();
572 }
573 }
574
578 protected function resetProviderToUserScopeMultiCmd(): void
579 {
580 global $DIC; /* @var \ILIAS\DI\Container $DIC */
581
582 $providers = $this->fetchProviderMulti();
583
584 if (!count($providers)) {
585 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_no_provider_selected'), true);
586 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
587 }
588
589 foreach ($providers as $provider) {
590 if (!$provider->isResetableToUserDefined()) {
591 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_at_least_one_not_resetable_to_usr_def'), true);
592 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
593 }
594 }
595
596 $this->performResetProvidersToUserScope($providers);
597
598 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_reset_to_usr_def_multi'), true);
599 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
600 }
601
605 protected function resetProviderToUserScopeCmd(): void
606 {
607 global $DIC; /* @var \ILIAS\DI\Container $DIC */
608
609 $provider = $this->fetchProvider();
610
611 if ($provider->isResetableToUserDefined()) {
613 }
614
615 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_reset_to_usr_def'), true);
616 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
617 }
618
625 protected function performResetProvidersToUserScope(array $providers): void
626 {
627 foreach ($providers as $provider) {
628 $provider->setIsGlobal(false);
629 $provider->setAcceptedBy(0);
630 $provider->save();
631 }
632 }
633
637 protected function deleteGlobalProviderMultiCmd(): void
638 {
639 global $DIC; /* @var \ILIAS\DI\Container $DIC */
640
641 $DIC->tabs()->activateSubTab('global_provider');
642
643 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
644
645 $providers = $this->fetchProviderMulti();
646
647 if (!$this->validateProviderDeletionSelection($providers)) {
648 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
649 }
650
651 $this->confirmDeleteProviders($providers, self::CMD_SHOW_GLOBAL_PROVIDER);
652 }
653
657 protected function deleteGlobalProviderCmd(): void
658 {
659 global $DIC; /* @var \ILIAS\DI\Container $DIC */
660
661 $DIC->tabs()->activateSubTab('global_provider');
662
663 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
664
665 $provider = $this->fetchProvider();
666 $providers = [$provider->getId() => $provider];
667
668 if (!$this->validateProviderDeletionSelection($providers)) {
669 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
670 }
671
672 $this->confirmDeleteProviders($providers, self::CMD_SHOW_GLOBAL_PROVIDER);
673 }
674
678 protected function deleteUserProviderMultiCmd(): void
679 {
680 global $DIC; /* @var \ILIAS\DI\Container $DIC */
681
682 $DIC->tabs()->activateSubTab('user_provider');
683
684 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
685
686 $providers = $this->fetchProviderMulti();
687
688 if (!$this->validateProviderDeletionSelection($providers)) {
689 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
690 }
691
692 $this->confirmDeleteProviders($providers, self::CMD_SHOW_USER_PROVIDER);
693 }
694
698 protected function deleteUserProviderCmd(): void
699 {
700 global $DIC; /* @var \ILIAS\DI\Container $DIC */
701
702 $DIC->tabs()->activateSubTab('global_provider');
703
704 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
705
706 $provider = $this->fetchProvider();
707 $providers = [$provider->getId() => $provider];
708
709 if (!$this->validateProviderDeletionSelection($providers)) {
710 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
711 }
712
713 $this->confirmDeleteProviders($providers, self::CMD_SHOW_USER_PROVIDER);
714 }
715
716 protected function validateProviderDeletionSelection(array $providers): bool
717 {
718 global $DIC; /* @var \ILIAS\DI\Container $DIC */
719
720 if (!count($providers)) {
721 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_no_provider_selected'), true);
722 return false;
723 }
724
725 $providerList = $this->getProviderListForIds(array_keys($providers));
726
727 foreach ($providers as $provider) {
728 if ($providerList->hasUsages($provider->getId())) {
729 $this->main_tpl->setOnScreenMessage('failure', $DIC->language()->txt('lti_at_least_one_prov_has_usages'), true);
730 return false;
731 }
732 }
733
734 return true;
735 }
736
740 protected function confirmDeleteProviders(array $providers, string $cancelCommand): void
741 {
742 global $DIC; /* @var \ILIAS\DI\Container $DIC */
743
744 $confirmationGUI = new ilConfirmationGUI();
745
746 $confirmationGUI->setFormAction($DIC->ctrl()->getFormAction($this));
747 $confirmationGUI->setCancel($DIC->language()->txt('cancel'), $cancelCommand);
748 $confirmationGUI->setConfirm($DIC->language()->txt('confirm'), self::CMD_PERFORM_DELETE_PROVIDERS);
749
750 $confirmationGUI->setHeaderText($DIC->language()->txt('lti_confirm_delete_providers'));
751
752 foreach ($providers as $provider) {
753 /* @var ilLTIConsumeProvider $provider */
754
755 if ($provider->getProviderIcon()->exists()) {
756 $providerIcon = $provider->getProviderIcon()->getAbsoluteFilePath();
757 } else {
758 $providerIcon = ilObject::_getIcon(0, "small", "lti");
759 }
760
761 $confirmationGUI->addItem(
762 'provider_ids[]',
763 (string) $provider->getId(),
764 htmlspecialchars($provider->getTitle()),
765 $providerIcon
766 );
767 }
768
769 $DIC->ui()->mainTemplate()->setContent($confirmationGUI->getHTML());
770 }
771
775 protected function performDeleteProvidersCmd(): void
776 {
777 global $DIC; /* @var \ILIAS\DI\Container $DIC */
778
779 $providers = $this->fetchProviderMulti();
780
781 if ($this->validateProviderDeletionSelection($providers)) {
782 foreach ($providers as $provider) {
783 $provider->delete();
784 }
785
786 $this->main_tpl->setOnScreenMessage('success', $DIC->language()->txt('lti_success_delete_provider'), true);
787 }
788
789 $DIC->ctrl()->redirect($this, $DIC->http()->wrapper()->query()->retrieve(self::REDIRECTION_CMD_PARAMETER, $DIC->refinery()->kindlyTo()->string()));
790 }
791
792 protected function buildProviderTable(ilLTIConsumerAdministrationGUI $parentGui, string $parentCmd): \ilLTIConsumerProviderTableGUI
793 {
795 $parentGui,
796 $parentCmd
797 );
798 }
799
800 protected function showUsagesCmd(): void
801 {
802 global $DIC;
803
804 $DIC->tabs()->activateSubTab('usage');
805
806 $providerList = new ilLTIConsumeProviderList();
807 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_GLOBAL);
808 $providerList->load();
809
811 $table->setData($providerList->getTableDataUsedBy());
812
813 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
814 }
815
819 protected function buildProviderForm(ilLTIConsumeProvider $provider, string $saveCmd, string $cancelCmd): \ilLTIConsumeProviderFormGUI
820 {
821 global $DIC; /* @var \ILIAS\DI\Container $DIC */
822
824 $form->setAdminContext(true);
825 $form->initForm($DIC->ctrl()->getFormAction($this), $saveCmd, $cancelCmd);
826
827 return $form;
828 }
829
833 protected function fetchProvider(): \ilLTIConsumeProvider
834 {
835 global $DIC;
836
837 if ($DIC->http()->wrapper()->query()->has('provider_id')) {
839 (int) $DIC->http()->wrapper()->query()->retrieve('provider_id', $DIC->refinery()->kindlyTo()->int())
840 );
841 } else {
843 }
844 return $provider;
845 }
846
851 protected function fetchProviderMulti(): array
852 {
853 global $DIC;
854 $providers = [];
855
856 $refinery = $DIC->refinery()->kindlyTo()->listOf(
857 $DIC->refinery()->kindlyTo()->int()
858 );
859
860 if ($DIC->http()->wrapper()->post()->has('provider_ids')) {
861 $provider_ids = $DIC->http()->wrapper()->post()->retrieve('provider_ids', $refinery);
862 } elseif ($DIC->http()->wrapper()->query()->has('provider_ids')) {
863 $raw = $DIC->http()->wrapper()->query()->retrieve(
864 'provider_ids',
865 $DIC->refinery()->kindlyTo()->string()
866 );
867
868 if (str_contains($raw, ',')) {
869 $provider_ids = array_map('intval', explode(',', $raw));
870 } else {
871 $provider_ids = [(int) $raw];
872 }
873 } else {
874 return $providers;
875 }
876
877 foreach ($provider_ids as $providerId) {
878 $providers[(int) $providerId] = new ilLTIConsumeProvider((int) $providerId);
879 }
880
881 return $providers;
882 }
883
884
885
886 protected function showSettingsCmd(?ilPropertyFormGUI $form = null): void
887 {
888 // todo - check
889 global $DIC; /* @var \ILIAS\DI\Container $DIC */
890
891 return; // no settings at all currently
892
893 $DIC->tabs()->activateSubTab('settings');
894
895 if ($form === null) {
896 $form = $this->buildSettingsForm();
897 }
898
899 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
900 }
901
902 protected function saveSettingsCmd(): void
903 {
904 // todo - check
905 global $DIC; /* @var \ILIAS\DI\Container $DIC */
906
907 return; // no settings at all currently
908
909 $form = $this->buildSettingsForm();
910
911 if (!$form->checkInput()) {
912 $this->showSettingsCmd($form);
913 return;
914 }
915
916 $DIC->ctrl()->redirect($this, self::CMD_SHOW_SETTINGS);
917 }
918
923 {
924 global $DIC; /* @var \ILIAS\DI\Container $DIC */
925
926 $form = new ilPropertyFormGUI();
927
928 $form->setFormAction($DIC->ctrl()->getFormAction($this));
929 $form->addCommandButton(self::CMD_SAVE_SETTINGS, $DIC->language()->txt('save'));
930 $form->setTitle($DIC->language()->txt('lti_global_settings_form'));
931
932 return $form;
933 }
934
935 protected function getProviderListForIds(array $providerIds): ilLTIConsumeProviderList
936 {
937 $providerList = new ilLTIConsumeProviderList();
938 $providerList->setIdsFilter($providerIds);
939 $providerList->load();
940 $providerList->loadUsages();
941 return $providerList;
942 }
943}
$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.
$provider
Definition: ltitoken.php:80
if(empty($clientId)) $providerId
Definition: ltitoken.php:79
global $DIC
Definition: shib_login.php:26
$url
Definition: shib_logout.php:68
$response
Definition: xapitoken.php:93