7 2
Read Time:4 Minute, 47 Second

This is the final blog report summarizing the work done for ๐Ÿ“š LMS Integration project during Google Summer of Code 2021 ๐Ÿ–ฅ.

Get the Code ๐ŸŽ‰

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

See in app/controllers/lti_controller.rb

@provider = IMS::LTI::ToolProvider.new(
params[:oauth_consumer_key],
@assignment.lti_shared_secret,
params
)

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.

See in app/controllers/lti_controller.rb

if !@provider.valid_request?(request)
render :launch_error, status: 401
return
end

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:

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

The tutorial documentation for the teachers has been also added to the CircuitVerseDocs check the documentation here

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:

  1. My Journey to Google Summer of Code 21 with CircuitVerse and insights on the Proposal for GSoC
  2. GSoCโ€™21 Community Bonding Period @CircuitVerse
  3. GSoCโ€™21 Week 1+2 Experience @CircuitVerse
  4. GSoCโ€™21 Week 3+4 Experience @CircuitVerse
  5. LMS Integration: Phase 1 Report (GSoC 2021- Ayan Biswas)
  6. Learning Tools Interoperability implementation in Ruby on Rails
  7. GSoCโ€™21 Week 7+8 Experience @CircuitVerse

Experience ๐Ÿ‚

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 MKSatvik 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 ๐Ÿ–ฅ

Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
100 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %
Previous post GSoC’21 Week 7+8 Experience @ CircuitVerse
Next post MITACS Globalink Research Internship: Application tips and strategies

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

Leave a Reply

Your email address will not be published. Required fields are marked *