<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Moquist</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Moquist"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/Special:Contributions/Moquist"/>
	<updated>2026-04-21T20:55:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_talk:Helen_Foster&amp;diff=23169</id>
		<title>User talk:Helen Foster</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_talk:Helen_Foster&amp;diff=23169"/>
		<updated>2010-01-05T05:25:04Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Deleting some attached files in JIRA ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
I made a bit of a mess at [http://tracker.moodle.org/browse/MDL-21110 http://tracker.moodle.org/browse/MDL-21110]. Would it be possible to delete all the attached files there so Penny or I can upload the current one and let Jira handle the versioning more sanely?&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
Matt&lt;br /&gt;
&lt;br /&gt;
== Creating new FAQ pages ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
I have successfully created a stub for a XML FAQ page (https://docs.moodle.org/en/XML_FAQ) but how do I get it promoted on https://docs.moodle.org/en/Category:FAQ ?&lt;br /&gt;
&lt;br /&gt;
I also would like to create an Import/Export FAQ for collecting all the information regarding Moodle import and export which is scattered in different forums.&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
[[User:Frank Ralf|Frank Ralf]]&lt;br /&gt;
&lt;br /&gt;
:Hi Helen will have to answer the Import/Export question.  I jumped in and added &amp;lt;nowiki&amp;gt;[[Category:FAQ]]&amp;lt;/nowiki&amp;gt; to the bottom of the page, which anyone can do. And took your hint and added a &amp;lt;nowiki&amp;gt;{{stub}}&amp;lt;/nowiki&amp;gt; template at the top.  Thanks for the XML work. Best --[[User:chris collman|chris collman]] 14:16, 3 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
::Hi Frank, thanks for your offer - an [[Import and export FAQ]] page would be great, thanks! --[[User:Helen Foster|Helen Foster]] 04:12, 4 December 2008 (CST)&lt;br /&gt;
:::Thanks to both of you! Helen, how did you get that nice Contents menu on your Import and export FAQ page? I couldn&#039;t figure that out from the source. --[[User:Frank Ralf|Frank Ralf]] 05:30, 4 December 2008 (CST) Problem solved, just found the documentation ;-) --[[User:Frank Ralf|Frank Ralf]] 05:43, 4 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
== Suggestion that is probably total overkill ==&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
# Create a new FAQ namespace.&lt;br /&gt;
# In this namespace, create one page for each frequent question, where the contents of the page is the answer.&lt;br /&gt;
# Use our new knowledge of transclusions to build the FAQ lists by just pulling in pages from the FAQ namespace.&lt;br /&gt;
&lt;br /&gt;
The benefits of doing this are&lt;br /&gt;
* The same FAQ can appear in more than one list without copying-and-pasting.&lt;br /&gt;
* Each question gets a unique URL that so in the forums, we can point people to a page that just answers their specific question.&lt;br /&gt;
&lt;br /&gt;
Disadvantages&lt;br /&gt;
* Editing FAQ lists becomes incomprehensible to anyone who is not a MediaWiki geek.&lt;br /&gt;
&lt;br /&gt;
If we went this way, I would like to use B to build a new FAQ page: &amp;quot;Troubleshooting FAQ&amp;quot;. Might be a good idea anyway.&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
I hasten to say that I am not recommending this approach. The disadvantages could easily outweigh the advantages. I am simply pointing out a technical possibility that may be worth considering either now, or in the future.&amp;lt;onlyinclude&amp;gt;--[[User:Tim Hunt|Tim Hunt]] 07:11, 4 December 2008 (CST)&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Just added [[MoodleDocs:Transclusion]].  Good thing I had my first cup of coffee, Tim&#039;s thoughtful post got me rubbing the sleep out of my eyes.  I wonder if I can get the partial transclusion of this section to work in Sandbox then in [[MoodleDocs_talk:Transclusion]]. Definitely a tool to be used with care. But Wowie Zowie ! --[[User:chris collman|chris collman]] 06:49, 5 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
:: Hello Tim, I think your suggested solution would indeed be overkill and would make maintaining FAQ too difficult. I see FAQ as an intermediary step between the unorganised kind of &amp;quot;documentation&amp;quot; which is provided in the forums towards &amp;quot;real&amp;quot; documentation. Therefore the ease of editing is crucial in my opinion. What about using Moodle&#039;s &#039;&#039;&#039;autolinking mechanism&#039;&#039;&#039; to automatically link to FAQ pages, e.g. if there is a mention of grades in the forums that would create an automatic link to Grades FAQ. I am quite new to Moodle, but couldn&#039;t that be done with setting up a kind of FAQ Glossary? --[[User:Frank Ralf|Frank Ralf]] 02:44, 16 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
::: Hi Tim, thanks for your suggestion, though I think it&#039;s overkill too!  The current FAQ pages have nice short titles which are easy to find and to include in forum posts. Having a page for each FAQ would result in really long URLs. Also, I think that when we point people to an FAQ page, and they have to look through it to find the answer to their question, they may well find answers to other questions they have. As other people have suggested, I think FAQ pages work well as start pages with links to lots of other pages i.e. they&#039;re kept fairly short, for example [[Contributed code FAQ]]. --[[User:Helen Foster|Helen Foster]] 04:49, 18 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
::: Frank, regarding autolinking to FAQ pages, have you come across the Moodle Docs filter on moodle.org? Please see the [[Moodle.org FAQ]] for more details. --[[User:Helen Foster|Helen Foster]] 04:49, 18 December 2008 (CST)&lt;br /&gt;
::::Helen, thanks for the hint. But isn&#039;t that the usual &#039;&#039;manual&#039;&#039; way of wiki linking? But on second thought that might really be the best way of linking to FAQ pages as it keeps getting the forums cluttered with too many (automatic) links. In fact, it just might be a matter of good practice to put advice of lasting value from the forums into a more structured form of documentation and nothing which could or should be done in an automatic and technical way... --[[User:Frank Ralf|Frank Ralf]] 05:11, 19 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
== Security Notification registration ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
It was suggested to me through the #moodle channel on freenode that I raise this concern with you.&lt;br /&gt;
&lt;br /&gt;
I&#039;m developing a moodle installation behind a firewall on a non-public URL and am interested in subscribing to security updates (prompted to check this after seeing a moodle vulnerability mentioned on Bugtraq). I had previously attempted to subscribe by registering our installation through the admin pages, however that registration was rejected as the site was located behind a firewall and not accessible.&lt;br /&gt;
&lt;br /&gt;
Due to that rejection, I wasn&#039;t subscribed to security updates.&lt;br /&gt;
&lt;br /&gt;
I now find myself in the unfortunate position where I cannot subscribe to security updates without having a public facing site (which I can&#039;t reasonably know is secure as I&#039;m not receiving security updates through your mailing list).&lt;br /&gt;
&lt;br /&gt;
The burden for those of us who have an internal site they&#039;re developing (or perhaps is in production) is that we must now create a public facing site to register for the sole purpose of receiving security updates. If the thought is that only parties interested in maintaining a moodle site should have access to those messages, perhaps a different measure could be put into place (a code that appears once moodle is installed, for example).&lt;br /&gt;
&lt;br /&gt;
I&#039;ve tried subscribing through sympa@lists.moodle.org, however that method does not work either.&lt;br /&gt;
&lt;br /&gt;
Could you please provide a process for folks like me to get on the security updates list without having to install moodle on a public web server first?&lt;br /&gt;
&lt;br /&gt;
Thanks!&lt;br /&gt;
&lt;br /&gt;
- P.&lt;br /&gt;
&lt;br /&gt;
:Hi Paul, how about subscribing to the [http://moodle.org/mod/forum/view.php?f=996 security announcements forum], where all important security issues are published. --[[User:Helen Foster|Helen Foster]] 04:34, 18 December 2008 (CST)&lt;br /&gt;
== Unseen (not hidden) activities==&lt;br /&gt;
Hi Helen (This is partly my attempt at practising here by the way!) I&#039;ve posted several times recently about the concept of &#039;unseen&#039; topics with resources that can be linked to on the course page where hidden ones wouldn&#039;t work. is there documentation about that somewhere here ? If so, where? Then I can point Moodlers to it next time.If not, shall I write it? Thanks - [[User: Mary Cooch|Mary Cooch]]&lt;br /&gt;
&lt;br /&gt;
:Hi Mary, I&#039;ve just had a quick look and can&#039;t find any documentation about unseen topics, so it would be helpful if you could write some, perhaps here: [[Course homepage]]. Thanks in advance :-) --[[User:Helen Foster|Helen Foster]] 17:20, 19 December 2008 (CST)&lt;br /&gt;
:Helen - please can you check what I have done as you know I&#039;m still a novice and don&#039;t want to put the wrong thing in the wrong place! Also, if you look on my usertalk Chris Colman said it might be useful on the html linking page? [[User: Mary Cooch|Mary Cooch]]&lt;br /&gt;
&lt;br /&gt;
== Downloading Moodle Core ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
I came across Moodle just this morning, and read a little about its design, and loved it, it is perfect for the project Im starting.&lt;br /&gt;
&lt;br /&gt;
Ive gone to the download page, to download the Moodle core zip package, but when I click on the link to download I get the following message;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;A server error that affects your login session was detected. Please login again or restart your browser.&#039;&lt;br /&gt;
&lt;br /&gt;
( Continue )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I had a look around the FAQ pages, to see if there was anything on there, but it only mentions about people who already have moodle and are having this difficulty,&lt;br /&gt;
&lt;br /&gt;
Please could you send me an alternative link, &lt;br /&gt;
&lt;br /&gt;
Kind Regards&lt;br /&gt;
Andrew&lt;br /&gt;
:Hi Andrew, I left a comment on your [[User_talk:Andrew_Abel|user comment page]], just in case you were in a hurry to play with Moodle. --[[User:chris collman|chris collman]] 07:40, 1 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
::Hi Andrew, I hope you&#039;ve been successful in downloading Moodle by now. Chris, thanks for your helpful comments :-) --[[User:Helen Foster|Helen Foster]] 01:21, 2 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;experimental:&amp;quot; prefix ==&lt;br /&gt;
&lt;br /&gt;
[[User:Marc Grober|Marc Grober]] 12:00, 12 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
We started using experimental: as a prefix because there was some confusion about the use of Development: as a prefix.....&lt;br /&gt;
&lt;br /&gt;
In the Moodle docs, Development: appears to cover Moodle developer documentation, not docs under development,  so we wanted to use a prefix that connote that the docs were, as we suggest, &amp;quot;experimental&amp;quot; (i.e. not ready for prime time).   I had not come across [[Experimental|Experimental]] as the search is a bit temperamental and searching for the root, experiment, produced no result.....&lt;br /&gt;
&lt;br /&gt;
Perhaps we need a different topic name?&lt;br /&gt;
&lt;br /&gt;
I have encouraged AT to ask you to move these pages out of the experimental: topic but I think she feels they are not quite ready and I want to respect hre wishes on this.&lt;br /&gt;
&lt;br /&gt;
We also have some experimental pages under development with respect to gradebook &amp;quot;cases&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
I would encourage you to discuss the progress on all these pages with AT.&lt;br /&gt;
&lt;br /&gt;
Thanks&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
:Marc, thanks for your comments. The use of experimental: as a prefix is fine by me. Alternatively you could use a [[MoodleDocs:Templates|Moodle Docs template]] to add a message saying that the page is experimental. --[[User:Helen Foster|Helen Foster]] 02:41, 13 January 2009 (CST)&lt;br /&gt;
::Marc and Helen, something new to me.  I found 7 pages when I searched on &amp;quot;experimental:&amp;quot; and found 7 Article title matches.  6 started with &amp;quot;experimental:&amp;quot; and of course &amp;quot;Experimental&amp;quot;. Wondering if an alternative draft to Main Page should be done that way with the Experimental template.  :)--[[User:chris collman|chris collman]] 06:00, 13 January 2009 (CST)&lt;br /&gt;
:::Helen, thanks for moving some of the experimental: pages.  The page here, however, has yet to be moved: [https://docs.moodle.org/en/experimental:Getting_Help_Installing_and_Managing_Moodle]. Vis-a-vis topics/categories, I think it makes sense to have a category that is not searched by default so that users do not find materials that is not ready for prime time.  By the same token,  I think, as I mentioned above,  that Development: is problematic because it confuses as far as whether it is a topic for Developers or addresses material under development, which are really two different areas.  Likewise, as long as there is an Experimental page the use of experimental: could cause confusion.    I would argue for three distinct categories.... [[User:Marc Grober|Marc Grober]] 12:16, 24 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
::As I understood your (Helen&#039;s) comment (posted I don&#039;t recall where) you (Helen) were I think suggesting that what I was really suggesting was a new name space such that folks could develop documents that were not included in a default search.....  which I think is exactly what I was looking for....  So the question becomes can and should we do such a thing..... --[[User:Marc Grober|Marc Grober]] 23:44, 9 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Marc, I guess you&#039;re referring to my forum post [http://moodle.org/mod/forum/discuss.php?d=115736#p509590 Re: Not including pages in the Moodle Docs search]. How about using a Moodle Docs template for now to indicate docs under development and add them to an appropriate category, then when there are sufficient pages to warrant it, we can create a new namespace and move all the pages into it. --[[User:Helen Foster|Helen Foster]] 11:46, 10 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Talk:Helen&#039;s page is over 32k==&lt;br /&gt;
FYI: I got that warning.  Maybe a subpage for the older stuff and a link, so we don&#039;t loose some stuff. Of course alternatively, if I deleted all my comments/questions, that would shorted it a lot :)  --[[User:chris collman|chris collman]] 06:04, 13 January 2009 (CST)&lt;br /&gt;
::Seriously, I would be happy to edit my posts here down to a nub or nothingness.  I think some of the language requests for help could be put in one heading and shortened, without losing anything.    --[[User:chris collman|chris collman]] 06:13, 13 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
:Chris, thanks for creating [[User talk:Helen Foster/1]]. I think it&#039;s a good solution :-) --[[User:Helen Foster|Helen Foster]] 02:51, 14 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[User talk:Helen Foster/1]] for older comments&lt;br /&gt;
&lt;br /&gt;
== Registered Users Bug with Mediawiki ==&lt;br /&gt;
&lt;br /&gt;
Hi, [[User_talk:David_Scotson#Moodle_Docs_stats|Way back in 2006 you mentioned]] a work-around for a bug resulting in registered users stats on [[Special:Statistics]] not updating properly. I think I am encountering this same bug on my internal wiki now. I know that was a long time ago, but do you remember what you did to fix it/what the work-around mentioned was?&lt;br /&gt;
Thanks,&lt;br /&gt;
--[[User:Adrian Archer|Adrian Archer]] 11:02, 4 March 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Adrian, here are Eloy&#039;s workarounds (easy to do with phpMyAdmin):&lt;br /&gt;
&lt;br /&gt;
:# To refresh the count of pages, if it&#039;s not working: table: site_stats, field: ss_total_pages, setting it to -1 should force recalculation of pages&lt;br /&gt;
:# To refresh the count of registered users, delete the contents of the &amp;quot;cached statistics&amp;quot; table&lt;br /&gt;
&lt;br /&gt;
:Thanks to Eloy for recalling them :-) I hope you are able to upgrade to a newer MediaWiki version soon. --[[User:Helen Foster|Helen Foster]] 09:01, 5 March 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
::Thanks so much for the quick response, that sounds like it should work. I&#039;m actually using Version 1.13.3, so I guess the bug still exists. --[[User:Adrian Archer|Adrian Archer]] 09:17, 5 March 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
:::Hmm, Moodle Docs is actually using version 1.11.2, though we&#039;re hoping to upgrade very soon (MDLSITE-657). --[[User:Helen Foster|Helen Foster]] 09:35, 5 March 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
== Function if in grade calculations? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hi Helen&lt;br /&gt;
&lt;br /&gt;
Thanks for your jobs.&lt;br /&gt;
&lt;br /&gt;
Sorry for my lousy english.&lt;br /&gt;
&lt;br /&gt;
I am trying to use the &amp;quot;if&amp;quot; function in &amp;quot;Grade calculations&amp;quot; in a similar way as is done in &amp;quot;opencalc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do you know if this is possible?&lt;br /&gt;
&lt;br /&gt;
How to introduce a note of recovery, only for a few students, without changing the original calification?&lt;br /&gt;
&lt;br /&gt;
My email is trujillo@unex.es&lt;br /&gt;
&lt;br /&gt;
Thanks&lt;br /&gt;
&lt;br /&gt;
== Using Moodle for Teachers ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
I teach math at Woodland Middle School  in Woodland, WA. I&#039;m also just beginning work with the Ubuntu Learning Project (name?). Is your book (Using Moodle - Teaching with the Popular Open Source Course Management System) available for download on Moodle Docs free to teachers? If so, is there some type of creative commons license? Or should we just link to Moodle Docs? I found your book extremely useful when I taught a 3-day Moodle Bootcamp to teachers this summer.&lt;br /&gt;
&lt;br /&gt;
Thanks, Mark Knudson&lt;br /&gt;
&lt;br /&gt;
:Hi Mark, glad to hear you found my book useful :-) It&#039;s available for download under the Creative Commons Attribution-Noncommercial-Share Alike licence here: [[Using Moodle book]]. --[[User:Helen Foster|Helen Foster]] 19:11, 21 September 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== PHP Settings by Moodle version ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
I&#039;m new to this community (and to Moodle) and am not sure how I should request an update to the documentation relating to a Moodle PHP extension requirement - specifically zlib.&lt;br /&gt;
I noticed that this page:&lt;br /&gt;
https://docs.moodle.org/no/Installering_av_Moodle has a section stating that &amp;quot;The zlib extension is required for zip/unzip functionality.&amp;quot; under the PHP Extensions and Libraries, but it doesn&#039;t exist here:&lt;br /&gt;
https://docs.moodle.org/en/PHP_settings_by_Moodle_version&lt;br /&gt;
&lt;br /&gt;
The PHP_settings_by_Moodle_version is a Stub and is waiting for review - I was thinking about updating it with the text from the https://docs.moodle.org/no/Installering_av_Moodle page.&lt;br /&gt;
&lt;br /&gt;
Looking for a little direction.&lt;br /&gt;
&lt;br /&gt;
Thanks!&lt;br /&gt;
Andy&lt;br /&gt;
&lt;br /&gt;
:Hi Andy,&lt;br /&gt;
&lt;br /&gt;
:Thanks for your kind offer to update the documentation [[PHP settings by Moodle version]]. Please feel free to go ahead and do so :-) (I asked in our developer chat and was informed that zlib is required for versions of Moodle up to 1.9 and Moodle 2.0 onwards will come with native PHP zip support so it needs the &amp;quot;zip&amp;quot; extension instead.)&lt;br /&gt;
&lt;br /&gt;
:For future reference, you&#039;re always welcome to edit pages in Moodle Docs and help improve our documentation. If you&#039;re not quite sure of something, you can leave a note in the page comments. Thanks again! --[[User:Helen Foster|Helen Foster]] 11:45, 20 November 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Czech_Hackfest_2009&amp;diff=15513</id>
		<title>Czech Hackfest 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Czech_Hackfest_2009&amp;diff=15513"/>
		<updated>2009-09-30T05:26:47Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Attendees and arrivals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Work in progress here - do not rely on this yet.&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
; Saturday 5th December 2009 :&lt;br /&gt;
&lt;br /&gt;
* Meet each others in Prague (some arrive, some may be there already)&lt;br /&gt;
* Settle down in a hotel - probably [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* Explore Prague (Castle etc)&lt;br /&gt;
* Social beer event&lt;br /&gt;
&lt;br /&gt;
; Sunday 6th December 2009 :&lt;br /&gt;
* Leaving Prague together by a rented micro-bus (about 120 mins)&lt;br /&gt;
* Lunch at [http://www.jested.cz Jested, Liberec].&lt;br /&gt;
* Moving to the mountains (by bus or car or foot ;-), according to snow conditions)&lt;br /&gt;
* Accommodating at [http://www.dudovi.cz/jizerka/eng/ubytovani.htm Jizerka]&lt;br /&gt;
&lt;br /&gt;
; Monday 7th December 2009&lt;br /&gt;
* Moodle 2.0 release planning&lt;br /&gt;
* Triage of remaining bugs (assign developers, priorities)&lt;br /&gt;
* Bug sprint&lt;br /&gt;
&lt;br /&gt;
; Tuesday 8th December 2009&lt;br /&gt;
* Moodle 2.x planning&lt;br /&gt;
* Creating detailed roadmap for all modules based on tracker&lt;br /&gt;
&lt;br /&gt;
; Wednesday 9th December 2009&lt;br /&gt;
* Moodle 3.0 brainstorming and planning&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
&lt;br /&gt;
; Thursday 10th December 2009&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
* Skiiing?&lt;br /&gt;
&lt;br /&gt;
; Friday 11th December 2009 &lt;br /&gt;
* moving back to Prague on Friday&lt;br /&gt;
* more Prague sightseeing&lt;br /&gt;
* Settle down in a hotel - probably again [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* official end of hackfest&lt;br /&gt;
&lt;br /&gt;
== Attendees and arrivals ==&lt;br /&gt;
&lt;br /&gt;
Maximum of 16 places, so far we have (in chaotic order):&lt;br /&gt;
&lt;br /&gt;
# Martin Dougiamas&lt;br /&gt;
# Eloy Lafuente&lt;br /&gt;
# Petr Skoda&lt;br /&gt;
# Tim Hunt&lt;br /&gt;
# Helen Foster&lt;br /&gt;
# Penny Leach&lt;br /&gt;
# Dan Poltawski&lt;br /&gt;
# David Mudrak&lt;br /&gt;
# Shane Elliott&lt;br /&gt;
# Chris Roy&lt;br /&gt;
# Brian King&lt;br /&gt;
# Daniele Cordella&lt;br /&gt;
# Mike Churchward&lt;br /&gt;
# Hubert Chathi&lt;br /&gt;
# Matt Oquist&lt;br /&gt;
# ?&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
I wanted to add some ideas of things we could talk about, and for some reason I did not want to use the talk page so I am adding them here. These are just ideas. Take them or leave them.&lt;br /&gt;
&lt;br /&gt;
===What is the balance between Yack and Hack?===&lt;br /&gt;
&lt;br /&gt;
That is, how much time will we be talking, and how much time writing code on our laptops?--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===Planning specific bits of the post 2.0-roadmap===&lt;br /&gt;
&lt;br /&gt;
The main thing is that we keep talking about how recent released, especially 2.0, have had a lot of under the hood changes and that we really need to do some work on the actual activities themselves. I was wonder if if we should have a section of time allocated to what we consider the most important modules (or other things like the gradebook/filepicker/backup).&lt;br /&gt;
&lt;br /&gt;
In order to have meaningful discussion, I suggest that in advanced of the hackfest, each participant is assigned (or volunteers for) one of those bit. They are then expected to read every open bug and feature request for that component, and spend some time following the associated forum, and come up with a summary of what the most pressing issues there seem to be. Then at the hackfest they would lead that discussion section, kicking off by explaining to the rest of us what they learned during their research.&lt;br /&gt;
&lt;br /&gt;
Naturally, if we do this, I volunteer for the quiz and question bank. Of course, I already have a pretty good idea what is going on there. I guess this would probably be more work if people had to look at an area they had not thought about before, so that is not fair.--[[User:Tim Hunt|Tim Hunt]] ~10:00, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1. Naturally, I volunteer for Workshop, given that the Tim&#039;s last sentence applies for my case, too. --[[User:David Mudrak|David Mudrak]] 10:51, 7 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===How about a work-on-2.0 day===&lt;br /&gt;
&lt;br /&gt;
The aim would be that by the end of the day, we have fixed as many of the Fix-for 2.0 bugs as possible, and also have reviewed all the ones that we cannot fix immediately, so we end up with a really good, triaged bug-list of what is left to be done. By the end of the day, all the bugs should be assigned to someone who feels confident they will be able to fix it.--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC) and Dan Poltawski. We discussed this at the GBBF last night.&lt;br /&gt;
&lt;br /&gt;
===&#039;Prepared&#039; Bug Squashing===&lt;br /&gt;
&lt;br /&gt;
Basically the same as the above suggestion, but I want to emphasise some preperation beforehand so that we can get to the real unsolved issues which would benefit with us all being in the same room and discussing solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With each bug we triage before the hackfest, we should try to:&lt;br /&gt;
* a) Link or close issues which have been fixed, or will be fixed by 2.0 (etc)&lt;br /&gt;
* b) Document unsolved issues which we need discussion or a plan to be fixed (&#039;&#039;&#039;this is most important for the hackfest itself&#039;&#039;&#039;)&lt;br /&gt;
* c) Document bugs which could be fixed with a little time (at the hackfest or later)&lt;br /&gt;
* d) Document bugs to pester someone else about ;-)&lt;br /&gt;
&lt;br /&gt;
Depending on how much time you can devote, I suggest trying these triaging views in order:&lt;br /&gt;
* 1) Reviewing all open bugs reported by yourself, starting oldest first.&lt;br /&gt;
* 2) Reviewing your assigned issues, starting with oldest first &lt;br /&gt;
* 3) Reviewing &#039;nobody&#039; or &#039;imported&#039; bugs starting with the oldest first.&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
There is a lot of old cruft in the tracker. Many of the issues have or will be fixed soon, so we could do a lot by just looking at our own issues and setting the status/links appropiately. For all the others, some are just without a decided solution - these would be great ones to at least think about discussing. --[[User:Dan Poltawski|Dan Poltawski]] 17:28, 15 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Czech_Hackfest_2009&amp;diff=15508</id>
		<title>Czech Hackfest 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Czech_Hackfest_2009&amp;diff=15508"/>
		<updated>2009-09-15T18:06:49Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Attendees and arrivals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Work in progress here - do not rely on this yet.&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
