diff --git a/main/exercise/exercise_result.php b/main/exercise/exercise_result.php index d2f595ec9a..43688397ba 100755 --- a/main/exercise/exercise_result.php +++ b/main/exercise/exercise_result.php @@ -377,5 +377,18 @@ function showEmbeddableFinishButton() ['class' => 'text-center'] ); + // We check if a tool provider + if (isset($_REQUEST['lti_launch_id'])) { + $ltiLaunchId = Security::remove_XSS($_REQUEST['lti_launch_id']); + global $exeId; + $js .= ''; + + } + return $js.PHP_EOL.$html; } diff --git a/main/exercise/exercise_submit.php b/main/exercise/exercise_submit.php index 26bf694d32..acbf487aa3 100755 --- a/main/exercise/exercise_submit.php +++ b/main/exercise/exercise_submit.php @@ -512,6 +512,14 @@ if (!empty($exercise_stat_info['questions_to_check'])) { } $params = "exe_id=$exe_id&exerciseId=$exerciseId&learnpath_id=$learnpath_id&learnpath_item_id=$learnpath_item_id&learnpath_item_view_id=$learnpath_item_view_id&".api_get_cidreq().'&reminder='.$reminder; +// It is a lti provider +$ltiLaunchId = ''; +$ltiParams = ''; +if (isset($_REQUEST['lti_launch_id'])) { + $ltiLaunchId = Security::remove_XSS($_REQUEST['lti_launch_id']); + $ltiParams = '<i_launch_id='.$ltiLaunchId; + $params .= $ltiParams; +} if (2 === $reminder && empty($myRemindList)) { if ($debug) { error_log('6.2 calling the exercise_reminder.php'); @@ -838,13 +846,13 @@ if ($formSent && isset($_POST)) { } } } - header("Location: exercise_result.php?".api_get_cidreq()."&exe_id=$exe_id&learnpath_id=$learnpath_id&learnpath_item_id=$learnpath_item_id&learnpath_item_view_id=$learnpath_item_view_id"); + header("Location: exercise_result.php?".api_get_cidreq()."&exe_id=$exe_id&learnpath_id=$learnpath_id&learnpath_item_id=$learnpath_item_id&learnpath_item_view_id=$learnpath_item_view_id.$ltiParams"); exit; } else { if ($debug) { error_log('10. Redirecting to exercise_result.php'); } - header("Location: exercise_result.php?".api_get_cidreq()."&exe_id=$exe_id&learnpath_id=$learnpath_id&learnpath_item_id=$learnpath_item_id&learnpath_item_view_id=$learnpath_item_view_id"); + header("Location: exercise_result.php?".api_get_cidreq()."&exe_id=$exe_id&learnpath_id=$learnpath_id&learnpath_item_id=$learnpath_item_id&learnpath_item_view_id=$learnpath_item_view_id.$ltiParams"); exit; } } else { @@ -931,7 +939,7 @@ if ($question_count != 0) { .api_get_cidreq() ."&exe_id=$exe_id&learnpath_id=$learnpath_id&learnpath_item_id=" .$learnpath_item_id - ."&learnpath_item_view_id=$learnpath_item_view_id" + ."&learnpath_item_view_id=$learnpath_item_view_id.$ltiParams" ); exit; } @@ -1610,6 +1618,9 @@ echo '
'; +if (!empty($ltiLaunchId)) { + echo ''; +} // Show list of questions $i = 1; diff --git a/main/exercise/overview.php b/main/exercise/overview.php index 12e1838f2e..5f573e1b34 100755 --- a/main/exercise/overview.php +++ b/main/exercise/overview.php @@ -65,6 +65,10 @@ $extra_params = ''; if (isset($_GET['preview'])) { $extra_params = '&preview=1'; } +// It is a lti provider +if (isset($_GET['lti_launch_id'])) { + $extra_params .= '<i_launch_id='.Security::remove_XSS($_GET['lti_launch_id']); +} $exercise_url = api_get_path(WEB_CODE_PATH).'exercise/exercise_submit.php?'. api_get_cidreq().'&exerciseId='.$objExercise->iid.'&learnpath_id='.$learnpath_id.'&learnpath_item_id='.$learnpath_item_id.'&learnpath_item_view_id='.$learnpathItemViewId.$extra_params; diff --git a/plugin/lti_provider/Entity/Platform.php b/plugin/lti_provider/Entity/Platform.php index 07ce5cdf1f..e1fc56d247 100755 --- a/plugin/lti_provider/Entity/Platform.php +++ b/plugin/lti_provider/Entity/Platform.php @@ -65,6 +65,12 @@ class Platform * @ORM\Column(name="deployment_id", type="text") */ private $deploymentId; + /** + * @var string + * + * @ORM\Column(name="tool_provider", type="text") + */ + private $toolProvider; /** * Get id. @@ -84,10 +90,26 @@ class Platform return $this; } + /** + * @return string + */ + public function getToolProvider() + { + return $this->toolProvider; + } + + /** + * @param string $toolProvider + */ + public function setToolProvider(?string $toolProvider): void + { + $this->toolProvider = $toolProvider; + } + /** * Get key id. */ - public function getKid(): string + public function getKid() { return $this->kid; } @@ -105,7 +127,7 @@ class Platform /** * Get Issuer. */ - public function getIssuer(): string + public function getIssuer() { return $this->issuer; } @@ -123,7 +145,7 @@ class Platform /** * Get client ID. */ - public function getClientId(): string + public function getClientId() { return $this->clientId; } @@ -141,7 +163,7 @@ class Platform /** * Get auth login URL. */ - public function getAuthLoginUrl(): string + public function getAuthLoginUrl() { return $this->authLoginUrl; } @@ -159,7 +181,7 @@ class Platform /** * Get auth token URL. */ - public function getAuthTokenUrl(): string + public function getAuthTokenUrl() { return $this->authTokenUrl; } @@ -177,7 +199,7 @@ class Platform /** * Get key set URL. */ - public function getKeySetUrl(): string + public function getKeySetUrl() { return $this->keySetUrl; } @@ -195,7 +217,7 @@ class Platform /** * Get Deployment ID. */ - public function getDeploymentId(): string + public function getDeploymentId() { return $this->deploymentId; } diff --git a/plugin/lti_provider/LtiProviderPlugin.php b/plugin/lti_provider/LtiProviderPlugin.php index 759516a6da..9f7afcd7df 100644 --- a/plugin/lti_provider/LtiProviderPlugin.php +++ b/plugin/lti_provider/LtiProviderPlugin.php @@ -1,6 +1,7 @@ getToolProvider($issuer); + $htmlcontent = '
+ +
+ "; + $htmlcontent .= '
+
+
'; + return $htmlcontent; + } + /** * Get the public key. */ @@ -68,6 +107,32 @@ class LtiProviderPlugin extends Plugin return $publicKey; } + /** + * Get the tool provider. + */ + public function getToolProvider($issuer): string + { + $toolProvider = ''; + $platform = Database::getManager() + ->getRepository('ChamiloPluginBundle:LtiProvider\Platform') + ->findOneBy(['issuer' => $issuer]); + + if ($platform) { + $toolProvider = $platform->getToolProvider(); + } + + return $toolProvider; + } + + public function getToolProviderVars($issuer): array + { + $toolProvider = $this->getToolProvider($issuer); + list($courseCode, $tool) = explode('@@', $toolProvider); + list($toolName, $toolId) = explode('-', $tool); + $vars = ['courseCode' => $courseCode, 'toolName' => $toolName, 'toolId' => $toolId]; + return $vars; + } + /** * Get the class instance. * @@ -216,6 +281,7 @@ class LtiProviderPlugin extends Plugin auth_token_url varchar(255) NOT NULL, key_set_url varchar(255) NOT NULL, deployment_id varchar(255) NOT NULL, + tool_provider varchar(255) NULL, PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB", "CREATE TABLE plugin_lti_provider_platform_key ( diff --git a/plugin/lti_provider/README.md b/plugin/lti_provider/README.md index 0d963c03ee..e47398a9f4 100644 --- a/plugin/lti_provider/README.md +++ b/plugin/lti_provider/README.md @@ -33,6 +33,7 @@ CREATE TABLE plugin_lti_provider_platform ( auth_token_url varchar(255) NOT NULL, key_set_url varchar(255) NOT NULL, deployment_id varchar(255) NOT NULL, + tool_provider varchar(255) NULL, PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB; diff --git a/plugin/lti_provider/create.php b/plugin/lti_provider/create.php index 8f63dfe551..fd0d03b457 100644 --- a/plugin/lti_provider/create.php +++ b/plugin/lti_provider/create.php @@ -1,12 +1,11 @@ validate()) { $platform->setKeySetUrl($formValues['key_set_url']); $platform->setDeploymentId($formValues['deployment_id']); $platform->setKid($formValues['kid']); + $toolProvider = (isset($formValues['tool_provider']) ? $formValues['tool_provider'] : $_POST['tool_provider']); + $platform->setToolProvider($toolProvider); $em->persist($platform); $em->flush(); diff --git a/plugin/lti_provider/db/lti13_cookie.php b/plugin/lti_provider/db/lti13_cookie.php index c1811547fb..f37f693e39 100644 --- a/plugin/lti_provider/db/lti13_cookie.php +++ b/plugin/lti_provider/db/lti13_cookie.php @@ -7,6 +7,11 @@ class Lti13Cookie implements Lti1p3Cookie { public function getCookie($name) { + + if (isset($_REQUEST['state']) && $name === 'lti1p3_'.$_REQUEST['state']) { + return $_REQUEST['state']; + } + if (isset($_COOKIE[$name])) { return $_COOKIE[$name]; } diff --git a/plugin/lti_provider/edit.php b/plugin/lti_provider/edit.php index 283967134e..bfaf94ff79 100644 --- a/plugin/lti_provider/edit.php +++ b/plugin/lti_provider/edit.php @@ -37,7 +37,6 @@ $form->build(); if ($form->validate()) { $formValues = $form->exportValues(); - $platform->setIssuer($formValues['issuer']); $platform->setClientId($formValues['client_id']); $platform->setAuthLoginUrl($formValues['auth_login_url']); @@ -45,6 +44,8 @@ if ($form->validate()) { $platform->setKeySetUrl($formValues['key_set_url']); $platform->setDeploymentId($formValues['deployment_id']); $platform->setKid($formValues['kid']); + $toolProvider = (isset($formValues['tool_provider']) ? $formValues['tool_provider'] : $_POST['tool_provider']); + $platform->setToolProvider($toolProvider); $em->persist($platform); $em->flush(); diff --git a/plugin/lti_provider/lang/english.php b/plugin/lti_provider/lang/english.php index e031778c1b..b496013fda 100644 --- a/plugin/lti_provider/lang/english.php +++ b/plugin/lti_provider/lang/english.php @@ -21,10 +21,13 @@ $strings['AuthLoginUrl'] = 'OIDC Auth URL'; $strings['AuthTokenUrl'] = 'OAuth2 Access Token URL'; $strings['KeySetUrl'] = 'Keyset URL'; $strings['DeploymentId'] = 'Deployment ID'; -$strings['KeyId'] = 'key id (kid)'; +$strings['KeyId'] = 'Key id (kid)'; $strings['PublicKey'] = 'Public key'; $strings['Name'] = 'Provider name'; $strings['Enabled'] = 'Enabled'; $strings['GenerateKeyPairInfo'] = 'A new private and public key pair will be created when enabling.'; -$strings['URLs'] = 'Endpoints Urls'; -$strings['PlatformConnectionAdded'] = 'A platform connection is added.'; +$strings['URLs'] = 'Endpoints URLs'; +$strings['PlatformConnectionAdded'] = 'A platform connection has been added.'; +$strings['ToolProvider'] = 'Provider tool'; +$strings['SelectOneActivity'] = 'Select one activity'; +$strings['Quizzes'] = 'Exercises'; diff --git a/plugin/lti_provider/lang/french.php b/plugin/lti_provider/lang/french.php index 3e908e052c..5a00a206c0 100644 --- a/plugin/lti_provider/lang/french.php +++ b/plugin/lti_provider/lang/french.php @@ -26,3 +26,6 @@ $strings['Enabled'] = 'Activé'; $strings['GenerateKeyPairInfo'] = 'Une nouvelle paire de clés privée et publique sera créée lors de l\'activation.'; $strings['URLs'] = 'URLs Endpoints'; $strings['PlatformConnectionAdded'] = 'La nouvelle connexion inter-plateforme a été ajoutée.'; +$strings['ToolProvider'] = 'Outil fournisseur'; +$strings['SelectOneActivity'] = 'Sélectionnez une activité'; +$strings['Quizzes'] = 'Exercices'; diff --git a/plugin/lti_provider/lang/spanish.php b/plugin/lti_provider/lang/spanish.php index 04983162f2..77c2fdc63a 100644 --- a/plugin/lti_provider/lang/spanish.php +++ b/plugin/lti_provider/lang/spanish.php @@ -28,3 +28,6 @@ $strings['Enabled'] = 'Habilitado'; $strings['GenerateKeyPairInfo'] = 'Se creará un nuevo par de claves pública y privada cuando se habilite.'; $strings['URLs'] = 'URL de puntos finales'; $strings['PlatformConnectionAdded'] = 'Se agrega una conexión de plataforma.'; +$strings['ToolProvider'] = 'Herramienta del proveedor'; +$strings['SelectOneActivity'] = 'Selecccione una actividad'; +$strings['Quizzes'] = 'Ejercicios'; diff --git a/plugin/lti_provider/src/Form/FrmAdd.php b/plugin/lti_provider/src/Form/FrmAdd.php index b3b8c3646a..ce55d221fe 100644 --- a/plugin/lti_provider/src/Form/FrmAdd.php +++ b/plugin/lti_provider/src/Form/FrmAdd.php @@ -45,7 +45,8 @@ class FrmAdd extends FormValidator $this->addUrl('key_set_url', $plugin->get_lang('KeySetUrl')); $this->addText('client_id', $plugin->get_lang('ClientId')); $this->addText('deployment_id', $plugin->get_lang('DeploymentId')); - $this->addText('kid', $plugin->get_lang('KeyId')); + $this->addText('kid', $plugin->get_lang('KeyId'), false); + $this->addElement('html', $plugin->getQuizzesSelect()); $this->addButtonCreate($plugin->get_lang('AddPlatform')); $this->applyFilter('__ALL__', 'trim'); diff --git a/plugin/lti_provider/src/Form/FrmEdit.php b/plugin/lti_provider/src/Form/FrmEdit.php index 3988840296..8d405b08db 100644 --- a/plugin/lti_provider/src/Form/FrmEdit.php +++ b/plugin/lti_provider/src/Form/FrmEdit.php @@ -45,7 +45,8 @@ class FrmEdit extends FormValidator $this->addUrl('key_set_url', $plugin->get_lang('KeySetUrl')); $this->addText('client_id', $plugin->get_lang('ClientId')); $this->addText('deployment_id', $plugin->get_lang('DeploymentId')); - $this->addText('kid', $plugin->get_lang('KeyId')); + $this->addText('kid', $plugin->get_lang('KeyId'), false); + $this->addElement('html', $plugin->getQuizzesSelect($this->platform->getIssuer())); $this->addButtonCreate($plugin->get_lang('EditPlatform')); $this->addHidden('id', $this->platform->getId()); @@ -66,6 +67,7 @@ class FrmEdit extends FormValidator $defaults['client_id'] = $this->platform->getClientId(); $defaults['deployment_id'] = $this->platform->getDeploymentId(); $defaults['kid'] = $this->platform->getKid(); + $defaults['tool_provider'] = $this->platform->getToolProvider(); $this->setDefaults($defaults); } diff --git a/plugin/lti_provider/src/LtiProvider.php b/plugin/lti_provider/src/LtiProvider.php index e851054c47..e7e022106b 100644 --- a/plugin/lti_provider/src/LtiProvider.php +++ b/plugin/lti_provider/src/LtiProvider.php @@ -33,17 +33,18 @@ class LtiProvider * * @throws Lti1p3\OidcException */ - public function login($request = null) + public function login(?array $request = null) { + $launchUrl = Security::remove_XSS($request['target_link_uri']); LtiOidcLogin::new(new Lti13Database(), new Lti13Cache(), new Lti13Cookie()) - ->doOidcLoginRedirect(api_get_path(WEB_PLUGIN_PATH)."lti_provider/web/game.php", $request) + ->doOidcLoginRedirect($launchUrl, $request) ->doRedirect(); } /** * Lti Message Launch. */ - public function launch(bool $fromCache = false, ?int $launchId = null): LtiMessageLaunch + public function launch(bool $fromCache = false, ?string $launchId = null): LtiMessageLaunch { if ($fromCache) { $launch = LtiMessageLaunch::fromCache($launchId, new Lti13Database(), new Lti13Cache()); @@ -53,4 +54,44 @@ class LtiProvider return $launch; } + + /** + * Verify if email user is in the platform to create it and login (true) or not (false) + */ + public function validateUser(array $launchData, string $courseCode): bool + { + + if (empty($launchData)) { + return false; + } + + $firstName = $launchData['given_name']; + $lastName = $launchData['family_name']; + $email = $launchData['email']; + $status = STUDENT; + + $userInfo = api_get_user_info_from_email($email); + if (empty($userInfo)) { + // We create the user + $username = $launchData['https://purl.imsglobal.org/spec/lti/claim/ext']['user_username']; + $password = api_generate_password(); + $userId = UserManager::create_user( + $firstName, + $lastName, + $status, + $email, + $username, + $password + ); + } else { + $userId = $userInfo['user_id']; + } + + if (!CourseManager::is_user_subscribed_in_course($userId, $courseCode)) { + CourseManager::subscribeUser($userId, $courseCode, $status); + } + + $login = UserManager::loginAsUser($userId, false); + return $login; + } } diff --git a/plugin/lti_provider/tool/api/score.php b/plugin/lti_provider/tool/api/score.php new file mode 100644 index 0000000000..dab773f08d --- /dev/null +++ b/plugin/lti_provider/tool/api/score.php @@ -0,0 +1,67 @@ +launch(true, $_REQUEST['launch_id']); + +if (!$launch->hasAgs()) { + throw new Exception("Don't have grades!"); +} + +if (!isset($_REQUEST['exeId'])) { + throw new Exception("Any Exercise result"); +} + +$launchData = $launch->getLaunchData(); + +$label = 'Score'; +$courseClient = $launchData['https://purl.imsglobal.org/spec/lti/claim/resource_link']['title']; +if (!empty($courseClient)) { + $label = $courseClient; +} + +$exeId = (int) $_REQUEST['exeId']; +$trackInfo = Exercise::get_stat_track_exercise_info_by_exe_id($exeId); +$score = $trackInfo['exe_result']; +$weight = $trackInfo['exe_weighting']; +$duration = $trackInfo['duration']; +$timestamp = date(DateTime::ISO8601); + +$grades = $launch->getAgs(); +$score = Packback\Lti1p3\LtiGrade::new() + ->setScoreGiven($score) + ->setScoreMaximum($weight) + ->setTimestamp($timestamp) + ->setActivityProgress('Completed') + ->setGradingProgress('FullyGraded') + ->setUserId($launch->getLaunchData()['sub']); + + +$scoreLineitem = Packback\Lti1p3\LtiLineitem::new() + ->setTag('score') + ->setScoreMaximum($weight) + ->setLabel($label) + ->setResourceId($launch->getLaunchData()['https://purl.imsglobal.org/spec/lti/claim/resource_link']['id']); + +$grades->putGrade($score, $scoreLineitem); + + +$time = Packback\Lti1p3\LtiGrade::new() + ->setScoreGiven($duration) + ->setScoreMaximum(999) + ->setTimestamp($timestamp) + ->setActivityProgress('Completed') + ->setGradingProgress('FullyGraded') + ->setUserId($launch->getLaunchData()['sub']); + +$timeLineitem = Packback\Lti1p3\LtiLineitem::new() + ->setTag('time') + ->setScoreMaximum(999) + ->setLabel('Time Taken') + ->setResourceId('time'.$launch->getLaunchData()['https://purl.imsglobal.org/spec/lti/claim/resource_link']['id']); + +$grades->putGrade($time, $timeLineitem); + +echo '{"success" : true}'; diff --git a/plugin/lti_provider/tool/login.php b/plugin/lti_provider/tool/login.php new file mode 100644 index 0000000000..5c6bbe7507 --- /dev/null +++ b/plugin/lti_provider/tool/login.php @@ -0,0 +1,8 @@ +login($_REQUEST); diff --git a/plugin/lti_provider/tool/start.php b/plugin/lti_provider/tool/start.php new file mode 100644 index 0000000000..90c6171799 --- /dev/null +++ b/plugin/lti_provider/tool/start.php @@ -0,0 +1,26 @@ +launch(); +if (!$launch->hasNrps()) { + throw new Exception("Don't have names and roles!"); +} + +$launchData = $launch->getLaunchData(); + +$plugin = LtiProviderPlugin::create(); +$toolVars = $plugin->getToolProviderVars($launchData['iss']); + +$login = LtiProvider::create()->validateUser($launchData, $toolVars['courseCode']); +$cidReq = 'cidReq='.$toolVars['courseCode'].'&id_session=0&gidReq=0&gradebook=0'; + +$launchUrl = api_get_path(WEB_CODE_PATH).'exercise/overview.php?'.$cidReq.'&origin=embeddable&exerciseId='.$toolVars['toolId'].'<i_launch_id='.$launch->getLaunchId(); +header('Location: '.$launchUrl); +exit; + diff --git a/plugin/lti_provider/view/admin.tpl b/plugin/lti_provider/view/admin.tpl index 80da0feed7..d54048035f 100644 --- a/plugin/lti_provider/view/admin.tpl +++ b/plugin/lti_provider/view/admin.tpl @@ -17,7 +17,6 @@ {{ 'PlatformName'|get_plugin_lang('LtiProviderPlugin') }} {{ 'ClientId'|get_plugin_lang('LtiProviderPlugin') }} {{ 'DeploymentId'|get_plugin_lang('LtiProviderPlugin') }} - {{ 'KeyId'|get_plugin_lang('LtiProviderPlugin') }} {{ 'URLs'|get_plugin_lang('LtiProviderPlugin') }} {{ 'Actions'|get_lang }} @@ -29,7 +28,6 @@ {{ platform.getIssuer }} {{ platform.getClientId }} {{ platform.getDeploymentId }} - {{ platform.getKid }}

{{ 'AuthLoginUrl'|get_plugin_lang('LtiProviderPlugin') }}:
{{ platform.getAuthLoginUrl }}

{{ 'AuthTokenUrl'|get_plugin_lang('LtiProviderPlugin') }}:
{{ platform.getAuthTokenUrl }}

diff --git a/plugin/lti_provider/web/api/score.php b/plugin/lti_provider/web/api/score.php index 2738b0776e..788ab491c7 100644 --- a/plugin/lti_provider/web/api/score.php +++ b/plugin/lti_provider/web/api/score.php @@ -2,7 +2,7 @@ /* For license terms, see /license.txt */ require_once __DIR__.'/../../../../main/inc/global.inc.php'; -require_once __DIR__ . '/../../src/LtiProvider.php'; +require_once __DIR__.'/../../src/LtiProvider.php'; $launch = LtiProvider::create()->launch(true, $_REQUEST['launch_id']); @@ -46,4 +46,4 @@ $timeLineitem = Packback\Lti1p3\LtiLineitem::new() $grades->putGrade($time, $timeLineitem); -echo '{"success" : true}'; \ No newline at end of file +echo '{"success" : true}'; diff --git a/plugin/lti_provider/web/api/scoreboard.php b/plugin/lti_provider/web/api/scoreboard.php index f575279c08..21d1188010 100644 --- a/plugin/lti_provider/web/api/scoreboard.php +++ b/plugin/lti_provider/web/api/scoreboard.php @@ -2,7 +2,7 @@ /* For license terms, see /license.txt */ require_once __DIR__.'/../../../../main/inc/global.inc.php'; -require_once __DIR__ . '/../../src/LtiProvider.php'; +require_once __DIR__.'/../../src/LtiProvider.php'; $launch = LtiProvider::create()->launch(true, $_REQUEST['launch_id']); @@ -48,4 +48,4 @@ foreach ($scores as $score) { } $scoreboard[] = $result; } -echo json_encode($scoreboard); \ No newline at end of file +echo json_encode($scoreboard); diff --git a/plugin/lti_provider/web/configure.php b/plugin/lti_provider/web/configure.php index b43ef1b54d..be49171952 100644 --- a/plugin/lti_provider/web/configure.php +++ b/plugin/lti_provider/web/configure.php @@ -2,7 +2,7 @@ /* For license terms, see /license.txt */ require_once __DIR__.'/../../../main/inc/global.inc.php'; -require_once __DIR__ . '/../src/LtiProvider.php'; +require_once __DIR__.'/../src/LtiProvider.php'; use Packback\Lti1p3; $launch = LtiProvider::create()->launch(true, $_REQUEST['launch_id']); diff --git a/plugin/lti_provider/web/game.php b/plugin/lti_provider/web/game.php index 345bf28f23..e70f6daa06 100644 --- a/plugin/lti_provider/web/game.php +++ b/plugin/lti_provider/web/game.php @@ -2,7 +2,7 @@ /* For license terms, see /license.txt */ require_once __DIR__.'/../../../main/inc/global.inc.php'; -require_once __DIR__ . '/../src/LtiProvider.php'; +require_once __DIR__.'/../src/LtiProvider.php'; use Packback\Lti1p3; $launch = LtiProvider::create()->launch(); diff --git a/plugin/lti_provider/web/login.php b/plugin/lti_provider/web/login.php index 8af2fbdd0d..5c6bbe7507 100644 --- a/plugin/lti_provider/web/login.php +++ b/plugin/lti_provider/web/login.php @@ -2,7 +2,7 @@ /* For license terms, see /license.txt */ require_once __DIR__.'/../../../main/inc/global.inc.php'; -require_once __DIR__ . '/../src/LtiProvider.php'; +require_once __DIR__.'/../src/LtiProvider.php'; use Packback\Lti1p3; LtiProvider::create()->login($_REQUEST);