19 declare(strict_types=1);
73 $this->main_tpl = $DIC->ui()->mainTemplate();
75 $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';
130 $table->writeFilterToSession();
131 $table->resetOffset();
138 $table->resetFilter();
139 $table->resetOffset();
147 $DIC->tabs()->activateSubTab(
'global_provider');
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)
154 $DIC->toolbar()->addComponent($button);
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)
161 $DIC->toolbar()->addComponent($button);
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);
175 if ($table->getFilterItemByPostVar(
'title')->getValue()) {
176 $providerList->setTitleFilter($table->getFilterItemByPostVar(
'title')->getValue());
179 if ($table->getFilterItemByPostVar(
'category')->getValue()) {
180 $providerList->setCategoryFilter($table->getFilterItemByPostVar(
'category')->getValue());
183 if ($table->getFilterItemByPostVar(
'keyword')->getValue()) {
184 $providerList->setKeywordFilter($table->getFilterItemByPostVar(
'keyword')->getValue());
187 if ($table->getFilterItemByPostVar(
'outcome')->getChecked()) {
188 $providerList->setHasOutcomeFilter(
true);
191 if ($table->getFilterItemByPostVar(
'internal')->getChecked()) {
192 $providerList->setIsExternalFilter(
false);
195 if ($table->getFilterItemByPostVar(
'with_key')->getChecked()) {
196 $providerList->setIsProviderKeyCustomizableFilter(
false);
199 $providerList->load();
201 $table->setData($providerList->getTableData());
203 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
214 $DIC->tabs()->activateSubTab(
'global_provider');
216 if ($form === null) {
217 if ($DIC->http()->wrapper()->query()->has(
'provider_id')) {
218 $DIC->ctrl()->saveParameter($this,
'provider_id');
226 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
227 self::CMD_SHOW_GLOBAL_PROVIDER
231 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
242 self::CMD_SAVE_GLOBAL_PROVIDER_FORM,
243 self::CMD_SHOW_GLOBAL_PROVIDER
246 if ($form->checkInput()) {
250 $provider->setCreator($DIC->user()->getId());
256 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
266 $DIC->tabs()->activateSubTab(
'global_provider');
268 if ($form === null) {
270 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
271 self::CMD_SHOW_GLOBAL_PROVIDER
275 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
283 self::CMD_SAVE_GLOBAL_PROVIDER_IMPORT,
284 self::CMD_SHOW_GLOBAL_PROVIDER
287 if (!$form->checkInput()) {
292 $fileData = (array) $DIC->http()->wrapper()->post()->retrieve(
'provider_xml', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->string()));
294 if (!$fileData[
'tmp_name']) {
299 $providerXml = file_get_contents($fileData[
'tmp_name']);
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);
317 $form->setTitle($DIC->language()->txt(
'form_import_provider'));
319 $form->setFormAction($DIC->ctrl()->getFormAction($this));
321 $form->addCommandButton($saveCommand, $DIC->language()->txt(
'import'));
322 $form->addCommandButton($cancelCommand, $DIC->language()->txt(
'cancel'));
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);
341 $doc->loadXML($providerXml);
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',
370 if (null !== $this->
getInput(
'provider_url')) {
378 if (null !== $pIconFileName = $this->getIconXml($this->
getInput(
'provider_icon'), (
string) $pId)) {
379 $provider->setProviderIconFilename($pIconFileName);
393 if (!is_bool($this->_importedXmlData[
$key])) {
394 $this->_importedXmlData[
$key] = trim($this->_importedXmlData[$key]);
396 return $this->_importedXmlData[
$key];
402 private function getIconXml(
string $url,
string $pId): ?
string 406 $regex =
'~(.+)://([^/]+)/([^?]+)\??(.*)~';
407 preg_match_all($regex, $url, $urlPart, PREG_SET_ORDER);
408 $urlPart = $urlPart[0];
410 $fileExt = strtolower(substr($urlPart[3], strrpos($urlPart[3],
'.') + 1));
415 $finalIcoName = $pId .
'.' . $fileExt;
418 $uri =
new Uri($urlPart[0]);
419 $uri->withScheme($urlPart[1])
420 ->withHost($urlPart[2])
421 ->withPath($urlPart[3])
422 ->withQuery($urlPart[4]);
425 $httpClient =
new Client();
430 $ico = $icoResource->getContents();
433 $DIC->filesystem()->web()->put(
'lti_data/provider_icon/' . $finalIcoName, $ico);
438 return $finalIcoName;
444 return false !== (
$check = array_search($ext, self::ALLOWED_FILE_EXT)) ?
true :
false;
453 return $virusScan->scanBuffer($ico);
461 $DIC->tabs()->activateSubTab(
'user_provider');
465 $providerList->load();
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);
474 $table->setData($providerList->getTableData());
478 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
489 $DIC->tabs()->activateSubTab(
'user_provider');
491 if ($form === null) {
492 if ($DIC->http()->wrapper()->query()->has(
'provider_id')) {
493 $DIC->ctrl()->saveParameter($this,
'provider_id');
501 self::CMD_SAVE_USER_PROVIDER_FORM,
502 self::CMD_SHOW_USER_PROVIDER
506 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
523 self::CMD_SAVE_USER_PROVIDER_FORM,
524 self::CMD_SHOW_USER_PROVIDER
527 if ($form->checkInput()) {
532 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
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);
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);
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);
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);
593 $provider->setIsGlobal(
true);
594 $provider->setAcceptedBy($DIC->user()->getId());
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);
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);
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);
635 if (
$provider->isResetableToUserDefined()) {
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);
652 $provider->setIsGlobal(
false);
653 $provider->setAcceptedBy(0);
665 $DIC->tabs()->activateSubTab(
'global_provider');
667 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
672 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
685 $DIC->tabs()->activateSubTab(
'global_provider');
687 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_GLOBAL_PROVIDER);
693 $DIC->ctrl()->redirect($this, self::CMD_SHOW_GLOBAL_PROVIDER);
706 $DIC->tabs()->activateSubTab(
'user_provider');
708 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
713 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
726 $DIC->tabs()->activateSubTab(
'global_provider');
728 $DIC->ctrl()->setParameter($this, self::REDIRECTION_CMD_PARAMETER, self::CMD_SHOW_USER_PROVIDER);
734 $DIC->ctrl()->redirect($this, self::CMD_SHOW_USER_PROVIDER);
744 if (!count($providers)) {
745 $this->main_tpl->setOnScreenMessage(
'failure', $DIC->language()->txt(
'lti_no_provider_selected'),
true);
752 if ($providerList->hasUsages($provider->getId())) {
753 $this->main_tpl->setOnScreenMessage(
'failure', $DIC->language()->txt(
'lti_at_least_one_prov_has_usages'),
true);
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);
774 $confirmationGUI->setHeaderText($DIC->language()->txt(
'lti_confirm_delete_providers'));
779 if ($provider->getProviderIcon()->exists()) {
780 $providerIcon = $provider->getProviderIcon()->getAbsoluteFilePath();
785 $confirmationGUI->addItem(
787 (
string) $provider->getId(),
788 htmlspecialchars($provider->getTitle()),
793 $DIC->ui()->mainTemplate()->setContent($confirmationGUI->getHTML());
810 $this->main_tpl->setOnScreenMessage(
'success', $DIC->language()->txt(
'lti_success_delete_provider'),
true);
813 $DIC->ctrl()->redirect($this, $DIC->http()->wrapper()->query()->retrieve(self::REDIRECTION_CMD_PARAMETER, $DIC->refinery()->kindlyTo()->string()));
823 $table->setFilterCommand(self::CMD_APPLY_GLOBAL_PROVIDER_FILTER);
824 $table->setResetCommand(self::CMD_RESET_GLOBAL_PROVIDER_FILTER);
826 $table->setAvailabilityColumnEnabled(
true);
827 $table->setProviderCreatorColumnEnabled(
true);
829 $table->setActionsColumnEnabled(
true);
830 $table->setDetailedUsagesEnabled(
true);
839 $DIC->tabs()->activateSubTab(
'usage');
843 $providerList->load();
846 $table->setData($providerList->getTableDataUsedBy());
849 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
860 $form->setAdminContext(
true);
861 $form->initForm($DIC->ctrl()->getFormAction($this), $saveCmd, $cancelCmd);
873 if ($DIC->http()->wrapper()->query()->has(
'provider_id')) {
875 (
int) $DIC->http()->wrapper()->query()->retrieve(
'provider_id', $DIC->refinery()->kindlyTo()->int())
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()))
897 $provider_ids = $DIC->http()->wrapper()->post()->retrieve(
'provider_ids', $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->int()));
914 $DIC->tabs()->activateSubTab(
'settings');
916 if ($form === null) {
920 $DIC->ui()->mainTemplate()->setContent($form->getHTML());
932 if (!$form->checkInput()) {
937 $DIC->ctrl()->redirect($this, self::CMD_SHOW_SETTINGS);
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'));
959 $providerList->setIdsFilter($providerIds);
960 $providerList->load();
961 $providerList->loadUsages();
962 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()
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)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...