How modern is your e-learning?

E-learning has come a long way since I first started lecturing in 2006. We now have tools to build more supportive and engaging learning which can ultimately contribute to more efficient working practices and better success rates for our learners.

With such rapid developments in the field it’s easy for organisations to fall behind; what passed for an advanced online course a decade ago is now comparably frustrating for learners.

Consider your own organisation – compare the way you use e-learning now to the way it would have been used 5 years ago (a world without the iPad!). Would a learner notice the difference, and would they have a significantly better experience?

Course content

Content is a good indicator of how up-to-speed your e-learning is. Older courses tend to be comprised of static content in the form of PDF documents and Powerpoint presentations. Learners are usually expected to download and work through these items separately, sometimes even printing them off to be submitted by hand!

Let’s be clear; no student wants to access a course only to be immediately confronted with endless lists of documents and presentations. This is equivalent to guiding your learners into a dusty library and leaving them to get on with it.

That said, static resources do have their place, especially where you are sharing content which has been referenced during face-to-face contact, but they must be well structured.

Think of these resources as a part of reference library which is available alongside other e-learning content. Build an area within your course which houses these resources in an indexed fashion so that the learner can easily access and browse the library if they choose to.

Rich media

A better approach for content is to embed it into the course using modern web technologies, allowing the learner to dip in and out of the content without being taken away from the course itself.

Typical examples include rich text web pages, embedded videos, and SCORM activities or more niche examples such as interactive timelines, geographical maps and other forms of data visualisations.

Take some time to think through how your learners will navigate this content. It must be clear to the learner where they are expected to start and in what order they should approach the materials you have made available.

Structure and pathways

You must clearly identify the learning objectives for a course. Ideally these objectives should be visible throughout the journey, highlighting the current learning objective that is being worked towards.

The best e-learning courses use completion tracking to monitor what a learner has done so far and when used in combination with assessments this can even be used to dynamically tailor the learner’s pathway dependant on how well they learn.

Tracking of resources usually takes the form of a tickbox which can be automatically marked when a learner accesses a piece of content, or which learners can manually mark off when they have finished with a piece of content.

Many administrators get pre-occupied with the concept of tracking the learner’s every movement on the site in order to ensure they have watched every second of a video or worked through every part of a SCORM package. The truth is that the best way to monitor your learner’s progress is through good summative assessment throughout the course.

Finally, remember to consolidate the learning towards the end of your course. Use a quick video or even just a bullet point list to remind them of the objectives they’ve covered.

AutoEnrol 1.3 Available Now!

A new version of the AutoEnrol enrolment method has been released, with support for Moodle 2.6, 2.7 and 2.8.  You can grab a copy here!

Whats New?

  • Support for Moodle 2.6, 2.7 and 2.8
  • Reworked group logic; you can now rename any automatically generated groups and newly enrolled users will still be placed correctly.
  • Group cleanup, you can set AutoEnrol to leave the groups it has created even when you delete the instance which created them.

AutoEnrol for Moodle 2.7

There’s been lots of questions and interest in AutoEnrol ever since Moodle 2.6 came out. I’ve now got some time to put together an updated version and there are a few new functions in Moodle which I want to take advantage of in the next release. My plan is to release an updated version with Moodle 2.7 compatibility in the next few weeks.

As for the longer term picture with AutoEnrol, I originally developed the plugin because I felt cohorts did not offer a flexible enough mechanism for getting users onto a course quickly. Since then cohort functionality and efficiency has improved greatly, and I am wondering whether it would be better to build a mechanism for dynamically populating cohorts so that they can be added to a course.

I’m keen to hear thoughts on this and will probably fire up a discussion on the Moodle forums soon. If you have any thoughts you would like to share now please do leave a comment for me here!

Beautifying Calendar Filters

Since Moodle 2.4 we have all been treated to some great new icons which look modern and clearly communicate the purpose they serve. I’m a huge fan of this and all the design work which is now going into Moodle releases, however the new icons have caused a few problems in production.

I particular their medium-grey colour can make them difficult to distinguish on a dull background, and in general they just look best on either a very light or very dark background. The calendar filters are one example where the icons don’t really stand out as well as they could against the background. Here’s how they look by default:

default events key
The default events key.

This is difficult because personally I want my event colours to be quick a bit darker than the defaults, but I also want to avoid having the icons fade into the background in this events key.

My solution was to style the icons onto a plain background and to use the border colour to differentiate the different types of events in the events key list. Combining this with border radius and an “inset” border style I was able to create a modern looking list of icons which stand out clearly and have good browser compatibility:

improved events key
My improved events key

If you’d like to try this out for yourself you can find my CSS below:

/*event colours*/

