19 declare(strict_types=1);
76 $this->main_tpl = $DIC->ui()->mainTemplate();
78 $DIC->language()->loadLanguageModule(
"rep");
86 $DIC->tabs()->clearSubTabs();
88 $DIC->tabs()->addSubTab(
90 $DIC->language()->txt(
'global_provider_subtab'),
91 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER)
94 $DIC->tabs()->addSubTab(
96 $DIC->language()->txt(
'user_provider_subtab'),
97 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_USER_PROVIDER)
107 $DIC->tabs()->addSubTab(
109 $DIC->language()->txt(
'usage_subtab'),
110 $DIC->ctrl()->getLinkTarget($this,
'showUsages')
120 switch ($DIC->ctrl()->getNextClass()) {
123 $cmd = $DIC->ctrl()->getCmd(self::CMD_SHOW_GLOBAL_PROVIDER) .
'Cmd';
132 $table->writeFilterToSession();
133 $table->resetOffset();
140 $table->resetFilter();
141 $table->resetOffset();
149 $DIC->tabs()->activateSubTab(
'global_provider');
151 if ($this->hasWritePermission) {
152 $button = $DIC->ui()->factory()->button()->standard(
153 $DIC->language()->txt(
'lti_add_global_provider'),
154 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM)
157 $DIC->toolbar()->addComponent($button);
159 $button = $DIC->ui()->factory()->button()->standard(
160 $DIC->language()->txt(
'lti_import_global_provider'),
161 $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW_GLOBAL_PROVIDER_IMPORT)
164 $DIC->toolbar()->addComponent($button);
172 if ($this->hasWritePermission) {
173 $table->setEditProviderCmd(self::CMD_SHOW_GLOBAL_PROVIDER_FORM);
174 $table->setDeleteProviderCmd(self::CMD_DELETE_GLOBAL_PROVIDER);
175 $table->setDeleteProviderMultiCmd(self::CMD_DELETE_GLOBAL_PROVIDER_MULTI);
176 $table->setResetProviderToUserScopeCmd(self::CMD_RESET_PROVIDER_TO_USER_SCOPE);
177 $table->setResetProviderToUserScopeMultiCmd(self::CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI);
185 if ($table->getFilterItemByPostVar(
'title')->getValue()) {
186 $providerList->setTitleFilter($table->getFilterItemByPostVar(
'title')->getValue());
189 if ($table->getFilterItemByPostVar(
'category')->getValue()) {
190 $providerList->setCategoryFilter($table->getFilterItemByPostVar(
'category')->getValue());
193 if ($table->getFilterItemByPostVar(
'keyword')->getValue()) {
194 $providerList->setKeywordFilter($table->getFilterItemByPostVar(
'keyword')->getValue());
197 if ($table->getFilterItemByPostVar(
'outcome')->getChecked()) {
198 $providerList->setHasOutcomeFilter(
true);
201 if ($table->getFilterItemByPostVar(
'internal')->getChecked()) {
202 $providerList->setIsExternalFilter(
false);
205 if ($table->getFilterItemByPostVar(
'with_key')->getChecked()) {
206 $providerList->setIsProviderKeyCustomizableFilter(
false);
209 $providerList->load();
211 $table->setData($providerList->getTableData());
213 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
224 $DIC->tabs()->activateSubTab(
'global_provider');
226 if ($form === null) {
227 if ($DIC->http()->wrapper()->query()->has(
'provider_id')) {
228 $DIC->ctrl()->saveParameter($this,
'provider_id');
236 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
237 self::CMD_SHOW_GLOBAL_PROVIDER
241 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
252 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
253 self::CMD_SHOW_GLOBAL_PROVIDER
256 if ($form->checkInput()) {
260 $provider->setCreator($DIC->user()->getId());
266 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
276 $DIC->tabs()->activateSubTab(
'global_provider');
278 if ($form === null) {
280 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
281 self::CMD_SHOW_GLOBAL_PROVIDER
285 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
293 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
294 self::CMD_SHOW_GLOBAL_PROVIDER
297 if (!$form->checkInput()) {
302 $fileData = (array) $DIC->http()->wrapper()->post()->retrieve(
'provider_xml', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->string()));
304 if (!$fileData[
'tmp_name']) {
309 $providerXml = file_get_contents($fileData[
'tmp_name']);
313 $this->main_tpl->setOnScreenMessage(
'success', $DIC->language()->txt(
'provider_import_success_msg'));
314 $DIC->ctrl()->setParameter($this,
'provider_id',
$provider->getId());
315 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER_FORM);
327 $form->setTitle($DIC->language()->txt(
'form_import_provider'));
329 $form->setFormAction($DIC->ctrl()->getFormAction($this));
331 $form->addCommandButton($saveCommand, $DIC->language()->txt(
'import'));
332 $form->addCommandButton($cancelCommand, $DIC->language()->txt(
'cancel'));
334 $provXmlUpload =
new ilFileInputGUI($DIC->language()->txt(
'field_provider_xml'),
'provider_xml');
335 $provXmlUpload->
setInfo($DIC->language()->txt(
'field_provider_xml_info'));
336 $provXmlUpload->setRequired(
true);
337 $provXmlUpload->setSuffixes([
'xml']);
338 $form->addItem($provXmlUpload);
351 $doc->loadXML($providerXml);
353 $this->_importedXmlData = [
354 'title' => $xPath->query(
"//*[local-name() = 'title']")->item(0)->nodeValue,
355 'description' => null !== ($desc = $xPath->query(
"//*[local-name() = 'description']")->item(0)->nodeValue) ? $desc :
'',
356 'provider_url' => $xPath->query(
"//*[local-name() = 'launch_url']")->item(0)->nodeValue,
357 'provider_icon' => $xPath->query(
"//*[local-name() = 'icon']")->item(0)->nodeValue,
358 'launch_method' =>
'newWin',
380 if (null !== $this->
getInput(
'provider_url')) {
388 if (null !== $pIconFileName = $this->getIconXml($this->
getInput(
'provider_icon'), (
string) $pId)) {
389 $provider->setProviderIconFilename($pIconFileName);
403 if (!is_bool($this->_importedXmlData[$key])) {
404 $this->_importedXmlData[$key] = trim($this->_importedXmlData[$key]);
406 return $this->_importedXmlData[$key];
412 private function getIconXml(
string $url,
string $pId): ?
string 416 $regex =
'~(.+)://([^/]+)/([^?]+)\??(.*)~';
417 preg_match_all($regex, $url, $urlPart, PREG_SET_ORDER);
418 $urlPart = $urlPart[0];
420 $fileExt = strtolower(substr($urlPart[3], strrpos($urlPart[3],
'.') + 1));
425 $finalIcoName = $pId .
'.' . $fileExt;
428 $uri =
new Uri($urlPart[0]);
429 $uri->withScheme($urlPart[1])
430 ->withHost($urlPart[2])
431 ->withPath($urlPart[3])
432 ->withQuery($urlPart[4]);
435 $httpClient =
new Client();
440 $ico = $icoResource->getContents();
443 $DIC->filesystem()->web()->put(
'lti_data/provider_icon/' . $finalIcoName, $ico);
448 return $finalIcoName;
454 return false !== (
$check = array_search($ext, self::ALLOWED_FILE_EXT)) ?
true :
false;
463 return $virusScan->scanBuffer($ico);
471 $DIC->tabs()->activateSubTab(
'user_provider');
475 $providerList->load();
480 if ($this->hasWritePermission) {
481 $table->setEditProviderCmd(self::CMD_SHOW_USER_PROVIDER_FORM);
482 $table->setAcceptProviderAsGlobalMultiCmd(self::CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI);
483 $table->setAcceptProviderAsGlobalCmd(self::CMD_ACCEPT_PROVIDER_AS_GLOBAL);
484 $table->setDeleteProviderCmd(self::CMD_DELETE_USER_PROVIDER);
485 $table->setDeleteProviderMultiCmd(self::CMD_DELETE_USER_PROVIDER_MULTI);
488 $table->setData($providerList->getTableData());
492 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
503 $DIC->tabs()->activateSubTab(
'user_provider');
505 if ($form === null) {
506 if ($DIC->http()->wrapper()->query()->has(
'provider_id')) {
507 $DIC->ctrl()->saveParameter($this,
'provider_id');
515 self::CMD_SAVE_USER_PROVIDER_FORM,
516 self::CMD_SHOW_USER_PROVIDER
520 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
537 self::CMD_SAVE_USER_PROVIDER_FORM,
538 self::CMD_SHOW_USER_PROVIDER
541 if ($form->checkInput()) {
546 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
561 if (!count($providers)) {
562 $this->main_tpl->setOnScreenMessage(
'failure', $DIC->language()->txt(
'lti_no_provider_selected'),
true);
563 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
567 if (!$provider->isAcceptableAsGlobal()) {
568 $this->main_tpl->setOnScreenMessage(
'failure', $DIC->language()->txt(
'lti_at_least_one_not_acceptable_as_global'),
true);
569 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
575 $this->main_tpl->setOnScreenMessage(
'success', $DIC->language()->txt(
'lti_success_accept_as_global_multi'),
true);
576 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
592 $this->main_tpl->setOnScreenMessage(
'success', $DIC->language()->txt(
'lti_success_accept_as_global'),
true);
593 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
607 $provider->setIsGlobal(
true);
608 $provider->setAcceptedBy($DIC->user()->getId());
622 if (!count($providers)) {
623 $this->main_tpl->setOnScreenMessage(
'failure', $DIC->language()->txt(
'lti_no_provider_selected'),
true);
624 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
628 if (!$provider->isResetableToUserDefined()) {
629 $this->main_tpl->setOnScreenMessage(
'failure', $DIC->language()->txt(
'lti_at_least_one_not_resetable_to_usr_def'),
true);
630 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
636 $this->main_tpl->setOnScreenMessage(
'success', $DIC->language()->txt(
'lti_success_reset_to_usr_def_multi'),
true);
637 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
649 if (
$provider->isResetableToUserDefined()) {
653 $this->main_tpl->setOnScreenMessage(
'success', $DIC->language()->txt(
'lti_success_reset_to_usr_def'),
true);
654 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
666 $provider->setIsGlobal(
false);
667 $provider->setAcceptedBy(0);
679 $DIC->tabs()->activateSubTab(
'global_provider');
681 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
686 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
699 $DIC->tabs()->activateSubTab(
'global_provider');
701 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
707 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
720 $DIC->tabs()->activateSubTab(
'user_provider');
722 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
727 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
740 $DIC->tabs()->activateSubTab(
'global_provider');
742 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
748 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
758 if (!count($providers)) {
759 $this->main_tpl->setOnScreenMessage(
'failure', $DIC->language()->txt(
'lti_no_provider_selected'),
true);
766 if ($providerList->hasUsages($provider->getId())) {
767 $this->main_tpl->setOnScreenMessage(
'failure', $DIC->language()->txt(
'lti_at_least_one_prov_has_usages'),
true);
784 $confirmationGUI->setFormAction($DIC->ctrl()->getFormAction($this));
785 $confirmationGUI->setCancel($DIC->language()->txt(
'cancel'), $cancelCommand);
786 $confirmationGUI->setConfirm($DIC->language()->txt(
'confirm'), self::CMD_PERFORM_DELETE_PROVIDERS);
788 $confirmationGUI->setHeaderText($DIC->language()->txt(
'lti_confirm_delete_providers'));
793 if ($provider->getProviderIcon()->exists()) {
794 $providerIcon = $provider->getProviderIcon()->getAbsoluteFilePath();
799 $confirmationGUI->addItem(
801 (
string) $provider->getId(),
802 htmlspecialchars($provider->getTitle()),
807 $DIC->ui()->mainTemplate()->setContent($confirmationGUI->getHTML());
824 $this->main_tpl->setOnScreenMessage(
'success', $DIC->language()->txt(
'lti_success_delete_provider'),
true);
827 $DIC->ctrl()->redirect($this, $DIC->http()->wrapper()->query()->retrieve(self::REDIRECTION_CMD_PARAMETER, $DIC->refinery()->kindlyTo()->string()));
838 $table->setFilterCommand(self::CMD_APPLY_GLOBAL_PROVIDER_FILTER);
839 $table->setResetCommand(self::CMD_RESET_GLOBAL_PROVIDER_FILTER);
841 $table->setAvailabilityColumnEnabled(
true);
842 $table->setProviderCreatorColumnEnabled(
true);
844 $table->setActionsColumnEnabled($this->hasWritePermission);
845 $table->setDetailedUsagesEnabled(
true);
854 $DIC->tabs()->activateSubTab(
'usage');
858 $providerList->load();
861 $table->setData($providerList->getTableDataUsedBy());
864 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
875 $form->setAdminContext(
true);
876 $form->initForm($DIC->ctrl()->getFormAction($this), $saveCmd, $cancelCmd);
888 if ($DIC->http()->wrapper()->query()->has(
'provider_id')) {
890 (
int) $DIC->http()->wrapper()->query()->retrieve(
'provider_id', $DIC->refinery()->kindlyTo()->int())
907 if (!$DIC->http()->wrapper()->post()->has(
'provider_ids') ||
908 !$DIC->http()->wrapper()->post()->retrieve(
'provider_ids', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->int()))
912 $provider_ids = $DIC->http()->wrapper()->post()->retrieve(
'provider_ids', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->int()));
929 $DIC->tabs()->activateSubTab(
'settings');
931 if ($form === null) {
935 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
947 if (!$form->checkInput()) {
952 $DIC->ctrl()->redirect($this, self::CMD_SHOW_SETTINGS);
964 $form->setFormAction($DIC->ctrl()->getFormAction($this));
965 $form->addCommandButton(self::CMD_SAVE_SETTINGS, $DIC->language()->txt(
'save'));
966 $form->setTitle($DIC->language()->txt(
'lti_global_settings_form'));
974 $providerList->setIdsFilter($providerIds);
975 $providerList->load();
976 $providerList->loadUsages();
977 return $providerList;
performProviderImport(string $providerXml)
const CMD_RESET_PROVIDER_TO_USER_SCOPE_MULTI
const CMD_ACCEPT_PROVIDER_AS_GLOBAL_MULTI
showSettingsCmd(?ilPropertyFormGUI $form=null)
const CMD_APPLY_GLOBAL_PROVIDER_FILTER
const CMD_SHOW_GLOBAL_PROVIDER
const CMD_ROLE_AUTOCOMPLETE
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
const CMD_DELETE_GLOBAL_PROVIDER
resetProviderToUserScopeMultiCmd()
showUserProviderFormCmd(?ilLTIConsumeProviderFormGUI $form=null)
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)
if(empty($clientId)) $providerId
saveGlobalProviderImportCmd()
__construct(bool $hasWritePermission=false)
const CMD_SHOW_USER_PROVIDER
buildProviderTable(ilLTIConsumerAdministrationGUI $parentGui, string $parentCmd)
buildProviderForm(ilLTIConsumeProvider $provider, string $saveCmd, string $cancelCmd)
const CMD_DELETE_USER_PROVIDER
resetGlobalProviderFilterCmd()
const CMD_SAVE_USER_PROVIDER_FORM
const CMD_RESET_PROVIDER_TO_USER_SCOPE
acceptProviderAsGlobalMultiCmd()
checkIconFileExtension(string $ext)
checkIconFileVirus(string $ico)
const CMD_ACCEPT_PROVIDER_AS_GLOBAL
applyGlobalProviderFilterCmd()
validateProviderDeletionSelection(array $providers)
buildProviderImportForm(string $saveCommand, string $cancelCommand)
const CMD_SAVE_GLOBAL_PROVIDER_IMPORT
const CMD_SHOW_USER_PROVIDER_FORM
showGlobalProviderFormCmd(?ilLTIConsumeProviderFormGUI $form=null)
deleteGlobalProviderMultiCmd()
saveGlobalProviderFormCmd()
deleteUserProviderMultiCmd()
const CMD_PERFORM_DELETE_PROVIDERS
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)
const CMD_SAVE_GLOBAL_PROVIDER_FORM
ilGlobalTemplateInterface $main_tpl
showGlobalProviderImportCmd(ilPropertyFormGUI $form=null)