SlideShare a Scribd company logo
1 of 51
Charles Severance, Ph.D. Affiliate Coordinator IMS Global Learning Consortium (IMS GLC) http://www.imsglobal.org/ http://www.dr-chuck.com/ Building Tools in PHP using IMS Basic LTI
IMS: Digital Learning Standards Free the content IMS Common Cartridge Seamlessly connect  to learning IMS Learning Tools Interoperability (LTI) The  information architecture for learning IMS Learning  Information Services (LIS)
LEARNING TOOL B A S I C L T I PHP Java App Engine Wookie... ...
Apache Wookie
TC Admin Tool Proxy Runtime TP Admin Tool Proxy Runtime TC User Basic Learning Tools Interoperability Launch Tool Consumer Tool Provider Tool Secret Tool Proxy Secret
How to Write a Basic LTI Tool in PHP
Test Harness ,[object Object],[object Object],http://www.imsglobal.org/developers/BLTI/lms.php http://www.imsglobal.org/developers/BLTI/tool.php
http://www.imsglobal.org/developers/BLTI/lms.php
http://www.imsglobal.org/developers/BLTI/tool.php
Source Code - Download ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tool Installation and URLs ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
A Sample Tool – Classified Ads
Outline ,[object Object],[object Object],[object Object],[object Object]
TC Admin Tool Proxy Runtime TP Admin Tool Proxy Runtime TC User Basic Learning Tools Interoperability Launch Tool Consumer Tool Provider Tool Secret Tool Proxy Secret
Administration Screen
Multi-Tenancy http://en.wikipedia.org/wiki/Multitenancy Multitenancy  refers to a principle in software architecture where a single instance of the software runs on a server, serving multiple client organizations (tenants).  Multitenancy  is contrasted with a multi-instance architecture where separate software instances (or hardware systems) are set up for different client organizations. With a  multitenant  architecture, a software application is designed to virtually partition its data and configuration so that each client organization works with a customized/isolated virtual application instance.
Basic LTI Sample Launch Data lti_version=LTI-1p0 lti_message_type=basic-lti-launch-request oauth_consumer_key=lmsng.school.edu resource_link_id=120988f929-274612 user_id=292832126 roles=Instructor lis_person_name_full=Charles R. Severance lis_person_contact_email_primary = csev@umich.edu context_id=456434513 context_title=SI301 – PHP tool_consumer_instance_description=University of School
Administration Screen
Multi-Tenancy Data Model create table blti_keys ( id  MEDIUMINT NOT NULL AUTO_INCREMENT, oauth_consumer_key  CHAR(255) NOT NULL, secret  CHAR(255) NULL, name  CHAR(255) NULL, context_id  CHAR(255) NULL, created_at  DATETIME NOT NULL, updated_at  DATETIME NOT NULL, PRIMARY KEY (id) ); TP Admin context_id is used to optionally override context_id from launches Tool Secret
Advertisement Data Model
Multi-Tenancy Data Model create table ads ( id  MEDIUMINT NOT NULL AUTO_INCREMENT, course_key  CHAR(255) NOT NULL, user_key  CHAR(255) NULL, user_name  CHAR(255) NULL, title  CHAR(255) NULL, description  TEXT(2048) NULL, created_at  DATETIME NOT NULL, updated_at  DATETIME NOT NULL, PRIMARY KEY (id) ); Apologies to "3NF"
Multi-Tenancy Data mysql> select id, left(course_key,25),left(user_key,25),left(title,20) from ads; +----+---------------------------+---------------------------+----------------------+ | id | left(course_key,25)  | left(user_key,25)  | left(title,20)  | +----+---------------------------+---------------------------+----------------------+ |  6 | 12345:456434513  | 12345:292832126  | A Totally Sweet Titl | |  7 | 12345:456434513  | 12345:292832126  | Another Awesome Titl | |  8 | lmsng.school.edu:45643451 | lmsng.school.edu:29283212 | A TITLE  | |  9 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Honda 450 - 1983 - E | | 10 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Slightly Used App En | | 11 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Free Metal File Cabi | | 12 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Mountain Bike - New  | | 13 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Two Premiere Tickets | | 14 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Monthly Bus Pass to  | +----+---------------------------+---------------------------+----------------------+ We must namespace the primary keys (user_id, context_id) with the oauth_consumer_key to isolate courses and users
Handling the Basic LTI Launch ,[object Object],require_once '../ims-blti/blti.php'; require_once("db.php"); $context = new BLTI(array('table' => 'blti_keys')); if ( $context->complete ) exit(); if ( ! $context->valid ) { print "Could not establish context: ".$context->message.""; exit(); } ads.php
Handling the Basic LTI Launch ,[object Object],require_once '../ims-blti/blti.php'; require_once("db.php"); $context = new BLTI(array('table' => 'blti_keys')); if ( $context->complete ) exit(); if ( ! $context->valid ) { print "Could not establish context: ".$context->message.""; exit(); } ads.php
The Context ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
The Context – Supplied Methods $context->getCourseKey() = 12345:456434513 $context->getCourseName() = SI182 $context->getResourceKey() = 12345:9fbbe1230 $context->getResourceTitle() = Week 1 Blog $context->getUserKey() = 12345:292832126 $context->isInstructor() = true/false $context->getUserEmail() = jane@school.edu $context->getUserShortName() = jane@school.edu $context->getUserName() = Jane Q. Public $context->getUserImage() = http://www.gravatar... $context->getConsumerKey() = 12345
Simple Authorization ,[object Object],mysql> select id, left(course_key,25),left(user_key,25),left(title,20) from ads; +----+---------------------------+---------------------------+----------------------+ | id | left(course_key,25)  | left(user_key,25)  | left(title,20)  | +----+---------------------------+---------------------------+----------------------+ |  6 | 12345:456434513  | 12345:292832126  | A Totally Sweet Titl | |  7 | 12345:456434513  | 12345:292832126  | Another Awesome Titl | |  8 | lmsng.school.edu:45643451 | lmsng.school.edu:29283212 | A TITLE  | |  9 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Honda 450 - 1983 - E | | 10 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Slightly Used App En | | 11 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Free Metal File Cabi | | 12 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Mountain Bike - New  | | 13 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Two Premiere Tickets | | 14 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Monthly Bus Pass to  | +----+---------------------------+---------------------------+----------------------+
mysql> select id, left(course_key,25),left(user_key,25),left(title,20) from ads; +----+---------------------------+---------------------------+----------------------+ | id | left(course_key,25)  | left(user_key,25)  | left(title,20)  | +----+---------------------------+---------------------------+----------------------+ |  6 | 12345:456434513  | 12345:292832126  | A Totally Sweet Titl | |  7 | 12345:456434513  | 12345:292832126  | Another Awesome Titl | |  8 | lmsng.school.edu:45643451 | lmsng.school.edu:29283212 | A TITLE  | |  9 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Honda 450 - 1983 - E | | 10 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Slightly Used App En | | 11 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Free Metal File Cabi | | 12 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Mountain Bike - New  | | 13 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Two Premiere Tickets | | 14 | ed.ac.uk:lti_demo  | ed.ac.uk:URN:X-WEBCT-b98f | Monthly Bus Pass to  | +----+---------------------------+---------------------------+----------------------+ Instructor: SELECT * FROM ads WHERE id='7' AND  course_key='12345:456434513' Student: SELECT * FROM ads WHERE id='7' AND course_key='12345:456434513 AND  user_key = '12345:292832126'
Show/Hide Buttons
Showing Buttons For Edit/Delete <?php if ( $context->isInstructor() ||  $row['user_key'] == $context->getUserKey() ) {  ?>  <a href=&quot;<self?>?action=edit&id=<row[id]?>&quot;>edit<a>  <a href=&quot;<self?>?action=delete&id=<row[id]?>&quot;>delete<a> <?php }?> ads.php
Advanced Topic: System and Course-Mapped Keys
Use cases ,[object Object],[object Object]
System-Scoped Key=zap cid=a1d2 cid=1234 cid=654 Key=fun cid=a1d2 cid=9876 cid=345 Provider zap(sys) fun(sys) zap:a1d2 zap:1234 zap:654 fun:a1d2 fun:9876 fun:345 Consumers
Course-Scoped Keys Key=zap cid=a1d2 cid=1234 Key=west cid=9876 Provider zap(sys) east ( c=1555 ) west( c=1555 ) zap:a1d2 zap:1234 1555 Consumers Key=east cid=a1d2 cid=1234 With course-scoped keys, students from multiple contexts in multiple Consumers can meet and collaborate in the Provider.
Data Model Changes create table blti_keys ( id  MEDIUMINT NOT NULL AUTO_INCREMENT, oauth_consumer_key  CHAR(255) NOT NULL, secret  CHAR(255) NULL, name  CHAR(255) NULL, context_id  CHAR(255) NULL, created_at  DATETIME NOT NULL, updated_at  DATETIME NOT NULL, PRIMARY KEY (id) ); context_id is used to optionally override context_id from launches
Course-Scoped Keys ,[object Object],mysql> select id,oauth_consumer_key,secret,context_id from blti_keys; +----+--------------------+--------+------------+ | id | oauth_consumer_key | secret | context_id | +----+--------------------+--------+------------+ |  4 | 12345  | secret | NULL  | |  5 | bob.smith.lcc.edu  | secret | 999999  | +----+--------------------+--------+------------+
Basic LTI Sample Launch Data lti_version=LTI-1p0 lti_message_type=basic-lti-launch-request oauth_consumer_key=bob.smith.lcc.edu resource_link_id=120988f929-274612 user_id=292832126 roles=Instructor lis_person_name_full=Charles R. Severance lis_person_contact_email_primary = csev@umich.edu context_id=4598634513 context_title=SI301 – PHP tool_consumer_instance_description=University of School ignore
Configuration using resource_link_id
Use Case: Picking a Video ,[object Object],[object Object]
Goal State Week 1  Video snippet Discussion board Week 2 Video snippet Wiki Week 3 Video Snippet Midterm Exam Scene 1 Scene 9 Scene4
Basic LTI Sample Launch Data lti_version=LTI-1p0 lti_message_type=basic-lti-launch-request oauth_consumer_key=lmsng.school.edu resource_link_id=120988f929-274612 user_id=292832126 roles=Instructor lis_person_name_full=Charles R. Severance lis_person_contact_email_primary = csev@umich.edu context_id=456434513 context_title=SI301 – PHP tool_consumer_instance_description=University of School
Understanding resource_link_id Week 1  Video snippet Discussion board Week 2 Video snippet Wiki Week 3 Video Snippet Midterm Exam Key=987 cid=a1b2 rlid=9c45 rlid=23b5 rlid=1725 The resource_link_id is unique for each placement of Basic LTI in a course.  When each of the resources is launched you get key, cid, and rlid.  Resource_link_id is required on all launches.
Using resource_link_id Week 1  Video snippet Discussion board Key= 987  cid=a1b2 rlid= 9c45 You need a table in your application which maps from a  consumer_key:resource_link_id  (i.e.  987 : 9c45 ) to some local resource identified within your application.  Until the Instructor selects a resource within your tool, it is &quot;unconfigured&quot;
Understanding resource_link_id Week 1  Video snippet Discussion board Scene 1 Key=987 cid=a1b2 rlid=9c45 Not configured 987:9c45 = matrix_scene_01 Learner Instructor Scene 1 Not Config Learner Instructor Pick Video
Primary Key for resource_link_id ,[object Object]
Redirect and Multiple Instances ,[object Object],[object Object]
Custom Field .vs. Resource Link ,[object Object],[object Object],[object Object],[object Object]
Advanced Topics ,[object Object]
Source Code - Download ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
IMS Alliance Membership ,[object Object],[object Object],[object Object],[object Object],http://www.imsglobal.org/cc/jointhealliance.cfm
Questions ,[object Object],[object Object],Seamlessly connect  to learning IMS Learning Tools Interoperability (LTI)

