ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilLTIConsumerAdministrationGUI.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2019 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5use \GuzzleHttp\Client;
6use \GuzzleHttp\Psr7\Uri;
7
17{
18 const REDIRECTION_CMD_PARAMETER = 'redirectCmd';
19
20 const CMD_SHOW_GLOBAL_PROVIDER = 'showGlobalProvider';
21 const CMD_APPLY_GLOBAL_PROVIDER_FILTER = 'applyGlobalProviderFilter';
22 const CMD_RESET_GLOBAL_PROVIDER_FILTER = 'resetGlobalProviderFilter';
23 const CMD_SHOW_GLOBAL_PROVIDER_FORM = 'showGlobalProviderForm';
24 const CMD_SAVE_GLOBAL_PROVIDER_FORM = 'saveGlobalProviderForm';
25 const CMD_SHOW_GLOBAL_PROVIDER_IMPORT = 'showGlobalProviderImport';
26 const CMD_SAVE_GLOBAL_PROVIDER_IMPORT = 'saveGlobalProviderImport';
27
28 const CMD_SHOW_USER_PROVIDER = 'showUserProvider';
29 const CMD_SHOW_USER_PROVIDER_FORM = 'showUserProviderForm';
30 const CMD_SAVE_USER_PROVIDER_FORM = 'saveUserProviderForm';
31
32 const CMD_ACCEPT_PROVIDER_AS_GLOBAL = 'acceptProviderAsGlobal';
33 const CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI = 'acceptProviderAsGlobalMulti';
34 const CMD_RESET_PROVIDER_TO_USER_SCOPE = 'resetProviderToUserScope';
35 const CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI = 'resetProviderToUserScopeMulti';
36
37 const CMD_DELETE_GLOBAL_PROVIDER = 'deleteGlobalProvider';
38 const CMD_DELETE_GLOBAL_PROVIDER_MULTI = 'deleteGlobalProviderMulti';
39 const CMD_DELETE_USER_PROVIDER = 'deleteUserProvider';
40 const CMD_DELETE_USER_PROVIDER_MULTI = 'deleteUserProviderMulti';
41 const CMD_PERFORM_DELETE_PROVIDERS = 'performDeleteProviders';
42
43 const CMD_SHOW_SETTINGS = 'showSettings';
44 const CMD_SAVE_SETTINGS = 'saveSettings';
45 const CMD_ROLE_AUTOCOMPLETE = 'roleAutocomplete';
46
47 const CMD_SHOW_USAGES = 'showUsages';
48
49 const ALLOWED_FILE_EXT = ['jpg', 'jpeg', 'png', 'gif', 'ico', 'svg'];
50
52 private $_importedXmlData = [];
53
54 public function __construct()
55 {
56 global $DIC; /* @var \ILIAS\DI\Container $DIC */
57
58 $DIC->language()->loadLanguageModule("rep");
59
60 //$this->performProviderImport($this->xml2());
61 }
62
63 protected function initSubTabs()
64 {
65 global $DIC; /* @var \ILIAS\DI\Container $DIC */
66
67 $DIC->tabs()->clearSubTabs();
68
69 $DIC->tabs()->addSubTab(
70 'global_provider',
71 $DIC->language()->txt('global_provider_subtab'),
72 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER)
73 );
74
75 $DIC->tabs()->addSubTab(
76 'user_provider',
77 $DIC->language()->txt('user_provider_subtab'),
78 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_USER_PROVIDER)
79 );
80
81 /* currently no settings at all
82 $DIC->tabs()->addSubTab('settings',
83 $DIC->language()->txt('settings_subtab'),
84 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_SETTINGS)
85 );*/
86
87 // TODO: Implement Screen showing all Objects in Reporsitory
88 $DIC->tabs()->addSubTab(
89 'usage',
90 $DIC->language()->txt('usage_subtab'),
91 $DIC->ctrl()->getLinkTarget($this, 'showUsages')
92 );
93 }
94
95 public function executeCommand()
96 {
97 global $DIC; /* @var \ILIAS\DI\Container $DIC */
98
99 $this->initSubTabs();
100
101 switch ($DIC->ctrl()->getNextClass()) {
102 default:
103
104 $cmd = $DIC->ctrl()->getCmd(self::CMD_SHOW_GLOBAL_PROVIDER) . 'Cmd';
105 $this->{$cmd}();
106 }
107 }
108
109 protected function applyGlobalProviderFilterCmd()
110 {
111 $table = $this->buildProviderTable($this, self::CMD_SHOW_GLOBAL_PROVIDER);
112 $table->writeFilterToSession();
113 $table->resetOffset();
114 $this->showGlobalProviderCmd();
115 }
116
117 protected function resetGlobalProviderFilterCmd()
118 {
119 $table = $this->buildProviderTable($this, self::CMD_SHOW_GLOBAL_PROVIDER);
120 $table->resetFilter();
121 $table->resetOffset();
122 $this->showGlobalProviderCmd();
123 }
124
125 protected function showGlobalProviderCmd()
126 {
127 global $DIC; /* @var \ILIAS\DI\Container $DIC */
128
129 $DIC->tabs()->activateSubTab('global_provider');
130
131 $button = $DIC->ui()->factory()->button()->standard(
132 $DIC->language()->txt('lti_add_global_provider'),
133 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM)
134 );
135
136 $DIC->toolbar()->addComponent($button);
137
138 $button = $DIC->ui()->factory()->button()->standard(
139 $DIC->language()->txt('lti_import_global_provider'),
140 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_IMPORT)
141 );
142
143 $DIC->toolbar()->addComponent($button);
144
145 $table = $this->buildProviderTable($this, self::CMD_SHOW_GLOBAL_PROVIDER);
146 $table->setEditProviderCmd(self::CMD_SHOW_GLOBAL_PROVIDER_FORM);
147 $table->setDeleteProviderCmd(self::CMD_DELETE_GLOBAL_PROVIDER);
148 $table->setDeleteProviderMultiCmd(self::CMD_DELETE_GLOBAL_PROVIDER_MULTI);
149 $table->setResetProviderToUserScopeCmd(self::CMD_RESET_PROVIDER_TO_USER_SCOPE);
150 $table->setResetProviderToUserScopeMultiCmd(self::CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI);
151
152 $table->init();
153
154 $providerList = new ilLTIConsumeProviderList();
155 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_GLOBAL);
156
157 if ($table->getFilterItemByPostVar('title')->getValue()) {
158 $providerList->setTitleFilter($table->getFilterItemByPostVar('title')->getValue());
159 }
160
161 if ($table->getFilterItemByPostVar('category')->getValue()) {
162 $providerList->setCategoryFilter($table->getFilterItemByPostVar('category')->getValue());
163 }
164
165 if ($table->getFilterItemByPostVar('keyword')->getValue()) {
166 $providerList->setKeywordFilter($table->getFilterItemByPostVar('keyword')->getValue());
167 }
168
169 if ($table->getFilterItemByPostVar('outcome')->getChecked()) {
170 $providerList->setHasOutcomeFilter(true);
171 }
172
173 if ($table->getFilterItemByPostVar('internal')->getChecked()) {
174 $providerList->setIsExternalFilter(false);
175 }
176
177 if ($table->getFilterItemByPostVar('with_key')->getChecked()) {
178 $providerList->setIsProviderKeyCustomizableFilter(false);
179 }
180
181 $providerList->load();
182
183 $table->setData($providerList->getTableData());
184
185 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
186 }
187
189 {
190 global $DIC; /* @var \ILIAS\DI\Container $DIC */
191
192 $DIC->tabs()->activateSubTab('global_provider');
193
194 if ($form === null) {
195 if (isset($_GET['provider_id'])) {
196 $DIC->ctrl()->saveParameter($this, 'provider_id');
197 $provider = new ilLTIConsumeProvider((int) $_GET['provider_id']);
198 } else {
199 $provider = new ilLTIConsumeProvider();
200 }
201
202 $form = $this->buildProviderForm(
203 $provider,
204 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
205 self::CMD_SHOW_GLOBAL_PROVIDER
206 );
207 }
208
209 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
210 }
211
212 protected function saveGlobalProviderFormCmd()
213 {
214 global $DIC; /* @var \ILIAS\DI\Container $DIC */
215
216 $provider = $this->fetchProvider();
217
218 $form = $this->buildProviderForm(
219 $provider,
220 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
221 self::CMD_SHOW_GLOBAL_PROVIDER
222 );
223
224 if ($form->checkInput()) {
225 $form->initProvider($provider);
226
227 if (!$provider->getCreator()) {
228 $provider->setCreator($DIC->user()->getId());
229 }
230
231 $provider->setIsGlobal(true);
232 $provider->save();
233
234 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
235 }
236
237 $this->showGlobalProviderFormCmd($form);
238 }
239
240 protected function showGlobalProviderImportCmd(ilPropertyFormGUI $form = null)
241 {
242 global $DIC; /* @var \ILIAS\DI\Container $DIC */
243
244 $DIC->tabs()->activateSubTab('global_provider');
245
246 if ($form === null) {
247 $form = $this->buildProviderImportForm(
248 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
249 self::CMD_SHOW_GLOBAL_PROVIDER
250 );
251 }
252
253 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
254 }
255
256 protected function saveGlobalProviderImportCmd()
257 {
258 global $DIC; /* @var \ILIAS\DI\Container $DIC */
259
260 $form = $this->buildProviderImportForm(
261 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
262 self::CMD_SHOW_GLOBAL_PROVIDER
263 );
264
265 if (!$form->checkInput()) {
266 $this->showGlobalProviderImportCmd($form);
267 return;
268 }
269
270 $fileData = $_POST['provider_xml'];
271
272 if (!$fileData['tmp_name']) {
273 $this->showGlobalProviderImportCmd($form);
274 return;
275 }
276
277 $providerXml = file_get_contents($fileData['tmp_name']);
278
279 $provider = $this->performProviderImport($providerXml);
280
281 ilUtil::sendSuccess($DIC->language()->txt('provider_import_success_msg'));
282 $DIC->ctrl()->setParameter($this, 'provider_id', $provider->getId());
283 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM);
284 }
285
291 protected function buildProviderImportForm($saveCommand, $cancelCommand)
292 {
293 global $DIC; /* @var \ILIAS\DI\Container $DIC */
294
295 $form = new ilPropertyFormGUI();
296
297 $form->setTitle($DIC->language()->txt('form_import_provider'));
298
299 $form->setFormAction($DIC->ctrl()->getFormAction($this));
300
301 $form->addCommandButton($saveCommand, $DIC->language()->txt('import'));
302 $form->addCommandButton($cancelCommand, $DIC->language()->txt('cancel'));
303
304 $provXmlUpload = new ilFileInputGUI($DIC->language()->txt('field_provider_xml'), 'provider_xml');
305 $provXmlUpload->setInfo($DIC->language()->txt('field_provider_xml_info'));
306 $provXmlUpload->setRequired(true);
307 $provXmlUpload->setSuffixes(['xml']);
308 $form->addItem($provXmlUpload);
309
310 return $form;
311 }
312
317 protected function performProviderImport(string $providerXml)
318 {
319 $doc = new DOMDocument;
320 $doc->loadXML($providerXml);
321 $xPath = new DOMXPath($doc);
322 $this->_importedXmlData = [
323 'title' => $xPath->query("//*[local-name() = 'title']")->item(0)->nodeValue,
324 'description' => null !== ($desc = $xPath->query("//*[local-name() = 'description']")->item(0)->nodeValue)?$desc:'',
325 'provider_url' => $xPath->query("//*[local-name() = 'launch_url']")->item(0)->nodeValue,
326 'provider_icon' => $xPath->query("//*[local-name() = 'icon']")->item(0)->nodeValue,
327 'launch_method' => 'newWin',
328 ];
329
330 // DONE ?
336 return $this->prepareProvider();
337 }
338
345 private function prepareProvider()
346 {
347 $provider = new ilLTIConsumeProvider();
348 $provider->setTitle($this->getInput('title'));
349 $provider->setDescription($this->getInput('description'));
350 if (null !== $this->getInput('provider_url')) {
351 $provider->setProviderUrl($this->getInput('provider_url'));
352 }
353 $provider->setIsGlobal(true);
354 $provider->save();
355
356 // PROVIDER ICON
357 $pId = $provider->getId();
358 if (null !== $pIconFileName = $this->getIconXml($this->getInput('provider_icon'), $pId)) {
359 $provider->setProviderIconFilename($pIconFileName);
360 $provider->update();
361 $provider->update();
362 }
363
364 return $provider;
365 }
366
371 private function getInput($key)
372 {
373 /*if( !is_bool($this->_importedXmlData[$key]) ) {
374 $this->_importedXmlData[$key] = trim($this->_importedXmlData[$key]);
375 }*/
376 return $this->_importedXmlData[$key];
377 }
378
384 private function getIconXml($url, $pId)
385 {
386 global $DIC;
387 require_once('libs/composer/vendor/guzzlehttp/guzzle/src/Client.php');
388 require_once('libs/composer/vendor/guzzlehttp/psr7/src/Uri.php');
389
390 $regex = '~(.+)://([^/]+)/([^?]+)\??(.*)~';
391 preg_match_all($regex, $url, $urlPart, PREG_SET_ORDER);
392 $urlPart = $urlPart[0];
393 //var_dump([$url, $urlPart]); exit;
394 $fileExt = strtolower(substr($urlPart[3], strrpos($urlPart[3], '.') + 1));
395 //var_dump($fileExt); exit;
396 if (true !== $this->checkIconFileExtension($fileExt)) {
397 return null;
398 }
399 $finalIcoName = $pId . '.' . $fileExt;
400
402 $uri = new Uri($urlPart[0]);
403 $uri->withScheme($urlPart[1])
404 ->withHost($urlPart[2])
405 ->withPath($urlPart[3])
406 ->withQuery($urlPart[4]);
407 //var_dump($uri); exit;
409 $httpClient = new Client();
410 $response = $httpClient->get($uri);
411 //var_dump($response); exit;
413 $icoResource = $response->getBody();
414 $ico = $icoResource->getContents();
415
416 if (false === $this->checkIconFileVirus($ico)) {
417 $DIC->filesystem()->web()->put('lti_data/provider_icon/' . $finalIcoName, $ico); // $DIC->filesystem()->web()->readAndDelete('lti_data/provider_icon/' . $tempIcoName)
418 } else {
419 return null;
420 }
421
422 return $finalIcoName;
423 }
424
429 private function checkIconFileExtension($ext)
430 {
431 return false !== ($check = array_search($ext, self::ALLOWED_FILE_EXT)) ? true : false;
432 }
433
438 private function checkIconFileVirus($ico)
439 {
441 if (!$virusScan) {
442 return false;
443 }
444 return $virusScan->scanBuffer($ico);
445 // return false === (bool)$virusScan->scanBuffer($ico) ? false : true;
446 }
447
448 protected function showUserProviderCmd()
449 {
450 global $DIC; /* @var \ILIAS\DI\Container $DIC */
451
452 $DIC->tabs()->activateSubTab('user_provider');
453
454 $providerList = new ilLTIConsumeProviderList();
455 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_USER);
456 $providerList->load();
457
458 $table = $this->buildProviderTable($this, self::CMD_SHOW_USER_PROVIDER);
459 $table->setEditProviderCmd(self::CMD_SHOW_USER_PROVIDER_FORM);
460 $table->setAcceptProviderAsGlobalMultiCmd(self::CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI);
461 $table->setAcceptProviderAsGlobalCmd(self::CMD_ACCEPT_PROVIDER_AS_GLOBAL);
462 $table->setDeleteProviderCmd(self::CMD_DELETE_USER_PROVIDER);
463 $table->setDeleteProviderMultiCmd(self::CMD_DELETE_USER_PROVIDER_MULTI);
464
465 $table->setData($providerList->getTableData());
466
467 $table->init();
468
469 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
470 }
471
473 {
474 global $DIC; /* @var \ILIAS\DI\Container $DIC */
475
476 $DIC->tabs()->activateSubTab('user_provider');
477
478 if ($form === null) {
479 if (isset($_GET['provider_id'])) {
480 $DIC->ctrl()->saveParameter($this, 'provider_id');
481 $provider = new ilLTIConsumeProvider((int) $_GET['provider_id']);
482 } else {
483 $provider = new ilLTIConsumeProvider();
484 }
485
486 $form = $this->buildProviderForm(
487 $provider,
488 self::CMD_SAVE_USER_PROVIDER_FORM,
489 self::CMD_SHOW_USER_PROVIDER
490 );
491 }
492
493 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
494 }
495
496 protected function saveUserProviderFormCmd()
497 {
498 global $DIC; /* @var \ILIAS\DI\Container $DIC */
499
500 $provider = $this->fetchProvider();
501
502 $form = $this->buildProviderForm(
503 $provider,
504 self::CMD_SAVE_USER_PROVIDER_FORM,
505 self::CMD_SHOW_USER_PROVIDER
506 );
507
508 if ($form->checkInput()) {
509 $form->initProvider($provider);
510 $provider->setIsGlobal(false);
511 $provider->save();
512
513 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
514 }
515
516 $this->showUserProviderFormCmd($form);
517 }
518
520 {
521 global $DIC; /* @var \ILIAS\DI\Container $DIC */
522
523 $providers = $this->fetchProviderMulti();
524
525 if (!count($providers)) {
526 ilUtil::sendFailure($DIC->language()->txt('lti_no_provider_selected'), true);
527 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
528 }
529
530 foreach ($providers as $provider) {
531 if (!$provider->isAcceptableAsGlobal()) {
532 ilUtil::sendFailure($DIC->language()->txt('lti_at_least_one_not_acceptable_as_global'), true);
533 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
534 }
535 }
536
537 $this->performAcceptProvidersAsGlobal($providers);
538
539 ilUtil::sendSuccess($DIC->language()->txt('lti_success_accept_as_global_multi'), true);
540 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
541 }
542
543 protected function acceptProviderAsGlobalCmd()
544 {
545 global $DIC; /* @var \ILIAS\DI\Container $DIC */
546
547 $provider = $this->fetchProvider();
548
549 if ($provider->isAcceptableAsGlobal()) {
550 $this->performAcceptProvidersAsGlobal([$provider]);
551 }
552
553 ilUtil::sendSuccess($DIC->language()->txt('lti_success_accept_as_global'), true);
554 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
555 }
556
560 protected function performAcceptProvidersAsGlobal(array $providers)
561 {
562 global $DIC; /* @var \ILIAS\DI\Container $DIC */
563
564 foreach ($providers as $provider) {
565 $provider->setIsGlobal(true);
566 $provider->setAcceptedBy($DIC->user()->getId());
567 $provider->save();
568 }
569 }
570
572 {
573 global $DIC; /* @var \ILIAS\DI\Container $DIC */
574
575 $providers = $this->fetchProviderMulti();
576
577 if (!count($providers)) {
578 ilUtil::sendFailure($DIC->language()->txt('lti_no_provider_selected'), true);
579 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
580 }
581
582 foreach ($providers as $provider) {
583 if (!$provider->isResetableToUserDefined()) {
584 ilUtil::sendFailure($DIC->language()->txt('lti_at_least_one_not_resetable_to_usr_def'), true);
585 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
586 }
587 }
588
589 $this->performResetProvidersToUserScope($providers);
590
591 ilUtil::sendSuccess($DIC->language()->txt('lti_success_reset_to_usr_def_multi'), true);
592 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
593 }
594
595 protected function resetProviderToUserScopeCmd()
596 {
597 global $DIC; /* @var \ILIAS\DI\Container $DIC */
598
599 $provider = $this->fetchProvider();
600
601 if ($provider->isResetableToUserDefined()) {
602 $this->performResetProvidersToUserScope([$provider]);
603 }
604
605 ilUtil::sendSuccess($DIC->language()->txt('lti_success_reset_to_usr_def'), true);
606 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
607 }
608
612 protected function performResetProvidersToUserScope(array $providers)
613 {
614 foreach ($providers as $provider) {
615 $provider->setIsGlobal(false);
616 $provider->setAcceptedBy(0);
617 $provider->save();
618 }
619 }
620
621 protected function deleteGlobalProviderMultiCmd()
622 {
623 global $DIC; /* @var \ILIAS\DI\Container $DIC */
624
625 $DIC->tabs()->activateSubTab('global_provider');
626
627 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
628
629 $providers = $this->fetchProviderMulti();
630
631 if (!$this->validateProviderDeletionSelection($providers)) {
632 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
633 }
634
635 $this->confirmDeleteProviders($providers, self::CMD_SHOW_GLOBAL_PROVIDER);
636 }
637
638 protected function deleteGlobalProviderCmd()
639 {
640 global $DIC; /* @var \ILIAS\DI\Container $DIC */
641
642 $DIC->tabs()->activateSubTab('global_provider');
643
644 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
645
646 $provider = $this->fetchProvider();
647 $providers = [$provider->getId() => $provider];
648
649 if (!$this->validateProviderDeletionSelection($providers)) {
650 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
651 }
652
653 $this->confirmDeleteProviders($providers, self::CMD_SHOW_GLOBAL_PROVIDER);
654 }
655
656 protected function deleteUserProviderMultiCmd()
657 {
658 global $DIC; /* @var \ILIAS\DI\Container $DIC */
659
660 $DIC->tabs()->activateSubTab('user_provider');
661
662 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
663
664 $providers = $this->fetchProviderMulti();
665
666 if (!$this->validateProviderDeletionSelection($providers)) {
667 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
668 }
669
670 $this->confirmDeleteProviders($providers, self::CMD_SHOW_USER_PROVIDER);
671 }
672
673 protected function deleteUserProviderCmd()
674 {
675 global $DIC; /* @var \ILIAS\DI\Container $DIC */
676
677 $DIC->tabs()->activateSubTab('global_provider');
678
679 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
680
681 $provider = $this->fetchProvider();
682 $providers = [$provider->getId() => $provider];
683
684 if (!$this->validateProviderDeletionSelection($providers)) {
685 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
686 }
687
688 $this->confirmDeleteProviders($providers, self::CMD_SHOW_USER_PROVIDER);
689 }
690
691 protected function validateProviderDeletionSelection(array $providers)
692 {
693 global $DIC; /* @var \ILIAS\DI\Container $DIC */
694
695 if (!count($providers)) {
696 ilUtil::sendFailure($DIC->language()->txt('lti_no_provider_selected'), true);
697 return false;
698 }
699
700 $providerList = $this->getProviderListForIds(array_keys($providers));
701
702 foreach ($providers as $provider) {
703 if ($providerList->hasUsages($provider->getId())) {
704 ilUtil::sendFailure($DIC->language()->txt('lti_at_least_one_prov_has_usages'), true);
705 return false;
706 }
707 }
708
709 return true;
710 }
711
712 protected function confirmDeleteProviders(array $providers, string $cancelCommand)
713 {
714 global $DIC; /* @var \ILIAS\DI\Container $DIC */
715
716 $confirmationGUI = new ilConfirmationGUI();
717
718 $confirmationGUI->setFormAction($DIC->ctrl()->getFormAction($this));
719 $confirmationGUI->setCancel($DIC->language()->txt('cancel'), $cancelCommand);
720 $confirmationGUI->setConfirm($DIC->language()->txt('confirm'), self::CMD_PERFORM_DELETE_PROVIDERS);
721
722 $confirmationGUI->setHeaderText($DIC->language()->txt('lti_confirm_delete_providers'));
723
724 foreach ($providers as $provider) {
725 /* @var ilLTIConsumeProvider $provider */
726
727 if ($provider->getProviderIcon()->exists()) {
728 $providerIcon = $provider->getProviderIcon()->getAbsoluteFilePath();
729 } else {
730 $providerIcon = ilObject::_getIcon("", "small", "lti");
731 }
732
733 $confirmationGUI->addItem(
734 'provider_ids[]',
735 $provider->getId(),
736 $provider->getTitle(),
737 $providerIcon
738 );
739 }
740
741 $DIC->ui()->mainTemplate()->setContent($confirmationGUI->getHTML());
742 }
743
744 protected function performDeleteProvidersCmd()
745 {
746 global $DIC; /* @var \ILIAS\DI\Container $DIC */
747
748 $providers = $this->fetchProviderMulti();
749
750 if ($this->validateProviderDeletionSelection($providers)) {
751 foreach ($providers as $provider) {
752 $provider->delete();
753 }
754
755 ilUtil::sendSuccess($DIC->language()->txt('lti_success_delete_provider'), true);
756 }
757
758 $DIC->ctrl()->redirect($this, $_GET[self::REDIRECTION_CMD_PARAMETER]);
759 }
760
767 protected function buildProviderTable($parentGui, $parentCmd)
768 {
770 $parentGui,
771 $parentCmd
772 );
773
774 $table->setFilterCommand(self::CMD_APPLY_GLOBAL_PROVIDER_FILTER);
775 $table->setResetCommand(self::CMD_RESET_GLOBAL_PROVIDER_FILTER);
776
777 $table->setAvailabilityColumnEnabled(true);
778 $table->setProviderCreatorColumnEnabled(true);
779
780 $table->setActionsColumnEnabled(true);
781 $table->setDetailedUsagesEnabled(true);
782
783 return $table;
784 }
785
786 protected function showUsagesCmd()
787 {
788 global $DIC; /* @var \ILIAS\DI\Container $DIC */
789 require_once('./Modules/LTIConsumer/classes/class.ilLTIConsumerProviderUsageTableGUI.php');
790
791 $DIC->tabs()->activateSubTab('usage');
792
793 $providerList = new ilLTIConsumeProviderList();
794 $providerList->setScopeFilter(ilLTIConsumeProviderList::SCOPE_GLOBAL);
795 $providerList->load();
796
797 $table = new ilLTIConsumerProviderUsageTableGUI($this, self::CMD_SHOW_USAGES);
798 $table->setData($providerList->getTableDataUsedBy());
799 $table->init();
800
801 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
802 }
803
807 protected function buildProviderForm(ilLTIConsumeProvider $provider, $saveCmd, $cancelCmd)
808 {
809 global $DIC; /* @var \ILIAS\DI\Container $DIC */
810
811 $form = new ilLTIConsumeProviderFormGUI($provider);
812 $form->setAdminContext(true);
813 $form->initForm($DIC->ctrl()->getFormAction($this), $saveCmd, $cancelCmd);
814
815 return $form;
816 }
817
821 protected function fetchProvider()
822 {
823 if (isset($_GET['provider_id'])) {
824 $provider = new ilLTIConsumeProvider((int) $_GET['provider_id']);
825 } else {
826 $provider = new ilLTIConsumeProvider();
827 }
828 return $provider;
829 }
830
834 protected function fetchProviderMulti()
835 {
836 $providers = [];
837
838 if (!isset($_POST['provider_ids']) || !is_array($_POST['provider_ids'])) {
839 return $providers;
840 }
841
842 foreach ($_POST['provider_ids'] as $providerId) {
843 $providers[(int) $providerId] = new ilLTIConsumeProvider((int) $providerId);
844 }
845
846 return $providers;
847 }
848
853 {
854 if (isset($_GET[self::CONTEXT_PARAMETER])) {
855 switch ($_GET[self::CONTEXT_PARAMETER]) {
856 case self::CONTEXT_GLOBAL_PROVIDER:
857
859
860 case self::CONTEXT_USER_PROVIDER:
861
863 }
864 }
865
866 return '';
867 }
868
869 protected function showSettingsCmd(ilPropertyFormGUI $form = null)
870 {
871 global $DIC; /* @var \ILIAS\DI\Container $DIC */
872
873 return ''; // no settings at all currently
874
875 $DIC->tabs()->activateSubTab('settings');
876
877 if ($form === null) {
878 $form = $this->buildSettingsForm();
879 }
880
881 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
882 }
883
884 protected function saveSettingsCmd()
885 {
886 global $DIC; /* @var \ILIAS\DI\Container $DIC */
887
888 return ''; // no settings at all currently
889
890 $form = $this->buildSettingsForm();
891
892 if (!$form->checkInput()) {
893 $this->showSettingsCmd($form);
894 return;
895 }
896
897 $DIC->ctrl()->redirect($this, self::CMD_SHOW_SETTINGS);
898 }
899
903 protected function buildSettingsForm()
904 {
905 global $DIC; /* @var \ILIAS\DI\Container $DIC */
906
907 $form = new ilPropertyFormGUI();
908
909 $form->setFormAction($DIC->ctrl()->getFormAction($this));
910 $form->addCommandButton(self::CMD_SAVE_SETTINGS, $DIC->language()->txt('save'));
911 $form->setTitle($DIC->language()->txt('lti_global_settings_form'));
912
913 return $form;
914 }
915
920 protected function getProviderListForIds(array $providerIds) : ilLTIConsumeProviderList
921 {
922 $providerList = new ilLTIConsumeProviderList();
923 $providerList->setIdsFilter($providerIds);
924 $providerList->load();
925 $providerList->loadUsages();
926 return $providerList;
927 }
928}
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
Confirmation screen class.
This class represents a file property in a property form.
showUserProviderFormCmd(ilLTIConsumeProviderFormGUI $form=null)
showGlobalProviderImportCmd(ilPropertyFormGUI $form=null)
buildProviderForm(ilLTIConsumeProvider $provider, $saveCmd, $cancelCmd)
confirmDeleteProviders(array $providers, string $cancelCommand)
showGlobalProviderFormCmd(ilLTIConsumeProviderFormGUI $form=null)
This class represents a property form user interface.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
$url
$response
$DIC
Definition: xapitoken.php:46