Updated for 2022 and Moodle 3.11

What do previous participants say about this course ... ?

  • 100% found it useful and interesting
  • 66% rated the course as Excellent
  • 100% thought the content was at the right level
(This feedback is genuine and was provided anonymously)

MoodleBites for Developers Level 2 is one of our technical courses. It is not suitable for beginners, or those with no previous development experience. However, if you are interested in an introductory level course for Moodle development, please review the MoodleBites for Developers Level 1 course.


Because this course is specialist, it runs just twice each year (numbers are limited, so please register in plenty of time):

  • 1st May
  • 1st October

This course is 8 weeks in duration, asynchronous, and completely online. Each week contains approximately 2-4 hours work, although this varies depending on your experience with Moodle and development in general, and how much extension work you wish to complete.

It is an 8 week series of units focused on key areas of Moodle development. Each unit is comprised of tutorials, screencasts, documentation and practical exercises. There are no live classes, but participants are encouraged to participate in forums and to post the results of their practical assignments for the others to see.

MoodleBites for Developers Level 2

OpenBadges logo

Richard JonesLead facilitator for this course is Richard Jones, senior e-learning consultant and developer with HRDNZ. Richard's international background includes computer science and programming, and he has been involved with Moodle and e-learning for many years. His latest Moodle plugin is the Simple Lesson - extending the capabilities of Moodle's sophisticated Lesson module.

Justin HuntCo-advisor is Justin Hunt, well-known in the Moodle community for his outstanding contributions to Moodle including PoodLL - an extensive and integrated plugin suite of modules and filters that allows students to record audio or video, or draw/upload pictures as assignment submissions, with a repository, feedback, and questions types.


MoodleBites for Developers Level 2 is USD $950 per person at this time we are able to offer a discount to a special rate of USD $799 but places are limited - so book early to avoid disappointment!  Also note that if you have previously completed MoodleBites for Developers Level 1 you can discount an additional $100! smile If you wish to translate this value to your local currency please visit: http://www.xe.com/ All invoices in US Dollars USD$ (Euro invoices available by special request). You can register for the course using the "Register Now" link on the Front Page.

This is a technical course, designed for people with some background in development. This course is not suitable for people who have no experience in development (please review MoodleBites for Developers Level 1).

Course outline

Course outline Pre-requisites: Participants should have some experience with PHP to get the most from the course. Since this is a course for developers, there will be a lot of code examples and weekly short programming assignments. Participants should have completed MoodleBites for Developers Level 1 or be familiar with the content covered there.

Technical requirements

  • A web server with Moodle 3.4 or greater installed
  • SSH or command line access to the server
  • If you have web server that you rent from bluehost, godaddy or similar services then you can use that for development. Or you can set up a web server on your windows or mac using XAMPP. See: https://www.apachefriends.org/index.html
  • Information on how to install Moodle on your server can be found here: https://docs.moodle.org/en/Installing_Moodle
  • It's OK to use the same server for several Moodle sites, but don’t try to develop on a production Moodle site.

The course follows the general pattern of MoodleBites for Developers level 1 with descriptions of the key APIs followed by relatively short tasks to illustrate them and to test your understanding. Material that was covered in MoodleBites for Developers Level 1 is only briefly recapped. If you want to take this course without having taken the Level 1 course you may have to double the proposed weekly study time.

  • Week 1 - In the first week of the course we set up development environments, set expectations, cover course orientation and download our first plugin template. We discuss automated class loading.
    • Introduction
    • Brief recap of development environments
    • Brief recap of using git for Moodle developers
    • Creating a base plugin from a template
    • Moving code from locallib to local classes
  • Week 2 - The example plugin uses renderers to separate the output from the plugin logic as is good practice in any kind of development. We briefly re-visit the $PAGE and other output components and refactor our code to use simple permissions. We set up a couple of features: styles.css and a local class.
    • Renderers and outputting html
    • Brief recap on language strings
    • Adding simple permissions/capabilities
    • Adding styles and setting up a local class
    • Setting up a local class, namespaces and automated class loading
  • Week 3 - This week covers Moodle forms to an advanced level. We will briefly recap the material from the level 1 course before getting into the complexities associated with saving form data. Finally we save some page data to the table using a form.
    • Re-visiting Moodle forms
    • Updating the database
    • Adding a first content page and editing form
    • Saving editor files
  • Week 4 - In the week 4 we modify the plugin template to cover navigation and editing pages.
    • Re-writing plugin files
    • Multiple page navigation
    • Adding a page manager
  • Week 5 - Admin settings pages. Testing our plugin with multiple instances and roles, re-visiting the database API. User reports and multi-page output. Thinking about security.
    • A page index
    • The admin settings page
    • Sorting and paging
    • Security issues
  • Week 6 - Javascript is an increasingly important component of core Moodle and many plugins. Unfortunately there are two ways of implementing JavaScript in Moodle for historical reasons so we cover both YUI and AMD here.
    • Using YUI in a plugin
    • Using AMD/jQuery in your plugin
    • A toggle button example
    • An ATTO button example
  • Week 7 - Automatic class loading is a system for determining the location of classes from their names. This makes life easier when using APIs and can improve the performance of your plugin as discussed in Week 1. We take another look at this issue via the implementation of events and tasks.
    • Moodle namespaces and automated class loading
    • About Moodle events
    • About Moodle tasks (ad hoc and scheduled)
  • Week 8 - Is a plugin ever finished? In this week we look at ways to develop this plugin further, things we might add to promote user interaction.
    • Additional sections to add to our plugin pages