More Related Content

Viewers also liked

Sakai 10 and Beyond - Next Steps for Sakai
Sakai 10 and Beyond - Next Steps for SakaiSakai 10 and Beyond - Next Steps for Sakai
Sakai 10 and Beyond - Next Steps for SakaiCharles Severance
 
A View on the Future of Sakai
A View on the Future of SakaiA View on the Future of Sakai
A View on the Future of SakaiCharles Severance
 
Apereo 2015: The State of Sakai
Apereo 2015: The State of SakaiApereo 2015: The State of Sakai
Apereo 2015: The State of SakaiCharles Severance
 
Programming for Everybody in Python
Programming for Everybody in PythonProgramming for Everybody in Python
Programming for Everybody in PythonCharles Severance
 
Standards Update: Apereo 2015
Standards Update: Apereo 2015Standards Update: Apereo 2015
Standards Update: Apereo 2015Charles Severance
 
MOOCs – The Future Is Getting Clearer
MOOCs – The Future Is Getting ClearerMOOCs – The Future Is Getting Clearer
MOOCs – The Future Is Getting ClearerCharles Severance
 
Building the Next Generation Teaching and Learning Environment
Building the Next Generation Teaching and Learning EnvironmentBuilding the Next Generation Teaching and Learning Environment
Building the Next Generation Teaching and Learning EnvironmentCharles Severance
 