.filters .calendar_event {
margin-bottom: 8px;
font-size: 1.2em;
.filters .calendar_event a {
text-decoration: none;
/*the icon span is first child but has no class or id*/
.filters .calendar_event span:first-child {
display: inline-block;
border: 3px inset #333;
border-radius: 100%;
background-color: white; /*same as block bg colour*/
position: relative;
padding-top: 2px;
height: 18px;
width: 20px;
margin-right: 5px;

.calendar_event_group {
background: #E18B2D;
.filters .calendar_event span.calendar_event_group {
border-color: #E18B2D;

.calendar_event_user {
background: #955282;
.filters .calendar_event span.calendar_event_user {
border-color: #955282;

.calendar_event_course {
background: #1AB388;
.filters .calendar_event span.calendar_event_course {
border-color: #1AB388;

.calendar_event_global {
background: #0080db;
.filters .calendar_event span.calendar_event_global {
border-color: #0080db;

Delegated Transactions with $DB

For the last couple of days I have been working on a new plugin called “MIS Enrolment” which allows you to connect to records on an external database and then enrol users onto a Moodle course based upon their participation within that programme. The enrolment method works by allowing teachers to create an abstract “link” between their course on Moodle and their programmes held by MIS.

Enrol MIS Instance
Teacher’s admin panel for linking their Moodle courses to MIS “programmes”

This creates a many to many relationship between Moodle courses and MIS programmes and will allow teachers to easily enrol both staff and students onto the correct courses based upon the records held by an organisation’s MIS. More information to come on this over the next few weeks!

For now I am revisiting an old problem which I originally dealt with in my first month of developing for Moodle 2. In order to get this enrolment method working effectively we have to create and maintain an internal copy of the data from MIS. Normally you could just truncate (wipe clean) your records and insert them again from source, but in this case I need to compare and check:

  • What records already exist? Do they need updating?
  • What records are new? They will need inserting!
  • What records are missing from MIS? They will need archiving!

And when you are looping through 10,000 records or more this can all result in a great many individual inserts, selects and deletions. So how can you maximise the efficiency of all this? This time round I am making use of delegated transactions in Moodle to handle the bulk of database inserts.

The mechanism effectively defers all the transactions with a database to one large transaction at the end of a process. As a result you can save lots of memory and significantly reduce execution time because your script isn’t constantly waiting on the database to return some data.

For comparison I tried inserting my test participation data of 9483 new records. Using the standard DB functions the script took 47 seconds to execute, working at a steady 202 transactions per second. By comparison the delegated transaction took just 10 seconds to handle exactly the same data inserts, an effective rate of 948 inserts per second.

If you are working with large datasets on Moodle I would definitely suggest checking this functionality out as part of your project!

AutoEnrol 1.2 now stable

After a couple of months in testing AutoEnrol 1.2 has now been given a stable release at There are a fair few additional settings to get your teeth into now, but the module works pretty much the same at it’s heart and can be updated from any previous version.

You can download the new version from either of the links below

I’m still keen to hear feedback on this release so if anyone has any feedback for how the plugin could be improved please do drop a reply to this post or send me an email.

Add custom CSS to your Moodle theme.

I’m just getting set up for a fringe session as part of JISC’s Discover-e 2013 called “The V Factor”. The session is going to be looking at how to give Moodle a bit more of a wow factor and in the first section I will be talking about how to add some custom CSS to your themes.

I thought I would post up a few resources for anyone who would like to take a look and maybe try this themselves. Remember that in order to do any of this you will need access to the Moodle folder on your web server as well as an admin account. Make sure you back up any files you edit as this can save any headaches.

You’ll need a plain text editor like Notepad++

My AutoHide CSS file for cleaning up editing mode.

My new Crumbs CSS file for polishing up the navigation breadcrumbs

You can follow the process on this video tutorial.


Try AutoEnrol 1.2 today!

AutoEnrol 1.2 Logo

 I’ve had some tremendous support and positive comments from the Moodle community since releasing AutoEnrol over a year ago. It’s clear that people are stretching the plugin and finding some pretty awesome uses for it and as such there have been a few features which seemed to be sorely missing from the plugin.

Earlier this week I released AutoEnrol 1.1 on to purely deal with some compatibility issues with Moodle 2.5 and this remains the current stable version.

Today however I am happy to present AutoEnrol 1.2 which introduces a whole raft of new features and remains compatible with Moodle 2.0 to Moodle 2.5. Here’s a run down of what’s new:

  • It is now possible to add multiple instances to a single course.
  • Added an option to give instance a custom label.
  • Filtering functions now allow for partial matches.
  • Expanded filtering functions to include email address.
  • Added an option to limit number of enrolments. 
  • By default, users are now only enrolled if they aren’t already enrolled on a course.
  • Individual users can now be manually unenrolled through Users > Enrolled Users.
  • Where a user has the “unenrolself” permission and users are being enrolled on “Loading the Course” they can now unenrol themselves from the settings block.

AutoEnrol 1.2 Form

The plugin is available as a Release Candidate from here: AutoEnrol 1.2rc2. As ever I’m really keen to get feedback on this release, so if you have any suggestions please leave a comment!

**update: RC2 now supports self-unenrolment.

Making the most of AutoEnrol

After a year of testing I added a couple of tweaks to AutoEnrol and officially raised its status to stable. Since then the plugin has had a good amount of downloads and I really want to thank everyone for their support!

Enrolment Plugin 101

As with any enrolment plugin in Moodle 2 the administration really occurs on a course by course basis. If you go to any course which you are a teacher on and have a look under the settings block you should see course administration – users – enrolment methods. This is a new interface in Moodle 2.0.

Enrolment Methods Page

Put simply, this page will explain how users are getting access to your course. If you look under the main table you should also see a drop down menu of possible enrolment methods you can add to a course.

If you select AutoEnrol and add it to your course with the default settings it will happily get to work enrolling anyone who visits the course as a student. In the example above you can see that Auto Enrol has already successfully enrolled 5,395 users onto the course in questions (a student help course).

Getting more from AutoEnrol

There are four optional settings for AutoEnrol which are controlled by a couple of permissions. These can be revealed by clicking the show advanced option.

AutoEnrol Configuration

The first is pretty straightforward and let’s you choose the role you wish to assign to users. This is set to student by default but I have changed this to teacher in the past for setting up sandbox courses and the like.

The next option defines when the user actually gets enrolled on the course. By default this is configured to enrol a user as they load the course, which is particularly useful when the user has been provided with a direct link from either another page or course or indeed an email. Sometimes however it is useful to have a user enrolled as soon as they log into the site, for example a student help course, and this configuration also supports that option. I would recommend using this option sparingly to keep log in as short as possible.

The Less Obvious Stuff

Group By is where the really advanced techniques start. It allows you to select a particular field from the mdl_user table by which to group your users. If you have accurate department information for example you could group members of staff by their department. At BSDC we store account type in the institution field meaning we can group users into Staff or Student.

Of course once your groups are in place you can use the grouping functionality in Moodle 2 to control what some users see such as staff-only content.

The final option builds on the filter and simply allows you to filter users by a specific string. So if I wanted to only enrol students on a questionnaire course for example I would group by institution and then filter by “student”. AutoEnrol will now only enrol students on to this course

Using these two options in conjunction with some good user administration will give you a great deal of control over who can access what.

In ProMonitor the Course is King

When I first switched from teaching to development one of my biggest dislikes was having to manually transfer feedback from my Moodle Assessments to the student records on ProMonitor, the E-ILP system used at BSDC.

I’m now looking at the possibility of developing an Advanced Grading Method for Moodle 2.2+ which can be driven by the markbook structure in ProMonitor. My hope is that I can present the tutor with a form which matches up to their gradebook in ProMonitor 100%; something which 9 other colleges in the UK have expressed an interest in!

Today I have been looking at how the grading method will be related to ProMonitor’s database. Initially I was quite optimistic that it would be easy to select a course, followed by a unit, and finally an assessment which you wanted to use for the grading structure. This is a simple workflow which makes sense, but unfortunately it doesn’t reflect the way that people use ProMonitor.

ProMonitor's Course Structure
ProMonitor’s Course Structure

For example, if you have an option of three routes on the second year of a BTEC programme, the probability is that each route will share a large number of units. In this case you will have three ProMonitor courses each containing the same unit.

Unfortunately ProMonitor’s approach to solving this is to allow tutors to clone assessment units in the database. In order to allow tweaks and changes to be made to one and not the other these clones are duplicated in the database with no common identifier shared between them. Even if there was a common identifier it would not be sensible to assume the structure was remained identical on each unit. In other words we have to accept that the unit within each course unique.

Assessment Clones
Assessment Clones

The easy solution is to make my new grading method refer to one “course” only and expect our Moodle users to create separate assessment activities for each path of the course where they might not have done before. This is not ideal but at least gives us a safe fallback position.

One option may be to write a method of finding duplicated assessment structures and “undoing” the duplication within the database. The worry with this is that an assessment structure may change after the grading method has been added to the assessment which would lead to problems when trying to synchronise with ProMonitor.

The better solution may be to alter my workflow allowing tutors to add multiple courses/unit/assessments to the grading method and then dynamically switching to the correct one for each student. However, this raises the prospect that a student may have more than one applicable assignment, in which case we would need to ask the tutor which they would like to grade. Alternatively the student might not be enrolled on any of the assessments, in which case we would have to present the tutor with an error message.

Fingers crossed I can come up with something that works well for everyone!