Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

SchoolTool Integration: Difference between revisions

From MoodleDocs
No edit summary
mNo edit summary
Line 79: Line 79:


===SchoolTool mnet Interfaces===
===SchoolTool mnet Interfaces===
* new_user(userdata)
* fetch_user(userdata)
** create new user account
** tell SchoolTool to ask Moodle for one user's data
** userdata: associative array such as:
** userdata: associative array such as:
*** username=>moquist
*** username=>moquist
Line 93: Line 93:
**** SchoolTool only cares about enough to create a login account.
**** SchoolTool only cares about enough to create a login account.
**** SchoolTool does not care about student-editable profile fields.
**** SchoolTool does not care about student-editable profile fields.
* update_user(userdata)
** update user account
** userdata: associative array (see new_user() above)
* new_section(sectiondata)
* new_section(sectiondata)
** sectiondata: associative array such as:
** sectiondata: associative array such as:
Line 102: Line 99:
*** teacheridnumber=>987234 # unique ID shared by Moodle & SchoolTool
*** teacheridnumber=>987234 # unique ID shared by Moodle & SchoolTool
*** segment=>1 # a section may have more than one semester/segment/term(?)
*** segment=>1 # a section may have more than one semester/segment/term(?)
* update_section(sectiondata)
** sectiondata: associative array (see new_section() above)
* new_enrolment(enrolmentdata)
* new_enrolment(enrolmentdata)
** create new association between user & section
** create new association between user & section
Line 110: Line 105:
*** userid=>987234 # unique ID shared by Moodle & SchoolTool
*** userid=>987234 # unique ID shared by Moodle & SchoolTool
*** role=>'teacher' # only 'student' and 'teacher' supported in integration v1.0
*** role=>'teacher' # only 'student' and 'teacher' supported in integration v1.0
* update_enrolment(enrolmentdata)
** update association between user & section
** enrolmentdata: associative array (see new_enrolment() above)
* new_assessment(assessmentdata)
* new_assessment(assessmentdata)
** create new assessment to be displayed in grade reports
** create new assessment to be displayed in grade reports
** assessmentdata: associative array such as:
** assessmentdata: associative array such as:
*** sectionid=>197423 # unique ID shared by Moodle & SchoolTool
*** sectionid=>197423 # unique ID shared by Moodle & SchoolTool
*** name=>"How to skin a logarithm"
*** name=>"How to grill a logarithmic sandwich"
*** idnumber=>73743734 # unique ID shared by Moodle & SchoolTool
*** idnumber=>73743734 # unique ID shared by Moodle & SchoolTool
*** chapternum=>3
*** chapternum=>3
Line 124: Line 116:
*** extra_credit=>false
*** extra_credit=>false
*** pointval=>68
*** pointval=>68
* update_assessment(assessmentdata)
** update assessment to be displayed in grade reports
** assessmentdata: associative array (see new_assessment() above)
* new_grade(gradedata)
* new_grade(gradedata)
** make entry in gradebook
** make entry in gradebook
Line 135: Line 124:
*** excepted=>false
*** excepted=>false
*** attempt_num=>1 # if multiple attempts are allowed
*** attempt_num=>1 # if multiple attempts are allowed
* update_grade(gradedata)
** update entry in gradebook
** gradedata: associative array (see new_grade() above)


==Phase 2==
==Phase 2==
Line 143: Line 129:
====Tasks====
====Tasks====
* Make Moodle aware of SchoolTool as a potential SSO peer
* Make Moodle aware of SchoolTool as a potential SSO peer
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool
** UI: gracefully add this to existing Mnet SSO config screen if possible
* Implement SchoolTool SSO interfaces
* Implement SchoolTool SSO interfaces
** new_user() Mnet interface
** new_user() Mnet interface
** update_user() Mnet interface
** UI: link to configured Moodle peers
** UI: link to configured Moodle peers
** UI: link back to Moodle after Moodle->SchoolTool SSO login
** UI: link back to Moodle after Moodle->SchoolTool SSO login
* Implement Moodle's cron task to ensure all users are in SchoolTool
** UI: Mnet SSO configuration
===Part 2: Enrollments===
===Part 2: Enrollments===
====Tasks====
====Tasks====

Revision as of 04:43, 30 July 2009

The SchoolTool SIS project recently released version 1.0, and lots of people could benefit from a solid integration between Moodle and SchoolTool. This page is a work-in-progress specification for the first version of this integration.

Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.

  • SchoolTool-Mahara integration should require very little extra effort when this project is complete.
  • SchoolTool+Moodle+Mahara will provide a complete, integrated school administration/learning/portfolio suite that will be easily installable and supportable by time-crunched education systems administrators.

Requirements

  • Completely web-based integration configuration (similar to Moodle-Mahara configuration)
  • SSO between SchoolTool and Moodle
  • User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool
  • Automatic grade transfer from Moodle to SchoolTool

Integration v1.0 NON-Requirements

  • Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.
    • This will be the goal of the next version of the integration.

Assumptions

  • SchoolTool is the authoritative reporting application.
  • Moodle drives all data creation and management.

Supported versions

  • SchoolTool 1.0
  • Moodle 1.9.5+