; Saturday 5th December 2009 :&lt;br /&gt;
&lt;br /&gt;
* Meet each others in Prague (some arrive, some may be there already)&lt;br /&gt;
* Settle down in a hotel - probably [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* Explore Prague (Castle etc)&lt;br /&gt;
* Social beer event&lt;br /&gt;
&lt;br /&gt;
; Sunday 6th December 2009 :&lt;br /&gt;
* Leaving Prague together by a rented micro-bus (about 120 mins)&lt;br /&gt;
* Lunch at [http://www.jested.cz Jested, Liberec].&lt;br /&gt;
* Moving to the mountains (by bus or car or foot ;-), according to snow conditions)&lt;br /&gt;
* Accommodating at [http://www.dudovi.cz/jizerka/eng/ubytovani.htm Jizerka]&lt;br /&gt;
&lt;br /&gt;
; Monday 7th December 2009&lt;br /&gt;
* Moodle 2.0 release planning&lt;br /&gt;
* Triage of remaining bugs (assign developers, priorities)&lt;br /&gt;
* Bug sprint&lt;br /&gt;
&lt;br /&gt;
; Tuesday 8th December 2009&lt;br /&gt;
* Moodle 2.x planning&lt;br /&gt;
* Creating detailed roadmap for all modules based on tracker&lt;br /&gt;
&lt;br /&gt;
; Wednesday 9th December 2009&lt;br /&gt;
* Moodle 3.0 brainstorming and planning&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
&lt;br /&gt;
; Thursday 10th December 2009&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
* Skiiing?&lt;br /&gt;
&lt;br /&gt;
; Friday 11th December 2009 &lt;br /&gt;
* moving back to Prague on Friday&lt;br /&gt;
* more Prague sightseeing&lt;br /&gt;
* Settle down in a hotel - probably again [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* official end of hackfest&lt;br /&gt;
&lt;br /&gt;
== Attendees and arrivals ==&lt;br /&gt;
&lt;br /&gt;
Maximum of 16 places, so far we have (in chaotic order):&lt;br /&gt;
&lt;br /&gt;
# Martin Dougiamas&lt;br /&gt;
# Eloy Lafuente&lt;br /&gt;
# Petr Skoda&lt;br /&gt;
# Tim Hunt&lt;br /&gt;
# Helen Foster&lt;br /&gt;
# Penny Leach&lt;br /&gt;
# Dan Poltawski&lt;br /&gt;
# David Mudrak&lt;br /&gt;
# Shane Elliott&lt;br /&gt;
# Chris Roy&lt;br /&gt;
# Brian King (TBC)&lt;br /&gt;
# Daniele Cordella (TBC)&lt;br /&gt;
# Mike Churchward (TBC)&lt;br /&gt;
# Hubert Chathi or Justin Filip  (TBC)&lt;br /&gt;
# Iñaki Arenaza (TBC)&lt;br /&gt;
# Matt Oquist (TBC)&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
I wanted to add some ideas of things we could talk about, and for some reason I did not want to use the talk page so I am adding them here. These are just ideas. Take them or leave them.&lt;br /&gt;
&lt;br /&gt;
===What is the balance between Yack and Hack?===&lt;br /&gt;
&lt;br /&gt;
That is, how much time will we be talking, and how much time writing code on our laptops?--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===Planning specific bits of the post 2.0-roadmap===&lt;br /&gt;
&lt;br /&gt;
The main thing is that we keep talking about how recent released, especially 2.0, have had a lot of under the hood changes and that we really need to do some work on the actual activities themselves. I was wonder if if we should have a section of time allocated to what we consider the most important modules (or other things like the gradebook/filepicker/backup).&lt;br /&gt;
&lt;br /&gt;
In order to have meaningful discussion, I suggest that in advanced of the hackfest, each participant is assigned (or volunteers for) one of those bit. They are then expected to read every open bug and feature request for that component, and spend some time following the associated forum, and come up with a summary of what the most pressing issues there seem to be. Then at the hackfest they would lead that discussion section, kicking off by explaining to the rest of us what they learned during their research.&lt;br /&gt;
&lt;br /&gt;
Naturally, if we do this, I volunteer for the quiz and question bank. Of course, I already have a pretty good idea what is going on there. I guess this would probably be more work if people had to look at an area they had not thought about before, so that is not fair.--[[User:Tim Hunt|Tim Hunt]] ~10:00, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1. Naturally, I volunteer for Workshop, given that the Tim&#039;s last sentence applies for my case, too. --[[User:David Mudrak|David Mudrak]] 10:51, 7 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===How about a work-on-2.0 day===&lt;br /&gt;
&lt;br /&gt;
The aim would be that by the end of the day, we have fixed as many of the Fix-for 2.0 bugs as possible, and also have reviewed all the ones that we cannot fix immediately, so we end up with a really good, triaged bug-list of what is left to be done. By the end of the day, all the bugs should be assigned to someone who feels confident they will be able to fix it.--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC) and Dan Poltawski. We discussed this at the GBBF last night.&lt;br /&gt;
&lt;br /&gt;
===&#039;Prepared&#039; Bug Squashing===&lt;br /&gt;
&lt;br /&gt;
Basically the same as the above suggestion, but I want to emphasise some preperation beforehand so that we can get to the real unsolved issues which would benefit with us all being in the same room and discussing solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With each bug we triage before the hackfest, we should try to:&lt;br /&gt;
* a) Link or close issues which have been fixed, or will be fixed by 2.0 (etc)&lt;br /&gt;
* b) Document unsolved issues which we need discussion or a plan to be fixed (&#039;&#039;&#039;this is most important for the hackfest itself&#039;&#039;&#039;)&lt;br /&gt;
* c) Document bugs which could be fixed with a little time (at the hackfest or later)&lt;br /&gt;
* d) Document bugs to pester someone else about ;-)&lt;br /&gt;
&lt;br /&gt;
Depending on how much time you can devote, I suggest trying these triaging views in order:&lt;br /&gt;
* 1) Reviewing all open bugs reported by yourself, starting oldest first.&lt;br /&gt;
* 2) Reviewing your assigned issues, starting with oldest first &lt;br /&gt;
* 3) Reviewing &#039;nobody&#039; or &#039;imported&#039; bugs starting with the oldest first.&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
There is a lot of old cruft in the tracker. Many of the issues have or will be fixed soon, so we could do a lot by just looking at our own issues and setting the status/links appropiately. For all the others, some are just without a decided solution - these would be great ones to at least think about discussing. --[[User:Dan Poltawski|Dan Poltawski]] 17:28, 15 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14204</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14204"/>
		<updated>2009-09-12T21:12:27Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]] [[Image:Patricia-checks-Susies-courses-in-SchoolTool.png|100px]] &lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]] [[Image:Scenario2.png|200px]] &lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Country-mouse.dia Country-mouse.dia source file]&lt;br /&gt;
