diff options
| author | Murtaza Sultani <sultani@data-quest.de> | 2025-12-19 16:26:50 +0100 |
|---|---|---|
| committer | Murtaza Sultani <sultani@data-quest.de> | 2026-03-19 17:34:49 +0100 |
| commit | 28307fdb26320d5b0331f9c031f7ba078acab578 (patch) | |
| tree | cdd9e952080ccc6dbae581fa722fcb0a8c8e7590 /lib | |
| parent | 6210d0e65044a44640a17a463ec709eb456ace43 (diff) | |
Redeveloped LTI Resource links
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/classes/LTI13a/LineItemRepository.php | 4 | ||||
| -rw-r--r-- | lib/classes/LTI13a/RegistrationManager.php | 26 | ||||
| -rw-r--r-- | lib/models/Lti/Registration.php | 18 | ||||
| -rw-r--r-- | lib/models/Lti/ResourceLink.php | 18 | ||||
| -rw-r--r-- | lib/modules/LtiToolModule.php | 4 |
5 files changed, 46 insertions, 24 deletions
diff --git a/lib/classes/LTI13a/LineItemRepository.php b/lib/classes/LTI13a/LineItemRepository.php index 6e294b8..e25a8b6 100644 --- a/lib/classes/LTI13a/LineItemRepository.php +++ b/lib/classes/LTI13a/LineItemRepository.php @@ -20,7 +20,7 @@ class LineItemRepository implements LineItemRepositoryInterface * @param string $deploymentId The Stud.IP LTI deployment ID. * @return string The corresponding tool name used in the Stud.IP grading context. */ - public static function getGradingToolName(string $toolId, string $deploymentId) : string + public static function getGradingToolName(string $toolId, string $deploymentId): string { return sprintf('lti-%s-%s', $toolId, $deploymentId); } @@ -37,7 +37,7 @@ class LineItemRepository implements LineItemRepositoryInterface * 'course_id' => The Stud.IP course-ID. * In case the search parameters cannot be generated, an empty array is returned. */ - public static function getSearchParametersFromLineItemIdentifier(string $lineItemIdentifier) : array + public static function getSearchParametersFromLineItemIdentifier(string $lineItemIdentifier): array { //$lineItemIdentifier contains the full URL to the line item. //We must extract the course-ID, tool-ID and deployment-ID diff --git a/lib/classes/LTI13a/RegistrationManager.php b/lib/classes/LTI13a/RegistrationManager.php index 2a7ca76..c16bf83 100644 --- a/lib/classes/LTI13a/RegistrationManager.php +++ b/lib/classes/LTI13a/RegistrationManager.php @@ -34,7 +34,18 @@ class RegistrationManager implements RegistrationRepositoryInterface return null; } - return Registration::findByDeploymentIdAndIssuer($deployment->id, $issuer)?->toLti1p3Registration($deployment); + return Registration::findOneBySQL( + "JOIN `lti_registration_configs` `configs` ON (`lti_registrations`.`id` = `configs`.`registration_id`) + JOIN `lti_deployments` `deployments` ON (`lti_registrations`.`id` = `deployments`.`registration_id`) + WHERE `lti_registrations`.`role` = 'platform' + AND `configs`.`name` = 'issuer' + AND `configs`.`value` = :issuer + AND `deployments`.`id` = :deployment_id", + [ + 'issuer' => $issuer, + 'deployment_id' => $deployment->id + ] + )?->toLti1p3Registration($deployment); } public function findByToolIssuer(string $issuer, string $clientId = null): ?RegistrationInterface @@ -45,6 +56,17 @@ class RegistrationManager implements RegistrationRepositoryInterface return null; } - return Registration::findByDeploymentIdAndIssuer($deployment->id, $issuer)?->toLti1p3Registration($deployment); + return Registration::findOneBySQL( + "JOIN `lti_registration_configs` `configs` ON (`lti_registrations`.`id` = `configs`.`registration_id`) + JOIN `lti_deployments` `deployments` ON (`lti_registrations`.`id` = `deployments`.`registration_id`) + WHERE `lti_registrations`.`role` = 'tool' + AND `configs`.`name` = 'audience' + AND `configs`.`value` = :audience + AND `deployments`.`id` = :deployment_id", + [ + 'audience' => $issuer, + 'deployment_id' => $deployment->id + ] + )?->toLti1p3Registration($deployment); } } diff --git a/lib/models/Lti/Registration.php b/lib/models/Lti/Registration.php index 71d8ee0..50a01a6 100644 --- a/lib/models/Lti/Registration.php +++ b/lib/models/Lti/Registration.php @@ -69,7 +69,7 @@ class Registration extends SimpleORMap public function getDefaultDeployment(): ?Deployment { - return Deployment::findOneBySQL("registration_id = ? ORDER BY mkdate", [$this->id]); + return Deployment::findOneBySQL("registration_id = ? ORDER BY id", [$this->id]); } public function getKeyring(): ?Keyring @@ -122,20 +122,4 @@ class Registration extends SimpleORMap { return static::findBySQL("TRUE"); } - - public static function findByDeploymentIdAndIssuer(int $deploymentId, string $issuer): ?self - { - return self::findOneBySQL( - "JOIN `lti_registration_configs` configs ON (`lti_registrations`.`id` = `configs`.`registration_id`) - JOIN `lti_deployments` deployments ON (`lti_registrations`.`id` = `deployments`.`registration_id`) - WHERE `lti_registrations`.`role` = 'platform' - AND `configs`.`name` = 'issuer' - AND `configs`.`value` = :issuer - AND `deployments`.`id` = :deployment_id", - [ - 'issuer' => $issuer, - 'deployment_id' => $deploymentId - ] - ); - } } diff --git a/lib/models/Lti/ResourceLink.php b/lib/models/Lti/ResourceLink.php index a64abcf..8845a94 100644 --- a/lib/models/Lti/ResourceLink.php +++ b/lib/models/Lti/ResourceLink.php @@ -55,8 +55,22 @@ class ResourceLink extends SimpleORMap return $result; } - public static function findByCourseAndPosition($course_id, $position) + public function transformData($with = []): array { - return self::findOneBySQL('course_id = ? AND position = ?', [$course_id, $position]); + $base = [ + ...$this->toRawArray(), + 'chdate' => date('c', $this->chdate), + 'mkdate' => date('c', $this->mkdate) + ]; + + if (in_array('deployment', $with)) { + $base['deployment'] = $this->deployment->transformData(); + } + + if (in_array('registration', $with)) { + $base['registration'] = Registration::find($this->deployment->registration_id)->transformData(); + } + + return $base; } } diff --git a/lib/modules/LtiToolModule.php b/lib/modules/LtiToolModule.php index 9d09d06..e7e6e83 100644 --- a/lib/modules/LtiToolModule.php +++ b/lib/modules/LtiToolModule.php @@ -70,12 +70,14 @@ class LtiToolModule extends CorePlugin implements StudipModule, SystemPlugin, Pr $navigation = new Navigation(_('LTI')); $navigation->setImage(Icon::create('link-extern', Icon::ROLE_INFO_ALT)); $navigation->setActiveImage(Icon::create('link-extern', Icon::ROLE_INFO)); - $navigation->addSubNavigation('index', new Navigation(_('LTI-Tools'), 'dispatch.php/course/lti')); + $navigation->addSubNavigation('index', new Navigation(_('LTI-Ressourcen'), 'dispatch.php/course/lti')); if ($grades) { $navigation->addSubNavigation('grades', new Navigation(_('Ergebnisse'), 'dispatch.php/course/lti/grades')); } + $navigation->addSubNavigation('registrations', new Navigation(_('LTI-Registrierungen'), 'dispatch.php/admin/lti/registrations')); + return ['lti' => $navigation]; } |
