Difference between revisions of "Projects for new developers"

Jump to: navigation, search

Note: You are currently viewing documentation for Moodle 2.3. Up-to-date documentation for the latest stable version is available here: Projects for new developers.

(Animated grade statistics report)
(Enhance the current Reports feature)
Line 389: Line 389:
(2) External integration with other open-source data mining solutions. That is, write some codes to create an interface (with options) under the current Reports link, so that system admin, administrators (e.g. directors, department chairs, teachers) could see some visualized data through the interface. The data could be retrieved from some other 3rd party data-mining solutions..etc.
(2) External integration with other open-source data mining solutions. That is, write some codes to create an interface (with options) under the current Reports link, so that system admin, administrators (e.g. directors, department chairs, teachers) could see some visualized data through the interface. The data could be retrieved from some other 3rd party data-mining solutions..etc.
Some current examples are:
Co-mentor welcome! :)
Co-mentor welcome! :)

Revision as of 18:36, 16 April 2008

This page lists possible student projects in Moodle, in particular suggestions for GSOC 2008 projects.

Potential GSOC students

The student application period has now closed. Thanks to everyone who submitted an application :-) (over 70!)

We are currently reviewing all project proposals and requesting further details as necessary. Accepted student proposals will be announced on the Google Summer of Code home page at around 19:00 UTC on 21st April 2008. See the GSOC timeline for more information.

Useful links

  • GSOC - describing Moodle's involvement with Google in their Summer of Code program, including a list of GSOC projects from 2006 and 2007
  • Popular Requests - Most voted-for enhancements and new feature requests in the tracker

GSOC suggested projects

Following a review, approved suggested projects which have mentors will be moved under this heading.

Web 2.0 language editing interface

Moodle is designed to be translated into many languages, and currently has over 70 language packs.

The existing language editing interface enables translators to check for untranslated words or phrases and also enables Moodle administrators to change words or phrases used in Moodle. However, it could really benefit from some improvements.

This project will involve creating a Web 2.0 language editing interface which will:

  • Make use of Ajax technology
  • Detect syntax errors and common problems in translated strings
  • Include a search and replace feature for changing a particular word, for example the word "Course", in every language string
  • Display the differences between local and parent language packs
  • spell checker

In addition, the project may also include:

  • A local modification import/export feature
  • Further language pack import improvements
  • Work on other long-standing language-related issues

In general new ideas and fresh air in this area are welcome :-)

Mentors: Petr Skoda (Skodak), David Mudrak, Koen Roggemans

Consuming RSS feeds

RSS/Atom feeds are becoming an important technology on the web and so it's crucial that Moodle has good support for consuming these feeds for a variety of different uses. At present we generate RSS feeds for use by other applications, though only consume feeds in the RSS feeds block. It would be useful to have a core library which can take care of aggregating feeds (and the issues around it) and to provide them in a simple format for plugins and other core parts of Moodle to use.

