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

SchoolTool Integration

From MoodleDocs

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.


  • 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.


  • 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)

In summary, integration v1.0 will be a Moodle->SchoolTool integration. We are laying a foundation for a future bidirectional integration in which sections are created and teachers and enrollments are managed in SchoolTool, while Moodle regularly reports grades back to SchoolTool.

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


  • 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=>
      • 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

  • Some discussion is taking place here.


  1. Susie Sunglasses will return to Town High School for her senior year. During the last week of school in her junior year, she sits down in the computer lab, logs into Moodle, and enrolls herself in each of the 5 courses she wishes to take during the fall semester. Moodle sends information about these enrollments to SchoolTool, and when THS principal Patricia Participle logs in to SchoolTool in July she is able to see which courses Susie will be taking in the fall.
    Susie-and-patricia.dia source file
    Susie-and-patricia.png Patricia-checks-Susies-courses-in-SchoolTool.png
  2. Tommy Trackstar is a new student at Town High School. He consults immediately with guidance counselor Guinevere, who logs into Moodle and enrolls him in all his chosen courses. As Tommy completes his work and grades are given (some automatically and some manually by the teacher) in Moodle, each grade is also transferred to SchoolTool, which is thereby able to generate an up-to-date progress report for Tommy at any desired point in time (past or present).
    Tommy-and-guinevere1.dia source file
    Tommy-and-guinevere1.png Scenario2.png
  3. Track season comes around, and Tommy gets too busy with practice. After careful consideration of all his available options, Tommy decides to drop Mathematics of Whistling to have an extra hour to run each day. Either he or guidance counselor Guinevere unenrolls him in Moodle from Mathematics of Whistling. The unenrollment is transferred directly to SchoolTool, and Guinevere is able to enter a note and a withdrawal code to explain what happened. This withdrawal is then included on Tommy's transcript.
    Tommy-and-guinevere2.dia source file
  4. Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she's writing ("Earth Science Internalized: No Escape"). Samantha adds each of these assignments to her course in Moodle. As she adds each assignment, it is transferred to SchoolTool as a grade item for the section, and SchoolTool will be prepared to accept grade data for each student enrolled in Samantha's course.
    Samantha1.dia source file
  5. Vera Vestibule is taking Bubble Blowing 101, which has no Moodle component at all. Guidance counselor Guinevere logs into SchoolTool and 1) creates a course ("Bubble Blowing 101"), 2) creates a section of the course ("Bubble Blowing 101 taught by Chewie Chomper"), and 3) enrolls Vera in the section. Chewie uploads in SchoolTool a spreadsheet specifying the gradeable assignments in the course. As his students complete the assignments, Chewie enters their grades in SchoolTool, which is then able to include this course and these grades in student progress reports and transcripts.
    Vera.dia source file
  6. Samantha Stupenda also teaches Chemistry. All her class assignments are graded in Moodle, and those grades transfer automatically to SchoolTool. But her lab assignments are not in Moodle, and Samantha creates grade items and enters those grades manually into her Chemistry sections in SchoolTool. Halfway through the school year, Samantha decides to represent those lab assignments in Moodle, and she is careful to use *exactly* the same names that she entered into SchoolTool previously. These assignments become integrated with SchoolTool, and grades begin transferring automatically from Moodle to SchoolTool. Grades previously entered manually into SchoolTool are unaffected.
  7. Country Mouse High School has been using Moodle for the past 3 years, and many but not all of the teachers have enthusiastically created Moodle courses that they use extensively in their classrooms. However, some teachers do not have a Moodle presence at all. The principal of CMHS, Betsy Balustrade, keeps a collection of spreadsheets and other documents which she uses to plan and manage the class schedule each year. The technology director of CMHS, Cathy Colever, decides to adopt SchoolTool as the Student Information System (SIS) of CMHS. She installs SchoolTool and integrates it with their existing Moodle, and all the information in Moodle about the teachers, students, courses, enrollments, and grades is transferred to SchoolTool. Cathy provides a series of training sessions for Betsy and her administrative assistant Astra Lodge. Since not every course in the school is in Moodle, Astra enters information about some courses, teachers, and student enrollments into SchoolTool manually. After that, Betsy is able to use SchoolTool to create the schedule for each upcoming semester.
    Country-mouse.dia source file
    1. Phase 2 Part 1: Users
    2. Phase 2 Part 2: Enrollments
    3. Phase 2 Part 3: Grades

Flowcharts Because We Like Them

  • address each of the above scenarios...
  • show technical detail for transfer of user account(s) from Moodle to SchoolTool
File:SchoolTool Integration Userdata.dia
SchoolTool Integration Userdata.png
  • show technical detail for transfer of enrollment(s) from Moodle to SchoolTool
File:SchoolTool Integration Enrollment.dia
SchoolTool Integration Enrollment.png
  • show technical detail for transfer of grades(s) from Moodle to SchoolTool
File:SchoolTool Integration Grades.dia
SchoolTool Integration Grades.png

Part 1: SSO

When this is done, we should have much of the functionality that Moodle+Mahara currently offers. In particular, there should be a completely Web-based configuration to integrate Moodle with SchoolTool, and the result should be that all Moodle users suddenly have SchoolTool accounts as well.


  • Moodle MNet linkage (Matt)
    • UI: Make Moodle aware of SchoolTool as a potential SSO peer.
    • Add new auth plugin to send info to SchoolTool and to accept SSO back from SchoolTool.
    • Create spec for Brett to implement inward and outward portion of SSO in SchoolTool. Needs to answer the following questions:
      • What URL will Moodle call when attempting to initiate outbound SSO?
      • How will Moodle provide the authentication token to the remote system?
      • What URL does Moodle expect to be called with to accept incoming SSO?
      • How does Moodle expect to be given the authentication token?
  • Fully implemented MNet linkage and SSO between Moodle and SchoolTool (Brett)
    • Ability to configure one or more Moodle systems as MNet peers within SchoolTool
      • Add new peer
      • View / verify peer status
      • Delete peer
    • After configuration, ability to perform SSO login from SchoolTool to Moodle
    • After configuration, ability to accept SSO login from Moodle to SchoolTool
      • Authorization to log in will be determined by SchoolTool. To prevent unwanted student logins, the default is that imported user accounts will not have login rights unless changed manually in SchoolTool
    • Unit tests to cover each of the above features
  • SchoolTool back-end (Douglas)
    • Accept new user info from any integrated Moodle that calls.
      • Handle username collisions. (See Mahara & Moodle.)
      • Consider how user profile fields are handled.
      • Remember that the client does not want Students to be able to log in. How will these logins be prevented? (See related note above in UI section.)
    • Periodically ask for a full-sync with each integrated Moodle.

Part 2: Enrollments


Part 3: Grades


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