Educuase: New Opportunities for Teaching and Learning: Extending Learning Man...
Educuase: New Opportunities for Teaching and Learning: Extending Learning Man...Educuase: New Opportunities for Teaching and Learning: Extending Learning Man...
Educuase: New Opportunities for Teaching and Learning: Extending Learning Man...Charles Severance
 
A Brief History of the Internet
A Brief History of the InternetA Brief History of the Internet
A Brief History of the InternetCharles Severance
 

Viewers also liked (10)

Sakai 10 and Beyond - Next Steps for Sakai
Sakai 10 and Beyond - Next Steps for SakaiSakai 10 and Beyond - Next Steps for Sakai
Sakai 10 and Beyond - Next Steps for Sakai
 
A View on the Future of Sakai
A View on the Future of SakaiA View on the Future of Sakai
A View on the Future of Sakai
 
Apereo 2015: The State of Sakai
Apereo 2015: The State of SakaiApereo 2015: The State of Sakai
Apereo 2015: The State of Sakai
 
Programming for Everybody in Python
Programming for Everybody in PythonProgramming for Everybody in Python
Programming for Everybody in Python
 
Standards Update: Apereo 2015
Standards Update: Apereo 2015Standards Update: Apereo 2015
Standards Update: Apereo 2015
 
IMS Developer Network
IMS Developer NetworkIMS Developer Network
IMS Developer Network
 
MOOCs – The Future Is Getting Clearer
MOOCs – The Future Is Getting ClearerMOOCs – The Future Is Getting Clearer
MOOCs – The Future Is Getting Clearer
 
Building the Next Generation Teaching and Learning Environment
Building the Next Generation Teaching and Learning EnvironmentBuilding the Next Generation Teaching and Learning Environment
Building the Next Generation Teaching and Learning Environment
 
Educuase: New Opportunities for Teaching and Learning: Extending Learning Man...
Educuase: New Opportunities for Teaching and Learning: Extending Learning Man...Educuase: New Opportunities for Teaching and Learning: Extending Learning Man...
Educuase: New Opportunities for Teaching and Learning: Extending Learning Man...
 
