ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
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 
5 use \GuzzleHttp\Client;
6 use \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 
472  protected function showUserProviderFormCmd(ilLTIConsumeProviderFormGUI $form = null)
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 
519  protected function acceptProviderAsGlobalMultiCmd()
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 
571  protected function resetProviderToUserScopeMultiCmd()
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  {
769  $table = new ilLTIConsumerProviderTableGUI(
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 
858  return self::CMD_SHOW_GLOBAL_PROVIDER;
859 
860  case self::CONTEXT_USER_PROVIDER:
861 
862  return self::CMD_SHOW_USER_PROVIDER;
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 }
static _getIcon( $a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
This class represents a property form user interface.
$_GET["client_id"]
This class represents a file property in a property form.
confirmDeleteProviders(array $providers, string $cancelCommand)
buildProviderForm(ilLTIConsumeProvider $provider, $saveCmd, $cancelCmd)
setInfo($a_info)
Set Information Text.
global $DIC
Definition: goto.php:24
showGlobalProviderFormCmd(ilLTIConsumeProviderFormGUI $form=null)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
showUserProviderFormCmd(ilLTIConsumeProviderFormGUI $form=null)
$url
$response
$_POST["username"]
showGlobalProviderImportCmd(ilPropertyFormGUI $form=null)
Confirmation screen class.