## Phase 2 Part 1: Users&lt;br /&gt;
##:[[Image:Country-mouse1.png|300px]]&lt;br /&gt;
## Phase 2 Part 2: Enrollments&lt;br /&gt;
##:[[Image:Country-mouse2.png|300px]]&lt;br /&gt;
## Phase 2 Part 3: Grades&lt;br /&gt;
##:[[Image:Country-mouse3.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Userdata.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Enrollment.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Grades.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
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.&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Moodle MNet linkage (Matt)&lt;br /&gt;
** UI: Make Moodle aware of SchoolTool as a potential SSO peer.&lt;br /&gt;
** Add new auth plugin to send info to SchoolTool and to accept SSO back from SchoolTool.&lt;br /&gt;
** Create spec for Brett to implement inward and outward portion of SSO in SchoolTool. Needs to answer the following questions:&lt;br /&gt;
*** What URL will Moodle call when attempting to initiate outbound SSO?&lt;br /&gt;
*** How will Moodle provide the authentication token to the remote system?&lt;br /&gt;
*** What URL does Moodle expect to be called with to accept incoming SSO?&lt;br /&gt;
*** How does Moodle expect to be given the authentication token?&lt;br /&gt;
* Fully implemented MNet linkage and SSO between Moodle and SchoolTool (Brett)&lt;br /&gt;
** Ability to configure one or more Moodle systems as MNet peers within SchoolTool&lt;br /&gt;
*** Add new peer&lt;br /&gt;
*** View / verify peer status&lt;br /&gt;
*** Delete peer&lt;br /&gt;
** After configuration, ability to perform SSO login from SchoolTool to Moodle&lt;br /&gt;
** After configuration, ability to accept SSO login from Moodle to SchoolTool&lt;br /&gt;
*** 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&lt;br /&gt;
** Unit tests to cover each of the above features&lt;br /&gt;
* SchoolTool back-end (Douglas)&lt;br /&gt;
** Accept new user info from any integrated Moodle that calls.&lt;br /&gt;
*** Handle username collisions. (See Mahara &amp;amp; Moodle.)&lt;br /&gt;
*** Consider how user profile fields are handled.&lt;br /&gt;
*** 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.)&lt;br /&gt;
** Periodically ask for a full-sync with each integrated Moodle.&lt;br /&gt;
&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14203</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14203"/>
		<updated>2009-09-04T16:34:09Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]] [[Image:Patricia-checks-Susies-courses-in-SchoolTool.png|100px]] &lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]] [[Image:Scenario2.png|200px]] &lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Country-mouse.dia Country-mouse.dia source file]&lt;br /&gt;
## Phase 2 Part 1: Users&lt;br /&gt;
##:[[Image:Country-mouse1.png|300px]]&lt;br /&gt;
## Phase 2 Part 2: Enrollments&lt;br /&gt;
##:[[Image:Country-mouse2.png|300px]]&lt;br /&gt;
## Phase 2 Part 3: Grades&lt;br /&gt;
##:[[Image:Country-mouse3.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Userdata.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Enrollment.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Grades.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
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.&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Moodle (Matt)&lt;br /&gt;
** UI: Make Moodle aware of SchoolTool as a potential SSO peer.&lt;br /&gt;
** Add new auth plugin to send info to SchoolTool and to accept SSO back from SchoolTool.&lt;br /&gt;
** Create spec for Brett to implement inward and outward portion of SSO in SchoolTool. Needs to answer the following questions:&lt;br /&gt;
*** What URL will Moodle call when attempting to initiate outbound SSO?&lt;br /&gt;
*** How will Moodle provide the authentication token to the remote system?&lt;br /&gt;
*** What URL does Moodle expect to be called with to accept incoming SSO?&lt;br /&gt;
*** How does Moodle expect to be given the authentication token?&lt;br /&gt;
* Fully implemented MNet linkage and SSO between Moodle and SchoolTool (Brett)&lt;br /&gt;
** Ability to configure one or more Moodle systems as MNet peers within SchoolTool&lt;br /&gt;
*** Add new peer&lt;br /&gt;
*** View / verify peer status&lt;br /&gt;
*** Delete peer&lt;br /&gt;
** After configuration, ability to perform SSO login from SchoolTool to Moodle&lt;br /&gt;
** After configuration, ability to accept SSO login from Moodle to SchoolTool&lt;br /&gt;
*** 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&lt;br /&gt;
** Unit tests to cover each of the above features&lt;br /&gt;
* SchoolTool back-end (Douglas)&lt;br /&gt;
** Accept new user info from any integrated Moodle that calls.&lt;br /&gt;
*** Handle username collisions. (See Mahara &amp;amp; Moodle.)&lt;br /&gt;
*** Consider how user profile fields are handled.&lt;br /&gt;
*** 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.)&lt;br /&gt;
** Periodically ask for a full-sync with each integrated Moodle.&lt;br /&gt;
&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14198</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14198"/>
		<updated>2009-08-28T03:54:05Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Country-mouse.dia Country-mouse.dia source file]&lt;br /&gt;