A Brief History of the Internet
A Brief History of the InternetA Brief History of the Internet
A Brief History of the Internet
 

Similar to Building PHP Applications for IMS Basic LTI

Automating Networks by Converting into API/Webs
Automating Networks by Converting into API/WebsAutomating Networks by Converting into API/Webs
Automating Networks by Converting into API/WebsAPNIC
 
Demystifying Data Science Webinar - February 14, 2018
Demystifying Data Science Webinar - February 14, 2018Demystifying Data Science Webinar - February 14, 2018
Demystifying Data Science Webinar - February 14, 2018Analytics8
 
Integrating Azure Machine Learning and Predictive Analytics with SharePoint O...
Integrating Azure Machine Learning and Predictive Analytics with SharePoint O...Integrating Azure Machine Learning and Predictive Analytics with SharePoint O...
Integrating Azure Machine Learning and Predictive Analytics with SharePoint O...Bhakthi Liyanage
 
Online examination documentation
Online examination documentationOnline examination documentation
Online examination documentationWakimul Alam
 
Automating Networks by using API
Automating Networks by using APIAutomating Networks by using API
Automating Networks by using API一清 井上
 
Notes on Deploying Machine-learning Models at Scale
Notes on Deploying Machine-learning Models at ScaleNotes on Deploying Machine-learning Models at Scale
Notes on Deploying Machine-learning Models at ScaleDeep Kayal
 
Presentation on Best E-content Award - R.D.Sivakumar
Presentation on Best E-content Award - R.D.SivakumarPresentation on Best E-content Award - R.D.Sivakumar
Presentation on Best E-content Award - R.D.SivakumarSivakumar R D .
 
Streamlining Workflows: Unleashing Automation with Azure and Power Automate
Streamlining Workflows: Unleashing Automation with Azure and Power AutomateStreamlining Workflows: Unleashing Automation with Azure and Power Automate
Streamlining Workflows: Unleashing Automation with Azure and Power AutomateHamida Rebai Trabelsi
 
Power Platform Community Monthly Webinar - December 2021
Power Platform Community Monthly Webinar - December 2021Power Platform Community Monthly Webinar - December 2021
Power Platform Community Monthly Webinar - December 2021Robert Crane
 
Agile skills inventory
Agile skills inventoryAgile skills inventory
Agile skills inventoryKarl Métivier
 
Data Science in the Elastic Stack
Data Science in the Elastic StackData Science in the Elastic Stack
Data Science in the Elastic StackRochelle Sonnenberg
 
Institute Information System-Synopsis.pdf
Institute Information System-Synopsis.pdfInstitute Information System-Synopsis.pdf
Institute Information System-Synopsis.pdfprojects602
 
Collecting Statistics in Luminis (Northeast Users Conference 2006)
Collecting Statistics in Luminis (Northeast Users Conference 2006)Collecting Statistics in Luminis (Northeast Users Conference 2006)
Collecting Statistics in Luminis (Northeast Users Conference 2006)zbtirrell
 
WordPress Accessibility: WordCamp Chicago
WordPress Accessibility: WordCamp ChicagoWordPress Accessibility: WordCamp Chicago
WordPress Accessibility: WordCamp ChicagoJoseph Dolson
 
How To Become A Machine Learning Engineer? | Machine Learning Engineer Salary...
How To Become A Machine Learning Engineer? | Machine Learning Engineer Salary...How To Become A Machine Learning Engineer? | Machine Learning Engineer Salary...
How To Become A Machine Learning Engineer? | Machine Learning Engineer Salary...Edureka!
 

Similar to Building PHP Applications for IMS Basic LTI (20)

Automating Networks by Converting into API/Webs
Automating Networks by Converting into API/WebsAutomating Networks by Converting into API/Webs
Automating Networks by Converting into API/Webs
 
Demystifying Data Science Webinar - February 14, 2018
Demystifying Data Science Webinar - February 14, 2018Demystifying Data Science Webinar - February 14, 2018
Demystifying Data Science Webinar - February 14, 2018
 
Integrating Azure Machine Learning and Predictive Analytics with SharePoint O...
Integrating Azure Machine Learning and Predictive Analytics with SharePoint O...Integrating Azure Machine Learning and Predictive Analytics with SharePoint O...
Integrating Azure Machine Learning and Predictive Analytics with SharePoint O...
 
Online examination documentation
Online examination documentationOnline examination documentation
Online examination documentation
 
Automating Networks by using API
Automating Networks by using APIAutomating Networks by using API
Automating Networks by using API
 
Notes on Deploying Machine-learning Models at Scale
Notes on Deploying Machine-learning Models at ScaleNotes on Deploying Machine-learning Models at Scale
Notes on Deploying Machine-learning Models at Scale
 
Presentation on Best E-content Award - R.D.Sivakumar
Presentation on Best E-content Award - R.D.SivakumarPresentation on Best E-content Award - R.D.Sivakumar
Presentation on Best E-content Award - R.D.Sivakumar
 
DM PROJECT
DM PROJECTDM PROJECT
DM PROJECT
 
Streamlining Workflows: Unleashing Automation with Azure and Power Automate
Streamlining Workflows: Unleashing Automation with Azure and Power AutomateStreamlining Workflows: Unleashing Automation with Azure and Power Automate
Streamlining Workflows: Unleashing Automation with Azure and Power Automate
 