This project will involve creating a feed aggregation library which:

  • Will consume most current aggregation technologies (RSS 0.90/1.0/2.0 /Atom etc)
  • Will work behind a variety of web proxies
  • Periodically aggregates and uses a caching mechanism (doesn't query remote server with every request)
  • (Is probably based on an existing PHP framework)

In order test this library, it will be necessary to refactor the RSS block to use it.

Mentor: Dan Poltawski

Secure RSS feeds

Currently RSS is less than useful because:

  • Either we can't publish private information to the outside world because it's too sensitive.
  • We open up sensitive information to the outside world

We should add codes to make the RSS URLs practically impossible to guess, much the same way as Google Calendar does it.

  • Overhaul all the RSS feeds in Moodle to make use of a long hash-like string in the URL for identification (Forums, Data etc). We already have a mechanism for managing these, developed for the grade export reports, called user_key_login.
  • Add RSS to other areas of Moodle such as the participants "last logins" and the activity logs.
  • Explore/research other methods of opening up RSS in a safe way to the outside world.

Mentor: Nicolas Connault

New customisable theme

Creation of a new theme (theme/custom) that includes a configuration page so that the theme can be easily edited directly via Moodle (similar to http://buytaert.net/garland). The page would include:

  • Select a logo from the site files and/or interface to upload a file
  • Several input fields to customise various CSS elements such as block headings, text colour, background colour, headings, header, footer, extra custom CSS etc.
  • Select a parent theme

Also include the option of an administrator setting the theme for the site with their particular configuration or allowing users to customise various elements of the theme. The theme should be usable in Moodle 1.9 (although some thought about how it can work better in Moodle 2.0 would be good).

Mentor: Shane Elliott

Blog Assignment Type

What is it for?

Blogs are inherently user owned and driven by definition, however teachers would like to have a way to use blogs as assignments in their courses, comment, grade, etc.

A solution to this conundrum would be a new Assignment type that makes it possible for a student to easily submit the link one of their blogs to an assignment in a course, and have that blog entry privately graded and commented on by the instructor of that course. The blog entry itself remains public along with all of the student's other blogs. The tool would provide a time filter in the Assignment, so that the instructor could limit the blog entry posting dates that will be accepted (both to ensure 'fresh' entries and to keep the list of entries the student chooses short for frequent student bloggers).

I suggest a blog assignment type that functions as follows:

Teacher: Teacher creates a blog assignment, this puts a grade in the gradebook and provides an assignment link for students to see.

The teacher can configure options to allow a blog entry posted in the last X days to be used for the assignment.

Students: When students enter the assignment they see a drop down menu of all their current (blog entries posted in the last X days as chosen by the teacher) blog entries, and they choose one to satisfy the assignment.

Assessment: The teacher goes in to the Assignment, views the blogs that are linked from the assignment, leaves comments (the comments only show up to the student when they view the blog assignment), and gives a grade.

The blog entries themselves stay on the student's blog, only the grades, links, and comments go in the assignment (optionally the assignment scrapes the student's blog and loads the full text in to store for backup and restore).

Mentor: Mathieu Petit-Clair

Competency tracking

Currently in Moodle 1.9 we have a way of saying "these courses and these activities are intended to achieve these outcomes" and teachers can grade students against those outcomes. eg You could grade "Understands basic evacuation procedures" on a scale like "No understanding, Partial understanding, Total understanding".

What we need now is a way to

  • Relate a list of desired outcomes to each USER, for the site, like a "learning plan" for that user.
  • For each outcome, specify a desired competency (eg Total understanding) for that competency to be "achieved".
  • Find a good way to connect Grades in gradebooks to these competencies
    • We'll have to cope with results that might not contribute to final grading, such as initial evaluations.
    • We'll have to cope with final grading from more than one course, and aggregate them
  • In the end we'll have to generate nice reports to admins and users so that they can see what a particular user can do and what they still have to learn or prove.
  • Finally, for extra credit, it would be nice to have a "suggest courses" features which would suggest upcoming courses that can help a user gain missing competencies.

Mentors: Martin Dougiamas, Jonathan Newman

Roles interface improvements

Improve the roles editing interface by making it more dynamic and flexible. You can use the YUI library for ajax if you like, but there must be a good fall-back interface too. The key thing is to gather together all the ideas generated by the community so far, carefully develop a Roles UI roadmap for changes in consultation with the community (screenshots will be most helpful) always making sure that the interface improves in usability, and then carefully implement the Roles UI roadmap.

Some ideas include:

  • Improve the order of the capabilities and implement better grouping.
  • Make the groups of capabilities collapsible to make it easier to "zoom in" to a particular section.
  • Add support for capability presets to simplify the interface and allow some things to be set from the "mod/edit" page.
  • Add floating tooltip help when you hover over any given capability.
  • Experiment with an (alternate) interface seeing the roles all side-by-side for easier comparison/editing.
  • Implement a roles backup and restore system to allow site administrators to distribute useful roles in the Moodle community (rather than having to describe the permissions setup)
  • More clearly designate the scope of capabilities. Does the capability apply at the site, category, course, activity, or user to user levels.

Mentor: Petr Skoda (Skodak)

Usability review

The main objective of this project is to detect and solve specific usability issues.

Main tasks

  • Research in the tracker, forums, etc. to create a hitlist of the top 10 (or 20) specific usability issues.
  • For each issue, identify the problem clearly (screenshots) and clearly describe one or more solutions (incl mock screenshots) for the community to evaluate.
  • Create code to solve the problem with the best decided solution (optional, depending on Moodle community thoughts).
  • Take a look at Fluid Project (who we are involved with already) to see where some of their components can be used in Moodle (optional).

Mentor: David Horat

Join the discussion thread

Animated grade statistics report

Use the Flare library to develop some cool and useful visualisation of information in the Moodle gradebook. This can be designed as a Grade Report plugin (grade/report/visual) for Moodle 1.9. To be really flexible and extensible, this should be built in several modular parts: harvesters to collect information (e.g., "grade entered"), reporters to summarize and normalize information, and adapters to feed that information into different visualization engines (so that if anyone ever wants to replace Flare, or if Flare changes, damage will be localized).

Flare etc Mentor: Greg Wilson (web site)

Moodle Mentor: Petr Skoda (Skodak)

Co-mentor: Anthony Borrow

Add SQLite Support to XMLDB

Having local sqlite database has been discussed in the past by developers for uses such as prototyping and testing. In this project you would add sqllite to the moodle database abstraction layer. Once this had been archieved you would look at adding a mechanism to copy a live moodle database into a sqllite database to implement a mechnism to switch into 'testing mode' using a sqlite copy of the live database. See also this thread on sqllite in moodle

Potential Mentor: Penny Leach

Moodle IDE

The objective of this project is to create a Moodle IDE based on Eclipse so that new developers can get to develop Moodle in less time.


  • First release: Eclipse + Plugins + Moodle splashscreen + CVS Configuration + Apache + MySQL + Moodle CVS code. All preconfigured and ready out of the box.
  • Every X time, it checks for new versions of Moodle and packs it.
  • Checkstyle plugin alike to follow Moodle Design Guidelines.
  • Development help (can be wiki pages to navigate offline)

Mentor: David Horat

Co-mentor: Anthony Borrow

Download (Old Version): MoodleIDE-latest

Join the discussion thread

Automatic Accessibility Checking

The objective of this project is to make a tool that can check Moodle´s accessibility automatically before realising a version.


  • Automatic Tool (see down)
  • Create an example course which introduces every XHTML code of the Moodle application, in order to have a way to test it.
  • Create a button called "Check XHTML" which will send the current page code to a validator.
    • This button just helps to check if the current page is valid. Good for development purposes.
    • This button will be (de)activated in the administration panel
    • Keep in mind that this button will not pass the URL as a referer, but it will take all the code from the page and send it to the validation service
    • This button can be used in other web applications

Automatic Tool

  • Create (or use an existing one) an automatic and easy to use tool that retrieves all the pages in a site until a concrete level (recursive calling it for each link)
    • Use concrete user agent names
    • Be able to store cookies in order to check it with a concrete user and password
  • Plug each output to an automatic XHTML validator
    • In the future we can plug in different validators: CSS, WCAG (what it can be checkable automatically), etc.
  • Generate stats

Mentor: David Horat

Join the discussion thread

Benchmark-Framework for Moodle

Moodle is developing rapidly - in terms of acceptance and features. One of the initial questions a potential user faces is "How much hardware do I need?". And people who have Moodle running often want to know about the scalability.

The answer to this simple question is complicated because

a) various possible configurations of operating system, webserver, database server, PHP, Moodle itself
b) different bottlenecks, CPU, RAM, disk, network, etc.
c) the user behaviour, the expected peaks, acceptable response
d) which feature of Moodle being used. etc.