## Phase 2 Part 1: Users&lt;br /&gt;
##:[[Image:Country-mouse1.png|300px]]&lt;br /&gt;
## Phase 2 Part 2: Enrollments&lt;br /&gt;
##:[[Image:Country-mouse2.png|300px]]&lt;br /&gt;
## Phase 2 Part 3: Grades&lt;br /&gt;
##:[[Image:Country-mouse3.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Userdata.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Enrollment.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Grades.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
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.&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Moodle (Matt)&lt;br /&gt;
** UI: Make Moodle aware of SchoolTool as a potential SSO peer.&lt;br /&gt;
** Add new auth plugin to send info to SchoolTool and to accept SSO back from SchoolTool.&lt;br /&gt;
** Create spec for Brett to implement outward portion of SSO in SchoolTool.&lt;br /&gt;
* SchoolTool UI+Mnet (Brett)&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration (with one or more Moodles)&lt;br /&gt;
*** Consider any configuration of the SSO. Choose sensible defaults, make helpful options modifiable.&lt;br /&gt;
*** Remember that the client does not want Students to be able to log in. How will this be a configurable option? (This may not be doable until we&#039;re passing enrollments to SchoolTool, since Moodle doesn&#039;t actually distinguish between types of users (student/teacher), but merely roles in contexts.)&lt;br /&gt;
* SchoolTool back-end (Douglas)&lt;br /&gt;
** Accept new user info from any integrated Moodle that calls.&lt;br /&gt;
*** Handle username collisions. (See Mahara &amp;amp; Moodle.)&lt;br /&gt;
*** Consider how user profile fields are handled.&lt;br /&gt;
*** 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.)&lt;br /&gt;
** Periodically ask for a full-sync with each integrated Moodle.&lt;br /&gt;
&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14197</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14197"/>
		<updated>2009-08-25T20:58:38Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Part 1: SSO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Country-mouse.dia Country-mouse.dia source file]&lt;br /&gt;
## Phase 2 Part 1: Users&lt;br /&gt;
##:[[Image:Country-mouse1.png|300px]]&lt;br /&gt;
## Phase 2 Part 2: Enrollments&lt;br /&gt;
##:[[Image:Country-mouse2.png|300px]]&lt;br /&gt;
## Phase 2 Part 3: Grades&lt;br /&gt;
##:[[Image:Country-mouse3.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Userdata.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Enrollment.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
:[[Image:SchoolTool_Integration_Grades.dia]]&lt;br /&gt;
:[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
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.&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Moodle (Matt)&lt;br /&gt;
** Make Moodle aware of SchoolTool as a potential SSO peer.&lt;br /&gt;
** Add new auth plugin to send info to SchoolTool.&lt;br /&gt;
* SchoolTool UI+Mnet (Brett)&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration (with one or more Moodles)&lt;br /&gt;
*** Consider any configuration of the SSO. Choose sensible defaults, make helpful options modifiable.&lt;br /&gt;
*** Remember that the client does not want Students to be able to log in. How will this be a configurable option? (This may not be doable until we&#039;re passing enrollments to SchoolTool, since Moodle doesn&#039;t actually distinguish between types of users (student/teacher), but merely roles in contexts.)&lt;br /&gt;
* SchoolTool back-end (Douglas)&lt;br /&gt;
** Accept new user info from any integrated Moodle that calls.&lt;br /&gt;
*** Handle username collisions. (See Mahara &amp;amp; Moodle.)&lt;br /&gt;
*** Consider how user profile fields are handled.&lt;br /&gt;
*** 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.)&lt;br /&gt;
** Periodically ask for a full-sync with each integrated Moodle.&lt;br /&gt;
&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14195</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14195"/>
		<updated>2009-08-24T01:07:19Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Country-mouse.dia Country-mouse.dia source file]&lt;br /&gt;
## Phase 2 Part 1: Users&lt;br /&gt;
##:[[Image:Country-mouse1.png|300px]]&lt;br /&gt;
## Phase 2 Part 2: Enrollments&lt;br /&gt;
##:[[Image:Country-mouse2.png|300px]]&lt;br /&gt;
## Phase 2 Part 3: Grades&lt;br /&gt;
##:[[Image:Country-mouse3.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Moodle (Matt)&lt;br /&gt;
** Make Moodle aware of SchoolTool as a potential SSO peer.&lt;br /&gt;
** Add new auth plugin to send info to SchoolTool.&lt;br /&gt;
* SchoolTool UI+Mnet (Brett)&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration (with one or more Moodles)&lt;br /&gt;
*** Consider any configuration of the SSO. Choose sensible defaults, make helpful options modifiable.&lt;br /&gt;
* SchoolTool back-end (Douglas)&lt;br /&gt;
** Accept new user info from any integrated Moodle that calls.&lt;br /&gt;
*** Handle username collisions. (See Mahara &amp;amp; Moodle.)&lt;br /&gt;
*** Consider how user profile fields are handled.&lt;br /&gt;
** Periodically ask for a full-sync with each integrated Moodle.&lt;br /&gt;
&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14194</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14194"/>
		<updated>2009-08-24T01:05:05Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Country-mouse.dia Country-mouse.dia source file]&lt;br /&gt;
## Phase 2 Part 1: Users&lt;br /&gt;
##:[[Image:Country-mouse1.png|300px]]&lt;br /&gt;
## Phase 2 Part 2: Enrollments&lt;br /&gt;
##:[[Image:Country-mouse2.png|300px]]&lt;br /&gt;
## Phase 2 Part 3: Grades&lt;br /&gt;
##:[[Image:Country-mouse3.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Moodle (Matt)&lt;br /&gt;
** Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* SchoolTool UI+Mnet (Brett)&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration (with one or more Moodles)&lt;br /&gt;
*** Consider any configuration of the SSO. Choose sensible defaults, make helpful options modifiable.&lt;br /&gt;
* SchoolTool back-end (Douglas)&lt;br /&gt;
** Accept new user info from any integrated Moodle that calls.&lt;br /&gt;
** Handle username collisions. (See Mahara &amp;amp; Moodle.)&lt;br /&gt;
** Consider how user profile fields are handled.&lt;br /&gt;
** Periodically ask for a full-sync with each integrated Moodle.&lt;br /&gt;
&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14193</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14193"/>
		<updated>2009-08-24T00:35:38Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Country-mouse.dia Country-mouse.dia source file]&lt;br /&gt;
## Phase 2 Part 1: Users&lt;br /&gt;
##:[[Image:Country-mouse1.png|300px]]&lt;br /&gt;
## Phase 2 Part 2: Enrollments&lt;br /&gt;
##:[[Image:Country-mouse2.png|300px]]&lt;br /&gt;
## Phase 2 Part 3: Grades&lt;br /&gt;
##:[[Image:Country-mouse3.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14192</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14192"/>
		<updated>2009-08-23T23:00:28Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
# 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.&lt;br /&gt;
## Phase 2 Part 1: Users&lt;br /&gt;
## Phase 2 Part 2: Enrollments&lt;br /&gt;
## Phase 2 Part 3: Grades&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14191</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14191"/>
		<updated>2009-08-23T22:39:06Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Vera.dia Vera.dia source file]&lt;br /&gt;
#:[[Image:Vera.png|300px]]&lt;br /&gt;
# 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.&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Enrollment.png|200px]]&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Grades.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14189</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14189"/>
		<updated>2009-08-16T19:01:50Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Terminology Disambiguation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14188</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14188"/>
		<updated>2009-08-15T22:06:10Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
#:[[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
#:[[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14187</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14187"/>
		<updated>2009-08-15T22:05:32Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
#:[https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
#:[[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
 [[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14186</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14186"/>
		<updated>2009-08-15T22:05:01Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
#:&lt;br /&gt;
# 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
 [[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14185</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14185"/>
		<updated>2009-08-15T22:03:30Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/5/56/Samantha1.dia Samantha1.dia source file]&lt;br /&gt;
 [[Image:Samantha1.png|500px]]&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14184</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14184"/>
		<updated>2009-08-15T22:01:27Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
# 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
# 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
# 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&#039;s transcript.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
# Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
# 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14183</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14183"/>
		<updated>2009-08-15T21:30:49Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
* 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14182</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14182"/>
		<updated>2009-08-15T21:22:18Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
* 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/2/2b/Tommy-and-guinevere2.dia Tommy-and-guinevere2.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere2.png|500px]]&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14181</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14181"/>
		<updated>2009-08-15T17:15:26Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
* 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere1.png|500px]]&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14180</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14180"/>
		<updated>2009-08-15T17:12:29Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
* 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:Tommy-and-guinevere1.png|300px]]&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14179</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14179"/>
		<updated>2009-08-15T17:11:47Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
* 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
 [[Image:https://docs.moodle.org/en/images_en/f/f0/Tommy-and-guinevere1.png|300px]]&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14178</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14178"/>
		<updated>2009-08-15T17:10:51Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
* 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).&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/a/af/Tommy-and-guinevere1.dia Tommy-and-guinevere1.dia source file]&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14177</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14177"/>
		<updated>2009-08-15T00:53:02Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
 [[Image:Susie-and-patricia.png|300px]]&lt;br /&gt;
* 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).&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14176</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14176"/>
		<updated>2009-08-15T00:50:59Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
 [https://docs.moodle.org/en/images_en/d/d1/Susie-and-patricia.dia Susie-and-patricia.dia source file]&lt;br /&gt;
* 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).&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
[[Image:SchoolTool_Integration_Userdata.png|200px]]&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14174</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14174"/>
		<updated>2009-08-02T20:26:25Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&#039;&#039;&#039;In summary, integration v1.0 will be a Moodle-&amp;gt;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.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14173</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14173"/>
		<updated>2009-08-02T04:52:36Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* 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 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.&lt;br /&gt;
* 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).&lt;br /&gt;
* 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&#039;s transcript.&lt;br /&gt;
* Samantha Stupenda, widely rumored to be the most demanding science teacher at THS, has developed assignments for the newest chapter of the textbook she&#039;s writing (&amp;quot;Earth Science Internalized: No Escape&amp;quot;). 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&#039;s course.&lt;br /&gt;
* 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 (&amp;quot;Bubble Blowing 101&amp;quot;), 2) creates a section of the course (&amp;quot;Bubble Blowing 101 taught by Chewie Chomper&amp;quot;), 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* 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. What happens?&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14172</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14172"/>
		<updated>2009-07-31T03:56:26Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Phase 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* Susie is an existing student. How will her grades end up on a report card that is generated by SchoolTool?&lt;br /&gt;
* Tommy is a new student. How will his grades end up on a report card that is generated by SchoolTool?&lt;br /&gt;
* Ralph is an existing student who decides he wants to take Ms. Orglocks&#039; &amp;quot;Fantastic Creatures and How To Cook Them&amp;quot; course. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
* Roxie is an existing student who decides he wants to drop Ms. Orglocks&#039; &amp;quot;Fantastic Creatures and How To Cook Them&amp;quot; course. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
* Mr. Trendy grades Stephanie&#039;s world history exam in Moodle. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
* Mr. Oldskool wants to enter a grade for Mikie&#039;s horse riding demo, which is not a Moodle assignment. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
* address each of the above scenarios...&lt;br /&gt;
* show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
* show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14171</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14171"/>
		<updated>2009-07-31T03:55:59Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Phase 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
1 Susie is an existing student. How will her grades end up on a report card that is generated by SchoolTool?&lt;br /&gt;
1 Tommy is a new student. How will his grades end up on a report card that is generated by SchoolTool?&lt;br /&gt;
1 Ralph is an existing student who decides he wants to take Ms. Orglocks&#039; &amp;quot;Fantastic Creatures and How To Cook Them&amp;quot; course. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
1 Roxie is an existing student who decides he wants to drop Ms. Orglocks&#039; &amp;quot;Fantastic Creatures and How To Cook Them&amp;quot; course. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
1 Mr. Trendy grades Stephanie&#039;s world history exam in Moodle. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
1 Mr. Oldskool wants to enter a grade for Mikie&#039;s horse riding demo, which is not a Moodle assignment. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
===Flowcharts Because We Like Them===&lt;br /&gt;
1 address each of the above scenarios...&lt;br /&gt;
1 show technical detail for transfer of user account(s) from Moodle to SchoolTool&lt;br /&gt;
1 show technical detail for transfer of enrollment(s) from Moodle to SchoolTool&lt;br /&gt;
1 show technical detail for transfer of grades(s) from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14170</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14170"/>
		<updated>2009-07-31T03:53:54Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* Susie is an existing student. How will her grades end up on a report card that is generated by SchoolTool?&lt;br /&gt;
* Tommy is a new student. How will his grades end up on a report card that is generated by SchoolTool?&lt;br /&gt;
* Ralph is an existing student who decides he wants to take Ms. Orglocks&#039; &amp;quot;Fantastic Creatures and How To Cook Them&amp;quot; course. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
* Roxie is an existing student who decides he wants to drop Ms. Orglocks&#039; &amp;quot;Fantastic Creatures and How To Cook Them&amp;quot; course. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
* Mr. Trendy grades Stephanie&#039;s world history exam in Moodle. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
* Mr. Oldskool wants to enter a grade for Mikie&#039;s horse riding demo, which is not a Moodle assignment. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14169</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14169"/>
		<updated>2009-07-31T03:52:35Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Phase 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Scenarios===&lt;br /&gt;
