Closed (outdated)
Project:
LTI Tool Provider
Version:
7.x-1.x-dev
Component:
Miscellaneous
Priority:
Minor
Category:
Feature request
Assigned:
Unassigned
Reporter:
Created:
1 Mar 2013 at 13:49 UTC
Updated:
2 Mar 2021 at 20:58 UTC
Jump to comment: Most recent
Comments
Comment #1
jzornig commentedCurrently there is no lti_tool_consumer module, but it should not be too difficult to create one that at least has a basic LTI 1.0 launch function. There are a number of drupal projects that implement LMS functionality and could potentially use this.
Just off the top of my head, such a module would need the following:
A LTI Tool Provider entity to store the key, secret and launch url.
A LTI tool launch function that took a provider entity or id and custom parameters as the arguments.
The launch function would construct a POST request to the provider's launch URL, marshalling all the appropriate LTI parameters and the custom parameters into the POST.
It would sign this request using the OAuth library and send the POST.
The module might also implement a field type that contains a link title, provider entity reference and custom parameter text field. The field would render as a link that invokes the launch function.
I'll likely knock something like this together, or get a student to do it as a project, during the next few months. But if someone wants to get it started sooner, contributions are welcome. Making this issue into a feature request.
Comment #2
mobcdi commentedWould you see it making use of the Services module or the RESTful Web Services module?
Comment #3
mradcliffeAn LIS 1.0 capable module would need to implement a services server and services resources that correspond to the LIS specification of Plain-Old XML over SOAP (ugh). An LTI consumer does not necessarily need to support LIS outcomes however I think the two go hand-in-hand.
Comment #4
btopro commentedSee related issue -- #1882204: Example of routing an LTI request to correct location . I repurpose a function in this module to resign a request and bounce it from 1 LTI capable system to another (drupal to drupal). The snippet to do this is in the cis distribution if you'd like to snoop through for an example of how to do it but it is pretty basic. I'm using restWS a lot in this process
Comment #5
jzornig commentedThanks btpro, will do. I hope to have a student working on this as a project in our June winter break.
Comment #6
swl10 commentedDid anything ever come of this thread or the project hinted at above? I'm also interested in using Drupal as an LTI consumer.
Comment #7
jzornig commentedNothing has happened yet. But we could start by nutting out some functional specs or listing your proposed use case.
The first question is: As a consumer, how would a site embed an LTI Tool when rendering a page. Would the tool be a node type? an entity? a field? a block?
How about an entity that could be behind the scenes for a LTI Tool node type, an LTI Tool field, or LTI Tool block?
The administrative interface could be almost the same as the LTI Tool Provider in that it would manage a list of Tool Providers, rather than consumers, and their corresponding keys and secrets.
Comment #8
btopro commentedown entity type in my mind. Similar yet different from providers (maybe even a different bundle of entity type LTI but that's probably too extreme a rewrite for little gain). This would allow you to utilize all the same UIs as much of the data to keep will be the same (I think?). Then there's the parts needed to do the push out to other services which is similar to receiving just in reverse.
A real issue might be the name space of this project as "provider" :)
Comment #9
swl10 commentedThanks for the updates.
What I'm thinking of from a user perspective is more like users and roles being set up and configured in Drupal which becomes a simple portal framework for a collection of LTI tools. I know that much has been written about using Drupal as an LMS and there clearly is a limit to what is useful (no point in rewriting Moodle). I see this feature more as an opportunity for people who don't want a full Moodle-type LMS experience but do want some type of portal to aggregate LTI enabled tools.
So a first cut without a concept of 'course' (or multiple courses) in Drupal would still be interesting to me. The potential to place a tool in multiple places in a site (pages) would be useful though so that the same tool can be used to show different content in different placement contexts.
I'm not expert enough in Drupal at this stage to be confident with the vocabulary of nodes vs entity types though a project like this might provide an incentive - I clearly have some reading to do.
Comment #10
btopro commentedDon't want to derail thread but -- There's every reason to replace Moodle (like blackboard controlling much of its future). https://www.opigno.org is a drupal LMS trying to take out Moodle, http://www.ethosce.com/ developer DJDevin is rewriting Quiz module in 7.x-5.x to be strong enough to replace Moodle usage for their platform / company, and ELMSLN http://elmsln.org is rethinking the LMS using this module as part of it's "selling point" for distributed, automated tool creation and deployment. As always, lots of reading :)
I think the entity route is the way to go. What you are describing I think fits with:
-- Current module scope is running on a drupal site somewhere; knows how to accept launches
-- Proposed module scope change would enable another site to be able to send users off to another tool / site via LTI (transmitting instead of receiving).
CIS distro in the ELMSLN has some LTI spidering techniques to take an LTI request via this module then resign it and bounce it off to other tools that people are trying to reach. Don't know if the code is of use to the way this works but I've posted it here before -- https://www.drupal.org/node/1882204#comment-6929418
Comment #11
mradcliffeI see two options for implementing the LTI spec as a consumer (which could go in that "lti" project):
1. A field type that can be added to any entity. The field form widget would collect the OAuth and other LTI information needed to make a request, and the field formatter would create the link or embed.
2. Entity type for a tool that collects the OAuth information. So similar to Canvas or Moodle model. You create the tool instance and then add it to a context. The Entity view/render would format as a LTI link, but also would need to support embedding. Then the entity can be added to nodes, etc... via Entity Reference and Inline Entity Form if you want to create tool instances from a Node.
As well, the LTI integration would probably want to support LTI extensions such as LIS integration so we would need to add custom SOAP containers (or "POX" even though it's not really plain-old xml).
Comment #12
swl10 commentedSo from a use case point of view, I think I'd expect an experience like this...
Install LTI module and configure it on a page like:
Home » Administration » Configuration » LTI
I'd expect to put any basic options controlling permissions for who can add tool links and what information is shared with tools there. For Drupal, it feels like this isn't the right place to put individual tool configurations though. For example, I just played around with the filedepot module which puts a link to filedepot right in the navigation after installation. Although only a very limited number of users would see an equivalent link for "LTI Tools" that would work as a UX for setting up the tool credentials in my opinion.
Assuming I've now entered the launch URL and credentials for a simple notice board tool (say) I'd then expect less powerful users to see a new content type like the "Article" configured in the default install. It would say "Notice Board" and when you added one it would use a unique reference to launch the notice board tool configured previously in such a way that that piece of content provides context to the external tool. I guess that is where the field functionality would come in, perhaps it would need to be a more general "LTI Tool" content type and the field lets you choose which configured tool to launch - not a big deal I don't think.
Mapping the course context feels like organic groups in Drupal.
PS: I'm aware of efforts to use Drupal as an LMS, but I saw those more as envisioning new ways of solving the LMS problem replacing things like Moodle, I guess I was making the more specific point about rewriting it: ending up with something the same based on Drupal - you may also feel that that is worthwhile of course!
Comment #13
darrenwh commentedHi,
Just wrote a new module to work as a LTI Consumer, created contexts and resources as custom entities linking contexts to entities using an entity reference field, only have one tool setting at present, but expect this could be moved into a custom entity too, linking to the contexts. Have it all tested up to LTI 1.2. I'm thinking that resources can be linked to nodes for display and opening provider windows, just in the processed of getting it certified and then see if it can be published as a Drupal Module project on the site.
Will update here when I have further details...
Comment #14
Joe.U.Questionmark commented@darrenwh great news! How did you get on?
Comment #15
btopro commentedyeah, any news on this?
Comment #16
darrenwh commentedHi,
Started and finished the module a while back now, will see if I can find the source code and put it up as a sandbox.
Comment #17
Joe.U.Questionmark commented@darrenwh, Did you find it? I am super keen to get my hands on something like this!
Joe
Comment #18
darrenwh commentedPut a sandbox here https://www.drupal.org/sandbox/darrenwh/ltic
Comment #19
btopro commentedAWESOME! need to get some bandwidth to review. Looked the code over a bit, looks well written in a fast pass. used this in production before?
Comment #20
darrenwh commentedIt's been incorporated into a production site, though not aware if it's been used yet, customer has now moved on, it has been passed to a specific LTI standard.
Comment #21
erlendoos commentedI found a library about LTI https://github.com/IMSGlobal/lti-1-3-php-library, but I don't have a clue on where to get started to create a lti consumer. What are the required steps to create an application that loads lesson content from an LTI provider?
Comment #22
gideon.vanzyl commentedJust having a look at LTI currently with it's possibilities
Comment #23
kenianbei commentedClosing as 7.x is no longer supported.