Network (Automation) eAcademy
Network (Automation) eAcademyNetwork (Automation) eAcademy
Network (Automation) eAcademy
 
Power Platform Community Monthly Webinar - December 2021
Power Platform Community Monthly Webinar - December 2021Power Platform Community Monthly Webinar - December 2021
Power Platform Community Monthly Webinar - December 2021
 
Agile skills inventory
Agile skills inventoryAgile skills inventory
Agile skills inventory
 
Data Science in the Elastic Stack
Data Science in the Elastic StackData Science in the Elastic Stack
Data Science in the Elastic Stack
 
>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>
 
Institute Information System-Synopsis.pdf
Institute Information System-Synopsis.pdfInstitute Information System-Synopsis.pdf
Institute Information System-Synopsis.pdf
 
Collecting Statistics in Luminis (Northeast Users Conference 2006)
Collecting Statistics in Luminis (Northeast Users Conference 2006)Collecting Statistics in Luminis (Northeast Users Conference 2006)
Collecting Statistics in Luminis (Northeast Users Conference 2006)
 
Documentation
DocumentationDocumentation
Documentation
 
WordPress Accessibility: WordCamp Chicago
WordPress Accessibility: WordCamp ChicagoWordPress Accessibility: WordCamp Chicago
WordPress Accessibility: WordCamp Chicago
 
Mstr meetup
Mstr meetupMstr meetup
Mstr meetup
 
How To Become A Machine Learning Engineer? | Machine Learning Engineer Salary...
How To Become A Machine Learning Engineer? | Machine Learning Engineer Salary...How To Become A Machine Learning Engineer? | Machine Learning Engineer Salary...
How To Become A Machine Learning Engineer? | Machine Learning Engineer Salary...
 

More from Charles Severance

LTI Advantage: The Next Big Thing in LMS Integration
LTI Advantage: The Next Big Thing in LMS IntegrationLTI Advantage: The Next Big Thing in LMS Integration
LTI Advantage: The Next Big Thing in LMS IntegrationCharles Severance
 
Sakai Hierarchy Framework Changes Overview (not implemented)
Sakai Hierarchy  Framework Changes Overview (not implemented)Sakai Hierarchy  Framework Changes Overview (not implemented)
Sakai Hierarchy Framework Changes Overview (not implemented)Charles Severance
 
Building the NGDLE with Tsugi (次) and Koseu(코스)
Building the NGDLE with Tsugi (次) and Koseu(코스)Building the NGDLE with Tsugi (次) and Koseu(코스)
Building the NGDLE with Tsugi (次) and Koseu(코스)Charles Severance
 
Exploring the Next Generation Digital Learning Ecosystem
Exploring the Next Generation Digital Learning EcosystemExploring the Next Generation Digital Learning Ecosystem
Exploring the Next Generation Digital Learning EcosystemCharles Severance
 
Exploring the Next Generation Digital Learning Environment with Tsugi
Exploring the Next Generation Digital Learning Environment with TsugiExploring the Next Generation Digital Learning Environment with Tsugi
Exploring the Next Generation Digital Learning Environment with TsugiCharles Severance
 
Building the Next Generation Teaching and Learning Environment with Tsugi (次)
Building the Next Generation Teaching and Learning Environment with Tsugi (次)Building the Next Generation Teaching and Learning Environment with Tsugi (次)
Building the Next Generation Teaching and Learning Environment with Tsugi (次)Charles Severance
 
Beyond MOOCs: Open Education at Scale
Beyond MOOCs: Open Education at ScaleBeyond MOOCs: Open Education at Scale
Beyond MOOCs: Open Education at ScaleCharles Severance
 
CloudSocial: A New Approach to Enabling Open Content for Broad Reuse
CloudSocial: A New Approach to Enabling Open Content for Broad ReuseCloudSocial: A New Approach to Enabling Open Content for Broad Reuse
CloudSocial: A New Approach to Enabling Open Content for Broad ReuseCharles Severance
 
Next Generation Teaching and Learning
Next Generation Teaching and LearningNext Generation Teaching and Learning
Next Generation Teaching and LearningCharles Severance
 
Next Generation Teaching and Learning
Next Generation Teaching and LearningNext Generation Teaching and Learning
Next Generation Teaching and LearningCharles Severance
 
Updated Version: Tsugi Overview
Updated Version: Tsugi OverviewUpdated Version: Tsugi Overview
Updated Version: Tsugi OverviewCharles Severance
 
The Trials and Tribulations of Predicting the Future of Educational Technology
The Trials and Tribulations of Predicting the Future of Educational TechnologyThe Trials and Tribulations of Predicting the Future of Educational Technology
The Trials and Tribulations of Predicting the Future of Educational TechnologyCharles Severance
 
How will the MOOC Change Between Now and 2020?
How will the MOOC Change Between Now and 2020?How will the MOOC Change Between Now and 2020?
How will the MOOC Change Between Now and 2020?Charles Severance
 
Experience Teaching Massive Open Online Courses (MOOCs)
Experience Teaching Massive Open Online Courses (MOOCs)Experience Teaching Massive Open Online Courses (MOOCs)
Experience Teaching Massive Open Online Courses (MOOCs)Charles Severance
 
