Note: You are currently viewing documentation for Moodle 4.0. Up-to-date documentation for the latest stable version of Moodle may be available here: Developer documentation.

Development:Developer documentation: Difference between revisions

From MoodleDocs
m (Reverted edits by Speakinginenglish (talk) to last revision by Tim Hunt)
 
(225 intermediate revisions by 53 users not shown)
Line 1: Line 1:
[[image:moodle-development-logo.jpg|right|400px]]
This [[:Category:Developer|Developer]] section of Moodle Docs is aimed at developers who contribute to the Moodle code, plugins, themes, and so on.
* If you manage a Moodle site, [[Administrator documentation]] may suit your needs better.
* If you teach using Moodle, try [[Teacher documentation]].
<br />
<p class="note">'''Note:''' New developer documentation pages should be added to the ''Development namespace'' by typing <code>Development:</code> before the new page name i.e. <code><nowiki>[[Development:New page name]]</nowiki></code>. If you are a developer, you probably want to change your [[Special:Preferences|preferences]] to include the Development namespace in searches.<br /><br />
A page may be added to the Developer category by adding the template <code><nowiki>{{CategoryDeveloper}}</nowiki></code> to the bottom of the page. - If required, you can use <code><nowiki>[[Category:Developer|Sort key]]</nowiki></code> to provide a sort key other than the default page name.</p>
==How Moodle development works==
The [[Development:Overview|overview of the Moodle development process]] explains how Moodle development occurs and how people become Moodle developers. Current plans are listed on the [[Roadmap]].
You can also enrol in one of the [http://dev.moodle.org Moodle Developer Courses].
==Guidelines==
==Guidelines==
The following guidelines are crucial reading for anyone wanting to contribute to the Moodle code base:
The following guidelines are crucial reading for anyone wanting to contribute to the Moodle code base:
*[[Coding|Coding guidelines]] have to be followed by all Moodle developers
*[[Development:Coding|Coding guidelines]] have to be followed by all Moodle developers
*[[Moodle architecture]] spells out the basic design goals behind Moodle
*[[Moodle architecture]] gives an overview of how the Moodle code works
*[[Interface guidelines]] aim to provide a common feel to the Moodle user interface
*[[Development:Process]] explains how changes are incorporated into Moodle
*[[CVS (developer)|Moodle CVS for developers]] explains how to work with the Moodle code in CVS
*[[Tracker]] explains the Moodle Tracker for keeping track of bugs, issues, feature requests etc
*[[Unit tests]] explains how to run the unit tests, and how to write new test cases.
*[[Development:Working with the Community|Working with the Community]] explains how to engage with the dev community and discuss changes
*[[Development:Unit tests|Unit tests]] explains how to run the unit tests, and how to write new test cases.
*[[Development:Profiling PHP|Profiling PHP]] how to analyse your code to find out why it is slow.
*[[Development:Fast portable SQL]] shows SQL techniques that are fast, efficient, and known to work on all supported DBs.
*[[Development:Development hints and tips]] a (developing) list of general wisdom to help with your Moodle projects.
 
==Documentation for core components==
 
This section is for documentation of specific components of the existing core Moodle code. Discussion of components that are under discussion or in development can be found in the [[Development:Developer notes|developer notes]] or on the [[Roadmap|roadmap]].
 
The documents below give a general overview. For detailed function-by-function documentation, see the [http://phpdocs.moodle.org/ phpDocumentor] documentation that is automatically generated from the comments in the code.
 
And don't forget that the most up-to-date and detailed description of how the code works is the code itself, and you can [http://xref.moodle.org/nav.html?index.html browse the code online] using [[Development:PHPXref|PHPXref]].
 
===Core components ===
 
*[[Development:XMLDB_Documentation|Database abstraction layer]] @ v[[1.7]]
*[[Development:Roles|Roles and Capabilities system]] @ v[[1.7]] for controlling who can do what
*[[Development:lib/formslib.php|Forms library]] @ v[[1.8]] for creating accessible and secure HTML forms that let users edit things
*[[Development:Using_the_file_API|File API]] @ v[[2.0]] for managing files stored by Moodle
*[[Development:Database schema introduction|The database schema]]
*[[Development:What happens when you require config.php|What happens when you require config.php]]
*[[Development:lib/moodlelib.php|lib/moodlelib.php]]
*[[Development:lib/weblib.php|lib/weblib.php]] for outputting stuff


== Resources and tools ==
===Core libraries with a more specific uses===


*[[Developer FAQ]] - frequently asked questions, especially useful for newcomers to Moodle
*[[Authentication API]]
*[http://moodle.org/bugs/ Moodle bug tracker] - bug reports, feature requests and other tracked issues
*[[Cookieless Sessions]]
*[http://moodle.org/mod/forum/view.php?id=55 General developer forum]
*[[Email processing]]
*[http://moodle.cvs.sourceforge.net/moodle/moodle/ CVS code] - browse the Moodle code via the web
*[[Development:Environment checking|Environment checking]] before install, check the user's server to ensure Moodle will work there.
*[http://moodle.org/xref/nav.html?index.html Cross reference] - phpxref output for browsing Moodle source code
*[[Development:Groups|Groups system]]
*[http://moodle.sourceforge.net/dhawes-phpdoc/ Moodle PHP doc reference] - automatically generated documentation
*[[Development:Grades|Gradebook]]
*[http://moodle.org/course/view.php?id=5#4 Development news and discussion] section of Using Moodle course
*[[Development:Moodle Network|Moodle Network]]
*[[Unmerged files]] - changes on the stable branch in CVS that have not been merged to HEAD
*[[Question engine]]
*[[Stats package]]
*[[UTF-8 migration|Migration to UTF-8]] @ v[[:Category:Moodle 1.6|1.6]]
*[http://developer.yahoo.com/yui YUI JavaScript library] - YUI was selected as the official AJAX library for Moodle.
*[[Development:lib/graphlib|lib/graphlib]]
*[[Development:Admin settings|Admin settings]]
 
===Modules included in the standard distribution===
 
*[[Development:Lesson Specification|Lesson Specification]]
*[[Quiz developer docs|Quiz module]]
*[[SCORM schema|SCORM module 1.5 schema]]


==How you can contribute==
==How you can contribute==


The M in Moodle stands for 'Modular'. There are many different types of components that you can contribute that can be plugged into Moodle to provide additional functionality. When you have developed a new component please publish it in the [http://moodle.org/mod/data/view.php?id=6009 database of Moodle modules and plugins]. The following types of plugins currently exist (in alphabetical order):
===Make a new plugin===
*[[Modules (developer)|Activity modules]]
 
*[[Assignment types]]
The M in Moodle stands for modular, and the easiest, most maintainable way to add new functionality to Moodle is by using one of the many plugin APIs. There are many types of plugin you can write:
*[[Authentication|Authentication methods]]
*[[Development:Modules|Activity modules]], see also [[Development:NEWMODULE Documentation]] (work in progress)
*[[Blocks Howto|Blocks]]
**and [[Development:Subplugins|Sub-Plugins]] (2.0 Onwards)
*[[Development:Admin reports|Admin reports]]
*[[Development:Assignment types|Assignment types]]
*[[Development:Authentication plugins|Authentication plugins]]
*[[Development:Blocks|Blocks]]
*Content editors (2.0 onwards)
*[[Course formats]]
*[[Course formats]]
*[[Database fields]]
*[[Development:Course Report Plugins|Course reports]]
*[[Database presets]]
*Course importers (2.0 onwards)
*[[Enrolment plugins (developer)|Enrolment plugins]]
*[[Development:Database fields|Database fields]]
*[[Filters (developer)|Filters]]
*[[Development:Database presets|Database presets]]
*[[Question import/export formats]]
*[[Development:Enrolment plugins|Enrolment plugins]]
*[[Question types]]
*[[Development:Filters|Filters]]
*[[Quiz reports]]
*[[Development:Gradebook_Report_Tutorial|Gradebook report]]
*[[Resource types]]
*[[Development:Gradebook export|Gradebook export]]
*[[SSO plugins]]
*[[Development:Gradebook import|Gradebook import]]
*Message senders (2.0 onwards)
*Mnet services
*Plagiarism detection plugins (2.0 onwards)
*[[Development:Writing_a_Portfolio_Plugin|Portfolio plugins]] (2.0 onwards)
*[[Development:Question_type_plugin_how_to|Question types]]
*[[Development:Question import/export formats|Question import/export formats]]
*[[Development:How to write a quiz report plugin|Quiz reports]]
*[[Development:Repository plugins|Repository plugins]] (2.0 onwards)
*[[Development:Resource types|Resource types]]
*[[Development:Search engine adapters|Search engine adapters]]
*Themes which are different in [[Development:Themes_2.0|Moodle 2.0]], and [[Theme_basics|earlier versions]].
*User profile fields
*[[Development:Web services (2.0 onwards)|Web services (2.0 onwards)]]
*Workshop allocators (2.0 onwards)
*Workshop forms (2.0 onwards)
*Workshop evaluators (2.0 onwards)
 
General information that applies to all types of plugins
*[[Development:Places to search for lang strings|Where to put language strings for your plugin]]
*[[Development:Installing and upgrading plugin database tables|Defining the database tables for your plugin]]
 
Please see the [[Development:Guidelines for contributed code|Guidelines for contributed code]] for an overview of how to contribute to the Moodle code.


There are also ways you can contribute that don't involve PHP programming:
Sometimes it is not possible to write a proper plugin for what you want to do, in which case you may have to resort to using the [[Development:Local_customisation|local customisations]] hook.
*[[Themes]]
*[[Translation]]
*[[Database Schemas|Database schemas]]


You can also help a lot by
===Change core code===
*[[Tests|Testing]]
 
*[[Bug tracker|Participating in the bug tracker]]
Some types of change can only be made by editing the core Moodle code. Such changes are much harder to maintain than plugins. If you want your core change to be considered for inclusion in the official Moodle release, you need to create an issue in the [[Tracker|tracker]], and attach your change as a [[Development:How_to_create_a_patch|patch]]. It is also a good idea to discuss your ideas in the forums first.  See [[Development:Overview#Major_Development]] for more details.
 
===Ways to contribute that do not involve PHP programming===
 
*[[Themes|Create Moodle themes]]
*[[Translation|Translate Moodle into other languages]]
*[[MoodleDocs:Guidelines for contributors|Help document Moodle]]
*[[Development:Tests|Join the testing effort]], which involves [[Tracker|participating in the bug tracker]]


==Plans for the future==
==Plans for the future==
Ideas for and details of planned future features of Moodle are initially discussed on the forums in the [http://moodle.org/course/view.php?id=5 Using Moodle] course at moodle.org. That developer discussions are intermixed with user discussions in the same forums may seem strange at first but is one of the reasons for the success of Moodle. It is important that both end-users and developers discuss the future features together.
Ideas for and details of planned future features of Moodle are initially discussed on the forums in the [http://moodle.org/course/view.php?id=5 Using Moodle] course at moodle.org. That developer discussions are intermixed with user discussions in the same forums may seem strange at first but is one of the reasons for the success of Moodle. It is important that both end-users and developers discuss the future features together.


Once ideas begin to crystalize on the forums they can be summarized in this wiki, either as part of the [[Roadmap]] or in the form of [[Developer notes]]. These pages then form the basis for further discussion in the forums.
Once ideas begin to crystallize on the forums they can be summarized in this wiki, either as part of the [[Roadmap|roadmap]] or in the form of [[Development:Developer notes|developer notes]]. These pages then form the basis for further discussion in the forums.
 
*[[Roadmap]]
*[[Roadmap]]
*[[Developer notes]]
*[[Development:Developer notes|Developer notes]]
*[[Student projects]]
*[[Student projects]]
*[[Developer conference|Developer conferences]]
*[[Developer meetings]]
 
== Resources ==
 
*[[Developer FAQ]] - frequently asked questions, especially useful for newcomers to Moodle
*[[Development:Finding_your_way_into_the_Moodle_code|Finding your way into the Moodle code]] - also aimed at newcomers
*[http://tracker.moodle.org/ Moodle tracker] - bug reports, feature requests and other tracked issues
**[[Firefox tracker search]] - How to setup a firefox quicksearch to easily navigate to moodle bugs
**[[Firefox tracker search#Firefox Search Plugins|Firefox Search Plugins]] - Find tracked issues even more easily
*[[Unmerged files]] - changes on the stable branch in CVS that have not been merged to [[HEAD]]
*Browse the code online:
**[http://cvs.moodle.org/moodle/ the code with a complete change history from CVS]
**[http://xref.moodle.org/index.html the code, with links generated by PHPXref]
*[http://phpdocs.moodle.org/ Moodle PHP doc reference] - compiled nightly from the comment attached to each class and function in the code. 
*[[Development:Database Schema|Database Schema]] - for recent releases
*[http://moodle.org/course/view.php?id=5#4 Development news and discussion] section of Using Moodle course
**especially the [http://moodle.org/mod/forum/view.php?id=55 General developer forum]
**[[Filters used on the Moodle.org forums|cool tricks you can use in the moodle.org forums]]


==Documentation for core components==
== Tools ==
This section is for documentation of specific components of the existing core Moodle code. Discussion of components that are under discussion or in development can be found in the [[Developer notes]] or on the [[Roadmap]].
Some tools people use when working on Moodle code:
 
=== IDEs ===
 
* [[Development:Setting_up_Netbeans|Setting up NetBeans for Moodle development]] - NetBeans for PHP is a great out-of-the-box editor.
* [[Development:Setting_up_Eclipse|Setting up Eclipse for Moodle development]] - Eclipse is a great editor to use for php development, if you can work out how to set it up.
* [[Development:vim|Setting up Vim for Moodle development]]
* [http://www.aptana.com/ Aptana Studio 2]
 
=== Browser add-ons ===
*[http://getfirebug.com Firebug], see [[Firebug]] for details.
* [[Web developer extension]]
* [https://addons.mozilla.org/en-US/firefox/addon/394 ViewSourceWith] - The main goal is to view page source with external applications, but you can do a lot of other things as well.


*[[UTF-8 migration|Migration to UTF-8]]
=== Miscellaneous ===
*[[Question engine]]
*[[Development:ctags|Ctags]] - Using a tags file to navigate code
*[[Quiz developer docs|Quiz module]]
*[[W3C_validation|W3C HTML validator]] - Moodle has built in support to make using it easier.
*[[SCORM schema|SCORM module 1.5 schema]]
*[[Development:Windows Installer|Windows Installer]] - Windows Installer documentation for developer.
*[[Authentication API]]
*[[Stats package]]
*[[Email processing]]
*[[Cookieless Sessions]]


==Documentation for contributed code==
See also: [http://dev.moodle.org/mod/forum/view.php?id=18 Useful Development Tools forum]in the [http://dev.moodle.org/course/view.php?id=2 Introduction to Moodle Programming course]
Many Moodle users contribute code for the benefit of other Moodle users. This can take the form of new activity modules, blocks, themes, resource plug-ins, assignment plug-ins, question type plug-ins, question import/export formats, quiz report plug-ins, course formats, ... This code is initially posted on the forums in the [http://moodle.org/course/view.php?id=5 Using Moodle] course and then often go into the [http://cvs.sourceforge.net/viewcvs.py/moodle/contrib/ contrib area] of the Moodle [[CVS]] repository. When you have developed a new component please publish it in the [http://moodle.org/mod/data/view.php?id=6009 database of Moodle modules and plugins]. Developer documentation for these components should be listed here.


==See also==
==See also==
*[http://security.moodle.org/ Moodle Security Centre]
 
*[http://moodle.org/security/ Moodle Security Announcements]
*[http://moodle.com/partners/ Moodle Partners] - providers of custom Moodle development services
*[http://moodle.com/partners/ Moodle Partners] - providers of custom Moodle development services


[[Category:Developer]]
[[Category:Developer]]
[[Category:Developer tools]]
[[ru:Development:Краткий обзор]]
[[es:Documentación para Desarrolladores]]
[[es:Documentación para Desarrolladores]]
[[fr:Documentation développeur]]
[[fr:Documentation développeur]]
[[pt:Desenvolvimento:Documentação para programadores]]
[[zh:开发者文档]]
[[ja:開発者ドキュメント]]
[[fi:Ohjelmoijan opas]]

Latest revision as of 21:33, 26 April 2011

moodle-development-logo.jpg

This Developer section of Moodle Docs is aimed at developers who contribute to the Moodle code, plugins, themes, and so on.


Note: New developer documentation pages should be added to the Development namespace by typing Development: before the new page name i.e. [[Development:New page name]]. If you are a developer, you probably want to change your preferences to include the Development namespace in searches.

A page may be added to the Developer category by adding the template {{CategoryDeveloper}} to the bottom of the page. - If required, you can use [[Category:Developer|Sort key]] to provide a sort key other than the default page name.

How Moodle development works

The overview of the Moodle development process explains how Moodle development occurs and how people become Moodle developers. Current plans are listed on the Roadmap.

You can also enrol in one of the Moodle Developer Courses.

Guidelines

The following guidelines are crucial reading for anyone wanting to contribute to the Moodle code base:

Documentation for core components

This section is for documentation of specific components of the existing core Moodle code. Discussion of components that are under discussion or in development can be found in the developer notes or on the roadmap.

The documents below give a general overview. For detailed function-by-function documentation, see the phpDocumentor documentation that is automatically generated from the comments in the code.

And don't forget that the most up-to-date and detailed description of how the code works is the code itself, and you can browse the code online using PHPXref.

Core components

Core libraries with a more specific uses

Modules included in the standard distribution

How you can contribute

Make a new plugin

The M in Moodle stands for modular, and the easiest, most maintainable way to add new functionality to Moodle is by using one of the many plugin APIs. There are many types of plugin you can write:

General information that applies to all types of plugins

Please see the Guidelines for contributed code for an overview of how to contribute to the Moodle code.

Sometimes it is not possible to write a proper plugin for what you want to do, in which case you may have to resort to using the local customisations hook.

Change core code

Some types of change can only be made by editing the core Moodle code. Such changes are much harder to maintain than plugins. If you want your core change to be considered for inclusion in the official Moodle release, you need to create an issue in the tracker, and attach your change as a patch. It is also a good idea to discuss your ideas in the forums first. See Development:Overview#Major_Development for more details.

Ways to contribute that do not involve PHP programming

Plans for the future

Ideas for and details of planned future features of Moodle are initially discussed on the forums in the Using Moodle course at moodle.org. That developer discussions are intermixed with user discussions in the same forums may seem strange at first but is one of the reasons for the success of Moodle. It is important that both end-users and developers discuss the future features together.

Once ideas begin to crystallize on the forums they can be summarized in this wiki, either as part of the roadmap or in the form of developer notes. These pages then form the basis for further discussion in the forums.

Resources

Tools

Some tools people use when working on Moodle code:

IDEs

Browser add-ons

Miscellaneous

See also: Useful Development Tools forumin the Introduction to Moodle Programming course

See also