* Susie is an existing student. How will her grades end up on a report card that is generated by SchoolTool?&lt;br /&gt;
* Tommy is a new student. How will his grades end up on a report card that is generated by SchoolTool?&lt;br /&gt;
* Ralph is an existing student who decides he wants to take Ms. Orglocks&#039; &amp;quot;Fantastic Creatures and How To Cook Them&amp;quot; course. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
* Roxie is an existing student who decides he wants to drop Ms. Orglocks&#039; &amp;quot;Fantastic Creatures and How To Cook Them&amp;quot; course. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
* Mr. Trendy grades Stephanie&#039;s world history exam in Moodle. How does v.1 of Moodle+SchoolTool handle this?&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14168</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14168"/>
		<updated>2009-07-30T15:46:48Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
* Some discussion is taking place [http://moodle.org/mod/forum/discuss.php?d=129267 here].&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14167</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14167"/>
		<updated>2009-07-30T04:43:46Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* fetch_user(userdata)&lt;br /&gt;
** tell SchoolTool to ask Moodle for one user&#039;s data&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to grill a logarithmic sandwich&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement Moodle cron job to ensure all users are always maintained in SchoolTool&lt;br /&gt;
** UI: gracefully add this to existing Mnet SSO config screen if possible&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** update_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
** UI: Mnet SSO configuration&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14166</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14166"/>
		<updated>2009-07-30T03:26:30Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* update_user(userdata)&lt;br /&gt;
** update user account&lt;br /&gt;
** userdata: associative array (see new_user() above)&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* update_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array (see new_section() above)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* update_enrolment(enrolmentdata)&lt;br /&gt;
** update association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array (see new_enrolment() above)&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* update_assessment(assessmentdata)&lt;br /&gt;
** update assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array (see new_assessment() above)&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
* update_grade(gradedata)&lt;br /&gt;
** update entry in gradebook&lt;br /&gt;
** gradedata: associative array (see new_grade() above)&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
* Implement Moodle&#039;s cron task to ensure all users are in SchoolTool&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14165</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14165"/>
		<updated>2009-07-29T20:01:28Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin config&lt;br /&gt;
** Enrolment plugin config&lt;br /&gt;
** Grade export config&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** similar division of config screens&lt;br /&gt;
** equivalent of Moodle&#039;s &amp;quot;Network Servers&amp;quot; block with links to SSO peers&lt;br /&gt;
** equivalent of &amp;quot;You have logged in from &amp;lt;somelink&amp;gt;&amp;quot; to go back after SSO&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Phase 2==&lt;br /&gt;
===Part 1: SSO===&lt;br /&gt;
====Tasks====&lt;br /&gt;
* Make Moodle aware of SchoolTool as a potential SSO peer&lt;br /&gt;
* Implement SchoolTool SSO interfaces&lt;br /&gt;
** new_user() Mnet interface&lt;br /&gt;
** UI: link to configured Moodle peers&lt;br /&gt;
** UI: link back to Moodle after Moodle-&amp;gt;SchoolTool SSO login&lt;br /&gt;
* Implement Moodle&#039;s cron task to ensure all users are in SchoolTool&lt;br /&gt;
===Part 2: Enrollments===&lt;br /&gt;
====Tasks====&lt;br /&gt;
===Part 3: Grades===&lt;br /&gt;
====Tasks====&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14164</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14164"/>
		<updated>2009-07-23T04:49:45Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==User Interfaces==&lt;br /&gt;
* 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: [http://eduforge.org/docman/view.php/176/3200/Mahoodle.pdf Mahoodle.pdf]&lt;br /&gt;
* Moodle UIs&lt;br /&gt;
** Auth plugin&lt;br /&gt;
** Enrolment plugin&lt;br /&gt;
** Grade export&lt;br /&gt;
* SchoolTool UIs&lt;br /&gt;
** should there be one screen or should this be broken down?&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14163</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14163"/>
		<updated>2009-07-01T15:00:52Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory and enrollment management.&lt;br /&gt;
** 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.)&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14162</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14162"/>
		<updated>2009-07-01T14:59:09Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
* integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory, enrollment management system.&lt;br /&gt;
** No accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
** Enrollment can be student-driven.&lt;br /&gt;
** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
* future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
* Start fresh with both.&lt;br /&gt;
* future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
** maybe not important for v1.0, might basically come for free&lt;br /&gt;
* future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14161</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14161"/>
		<updated>2009-07-01T14:42:19Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Implementation notes/ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
** integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory, enrollment management system.&lt;br /&gt;
*** No accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** Enrollment can be student-driven.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14160</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14160"/>
		<updated>2009-07-01T14:41:57Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Implementation notes/ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] [https://code.edge.launchpad.net/~mnet-maintainers/mnet-wsgi/main has been ported to python.]&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
** integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory, enrollment management system.&lt;br /&gt;
*** No accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** Enrollment can be student-driven.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14159</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14159"/>
		<updated>2009-06-30T22:10:56Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Mnet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been ported to python.&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
** integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory, enrollment management system.&lt;br /&gt;
*** No accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** Enrollment can be student-driven.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
* What, in summary, does MNET provide?&lt;br /&gt;
** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14158</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14158"/>
		<updated>2009-06-30T22:10:33Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been ported to python.&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
** integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory, enrollment management system.&lt;br /&gt;
*** No accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** Enrollment can be student-driven.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==Mnet==&lt;br /&gt;
** What, in summary, does MNET provide?&lt;br /&gt;
*** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
*** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
*** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
===Moodle mnet Interfaces===&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
===SchoolTool mnet Interfaces===&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
==Misc. TODO==&lt;br /&gt;
* Matt/Tom: Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** 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.&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14157</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14157"/>
		<updated>2009-06-30T22:01:00Z</updated>

		<summary type="html">&lt;p&gt;Moquist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* User accounts, courses, enrolments, assignments, and grades auto-update in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
&lt;br /&gt;
==Integration v1.0 NON-Requirements==&lt;br /&gt;
* Users, courses, enrolments can originate in and be managed within SchoolTool, with Moodle updating from SchoolTool.&lt;br /&gt;
** This will be the goal of the next version of the integration.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* SchoolTool is the authoritative reporting application.&lt;br /&gt;
* Moodle drives all data creation and management.&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Terminology Disambiguation==&lt;br /&gt;
* course: A SchoolTool course.&lt;br /&gt;
** SchoolTool &amp;quot;course&amp;quot; has no Moodle analogue. (&amp;quot;Algebra 1&amp;quot;) can have multiple &amp;quot;sections&amp;quot; (&amp;quot;Algebra * 1 @ 9:15 taught by Mr. Smith&amp;quot;).&lt;br /&gt;
* section: A SchoolTool section, a Moodle course.&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] has been ported to python.&lt;br /&gt;
** SchoolTool will need to use this library.&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin that can pass grades to SchoolTool via mnet.&lt;br /&gt;
* integration v1.0 will not batch updates from Moodle to SchoolTool. Updates will be small and frequent.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
** integration v1.0: Drop SchoolTool into existing Moodle site, leave Moodle as driver of user directory, enrollment management system.&lt;br /&gt;
*** No accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** All course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** Enrollment can be student-driven.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** future integration version only: Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** future integration version only: Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** future integration version only: Drop SchoolTool into Mahara site (and vice-versa)&lt;br /&gt;
&lt;br /&gt;
==Moodle mnet Interfaces==&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
==SchoolTool mnet Interfaces==&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
**** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
**** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
== Planning meeting prep/notes (to be integrated above after meeting) ==&lt;br /&gt;
* Write down some use cases about ST+Moodle integration&lt;br /&gt;
&lt;br /&gt;
* What user data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** Moodle &amp;amp; SchoolTool will share an idnumber(UUID) for each object they share.&lt;br /&gt;
** Which user profile fields do SchoolTool &amp;amp; Moodle have in common?&lt;br /&gt;
** Perhaps leave it up to Moodle admin whether to leave profile fields that can come from SchoolTool editable or locked.&lt;br /&gt;
** Each system must be able to send enough data to the other for a login account to be created.&lt;br /&gt;
** The integration will have a mechanism to prevent student logins even when their accounts exist (and SSO is configured). (This will be some sort of flag, that applies to groups so nobody needs to set it for each user. Ugh.)&lt;br /&gt;
&lt;br /&gt;
* What enrollment data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** What are SchoolTool&#039;s course status concepts, and how will these interact with Moodle? (e.g., is enrollment simply binary, or are there other status options?) -- Status will be added soon (see SchoolTool TODO list). Enrollment in SchoolTool consists of a group of students and a group of teachers associated with a course section. Moodle will simply treat all of these teachers as editing teachers and all of these students as students (as opposed to other roles).&lt;br /&gt;
* What grade data will go between Moodle &amp;amp; ST?&lt;br /&gt;
** One grade/student/course, or one grade/assessment/student/course? (Eventually want to provide admin(?) with option.)&lt;br /&gt;
* Identify MNET interfaces published by Moodle &amp;amp; ST for this integration.&lt;br /&gt;
* Produce mock-ups of the SSO, enrollment, &amp;amp; grading data. (XML)&lt;br /&gt;
* Where will the python mnet library live?&lt;br /&gt;
* Can we allow the admin to choose whether auth directory goes from SchoolTool to Moodle or vice-versa?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* Can we allow the admin to choose whether enrollment authority is in SchoolTool or Moodle?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* What will the code between SchoolTool and the python MNET library look like? (This is probably where zope-related considerations come into play.)&lt;br /&gt;
** What, in summary, does MNET provide?&lt;br /&gt;
*** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
*** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
*** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
* Planning TODO list&lt;br /&gt;
** Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** 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.&lt;br /&gt;
** Prototype user creation via XMLRPC (as if Moodle sent info for a new user).&lt;br /&gt;
** Optional: Prototype course creation in SchoolTool (as if Moodle sent info about a new course).&lt;br /&gt;
** Also optional: Prototype section creation in SchoolTool.&lt;br /&gt;
** Yet again, optional: Prototype section enrollment in SchoolTool.&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14156</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14156"/>
		<updated>2009-06-30T21:42:01Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* SchoolTool mnet Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* Auto-enrolment in Moodle tracking enrolments in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] will be ported to python.&lt;br /&gt;
