Projects for new developers

Revision as of 08:13, 21 April 2013 by Andrew Nicols (talk | contribs) (Add additional notes on the Enrolment UI project)

Jump to: navigation, search

This evolving page lists possible Moodle projects for new developers derived from community suggestions.

If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see New feature ideas.

Global Search

Global search would allow any user to search the whole Moodle site for keywords, and receive a list of matches. It must be secure, fairly fast and correct.

This project has started and stopped a couple of times. At the moment it's half-done with a plan to finish it.

The details for it are here: MDL-31989 and the spec is being updated: Global Search

Skills required: PHP
Difficulty level: Medium
Possible mentor:

Pronunciation evaluation question type

This project would expand on some work done as part of the CMUSphinx project funded by GSoC 2012. The project developed an algorithm/library that was could take some recorded audio of someone saying a particular phrase, and determine whether it was pronouced well or badly.

The goal of this project would be to take that system, and package it up as a Moodle question type, so that teachers can create a Moodle quiz that determines how good their students' pronunciation is. (Think foreign-language teaching.) Here is the documentation about creating question types.

Skills required: PHP & JavaScript
Difficulty level: Medium - Hard
Possible mentors: James Salsman & Tim Hunt

Self-assessment activity using the question bank

The basic idea is that the teacher sets up a bank of questions organised into categories. Then the student can then choose what questions they want to practice when. This is about student-centred learning based on the capabilities of the Moodle question bank.

