aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMurtaza Sultani <sultani@data-quest.de>2025-12-19 16:26:50 +0100
committerMurtaza Sultani <sultani@data-quest.de>2026-03-19 17:34:49 +0100
commit28307fdb26320d5b0331f9c031f7ba078acab578 (patch)
treecdd9e952080ccc6dbae581fa722fcb0a8c8e7590 /lib
parent6210d0e65044a44640a17a463ec709eb456ace43 (diff)
Redeveloped LTI Resource links
Diffstat (limited to 'lib')
-rw-r--r--lib/classes/LTI13a/LineItemRepository.php4
-rw-r--r--lib/classes/LTI13a/RegistrationManager.php26
-rw-r--r--lib/models/Lti/Registration.php18
-rw-r--r--lib/models/Lti/ResourceLink.php18
-rw-r--r--lib/modules/LtiToolModule.php4
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];
}