This project takes the approach of a test bench:

  1. do a fresh installation of Moodle
  2. import the test data provided
  3. install the server monitoring tools provided
  4. run regression tests provided on client(s)
  5. plot the measuered performance (client) and server load vs. requested load
  6. Tune, change parameters and back to step 4

Mentors: Visvanath Ratnaweera, Wen Hao Chuang

Discussion: Forum "Student Projects"

XML templates for admin settings

One of the disadvantages of the proliferation of settings --although part of Moodle's increasing flexibility and power-- is that a particular combination of settings may be difficult to reproduce from one site to the other. Also, administrators who want to "play with the settings" are afraid to be unable to restore the settings to their original values.

The proposed solution is to implement a simple interface allowing administrators to export the settings in an XML file, which could later be restored. The features will include:

  1. Selection of settings to export (grouped in a tree format as displayed in the administrator panel)
  2. Naming and saving of XML files as special "templates" to be applied to a new install of Moodle for specific situations.
  3. An interface listing the templates (XML exported files with the "template" attribute set)
  4. A way to record the registered templates (beyond detecting the filesystem)
  5. A view of the settings available for restore in a given XML file
  6. Partial export/import

Note: This needs to work nicely with the command-line installer code.

Other ideas:

  • An option to mark certain admins settings as is_sensitive() - a method in the admin setting base class. This would be true for passwords and things. Then you could have an option for exporting all the non-sensitive settings to attach to a forum post when you ask for help.
  • Use YAML instead of XML (sam opinion: ugh, no!)
  • Very detailed logging of admin setting changes - to allow for undos, among other things - or just simple logging of each set_config change with its new and previous value in the info field would be a good start
  • A text field, like CVS commit messages, for people making admin changes
  • The ability to "switch" a template on/off. While on, it overrides the original settings without replacing them. When off, the original settings are restored
  • In addition to the previous point: ability to switch several templates on/off, and to organise them by priority. If a setting is defined in two templates, the one in the template with the highest priority overrides the other one.