** SchoolTool will need to use this library. Discussion about plugin architectures (auth, enrolment, grades) underway in #schooltool on freenode...&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin (does this even exist? or something...) that can pass grades to SchoolTool via mnet.&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
* mnet library porting ASAP (Brett)&lt;br /&gt;
* mnet interface and data content examples drawn from Moodle as input to SchoolTool design ASAP (Matt)&lt;br /&gt;
* SchoolTool-side planning/spec meeting TBA&lt;br /&gt;
&lt;br /&gt;
==Data Samples==&lt;br /&gt;
===Auth/Profile===&lt;br /&gt;
* idnumber,lastname,firstname,username,email,&amp;lt;other profile fields TBD&amp;gt;&lt;br /&gt;
===Course===&lt;br /&gt;
* courseid, course name&lt;br /&gt;
* does this map to a moodle metacourse?&lt;br /&gt;
&lt;br /&gt;
===Section===&lt;br /&gt;
* sectionid, courseid&lt;br /&gt;
* this maps to a regular (non-meta) moodle course&lt;br /&gt;
&lt;br /&gt;
===Enrolment===&lt;br /&gt;
* userid, courseid, role?, course name?, status?, credits?, other?&lt;br /&gt;
&lt;br /&gt;
===Assessment===&lt;br /&gt;
* assessmentid, assessment name, point value, ismidterm, isfinal, isrequired, isextracredit&lt;br /&gt;
&lt;br /&gt;
===Grade===&lt;br /&gt;
* userid, courseid, assessmentid, points earned, other?&lt;br /&gt;
&lt;br /&gt;
==Moodle mnet Interfaces==&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
==SchoolTool mnet Interfaces==&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;73743734 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(gradedata)&lt;br /&gt;
** make entry in gradebook&lt;br /&gt;
** gradedata: associative array such as:&lt;br /&gt;
*** assessmentid=&amp;gt;73743734&lt;br /&gt;
*** userid=&amp;gt;2347234 # unique shared ID of student&lt;br /&gt;
*** points_earned=&amp;gt;62&lt;br /&gt;
*** excepted=&amp;gt;false&lt;br /&gt;
*** attempt_num=&amp;gt;1 # if multiple attempts are allowed&lt;br /&gt;
&lt;br /&gt;
== Planning meeting prep/notes (to be integrated above after meeting) ==&lt;br /&gt;
* When: Friday, June 5 at 10am EST&lt;br /&gt;
* Where: #schooltool-moodle on freenode&lt;br /&gt;
&lt;br /&gt;
* Write down some use cases about ST+Moodle integration&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, leave Moodle as authoritative user directory, enrollment management system.&lt;br /&gt;
*** This is what ECHS wants.&lt;br /&gt;
*** If Moodle drives auth, then no accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** If Moodle drives enrollment, then all course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** ECHS wants student-driven enrollment.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** Drop SchoolTool into Mahara site (and vice-versa, out of scope at present)&lt;br /&gt;
&lt;br /&gt;
* Design decision: Grades will only go from Moodle to SchoolTool.&lt;br /&gt;
* Design decision: For auth/enrollment/grades, only one side is ever authoritative. We are not going to synchronize both ways simultaneously.&lt;br /&gt;
* Design decision: Regardless of which system is driving auth/enrollment, SchoolTool must be the authoritative reporting system.&lt;br /&gt;
&lt;br /&gt;
* What user data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** Moodle &amp;amp; SchoolTool will share an idnumber(UUID) for each object they share.&lt;br /&gt;
** Which user profile fields do SchoolTool &amp;amp; Moodle have in common?&lt;br /&gt;
** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
** Perhaps leave it up to Moodle admin whether to leave profile fields that can come from SchoolTool editable or locked.&lt;br /&gt;
** Each system must be able to send enough data to the other for a login account to be created.&lt;br /&gt;
** The integration will have a mechanism to prevent student logins even when their accounts exist (and SSO is configured). (This will be some sort of flag, that applies to groups so nobody needs to set it for each user. Ugh.)&lt;br /&gt;
&lt;br /&gt;
* What enrollment data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** What are SchoolTool&#039;s course status concepts, and how will these interact with Moodle? (e.g., is enrollment simply binary, or are there other status options?) -- Status will be added soon (see SchoolTool TODO list). Enrollment in SchoolTool consists of a group of students and a group of teachers associated with a course section. Moodle will simply treat all of these teachers as editing teachers and all of these students as students (as opposed to other roles).&lt;br /&gt;
* What grade data will go between Moodle &amp;amp; ST?&lt;br /&gt;
** One grade/student/course, or one grade/assessment/student/course? (Eventually want to provide admin(?) with option.)&lt;br /&gt;
* Identify MNET interfaces published by Moodle &amp;amp; ST for this integration.&lt;br /&gt;
* Produce mock-ups of the SSO, enrollment, &amp;amp; grading data. (XML)&lt;br /&gt;
* Where will the python mnet library live?&lt;br /&gt;
* Can we allow the admin to choose whether auth directory goes from SchoolTool to Moodle or vice-versa?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* Can we allow the admin to choose whether enrollment authority is in SchoolTool or Moodle?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* What will the code between SchoolTool and the python MNET library look like? (This is probably where zope-related considerations come into play.)&lt;br /&gt;
** What, in summary, does MNET provide?&lt;br /&gt;
*** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
*** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
*** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
* Planning TODO list&lt;br /&gt;
** Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** 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.&lt;br /&gt;
** Prototype user creation via XMLRPC (as if Moodle sent info for a new user).&lt;br /&gt;
** Optional: Prototype course creation in SchoolTool (as if Moodle sent info about a new course).&lt;br /&gt;
** Also optional: Prototype section creation in SchoolTool.&lt;br /&gt;
** Yet again, optional: Prototype section enrollment in SchoolTool.&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14155</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14155"/>
		<updated>2009-06-30T21:16:44Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* SchoolTool mnet Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* Auto-enrolment in Moodle tracking enrolments in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] will be ported to python.&lt;br /&gt;
** SchoolTool will need to use this library. Discussion about plugin architectures (auth, enrolment, grades) underway in #schooltool on freenode...&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin (does this even exist? or something...) that can pass grades to SchoolTool via mnet.&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
* mnet library porting ASAP (Brett)&lt;br /&gt;
* mnet interface and data content examples drawn from Moodle as input to SchoolTool design ASAP (Matt)&lt;br /&gt;
* SchoolTool-side planning/spec meeting TBA&lt;br /&gt;
&lt;br /&gt;
==Data Samples==&lt;br /&gt;
===Auth/Profile===&lt;br /&gt;
* idnumber,lastname,firstname,username,email,&amp;lt;other profile fields TBD&amp;gt;&lt;br /&gt;
===Course===&lt;br /&gt;
* courseid, course name&lt;br /&gt;
* does this map to a moodle metacourse?&lt;br /&gt;
&lt;br /&gt;
===Section===&lt;br /&gt;
* sectionid, courseid&lt;br /&gt;
* this maps to a regular (non-meta) moodle course&lt;br /&gt;
&lt;br /&gt;
===Enrolment===&lt;br /&gt;
* userid, courseid, role?, course name?, status?, credits?, other?&lt;br /&gt;
&lt;br /&gt;
===Assessment===&lt;br /&gt;
* assessmentid, assessment name, point value, ismidterm, isfinal, isrequired, isextracredit&lt;br /&gt;
&lt;br /&gt;
===Grade===&lt;br /&gt;
* userid, courseid, assessmentid, points earned, other?&lt;br /&gt;
&lt;br /&gt;
==Moodle mnet Interfaces==&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
==SchoolTool mnet Interfaces==&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
** assessmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** name=&amp;gt;&amp;quot;How to skin a logarithm&amp;quot;&lt;br /&gt;
*** chapternum=&amp;gt;3&lt;br /&gt;
*** honors_required=&amp;gt;false&lt;br /&gt;
*** nonhonors_required=&amp;gt;true&lt;br /&gt;
*** extra_credit=&amp;gt;false&lt;br /&gt;
*** pointval=&amp;gt;68&lt;br /&gt;
* new_grade(userid, assessmentid, gradedta)&lt;br /&gt;
** enter grade for grade reports&lt;br /&gt;
&lt;br /&gt;
== Planning meeting prep/notes (to be integrated above after meeting) ==&lt;br /&gt;
* When: Friday, June 5 at 10am EST&lt;br /&gt;
* Where: #schooltool-moodle on freenode&lt;br /&gt;
&lt;br /&gt;
* Write down some use cases about ST+Moodle integration&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, leave Moodle as authoritative user directory, enrollment management system.&lt;br /&gt;
*** This is what ECHS wants.&lt;br /&gt;
*** If Moodle drives auth, then no accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** If Moodle drives enrollment, then all course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** ECHS wants student-driven enrollment.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** Drop SchoolTool into Mahara site (and vice-versa, out of scope at present)&lt;br /&gt;
&lt;br /&gt;
* Design decision: Grades will only go from Moodle to SchoolTool.&lt;br /&gt;
* Design decision: For auth/enrollment/grades, only one side is ever authoritative. We are not going to synchronize both ways simultaneously.&lt;br /&gt;
* Design decision: Regardless of which system is driving auth/enrollment, SchoolTool must be the authoritative reporting system.&lt;br /&gt;
&lt;br /&gt;
* What user data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** Moodle &amp;amp; SchoolTool will share an idnumber(UUID) for each object they share.&lt;br /&gt;
** Which user profile fields do SchoolTool &amp;amp; Moodle have in common?&lt;br /&gt;
** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
** Perhaps leave it up to Moodle admin whether to leave profile fields that can come from SchoolTool editable or locked.&lt;br /&gt;
** Each system must be able to send enough data to the other for a login account to be created.&lt;br /&gt;
** The integration will have a mechanism to prevent student logins even when their accounts exist (and SSO is configured). (This will be some sort of flag, that applies to groups so nobody needs to set it for each user. Ugh.)&lt;br /&gt;
&lt;br /&gt;
* What enrollment data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** What are SchoolTool&#039;s course status concepts, and how will these interact with Moodle? (e.g., is enrollment simply binary, or are there other status options?) -- Status will be added soon (see SchoolTool TODO list). Enrollment in SchoolTool consists of a group of students and a group of teachers associated with a course section. Moodle will simply treat all of these teachers as editing teachers and all of these students as students (as opposed to other roles).&lt;br /&gt;
* What grade data will go between Moodle &amp;amp; ST?&lt;br /&gt;
** One grade/student/course, or one grade/assessment/student/course? (Eventually want to provide admin(?) with option.)&lt;br /&gt;
* Identify MNET interfaces published by Moodle &amp;amp; ST for this integration.&lt;br /&gt;
* Produce mock-ups of the SSO, enrollment, &amp;amp; grading data. (XML)&lt;br /&gt;
* Where will the python mnet library live?&lt;br /&gt;
* Can we allow the admin to choose whether auth directory goes from SchoolTool to Moodle or vice-versa?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* Can we allow the admin to choose whether enrollment authority is in SchoolTool or Moodle?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* What will the code between SchoolTool and the python MNET library look like? (This is probably where zope-related considerations come into play.)&lt;br /&gt;
** What, in summary, does MNET provide?&lt;br /&gt;
*** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
*** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
*** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
* Planning TODO list&lt;br /&gt;
** Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** 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.&lt;br /&gt;
** Prototype user creation via XMLRPC (as if Moodle sent info for a new user).&lt;br /&gt;
** Optional: Prototype course creation in SchoolTool (as if Moodle sent info about a new course).&lt;br /&gt;
** Also optional: Prototype section creation in SchoolTool.&lt;br /&gt;
** Yet again, optional: Prototype section enrollment in SchoolTool.&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14154</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14154"/>
		<updated>2009-06-30T21:10:34Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* SchoolTool mnet Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* Auto-enrolment in Moodle tracking enrolments in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] will be ported to python.&lt;br /&gt;
** SchoolTool will need to use this library. Discussion about plugin architectures (auth, enrolment, grades) underway in #schooltool on freenode...&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin (does this even exist? or something...) that can pass grades to SchoolTool via mnet.&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
* mnet library porting ASAP (Brett)&lt;br /&gt;
* mnet interface and data content examples drawn from Moodle as input to SchoolTool design ASAP (Matt)&lt;br /&gt;
* SchoolTool-side planning/spec meeting TBA&lt;br /&gt;
&lt;br /&gt;
==Data Samples==&lt;br /&gt;
===Auth/Profile===&lt;br /&gt;
* idnumber,lastname,firstname,username,email,&amp;lt;other profile fields TBD&amp;gt;&lt;br /&gt;
===Course===&lt;br /&gt;
* courseid, course name&lt;br /&gt;
* does this map to a moodle metacourse?&lt;br /&gt;
&lt;br /&gt;
===Section===&lt;br /&gt;
* sectionid, courseid&lt;br /&gt;
* this maps to a regular (non-meta) moodle course&lt;br /&gt;
&lt;br /&gt;
===Enrolment===&lt;br /&gt;
* userid, courseid, role?, course name?, status?, credits?, other?&lt;br /&gt;
&lt;br /&gt;
===Assessment===&lt;br /&gt;
* assessmentid, assessment name, point value, ismidterm, isfinal, isrequired, isextracredit&lt;br /&gt;
&lt;br /&gt;
===Grade===&lt;br /&gt;
* userid, courseid, assessmentid, points earned, other?&lt;br /&gt;
&lt;br /&gt;
==Moodle mnet Interfaces==&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
==SchoolTool mnet Interfaces==&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata: associative array such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** (not required -- do we want this?) password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata: associative array such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
** enrolmentdata: associative array such as:&lt;br /&gt;
*** sectionid=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** userid=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** role=&amp;gt;&#039;teacher&#039; # only &#039;student&#039; and &#039;teacher&#039; supported in integration v1.0&lt;br /&gt;
* new_assessment(sectionid, assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
* new_grade(userid, assessmentid, gradedta)&lt;br /&gt;
** enter grade for grade reports&lt;br /&gt;
&lt;br /&gt;
== Planning meeting prep/notes (to be integrated above after meeting) ==&lt;br /&gt;
* When: Friday, June 5 at 10am EST&lt;br /&gt;
* Where: #schooltool-moodle on freenode&lt;br /&gt;
&lt;br /&gt;
* Write down some use cases about ST+Moodle integration&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, leave Moodle as authoritative user directory, enrollment management system.&lt;br /&gt;
*** This is what ECHS wants.&lt;br /&gt;
*** If Moodle drives auth, then no accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** If Moodle drives enrollment, then all course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** ECHS wants student-driven enrollment.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** Drop SchoolTool into Mahara site (and vice-versa, out of scope at present)&lt;br /&gt;
&lt;br /&gt;
* Design decision: Grades will only go from Moodle to SchoolTool.&lt;br /&gt;
* Design decision: For auth/enrollment/grades, only one side is ever authoritative. We are not going to synchronize both ways simultaneously.&lt;br /&gt;
* Design decision: Regardless of which system is driving auth/enrollment, SchoolTool must be the authoritative reporting system.&lt;br /&gt;
&lt;br /&gt;
* What user data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** Moodle &amp;amp; SchoolTool will share an idnumber(UUID) for each object they share.&lt;br /&gt;
** Which user profile fields do SchoolTool &amp;amp; Moodle have in common?&lt;br /&gt;
** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
** Perhaps leave it up to Moodle admin whether to leave profile fields that can come from SchoolTool editable or locked.&lt;br /&gt;
** Each system must be able to send enough data to the other for a login account to be created.&lt;br /&gt;
** The integration will have a mechanism to prevent student logins even when their accounts exist (and SSO is configured). (This will be some sort of flag, that applies to groups so nobody needs to set it for each user. Ugh.)&lt;br /&gt;
&lt;br /&gt;
* What enrollment data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** What are SchoolTool&#039;s course status concepts, and how will these interact with Moodle? (e.g., is enrollment simply binary, or are there other status options?) -- Status will be added soon (see SchoolTool TODO list). Enrollment in SchoolTool consists of a group of students and a group of teachers associated with a course section. Moodle will simply treat all of these teachers as editing teachers and all of these students as students (as opposed to other roles).&lt;br /&gt;
* What grade data will go between Moodle &amp;amp; ST?&lt;br /&gt;
** One grade/student/course, or one grade/assessment/student/course? (Eventually want to provide admin(?) with option.)&lt;br /&gt;
* Identify MNET interfaces published by Moodle &amp;amp; ST for this integration.&lt;br /&gt;
* Produce mock-ups of the SSO, enrollment, &amp;amp; grading data. (XML)&lt;br /&gt;
* Where will the python mnet library live?&lt;br /&gt;
* Can we allow the admin to choose whether auth directory goes from SchoolTool to Moodle or vice-versa?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* Can we allow the admin to choose whether enrollment authority is in SchoolTool or Moodle?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* What will the code between SchoolTool and the python MNET library look like? (This is probably where zope-related considerations come into play.)&lt;br /&gt;
** What, in summary, does MNET provide?&lt;br /&gt;
*** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
*** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
*** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
* Planning TODO list&lt;br /&gt;
** Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** 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.&lt;br /&gt;
** Prototype user creation via XMLRPC (as if Moodle sent info for a new user).&lt;br /&gt;
** Optional: Prototype course creation in SchoolTool (as if Moodle sent info about a new course).&lt;br /&gt;
** Also optional: Prototype section creation in SchoolTool.&lt;br /&gt;
** Yet again, optional: Prototype section enrollment in SchoolTool.&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14153</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14153"/>
		<updated>2009-06-30T21:04:22Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* SchoolTool mnet Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* Auto-enrolment in Moodle tracking enrolments in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] will be ported to python.&lt;br /&gt;
