19declare(strict_types=1);
 
   22use GuzzleHttp\Psr7\Uri;
 
   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()) {
 
  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);
 
  340        $doc = 
new DOMDocument();
 
  341        $doc->loadXML($providerXml);
 
  342        $xPath = 
new DOMXPath($doc);
 
  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);
 
  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);
 
  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(
 
  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;
 
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
 
const CMD_SHOW_USER_PROVIDER_FORM
 
showGlobalProviderImportCmd(ilPropertyFormGUI $form=null)
 
const CMD_RESET_GLOBAL_PROVIDER_FILTER
 
resetGlobalProviderFilterCmd()
 
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
 
applyGlobalProviderFilterCmd()
 
const CMD_DELETE_GLOBAL_PROVIDER
 
const CMD_SHOW_GLOBAL_PROVIDER
 
const CMD_APPLY_GLOBAL_PROVIDER_FILTER
 
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