The idea is explained in more detail in [ this blog post. (Note that I am not going to get time to do this myself!)

If you are interested in working on this, there is still a lot of work to do to decide a scope for the project. I think it is important to find a minimal 'version 1.0' set of functionality that can be build as a short project that leads to a completely working activity. Then we can add more features to that already-working core.

Skills required: PHP
Difficulty level: Medium
Mentor: Jean-Michel Vedrine & Tim Hunt

Bulk enrolment assigning enhancements

Currently enrolling/unenrolling users in multiple courses can only be done manually through the relevant courses. It would be great to be able to do this in bulk.

This project will extend the bulk user actions page (site admin > Users > Accounts) to allow assigning a role to a user in many courses easily; for example, enrolling one or more students in several courses. This bulk enrolling tool should be available for all roles within the site.

Other additional functionality should include:

  • a new filter for courses,
  • a bulk action to view a list of users with their course enrolments,
  • export the list of user enrolments to a file, and
  • other enhancements suggested by the community.
Skills required: PHP
Difficulty level: Medium
Mentor: Rossiani Wijaya

For further details see:

Form text autosave

Moodle is a web based application which makes heavy use of text input from the web browser, a common annoyance from our users is loosing that text input into the browser. A common request is for input to be automatically saved or manually saved as a draft in order that input is not lost or can be worked on between sessions. Similar functions to this exist in web applications like wordpress or Gmail.

Your task would be to implement this feature in Moodle. It is important that you make consideration of the fact that unlike other applications like blogging engines - Moodle has a wide variety of places where text would need to be stored as draft (examples: a forum post, a quiz essay question, an online text assignment) and this solution should be universal across all long text entry fields.

If you are interested in this project it is important that you research the various attempts which have been made to implement this feature in Moodle, posts on the Moodle forums and demonstrate awareness in your application.

Skills required: PHP & JavaScript [YUI]
Difficulty level: Medium
Possible mentors:

For further details see:

Implement HTML5 support as the default mode for mforms (moodleform)

We have an API to define and use forms in Moodle. This needs to be updated to support new HTML5 form attributes and elements for a better user experience.

The outcome should make the many forms defined in Moodle use HTML5 by default. (See MDL-35565)

It would be an added bonus to have the new elements incorporated into some of the more often used mforms (module settings forms, course settings forms, user forms ...).

Skills required: HTML5, PHP, JavaScript
Difficulty level: Hard
Possible mentors: Aparup Banerjee, Frédéric Massart

For further details see:

Enrolment UI improvements

The Enrolment user interface could do with an overhaul to improve its usability and accessibility. At present the key issues are:

  • pagination of enrolled displayed;
  • searching for users - currently not implemented; and
  • JS popups - broken and inefficient in places, modal + focus issues.

It would be good to write a new interface offering improvements to the existing interface. This may include features and improvements such as:

  • dynamic filtering (using JS);
  • pagination;
  • filter by letter (similar to mod_assign grading page); and
  • improved/rewritten JS popups.

Things to consider for this project include:

  • identifying the issues with the current interface, paying particular reference to:
    • courses with a small number of user enrolments;
    • courses with many user enrolments;
    • finding specific users; and
    • finding types of user.
  • and also considering:
    • how usability and user experience can be improved;
    • creating reusable components that can be used elsewhere in moodle;
    • ensuring accessibility; and
    • maintaining a basic non-javascript version of the interface.

Another pending task is to refactor the code doing manual enrolment of cohort users - MDL-35618.

Skills required: PHP & JavaScript [YUI]
Difficulty level: Medium -> Hard
Possible mentors: Andrew Nicols


There are various SCORM related projects I'd be interested in mentoring for GSOC in 2013.

  • SCORM 2004 - improve support [MDL-7068]
  • SCORM player rewrite - the player currently uses YUI2 code - it should be converted to YUI3 and improved maybe adding an HTML5 version of the player?
  • SCORM reports - there are currently 3 SCORM reports - ideas on new report plugins would be considered as possible projects.
  • Improve file linking support (MDL-25879)
Skills required: PHP, JavaScript
Difficulty level: Medium -> Hard
Possible mentor: Dan Marsden

Plagiarism plugin

Note to potential GSoC students, we are not running this project in 2013.

There are various commercial plugins available that use the Plagiarism API in Moodle, but because these plagiarism systems can require paid subscriptions, testing them can be difficult. I'd like to see a basic plugin developed that could be used for testing the Plagiarism API, providing simple useful functionality. All Plagiarism API functions for all Modules that support the API should be implemented and used. It could check the file contenthash against all other files uploaded in the Moodle files table and if a matching record is found it should display information about the duplicate submission including if the same student has submitted the file in a different course/activity or if a different user has uploaded the file with the same contenthash.

Skills required: PHP
Difficulty level: Medium
Possible mentor: Dan Marsden

Improve automated functional test writing interface

Mockup of the new interface

Automated functional testing is a huge step into the future of software development. In addition to unit testing, it allows software to be continuously tested for regressions as developers make changes to the system. This allows greater software quality, and in turn, greater confidence.

We automatically test Moodle's features by automating actions a real user would perform. This "tests" are written in a human-friendly language being made up of sentences like I follow "Edit settings" or I press on "Save changes". Currently we provide an interface to list sentences that can be used to form these "tests", called feature files. This project's aim is to improve this interface to assist developers creating new automated functional tests for Moodle.

The current user interface on the latest Moodle 2.5 development version looks like this. Sentences can be listed and filtered, but there is no further support from the page. It would be helpful to allow feature test files to be created and edited directly on this page. Users would be able to select and insert steps and add expected arguments to form sentences. Templates could be provided and tests could be syntax-checked within the interface, all with the goal of reducing human error.

A mockup of how the interface could appear is shown to the right.

Skills required: JavaScript & PHP (also Git)
Difficulty level: Easy - Medium
Possible mentors: David Monllaó, Michael de Raadt

Before applying, please be sure to read about Moodle's automated testing integration and understand it.

Assignment submission type URL submission

This is an idea for a new submission plugin for the assignment module. It will allow students to provide the URL to a webpage and the plugin will download the webpage and its embedded content to form a snapshot at the time of submission, collected together in a PDF file. The plugin will allow snapshots of multiple pages to be added to form a single submission. Optionally students could also provide correct bibliographic fields to identify the webpage author etc.

There is a skeleton of this plugin available as a starting point so the parts that would need to be implemented have less to do with the Moodle API and more to do with general php/curl development.

Skills required: PHP (also Git or others source version control systems)
Difficulty level: Medium
Possible mentor: Damyon Wiese

Portfolio plugin for Evernote

It would be nice to provide students with a Portfolio plugin to export information from Moodle straight to their Evernote account. The Evernote notes system is quite flexible and allows for content and attachments to be included together, unlike other portfolios systems that Moodle can export to.

This involves:

  • communicating with an external API,
  • gathering different types of content,
  • reformatting the content together into a format compatible with Evernote, and
  • exporting this to Evernote.
Skills required: PHP (also Git or others source version control systems)
Difficulty level: Medium
Possible mentor: Frédéric Massart, Michael de Raadt

Other new question types

This is not really a specific project idea, but I would like to point one an important general area:

With HTML5 the range of what can be done in a web browser keeps expanding. Can we use these possibilities to make new, much more interactive, question types for Moodle?

Before proposing anything, please make sure you are familiar with the standard question types already available in Moodle, and the contributed question types that other people have already created.

There are some ideas in this forum thread:

  • a question type where students have to join things up correctly by adding lines to a diagram (for example to complete an electric circuit).
  • a question type where students can change the colour of certain parts of a diagram, and they have to get it correct.
  • ... I am sure there are more possible ideas. Use your imagination!

Before proposing anything, please make sure you are familiar with the standard question types already available in Moodle, and the contributed question types that other people have already created.

Skills required: PHP & JavaScript
Difficulty level: Medium - Hard
Possible mentors: - (Note to potential GSoC students, we are not running this project in 2013. See above for a specific project.)

Iconic table of contents resource

Iconic table of contents resource mockup

A common practice employed by teachers is to create a label containing icons that are linked to activities or sections within the course.

This project would be to create a resource module that would allow teachers to create such iconic representations easily.

The resource would have an understanding of the sections and activities in a course, presenting them as options to the teacher, with the potential to use standard or custom icons. Icons should easily arrangeable. Text labels below icons could be optionally visible, with text based on the titles of activities/resources being linked to.

The icons should be presented in a responsive CSS layout that wraps icons to the screen width. The resource should work with the multi-lang filter, hidden sections and paged course formats. The resource should be accessible to users of non-visual browsers and screen readers.

Skills required: PHP (and potentially YUI)
Difficulty level: Easy - Medium
Possible mentors: Michael de Raadt

Parent access

At present there is no official support for parent or mentor access in Moodle.

This project includes multiple stages: documenting use cases, suitable storage of parent-user relationship, new admin tools, reports and support in existing activities.

Skills required: PHP, Moodle access control and enrolments
Difficulty level: Medium
Possible mentors: Petr Škoda (škoďák)

Role definition export and import UI

This project includes defining of XML structure describing role permissions and settings, roles admin UI usability study, implementation of role export, new UI for creation of roles and resetting.

Skills required: PHP
Difficulty level: Easy
Possible mentors: Petr Škoda (škoďák)

Course search

Implement course search that is flexible, case-insensitive, works with non-latin languages, fast, and can sort results by relevance. Would be great if it is DB-independend or supports as many DB as possible. Ideally this should be a plugin that can be installed and configured to substitute basic core search.

Skills required: PHP, SQL
Difficulty level: Medium
Possible mentors: Marina Glancy

See also