Terminology Disambiguation

  • course: A SchoolTool course.
    • SchoolTool "course" has no Moodle analogue. ("Algebra 1") can have multiple "sections" ("Algebra * 1 @ 9:15 taught by Mr. Smith").
  • section: A SchoolTool section, a Moodle course.

Background info and references

Implementation notes/ideas

  • The PHP mnet library has been ported to python.
    • SchoolTool will need to use this library.
  • Moodle will need some awareness of SchoolTool in the mnet auth plugin. Not sure yet what this entails. (i.e., Mahara shows up in the list. We need SchoolTool in there, too.)
  • Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.
  • Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.
  • integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.

Use Cases

  • integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.
    • Accounts manually created in SchoolTool may or may not be integratable with Moodle. (Matt recommends this as a feature, but it should not be required for v1.0.)
    • All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.
    • Enrollment can be student-driven.
    • An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.
  • future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle->SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.
    • Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?
  • Start fresh with both.
  • future integration version only: Drop Moodle into SchoolTool site.
    • maybe not important for v1.0, might basically come for free
  • future integration version only: Drop SchoolTool into Mahara site (and vice-versa)

User Interfaces

  • The integration configuration interfaces will be modeled on the existing interfaces for integrating Moodle and Mahara. See this document for a characterization of the type of admin user experience we want: Mahoodle.pdf
  • Moodle UIs
    • Auth plugin config
    • Enrolment plugin config
    • Grade export config
  • SchoolTool UIs
    • similar division of config screens
    • equivalent of Moodle's "Network Servers" block with links to SSO peers
    • equivalent of "You have logged in from <somelink>" to go back after SSO

Mnet

  • What, in summary, does MNET provide?
    • MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).
    • MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).
    • MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.

Moodle mnet Interfaces

  • existing: SSO IDP interfaces
    • in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider
    • returns user data sufficient to create account
  • list_user_enrolments(user)
    • returns a list of all enrolments for a given user
    • SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()

SchoolTool mnet Interfaces

  • fetch_user(userdata)
    • tell SchoolTool to ask Moodle for one user's data
    • userdata: associative array such as:
      • username=>moquist
      • firstname=>Matt
      • lastname=>Oquist
      • idnumber=>1234457 # unique ID shared by Moodle & SchoolTool
      • email=>moquist@majen.net
      • password_hash=>234lih23rlh2asldfjas
      • password_hash_algorithm=>md5
      • ircnick=>moquist
      • arbitrary_field=>arbitrary_data_string...
        • SchoolTool only cares about enough to create a login account.
        • SchoolTool does not care about student-editable profile fields.
  • new_section(sectiondata)
    • sectiondata: associative array such as:
      • name=>"Algebra 1 V1 Mrs. Smith: Cats and their Affectations"
      • idnumber=>197423 # unique ID shared by Moodle & SchoolTool
      • teacheridnumber=>987234 # unique ID shared by Moodle & SchoolTool
      • segment=>1 # a section may have more than one semester/segment/term(?)
  • new_enrolment(enrolmentdata)
    • create new association between user & section
    • enrolmentdata: associative array such as:
      • sectionid=>197423 # unique ID shared by Moodle & SchoolTool
      • userid=>987234 # unique ID shared by Moodle & SchoolTool
      • role=>'teacher' # only 'student' and 'teacher' supported in integration v1.0
  • new_assessment(assessmentdata)
    • create new assessment to be displayed in grade reports
    • assessmentdata: associative array such as:
      • sectionid=>197423 # unique ID shared by Moodle & SchoolTool
      • name=>"How to grill a logarithmic sandwich"
      • idnumber=>73743734 # unique ID shared by Moodle & SchoolTool
      • chapternum=>3
      • honors_required=>false
      • nonhonors_required=>true
      • extra_credit=>false
      • pointval=>68
  • new_grade(gradedata)
    • make entry in gradebook
    • gradedata: associative array such as:
      • assessmentid=>73743734
      • userid=>2347234 # unique shared ID of student
      • points_earned=>62
      • excepted=>false
      • attempt_num=>1 # if multiple attempts are allowed

Phase 2

Part 1: SSO

Tasks

  • Make Moodle aware of SchoolTool as a potential SSO peer
  • Implement Moodle cron job to ensure all users are always maintained in SchoolTool
    • UI: gracefully add this to existing Mnet SSO config screen if possible
  • Implement SchoolTool SSO interfaces
    • new_user() Mnet interface
    • update_user() Mnet interface
    • UI: link to configured Moodle peers
    • UI: link back to Moodle after Moodle->SchoolTool SSO login
    • UI: Mnet SSO configuration

Part 2: Enrollments

Tasks

Part 3: Grades

Tasks

Misc. TODO

  • Matt/Tom: Find out what reports ECHS will want from SchoolTool
  • SchoolTool TODO list
    • Create an "ongoing section" container that will contain (otherwise normal) sections that do not fit into the year/term schema.
      • integration v1.0 will place all Moodle-driven sections in the "ongoing" container
    • Add enumerated status field to enrollment (e.g., Active, Withdrawn No Grade, Withdrawn Failing, Passed) This will not initially include a workflow, but simply a current state and a history of states.
    • Add support for section history
      • grading history
      • enrollment history (including all enrollment status changes)
      • teacher history