This is the final blog report summarizing the work done for 📚 LMS Integration project during Google Summer of Code 2021 🖥.
Here is the more detailed Phase 1 Report : LMS Integration: Phase 1 Report (GSoC 2021- Ayan Biswas)
About LMS Integration Project 📚
Currently CircuitVerse have a basic LMS within CircuitVerse to manage assignments. But with the increasing demand for a full-fledged LMS features, it is required to be integrated with publicly available popular LMSs like Moodle/Canvas etc. However individual LMS integration per case to case basis is not possible, so CircuitVerse is looking for a way to integrate with multiple LMSs in a single flow. See the CircuitVerse Wiki and Project Boardfor more details.
Project Goals 🖥
The major goals of the project are listed below :
- Integrate CircuitVerse with the LMSs supported by LTI (Learning Tools Interoperability) protocol.
- Provide a simple and easy to use interface for the LMS users to integrate with CircuitVerse.
- Provide an automatic grade syncing facility between the LMS and CircuitVerse.
In the video below, I have demonstrated the integration of CircuitVerse with the Moodle LMS. Please watch the video to see the integration in action.
Technical Specifications 👨💻
Here is a diagrammatic representation of the LMS Integration Project:
The entire logic of incoming and outgoing requests are handled by the ims-lti gem, which is a Ruby gem that implements the LTI protocol.
This project has two main segments:
1. LTI Tool Provider
@provider = IMS::LTI::ToolProvider.new(
here the provider is specified with the consumer key and shared secret of the LMS and in the next step the entire LTI request is validated.
render :launch_error, status: 401
If the request is valid, then corresponding assignment is fetched from the database and proper page is rendered and delivered via iframe to the LMS.
2. Grade Syncing with the LMSs
For the grade pass back service the native LTI protocol is followed, because the ims-lti gem doesn’t support the flow as per our requirements.
So the grade pass back service is implemented as per specifications of IMS-Global, see in lti_score_submission.rb
def call response = oauth_token.post(lis_outcome_service_url, score_body.to_xml, 'Content-Type' => 'application/xml') if response.body.match(/\bsuccess\b/) puts "score submitted" return true else puts "score submission failed" return false end end
for more information about the grade pass back service please refer Learning Tools Interoperability (LTI) Implementation Guide
New Features Added to CircuitVerse 🎉
The goals are almost achieved. The following features are added to CircuitVerse:
- The CircuitVerse codebase made LTI (Learning Tools Interoperability) compatible.
- Necessary credentials can be generated for the LMSs to integrate with CircuitVerse.Updated the assignment creation UI to support the new credentials generation facility.
- The LMSs can now sync grades with the CircuitVerse platform.
- Some of the pages like (Groups/Assignments) are made compatible for iframe embed such that they can be accessed from LMS side using LTI protocol.
- Added documentation for the teachers to connect the assignments with their LMS.
- Feature flagged the LMS integration feature.
Pull Requests made 🎯
Here are the pull requests made to the CircuitVerse main repository:
- Add assignments as LTI to LMS from CircuitVerse
- UI changes done for LMS credentials generation
- Grade Submission to LMS from CircuitVerse
- Feature flag to enable/disable LTI integration
Here are the pull requests made to the CircuitVerseDocs repository:
Testing and Documentation 📒
Rspec tests has been added to check the entire LTI integration flow. Please refer to the spec/requests/lti_spec.rb
Here is a glimpse of the testing scenarios of the LMS integration project
Here is a glimpse of the documentation of the LMS integration project
Future Plans 📆
The initial integration of CircuitVerse with the LMS is ready for production use of teachers and students. The next step is to add more features to the platform.Here are some of the future plans :
- Add dynamic XML configuration support for each assignments for the LMSs to integrate with CircuitVerse.
- Automatic cron job to sync grades with the LMSs (Checking of grade submission failures if necessary).
- Integration with non-LTI LMSs (like Google Classroom).
Blog posts written 📝
I have described my entire journey through a series of blogs in my web profile.You can find the links below, please click on the links to read the posts:
- My Journey to Google Summer of Code 21 with CircuitVerse and insights on the Proposal for GSoC
- GSoC’21 Community Bonding Period @CircuitVerse
- GSoC’21 Week 1+2 Experience @CircuitVerse
- GSoC’21 Week 3+4 Experience @CircuitVerse
- LMS Integration: Phase 1 Report (GSoC 2021- Ayan Biswas)
- Learning Tools Interoperability implementation in Ruby on Rails
- GSoC’21 Week 7+8 Experience @CircuitVerse
Google Summer of Code has been a great experience for me. I have learned a lot from my project and I am very happy with the outcome.Engaging in the beautiful community like CircuitVerse is an excellent opportunity for me, I also want to thank my mentors Aboobacker MK, Satvik Ramaprasad and Shivansh Srivastava for their extreme support and continuous code reviews.
Looking forward to contribute even more to CircuitVerse and the whole Open-source community !
Thank you for reading 🎉 Happy coding 🖥