Mentor: Petr Skoda (Skodak)

Create Moodle Plugin Templates

The M in Moodle is for Modular, meaning that it is designed to be extended, either for sharing with others or for customization within an institution. There are, in fact, at least 20 different plugin types.

Your job is to create a template version of each of these plugins, with lots of inline documentation and examples of common Moodle code practices. The example plugins should install correctly in Moodle 1.9 but not actually do very much, just show placeholders etc. These template plugins should be useful starting points for new developers to start editing to create their own plugins.

Some examples already exist but will need to be brought up to date and improved.

Other plugin types don't have anything yet.

There is also a lot of scattered documention here in the Development wiki such as this Block Tutorial (oldish).


  • The initial scope of the project should be templates for /mod, /blocks, /enrol, /auth, /admin/report, /course/report, /grade/import, /grade/export, /grade/report, /question/type and /mod/assignment/type, although expanding it to more or all would be helpful if time permits and it does not diminish the quality and testing of the initial examples.
  • Full consideration should be given to standards (such as using language packs, check for access permissions, XHTML, styles, etc.) See the Coding guide.
  • Current examples in the core code should be considered in the development of each plugin when applicable.
  • Each template should be documented in the form of a step-by-step tutorial such that a beginner to intermediate php programmer could recreate the steps for construction. These instructions should be placed on https://docs.moodle.org under Development.
  • Field tested with real beginning/intermediate level developers and changes made based on reports from that field experience (we can help in finding these testers).
  • Designed for Moodle 1.9.

Potential Mentor: Gary Anderson

Other ideas

Please add your ideas for GSOC projects under this heading.

Following a review, approved suggested projects which have mentors will be moved under the heading "GSOC suggested projects" above. Please note that suggested projects require a mentor in order for them to be approved.

Integration with bibliographic systems such as Wikindx

Managing references and citing them is an important behaviour in university education and research. Bibliographic facilities are quite complicated and go beyond the capabilities of Moodle built-in technology (e.g. the database activity). Integrating Moodle with open-source bibliographic software such as Wikindx could much facilitate this practice within Moodle.

