Daily Archives: March 15, 2013

How to Build a Rich / Non-Trivial IMS LTI 1.1 Provider

PHP IMS LTI 1.1 Providers

I have a “hello world” provider in PHP here:

https://source.sakaiproject.org/svn//basiclti/trunk/basiclti-docs/resources/docs/sakai-api-test/tool.php

It is nice as it does all of LTI 1.1 as well as Sakai’s extensions documented here:

https://source.sakaiproject.org/svn//basiclti/trunk/basiclti-docs/resources/docs/sakai_basiclti_api.doc

I have built a few other PHP providers that do a little more and use a database with some Authz and different implementation approaches. I used these as examples for various advanced LTI workshops I have given:

http://ims-dev.googlecode.com/svn/trunk/basiclti/php-simple/adlist/
http://ims-dev.googlecode.com/svn/trunk/lti/lms/

The best example is the Moodle LTI 1.1 Provider written by Juan Levya. The Moodle provider is more rich and powerful than the Sakai provider (below). The Moodle provider does grade send-back as well launch and provisioning at either a course or a tool level. I would love to get Sakai’s provider to feature parity with Moodle’s provider.

http://docs.moodle.org/22/en/LTI_Provider
https://moodle.org/plugins/view.php?plugin=local_ltiprovider

https://github.com/jleyva/moodle-local_ltiprovider

Java IMS LTI 1.1. Providers

There are three samples of Java LTI code here:

http://ims-dev.googlecode.com/svn/trunk/basiclti/

They were the initial sample code that was developed as proof-of concept. The Sakai LTI 1.1. providers started with this:

http://ims-dev.googlecode.com/svn/trunk/basiclti/java-servlet/

And went quite a ways beyond it. So I would ignore the above and start with:

https://source.sakaiproject.org/svn/basiclti/trunk/basiclti-portlet/src/java/org/sakaiproject/blti/ProviderServlet.java

https://source.sakaiproject.org/svn/basiclti/trunk/basiclti-docs/resources/docs/sakai_basiclti_provider.doc

You will note that the code here:

https://source.sakaiproject.org/svn/basiclti/trunk/basiclti-util/src/java/

Is not even copyright Sakai – it is generic utility code copyright IMS and others – and it is more well-tested than the code in http://ims-dev.googlecode.com/svn/trunk/basiclti/java-servlet/ – so I would start with this as your utility code.

The connection between that generic Util code and Sakai APIs happens here:

https://source.sakaiproject.org/svn/basiclti/trunk/basiclti-common/src/java/org/sakaiproject/basiclti/util/SakaiBLTIUtil.java

I made sure that I kept the generic bits and non-generic bits 100% separate.