5 use \GuzzleHttp\Client;
6 use \GuzzleHttp\Psr7\Uri;
58 $DIC->language()->loadLanguageModule(
"rep");
67 $DIC->tabs()->clearSubTabs();
69 $DIC->tabs()->addSubTab(
71 $DIC->language()->txt(
'global_provider_subtab'),
72 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER)
75 $DIC->tabs()->addSubTab(
77 $DIC->language()->txt(
'user_provider_subtab'),
78 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_USER_PROVIDER)
88 $DIC->tabs()->addSubTab(
90 $DIC->language()->txt(
'usage_subtab'),
91 $DIC->ctrl()->getLinkTarget($this,
'showUsages')
101 switch ($DIC->ctrl()->getNextClass()) {
104 $cmd = $DIC->ctrl()->getCmd(self::CMD_SHOW_GLOBAL_PROVIDER) .
'Cmd';
112 $table->writeFilterToSession();
113 $table->resetOffset();
120 $table->resetFilter();
121 $table->resetOffset();
129 $DIC->tabs()->activateSubTab(
'global_provider');
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)
136 $DIC->toolbar()->addComponent($button);
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)
143 $DIC->toolbar()->addComponent($button);
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);
157 if ($table->getFilterItemByPostVar(
'title')->getValue()) {
158 $providerList->setTitleFilter($table->getFilterItemByPostVar(
'title')->getValue());
161 if ($table->getFilterItemByPostVar(
'category')->getValue()) {
162 $providerList->setCategoryFilter($table->getFilterItemByPostVar(
'category')->getValue());
165 if ($table->getFilterItemByPostVar(
'keyword')->getValue()) {
166 $providerList->setKeywordFilter($table->getFilterItemByPostVar(
'keyword')->getValue());
169 if ($table->getFilterItemByPostVar(
'outcome')->getChecked()) {
170 $providerList->setHasOutcomeFilter(
true);
173 if ($table->getFilterItemByPostVar(
'internal')->getChecked()) {
174 $providerList->setIsExternalFilter(
false);
177 if ($table->getFilterItemByPostVar(
'with_key')->getChecked()) {
178 $providerList->setIsProviderKeyCustomizableFilter(
false);
181 $providerList->load();
183 $table->setData($providerList->getTableData());
185 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
192 $DIC->tabs()->activateSubTab(
'global_provider');
194 if ($form === null) {
195 if (isset(
$_GET[
'provider_id'])) {
196 $DIC->ctrl()->saveParameter($this,
'provider_id');
204 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
205 self::CMD_SHOW_GLOBAL_PROVIDER
209 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
220 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
221 self::CMD_SHOW_GLOBAL_PROVIDER
224 if ($form->checkInput()) {
225 $form->initProvider($provider);
227 if (!$provider->getCreator()) {
228 $provider->setCreator($DIC->user()->getId());
231 $provider->setIsGlobal(
true);
234 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
244 $DIC->tabs()->activateSubTab(
'global_provider');
246 if ($form === null) {
248 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
249 self::CMD_SHOW_GLOBAL_PROVIDER
253 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
261 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
262 self::CMD_SHOW_GLOBAL_PROVIDER
265 if (!$form->checkInput()) {
270 $fileData =
$_POST[
'provider_xml'];
272 if (!$fileData[
'tmp_name']) {
277 $providerXml = file_get_contents($fileData[
'tmp_name']);
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);
297 $form->setTitle($DIC->language()->txt(
'form_import_provider'));
299 $form->setFormAction($DIC->ctrl()->getFormAction($this));
301 $form->addCommandButton($saveCommand, $DIC->language()->txt(
'import'));
302 $form->addCommandButton($cancelCommand, $DIC->language()->txt(
'cancel'));
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);
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',
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'));
353 $provider->setIsGlobal(
true);
357 $pId = $provider->getId();
358 if (null !== $pIconFileName = $this->getIconXml($this->
getInput(
'provider_icon'), $pId)) {
359 $provider->setProviderIconFilename($pIconFileName);
376 return $this->_importedXmlData[$key];
384 private function getIconXml(
$url, $pId)
387 require_once(
'libs/composer/vendor/guzzlehttp/guzzle/src/Client.php');
388 require_once(
'libs/composer/vendor/guzzlehttp/psr7/src/Uri.php');
390 $regex =
'~(.+)://([^/]+)/([^?]+)\??(.*)~';
391 preg_match_all($regex,
$url, $urlPart, PREG_SET_ORDER);
392 $urlPart = $urlPart[0];
394 $fileExt = strtolower(substr($urlPart[3], strrpos($urlPart[3],
'.') + 1));
399 $finalIcoName = $pId .
'.' . $fileExt;
402 $uri =
new Uri($urlPart[0]);
403 $uri->withScheme($urlPart[1])
404 ->withHost($urlPart[2])
405 ->withPath($urlPart[3])
406 ->withQuery($urlPart[4]);
409 $httpClient =
new Client();
414 $ico = $icoResource->getContents();
417 $DIC->filesystem()->web()->put(
'lti_data/provider_icon/' . $finalIcoName, $ico);
422 return $finalIcoName;
431 return false !== ($check = array_search($ext, self::ALLOWED_FILE_EXT)) ?
true :
false;
444 return $virusScan->scanBuffer($ico);
452 $DIC->tabs()->activateSubTab(
'user_provider');
456 $providerList->load();
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);
465 $table->setData($providerList->getTableData());
469 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
476 $DIC->tabs()->activateSubTab(
'user_provider');
478 if ($form === null) {
479 if (isset(
$_GET[
'provider_id'])) {
480 $DIC->ctrl()->saveParameter($this,
'provider_id');
488 self::CMD_SAVE_USER_PROVIDER_FORM,
489 self::CMD_SHOW_USER_PROVIDER
493 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
504 self::CMD_SAVE_USER_PROVIDER_FORM,
505 self::CMD_SHOW_USER_PROVIDER
508 if ($form->checkInput()) {
509 $form->initProvider($provider);
510 $provider->setIsGlobal(
false);
513 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
525 if (!count($providers)) {
527 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
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);
539 ilUtil::sendSuccess($DIC->language()->txt(
'lti_success_accept_as_global_multi'),
true);
540 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
549 if ($provider->isAcceptableAsGlobal()) {
553 ilUtil::sendSuccess($DIC->language()->txt(
'lti_success_accept_as_global'),
true);
554 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
564 foreach ($providers as $provider) {
565 $provider->setIsGlobal(
true);
566 $provider->setAcceptedBy($DIC->user()->getId());
577 if (!count($providers)) {
579 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
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);
591 ilUtil::sendSuccess($DIC->language()->txt(
'lti_success_reset_to_usr_def_multi'),
true);
592 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
601 if ($provider->isResetableToUserDefined()) {
605 ilUtil::sendSuccess($DIC->language()->txt(
'lti_success_reset_to_usr_def'),
true);
606 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
614 foreach ($providers as $provider) {
615 $provider->setIsGlobal(
false);
616 $provider->setAcceptedBy(0);
625 $DIC->tabs()->activateSubTab(
'global_provider');
627 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
632 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
642 $DIC->tabs()->activateSubTab(
'global_provider');
644 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
647 $providers = [$provider->getId() => $provider];
650 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
660 $DIC->tabs()->activateSubTab(
'user_provider');
662 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
667 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
677 $DIC->tabs()->activateSubTab(
'global_provider');
679 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
682 $providers = [$provider->getId() => $provider];
685 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
695 if (!count($providers)) {
702 foreach ($providers as $provider) {
703 if ($providerList->hasUsages($provider->getId())) {
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);
722 $confirmationGUI->setHeaderText($DIC->language()->txt(
'lti_confirm_delete_providers'));
724 foreach ($providers as $provider) {
727 if ($provider->getProviderIcon()->exists()) {
728 $providerIcon = $provider->getProviderIcon()->getAbsoluteFilePath();
730 $providerIcon = ilObject::_getIcon(
"",
"small",
"lti");
733 $confirmationGUI->addItem(
736 $provider->getTitle(),
741 $DIC->ui()->mainTemplate()->setContent($confirmationGUI->getHTML());
751 foreach ($providers as $provider) {
755 ilUtil::sendSuccess($DIC->language()->txt(
'lti_success_delete_provider'),
true);
758 $DIC->ctrl()->redirect($this,
$_GET[self::REDIRECTION_CMD_PARAMETER]);
774 $table->setFilterCommand(self::CMD_APPLY_GLOBAL_PROVIDER_FILTER);
775 $table->setResetCommand(self::CMD_RESET_GLOBAL_PROVIDER_FILTER);
777 $table->setAvailabilityColumnEnabled(
true);
778 $table->setProviderCreatorColumnEnabled(
true);
780 $table->setActionsColumnEnabled(
true);
781 $table->setDetailedUsagesEnabled(
true);
789 require_once(
'./Modules/LTIConsumer/classes/class.ilLTIConsumerProviderUsageTableGUI.php');
791 $DIC->tabs()->activateSubTab(
'usage');
795 $providerList->load();
798 $table->setData($providerList->getTableDataUsedBy());
801 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
812 $form->setAdminContext(
true);
813 $form->initForm($DIC->ctrl()->getFormAction($this), $saveCmd, $cancelCmd);
823 if (isset(
$_GET[
'provider_id'])) {
838 if (!isset(
$_POST[
'provider_ids']) || !is_array(
$_POST[
'provider_ids'])) {
842 foreach (
$_POST[
'provider_ids'] as $providerId) {
854 if (isset(
$_GET[self::CONTEXT_PARAMETER])) {
855 switch (
$_GET[self::CONTEXT_PARAMETER]) {
856 case self::CONTEXT_GLOBAL_PROVIDER:
858 return self::CMD_SHOW_GLOBAL_PROVIDER;
860 case self::CONTEXT_USER_PROVIDER:
862 return self::CMD_SHOW_USER_PROVIDER;
875 $DIC->tabs()->activateSubTab(
'settings');
877 if ($form === null) {
881 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
892 if (!$form->checkInput()) {
897 $DIC->ctrl()->redirect($this, self::CMD_SHOW_SETTINGS);
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'));
923 $providerList->setIdsFilter($providerIds);
924 $providerList->load();
925 $providerList->loadUsages();
926 return $providerList;
performProviderImport(string $providerXml)
const CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI
const CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI
const CMD_APPLY_GLOBAL_PROVIDER_FILTER
const CMD_SHOW_GLOBAL_PROVIDER
const CMD_ROLE_AUTOCOMPLETE
const CMD_DELETE_GLOBAL_PROVIDER
resetProviderToUserScopeMultiCmd()
const CMD_RESET_GLOBAL_PROVIDER_FILTER
const CMD_DELETE_GLOBAL_PROVIDER_MULTI
const CMD_DELETE_USER_PROVIDER_MULTI
const REDIRECTION_CMD_PARAMETER
saveUserProviderFormCmd()
confirmDeleteProviders(array $providers, string $cancelCommand)
saveGlobalProviderImportCmd()
const CMD_SHOW_USER_PROVIDER
const CMD_DELETE_USER_PROVIDER
resetGlobalProviderFilterCmd()
buildProviderForm(ilLTIConsumeProvider $provider, $saveCmd, $cancelCmd)
showSettingsCmd(ilPropertyFormGUI $form=null)
const CMD_SAVE_USER_PROVIDER_FORM
const CMD_RESET_PROVIDER_TO_USER_SCOPE
acceptProviderAsGlobalMultiCmd()
buildProviderTable($parentGui, $parentCmd)
const CMD_ACCEPT_PROVIDER_AS_GLOBAL
applyGlobalProviderFilterCmd()
validateProviderDeletionSelection(array $providers)
const CMD_SAVE_GLOBAL_PROVIDER_IMPORT
const CMD_SHOW_USER_PROVIDER_FORM
buildProviderImportForm($saveCommand, $cancelCommand)
showGlobalProviderFormCmd(ilLTIConsumeProviderFormGUI $form=null)
deleteGlobalProviderMultiCmd()
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
saveGlobalProviderFormCmd()
deleteUserProviderMultiCmd()
const CMD_PERFORM_DELETE_PROVIDERS
checkIconFileExtension($ext)
showUserProviderFormCmd(ilLTIConsumeProviderFormGUI $form=null)
const CMD_SHOW_GLOBAL_PROVIDER_IMPORT
const CMD_SHOW_GLOBAL_PROVIDER_FORM
acceptProviderAsGlobalCmd()
deleteGlobalProviderCmd()
resetProviderToUserScopeCmd()
performAcceptProvidersAsGlobal(array $providers)
performResetProvidersToUserScope(array $providers)
performDeleteProvidersCmd()
getProviderListForIds(array $providerIds)
getContextRelatedRedirectionCommand()
const CMD_SAVE_GLOBAL_PROVIDER_FORM
showGlobalProviderImportCmd(ilPropertyFormGUI $form=null)
Confirmation screen class.