Design and construct an integration with Wikindx (or other open-source bibliographic tools, if appropriate).

Teachers should be able to easily refer to wikindx bibliography items throughout a Moodle course, and be able to:

  • Generate correctly-formatted in-place references (using standard styles e.g. Harvard, APA) for the commonly-cited reference types (e.g. journal article, book chapter, book). It may be possible to delegate the formatting directly to wikindx (since it already performs functions like these) rather than implementing a whole new set of logic in the Moodle integration.
    • Possibly, allow some kind of direct searching of a wikindx database from within Moodle, so as to make it easier to refer to items
  • Generate reading lists / bibliographies
  • Allow export of the above into common machine-readable formats such as Bibtex or RIS. (Wikindx can perform this so again it's a question of hooking into, or expanding, wikindx functionality.)

See also Development:Wikindx and this forum discussion too

Implement CATs in Moodle

This book describes a number of assessment techniques that involve collaboration and group work, and therefore fit very well into Moodle's Social Constructivist philosophy. The book about using these techniques in the classroom, but at an conference I attended there was a talk by Jean Runyon and Thomas Gorecki from the College of Southern Maryland saying how well these techniques work online.

Some of them just need a forum of something basic, but others would need to be done as a database module templates. Doing this would

  1. Make Moodle an even better teaching tool.
  2. Provide some good exemplars of how to do interesting things with database templates.
  3. Possibly highlight limitations in the database template system, that would require improvements to the database module code to overcome.
  4. One of the outcomes of this project could be some really good 'How to write a database template' tutorial, which would be very valuable to the community.

This is my (Tim Hunt's) idea, but I would not be interested in mentoring it. It would need to be someone who knows all about the database module.

Moodle Target tracking + rewards/gifts

This one would suit a facebook enthusiast! The Facebook gifts system is very popular and an ideal motivator for students at school level. Moodle needs an equivalent.

The aim is to develop a system for setting targets e.g. 'get at least 60% in this assignment/quiz/whatever' and for reward credits to be awarded automatically when it is completed. These reward credits translate to a system of Gifts similar to Facebook ones (small images, akin to stickers, which can be bought for a small fee and sent to friends who then display them on their profile). Admins can control what the reward images are for their site, maybe having them in some sort of rank order of value, or having different ones with different meanings. There are several ways they could be implemented beyond that:

  • Teachers could choose which rewards can be earned for a specific task. For example, there may be different rewards for forums and assignments
  • Teachers may want to specify different rewards for different levels of performance on the same task
  • Teachers decide how many points a certain target is worth and the students cash in those points for rewards of various values
  • Teachers decide how many rewards a target is worth and students choose that many rewards. None are worth more than 1 point each, the only difference is the graphic.

Once students have rewards, they need a way of allocating them (presumably permanently) to their friends. A system for logically displaying them on the friend's profile page would be needed too and will need to take into account

  • Students with only a few stickers given to them by friends will want them to maximise their display
  • Students who are very popular with hundreds of stickers may need to groups of 10 similar ones substituted for a super-sticker to use less space
  • Hovering over the sticker should give details of who awarded it and when and possibly a short message.

Additionally, the social rating/ranking that this achieves will have most effect when it is publicly visible in various places e.g. under forum avatars and maybe in the online users block as well as the user profile.

Maybe this would sit well with the 'Friends' part of last years GSOC social networking project if it were finished.

I can't offer to mentor in coding terms, but will help with ideas all I can. Matt Gibson 05:26, 4 March 2008 (CST)

Martin Dougiamas 20:32, 25 March 2008 (CDT) : I would rather see some base work being done first to allow "user profile plugins" similar to facebook applications so that ideas like this can be added easily later.

Use of Video Material Effectively within Moodle

The main purpose of this module will be to get use of video content, most probably a lecture, in a more formal/controlled/effective way within Moodle.

The main features of this module will be;

  • Stream the video file (most probably in flv format)
    • Should be able to stream by using multiple ways (e.x. FMS, Red5, lighttpd, etc..)
    • Develop a front-end to configure the streaming server settings
    • automatic media conversion (controlled by other Moodle settings like max file size, etc..)
  • The teacher can give related notes, websites or other resources with the video
  • The students can keep a note related to each video
  • Share/view other student's notes (probably controlled by the teachers and/or students)
  • Optionally assess the student notes and include them in the grade book

The above list may expanded based on your views.

Difficulty Level: Easy/Medium

Skills Required:

  • Familiarity with streaming servers like Red5 and video streaming in general.
  • Should be able to install and configure required products (Moodle, Red5, lighttpd, etc..) in any OS (Windows, Linux, Mac, etc..)
  • Understanding of UI design concepts.
  • Familiarity with Moodle APIs and Developing Moodle in general

Join the discussion thread


Potential Mentor: Rashan Anushka

Web-based upgrade and plugins interface

A system for Moodle to be upgraded along with its plugins from within the admin interface.

Currently, adding third party modules/patches can be messy and can especially slow down the upgrade process if CVS is not used. The aim would be to develop a way to package plugins in a standardised way so that a single zip file could be retrieved and installed automatically, similar to the way courses are restored. An added feature would be for the modules and plugins database on moodle.org to have an XML index so that you could browse available plugins from within your own moodle instance and have a one-click install option. Version compatibility info could be included so that only those which will work with your install will be shown. At upgrade time, the new third-party components screen could then show which ones could be upgraded along with the rest of the code and which would need to dropped because there is no compatible replacement.

Potential Mentor: Ken Wilson

(I can't see a way of doing this securely. You'd basically have to give your PHP script the ability to rewrite themselves. It might be possible to just do the checking part (extension of existing environment scripts probably) and at least give admins a neat report with links and information to do the upgrade more easily. Martin Dougiamas 09:32, 31 March 2008 (CDT))

Enhance the current Reports feature

As I mentioned in this discussion thread: http://moodle.org/mod/forum/post.php?reply=416580

I think it might be a good idea to enhance the current Reports feature in moodle so that it could have some "data visualization" features and help administrators or teachers to analyze the trends as well as usage/learning pattern, etc.

The spec needs to be worked on a little bit more, but there would be two possible different approaches:

(1) Enhance the current Reports features (codes will be integrated with future moodle version)

(2) External integration with other open-source data mining solutions. That is, write some codes to create an interface (with options) under the current Reports link, so that system admin, administrators (e.g. directors, department chairs, teachers) could see some visualized data through the interface. The data could be retrieved from some other 3rd party data-mining solutions..etc.

Some current examples are:


Co-mentor welcome! :)

Potential Mentor: Wen Hao Chuang

Enhance the current Functional/Regression Testing Practice and Build a Framework

For moodle, other than the current build-in unit tests (based on SimpleTest framework, see: https://docs.moodle.org/en/Development:Unit_tests) and the existing limited Test Cases that are located at https://docs.moodle.org/en/Development:Tests. For larger institutions who has their own development teams, there is a missing link for good functional/regression testing tools/process/practice to automate some of QA efforts. There are some discussion about using Selenium IDE for such efforts (see http://moodle.org/mod/forum/discuss.php?d=43569) but it is not really organized or systematic. This project has the following goals:

(1) To improve the existing test cases "system" (https://docs.moodle.org/en/Development:Tests) and to create a more comprehensive test plan and/or to modularized the test plan so that we could coordinate the testing efforts among different volunteer institutions to assure better quality of moodle (for future versions).

(2) To investigate open-source functional/regression test tools (e.g. TestNG, JMeter, Selenium IDE/RC, etc.) to see if we could come up with scripts to automate most of the functional/regression tests.

Also see: http://www.opensourcetesting.org/functional.php

Co-mentor welcome!

Potential Mentor: Wen Hao Chuang

See also