ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilLTIConsumerAdministrationGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
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  {
818  $table = new ilLTIConsumerProviderTableGUI(
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 
859  $form = new ilLTIConsumeProviderFormGUI($provider);
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 
943  protected function buildSettingsForm(): \ilPropertyFormGUI
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 }
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
showUserProviderFormCmd(?ilLTIConsumeProviderFormGUI $form=null)
This class represents a file property in a property form.
confirmDeleteProviders(array $providers, string $cancelCommand)
if(empty($clientId)) $providerId
Definition: ltitoken.php:82
buildProviderTable(ilLTIConsumerAdministrationGUI $parentGui, string $parentCmd)
buildProviderForm(ilLTIConsumeProvider $provider, string $saveCmd, string $cancelCmd)
global $DIC
Definition: feed.php:28
$provider
Definition: ltitoken.php:83
string $key
Consumer key/client ID value.
Definition: System.php:193
buildProviderImportForm(string $saveCommand, string $cancelCommand)
showGlobalProviderFormCmd(?ilLTIConsumeProviderFormGUI $form=null)
$check
Definition: buildRTE.php:81
$url
$response
showGlobalProviderImportCmd(ilPropertyFormGUI $form=null)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...