At the University of South Australia we have a very large Moodle instance, this year we've had over 40,000 individual students login and access the system (UniSA and OUA students) and over 2500 courses created and used. Our Extensions module has had over 200,000 requests! I myself have been working with Moodle since 2009 here at UniSA and as such we've made a lot of interesting improvements and enhancements to our Moodle instance. For various reasons, the code for these is stuck in 1.9 Moodle-land and as such we have a lot of work to do to bring these changes into 2.x.
At MoodleMoot 2012 we met a lot of people from the Tertiary sector that were as passionate as we are about moving Moodle forward, especially for our sector. We were excited to hear the new Assign module would have extensions, however it doesn't implement as much functionality as we have now. To resolve this, we're planning that starting in the next couple of weeks and continuing into the new year we will port our existing Extensions module to Moodle 2.4 and, once it's close to stable, release it to the community.
It should be said that the Extensions module was intentionally specced and written to suit UniSA, and what our Academics were asking for. For our development efforts in porting the module this does need to be our primary focus, but given that we're intending to release this to the community we are certainly willing to hear suggestions from the community. We'll do our best to implement suggestions that will improve the process, but there will likely be items we can't do due to time constraints. I'm sure you'll understand, but of course that's where the community comes in, and the open nature of the module will mean that anyone is free to modify the code to suit them and contribute it back (or not!)
Our current implementation isn't perfect. On the surface it works well, but under the skin there is a lot of work to do to port it following the full Moodle standards, with a view to having the code extensively used out in the community (particularly the Higher Ed sector).
Now, to whet your appetite, what we have now is as follows. As they say, a picture is worth 1000 words, so I'll include some screenshots of what functionality we have currently. As an aside, our Extensions module also integrates with Quiz (1.9, slight hack there!). Bear with me while these screenshots step back in time to 1.9!
Firstly, creating an Assignment goes through a Wizard (this will also be ported to 2.4 at a later date) we have a page which allows the creator to enable or disable extension requests by students, and of the course staff, who can approve these requests. Some details have been obscured for privacy.
The academic will then proceed through the remainder of the Wizard, and the assessment item or Quiz is then created. The final page of the Wizard is the 'Standard' Moodle activity add screen, they will set the remainder of the details (such as due date) just as they would in any other Moodle instance. Here we have tight integration with other UniSA systems, so due dates, summative/formative status come from an up-stream system. That's a whole other ballgame I won't go into here
The real benefits we feel are in the Student side. In our system Students can view a list of all assessment items, and for any quiz or Assignment where the extensions are permitted they may request an extension via Moodle, rather than having to contact the course staff off-line or via email. The staff member is then free to approve or deny the request or ask for further information, via a selectable status. Once it's been approved, this can then be withdrawn by the student if they choose to, or the staff member can revoke the extension should they need to.
Now, onto the process of requesting an extension.
Firstly, they select the Extensions link in our Course Essentials block:
This block is specific to UniSA - for the community release of Extensions it will be written to support the standard Moodle menu functions. This block may be released to the community, but again it's quite specific to our environment so may be of limited use to other organisations.
When the student accesses the Extensions link, they're presented with a list of their current extensions, and they have the ability to request a new extension. We're using full Moodle Forms functionality for all screens, it should be mentioned, so a lot of these pages will port to 2.x really easily. Again I've obscured personal details for obvious reasons.
Now, this student is free to request another extension, as their extended due date has not yet passed. Our business rules allow students to request a new extension until the due date has been met, whether that's the actual assignment due date, an extension or even a global (group level) extension (to be discussed below). My intention is to make that functionality modifiable by the institution using the module; as that may not suit everyone.
In this case, I'll show requesting an extension for Assignment 2, Report Internals:
As you can see, there is clearly an area where a student can tell the academic that the dog ate their homework, and we've got the provision to upload supporting documentation to go along with the request (sick certificates or whatever the case may be). Finally, they may select a date in the future (ours defaults to a short date, again this would be another configurable parameter). Finally, they select a staff member from the drop down. These staff members are as selected in the Wizard; however again this will need to be configurable in the community version of this module so that it works standalone.
Unfortunately, I did not have a screenshot of the 'pending' request, however it looks like the previous student request simply with 'Approved' reading 'Pending'.
On the Assignment page, we can see the student can clearly view this information. Automatic Extension refers to a 'Global' or Class level extension, to be discussed below.
Now, onto the Staff side.
The module is written such that it detects if the user viewing the module is Staff or Student, and presents the relevant view to the user at the time. Staff have the ability to 'Quick Approve' should they choose to, by simply selecting a checkbox on the items they wish to approve, and then pressing the relevant button.
This screen also give the ability for a staffmember to grant an extension for a student in their class, which allows for cases where a student may not be physically able to request one, such as hospital illness or other reasons.
Please excuse the screenshots, I needed to split them in two due to the way I was capturing them, but please be assured they are all on the one page, and everything does line up Everything does look better in the real module, I needed to squash the browser down for capture. Again i've obscured personal details.
Now, should the staff member select the Status (it will generally show a string representing it's current status) they will have the ability to view and modify the extension itself. In this window we will see details of the student who requested the extension, their message (I blanked it out in this case as it was personal). We can also see there were no documents supplied, but should they be supplied they will present as a URL and will open in the relevant application (PDF Reader, Word etc).
So, that's the bulk of the Individual Extension Requests stuff. This side of it is quite straight forward, and I don't expect any issues with getting this part to work. I have a number of ideas on how to get this working with the Assign module (the new 2.3 one); I was hopeful the Extensions implemented in the new module would use one of the Submission plugins (the architechture of that is really nice under the skin, fwiw) however what has been implemented is deeply built into the system and in my 2hr look at the code doesn't appear to be 'pluginable'.
Thoughts are that we could modify Assign to work with a submission plugin for the assignment dates, or this module could simply write to the new column in the table and save the date there - but that would be frought with danger no doubt. We really want to avoid custom local hacks wherever possible, as we want this code to work for as many people as possible.
We also need this to work for Quiz, as we currently have that functionality. I haven't done extensive investigation on how to implement that side of it yet, either, but like the above it's a problem that doesn't need immediate resolution; but we'll need to think about it soon.
I'll gloss over Global extensions, it works a little like the above, except for the fact that students cannot request it (at least via Moodle). It's useful for instances where for example, an class may have public holiday on a Monday and they miss a lecture, but another class gets their lecture on a Tuesday. Of course it would also be useful for lecturer illness, etc.
As we can see here, we have seperate assignments for Internal and External students, and this academic has been nice enough to grant an extension until December 17th. The Grouping listed is just the Grouping assigned to the Assignment, not actually who it's applied to.
On the Edit screen, it's quite self explanatory. We see the original due date, and the new date selected. The staff member also has the ability to add a message to explain why the extension has been granted.
Finally, we have a new moodle form item we've created called the Select Picker. It will show Available Items in the Right hand side, and Selected items on the left. It works as you'd expect - double click will move the item from one side to the other, as will selecting and then clicking a button to move it. It works with all the standard Moodle error 'stuff', for example you can validate the input in the normal way, and it will present the error. It's essentially a custom group item.
So, that's the bulk of it. We'll have our work cut out for us, but for developers like myself this is the kind of thing we love We're really interested to get community feedback on this, so any suggestions can be considered for inclusion in the beginning.
Ultimately we would like to see this code make it into Core and for it to be maintained by the community - a lofty goal. But, lets not put the cart before the horse, we've got a lot of work to do between now and then
I'm going to start porting our code inside the next week, but then I'll be on leave for a few weeks in late December for Christmas, and then in the new year I'm back on deck and will be working on this (and other aspects of our M2 implementation) full time again. I'll keep tabs on this thread over the Christmas break, but I won't be doing much development on this during that time.
We're excited to get some feedback on this, positive and negative, and we're excited to to get this up and running!