CloudSocial: A New Approach to Enabling Open-Content for Broad Reuse
CloudSocial: A New Approach to Enabling Open-Content for Broad ReuseCloudSocial: A New Approach to Enabling Open-Content for Broad Reuse
CloudSocial: A New Approach to Enabling Open-Content for Broad ReuseCharles Severance
 
Apereo Panel: Libraries, Education, and Collaboration
Apereo Panel: Libraries, Education, and CollaborationApereo Panel: Libraries, Education, and Collaboration
Apereo Panel: Libraries, Education, and CollaborationCharles Severance
 
Building Scalable IMS LTI Tools Using the TSUGI Framework
Building Scalable IMS LTI Tools Using the TSUGI FrameworkBuilding Scalable IMS LTI Tools Using the TSUGI Framework
Building Scalable IMS LTI Tools Using the TSUGI FrameworkCharles Severance
 
The Grand Convergence: The Future of e-Learning and Education Publishing
The Grand Convergence: The Future of e-Learning  and Education PublishingThe Grand Convergence: The Future of e-Learning  and Education Publishing
The Grand Convergence: The Future of e-Learning and Education PublishingCharles Severance
 

More from Charles Severance (20)

LTI Advantage: The Next Big Thing in LMS Integration
LTI Advantage: The Next Big Thing in LMS IntegrationLTI Advantage: The Next Big Thing in LMS Integration
LTI Advantage: The Next Big Thing in LMS Integration
 
Hierarchy requirements
Hierarchy requirements Hierarchy requirements
Hierarchy requirements
 
Sakai Hierarchy Framework Changes Overview (not implemented)
Sakai Hierarchy  Framework Changes Overview (not implemented)Sakai Hierarchy  Framework Changes Overview (not implemented)
Sakai Hierarchy Framework Changes Overview (not implemented)
 
Building the NGDLE with Tsugi (次) and Koseu(코스)
Building the NGDLE with Tsugi (次) and Koseu(코스)Building the NGDLE with Tsugi (次) and Koseu(코스)
Building the NGDLE with Tsugi (次) and Koseu(코스)
 
Exploring the Next Generation Digital Learning Ecosystem
Exploring the Next Generation Digital Learning EcosystemExploring the Next Generation Digital Learning Ecosystem
Exploring the Next Generation Digital Learning Ecosystem
 
Exploring the Next Generation Digital Learning Environment with Tsugi
Exploring the Next Generation Digital Learning Environment with TsugiExploring the Next Generation Digital Learning Environment with Tsugi
Exploring the Next Generation Digital Learning Environment with Tsugi
 
Building the Next Generation Teaching and Learning Environment with Tsugi (次)
Building the Next Generation Teaching and Learning Environment with Tsugi (次)Building the Next Generation Teaching and Learning Environment with Tsugi (次)
Building the Next Generation Teaching and Learning Environment with Tsugi (次)
 
Beyond MOOCs: Open Education at Scale
Beyond MOOCs: Open Education at ScaleBeyond MOOCs: Open Education at Scale
Beyond MOOCs: Open Education at Scale
 
CloudSocial: A New Approach to Enabling Open Content for Broad Reuse
CloudSocial: A New Approach to Enabling Open Content for Broad ReuseCloudSocial: A New Approach to Enabling Open Content for Broad Reuse
CloudSocial: A New Approach to Enabling Open Content for Broad Reuse
 
Next Generation Teaching and Learning
Next Generation Teaching and LearningNext Generation Teaching and Learning
Next Generation Teaching and Learning
 
Next Generation Teaching and Learning
Next Generation Teaching and LearningNext Generation Teaching and Learning
Next Generation Teaching and Learning
 
Updated Version: Tsugi Overview
Updated Version: Tsugi OverviewUpdated Version: Tsugi Overview
Updated Version: Tsugi Overview
 
The Trials and Tribulations of Predicting the Future of Educational Technology
The Trials and Tribulations of Predicting the Future of Educational TechnologyThe Trials and Tribulations of Predicting the Future of Educational Technology
The Trials and Tribulations of Predicting the Future of Educational Technology
 
Tsugi Workshop @ Notre Dame
Tsugi Workshop @ Notre DameTsugi Workshop @ Notre Dame
Tsugi Workshop @ Notre Dame
 
How will the MOOC Change Between Now and 2020?
How will the MOOC Change Between Now and 2020?How will the MOOC Change Between Now and 2020?
How will the MOOC Change Between Now and 2020?
 
Experience Teaching Massive Open Online Courses (MOOCs)
Experience Teaching Massive Open Online Courses (MOOCs)Experience Teaching Massive Open Online Courses (MOOCs)
Experience Teaching Massive Open Online Courses (MOOCs)
 
CloudSocial: A New Approach to Enabling Open-Content for Broad Reuse
CloudSocial: A New Approach to Enabling Open-Content for Broad ReuseCloudSocial: A New Approach to Enabling Open-Content for Broad Reuse
CloudSocial: A New Approach to Enabling Open-Content for Broad Reuse
 
