19declare(strict_types=1);
22use GuzzleHttp\Psr7\Uri;
74 $this->main_tpl =
$DIC->ui()->mainTemplate();
76 $DIC->language()->loadLanguageModule(
"rep");
84 $DIC->tabs()->clearSubTabs();
86 $DIC->tabs()->addSubTab(
88 $DIC->language()->txt(
'global_provider_subtab'),
89 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER)
92 $DIC->tabs()->addSubTab(
94 $DIC->language()->txt(
'user_provider_subtab'),
95 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_USER_PROVIDER)
105 $DIC->tabs()->addSubTab(
107 $DIC->language()->txt(
'usage_subtab'),
108 $DIC->ctrl()->getLinkTarget($this,
'showUsages')
118 switch ($DIC->ctrl()->getNextClass()) {
121 $cmd =
$DIC->ctrl()->getCmd(self::CMD_SHOW_GLOBAL_PROVIDER) .
'Cmd';
133 $DIC->tabs()->activateSubTab(
'global_provider');
135 if ($this->hasWritePermission) {
136 $button =
$DIC->ui()->factory()->button()->standard(
137 $DIC->language()->txt(
'lti_add_global_provider'),
138 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM)
141 $DIC->toolbar()->addComponent($button);
143 $button =
$DIC->ui()->factory()->button()->standard(
144 $DIC->language()->txt(
'lti_import_global_provider'),
145 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_IMPORT)
148 $DIC->toolbar()->addComponent($button);
154 $table->enableResetProviderToUserScope();
156 $filter = $table->getFilter();
157 $filter_params =
$DIC->uiService()->filter()->getData($filter);
161 $providerList->setTitleFilter($filter_params[
'title'] ??
'');
162 $providerList->setKeywordFilter($filter_params[
'keywords'] ??
'');
163 $providerList->setHasOutcomeFilter(($filter_params[
'outcome'] ??
'') ===
'' ?
null : $filter_params[
'outcome'] ===
'yes');
164 $providerList->setIsExternalFilter(($filter_params[
'internal'] ??
'') ===
'' ?
null : $filter_params[
'internal'] !==
'yes');
165 $providerList->setIsProviderKeyCustomizableFilter(($filter_params[
'with_key'] ??
'') ===
'' ?
null : $filter_params[
'with_key'] ===
'yes');
166 $providerList->setCategoryFilter($filter_params[
'category'] ??
'');
168 $providerList->load();
170 $table->setData($providerList->getTableData());
172 $DIC->ui()->mainTemplate()->setContent(
$DIC->ui()->renderer()->render($filter) . $table->getHTML($this->hasWritePermission));
183 $DIC->tabs()->activateSubTab(
'global_provider');
185 if ($form ===
null) {
186 if (
$DIC->http()->wrapper()->query()->has(
'provider_id')) {
187 $DIC->ctrl()->saveParameter($this,
'provider_id');
195 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
196 self::CMD_SHOW_GLOBAL_PROVIDER
200 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
211 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
212 self::CMD_SHOW_GLOBAL_PROVIDER
215 if ($form->checkInput()) {
225 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
235 $DIC->tabs()->activateSubTab(
'global_provider');
237 if ($form ===
null) {
239 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
240 self::CMD_SHOW_GLOBAL_PROVIDER
244 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
252 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
253 self::CMD_SHOW_GLOBAL_PROVIDER
256 if (!$form->checkInput()) {
261 $fileData = (array)
$DIC->http()->wrapper()->post()->retrieve(
'provider_xml',
$DIC->refinery()->kindlyTo()->listOf(
$DIC->refinery()->kindlyTo()->string()));
263 if (!$fileData[
'tmp_name']) {
268 $providerXml = file_get_contents($fileData[
'tmp_name']);
272 $this->main_tpl->setOnScreenMessage(
'success',
$DIC->language()->txt(
'provider_import_success_msg'));
273 $DIC->ctrl()->setParameter($this,
'provider_id',
$provider->getId());
274 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM);
286 $form->setTitle(
$DIC->language()->txt(
'form_import_provider'));
288 $form->setFormAction(
$DIC->ctrl()->getFormAction($this));
290 $form->addCommandButton($saveCommand,
$DIC->language()->txt(
'import'));
291 $form->addCommandButton($cancelCommand,
$DIC->language()->txt(
'cancel'));
293 $provXmlUpload =
new ilFileInputGUI(
$DIC->language()->txt(
'field_provider_xml'),
'provider_xml');
294 $provXmlUpload->setInfo(
$DIC->language()->txt(
'field_provider_xml_info'));
295 $provXmlUpload->setRequired(
true);
296 $provXmlUpload->setSuffixes([
'xml']);
297 $form->addItem($provXmlUpload);
309 $doc =
new DOMDocument();
310 $doc->loadXML($providerXml);
311 $xPath =
new DOMXPath($doc);
312 $this->_importedXmlData = [
313 'title' => $xPath->query(
"//*[local-name() = 'title']")->item(0)->nodeValue,
314 'description' =>
null !== ($desc = $xPath->query(
"//*[local-name() = 'description']")->item(0)->nodeValue) ? $desc :
'',
315 'provider_url' => $xPath->query(
"//*[local-name() = 'launch_url']")->item(0)->nodeValue,
316 'provider_icon' => $xPath->query(
"//*[local-name() = 'icon']")->item(0)->nodeValue,
317 'launch_method' =>
'newWin',
339 if (
null !== $this->
getInput(
'provider_url')) {
347 if (
null !== $pIconFileName = $this->getIconXml($this->
getInput(
'provider_icon'), (
string) $pId)) {
348 $provider->setProviderIconFilename($pIconFileName);
362 if (!is_bool($this->_importedXmlData[$key])) {
363 $this->_importedXmlData[$key] = trim($this->_importedXmlData[$key]);
365 return $this->_importedXmlData[$key];
371 private function getIconXml(
string $url,
string $pId): ?string
375 $regex =
'~(.+)://([^/]+)/([^?]+)\??(.*)~';
376 preg_match_all($regex,
$url, $urlPart, PREG_SET_ORDER);
377 $urlPart = $urlPart[0];
379 $fileExt = strtolower(substr($urlPart[3], strrpos($urlPart[3],
'.') + 1));
384 $finalIcoName = $pId .
'.' . $fileExt;
387 $uri =
new Uri($urlPart[0]);
388 $uri->withScheme($urlPart[1])
389 ->withHost($urlPart[2])
390 ->withPath($urlPart[3])
391 ->withQuery($urlPart[4]);
394 $httpClient =
new Client();
399 $ico = $icoResource->getContents();
402 $DIC->filesystem()->web()->put(
'lti_data/provider_icon/' . $finalIcoName, $ico);
407 return $finalIcoName;
413 return false !== (
$check = array_search($ext, self::ALLOWED_FILE_EXT)) ?
true :
false;
422 return $virusScan->scanBuffer($ico);
433 $DIC->tabs()->activateSubTab(
'user_provider');
436 $table->enableAcceptProviderAsGlobal();
438 $filter = $table->getFilter();
439 $filter_params =
$DIC->uiService()->filter()->getData($filter);
443 $providerList->setTitleFilter($filter_params[
'title'] ??
'');
444 $providerList->setKeywordFilter($filter_params[
'keywords'] ??
'');
445 $providerList->setHasOutcomeFilter(($filter_params[
'outcome'] ??
'') ===
'' ?
null : $filter_params[
'outcome'] ===
'yes');
446 $providerList->setIsExternalFilter(($filter_params[
'internal'] ??
'') ===
'' ?
null : $filter_params[
'internal'] !==
'yes');
447 $providerList->setIsProviderKeyCustomizableFilter(($filter_params[
'with_key'] ??
'') ===
'' ?
null : $filter_params[
'with_key'] ===
'yes');
448 $providerList->setCategoryFilter($filter_params[
'category'] ??
'');
450 $providerList->load();
452 $table->setData($providerList->getTableData());
454 $DIC->ui()->mainTemplate()->setContent(
$DIC->ui()->renderer()->render($filter) . $table->getHTML($this->hasWritePermission));
465 $DIC->tabs()->activateSubTab(
'user_provider');
467 if ($form ===
null) {
468 if (
$DIC->http()->wrapper()->query()->has(
'provider_id')) {
469 $DIC->ctrl()->saveParameter($this,
'provider_id');
477 self::CMD_SAVE_USER_PROVIDER_FORM,
478 self::CMD_SHOW_USER_PROVIDER
482 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
499 self::CMD_SAVE_USER_PROVIDER_FORM,
500 self::CMD_SHOW_USER_PROVIDER
503 if ($form->checkInput()) {
508 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
523 if (!count($providers)) {
524 $this->main_tpl->setOnScreenMessage(
'failure',
$DIC->language()->txt(
'lti_no_provider_selected'),
true);
525 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
529 if (!
$provider->isAcceptableAsGlobal()) {
530 $this->main_tpl->setOnScreenMessage(
'failure',
$DIC->language()->txt(
'lti_at_least_one_not_acceptable_as_global'),
true);
531 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
537 $this->main_tpl->setOnScreenMessage(
'success',
$DIC->language()->txt(
'lti_success_accept_as_global_multi'),
true);
538 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
554 $this->main_tpl->setOnScreenMessage(
'success',
$DIC->language()->txt(
'lti_success_accept_as_global'),
true);
555 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
584 if (!count($providers)) {
585 $this->main_tpl->setOnScreenMessage(
'failure',
$DIC->language()->txt(
'lti_no_provider_selected'),
true);
586 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
590 if (!
$provider->isResetableToUserDefined()) {
591 $this->main_tpl->setOnScreenMessage(
'failure',
$DIC->language()->txt(
'lti_at_least_one_not_resetable_to_usr_def'),
true);
592 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
598 $this->main_tpl->setOnScreenMessage(
'success',
$DIC->language()->txt(
'lti_success_reset_to_usr_def_multi'),
true);
599 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
611 if (
$provider->isResetableToUserDefined()) {
615 $this->main_tpl->setOnScreenMessage(
'success',
$DIC->language()->txt(
'lti_success_reset_to_usr_def'),
true);
616 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
641 $DIC->tabs()->activateSubTab(
'global_provider');
643 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
648 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
661 $DIC->tabs()->activateSubTab(
'global_provider');
663 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
669 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
682 $DIC->tabs()->activateSubTab(
'user_provider');
684 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
689 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
702 $DIC->tabs()->activateSubTab(
'global_provider');
704 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
710 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
720 if (!count($providers)) {
721 $this->main_tpl->setOnScreenMessage(
'failure',
$DIC->language()->txt(
'lti_no_provider_selected'),
true);
728 if ($providerList->hasUsages(
$provider->getId())) {
729 $this->main_tpl->setOnScreenMessage(
'failure',
$DIC->language()->txt(
'lti_at_least_one_prov_has_usages'),
true);
746 $confirmationGUI->setFormAction(
$DIC->ctrl()->getFormAction($this));
747 $confirmationGUI->setCancel(
$DIC->language()->txt(
'cancel'), $cancelCommand);
748 $confirmationGUI->setConfirm(
$DIC->language()->txt(
'confirm'), self::CMD_PERFORM_DELETE_PROVIDERS);
750 $confirmationGUI->setHeaderText(
$DIC->language()->txt(
'lti_confirm_delete_providers'));
755 if (
$provider->getProviderIcon()->exists()) {
756 $providerIcon =
$provider->getProviderIcon()->getAbsoluteFilePath();
761 $confirmationGUI->addItem(
769 $DIC->ui()->mainTemplate()->setContent($confirmationGUI->getHTML());
786 $this->main_tpl->setOnScreenMessage(
'success',
$DIC->language()->txt(
'lti_success_delete_provider'),
true);
789 $DIC->ctrl()->redirect($this,
$DIC->http()->wrapper()->query()->retrieve(self::REDIRECTION_CMD_PARAMETER,
$DIC->refinery()->kindlyTo()->string()));
804 $DIC->tabs()->activateSubTab(
'usage');
808 $providerList->load();
811 $table->setData($providerList->getTableDataUsedBy());
813 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
824 $form->setAdminContext(
true);
825 $form->initForm(
$DIC->ctrl()->getFormAction($this), $saveCmd, $cancelCmd);
837 if (
$DIC->http()->wrapper()->query()->has(
'provider_id')) {
839 (
int)
$DIC->http()->wrapper()->query()->retrieve(
'provider_id',
$DIC->refinery()->kindlyTo()->int())
857 $DIC->refinery()->kindlyTo()->int()
860 if (
$DIC->http()->wrapper()->post()->has(
'provider_ids')) {
861 $provider_ids =
$DIC->http()->wrapper()->post()->retrieve(
'provider_ids',
$refinery);
862 } elseif (
$DIC->http()->wrapper()->query()->has(
'provider_ids')) {
863 $raw =
$DIC->http()->wrapper()->query()->retrieve(
865 $DIC->refinery()->kindlyTo()->string()
868 if (str_contains($raw,
',')) {
869 $provider_ids = array_map(
'intval', explode(
',', $raw));
871 $provider_ids = [(
int) $raw];
893 $DIC->tabs()->activateSubTab(
'settings');
895 if ($form ===
null) {
899 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
911 if (!$form->checkInput()) {
916 $DIC->ctrl()->redirect($this, self::CMD_SHOW_SETTINGS);
928 $form->setFormAction(
$DIC->ctrl()->getFormAction($this));
929 $form->addCommandButton(self::CMD_SAVE_SETTINGS,
$DIC->language()->txt(
'save'));
930 $form->setTitle(
$DIC->language()->txt(
'lti_global_settings_form'));
938 $providerList->setIdsFilter($providerIds);
939 $providerList->load();
940 $providerList->loadUsages();
941 return $providerList;
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI
checkIconFileVirus(string $ico)
const CMD_DELETE_GLOBAL_PROVIDER_MULTI
checkIconFileExtension(string $ext)
acceptProviderAsGlobalCmd()
deleteGlobalProviderMultiCmd()
performAcceptProvidersAsGlobal(array $providers)
showSettingsCmd(?ilPropertyFormGUI $form=null)
deleteGlobalProviderCmd()
buildProviderTable(ilLTIConsumerAdministrationGUI $parentGui, string $parentCmd)
const CMD_SAVE_GLOBAL_PROVIDER_IMPORT
const CMD_SHOW_GLOBAL_PROVIDER_FORM
const CMD_SAVE_USER_PROVIDER_FORM
const CMD_SAVE_GLOBAL_PROVIDER_FORM
getProviderListForIds(array $providerIds)
const CMD_PERFORM_DELETE_PROVIDERS
__construct(bool $hasWritePermission=false)
const CMD_SHOW_USER_PROVIDER_FORM
showGlobalProviderImportCmd(ilPropertyFormGUI $form=null)
const CMD_SHOW_USER_PROVIDER
buildProviderImportForm(string $saveCommand, string $cancelCommand)
const CMD_DELETE_USER_PROVIDER
const CMD_RESET_PROVIDER_TO_USER_SCOPE
saveUserProviderFormCmd()
const CMD_SHOW_GLOBAL_PROVIDER_IMPORT
showUserProviderFormCmd(?ilLTIConsumeProviderFormGUI $form=null)
buildProviderForm(ilLTIConsumeProvider $provider, string $saveCmd, string $cancelCmd)
showGlobalProviderFormCmd(?ilLTIConsumeProviderFormGUI $form=null)
saveGlobalProviderImportCmd()
ilGlobalTemplateInterface $main_tpl
const CMD_DELETE_GLOBAL_PROVIDER
const CMD_SHOW_GLOBAL_PROVIDER
resetProviderToUserScopeCmd()
validateProviderDeletionSelection(array $providers)
performResetProvidersToUserScope(array $providers)
acceptProviderAsGlobalMultiCmd()
resetProviderToUserScopeMultiCmd()
deleteUserProviderMultiCmd()
const CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI
const CMD_ACCEPT_PROVIDER_AS_GLOBAL
performProviderImport(string $providerXml)
const REDIRECTION_CMD_PARAMETER
saveGlobalProviderFormCmd()
confirmDeleteProviders(array $providers, string $cancelCommand)
const CMD_ROLE_AUTOCOMPLETE
const CMD_DELETE_USER_PROVIDER_MULTI
performDeleteProvidersCmd()
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
if(empty($clientId)) $providerId