** SchoolTool will need to use this library. Discussion about plugin architectures (auth, enrolment, grades) underway in #schooltool on freenode...&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin (does this even exist? or something...) that can pass grades to SchoolTool via mnet.&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
* mnet library porting ASAP (Brett)&lt;br /&gt;
* mnet interface and data content examples drawn from Moodle as input to SchoolTool design ASAP (Matt)&lt;br /&gt;
* SchoolTool-side planning/spec meeting TBA&lt;br /&gt;
&lt;br /&gt;
==Data Samples==&lt;br /&gt;
===Auth/Profile===&lt;br /&gt;
* idnumber,lastname,firstname,username,email,&amp;lt;other profile fields TBD&amp;gt;&lt;br /&gt;
===Course===&lt;br /&gt;
* courseid, course name&lt;br /&gt;
* does this map to a moodle metacourse?&lt;br /&gt;
&lt;br /&gt;
===Section===&lt;br /&gt;
* sectionid, courseid&lt;br /&gt;
* this maps to a regular (non-meta) moodle course&lt;br /&gt;
&lt;br /&gt;
===Enrolment===&lt;br /&gt;
* userid, courseid, role?, course name?, status?, credits?, other?&lt;br /&gt;
&lt;br /&gt;
===Assessment===&lt;br /&gt;
* assessmentid, assessment name, point value, ismidterm, isfinal, isrequired, isextracredit&lt;br /&gt;
&lt;br /&gt;
===Grade===&lt;br /&gt;
* userid, courseid, assessmentid, points earned, other?&lt;br /&gt;
&lt;br /&gt;
==Moodle mnet Interfaces==&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
==SchoolTool mnet Interfaces==&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata is an associative array of name=&amp;gt;values pairs such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** (not required -- do we want this?) password_hash=&amp;gt;234lih23rlh2asldfjas&lt;br /&gt;
*** password_hash_algorithm=&amp;gt;md5&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** sectiondata is an associative array of name=&amp;gt;values pairs such as:&lt;br /&gt;
*** name=&amp;gt;&amp;quot;Algebra 1 V1 Mrs. Smith: Cats and their Affectations&amp;quot;&lt;br /&gt;
*** idnumber=&amp;gt;197423 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** teacheridnumber=&amp;gt;987234 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** segment=&amp;gt;1 # a section may have more than one semester/segment/term(?)&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
* new_assessment(sectionid, assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
* new_grade(userid, assessmentid, gradedta)&lt;br /&gt;
** enter grade for grade reports&lt;br /&gt;
&lt;br /&gt;
== Planning meeting prep/notes (to be integrated above after meeting) ==&lt;br /&gt;
* When: Friday, June 5 at 10am EST&lt;br /&gt;
* Where: #schooltool-moodle on freenode&lt;br /&gt;
&lt;br /&gt;
* Write down some use cases about ST+Moodle integration&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, leave Moodle as authoritative user directory, enrollment management system.&lt;br /&gt;
*** This is what ECHS wants.&lt;br /&gt;
*** If Moodle drives auth, then no accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** If Moodle drives enrollment, then all course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** ECHS wants student-driven enrollment.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** Drop SchoolTool into Mahara site (and vice-versa, out of scope at present)&lt;br /&gt;
&lt;br /&gt;
* Design decision: Grades will only go from Moodle to SchoolTool.&lt;br /&gt;
* Design decision: For auth/enrollment/grades, only one side is ever authoritative. We are not going to synchronize both ways simultaneously.&lt;br /&gt;
* Design decision: Regardless of which system is driving auth/enrollment, SchoolTool must be the authoritative reporting system.&lt;br /&gt;
&lt;br /&gt;
* What user data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** Moodle &amp;amp; SchoolTool will share an idnumber(UUID) for each object they share.&lt;br /&gt;
** Which user profile fields do SchoolTool &amp;amp; Moodle have in common?&lt;br /&gt;
** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
** Perhaps leave it up to Moodle admin whether to leave profile fields that can come from SchoolTool editable or locked.&lt;br /&gt;
** Each system must be able to send enough data to the other for a login account to be created.&lt;br /&gt;
** The integration will have a mechanism to prevent student logins even when their accounts exist (and SSO is configured). (This will be some sort of flag, that applies to groups so nobody needs to set it for each user. Ugh.)&lt;br /&gt;
&lt;br /&gt;
* What enrollment data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** What are SchoolTool&#039;s course status concepts, and how will these interact with Moodle? (e.g., is enrollment simply binary, or are there other status options?) -- Status will be added soon (see SchoolTool TODO list). Enrollment in SchoolTool consists of a group of students and a group of teachers associated with a course section. Moodle will simply treat all of these teachers as editing teachers and all of these students as students (as opposed to other roles).&lt;br /&gt;
* What grade data will go between Moodle &amp;amp; ST?&lt;br /&gt;
** One grade/student/course, or one grade/assessment/student/course? (Eventually want to provide admin(?) with option.)&lt;br /&gt;
* Identify MNET interfaces published by Moodle &amp;amp; ST for this integration.&lt;br /&gt;
* Produce mock-ups of the SSO, enrollment, &amp;amp; grading data. (XML)&lt;br /&gt;
* Where will the python mnet library live?&lt;br /&gt;
* Can we allow the admin to choose whether auth directory goes from SchoolTool to Moodle or vice-versa?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* Can we allow the admin to choose whether enrollment authority is in SchoolTool or Moodle?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* What will the code between SchoolTool and the python MNET library look like? (This is probably where zope-related considerations come into play.)&lt;br /&gt;
** What, in summary, does MNET provide?&lt;br /&gt;
*** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
*** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
*** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
* Planning TODO list&lt;br /&gt;
** Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** 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.&lt;br /&gt;
** Prototype user creation via XMLRPC (as if Moodle sent info for a new user).&lt;br /&gt;
** Optional: Prototype course creation in SchoolTool (as if Moodle sent info about a new course).&lt;br /&gt;
** Also optional: Prototype section creation in SchoolTool.&lt;br /&gt;
** Yet again, optional: Prototype section enrollment in SchoolTool.&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14152</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14152"/>
		<updated>2009-06-30T20:59:12Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* SchoolTool mnet Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* Auto-enrolment in Moodle tracking enrolments in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] will be ported to python.&lt;br /&gt;