Apereo Panel: Libraries, Education, and Collaboration
Apereo Panel: Libraries, Education, and CollaborationApereo Panel: Libraries, Education, and Collaboration
Apereo Panel: Libraries, Education, and Collaboration
 
Building Scalable IMS LTI Tools Using the TSUGI Framework
Building Scalable IMS LTI Tools Using the TSUGI FrameworkBuilding Scalable IMS LTI Tools Using the TSUGI Framework
Building Scalable IMS LTI Tools Using the TSUGI Framework
 
The Grand Convergence: The Future of e-Learning and Education Publishing
The Grand Convergence: The Future of e-Learning  and Education PublishingThe Grand Convergence: The Future of e-Learning  and Education Publishing
The Grand Convergence: The Future of e-Learning and Education Publishing
 

Building PHP Applications for IMS Basic LTI

  • 1. Charles Severance, Ph.D. Affiliate Coordinator IMS Global Learning Consortium (IMS GLC) http://www.imsglobal.org/ http://www.dr-chuck.com/ Building Tools in PHP using IMS Basic LTI
  • 2. IMS: Digital Learning Standards Free the content IMS Common Cartridge Seamlessly connect to learning IMS Learning Tools Interoperability (LTI) The information architecture for learning IMS Learning Information Services (LIS)
  • 3. LEARNING TOOL B A S I C L T I PHP Java App Engine Wookie... ...
  • 5. TC Admin Tool Proxy Runtime TP Admin Tool Proxy Runtime TC User Basic Learning Tools Interoperability Launch Tool Consumer Tool Provider Tool Secret Tool Proxy Secret
  • 6. How to Write a Basic LTI Tool in PHP
  • 7.
  • 10.
  • 11.
  • 12. A Sample Tool – Classified Ads
  • 13.
  • 14. TC Admin Tool Proxy Runtime TP Admin Tool Proxy Runtime TC User Basic Learning Tools Interoperability Launch Tool Consumer Tool Provider Tool Secret Tool Proxy Secret
  • 16. Multi-Tenancy http://en.wikipedia.org/wiki/Multitenancy Multitenancy refers to a principle in software architecture where a single instance of the software runs on a server, serving multiple client organizations (tenants). Multitenancy is contrasted with a multi-instance architecture where separate software instances (or hardware systems) are set up for different client organizations. With a multitenant architecture, a software application is designed to virtually partition its data and configuration so that each client organization works with a customized/isolated virtual application instance.
  • 17. Basic LTI Sample Launch Data lti_version=LTI-1p0 lti_message_type=basic-lti-launch-request oauth_consumer_key=lmsng.school.edu resource_link_id=120988f929-274612 user_id=292832126 roles=Instructor lis_person_name_full=Charles R. Severance lis_person_contact_email_primary = csev@umich.edu context_id=456434513 context_title=SI301 – PHP tool_consumer_instance_description=University of School
  • 19. Multi-Tenancy Data Model create table blti_keys ( id MEDIUMINT NOT NULL AUTO_INCREMENT, oauth_consumer_key CHAR(255) NOT NULL, secret CHAR(255) NULL, name CHAR(255) NULL, context_id CHAR(255) NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY (id) ); TP Admin context_id is used to optionally override context_id from launches Tool Secret
  • 21. Multi-Tenancy Data Model create table ads ( id MEDIUMINT NOT NULL AUTO_INCREMENT, course_key CHAR(255) NOT NULL, user_key CHAR(255) NULL, user_name CHAR(255) NULL, title CHAR(255) NULL, description TEXT(2048) NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY (id) ); Apologies to &quot;3NF&quot;
  • 22. Multi-Tenancy Data mysql> select id, left(course_key,25),left(user_key,25),left(title,20) from ads; +----+---------------------------+---------------------------+----------------------+ | id | left(course_key,25) | left(user_key,25) | left(title,20) | +----+---------------------------+---------------------------+----------------------+ | 6 | 12345:456434513 | 12345:292832126 | A Totally Sweet Titl | | 7 | 12345:456434513 | 12345:292832126 | Another Awesome Titl | | 8 | lmsng.school.edu:45643451 | lmsng.school.edu:29283212 | A TITLE | | 9 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Honda 450 - 1983 - E | | 10 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Slightly Used App En | | 11 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Free Metal File Cabi | | 12 | ed.ac.uk:lti_demo | ed.ac.uk:URN:X-WEBCT-b98f | Mountain Bike - New | | 13 | ed.ac.uk:lti_demo | ed.ac.uk:URN:X-WEBCT-b98f | Two Premiere Tickets | | 14 | ed.ac.uk:lti_demo | ed.ac.uk:URN:X-WEBCT-b98f | Monthly Bus Pass to | +----+---------------------------+---------------------------+----------------------+ We must namespace the primary keys (user_id, context_id) with the oauth_consumer_key to isolate courses and users
  • 23.
  • 24.
  • 25.
  • 26. The Context – Supplied Methods $context->getCourseKey() = 12345:456434513 $context->getCourseName() = SI182 $context->getResourceKey() = 12345:9fbbe1230 $context->getResourceTitle() = Week 1 Blog $context->getUserKey() = 12345:292832126 $context->isInstructor() = true/false $context->getUserEmail() = jane@school.edu $context->getUserShortName() = jane@school.edu $context->getUserName() = Jane Q. Public $context->getUserImage() = http://www.gravatar... $context->getConsumerKey() = 12345
  • 27.
  • 28. mysql> select id, left(course_key,25),left(user_key,25),left(title,20) from ads; +----+---------------------------+---------------------------+----------------------+ | id | left(course_key,25) | left(user_key,25) | left(title,20) | +----+---------------------------+---------------------------+----------------------+ | 6 | 12345:456434513 | 12345:292832126 | A Totally Sweet Titl | | 7 | 12345:456434513 | 12345:292832126 | Another Awesome Titl | | 8 | lmsng.school.edu:45643451 | lmsng.school.edu:29283212 | A TITLE | | 9 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Honda 450 - 1983 - E | | 10 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Slightly Used App En | | 11 | lmsng.school.edu:7601b0ed | lmsng.school.edu:f315ea76 | Free Metal File Cabi | | 12 | ed.ac.uk:lti_demo | ed.ac.uk:URN:X-WEBCT-b98f | Mountain Bike - New | | 13 | ed.ac.uk:lti_demo | ed.ac.uk:URN:X-WEBCT-b98f | Two Premiere Tickets | | 14 | ed.ac.uk:lti_demo | ed.ac.uk:URN:X-WEBCT-b98f | Monthly Bus Pass to | +----+---------------------------+---------------------------+----------------------+ Instructor: SELECT * FROM ads WHERE id='7' AND course_key='12345:456434513' Student: SELECT * FROM ads WHERE id='7' AND course_key='12345:456434513 AND user_key = '12345:292832126'
  • 30. Showing Buttons For Edit/Delete <?php if ( $context->isInstructor() || $row['user_key'] == $context->getUserKey() ) { ?> <a href=&quot;<self?>?action=edit&id=<row[id]?>&quot;>edit<a> <a href=&quot;<self?>?action=delete&id=<row[id]?>&quot;>delete<a> <?php }?> ads.php
  • 31. Advanced Topic: System and Course-Mapped Keys
  • 32.
  • 33. System-Scoped Key=zap cid=a1d2 cid=1234 cid=654 Key=fun cid=a1d2 cid=9876 cid=345 Provider zap(sys) fun(sys) zap:a1d2 zap:1234 zap:654 fun:a1d2 fun:9876 fun:345 Consumers
  • 34. Course-Scoped Keys Key=zap cid=a1d2 cid=1234 Key=west cid=9876 Provider zap(sys) east ( c=1555 ) west( c=1555 ) zap:a1d2 zap:1234 1555 Consumers Key=east cid=a1d2 cid=1234 With course-scoped keys, students from multiple contexts in multiple Consumers can meet and collaborate in the Provider.
  • 35. Data Model Changes create table blti_keys ( id MEDIUMINT NOT NULL AUTO_INCREMENT, oauth_consumer_key CHAR(255) NOT NULL, secret CHAR(255) NULL, name CHAR(255) NULL, context_id CHAR(255) NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY (id) ); context_id is used to optionally override context_id from launches
  • 36.
  • 37. Basic LTI Sample Launch Data lti_version=LTI-1p0 lti_message_type=basic-lti-launch-request oauth_consumer_key=bob.smith.lcc.edu resource_link_id=120988f929-274612 user_id=292832126 roles=Instructor lis_person_name_full=Charles R. Severance lis_person_contact_email_primary = csev@umich.edu context_id=4598634513 context_title=SI301 – PHP tool_consumer_instance_description=University of School ignore
  • 39.
  • 40. Goal State Week 1 Video snippet Discussion board Week 2 Video snippet Wiki Week 3 Video Snippet Midterm Exam Scene 1 Scene 9 Scene4
  • 41. Basic LTI Sample Launch Data lti_version=LTI-1p0 lti_message_type=basic-lti-launch-request oauth_consumer_key=lmsng.school.edu resource_link_id=120988f929-274612 user_id=292832126 roles=Instructor lis_person_name_full=Charles R. Severance lis_person_contact_email_primary = csev@umich.edu context_id=456434513 context_title=SI301 – PHP tool_consumer_instance_description=University of School
  • 42. Understanding resource_link_id Week 1 Video snippet Discussion board Week 2 Video snippet Wiki Week 3 Video Snippet Midterm Exam Key=987 cid=a1b2 rlid=9c45 rlid=23b5 rlid=1725 The resource_link_id is unique for each placement of Basic LTI in a course. When each of the resources is launched you get key, cid, and rlid. Resource_link_id is required on all launches.
  • 43. Using resource_link_id Week 1 Video snippet Discussion board Key= 987 cid=a1b2 rlid= 9c45 You need a table in your application which maps from a consumer_key:resource_link_id (i.e. 987 : 9c45 ) to some local resource identified within your application. Until the Instructor selects a resource within your tool, it is &quot;unconfigured&quot;
  • 44. Understanding resource_link_id Week 1 Video snippet Discussion board Scene 1 Key=987 cid=a1b2 rlid=9c45 Not configured 987:9c45 = matrix_scene_01 Learner Instructor Scene 1 Not Config Learner Instructor Pick Video
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.