** SchoolTool will need to use this library. Discussion about plugin architectures (auth, enrolment, grades) underway in #schooltool on freenode...&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin (does this even exist? or something...) that can pass grades to SchoolTool via mnet.&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
* mnet library porting ASAP (Brett)&lt;br /&gt;
* mnet interface and data content examples drawn from Moodle as input to SchoolTool design ASAP (Matt)&lt;br /&gt;
* SchoolTool-side planning/spec meeting TBA&lt;br /&gt;
&lt;br /&gt;
==Data Samples==&lt;br /&gt;
===Auth/Profile===&lt;br /&gt;
* idnumber,lastname,firstname,username,email,&amp;lt;other profile fields TBD&amp;gt;&lt;br /&gt;
===Course===&lt;br /&gt;
* courseid, course name&lt;br /&gt;
* does this map to a moodle metacourse?&lt;br /&gt;
&lt;br /&gt;
===Section===&lt;br /&gt;
* sectionid, courseid&lt;br /&gt;
* this maps to a regular (non-meta) moodle course&lt;br /&gt;
&lt;br /&gt;
===Enrolment===&lt;br /&gt;
* userid, courseid, role?, course name?, status?, credits?, other?&lt;br /&gt;
&lt;br /&gt;
===Assessment===&lt;br /&gt;
* assessmentid, assessment name, point value, ismidterm, isfinal, isrequired, isextracredit&lt;br /&gt;
&lt;br /&gt;
===Grade===&lt;br /&gt;
* userid, courseid, assessmentid, points earned, other?&lt;br /&gt;
&lt;br /&gt;
==Moodle mnet Interfaces==&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
==SchoolTool mnet Interfaces==&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
** userdata is an associative array of name=&amp;gt;values pairs such as:&lt;br /&gt;
*** username=&amp;gt;moquist&lt;br /&gt;
*** firstname=&amp;gt;Matt&lt;br /&gt;
*** lastname=&amp;gt;Oquist&lt;br /&gt;
*** idnumber=&amp;gt;1234457 # unique ID shared by Moodle &amp;amp; SchoolTool&lt;br /&gt;
*** email=&amp;gt;moquist@majen.net&lt;br /&gt;
*** ircnick=&amp;gt;moquist&lt;br /&gt;
*** arbitrary_field=&amp;gt;arbitrary_data_string...&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** create new section&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
* new_assessment(sectionid, assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
* new_grade(userid, assessmentid, gradedta)&lt;br /&gt;
** enter grade for grade reports&lt;br /&gt;
&lt;br /&gt;
== Planning meeting prep/notes (to be integrated above after meeting) ==&lt;br /&gt;
* When: Friday, June 5 at 10am EST&lt;br /&gt;
* Where: #schooltool-moodle on freenode&lt;br /&gt;
&lt;br /&gt;
* Write down some use cases about ST+Moodle integration&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, leave Moodle as authoritative user directory, enrollment management system.&lt;br /&gt;
*** This is what ECHS wants.&lt;br /&gt;
*** If Moodle drives auth, then no accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** If Moodle drives enrollment, then all course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** ECHS wants student-driven enrollment.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** Drop SchoolTool into Mahara site (and vice-versa, out of scope at present)&lt;br /&gt;
&lt;br /&gt;
* Design decision: Grades will only go from Moodle to SchoolTool.&lt;br /&gt;
* Design decision: For auth/enrollment/grades, only one side is ever authoritative. We are not going to synchronize both ways simultaneously.&lt;br /&gt;
* Design decision: Regardless of which system is driving auth/enrollment, SchoolTool must be the authoritative reporting system.&lt;br /&gt;
&lt;br /&gt;
* What user data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** Moodle &amp;amp; SchoolTool will share an idnumber(UUID) for each object they share.&lt;br /&gt;
** Which user profile fields do SchoolTool &amp;amp; Moodle have in common?&lt;br /&gt;
** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
** Perhaps leave it up to Moodle admin whether to leave profile fields that can come from SchoolTool editable or locked.&lt;br /&gt;
** Each system must be able to send enough data to the other for a login account to be created.&lt;br /&gt;
** The integration will have a mechanism to prevent student logins even when their accounts exist (and SSO is configured). (This will be some sort of flag, that applies to groups so nobody needs to set it for each user. Ugh.)&lt;br /&gt;
&lt;br /&gt;
* What enrollment data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** What are SchoolTool&#039;s course status concepts, and how will these interact with Moodle? (e.g., is enrollment simply binary, or are there other status options?) -- Status will be added soon (see SchoolTool TODO list). Enrollment in SchoolTool consists of a group of students and a group of teachers associated with a course section. Moodle will simply treat all of these teachers as editing teachers and all of these students as students (as opposed to other roles).&lt;br /&gt;
* What grade data will go between Moodle &amp;amp; ST?&lt;br /&gt;
** One grade/student/course, or one grade/assessment/student/course? (Eventually want to provide admin(?) with option.)&lt;br /&gt;
* Identify MNET interfaces published by Moodle &amp;amp; ST for this integration.&lt;br /&gt;
* Produce mock-ups of the SSO, enrollment, &amp;amp; grading data. (XML)&lt;br /&gt;
* Where will the python mnet library live?&lt;br /&gt;
* Can we allow the admin to choose whether auth directory goes from SchoolTool to Moodle or vice-versa?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* Can we allow the admin to choose whether enrollment authority is in SchoolTool or Moodle?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* What will the code between SchoolTool and the python MNET library look like? (This is probably where zope-related considerations come into play.)&lt;br /&gt;
** What, in summary, does MNET provide?&lt;br /&gt;
*** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
*** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
*** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
* Planning TODO list&lt;br /&gt;
** Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** 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.&lt;br /&gt;
** Prototype user creation via XMLRPC (as if Moodle sent info for a new user).&lt;br /&gt;
** Optional: Prototype course creation in SchoolTool (as if Moodle sent info about a new course).&lt;br /&gt;
** Also optional: Prototype section creation in SchoolTool.&lt;br /&gt;
** Yet again, optional: Prototype section enrollment in SchoolTool.&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14151</id>
		<title>SchoolTool Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=SchoolTool_Integration&amp;diff=14151"/>
		<updated>2009-06-30T20:35:34Z</updated>

		<summary type="html">&lt;p&gt;Moquist: /* Moodle mnet Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://schooltool.org 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.&lt;br /&gt;
&lt;br /&gt;
==Goal: Moodle-SchoolTool integration modeled on Moodle-Mahara integration.==&lt;br /&gt;
* SchoolTool-Mahara integration should require very little extra effort when this project is complete.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* SSO between SchoolTool and Moodle&lt;br /&gt;
* Auto-enrolment in Moodle tracking enrolments in SchoolTool&lt;br /&gt;
* Automatic grade transfer from Moodle to SchoolTool&lt;br /&gt;
* Completely web-based integration configuration (similar to Moodle-Mahara configuration)&lt;br /&gt;
&lt;br /&gt;
==Supported versions==&lt;br /&gt;
* SchoolTool 1.0&lt;br /&gt;
* Moodle 1.9.5+&lt;br /&gt;
&lt;br /&gt;
==Background info and references==&lt;br /&gt;
* [https://docs.moodle.org/en/Grades Moodle 1.9+ gradebook]&lt;br /&gt;
* [https://docs.moodle.org/en/External_database Moodle external DB enrolment plugin ]&lt;br /&gt;
&lt;br /&gt;
==Implementation notes/ideas==&lt;br /&gt;
* The [http://git.catalyst.net.nz/mnet.git/ PHP mnet library] will be ported to python.&lt;br /&gt;
** SchoolTool will need to use this library. Discussion about plugin architectures (auth, enrolment, grades) underway in #schooltool on freenode...&lt;br /&gt;
* 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.)&lt;br /&gt;
* Moodle will need an enrolment plugin that gets data from mnet but is otherwise modeled on the external DB enrolment plugin.&lt;br /&gt;
* Moodle will need a gradebook plugin (does this even exist? or something...) that can pass grades to SchoolTool via mnet.&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
* mnet library porting ASAP (Brett)&lt;br /&gt;
* mnet interface and data content examples drawn from Moodle as input to SchoolTool design ASAP (Matt)&lt;br /&gt;
* SchoolTool-side planning/spec meeting TBA&lt;br /&gt;
&lt;br /&gt;
==Data Samples==&lt;br /&gt;
===Auth/Profile===&lt;br /&gt;
* idnumber,lastname,firstname,username,email,&amp;lt;other profile fields TBD&amp;gt;&lt;br /&gt;
===Course===&lt;br /&gt;
* courseid, course name&lt;br /&gt;
* does this map to a moodle metacourse?&lt;br /&gt;
&lt;br /&gt;
===Section===&lt;br /&gt;
* sectionid, courseid&lt;br /&gt;
* this maps to a regular (non-meta) moodle course&lt;br /&gt;
&lt;br /&gt;
===Enrolment===&lt;br /&gt;
* userid, courseid, role?, course name?, status?, credits?, other?&lt;br /&gt;
&lt;br /&gt;
===Assessment===&lt;br /&gt;
* assessmentid, assessment name, point value, ismidterm, isfinal, isrequired, isextracredit&lt;br /&gt;
&lt;br /&gt;
===Grade===&lt;br /&gt;
* userid, courseid, assessmentid, points earned, other?&lt;br /&gt;
&lt;br /&gt;
==Moodle mnet Interfaces==&lt;br /&gt;
* existing: SSO IDP interfaces&lt;br /&gt;
** in integration v1.0, SchoolTool will only be a Service Provider and Moodle will always be the IDentity Provider&lt;br /&gt;
** returns user data sufficient to create account&lt;br /&gt;
* list_user_enrolments(user)&lt;br /&gt;
** returns a list of all enrolments for a given user&lt;br /&gt;
** SchoolTool may call this to get enrolment data ASAP when an unknown user authenticates and an account is created using user_authorise()&lt;br /&gt;
&lt;br /&gt;
==SchoolTool mnet Interfaces==&lt;br /&gt;
* new_user(userdata)&lt;br /&gt;
** create new user account&lt;br /&gt;
* new_section(sectiondata)&lt;br /&gt;
** create new section&lt;br /&gt;
* new_enrolment(enrolmentdata)&lt;br /&gt;
** create new association between user &amp;amp; section&lt;br /&gt;
* new_assessment(sectionid, assessmentdata)&lt;br /&gt;
** create new assessment to be displayed in grade reports&lt;br /&gt;
* new_grade(userid, assessmentid, gradedta)&lt;br /&gt;
** enter grade for grade reports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planning meeting prep/notes (to be integrated above after meeting) ==&lt;br /&gt;
* When: Friday, June 5 at 10am EST&lt;br /&gt;
* Where: #schooltool-moodle on freenode&lt;br /&gt;
&lt;br /&gt;
* Write down some use cases about ST+Moodle integration&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, leave Moodle as authoritative user directory, enrollment management system.&lt;br /&gt;
*** This is what ECHS wants.&lt;br /&gt;
*** If Moodle drives auth, then no accounts manually created in SchoolTool can become integrated with Moodle.&lt;br /&gt;
*** If Moodle drives enrollment, then all course creation and enrollment updates must happen first in Moodle and be transferred from there to SchoolTool.&lt;br /&gt;
*** ECHS wants student-driven enrollment.&lt;br /&gt;
*** An interactive enrollment in Moodle kicks off an immediate transaction to record the enrollment in schooltool.&lt;br /&gt;
** Drop SchoolTool into existing Moodle site, after bulk data transfer from Moodle-&amp;gt;SchoolTool, flip configuration and use SchoolTool as the authoritative user directory and/or enrollment management system.&lt;br /&gt;
*** Could this be used to migrate to SchoolTool from another SIS (integrated somehow with Moodle) by way of Moodle?&lt;br /&gt;
** Start fresh with both.&lt;br /&gt;
** Drop Moodle into SchoolTool site.&lt;br /&gt;
*** maybe not important for v1.0, might basically come for free&lt;br /&gt;
** Drop SchoolTool into Mahara site (and vice-versa, out of scope at present)&lt;br /&gt;
&lt;br /&gt;
* Design decision: Grades will only go from Moodle to SchoolTool.&lt;br /&gt;
* Design decision: For auth/enrollment/grades, only one side is ever authoritative. We are not going to synchronize both ways simultaneously.&lt;br /&gt;
* Design decision: Regardless of which system is driving auth/enrollment, SchoolTool must be the authoritative reporting system.&lt;br /&gt;
&lt;br /&gt;
* What user data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** Moodle &amp;amp; SchoolTool will share an idnumber(UUID) for each object they share.&lt;br /&gt;
** Which user profile fields do SchoolTool &amp;amp; Moodle have in common?&lt;br /&gt;
** SchoolTool only cares about enough to create a login account.&lt;br /&gt;
** SchoolTool does not care about student-editable profile fields.&lt;br /&gt;
** Perhaps leave it up to Moodle admin whether to leave profile fields that can come from SchoolTool editable or locked.&lt;br /&gt;
** Each system must be able to send enough data to the other for a login account to be created.&lt;br /&gt;
** The integration will have a mechanism to prevent student logins even when their accounts exist (and SSO is configured). (This will be some sort of flag, that applies to groups so nobody needs to set it for each user. Ugh.)&lt;br /&gt;
&lt;br /&gt;
* What enrollment data will go between SchoolTool &amp;amp; Moodle?&lt;br /&gt;
** What are SchoolTool&#039;s course status concepts, and how will these interact with Moodle? (e.g., is enrollment simply binary, or are there other status options?) -- Status will be added soon (see SchoolTool TODO list). Enrollment in SchoolTool consists of a group of students and a group of teachers associated with a course section. Moodle will simply treat all of these teachers as editing teachers and all of these students as students (as opposed to other roles).&lt;br /&gt;
* What grade data will go between Moodle &amp;amp; ST?&lt;br /&gt;
** One grade/student/course, or one grade/assessment/student/course? (Eventually want to provide admin(?) with option.)&lt;br /&gt;
* Identify MNET interfaces published by Moodle &amp;amp; ST for this integration.&lt;br /&gt;
* Produce mock-ups of the SSO, enrollment, &amp;amp; grading data. (XML)&lt;br /&gt;
* Where will the python mnet library live?&lt;br /&gt;
* Can we allow the admin to choose whether auth directory goes from SchoolTool to Moodle or vice-versa?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* Can we allow the admin to choose whether enrollment authority is in SchoolTool or Moodle?&lt;br /&gt;
** Definitely want bulk update via cron available for the chosen transfer direction.&lt;br /&gt;
** Optionally allow on-demand update per user if used before bulk update via cron. (Moodle works this way now.)&lt;br /&gt;
* What will the code between SchoolTool and the python MNET library look like? (This is probably where zope-related considerations come into play.)&lt;br /&gt;
** What, in summary, does MNET provide?&lt;br /&gt;
*** MNET is an XMLRPC implementation that dispatches messages to applications on either side (with a convention for function naming).&lt;br /&gt;
*** MNET has a security layer that enforces that every message is encrypted and signed (with regular key rotation).&lt;br /&gt;
*** MNET provides a core set of modules to provide common functionality such as SSO, key discovery, ping, and course enrollment.&lt;br /&gt;
&lt;br /&gt;
* Planning TODO list&lt;br /&gt;
** Find out what reports ECHS will want from SchoolTool&lt;br /&gt;
&lt;br /&gt;
* SchoolTool TODO list&lt;br /&gt;
** 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.&lt;br /&gt;
** Prototype user creation via XMLRPC (as if Moodle sent info for a new user).&lt;br /&gt;
** Optional: Prototype course creation in SchoolTool (as if Moodle sent info about a new course).&lt;br /&gt;
** Also optional: Prototype section creation in SchoolTool.&lt;br /&gt;
** Yet again, optional: Prototype section enrollment in SchoolTool.&lt;br /&gt;
** Create an &amp;quot;ongoing section&amp;quot; container that will contain (otherwise normal) sections that do not fit into the year/term schema.&lt;br /&gt;
*** integration v1.0 will place all Moodle-driven sections in the &amp;quot;ongoing&amp;quot; container&lt;br /&gt;
** Add support for section history&lt;br /&gt;
*** grading history&lt;br /&gt;
*** enrollment history (including all enrollment status changes)&lt;br /&gt;
*** teacher history&lt;/div&gt;</summary>
		<author><name>Moquist</name></author>
	</entry>
</feed>