<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aborrow</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aborrow"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/Special:Contributions/Aborrow"/>
	<updated>2026-06-04T02:18:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_validation&amp;diff=47231</id>
		<title>Plugin validation</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_validation&amp;diff=47231"/>
		<updated>2015-01-19T00:36:23Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Manual checks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before a plugin can be made available via the [http://moodle.org/plugins/ Moodle Plugins directory] it has to pass both an automatic and a manual validation process. The automatic checks are repeated for each new version of the plugin that is added, however the [http://moodle.org/mod/forum/discuss.php?d=192083#p837517 manual checks are only done for the initial release]. The aim is to complete manual checks within three working days of first submission, but sometimes based on timing and/or allocation of resources, it can take longer than that, so please be patient.&lt;br /&gt;
&lt;br /&gt;
==The process==&lt;br /&gt;
 Plugin submission --&amp;gt; Waiting for approval --&amp;gt; Approved.&lt;br /&gt;
 * Waiting for approval --&amp;gt; Needs more work --&amp;gt; Waiting for approval&lt;br /&gt;
 ** Click &#039;Schedule this plugin for re-approval&#039; under &#039;Admin block&#039; &amp;gt; &#039;{your plugin}&#039; &amp;gt; &#039;Schedule this plugin for re-approval&#039; when ready to go back into the approval queue.&lt;br /&gt;
&lt;br /&gt;
Note: Plugin approvers are always get notified on all plugins that aren&#039;t approved. Feel free to leave us messages in the plugin comments during this phase.&lt;br /&gt;
&lt;br /&gt;
==Automatic validation==&lt;br /&gt;
&lt;br /&gt;
===General rules for all plugin types===&lt;br /&gt;
* Plugin name with [[Frankenstyle]] prefix must be unique in moodle.org/plugins. If there is another plugin with the same name you must either add new versions to this plugin (if it is yours) or rename your plugin if the names are accidentally the same. First in first served.&lt;br /&gt;
* The plugin must be uploaded as a single zip file&lt;br /&gt;
* The zip file must contain a single subfolder, named after your plugin (although the validator can also automatically rename subfolders generated by repos such as GitHub, which appear in the form &#039;username-moodle-pluginname-branchname&#039;)&lt;br /&gt;
* The subfolder must be laid out in such a way that the uploaded file could be unzipped directly into the top-level folder for that plugin type (e.g. an activity plugin called &#039;myplugin&#039; should install correctly when unzipped in the Moodle /mod folder, creating a subfolder /mod/myplugin with all the standard files within it).&lt;br /&gt;
* The subfolder must contain a file called [[version.php]]. It should describe properties like &#039;version&#039;, &#039;requires&#039;, &#039;cron&#039;, &#039;component&#039;, &#039;maturity&#039;, &#039;release&#039; and &#039;dependencies&#039; . See exceptions below.&lt;br /&gt;
* Language file must be present in lang/en/FULLNAME.php (for Moodle 2.0+) or lang/en_utf8/FULLNAME.php (for Moodle 1.9). FULLNAME is the plugin name with frankenstyle prefix. See exceptions below.&lt;br /&gt;
* Language file must declare either $string[&#039;modulename&#039;] (for activity modules) or $string[&#039;filtername&#039;] (for Filters) or $string[&#039;pluginname&#039;] (for all other plugin types). See exceptions below.&lt;br /&gt;
* The names of all database tables should start with the full &#039;frankenstyle&#039; plugin name. For example block_myblock, or auth_paypal. See exceptions below.&lt;br /&gt;
* The subfolder should contain a file called README.txt or README.md. (the validator can automatically rename other extensions to .txt) with details about the current release of the plugin.&lt;br /&gt;
&lt;br /&gt;
===Exceptions===&lt;br /&gt;
* [[version.php]] is required for Moodle 2.5 and onwards. It isn&#039;t strictly required (but it is always recommended) for older moodle versions for the following plugin types:&lt;br /&gt;
** Themes for Moodle 2.0 to 2.4&lt;br /&gt;
** Course formats for Moodle 2.0 to 2.4&lt;br /&gt;
** Blocks for Moodle 1.9&lt;br /&gt;
** Auth for Moodle 1.9&lt;br /&gt;
* language file is not required for plugins for Moodle 1.9 that are not activity modules&lt;br /&gt;
* $string[&#039;pluginname&#039;] is not required for plugins for Moodle 1.9 that are not activity modules&lt;br /&gt;
* Question types for Moodle versions &amp;lt;= 2.1 instead of $string[&#039;pluginname&#039;] should declare $string[NAME] (where NAME is the name of the plugin without frankenstyle prefix). Starting from 2.2 this was fixed and $string[&#039;pluginname&#039;] shall be used.&lt;br /&gt;
* database tables are allowed to skip mod_ prefix for activity modules&lt;br /&gt;
* database tables are allowed to have question_ prefix instead of qtype_ for Question types. This is for historical reasons, all newly developed plugins are encouraged to have qtype_ prefix.&lt;br /&gt;
&lt;br /&gt;
===Additional checks for activity modules===&lt;br /&gt;
* $module-&amp;gt;version defined in version.php&lt;br /&gt;
* $module-&amp;gt;requires defined in version.php&lt;br /&gt;
* file lib.php exists&lt;br /&gt;
* file lib.php contains “function xxxx_add_instance”&lt;br /&gt;
* file lib.php contains “function xxxx_update_instance”&lt;br /&gt;
* file view.php exists&lt;br /&gt;
* file index.php exists&lt;br /&gt;
* db/install.xml exists&lt;br /&gt;
* db/upgrade.php exists&lt;br /&gt;
* db/access.php exists&lt;br /&gt;
&lt;br /&gt;
===Checks for particular plugin types===&lt;br /&gt;
* Themes: file config.php exists&lt;br /&gt;
* Blocks: file block_xxxx.php exists&lt;br /&gt;
* Auth: file auth.php exists&lt;br /&gt;
* Course formats: file format.php exists&lt;br /&gt;
&lt;br /&gt;
==The Other category in the plugins directory==&lt;br /&gt;
&lt;br /&gt;
If your plugin does not yet meet all the different standards, you are encouraged to add it to the [https://moodle.org/plugins/browse.php?list=category&amp;amp;id=38 Moodle Plugins Directory Other category]. Plugins in this category will be excluded from any automated processes such as installations or updates. Then when the plugin is improved to meet the standards, it can be moved to an another category in the plugins directory.&lt;br /&gt;
&lt;br /&gt;
==Manual checks==&lt;br /&gt;
Before the plugin is publicly viewable a trusted reviewer will look through the code to make sure it is a valid plugin. These checks are completed by [https://moodle.org/user/view.php?id=1601&amp;amp;course=5 David Mudrak] (Plugins Liaison, Moodle HQ) and [https://moodle.org/user/view.php?id=51473&amp;amp;course=5 Anthony Borrow] (on a volunteer basis), so please bear with us if this sometimes takes a little longer than you expect. These checks include:&lt;br /&gt;
* The plugin installs cleanly&lt;br /&gt;
* It does not contain any obviously harmful code&lt;br /&gt;
* It is not a spam entry (This is somewhat along the lines of the [https://moodle.org/mod/page/view.php?id=7080 Moodle.org site policy] too)&lt;br /&gt;
* It does not duplicate an already uploaded plugin (or functionality available in core) &lt;br /&gt;
* It mentions GPL license (if not a boilerplate atop every file then somewhere in the downloadable zip).  (or be [http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses| completely GPL compatible])&lt;br /&gt;
** On what the copyright should be, refer to https://moodle.org/mod/forum/discuss.php?d=213610#p1117434&lt;br /&gt;
* It has documentation and referenced URLs in basic english.&lt;br /&gt;
* It does not lead to unrelated sites which can simply be linked to in content nor have unnecessarily repeated links.&lt;br /&gt;
* Links that facilitate sharing (source control, issue tracker, documentation, discussion) are in the &#039;Useful links&#039; section where possible.&lt;br /&gt;
* Conventions are followed where possible. ( eg: https://docs.moodle.org/dev/Guidelines_for_contributed_code#How_to_submit_code)&lt;br /&gt;
* Table config_plugin (not config) is used to store settings particular to a plugin.&lt;br /&gt;
&lt;br /&gt;
Comments made during the review can usually be removed prior to approval if requested.&lt;br /&gt;
&lt;br /&gt;
===Recommended URLs===&lt;br /&gt;
We usually request for the following data to be entered along with the plugin entry in order to facilitate easier sharing of information and feedback. So, in order of recommendation, they are :&lt;br /&gt;
# [https://docs.moodle.org/dev/Guidelines_for_contributed_code#How_to_submit_code| Code repository], this could be any publicly accessible code repository.  The suggested naming convention of the repository is [https://docs.moodle.org/dev/Guidelines_for_contributed_code#How_to_submit_code| moodle-{plugintype}_{pluginname}].&lt;br /&gt;
#*Moodle development [https://docs.moodle.org/dev/Process#Develop_the_code_using_Git| uses git] almost 100% of the time as such lots of developers choose to have git repositories for their plugins too. There are popular public repositories, noteably github.com has some support on plugins directory for uploading of versions via a github repository plugin.&lt;br /&gt;
# Issue/Bug tracker. This is to enable users and other a quick link to easily report issues they encounter with your plugin. &lt;br /&gt;
#*You can choose to have a new component created in [https://tracker.moodle.org/browse/CONTRIB/| Tracker]. You can also choose to have it elsewhere as long as it is publicly accessible. (See [https://moodle.org/mod/forum/discuss.php?d=213419&amp;amp;mode=3| related discussion])&lt;br /&gt;
# Documentation. This could be at docs.moodle.org or anywhere publicly accessible.&lt;br /&gt;
# Website. This could be to demo, further describe or simply to link to one relevant page.&lt;br /&gt;
&lt;br /&gt;
===Other recommendations===&lt;br /&gt;
* Long and short descriptions are populated to allow for easy search/indexing of your plugin.&lt;br /&gt;
&lt;br /&gt;
==Frequently asked questions==&lt;br /&gt;
===Q: My code contains several components, why can&#039;t I distribute it as a single package?===&lt;br /&gt;
A: Moodle&#039;s architecture supposes that plugins are installed independently. However you can contact [https://moodle.org/user/view.php?id=1146834&amp;amp;course=5 Aparup] or [http://moodle.org/user/view.php?id=51473&amp;amp;course=5 Anthony] and ask for your plugins to be made into a set.&lt;br /&gt;
 &lt;br /&gt;
For versions from Moodle 2.2 onwards you can specify that one plugin depends on another in your [[version.php]] file.&lt;br /&gt;
&lt;br /&gt;
===Q: I don&#039;t know which Moodle plugin type I should use. Can I just make a &#039;local&#039; plugin and get it done?===&lt;br /&gt;
&lt;br /&gt;
A: Most of the time there will be an applicable plugin type that will fit your add-on plugin. Using an appropriate plugin type allows you to use the relevant [[API]] and provide users with a common user interface throughout Moodle.  This minimises work for you.  The plugin will also be more easily understood by administrators and more people will use it. &lt;br /&gt;
&lt;br /&gt;
We have seen that quite often a local plugin could actually have been an [[Admin tools|admin tool]] plugin, so consider if that is applicable in your case.&lt;br /&gt;
&lt;br /&gt;
Here is the full  [https://docs.moodle.org/dev/Plugins list of plugins] to choose from. If you think there is a need for a new plugin type, we&#039;re happy to consider API improvements.&lt;br /&gt;
&lt;br /&gt;
For more information about [[Local plugins]], see [https://moodle.org/mod/forum/discuss.php?d=224231 this clarification].&lt;br /&gt;
&lt;br /&gt;
===Q: I&#039;ve a plugin to share that requires closed (or non-GPL compatible) source software. Can i share this in the plugins directory? ===&lt;br /&gt;
&lt;br /&gt;
A: Yes you can but there are several things you must do to share this properly. Paraphrasing Martin, this is OK to be approved IF (and only if):&lt;br /&gt;
&lt;br /&gt;
 1) We give users FULL information on the dependency and what they need to do, in the description of the plugin.&lt;br /&gt;
 2) We make it explicit that the required code is closed source and that we cannot vouch for it. The risks are all theirs to judge from wherever they obtain the software.&lt;br /&gt;
&lt;br /&gt;
You can use the &#039;Potential privacy issues&#039; field when editing the plugin to help describe this clearly.&lt;br /&gt;
&lt;br /&gt;
Note: Your plugin must still satisfy other validations, such as not breaking moodle (without the required non-GPL software).&lt;br /&gt;
&lt;br /&gt;
===Q: How to help with language support to any plugin in the plugins directory?===&lt;br /&gt;
A: Read this post for the procedure - http://lang.moodle.org/mod/forum/discuss.php?d=2485&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Plugin documentation]] for information on providing documentation for your plugin right here in docs.moodle.org&lt;br /&gt;
* [[Plugin reviews]] for information on how to volunteer to write plugin reviews&lt;br /&gt;
* Continuous integration with [https://docs.moodle.org/dev/Travis#Moodle_plugins Travis-ci].&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_validation&amp;diff=47230</id>
		<title>Plugin validation</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_validation&amp;diff=47230"/>
		<updated>2015-01-19T00:27:21Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Manual checks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before a plugin can be made available via the [http://moodle.org/plugins/ Moodle Plugins directory] it has to pass both an automatic and a manual validation process. The automatic checks are repeated for each new version of the plugin that is added, however the [http://moodle.org/mod/forum/discuss.php?d=192083#p837517 manual checks are only done for the initial release]. The aim is to complete manual checks within three working days of first submission, but sometimes based on timing and/or allocation of resources, it can take longer than that, so please be patient.&lt;br /&gt;
&lt;br /&gt;
==The process==&lt;br /&gt;
 Plugin submission --&amp;gt; Waiting for approval --&amp;gt; Approved.&lt;br /&gt;
 * Waiting for approval --&amp;gt; Needs more work --&amp;gt; Waiting for approval&lt;br /&gt;
 ** Click &#039;Schedule this plugin for re-approval&#039; under &#039;Admin block&#039; &amp;gt; &#039;{your plugin}&#039; &amp;gt; &#039;Schedule this plugin for re-approval&#039; when ready to go back into the approval queue.&lt;br /&gt;
&lt;br /&gt;
Note: Plugin approvers are always get notified on all plugins that aren&#039;t approved. Feel free to leave us messages in the plugin comments during this phase.&lt;br /&gt;
&lt;br /&gt;
==Automatic validation==&lt;br /&gt;
&lt;br /&gt;
===General rules for all plugin types===&lt;br /&gt;
* Plugin name with [[Frankenstyle]] prefix must be unique in moodle.org/plugins. If there is another plugin with the same name you must either add new versions to this plugin (if it is yours) or rename your plugin if the names are accidentally the same. First in first served.&lt;br /&gt;
* The plugin must be uploaded as a single zip file&lt;br /&gt;
* The zip file must contain a single subfolder, named after your plugin (although the validator can also automatically rename subfolders generated by repos such as GitHub, which appear in the form &#039;username-moodle-pluginname-branchname&#039;)&lt;br /&gt;
* The subfolder must be laid out in such a way that the uploaded file could be unzipped directly into the top-level folder for that plugin type (e.g. an activity plugin called &#039;myplugin&#039; should install correctly when unzipped in the Moodle /mod folder, creating a subfolder /mod/myplugin with all the standard files within it).&lt;br /&gt;
* The subfolder must contain a file called [[version.php]]. It should describe properties like &#039;version&#039;, &#039;requires&#039;, &#039;cron&#039;, &#039;component&#039;, &#039;maturity&#039;, &#039;release&#039; and &#039;dependencies&#039; . See exceptions below.&lt;br /&gt;
* Language file must be present in lang/en/FULLNAME.php (for Moodle 2.0+) or lang/en_utf8/FULLNAME.php (for Moodle 1.9). FULLNAME is the plugin name with frankenstyle prefix. See exceptions below.&lt;br /&gt;
* Language file must declare either $string[&#039;modulename&#039;] (for activity modules) or $string[&#039;filtername&#039;] (for Filters) or $string[&#039;pluginname&#039;] (for all other plugin types). See exceptions below.&lt;br /&gt;
* The names of all database tables should start with the full &#039;frankenstyle&#039; plugin name. For example block_myblock, or auth_paypal. See exceptions below.&lt;br /&gt;
* The subfolder should contain a file called README.txt or README.md. (the validator can automatically rename other extensions to .txt) with details about the current release of the plugin.&lt;br /&gt;
&lt;br /&gt;
===Exceptions===&lt;br /&gt;
* [[version.php]] is required for Moodle 2.5 and onwards. It isn&#039;t strictly required (but it is always recommended) for older moodle versions for the following plugin types:&lt;br /&gt;
** Themes for Moodle 2.0 to 2.4&lt;br /&gt;
** Course formats for Moodle 2.0 to 2.4&lt;br /&gt;
** Blocks for Moodle 1.9&lt;br /&gt;
** Auth for Moodle 1.9&lt;br /&gt;
* language file is not required for plugins for Moodle 1.9 that are not activity modules&lt;br /&gt;
* $string[&#039;pluginname&#039;] is not required for plugins for Moodle 1.9 that are not activity modules&lt;br /&gt;
* Question types for Moodle versions &amp;lt;= 2.1 instead of $string[&#039;pluginname&#039;] should declare $string[NAME] (where NAME is the name of the plugin without frankenstyle prefix). Starting from 2.2 this was fixed and $string[&#039;pluginname&#039;] shall be used.&lt;br /&gt;
* database tables are allowed to skip mod_ prefix for activity modules&lt;br /&gt;
* database tables are allowed to have question_ prefix instead of qtype_ for Question types. This is for historical reasons, all newly developed plugins are encouraged to have qtype_ prefix.&lt;br /&gt;
&lt;br /&gt;
===Additional checks for activity modules===&lt;br /&gt;
* $module-&amp;gt;version defined in version.php&lt;br /&gt;
* $module-&amp;gt;requires defined in version.php&lt;br /&gt;
* file lib.php exists&lt;br /&gt;
* file lib.php contains “function xxxx_add_instance”&lt;br /&gt;
* file lib.php contains “function xxxx_update_instance”&lt;br /&gt;
* file view.php exists&lt;br /&gt;
* file index.php exists&lt;br /&gt;
* db/install.xml exists&lt;br /&gt;
* db/upgrade.php exists&lt;br /&gt;
* db/access.php exists&lt;br /&gt;
&lt;br /&gt;
===Checks for particular plugin types===&lt;br /&gt;
* Themes: file config.php exists&lt;br /&gt;
* Blocks: file block_xxxx.php exists&lt;br /&gt;
* Auth: file auth.php exists&lt;br /&gt;
* Course formats: file format.php exists&lt;br /&gt;
&lt;br /&gt;
==The Other category in the plugins directory==&lt;br /&gt;
&lt;br /&gt;
If your plugin does not yet meet all the different standards, you are encouraged to add it to the [https://moodle.org/plugins/browse.php?list=category&amp;amp;id=38 Moodle Plugins Directory Other category]. Plugins in this category will be excluded from any automated processes such as installations or updates. Then when the plugin is improved to meet the standards, it can be moved to an another category in the plugins directory.&lt;br /&gt;
&lt;br /&gt;
==Manual checks==&lt;br /&gt;
Before the plugin is publicly viewable a trusted reviewer will look through the code to make sure it is a valid plugin. These checks are completed by [https://moodle.org/user/view.php?id=1601&amp;amp;course=5 David Mudrak] (Plugins Liaison, Moodle HQ) and [https://moodle.org/user/view.php?id=51473&amp;amp;course=5 Anthony Borrow] (on a volunteer basis), so please bear with us if this sometimes takes a little longer than you expect. These checks include:&lt;br /&gt;
* The plugin installs cleanly&lt;br /&gt;
* It does not contain any obviously harmful code&lt;br /&gt;
* It is not a spam entry (This is somewhat along the lines of the [https://moodle.org/mod/page/view.php?id=7080 Moodle.org site policy] too)&lt;br /&gt;
* It does not duplicate an already uploaded plugin (or functionality already available in core) &lt;br /&gt;
* It mentions GPL license (if not a boilerplate atop every file then somewhere in the downloadable zip).  (or be [http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses| completely GPL compatible])&lt;br /&gt;
** On what the copyright should be, refer to https://moodle.org/mod/forum/discuss.php?d=213610#p1117434&lt;br /&gt;
* It has documentation and referenced URLs in basic english.&lt;br /&gt;
* It does not lead to unrelated sites which can simply be linked to in content nor have unnecessarily repeated links.&lt;br /&gt;
* Links that facilitate sharing (source control, issue tracker, documentation, discussion) are in the &#039;Useful links&#039; section where possible.&lt;br /&gt;
* Conventions are followed where possible. ( eg: https://docs.moodle.org/dev/Guidelines_for_contributed_code#How_to_submit_code)&lt;br /&gt;
* Table config_plugin (not config) is used to store settings particular to a plugin.&lt;br /&gt;
&lt;br /&gt;
Comments made during the review can usually be removed prior to approval if requested.&lt;br /&gt;
&lt;br /&gt;
===Recommended URLs===&lt;br /&gt;
We usually request for the following data to be entered along with the plugin entry in order to facilitate easier sharing of information and feedback. So, in order of recommendation, they are :&lt;br /&gt;
# [https://docs.moodle.org/dev/Guidelines_for_contributed_code#How_to_submit_code| Code repository], this could be any publicly accessible code repository.  The suggested naming convention of the repository is [https://docs.moodle.org/dev/Guidelines_for_contributed_code#How_to_submit_code| moodle-{plugintype}_{pluginname}].&lt;br /&gt;
#*Moodle development [https://docs.moodle.org/dev/Process#Develop_the_code_using_Git| uses git] almost 100% of the time as such lots of developers choose to have git repositories for their plugins too. There are popular public repositories, noteably github.com has some support on plugins directory for uploading of versions via a github repository plugin.&lt;br /&gt;
# Issue/Bug tracker. This is to enable users and other a quick link to easily report issues they encounter with your plugin. &lt;br /&gt;
#*You can choose to have a new component created in [https://tracker.moodle.org/browse/CONTRIB/| Tracker]. You can also choose to have it elsewhere as long as it is publicly accessible. (See [https://moodle.org/mod/forum/discuss.php?d=213419&amp;amp;mode=3| related discussion])&lt;br /&gt;
# Documentation. This could be at docs.moodle.org or anywhere publicly accessible.&lt;br /&gt;
# Website. This could be to demo, further describe or simply to link to one relevant page.&lt;br /&gt;
&lt;br /&gt;
===Other recommendations===&lt;br /&gt;
* Long and short descriptions are populated to allow for easy search/indexing of your plugin.&lt;br /&gt;
&lt;br /&gt;
==Frequently asked questions==&lt;br /&gt;
===Q: My code contains several components, why can&#039;t I distribute it as a single package?===&lt;br /&gt;
A: Moodle&#039;s architecture supposes that plugins are installed independently. However you can contact [https://moodle.org/user/view.php?id=1146834&amp;amp;course=5 Aparup] or [http://moodle.org/user/view.php?id=51473&amp;amp;course=5 Anthony] and ask for your plugins to be made into a set.&lt;br /&gt;
 &lt;br /&gt;
For versions from Moodle 2.2 onwards you can specify that one plugin depends on another in your [[version.php]] file.&lt;br /&gt;
&lt;br /&gt;
===Q: I don&#039;t know which Moodle plugin type I should use. Can I just make a &#039;local&#039; plugin and get it done?===&lt;br /&gt;
&lt;br /&gt;
A: Most of the time there will be an applicable plugin type that will fit your add-on plugin. Using an appropriate plugin type allows you to use the relevant [[API]] and provide users with a common user interface throughout Moodle.  This minimises work for you.  The plugin will also be more easily understood by administrators and more people will use it. &lt;br /&gt;
&lt;br /&gt;
We have seen that quite often a local plugin could actually have been an [[Admin tools|admin tool]] plugin, so consider if that is applicable in your case.&lt;br /&gt;
&lt;br /&gt;
Here is the full  [https://docs.moodle.org/dev/Plugins list of plugins] to choose from. If you think there is a need for a new plugin type, we&#039;re happy to consider API improvements.&lt;br /&gt;
&lt;br /&gt;
For more information about [[Local plugins]], see [https://moodle.org/mod/forum/discuss.php?d=224231 this clarification].&lt;br /&gt;
&lt;br /&gt;
===Q: I&#039;ve a plugin to share that requires closed (or non-GPL compatible) source software. Can i share this in the plugins directory? ===&lt;br /&gt;
&lt;br /&gt;
A: Yes you can but there are several things you must do to share this properly. Paraphrasing Martin, this is OK to be approved IF (and only if):&lt;br /&gt;
&lt;br /&gt;
 1) We give users FULL information on the dependency and what they need to do, in the description of the plugin.&lt;br /&gt;
 2) We make it explicit that the required code is closed source and that we cannot vouch for it. The risks are all theirs to judge from wherever they obtain the software.&lt;br /&gt;
&lt;br /&gt;
You can use the &#039;Potential privacy issues&#039; field when editing the plugin to help describe this clearly.&lt;br /&gt;
&lt;br /&gt;
Note: Your plugin must still satisfy other validations, such as not breaking moodle (without the required non-GPL software).&lt;br /&gt;
&lt;br /&gt;
===Q: How to help with language support to any plugin in the plugins directory?===&lt;br /&gt;
A: Read this post for the procedure - http://lang.moodle.org/mod/forum/discuss.php?d=2485&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Plugin documentation]] for information on providing documentation for your plugin right here in docs.moodle.org&lt;br /&gt;
* [[Plugin reviews]] for information on how to volunteer to write plugin reviews&lt;br /&gt;
* Continuous integration with [https://docs.moodle.org/dev/Travis#Moodle_plugins Travis-ci].&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=version.php&amp;diff=38640</id>
		<title>version.php</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=version.php&amp;diff=38640"/>
		<updated>2013-03-28T23:58:50Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: adding subpackage and author options to comments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This file is included in the main directory of plugin. It is compulsory for most plugin types. Even when not compulsory it is highly recommended. &lt;br /&gt;
&lt;br /&gt;
It contains a number of fields, which are used during the install / upgrade process to make sure the plugin is compatible with the current Moodle install, as well as spotting whether an upgrade is needed.&lt;br /&gt;
&lt;br /&gt;
The file is a standard PHP file, starting with an opening &#039;&amp;amp;lt;?php&#039; tag and defining the following variables:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note! For Activity modules replace $plugin-&amp;gt; with $module-&amp;gt; in the following example!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* $plugin-&amp;gt;version = 2011051000;&lt;br /&gt;
** Required - the version number of your plugin in the form YYYYMMDDxx, so this example is 10th May 2011 (with 00 indicating this is the first version for that day)&lt;br /&gt;
* $plugin-&amp;gt;requires = 2010112400;&lt;br /&gt;
** Optional - minimum version number of Moodle that this plugin requires (Moodle 1.9 = 2007101509; Moodle 2.0 = 2010112400; Moodle 2.1 = 2011070100; Moodle 2.2 = 2011120500; Moodle 2.3 = 2012062500). See [[Releases]] for a full list.&lt;br /&gt;
* $plugin-&amp;gt;cron = 0;&lt;br /&gt;
** Optional - time interval (in seconds) between calls to the plugin&#039;s &#039;cron&#039; function; set to 0 to disable the cron function calls.&lt;br /&gt;
** Cron support is not yet implemented for all plugins.&lt;br /&gt;
* $plugin-&amp;gt;component = &#039;plugintype_pluginname&#039;;&lt;br /&gt;
** Optional - &#039;&#039;frankenstyle&#039;&#039; plugin name, strongly recommended. It is used for installation and upgrade diagnostics.&lt;br /&gt;
* $plugin-&amp;gt;maturity = MATURITY_STABLE;&lt;br /&gt;
** Optional - how stable the plugin is: MATURITY_ALPHA, MATURITY_BETA, MATURITY_RC, MATURITY_STABLE (Moodle 2.0 and above)&lt;br /&gt;
* $plugin-&amp;gt;release = &#039;2.x (Build: 2011051000)&#039;;&lt;br /&gt;
** Optional - Human-readable version name&lt;br /&gt;
* $plugin-&amp;gt;dependencies = array(&#039;mod_forum&#039; =&amp;gt; ANY_VERSION, &#039;mod_data&#039;  =&amp;gt; 2010020300);  &lt;br /&gt;
** Optional - list of other plugins that are required for this plugin to work (Moodle 2.2 and above)&lt;br /&gt;
** In this example, the plugin requires any version of the forum activity and version &#039;20100020300&#039; (or above) of the database activity&lt;br /&gt;
&lt;br /&gt;
Here is a template to copy and paste:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// This file is part of Moodle - http://moodle.org/&lt;br /&gt;
//&lt;br /&gt;
// Moodle is free software: you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// Moodle is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with Moodle.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TODO&lt;br /&gt;
 *&lt;br /&gt;
 * @package   TODO_FRANKENSTYLE&lt;br /&gt;
 * @subpackage TODO_SUBPACKAGE&lt;br /&gt;
 * @author TODO_AUTHOR&lt;br /&gt;
 * @copyright TODO_COPYRIGHT&lt;br /&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
defined(&#039;MOODLE_INTERNAL&#039;) || die();&lt;br /&gt;
&lt;br /&gt;
$plugin-&amp;gt;version   = TODO;&lt;br /&gt;
$plugin-&amp;gt;requires  = TODO; // See https://docs.moodle.org/dev/Moodle_Versions&lt;br /&gt;
$plugin-&amp;gt;cron      = 0;&lt;br /&gt;
$plugin-&amp;gt;component = &#039;TODO_FRANKENSTYLE&#039;;&lt;br /&gt;
$plugin-&amp;gt;maturity  = MATURITY_STABLE;&lt;br /&gt;
$plugin-&amp;gt;release   = &#039;TODO&#039;;&lt;br /&gt;
&lt;br /&gt;
$plugin-&amp;gt;dependencies = array(&lt;br /&gt;
    &#039;mod_forum&#039; =&amp;gt; ANY_VERSION,&lt;br /&gt;
    &#039;mod_data&#039;  =&amp;gt; TODO&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Moodle versions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=How_to_create_a_patch&amp;diff=28863</id>
		<title>How to create a patch</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=How_to_create_a_patch&amp;diff=28863"/>
		<updated>2011-08-01T12:57:14Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you have made some changes to the code that you would like to share with the community, particularly if you want to send them to one of the core developers for possible inclusion in Moodle Core, it is very helpful if you can provide them as a [[Patch|patch file]]. Sometimes also called a diff file.&lt;br /&gt;
&lt;br /&gt;
This page explains how you can make a patch file. Patch is a standard format, and there are many options for how to create one. Pick the one that is easiest for you.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
One of the most critical aspects of patch usage is identifying for your audience the location for the patch file for application relative to the -p flag! When you create patches note your location and provide that when you share patches. &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note, I have not been able to test most of these instructions. They are about right, but I am hoping that as people use them, they will fill in any gaps, correct any details, and so on.[[User:Tim Hunt|Tim Hunt]] 08:40, 25 June 2007 (CDT)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Creating a patch using diff==&lt;br /&gt;
&lt;br /&gt;
diff is the a linux command line program, and is where patch files originated. It requires that you have two copies of the code, one with your changes, and one without. Suppose these two copies are in folders called &#039;standard_moodle&#039; and &#039;my_moodle&#039; which are subdirectories of the current folder. Then to create the patch, type:&lt;br /&gt;
&lt;br /&gt;
 diff -Naur standard_moodle my_moodle &amp;gt; patch.txt&lt;br /&gt;
&lt;br /&gt;
==Creating a patch using CVS (command line)==&lt;br /&gt;
&lt;br /&gt;
It is easier if you are using CVS to manage your development, because you don&#039;t need to keep the copy of &#039;standard_moodle&#039;. CVS takes care of that for you. In your workspace (sandbox) type:&lt;br /&gt;
&lt;br /&gt;
 cvs diff -uN &amp;gt; patch.txt&lt;br /&gt;
&lt;br /&gt;
If you have unversioned files to include in your patch, you will notice that the above command simply adds the file&#039;s name to the top of your patch, prefixed with a question mark. This is because your new file is not tagged for adding to the repository. Just do&lt;br /&gt;
&lt;br /&gt;
 cvs add newfile&lt;br /&gt;
&lt;br /&gt;
Then &lt;br /&gt;
&lt;br /&gt;
 cvs diff -uNa &amp;gt; patch.txt&lt;br /&gt;
&lt;br /&gt;
This should add the correct code to the patch, so that someone applying the patch to their working copy will have a new file created at the right place (hopefully!).&lt;br /&gt;
&lt;br /&gt;
If your patch, for some reason, contains a lot of white space changes in many files, you might want to add -Bbw to the diff call. Make sure these changes are really not significant (like adding or removing a space at the end of a line - editors like Eclipse sometimes do this automatically). This can make a patch a lot smaller, and thus easier to review. The complete call would then be &lt;br /&gt;
&lt;br /&gt;
 cvs diff -uNawbB &amp;gt; patch.txt&lt;br /&gt;
&lt;br /&gt;
==Creating a patch using Tortoise CVS==&lt;br /&gt;
&lt;br /&gt;
[http://www.tortoisecvs.org/ Tortoise CVS] is a Windows GUI front end for CVS. To create a patch, right-click on a folder in CVS, and choose &#039;&#039;&#039;CVS -&amp;gt; Make patch ...&#039;&#039;&#039; from the context menu.&lt;br /&gt;
&lt;br /&gt;
==Creating a patch using Eclipse==&lt;br /&gt;
&lt;br /&gt;
See [[Setting_up_Eclipse#Creating_a_patch]]. Eclipse makes creating patches really easy, once you have got it set up correctly.&lt;br /&gt;
&lt;br /&gt;
==Creating a patch using WinMerge==&lt;br /&gt;
&lt;br /&gt;
[http://winmerge.org/ WinMerge] is a nice windows GUI for comparing folders. In this sense it is like the original command-line &#039;diff&#039; program. You need a copy of &#039;standard_moodle&#039; and &#039;my_moodle&#039;. Use &#039;&#039;&#039;File -&amp;gt; Open...&#039;&#039;&#039; to open the two versions for comparison. This will give you a nice view of what you have changed. Then do &#039;&#039;&#039;Tools -&amp;gt; Generate patch ...&#039;&#039;&#039;. In the dialogue box, make sure you select Style: Unified in the Format box.&lt;br /&gt;
&lt;br /&gt;
==Creating a patch using Git==&lt;br /&gt;
&lt;br /&gt;
Creating a patch if you&#039;re using Git for version control is similar to CVS, and similarly you don&#039;t need an unchanged copy of moodle to diff against.&lt;br /&gt;
The easiest way to create a patch for the last commit is&lt;br /&gt;
&lt;br /&gt;
 git show &amp;gt; patch.txt&lt;br /&gt;
&lt;br /&gt;
or if you want to create a patch between 2 specific commits you can use git diff&lt;br /&gt;
&lt;br /&gt;
 git diff &#039;&#039;commitid1&#039;&#039; &#039;&#039;commitid2&#039;&#039; &amp;gt; patch.txt&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a tool, format-patch, for formatting a patch to send as an e-mail. You can create patches for the last &#039;&#039;n&#039;&#039; revisions like this:&lt;br /&gt;
&lt;br /&gt;
 git format-patch -&#039;&#039;n&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
which will create the patch in the current directory. The -o parameter allows you to specify a different output directory.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [http://drupal.org/node/1054616 Detailed instructions for creating patches using Git]:  [http://moodle.org/mod/forum/discuss.php?d=181953#p792050 shared by Frank Ralf]&lt;br /&gt;
* [[How_to_apply_a_patch]]&lt;br /&gt;
* [[Patch]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Releases&amp;diff=26069</id>
		<title>Releases</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Releases&amp;diff=26069"/>
		<updated>2011-06-18T22:28:21Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: adding Roadmap to See also section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UNDER RE-CONSTRUCTION!&lt;br /&gt;
&lt;br /&gt;
Derived from:&lt;br /&gt;
* https://docs.moodle.org/20/en/Latest_release_notes&lt;br /&gt;
* https://docs.moodle.org/20/en/Moodle_version_history&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.0==&lt;br /&gt;
*Moodle 1.0 - 20 August 2002&lt;br /&gt;
*Moodle 1.0.1 - 26 August 2002&lt;br /&gt;
*Moodle 1.0.2 - 2 September 2002&lt;br /&gt;
*Moodle 1.0.3 - 5 September 2002&lt;br /&gt;
*Moodle 1.0.4 - 10 September 2002&lt;br /&gt;
*Moodle 1.0.5 - 27 September 2002&lt;br /&gt;
*Moodle 1.0.6 - 26 October 2002&lt;br /&gt;
:: 1.0.6.1 - 6 Nov&lt;br /&gt;
:: 1.0.6.2 - 11 Nov&lt;br /&gt;
:: 1.0.6.3 - 14 Nov&lt;br /&gt;
:: 1.0.6.4 - 25 Nov&lt;br /&gt;
*Moodle 1.0.7 - 9 December 2002&lt;br /&gt;
*Moodle 1.0.8 - 7 January 2003&lt;br /&gt;
*Moodle 1.0.9 - 30 May 2003&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.1==&lt;br /&gt;
*Moodle 1.1 - 29 August 2003&lt;br /&gt;
*Moodle 1.1.1 - 11 September 2003&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.2==&lt;br /&gt;
*Moodle 1.2 - 20 March 2004&lt;br /&gt;
*Moodle 1.2.1 - 25 March 2004&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.3==&lt;br /&gt;
*Moodle 1.3 - 25 May 2004&lt;br /&gt;
*Moodle 1.3.1 - 4 June 2004&lt;br /&gt;
*Moodle 1.3.2 - 9 July 2004&lt;br /&gt;
*Moodle 1.3.3 - 16 July 2004&lt;br /&gt;
*Moodle 1.3.4 - 11 August 2004&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.4==&lt;br /&gt;
*Moodle 1.4 - 31 August 2004&lt;br /&gt;
*Moodle 1.4.1 - 12 September 2004&lt;br /&gt;
*Moodle 1.4.2 - 5 November 2004&lt;br /&gt;
*Moodle 1.4.3 - 21 December 2004&lt;br /&gt;
*Moodle 1.4.4 - 7 March 2005 &lt;br /&gt;
*[[Moodle 1.4.5 release notes|Moodle 1.4.5]] - 7 May 2005&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.5==&lt;br /&gt;
*[[Moodle 1.5 release notes|Moodle 1.5]] - 5 June 2005&lt;br /&gt;
*[[Moodle 1.5.1 release notes|Moodle 1.5.1]] - 8 July 2005&lt;br /&gt;
*[[Moodle 1.5.2 release notes|Moodle 1.5.2]] - 16 July 2005&lt;br /&gt;
*[[Moodle 1.5.3 release notes|Moodle 1.5.3]] - 11 November 2005&lt;br /&gt;
*[[Moodle 1.5.4 release notes|Moodle 1.5.4]] - 21 May 2006&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.6==&lt;br /&gt;
*[[Moodle 1.6 release notes|Moodle 1.6]] - 20 June 2006&lt;br /&gt;
*[[Moodle 1.6.1 release notes|Moodle 1.6.1]] - 20 July 2006&lt;br /&gt;
*[[Moodle 1.6.2 release notes|Moodle 1.6.2]] - 12 September 2006&lt;br /&gt;
*[[Moodle 1.6.3 release notes|Moodle 1.6.3]] - 10 October 2006&lt;br /&gt;
*[[Moodle 1.6.4 release notes|Moodle 1.6.4]] - 17 January 2007&lt;br /&gt;
*[[Moodle 1.6.5 release notes|Moodle 1.6.5]] - 30 March 2007&lt;br /&gt;
*Moodle 1.6.6 - 11 January 2008&lt;br /&gt;
*Moodle 1.6.7 - 11 July 2008&lt;br /&gt;
*[[Moodle 1.6.8 release notes|Moodle 1.6.8]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.6.9 release notes|Moodle 1.6.9]] - 28 January 2009&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7==&lt;br /&gt;
*[[Moodle 1.7 release notes|Moodle 1.7]] - 7 November 2006&lt;br /&gt;
*[[Moodle 1.7.1 release notes|Moodle 1.7.1]] - 17 January 2007&lt;br /&gt;
*[[Moodle 1.7.2 release notes|Moodle 1.7.2]] - 30 March 2007&lt;br /&gt;
*[[Moodle 1.7.3 release notes|Moodle 1.7.3]] - 11 October 2007&lt;br /&gt;
*[[Moodle 1.7.4 release notes|Moodle 1.7.4]] - 11 January 2008&lt;br /&gt;
*[[Moodle 1.7.5 release notes|Moodle 1.7.5]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.7.6 release notes|Moodle 1.7.6]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.7.7 release notes|Moodle 1.7.7]] - 28 January 2009&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8==&lt;br /&gt;
*[[Moodle 1.8 release notes|Moodle 1.8]] - 30 March 2007&lt;br /&gt;
*[[Moodle 1.8.1 release notes|Moodle 1.8.1]] - 14 June 2007&lt;br /&gt;
*[[Moodle 1.8.2 release notes|Moodle 1.8.2]] - 8 July 2007&lt;br /&gt;
*[[Moodle 1.8.3 release notes|Moodle 1.8.3]] - 11 October 2007&lt;br /&gt;
*[[Moodle 1.8.4 release notes|Moodle 1.8.4]] - 11 January 2008&lt;br /&gt;
*[[Moodle 1.8.5 release notes|Moodle 1.8.5]] - 8 April 2008&lt;br /&gt;
*[[Moodle 1.8.6 release notes|Moodle 1.8.6]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.8.7 release notes|Moodle 1.8.7]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.8.8 release notes|Moodle 1.8.8]] - 28 January 2009&lt;br /&gt;
*[[Moodle 1.8.9 release notes|Moodle 1.8.9]] - 15 May 2009&lt;br /&gt;
*[[Moodle 1.8.10 release notes|Moodle 1.8.10]] - 26 October 2009&lt;br /&gt;
*[[Moodle 1.8.11 release notes|Moodle 1.8.11]] - 25 November 2009&lt;br /&gt;
*[[Moodle 1.8.12 release notes|Moodle 1.8.12]] - 27 March 2010&lt;br /&gt;
*[[Moodle 1.8.13 release notes|Moodle 1.8.13]] - 8 June 2010&lt;br /&gt;
*[[Moodle 1.8.14 release notes|Moodle 1.8.14]] - 3 December 2010&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9==&lt;br /&gt;
*[[Moodle 1.9 release notes|Moodle 1.9]] - 3 March 2008&lt;br /&gt;
*[[Moodle 1.9.1 release notes|Moodle 1.9.1]] - 15 May 2008&lt;br /&gt;
*[[Moodle 1.9.2 release notes|Moodle 1.9.2]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.9.3 release notes|Moodle 1.9.3]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.9.4 release notes|Moodle 1.9.4]] - 28 January 2009&lt;br /&gt;
*[[Moodle 1.9.5 release notes|Moodle 1.9.5]] - 13 May 2009&lt;br /&gt;
*[[Moodle 1.9.6 release notes|Moodle 1.9.6]] - 21 October 2009&lt;br /&gt;
*[[Moodle 1.9.7 release notes|Moodle 1.9.7]] - 25 November 2009&lt;br /&gt;
*[[Moodle 1.9.8 release notes|Moodle 1.9.8]] - 25 March 2010&lt;br /&gt;
*[[Moodle 1.9.9 release notes|Moodle 1.9.9]] - 8 June 2010&lt;br /&gt;
*[[Moodle 1.9.10 release notes|Moodle 1.9.10]] - 25 October 2010&lt;br /&gt;
*[[Moodle 1.9.11 release notes|Moodle 1.9.11]] - 21 February 2011&lt;br /&gt;
&lt;br /&gt;
==Moodle 2.0==&lt;br /&gt;
*[[Moodle 2.0 release notes|Moodle 2.0]] - 24 November 2010&lt;br /&gt;
*[[Moodle 2.0.1 release notes|Moodle 2.0.1]] - 25 December 2010&lt;br /&gt;
*[[Moodle 2.0.2 release notes|Moodle 2.0.2]] - 21 February 2011&lt;br /&gt;
*[[Moodle 2.0.3 release notes|Moodle 2.0.3]] - 5 May 2011&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[https://docs.moodle.org/20/en/Roadmap Roadmap]&lt;br /&gt;
*[https://docs.moodle.org/20/en/Updates Updates]&lt;br /&gt;
&lt;br /&gt;
[[Category:Release notes]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Historique des versions]]&lt;br /&gt;
[[es:Historia de las versiones]]&lt;br /&gt;
[[de:Versionshistorie]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Releases&amp;diff=26068</id>
		<title>Releases</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Releases&amp;diff=26068"/>
		<updated>2011-06-18T22:26:25Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: adding See also to Updates page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UNDER RE-CONSTRUCTION!&lt;br /&gt;
&lt;br /&gt;
Derived from:&lt;br /&gt;
* https://docs.moodle.org/20/en/Latest_release_notes&lt;br /&gt;
* https://docs.moodle.org/20/en/Moodle_version_history&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.0==&lt;br /&gt;
*Moodle 1.0 - 20 August 2002&lt;br /&gt;
*Moodle 1.0.1 - 26 August 2002&lt;br /&gt;
*Moodle 1.0.2 - 2 September 2002&lt;br /&gt;
*Moodle 1.0.3 - 5 September 2002&lt;br /&gt;
*Moodle 1.0.4 - 10 September 2002&lt;br /&gt;
*Moodle 1.0.5 - 27 September 2002&lt;br /&gt;
*Moodle 1.0.6 - 26 October 2002&lt;br /&gt;
:: 1.0.6.1 - 6 Nov&lt;br /&gt;
:: 1.0.6.2 - 11 Nov&lt;br /&gt;
:: 1.0.6.3 - 14 Nov&lt;br /&gt;
:: 1.0.6.4 - 25 Nov&lt;br /&gt;
*Moodle 1.0.7 - 9 December 2002&lt;br /&gt;
*Moodle 1.0.8 - 7 January 2003&lt;br /&gt;
*Moodle 1.0.9 - 30 May 2003&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.1==&lt;br /&gt;
*Moodle 1.1 - 29 August 2003&lt;br /&gt;
*Moodle 1.1.1 - 11 September 2003&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.2==&lt;br /&gt;
*Moodle 1.2 - 20 March 2004&lt;br /&gt;
*Moodle 1.2.1 - 25 March 2004&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.3==&lt;br /&gt;
*Moodle 1.3 - 25 May 2004&lt;br /&gt;
*Moodle 1.3.1 - 4 June 2004&lt;br /&gt;
*Moodle 1.3.2 - 9 July 2004&lt;br /&gt;
*Moodle 1.3.3 - 16 July 2004&lt;br /&gt;
*Moodle 1.3.4 - 11 August 2004&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.4==&lt;br /&gt;
*Moodle 1.4 - 31 August 2004&lt;br /&gt;
*Moodle 1.4.1 - 12 September 2004&lt;br /&gt;
*Moodle 1.4.2 - 5 November 2004&lt;br /&gt;
*Moodle 1.4.3 - 21 December 2004&lt;br /&gt;
*Moodle 1.4.4 - 7 March 2005 &lt;br /&gt;
*[[Moodle 1.4.5 release notes|Moodle 1.4.5]] - 7 May 2005&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.5==&lt;br /&gt;
*[[Moodle 1.5 release notes|Moodle 1.5]] - 5 June 2005&lt;br /&gt;
*[[Moodle 1.5.1 release notes|Moodle 1.5.1]] - 8 July 2005&lt;br /&gt;
*[[Moodle 1.5.2 release notes|Moodle 1.5.2]] - 16 July 2005&lt;br /&gt;
*[[Moodle 1.5.3 release notes|Moodle 1.5.3]] - 11 November 2005&lt;br /&gt;
*[[Moodle 1.5.4 release notes|Moodle 1.5.4]] - 21 May 2006&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.6==&lt;br /&gt;
*[[Moodle 1.6 release notes|Moodle 1.6]] - 20 June 2006&lt;br /&gt;
*[[Moodle 1.6.1 release notes|Moodle 1.6.1]] - 20 July 2006&lt;br /&gt;
*[[Moodle 1.6.2 release notes|Moodle 1.6.2]] - 12 September 2006&lt;br /&gt;
*[[Moodle 1.6.3 release notes|Moodle 1.6.3]] - 10 October 2006&lt;br /&gt;
*[[Moodle 1.6.4 release notes|Moodle 1.6.4]] - 17 January 2007&lt;br /&gt;
*[[Moodle 1.6.5 release notes|Moodle 1.6.5]] - 30 March 2007&lt;br /&gt;
*Moodle 1.6.6 - 11 January 2008&lt;br /&gt;
*Moodle 1.6.7 - 11 July 2008&lt;br /&gt;
*[[Moodle 1.6.8 release notes|Moodle 1.6.8]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.6.9 release notes|Moodle 1.6.9]] - 28 January 2009&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7==&lt;br /&gt;
*[[Moodle 1.7 release notes|Moodle 1.7]] - 7 November 2006&lt;br /&gt;
*[[Moodle 1.7.1 release notes|Moodle 1.7.1]] - 17 January 2007&lt;br /&gt;
*[[Moodle 1.7.2 release notes|Moodle 1.7.2]] - 30 March 2007&lt;br /&gt;
*[[Moodle 1.7.3 release notes|Moodle 1.7.3]] - 11 October 2007&lt;br /&gt;
*[[Moodle 1.7.4 release notes|Moodle 1.7.4]] - 11 January 2008&lt;br /&gt;
*[[Moodle 1.7.5 release notes|Moodle 1.7.5]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.7.6 release notes|Moodle 1.7.6]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.7.7 release notes|Moodle 1.7.7]] - 28 January 2009&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8==&lt;br /&gt;
*[[Moodle 1.8 release notes|Moodle 1.8]] - 30 March 2007&lt;br /&gt;
*[[Moodle 1.8.1 release notes|Moodle 1.8.1]] - 14 June 2007&lt;br /&gt;
*[[Moodle 1.8.2 release notes|Moodle 1.8.2]] - 8 July 2007&lt;br /&gt;
*[[Moodle 1.8.3 release notes|Moodle 1.8.3]] - 11 October 2007&lt;br /&gt;
*[[Moodle 1.8.4 release notes|Moodle 1.8.4]] - 11 January 2008&lt;br /&gt;
*[[Moodle 1.8.5 release notes|Moodle 1.8.5]] - 8 April 2008&lt;br /&gt;
*[[Moodle 1.8.6 release notes|Moodle 1.8.6]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.8.7 release notes|Moodle 1.8.7]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.8.8 release notes|Moodle 1.8.8]] - 28 January 2009&lt;br /&gt;
*[[Moodle 1.8.9 release notes|Moodle 1.8.9]] - 15 May 2009&lt;br /&gt;
*[[Moodle 1.8.10 release notes|Moodle 1.8.10]] - 26 October 2009&lt;br /&gt;
*[[Moodle 1.8.11 release notes|Moodle 1.8.11]] - 25 November 2009&lt;br /&gt;
*[[Moodle 1.8.12 release notes|Moodle 1.8.12]] - 27 March 2010&lt;br /&gt;
*[[Moodle 1.8.13 release notes|Moodle 1.8.13]] - 8 June 2010&lt;br /&gt;
*[[Moodle 1.8.14 release notes|Moodle 1.8.14]] - 3 December 2010&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9==&lt;br /&gt;
*[[Moodle 1.9 release notes|Moodle 1.9]] - 3 March 2008&lt;br /&gt;
*[[Moodle 1.9.1 release notes|Moodle 1.9.1]] - 15 May 2008&lt;br /&gt;
*[[Moodle 1.9.2 release notes|Moodle 1.9.2]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.9.3 release notes|Moodle 1.9.3]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.9.4 release notes|Moodle 1.9.4]] - 28 January 2009&lt;br /&gt;
*[[Moodle 1.9.5 release notes|Moodle 1.9.5]] - 13 May 2009&lt;br /&gt;
*[[Moodle 1.9.6 release notes|Moodle 1.9.6]] - 21 October 2009&lt;br /&gt;
*[[Moodle 1.9.7 release notes|Moodle 1.9.7]] - 25 November 2009&lt;br /&gt;
*[[Moodle 1.9.8 release notes|Moodle 1.9.8]] - 25 March 2010&lt;br /&gt;
*[[Moodle 1.9.9 release notes|Moodle 1.9.9]] - 8 June 2010&lt;br /&gt;
*[[Moodle 1.9.10 release notes|Moodle 1.9.10]] - 25 October 2010&lt;br /&gt;
*[[Moodle 1.9.11 release notes|Moodle 1.9.11]] - 21 February 2011&lt;br /&gt;
&lt;br /&gt;
==Moodle 2.0==&lt;br /&gt;
*[[Moodle 2.0 release notes|Moodle 2.0]] - 24 November 2010&lt;br /&gt;
*[[Moodle 2.0.1 release notes|Moodle 2.0.1]] - 25 December 2010&lt;br /&gt;
*[[Moodle 2.0.2 release notes|Moodle 2.0.2]] - 21 February 2011&lt;br /&gt;
*[[Moodle 2.0.3 release notes|Moodle 2.0.3]] - 5 May 2011&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[https://docs.moodle.org/20/en/Updates Updates]&lt;br /&gt;
&lt;br /&gt;
[[Category:Release notes]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Historique des versions]]&lt;br /&gt;
[[es:Historia de las versiones]]&lt;br /&gt;
[[de:Versionshistorie]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=24931</id>
		<title>Plugin contribution</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=24931"/>
		<updated>2011-06-15T07:23:44Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Does the code follow the Coding Guidelines? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the various ways to share and work collaboratively on contributed code. In the past, Moodle CONTRIB code was often stored on the Moodle CVS server. As Moodle code transitions to [https://docs.moodle.org/en/Git Git], CONTRIB code will also be transitioning with a goal of having all code maintained via git repositories by August 2011. Don&#039;t worry if you have code on CVS and do not know Git as there are many people willing to help you with the transition especially [https://docs.moodle.org/en/User:Anthony_Borrow Anthony Borrow]. &lt;br /&gt;
&lt;br /&gt;
For those neither familiar with CVS nor Git, it is recommended that you [https://docs.moodle.org/en/Git#Books_and_tutorials learn Git basics]. The nice thing about using Git is that it will leave control of the code in the hands of contributor. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sharing code&#039;&#039;&#039; - Contributed code will be shared and maintained using a public Git repository (i.e. github.com, gitorious.org, etc.).&lt;br /&gt;
*&#039;&#039;&#039;Reviewing code&#039;&#039;&#039; - If you would like your code to be tested and reviewed, please create an issue in the [http://tracker.moodle.org/ Moodle Tracker] under [http://tracker.moodle.org/browse/CONTRIB CONTRIB]. &lt;br /&gt;
*&#039;&#039;&#039;Documenting code&#039;&#039;&#039; - You can maintain helpful documentation of the features and installation instructions in [https://docs.moodle.org Moodle Docs]&lt;br /&gt;
*&#039;&#039;&#039;Distributing code&#039;&#039;&#039; - You can help others find your code by adding an entry to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] &lt;br /&gt;
*&#039;&#039;&#039;Discussing the code&#039;&#039;&#039; - You can discuss the functionality and answer questions about how to use your code in the [http://moodle.org/course/view.php?id=5 Using Moodle forums]. Users can ask questions, discuss possible ideas for improvement, etc. Once the discussion matures to a point where you may want to take action, then you can create an issue in the [http://tracker.moodle.org/ Moodle Tracker]. &lt;br /&gt;
*&#039;&#039;&#039;Maintaining code&#039;&#039;&#039; - You can further develop your code by fixing issues, adding features, and responding to other issues with the [http://tracker.moodle.org/ Moodle Tracker]. Each plugin or patch can have its own component in the CONTRIB project; however, you will need to request that the component be created in the CONTRIB project. Once created, users can easily create issues related to your contributed code. The primary maintainer of the code will be assigned as the component lead and have their tracker privileges bumped so that they can manage issues related to their contributed code. Those issues will automatically be assigned to the component lead/primary maintainer. &lt;br /&gt;
&lt;br /&gt;
==The CONTRIB Frequently Asked Question (FAQ)==&lt;br /&gt;
&#039;&#039;&#039;Question:&#039;&#039;&#039; I have written a new block, activity, patch or theme to share with the Moodle community. What is the process for contributing the code? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Answer:&#039;&#039;&#039; First, thank you for your generosity and desire to share your work with the rest of the Moodle community. Code contributions are highly valued and Moodle wants to encourage creativity and generosity in keeping with [https://docs.moodle.org/en/Pedagogy Moodle&#039;s social constructionist pedagogy]. &lt;br /&gt;
&lt;br /&gt;
As mentioned, there are various tools to help you share and support your contribution. By using a consistent methodology, your Moodle related code will be more easily found, tested, used, maintained, documented, and evaluated by fellow Moodlers and developers. Learning to use the various tools common among Moodle developers will help you to efficiently and effectively develop, share and maintain your contributed code. &lt;br /&gt;
&lt;br /&gt;
==How to submit code==&lt;br /&gt;
You have created some code that you would like to contribute to the Moodle community.  The first step is to choose which Git code hosting site you want to use. Both [http://github.com/ github.com] and [http://gitorious.org/ gitorious.org] are popular. Follow the instructions for creating a public repository for your code. This will allow others to download your code as well as suggest possible patches. As you become more familiar with collaborating with others you can also control who else you want to be able to push changes into your repository (i.e. write access). &lt;br /&gt;
&lt;br /&gt;
In order to facilitate a common naming convention of Moodle related repositories, it is suggested that you use the following format: moodle-{plugintype}_{pluginname}. For example, the birthday block has a repository name of moodle-block_birthday and is located at https://github.com/arborrow/moodle-block_birthday. Other developers can fork the code and work from their repositories.&lt;br /&gt;
&lt;br /&gt;
==How to request that your code be tested/reviewed==&lt;br /&gt;
&lt;br /&gt;
#If you do not already have an account on the [http://tracker.moodle.org] Moodle Tracker], create one and login. &lt;br /&gt;
#Create a new &amp;quot;Task&amp;quot; issue in the &amp;quot;Non-core contributed modules&amp;quot; project. Your issue will be a request that the code be tested and reviewed. &lt;br /&gt;
#Provide the link to the repository (i.e. https://github.com/arborrow/moodle-block_birthday) &lt;br /&gt;
#Provide a clear description of what the code does and the functionality that it adds to Moodle. &lt;br /&gt;
#Provide any other links to supporting documentation&lt;br /&gt;
&lt;br /&gt;
The Contrib Coordinator will then work directly with the code contributor via the Tracker to help evaluate the code, work on resolving any questions/issues found, etc. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to follow Moodle&#039;s coding guidelines [[Coding]].&lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to maintain a branch for each major Moodle release (i.e. 1.8, 1.9, etc.). The HEAD branch should be used as the development branch. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to associate each change made to an issue in the tracker. This practice is done by Moodle core developers and it is a good habit to get into so that you can go back and see why various changes were made to the code. Simple practices like these help to create good documentation of the code as it develops and matures. Commits should begin with the Moodle tracker issue number followed by a brief description of the change. &lt;br /&gt;
&lt;br /&gt;
==How to provide documentation==&lt;br /&gt;
Having great code available to the community is wonderful. It is also important to educate users about how to use the code with documentation in [[Main Page|Moodle Docs]]. See [[MoodleDocs:Guidelines for contributors|guidelines for contributors]] for more help. &lt;br /&gt;
&lt;br /&gt;
A documentation page for a contributed module should have some basic elements.  A brief introduction of what the code does, a &amp;quot;Features&amp;quot; heading, perhaps a &amp;quot;Installation&amp;quot;, &amp;quot;Tips and tricks&amp;quot; and &amp;quot;See also&amp;quot; headings, all with content of course.  Sometimes a screenshot is worth 1000 words. In the &amp;quot;See also&amp;quot; put a link to the Modules and Plug database, with a note that this is the place to download versions, and the forum where questions can be answered at moodle.org.&lt;br /&gt;
&lt;br /&gt;
Other information might include: Languages Supported, Known Issues, Supported Versions (for Moodle 1.8, 1.9), and maybe which are being actively supported. The page should be added to the contributed code category by typing &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Contributed code]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
===Possible format for a contributed code Moodle Docs page===&lt;br /&gt;
You can copy and paste the below into your Moodle documentation page.  Please add the URL links. &#039;&#039;&#039;This is only a suggestion&#039;&#039;&#039;. &lt;br /&gt;
 Start with a 2-4 line introduction. The Plug In Name works with the activity module. &lt;br /&gt;
 It makes the life of the teacher easier by ... &lt;br /&gt;
 ==Features==&lt;br /&gt;
 * Add features list or overview description here &amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; [[Image:Sample_screen_shot|thumb|500px|center|Title of screenshot]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ==Installation==&lt;br /&gt;
 Place install instructions here&lt;br /&gt;
 ==Tips and tricks==&lt;br /&gt;
 *Optional section, usually added by users later&lt;br /&gt;
 ==See also==&lt;br /&gt;
 *[Place http_address_for_M&amp;amp;P_entry_here  Name of Entry here] is a Modules and plugins database page that has download links and more information.&lt;br /&gt;
 *Discussions: [Place http_address_for_moodle_forum_or_thread_here Name of forum]&lt;br /&gt;
 &lt;br /&gt;
When no thread or forum exists for discussion, put a link to the Contributed Code forum.&lt;br /&gt;
 *Discussions: Please create or find a discussion topic in the &amp;lt;nowiki&amp;gt;[http://moodle.org/mod/forum/view.php?id=44  Contributed Code forum]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Share code with modules and plugins database==&lt;br /&gt;
Now you have a place for users to get your code, how will they know it exists? Moodle users can easily find information about contributed code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database]. When you add an entry to this database, remember that it is searchable by any field. Every field is not required, but providing as much information as possible will help people who would like to find, read about, and then install your contribution.  In particular, the name of the module and the description of its function are important.  Screen shots are helpful (but please, not larger than 350px wide!). Links to discussion (on Moodle.org or other forum) and documentation (link to your page in the [https://docs.moodle.org Moodle docs] or another location) should be included if possible.  &lt;br /&gt;
&lt;br /&gt;
Users may leave comments on your entry, so please check it periodically for questions and bug reports.  If you include contact information or a link to a discussion, your users may be able to contact you more directly.  The comments are not emailed automatically.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that entries added to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] require approval by a moderator before they will be visible to other Moodle users.&lt;br /&gt;
&lt;br /&gt;
==Support code and get feedback with forums==&lt;br /&gt;
As users become familiar with the contributed code, discussions about the code are likely to emerge. We strongly urge you to place links to at least one forum at moodle.org in your Modules and Plugins entry as well as in MoodleDocs. &lt;br /&gt;
&lt;br /&gt;
It is important to respond to users who have questions about how to use the code, suggestions for how to make it better, etc. If it looks like there is sufficient need for some contributed code to have its own forum, please create a request via the tracker in the MDL-SITE section. Moodle has included many contributed code projects and ideas into its core. &lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/view.php?id=44 Contributed code forum] is a generic forum.  Maybe create a thread &amp;quot;New Mousetrap module&amp;quot;.&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5 Using Moodle forums] The English speaking list of forums on many different subjects. &lt;br /&gt;
*[http://moodle.org/course/ A list of] other language forums and special areas in Moodle&lt;br /&gt;
&lt;br /&gt;
==Maintain and refine code with Tracker==&lt;br /&gt;
&lt;br /&gt;
In order to facilitate keeping track of feature requests, bugs, and other code issues, the contributor may request that a component be created in the CONTRIB section of the Moodle tracker. (This is the section where you initially made the request to have code included in CVS.moodle.org.)&lt;br /&gt;
&lt;br /&gt;
The contributor can be added to the group of CONTRIB developers in the tracker to manage the issues assigned to them and better coordinate with other developers. Users of the contributed code can then add issues which can be assigned directly to the maintainer. The tracker helps to manage the work flow involved in fixing bugs, working through feature requests, and maintaining the code. When committing changes, maintainers are strongly encouraged to begin the commit comment with a tracker number. &lt;br /&gt;
&lt;br /&gt;
We strongly encourage users to involve themselves in the process of creating a useful issue in tracker.  For the developer and code contributor,  describing the fix can help clarify the need for the code change. Further, it helps to establish good documentation about how the code developed. Others will be able to identify the issues addressed and understand why a particular decision was made.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
It is hoped that following this procedure, will help guide contributors of code in the process of learning the tools and skills used by the Moodle developers. Learning to submit code by using the tracker, work the code with CVS, support the code by providing documentation, share code in Modules and Plugins, maintain the code by using the tracker, and evolve the code by using the Moodle.org forums will assist you in successfully contributing to the Moodle community and working with Moodle&#039;s developers. &lt;br /&gt;
&lt;br /&gt;
Throughout this process, the CONTRIB Coordinator is here to encourage and support those contributing code to the Moodle community and fostering the development of tomorrow&#039;s Moodle developers.&lt;br /&gt;
&lt;br /&gt;
Eventually, the community may wish for the code to become part of the Moodle core. By following the steps above, the developers will be able to evaluate the merit of the contributed code, understand how users have used the code, see the issues that have emerged and thus have more information to make an informed decision about whether or not to incorporate the contributed code into core.&lt;br /&gt;
&lt;br /&gt;
==Most common recommendations for contributed code==&lt;br /&gt;
&lt;br /&gt;
There are several small issues that the CONTRIB Coordinator will typically check for when reviewing the code prior to committing to the CVS server. These issues help to ensure consistency and quality of code. Any suggestions made by the CONTRIB Coordinator should be considered recommendations aimed to help folks new to the Moodle community collaborate in a way consistent with standard practices within the Moodle community. The suggestions are meant to help avoid potential issues and facilitate the acceptance of your code.&lt;br /&gt;
&lt;br /&gt;
=== Does the file structure conform to Moodle standards? ===&lt;br /&gt;
Generally speaking, each file should have an appropriate extension (i.e. php, html, css, txt, etc.). To avoid issues with case sensitivity, folders and files are normally lower case; however, there are exceptions to this. Another common recommendation is to place the lang folder within the block or module rather than asking the user to copy files into the main lang folder. Changes made in the get_string function for Moodle 1.9 and onward make it possible to do this which goes a long way in keeping things modular. Similarly, to respect the modular nature of Moodle if a block requires a library it is usually preferred to keep it as a subdirectory in the block&#039;s folder. This can be especially helpful if your code is dependent upon a particular version of an external library.&lt;br /&gt;
&lt;br /&gt;
=== Does the code work without any obvious errors? ===&lt;br /&gt;
The CONTRIB Coordinator will try to install the block or module on a fresh Moodle installation and report back any errors. This testing is done with Debugging set to show All PHP notices and errors (not developer mode). The most common notices have to do with attempting to use a variable that has not been initialized or checked for existence. &lt;br /&gt;
&lt;br /&gt;
=== Does the code use the config_plugins table? ===&lt;br /&gt;
&lt;br /&gt;
Contributed blocks and modules are encouraged to make use of the &#039;&#039;&#039;config_plugins&#039;&#039;&#039; table rather than the config table. Maintainers are encouraged to read the documentation provided for the [http://xref.moodle.org/lib/moodlelib.php.html#get_config get_config()] and [http://xref.moodle.org/lib/moodlelib.php.html#set_config set_config()]] functions in the /lib/moodlelib.php file to help ensure that the footprint for the global $CFG variable does not become bloated.&lt;br /&gt;
&lt;br /&gt;
=== Does the code follow the [[Coding|Coding Guidelines]]? ===&lt;br /&gt;
The CONTRIB Coordinator will look at the code for general readability and point out any obvious deviations from the [[Coding|Coding Guidelines]]. While not all code needs to conform with each and every guideline, maintainers are encouraged to follow those guidelines as closely as possible. One useful tool for Moodle 2.0 is the [http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=4682|Code checker local plugin] which helps to identify many issues.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Migrating contrib code to 2.0]]&lt;br /&gt;
*[[contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Overview]]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=99037 Best practices for code modification?] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=24930</id>
		<title>Plugin contribution</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=24930"/>
		<updated>2011-06-15T07:23:02Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Does the code follow the Coding Guidelines? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the various ways to share and work collaboratively on contributed code. In the past, Moodle CONTRIB code was often stored on the Moodle CVS server. As Moodle code transitions to [https://docs.moodle.org/en/Git Git], CONTRIB code will also be transitioning with a goal of having all code maintained via git repositories by August 2011. Don&#039;t worry if you have code on CVS and do not know Git as there are many people willing to help you with the transition especially [https://docs.moodle.org/en/User:Anthony_Borrow Anthony Borrow]. &lt;br /&gt;
&lt;br /&gt;
For those neither familiar with CVS nor Git, it is recommended that you [https://docs.moodle.org/en/Git#Books_and_tutorials learn Git basics]. The nice thing about using Git is that it will leave control of the code in the hands of contributor. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sharing code&#039;&#039;&#039; - Contributed code will be shared and maintained using a public Git repository (i.e. github.com, gitorious.org, etc.).&lt;br /&gt;
*&#039;&#039;&#039;Reviewing code&#039;&#039;&#039; - If you would like your code to be tested and reviewed, please create an issue in the [http://tracker.moodle.org/ Moodle Tracker] under [http://tracker.moodle.org/browse/CONTRIB CONTRIB]. &lt;br /&gt;
*&#039;&#039;&#039;Documenting code&#039;&#039;&#039; - You can maintain helpful documentation of the features and installation instructions in [https://docs.moodle.org Moodle Docs]&lt;br /&gt;
*&#039;&#039;&#039;Distributing code&#039;&#039;&#039; - You can help others find your code by adding an entry to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] &lt;br /&gt;
*&#039;&#039;&#039;Discussing the code&#039;&#039;&#039; - You can discuss the functionality and answer questions about how to use your code in the [http://moodle.org/course/view.php?id=5 Using Moodle forums]. Users can ask questions, discuss possible ideas for improvement, etc. Once the discussion matures to a point where you may want to take action, then you can create an issue in the [http://tracker.moodle.org/ Moodle Tracker]. &lt;br /&gt;
*&#039;&#039;&#039;Maintaining code&#039;&#039;&#039; - You can further develop your code by fixing issues, adding features, and responding to other issues with the [http://tracker.moodle.org/ Moodle Tracker]. Each plugin or patch can have its own component in the CONTRIB project; however, you will need to request that the component be created in the CONTRIB project. Once created, users can easily create issues related to your contributed code. The primary maintainer of the code will be assigned as the component lead and have their tracker privileges bumped so that they can manage issues related to their contributed code. Those issues will automatically be assigned to the component lead/primary maintainer. &lt;br /&gt;
&lt;br /&gt;
==The CONTRIB Frequently Asked Question (FAQ)==&lt;br /&gt;
&#039;&#039;&#039;Question:&#039;&#039;&#039; I have written a new block, activity, patch or theme to share with the Moodle community. What is the process for contributing the code? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Answer:&#039;&#039;&#039; First, thank you for your generosity and desire to share your work with the rest of the Moodle community. Code contributions are highly valued and Moodle wants to encourage creativity and generosity in keeping with [https://docs.moodle.org/en/Pedagogy Moodle&#039;s social constructionist pedagogy]. &lt;br /&gt;
&lt;br /&gt;
As mentioned, there are various tools to help you share and support your contribution. By using a consistent methodology, your Moodle related code will be more easily found, tested, used, maintained, documented, and evaluated by fellow Moodlers and developers. Learning to use the various tools common among Moodle developers will help you to efficiently and effectively develop, share and maintain your contributed code. &lt;br /&gt;
&lt;br /&gt;
==How to submit code==&lt;br /&gt;
You have created some code that you would like to contribute to the Moodle community.  The first step is to choose which Git code hosting site you want to use. Both [http://github.com/ github.com] and [http://gitorious.org/ gitorious.org] are popular. Follow the instructions for creating a public repository for your code. This will allow others to download your code as well as suggest possible patches. As you become more familiar with collaborating with others you can also control who else you want to be able to push changes into your repository (i.e. write access). &lt;br /&gt;
&lt;br /&gt;
In order to facilitate a common naming convention of Moodle related repositories, it is suggested that you use the following format: moodle-{plugintype}_{pluginname}. For example, the birthday block has a repository name of moodle-block_birthday and is located at https://github.com/arborrow/moodle-block_birthday. Other developers can fork the code and work from their repositories.&lt;br /&gt;
&lt;br /&gt;
==How to request that your code be tested/reviewed==&lt;br /&gt;
&lt;br /&gt;
#If you do not already have an account on the [http://tracker.moodle.org] Moodle Tracker], create one and login. &lt;br /&gt;
#Create a new &amp;quot;Task&amp;quot; issue in the &amp;quot;Non-core contributed modules&amp;quot; project. Your issue will be a request that the code be tested and reviewed. &lt;br /&gt;
#Provide the link to the repository (i.e. https://github.com/arborrow/moodle-block_birthday) &lt;br /&gt;
#Provide a clear description of what the code does and the functionality that it adds to Moodle. &lt;br /&gt;
#Provide any other links to supporting documentation&lt;br /&gt;
&lt;br /&gt;
The Contrib Coordinator will then work directly with the code contributor via the Tracker to help evaluate the code, work on resolving any questions/issues found, etc. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to follow Moodle&#039;s coding guidelines [[Coding]].&lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to maintain a branch for each major Moodle release (i.e. 1.8, 1.9, etc.). The HEAD branch should be used as the development branch. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to associate each change made to an issue in the tracker. This practice is done by Moodle core developers and it is a good habit to get into so that you can go back and see why various changes were made to the code. Simple practices like these help to create good documentation of the code as it develops and matures. Commits should begin with the Moodle tracker issue number followed by a brief description of the change. &lt;br /&gt;
&lt;br /&gt;
==How to provide documentation==&lt;br /&gt;
Having great code available to the community is wonderful. It is also important to educate users about how to use the code with documentation in [[Main Page|Moodle Docs]]. See [[MoodleDocs:Guidelines for contributors|guidelines for contributors]] for more help. &lt;br /&gt;
&lt;br /&gt;
A documentation page for a contributed module should have some basic elements.  A brief introduction of what the code does, a &amp;quot;Features&amp;quot; heading, perhaps a &amp;quot;Installation&amp;quot;, &amp;quot;Tips and tricks&amp;quot; and &amp;quot;See also&amp;quot; headings, all with content of course.  Sometimes a screenshot is worth 1000 words. In the &amp;quot;See also&amp;quot; put a link to the Modules and Plug database, with a note that this is the place to download versions, and the forum where questions can be answered at moodle.org.&lt;br /&gt;
&lt;br /&gt;
Other information might include: Languages Supported, Known Issues, Supported Versions (for Moodle 1.8, 1.9), and maybe which are being actively supported. The page should be added to the contributed code category by typing &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Contributed code]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
===Possible format for a contributed code Moodle Docs page===&lt;br /&gt;
You can copy and paste the below into your Moodle documentation page.  Please add the URL links. &#039;&#039;&#039;This is only a suggestion&#039;&#039;&#039;. &lt;br /&gt;
 Start with a 2-4 line introduction. The Plug In Name works with the activity module. &lt;br /&gt;
 It makes the life of the teacher easier by ... &lt;br /&gt;
 ==Features==&lt;br /&gt;
 * Add features list or overview description here &amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; [[Image:Sample_screen_shot|thumb|500px|center|Title of screenshot]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ==Installation==&lt;br /&gt;
 Place install instructions here&lt;br /&gt;
 ==Tips and tricks==&lt;br /&gt;
 *Optional section, usually added by users later&lt;br /&gt;
 ==See also==&lt;br /&gt;
 *[Place http_address_for_M&amp;amp;P_entry_here  Name of Entry here] is a Modules and plugins database page that has download links and more information.&lt;br /&gt;
 *Discussions: [Place http_address_for_moodle_forum_or_thread_here Name of forum]&lt;br /&gt;
 &lt;br /&gt;
When no thread or forum exists for discussion, put a link to the Contributed Code forum.&lt;br /&gt;
 *Discussions: Please create or find a discussion topic in the &amp;lt;nowiki&amp;gt;[http://moodle.org/mod/forum/view.php?id=44  Contributed Code forum]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Share code with modules and plugins database==&lt;br /&gt;
Now you have a place for users to get your code, how will they know it exists? Moodle users can easily find information about contributed code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database]. When you add an entry to this database, remember that it is searchable by any field. Every field is not required, but providing as much information as possible will help people who would like to find, read about, and then install your contribution.  In particular, the name of the module and the description of its function are important.  Screen shots are helpful (but please, not larger than 350px wide!). Links to discussion (on Moodle.org or other forum) and documentation (link to your page in the [https://docs.moodle.org Moodle docs] or another location) should be included if possible.  &lt;br /&gt;
&lt;br /&gt;
Users may leave comments on your entry, so please check it periodically for questions and bug reports.  If you include contact information or a link to a discussion, your users may be able to contact you more directly.  The comments are not emailed automatically.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that entries added to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] require approval by a moderator before they will be visible to other Moodle users.&lt;br /&gt;
&lt;br /&gt;
==Support code and get feedback with forums==&lt;br /&gt;
As users become familiar with the contributed code, discussions about the code are likely to emerge. We strongly urge you to place links to at least one forum at moodle.org in your Modules and Plugins entry as well as in MoodleDocs. &lt;br /&gt;
&lt;br /&gt;
It is important to respond to users who have questions about how to use the code, suggestions for how to make it better, etc. If it looks like there is sufficient need for some contributed code to have its own forum, please create a request via the tracker in the MDL-SITE section. Moodle has included many contributed code projects and ideas into its core. &lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/view.php?id=44 Contributed code forum] is a generic forum.  Maybe create a thread &amp;quot;New Mousetrap module&amp;quot;.&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5 Using Moodle forums] The English speaking list of forums on many different subjects. &lt;br /&gt;
*[http://moodle.org/course/ A list of] other language forums and special areas in Moodle&lt;br /&gt;
&lt;br /&gt;
==Maintain and refine code with Tracker==&lt;br /&gt;
&lt;br /&gt;
In order to facilitate keeping track of feature requests, bugs, and other code issues, the contributor may request that a component be created in the CONTRIB section of the Moodle tracker. (This is the section where you initially made the request to have code included in CVS.moodle.org.)&lt;br /&gt;
&lt;br /&gt;
The contributor can be added to the group of CONTRIB developers in the tracker to manage the issues assigned to them and better coordinate with other developers. Users of the contributed code can then add issues which can be assigned directly to the maintainer. The tracker helps to manage the work flow involved in fixing bugs, working through feature requests, and maintaining the code. When committing changes, maintainers are strongly encouraged to begin the commit comment with a tracker number. &lt;br /&gt;
&lt;br /&gt;
We strongly encourage users to involve themselves in the process of creating a useful issue in tracker.  For the developer and code contributor,  describing the fix can help clarify the need for the code change. Further, it helps to establish good documentation about how the code developed. Others will be able to identify the issues addressed and understand why a particular decision was made.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
It is hoped that following this procedure, will help guide contributors of code in the process of learning the tools and skills used by the Moodle developers. Learning to submit code by using the tracker, work the code with CVS, support the code by providing documentation, share code in Modules and Plugins, maintain the code by using the tracker, and evolve the code by using the Moodle.org forums will assist you in successfully contributing to the Moodle community and working with Moodle&#039;s developers. &lt;br /&gt;
&lt;br /&gt;
Throughout this process, the CONTRIB Coordinator is here to encourage and support those contributing code to the Moodle community and fostering the development of tomorrow&#039;s Moodle developers.&lt;br /&gt;
&lt;br /&gt;
Eventually, the community may wish for the code to become part of the Moodle core. By following the steps above, the developers will be able to evaluate the merit of the contributed code, understand how users have used the code, see the issues that have emerged and thus have more information to make an informed decision about whether or not to incorporate the contributed code into core.&lt;br /&gt;
&lt;br /&gt;
==Most common recommendations for contributed code==&lt;br /&gt;
&lt;br /&gt;
There are several small issues that the CONTRIB Coordinator will typically check for when reviewing the code prior to committing to the CVS server. These issues help to ensure consistency and quality of code. Any suggestions made by the CONTRIB Coordinator should be considered recommendations aimed to help folks new to the Moodle community collaborate in a way consistent with standard practices within the Moodle community. The suggestions are meant to help avoid potential issues and facilitate the acceptance of your code.&lt;br /&gt;
&lt;br /&gt;
=== Does the file structure conform to Moodle standards? ===&lt;br /&gt;
Generally speaking, each file should have an appropriate extension (i.e. php, html, css, txt, etc.). To avoid issues with case sensitivity, folders and files are normally lower case; however, there are exceptions to this. Another common recommendation is to place the lang folder within the block or module rather than asking the user to copy files into the main lang folder. Changes made in the get_string function for Moodle 1.9 and onward make it possible to do this which goes a long way in keeping things modular. Similarly, to respect the modular nature of Moodle if a block requires a library it is usually preferred to keep it as a subdirectory in the block&#039;s folder. This can be especially helpful if your code is dependent upon a particular version of an external library.&lt;br /&gt;
&lt;br /&gt;
=== Does the code work without any obvious errors? ===&lt;br /&gt;
The CONTRIB Coordinator will try to install the block or module on a fresh Moodle installation and report back any errors. This testing is done with Debugging set to show All PHP notices and errors (not developer mode). The most common notices have to do with attempting to use a variable that has not been initialized or checked for existence. &lt;br /&gt;
&lt;br /&gt;
=== Does the code use the config_plugins table? ===&lt;br /&gt;
&lt;br /&gt;
Contributed blocks and modules are encouraged to make use of the &#039;&#039;&#039;config_plugins&#039;&#039;&#039; table rather than the config table. Maintainers are encouraged to read the documentation provided for the [http://xref.moodle.org/lib/moodlelib.php.html#get_config get_config()] and [http://xref.moodle.org/lib/moodlelib.php.html#set_config set_config()]] functions in the /lib/moodlelib.php file to help ensure that the footprint for the global $CFG variable does not become bloated.&lt;br /&gt;
&lt;br /&gt;
=== Does the code follow the [[Coding|Coding Guidelines]]? ===&lt;br /&gt;
The CONTRIB Coordinator will look at the code for general readability and point out any obvious deviations from the [[Coding|Coding Guidelines]]. While not all code needs to conform with each and every guideline, maintainers are encouraged to follow those guidelines as closely as possible. One useful tool for Moodle 2.0 is the [[http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=4682|Code checker local plugin]] which helps to identify many issues.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Migrating contrib code to 2.0]]&lt;br /&gt;
*[[contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Overview]]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=99037 Best practices for code modification?] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7851</id>
		<title>Plugin contribution</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7851"/>
		<updated>2011-01-28T22:20:10Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the various ways to share and work collaboratively on contributed code. In the past, Moodle CONTRIB code was often stored on the Moodle CVS server. As Moodle code transitions to [https://docs.moodle.org/en/Git Git], CONTRIB code will also be transitioning with a goal of having all code maintained via git repositories by August 2011. Don&#039;t worry if you have code on CVS and do not know Git as there are many people willing to help you with the transition especially [https://docs.moodle.org/en/User:Anthony_Borrow Anthony Borrow]. &lt;br /&gt;
&lt;br /&gt;
For those neither familiar with CVS nor Git, it is recommended that you [https://docs.moodle.org/en/Git#Books_and_tutorials learn Git basics]. The nice thing about using Git is that it will leave control of the code in the hands of contributor. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sharing code&#039;&#039;&#039; - Contributed code will be shared and maintained using a public Git repository (i.e. github.com, gitorious.org, etc.).&lt;br /&gt;
*&#039;&#039;&#039;Reviewing code&#039;&#039;&#039; - If you would like your code to be tested and reviewed, please create an issue in the [http://tracker.moodle.org/ Moodle Tracker] under [http://tracker.moodle.org/browse/CONTRIB CONTRIB]. &lt;br /&gt;
*&#039;&#039;&#039;Documenting code&#039;&#039;&#039; - You can maintain helpful documentation of the features and installation instructions in [https://docs.moodle.org Moodle Docs]&lt;br /&gt;
*&#039;&#039;&#039;Distributing code&#039;&#039;&#039; - You can help others find your code by adding an entry to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] &lt;br /&gt;
*&#039;&#039;&#039;Discussing the code&#039;&#039;&#039; - You can discuss the functionality and answer questions about how to use your code in the [http://moodle.org/course/view.php?id=5 Using Moodle forums]. Users can ask questions, discuss possible ideas for improvement, etc. Once the discussion matures to a point where you may want to take action, then you can create an issue in the [http://tracker.moodle.org/ Moodle Tracker]. &lt;br /&gt;
*&#039;&#039;&#039;Maintaining code&#039;&#039;&#039; - You can further develop your code by fixing issues, adding features, and responding to other issues with the [http://tracker.moodle.org/ Moodle Tracker]. Each plugin or patch can have its own component in the CONTRIB project; however, you will need to request that the component be created in the CONTRIB project. Once created, users can easily create issues related to your contributed code. The primary maintainer of the code will be assigned as the component lead and have their tracker privileges bumped so that they can manage issues related to their contributed code. Those issues will automatically be assigned to the component lead/primary maintainer. &lt;br /&gt;
&lt;br /&gt;
==The CONTRIB Frequently Asked Question (FAQ)==&lt;br /&gt;
&#039;&#039;&#039;Question:&#039;&#039;&#039; I have written a new block, activity, patch or theme to share with the Moodle community. What is the process for contributing the code? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Answer:&#039;&#039;&#039; First, thank you for your generosity and desire to share your work with the rest of the Moodle community. Code contributions are highly valued and Moodle wants to encourage creativity and generosity in keeping with [https://docs.moodle.org/en/Pedagogy Moodle&#039;s social constructionist pedagogy]. &lt;br /&gt;
&lt;br /&gt;
As mentioned, there are various tools to help you share and support your contribution. By using a consistent methodology, your Moodle related code will be more easily found, tested, used, maintained, documented, and evaluated by fellow Moodlers and developers. Learning to use the various tools common among Moodle developers will help you to efficiently and effectively develop, share and maintain your contributed code. &lt;br /&gt;
&lt;br /&gt;
==How to submit code==&lt;br /&gt;
You have created some code that you would like to contribute to the Moodle community.  The first step is to choose which Git code hosting site you want to use. Both [http://github.com/ github.com] and [http://gitorious.org/ gitorious.org] are popular. Follow the instructions for creating a public repository for your code. This will allow others to download your code as well as suggest possible patches. As you become more familiar with collaborating with others you can also control who else you want to be able to push changes into your repository (i.e. write access). &lt;br /&gt;
&lt;br /&gt;
In order to facilitate a common naming convention of Moodle related repositories, it is suggested that you use the following format: moodle-{plugintype}_{pluginname}. For example, the birthday block has a repository name of moodle-block_birthday and is located at https://github.com/arborrow/moodle-block_birthday. Other developers can fork the code and work from their repositories.&lt;br /&gt;
&lt;br /&gt;
==How to request that your code be tested/reviewed==&lt;br /&gt;
&lt;br /&gt;
#If you do not already have an account on the [http://tracker.moodle.org] Moodle Tracker], create one and login. &lt;br /&gt;
#Create a new &amp;quot;Task&amp;quot; issue in the &amp;quot;Non-core contributed modules&amp;quot; project. Your issue will be a request that the code be tested and reviewed. &lt;br /&gt;
#Provide the link to the repository (i.e. https://github.com/arborrow/moodle-block_birthday) &lt;br /&gt;
#Provide a clear description of what the code does and the functionality that it adds to Moodle. &lt;br /&gt;
#Provide any other links to supporting documentation&lt;br /&gt;
&lt;br /&gt;
The Contrib Coordinator will then work directly with the code contributor via the Tracker to help evaluate the code, work on resolving any questions/issues found, etc. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to follow Moodle&#039;s coding guidelines [[Coding]].&lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to maintain a branch for each major Moodle release (i.e. 1.8, 1.9, etc.). The HEAD branch should be used as the development branch. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to associate each change made to an issue in the tracker. This practice is done by Moodle core developers and it is a good habit to get into so that you can go back and see why various changes were made to the code. Simple practices like these help to create good documentation of the code as it develops and matures. Commits should begin with the Moodle tracker issue number followed by a brief description of the change. &lt;br /&gt;
&lt;br /&gt;
==How to provide documentation==&lt;br /&gt;
Having great code available to the community is wonderful. It is also important to educate users about how to use the code with documentation in [[Main Page|Moodle Docs]]. See [[MoodleDocs:Guidelines for contributors|guidelines for contributors]] for more help. &lt;br /&gt;
&lt;br /&gt;
A documentation page for a contributed module should have some basic elements.  A brief introduction of what the code does, a &amp;quot;Features&amp;quot; heading, perhaps a &amp;quot;Installation&amp;quot;, &amp;quot;Tips and tricks&amp;quot; and &amp;quot;See also&amp;quot; headings, all with content of course.  Sometimes a screenshot is worth 1000 words. In the &amp;quot;See also&amp;quot; put a link to the Modules and Plug database, with a note that this is the place to download versions, and the forum where questions can be answered at moodle.org.&lt;br /&gt;
&lt;br /&gt;
Other information might include: Languages Supported, Known Issues, Supported Versions (for Moodle 1.8, 1.9), and maybe which are being actively supported. The page should be added to the contributed code category by typing &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Contributed code]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
===Possible format for a contributed code Moodle Docs page===&lt;br /&gt;
You can copy and paste the below into your Moodle documentation page.  Please add the URL links. &#039;&#039;&#039;This is only a suggestion&#039;&#039;&#039;. &lt;br /&gt;
 Start with a 2-4 line introduction. The Plug In Name works with the activity module. &lt;br /&gt;
 It makes the life of the teacher easier by ... &lt;br /&gt;
 ==Features==&lt;br /&gt;
 * Add features list or overview description here &amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; [[Image:Sample_screen_shot|thumb|500px|center|Title of screenshot]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ==Installation==&lt;br /&gt;
 Place install instructions here&lt;br /&gt;
 ==Tips and tricks==&lt;br /&gt;
 *Optional section, usually added by users later&lt;br /&gt;
 ==See also==&lt;br /&gt;
 *[Place http_address_for_M&amp;amp;P_entry_here  Name of Entry here] is a Modules and plugins database page that has download links and more information.&lt;br /&gt;
 *Discussions: [Place http_address_for_moodle_forum_or_thread_here Name of forum]&lt;br /&gt;
 &lt;br /&gt;
When no thread or forum exists for discussion, put a link to the Contributed Code forum.&lt;br /&gt;
 *Discussions: Please create or find a discussion topic in the &amp;lt;nowiki&amp;gt;[http://moodle.org/mod/forum/view.php?id=44  Contributed Code forum]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Share code with modules and plugins database==&lt;br /&gt;
Now you have a place for users to get your code, how will they know it exists? Moodle users can easily find information about contributed code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database]. When you add an entry to this database, remember that it is searchable by any field. Every field is not required, but providing as much information as possible will help people who would like to find, read about, and then install your contribution.  In particular, the name of the module and the description of its function are important.  Screen shots are helpful (but please, not larger than 350px wide!). Links to discussion (on Moodle.org or other forum) and documentation (link to your page in the [https://docs.moodle.org Moodle docs] or another location) should be included if possible.  &lt;br /&gt;
&lt;br /&gt;
Users may leave comments on your entry, so please check it periodically for questions and bug reports.  If you include contact information or a link to a discussion, your users may be able to contact you more directly.  The comments are not emailed automatically.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that entries added to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] require approval by a moderator before they will be visible to other Moodle users.&lt;br /&gt;
&lt;br /&gt;
==Support code and get feedback with forums==&lt;br /&gt;
As users become familiar with the contributed code, discussions about the code are likely to emerge. We strongly urge you to place links to at least one forum at moodle.org in your Modules and Plugins entry as well as in MoodleDocs. &lt;br /&gt;
&lt;br /&gt;
It is important to respond to users who have questions about how to use the code, suggestions for how to make it better, etc. If it looks like there is sufficient need for some contributed code to have its own forum, please create a request via the tracker in the MDL-SITE section. Moodle has included many contributed code projects and ideas into its core. &lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/view.php?id=44 Contributed code forum] is a generic forum.  Maybe create a thread &amp;quot;New Mousetrap module&amp;quot;.&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5 Using Moodle forums] The English speaking list of forums on many different subjects. &lt;br /&gt;
*[http://moodle.org/course/ A list of] other language forums and special areas in Moodle&lt;br /&gt;
&lt;br /&gt;
==Maintain and refine code with Tracker==&lt;br /&gt;
&lt;br /&gt;
In order to facilitate keeping track of feature requests, bugs, and other code issues, the contributor may request that a component be created in the CONTRIB section of the Moodle tracker. (This is the section where you initially made the request to have code included in CVS.moodle.org.)&lt;br /&gt;
&lt;br /&gt;
The contributor can be added to the group of CONTRIB developers in the tracker to manage the issues assigned to them and better coordinate with other developers. Users of the contributed code can then add issues which can be assigned directly to the maintainer. The tracker helps to manage the work flow involved in fixing bugs, working through feature requests, and maintaining the code. When committing changes, maintainers are strongly encouraged to begin the commit comment with a tracker number. &lt;br /&gt;
&lt;br /&gt;
We strongly encourage users to involve themselves in the process of creating a useful issue in tracker.  For the developer and code contributor,  describing the fix can help clarify the need for the code change. Further, it helps to establish good documentation about how the code developed. Others will be able to identify the issues addressed and understand why a particular decision was made.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
It is hoped that following this procedure, will help guide contributors of code in the process of learning the tools and skills used by the Moodle developers. Learning to submit code by using the tracker, work the code with CVS, support the code by providing documentation, share code in Modules and Plugins, maintain the code by using the tracker, and evolve the code by using the Moodle.org forums will assist you in successfully contributing to the Moodle community and working with Moodle&#039;s developers. &lt;br /&gt;
&lt;br /&gt;
Throughout this process, the CONTRIB Coordinator is here to encourage and support those contributing code to the Moodle community and fostering the development of tomorrow&#039;s Moodle developers.&lt;br /&gt;
&lt;br /&gt;
Eventually, the community may wish for the code to become part of the Moodle core. By following the steps above, the developers will be able to evaluate the merit of the contributed code, understand how users have used the code, see the issues that have emerged and thus have more information to make an informed decision about whether or not to incorporate the contributed code into core.&lt;br /&gt;
&lt;br /&gt;
==Most common recommendations for contributed code==&lt;br /&gt;
&lt;br /&gt;
There are several small issues that the CONTRIB Coordinator will typically check for when reviewing the code prior to committing to the CVS server. These issues help to ensure consistency and quality of code. Any suggestions made by the CONTRIB Coordinator should be considered recommendations aimed to help folks new to the Moodle community collaborate in a way consistent with standard practices within the Moodle community. The suggestions are meant to help avoid potential issues and facilitate the acceptance of your code.&lt;br /&gt;
&lt;br /&gt;
=== Does the file structure conform to Moodle standards? ===&lt;br /&gt;
Generally speaking, each file should have an appropriate extension (i.e. php, html, css, txt, etc.). To avoid issues with case sensitivity, folders and files are normally lower case; however, there are exceptions to this. Another common recommendation is to place the lang folder within the block or module rather than asking the user to copy files into the main lang folder. Changes made in the get_string function for Moodle 1.9 and onward make it possible to do this which goes a long way in keeping things modular. Similarly, to respect the modular nature of Moodle if a block requires a library it is usually preferred to keep it as a subdirectory in the block&#039;s folder. This can be especially helpful if your code is dependent upon a particular version of an external library.&lt;br /&gt;
&lt;br /&gt;
=== Does the code work without any obvious errors? ===&lt;br /&gt;
The CONTRIB Coordinator will try to install the block or module on a fresh Moodle installation and report back any errors. This testing is done with Debugging set to show All PHP notices and errors (not developer mode). The most common notices have to do with attempting to use a variable that has not been initialized or checked for existence. &lt;br /&gt;
&lt;br /&gt;
=== Does the code use the config_plugins table? ===&lt;br /&gt;
&lt;br /&gt;
Contributed blocks and modules are encouraged to make use of the &#039;&#039;&#039;config_plugins&#039;&#039;&#039; table rather than the config table. Maintainers are encouraged to read the documentation provided for the [http://xref.moodle.org/lib/moodlelib.php.html#get_config get_config()] and [http://xref.moodle.org/lib/moodlelib.php.html#set_config set_config()]] functions in the /lib/moodlelib.php file to help ensure that the footprint for the global $CFG variable does not become bloated.&lt;br /&gt;
&lt;br /&gt;
=== Does the code follow the [[Coding|Coding Guidelines]]? ===&lt;br /&gt;
The CONTRIB Coordinator will look at the code for general readability and point out any obvious deviations from the [[Coding|Coding Guidelines]]. While not all code needs to conform with each and every guideline, maintainers are encouraged to follow those guidelines as closely as possible.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Migrating contrib code to 2.0]]&lt;br /&gt;
*[[contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Overview]]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=99037 Best practices for code modification?] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Process&amp;diff=28489</id>
		<title>Talk:Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Process&amp;diff=28489"/>
		<updated>2011-01-02T18:05:08Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* External developers */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think &#039;User&#039; should be described as both &#039;finding issues&#039; and &#039;suggesting improvements&#039; for Moodle, even if the detail of how things are implemented are left for the Product Owner. Just thinking that a good chunk of the things I add to the Tracker are suggestions for improvement rather than &#039;issues&#039; as such and that we should promote this idea as a general rule - maybe :)&lt;br /&gt;
&lt;br /&gt;
:I agree with Mark.  Bug tracker should be used for actual bugs.  Discussion about future roadmaps, enhcnements and improvements is a separate matter, and in actual fact it is hard to engage in this.  I don&#039;t have an answer at the moment.  Maybe a place to discuss, and notification of when discussions have heated up (like specs are being prepared and a new roadmap developed for a component)  ie owners manage the discussion, but there is a clear place to go to engage, some indication of timelines etc.  --[[User:Derek Chirnside|Derek Chirnside]] 19:39, 25 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Well, &amp;quot;issues&amp;quot; there was meant to cover &amp;quot;bugs&amp;quot; and &amp;quot;suggestions&amp;quot;, as the tracker does both.  I&#039;ll make it more explicit though.  [[User:Martin Dougiamas|Martin Dougiamas]] 10:12, 30 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
OK - I could live with this.  But I still prefer this clearer distinction as suggested by Mark:&lt;br /&gt;
&lt;br /&gt;
===User role===&lt;br /&gt;
&lt;br /&gt;
# Uses Moodle&lt;br /&gt;
# Finds issues/bugs (report in tracker)&lt;br /&gt;
# Suggests improvements (report in tracker)&lt;br /&gt;
&lt;br /&gt;
Question: is there a way in the tracker to keep issues in two lists: bugs and suggestions?  Maybe even like Google: you can suggest anything, but at any given time there are a few suggestions up for vote?  In Moodle, you can discuss anything, but someone is highlighting at any given time a few topics for focused discussions. On reflection the answer may be No - on this basis I am back to my original suggestion.  &lt;br /&gt;
&lt;br /&gt;
A bug is a bug - it is not working as we know it should.  A suggestion for an enhancement is partly an invitation to dialogue, vote.  Voting for bugs is silly - all bugs need fixing, and priorities are best (IMO) determined centrally.  So:&lt;br /&gt;
&lt;br /&gt;
#Uses Moodle&lt;br /&gt;
#Finds and reports bugs (use tracker)&lt;br /&gt;
#Suggests improvements (use tracker)&lt;br /&gt;
#Takes part in dialogue around suggested improvements &lt;br /&gt;
&lt;br /&gt;
[[User:Derek Chirnside|Derek Chirnside]] 06:18, 4 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Derek, thanks for your comments. Regarding a way in the tracker to keep issues in two lists: bugs and suggestions, when you create an issue you have a choice of issue types - bug, new feature, task and improvement. Thus, a search for all new features and improvements should generate a list of suggestions. --[[User:Helen Foster|Helen Foster]] 14:31, 4 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Backlog naming == &lt;br /&gt;
&lt;br /&gt;
Regarding the latest change about naming backlog versions with &amp;quot;STABLEBACKLOG/DEVBACKLOG&amp;quot;, I&#039;d recommend to use instead something like: &amp;quot;1.9.x backlog/2.0.x backlog/2.1.x backlog&amp;quot; because:&lt;br /&gt;
&lt;br /&gt;
# It saves us to move things when a new major release happens (so it won&#039;t be necessary to move all the DEVBACKLOG =&amp;gt; STABLEBACKLOG&amp;quot;.&lt;br /&gt;
# It supports &#039;&#039;&#039;multiple&#039;&#039;&#039; stable branches, like we have now (1.9.x, 2.0.x...)&lt;br /&gt;
# It respects the format used by both the Affected Branches and Fixed Branches custom fields that are really useful for a lot of filters.&lt;br /&gt;
&lt;br /&gt;
Ciao, [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 23:33, 6 December 2010 (UTC) :-)&lt;br /&gt;
&lt;br /&gt;
:Addenda: Finally it has been decided to go to 2 backlogs only (stable/dev). Fair enough so developer (team) will look to the real branches were solution needs to be implemented. [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 10:23, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
==This does not look like scrum to me at all==&lt;br /&gt;
&lt;br /&gt;
I think we need a certified scrum master. This proposal IMHO seems to break nearly all the good Scrum practises described in books.&lt;br /&gt;
&lt;br /&gt;
Ciao, [[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] 10:03, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Agree! some points (see point 3 especially, both in STABLE/DEV teams, break the thing. It&#039;s (scrum, by team) master responsibility to discuss with product owner, not team itself! Isolation is a MUST.&lt;br /&gt;
&lt;br /&gt;
: Ciao, [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 10:12, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== If the issue is a bug in the current stable version requiring database changes, assign &amp;quot;Fix version&amp;quot; to DEVBACKLOG ==&lt;br /&gt;
&lt;br /&gt;
Hmm, maybe this should be governed up by bug severity too? You, sure, aren&#039;t going to say that every bug requiring DB update, however severe it is, should be left up to the next major release? --[[User:Oleg Sychev|Oleg Sychev]] 14:51, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I understand the idea of pulling from the items with the highest priority; however, how are we going to determine that priority. We have issue severity which has traditionally been seen as a priority indicator but we also have the number of votes. I am curious when paper cuts will be taken care of. These smaller issues can impact the user experience. I suspect in an ideal world, all the major issues will be dealt with but occasionally some simple fixes come along with patches in the tracker and it would be good to get those applied. Peace - Anthony&lt;br /&gt;
&lt;br /&gt;
: Well, in practice I expect people will choose items based on a cost/benefit analysis of fixing them - just like they always have in the past.--[[User:Tim Hunt|Tim Hunt]] 18:14, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Suggested changes for &amp;quot;External Developers&amp;quot; ==&lt;br /&gt;
I had a really good conversation with David (He posted a screenshot that maybe does a better job of explaining what is described below: http://picasaweb.google.com/david.mudrak/Moodle#5551427587739059122), and we discussed one possible suggested workflow external developers can use if they choose to use their own GIT repo.  Here&#039;s how it would break down:&lt;br /&gt;
&lt;br /&gt;
=== Creating repo ===&lt;br /&gt;
==== Branch off MOODLE_20_STABLE (ie: UCLA_TRUNK) ====&lt;br /&gt;
 $ git --bare fetch git://git.moodle.org/moodle.git MOODLE_20_STABLE:MOODLE_20_STABLE&lt;br /&gt;
 $ git checkout -b UCLA_TRUNK origin/MOODLE_20_STABLE&lt;br /&gt;
&lt;br /&gt;
==== commit customizations into branch ====&lt;br /&gt;
 $ ... (hack something, git add, git commit)&lt;br /&gt;
 $ git push&lt;br /&gt;
&lt;br /&gt;
=== Contributing back ===&lt;br /&gt;
==== Create another branch off MOODLE_20_STABLE (ie: COOL_NEW_FEATURE) ====&lt;br /&gt;
 $ git --bare fetch git://git.moodle.org/moodle.git MOODLE_20_STABLE:MOODLE_20_STABLE&lt;br /&gt;
 $ git checkout -b COOL_NEW_FEATURE origin/MOODLE_20_STABLE&lt;br /&gt;
&lt;br /&gt;
==== git cherry-pick to selectively pick commits from UCLA_TRUNK to merge into COOL_NEW_FEATURE ====&lt;br /&gt;
 $ git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544&lt;br /&gt;
&lt;br /&gt;
==== publish branch COOL_NEW_FEATURE ====&lt;br /&gt;
??&lt;br /&gt;
&lt;br /&gt;
==== create pull request in tracker ====&lt;br /&gt;
http://tracker.moodle.org/browse/PULL-18&lt;br /&gt;
&lt;br /&gt;
If accepted, it becomes part of core moodle&lt;br /&gt;
&lt;br /&gt;
=== Updating to next version of Moodle ===&lt;br /&gt;
 $ git pull&lt;br /&gt;
&lt;br /&gt;
== Contrib Code - Development process ==&lt;br /&gt;
&lt;br /&gt;
I think this may be a good time to give some thought to coming up with the process we want to implement and enforce for sharing CONTRIB code. What assumptions do we want to make from the beginning? Should shared code be in a git repository somewhere? We have folks that share everything from zip files of plugins, some use Google code, others may use git. My experience has been that many are not initially proficient at using CVS/GIT, etc. although this seems to be improving. In any case, I would love to see a clear diagram about what someone does when they create code that they want to share. It has worked well to initiate conversations in the tracker as I can them work them through the Guidelines for CONTRIB Code (https://docs.moodle.org/en/Development:Guidelines_for_contributed_code) but I think we need to update that now for how we want to handle things in the future. Perhaps the improved M&amp;amp;P database will be the point of first contact. In any case, I would love to see if we could create a page similar to the Development:Process called something like Development:CONTRIB process. Peace - Anthony&lt;br /&gt;
&lt;br /&gt;
== External developers ==&lt;br /&gt;
&lt;br /&gt;
I have a question about the historical integrity of providing patches via links. For external developers, we say &amp;quot;Suggest code via links in comments in Jira&amp;quot;. What happens if those links no longer work? Perhaps this is a trivial issue and will in practice hardly ever happen but I was thinking about going back to an older issue that it may be helpful to see an approach that was attempted but rejected. If the external developer removes the branch, then it would seem to me that perhaps their rejected patch would no longer be available to be reviewed later. Am I understanding this properly and if so, might we consider what the approach might be for getting patches in the tracker so that they can stay there? Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Process&amp;diff=28488</id>
		<title>Talk:Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Process&amp;diff=28488"/>
		<updated>2010-12-26T01:20:41Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Contrib Code - Development process */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think &#039;User&#039; should be described as both &#039;finding issues&#039; and &#039;suggesting improvements&#039; for Moodle, even if the detail of how things are implemented are left for the Product Owner. Just thinking that a good chunk of the things I add to the Tracker are suggestions for improvement rather than &#039;issues&#039; as such and that we should promote this idea as a general rule - maybe :)&lt;br /&gt;
&lt;br /&gt;
:I agree with Mark.  Bug tracker should be used for actual bugs.  Discussion about future roadmaps, enhcnements and improvements is a separate matter, and in actual fact it is hard to engage in this.  I don&#039;t have an answer at the moment.  Maybe a place to discuss, and notification of when discussions have heated up (like specs are being prepared and a new roadmap developed for a component)  ie owners manage the discussion, but there is a clear place to go to engage, some indication of timelines etc.  --[[User:Derek Chirnside|Derek Chirnside]] 19:39, 25 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Well, &amp;quot;issues&amp;quot; there was meant to cover &amp;quot;bugs&amp;quot; and &amp;quot;suggestions&amp;quot;, as the tracker does both.  I&#039;ll make it more explicit though.  [[User:Martin Dougiamas|Martin Dougiamas]] 10:12, 30 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
OK - I could live with this.  But I still prefer this clearer distinction as suggested by Mark:&lt;br /&gt;
&lt;br /&gt;
===User role===&lt;br /&gt;
&lt;br /&gt;
# Uses Moodle&lt;br /&gt;
# Finds issues/bugs (report in tracker)&lt;br /&gt;
# Suggests improvements (report in tracker)&lt;br /&gt;
&lt;br /&gt;
Question: is there a way in the tracker to keep issues in two lists: bugs and suggestions?  Maybe even like Google: you can suggest anything, but at any given time there are a few suggestions up for vote?  In Moodle, you can discuss anything, but someone is highlighting at any given time a few topics for focused discussions. On reflection the answer may be No - on this basis I am back to my original suggestion.  &lt;br /&gt;
&lt;br /&gt;
A bug is a bug - it is not working as we know it should.  A suggestion for an enhancement is partly an invitation to dialogue, vote.  Voting for bugs is silly - all bugs need fixing, and priorities are best (IMO) determined centrally.  So:&lt;br /&gt;
&lt;br /&gt;
#Uses Moodle&lt;br /&gt;
#Finds and reports bugs (use tracker)&lt;br /&gt;
#Suggests improvements (use tracker)&lt;br /&gt;
#Takes part in dialogue around suggested improvements &lt;br /&gt;
&lt;br /&gt;
[[User:Derek Chirnside|Derek Chirnside]] 06:18, 4 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Derek, thanks for your comments. Regarding a way in the tracker to keep issues in two lists: bugs and suggestions, when you create an issue you have a choice of issue types - bug, new feature, task and improvement. Thus, a search for all new features and improvements should generate a list of suggestions. --[[User:Helen Foster|Helen Foster]] 14:31, 4 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Backlog naming == &lt;br /&gt;
&lt;br /&gt;
Regarding the latest change about naming backlog versions with &amp;quot;STABLEBACKLOG/DEVBACKLOG&amp;quot;, I&#039;d recommend to use instead something like: &amp;quot;1.9.x backlog/2.0.x backlog/2.1.x backlog&amp;quot; because:&lt;br /&gt;
&lt;br /&gt;
# It saves us to move things when a new major release happens (so it won&#039;t be necessary to move all the DEVBACKLOG =&amp;gt; STABLEBACKLOG&amp;quot;.&lt;br /&gt;
# It supports &#039;&#039;&#039;multiple&#039;&#039;&#039; stable branches, like we have now (1.9.x, 2.0.x...)&lt;br /&gt;
# It respects the format used by both the Affected Branches and Fixed Branches custom fields that are really useful for a lot of filters.&lt;br /&gt;
&lt;br /&gt;
Ciao, [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 23:33, 6 December 2010 (UTC) :-)&lt;br /&gt;
&lt;br /&gt;
:Addenda: Finally it has been decided to go to 2 backlogs only (stable/dev). Fair enough so developer (team) will look to the real branches were solution needs to be implemented. [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 10:23, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
==This does not look like scrum to me at all==&lt;br /&gt;
&lt;br /&gt;
I think we need a certified scrum master. This proposal IMHO seems to break nearly all the good Scrum practises described in books.&lt;br /&gt;
&lt;br /&gt;
Ciao, [[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] 10:03, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Agree! some points (see point 3 especially, both in STABLE/DEV teams, break the thing. It&#039;s (scrum, by team) master responsibility to discuss with product owner, not team itself! Isolation is a MUST.&lt;br /&gt;
&lt;br /&gt;
: Ciao, [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 10:12, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== If the issue is a bug in the current stable version requiring database changes, assign &amp;quot;Fix version&amp;quot; to DEVBACKLOG ==&lt;br /&gt;
&lt;br /&gt;
Hmm, maybe this should be governed up by bug severity too? You, sure, aren&#039;t going to say that every bug requiring DB update, however severe it is, should be left up to the next major release? --[[User:Oleg Sychev|Oleg Sychev]] 14:51, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I understand the idea of pulling from the items with the highest priority; however, how are we going to determine that priority. We have issue severity which has traditionally been seen as a priority indicator but we also have the number of votes. I am curious when paper cuts will be taken care of. These smaller issues can impact the user experience. I suspect in an ideal world, all the major issues will be dealt with but occasionally some simple fixes come along with patches in the tracker and it would be good to get those applied. Peace - Anthony&lt;br /&gt;
&lt;br /&gt;
: Well, in practice I expect people will choose items based on a cost/benefit analysis of fixing them - just like they always have in the past.--[[User:Tim Hunt|Tim Hunt]] 18:14, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Suggested changes for &amp;quot;External Developers&amp;quot; ==&lt;br /&gt;
I had a really good conversation with David (He posted a screenshot that maybe does a better job of explaining what is described below: http://picasaweb.google.com/david.mudrak/Moodle#5551427587739059122), and we discussed one possible suggested workflow external developers can use if they choose to use their own GIT repo.  Here&#039;s how it would break down:&lt;br /&gt;
&lt;br /&gt;
=== Creating repo ===&lt;br /&gt;
==== Branch off MOODLE_20_STABLE (ie: UCLA_TRUNK) ====&lt;br /&gt;
 $ git --bare fetch git://git.moodle.org/moodle.git MOODLE_20_STABLE:MOODLE_20_STABLE&lt;br /&gt;
 $ git checkout -b UCLA_TRUNK origin/MOODLE_20_STABLE&lt;br /&gt;
&lt;br /&gt;
==== commit customizations into branch ====&lt;br /&gt;
 $ ... (hack something, git add, git commit)&lt;br /&gt;
 $ git push&lt;br /&gt;
&lt;br /&gt;
=== Contributing back ===&lt;br /&gt;
==== Create another branch off MOODLE_20_STABLE (ie: COOL_NEW_FEATURE) ====&lt;br /&gt;
 $ git --bare fetch git://git.moodle.org/moodle.git MOODLE_20_STABLE:MOODLE_20_STABLE&lt;br /&gt;
 $ git checkout -b COOL_NEW_FEATURE origin/MOODLE_20_STABLE&lt;br /&gt;
&lt;br /&gt;
==== git cherry-pick to selectively pick commits from UCLA_TRUNK to merge into COOL_NEW_FEATURE ====&lt;br /&gt;
 $ git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544&lt;br /&gt;
&lt;br /&gt;
==== publish branch COOL_NEW_FEATURE ====&lt;br /&gt;
??&lt;br /&gt;
&lt;br /&gt;
==== create pull request in tracker ====&lt;br /&gt;
http://tracker.moodle.org/browse/PULL-18&lt;br /&gt;
&lt;br /&gt;
If accepted, it becomes part of core moodle&lt;br /&gt;
&lt;br /&gt;
=== Updating to next version of Moodle ===&lt;br /&gt;
 $ git pull&lt;br /&gt;
&lt;br /&gt;
== Contrib Code - Development process ==&lt;br /&gt;
&lt;br /&gt;
I think this may be a good time to give some thought to coming up with the process we want to implement and enforce for sharing CONTRIB code. What assumptions do we want to make from the beginning? Should shared code be in a git repository somewhere? We have folks that share everything from zip files of plugins, some use Google code, others may use git. My experience has been that many are not initially proficient at using CVS/GIT, etc. although this seems to be improving. In any case, I would love to see a clear diagram about what someone does when they create code that they want to share. It has worked well to initiate conversations in the tracker as I can them work them through the Guidelines for CONTRIB Code (https://docs.moodle.org/en/Development:Guidelines_for_contributed_code) but I think we need to update that now for how we want to handle things in the future. Perhaps the improved M&amp;amp;P database will be the point of first contact. In any case, I would love to see if we could create a page similar to the Development:Process called something like Development:CONTRIB process. Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Process&amp;diff=28479</id>
		<title>Talk:Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Process&amp;diff=28479"/>
		<updated>2010-12-16T17:28:37Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think &#039;User&#039; should be described as both &#039;finding issues&#039; and &#039;suggesting improvements&#039; for Moodle, even if the detail of how things are implemented are left for the Product Owner. Just thinking that a good chunk of the things I add to the Tracker are suggestions for improvement rather than &#039;issues&#039; as such and that we should promote this idea as a general rule - maybe :)&lt;br /&gt;
&lt;br /&gt;
:I agree with Mark.  Bug tracker should be used for actual bugs.  Discussion about future roadmaps, enhcnements and improvements is a separate matter, and in actual fact it is hard to engage in this.  I don&#039;t have an answer at the moment.  Maybe a place to discuss, and notification of when discussions have heated up (like specs are being prepared and a new roadmap developed for a component)  ie owners manage the discussion, but there is a clear place to go to engage, some indication of timelines etc.  --[[User:Derek Chirnside|Derek Chirnside]] 19:39, 25 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Well, &amp;quot;issues&amp;quot; there was meant to cover &amp;quot;bugs&amp;quot; and &amp;quot;suggestions&amp;quot;, as the tracker does both.  I&#039;ll make it more explicit though.  [[User:Martin Dougiamas|Martin Dougiamas]] 10:12, 30 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
OK - I could live with this.  But I still prefer this clearer distinction as suggested by Mark:&lt;br /&gt;
&lt;br /&gt;
===User role===&lt;br /&gt;
&lt;br /&gt;
# Uses Moodle&lt;br /&gt;
# Finds issues/bugs (report in tracker)&lt;br /&gt;
# Suggests improvements (report in tracker)&lt;br /&gt;
&lt;br /&gt;
Question: is there a way in the tracker to keep issues in two lists: bugs and suggestions?  Maybe even like Google: you can suggest anything, but at any given time there are a few suggestions up for vote?  In Moodle, you can discuss anything, but someone is highlighting at any given time a few topics for focused discussions. On reflection the answer may be No - on this basis I am back to my original suggestion.  &lt;br /&gt;
&lt;br /&gt;
A bug is a bug - it is not working as we know it should.  A suggestion for an enhancement is partly an invitation to dialogue, vote.  Voting for bugs is silly - all bugs need fixing, and priorities are best (IMO) determined centrally.  So:&lt;br /&gt;
&lt;br /&gt;
#Uses Moodle&lt;br /&gt;
#Finds and reports bugs (use tracker)&lt;br /&gt;
#Suggests improvements (use tracker)&lt;br /&gt;
#Takes part in dialogue around suggested improvements &lt;br /&gt;
&lt;br /&gt;
[[User:Derek Chirnside|Derek Chirnside]] 06:18, 4 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Derek, thanks for your comments. Regarding a way in the tracker to keep issues in two lists: bugs and suggestions, when you create an issue you have a choice of issue types - bug, new feature, task and improvement. Thus, a search for all new features and improvements should generate a list of suggestions. --[[User:Helen Foster|Helen Foster]] 14:31, 4 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Backlog naming == &lt;br /&gt;
&lt;br /&gt;
Regarding the latest change about naming backlog versions with &amp;quot;STABLEBACKLOG/DEVBACKLOG&amp;quot;, I&#039;d recommend to use instead something like: &amp;quot;1.9.x backlog/2.0.x backlog/2.1.x backlog&amp;quot; because:&lt;br /&gt;
&lt;br /&gt;
# It saves us to move things when a new major release happens (so it won&#039;t be necessary to move all the DEVBACKLOG =&amp;gt; STABLEBACKLOG&amp;quot;.&lt;br /&gt;
# It supports &#039;&#039;&#039;multiple&#039;&#039;&#039; stable branches, like we have now (1.9.x, 2.0.x...)&lt;br /&gt;
# It respects the format used by both the Affected Branches and Fixed Branches custom fields that are really useful for a lot of filters.&lt;br /&gt;
&lt;br /&gt;
Ciao, [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 23:33, 6 December 2010 (UTC) :-)&lt;br /&gt;
&lt;br /&gt;
:Addenda: Finally it has been decided to go to 2 backlogs only (stable/dev). Fair enough so developer (team) will look to the real branches were solution needs to be implemented. [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 10:23, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
==This does not look like scrum to me at all==&lt;br /&gt;
&lt;br /&gt;
I think we need a certified scrum master. This proposal IMHO seems to break nearly all the good Scrum practises described in books.&lt;br /&gt;
&lt;br /&gt;
Ciao, [[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] 10:03, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Agree! some points (see point 3 especially, both in STABLE/DEV teams, break the thing. It&#039;s (scrum, by team) master responsibility to discuss with product owner, not team itself! Isolation is a MUST.&lt;br /&gt;
&lt;br /&gt;
: Ciao, [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 10:12, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== If the issue is a bug in the current stable version requiring database changes, assign &amp;quot;Fix version&amp;quot; to DEVBACKLOG ==&lt;br /&gt;
&lt;br /&gt;
Hmm, maybe this should be governed up by bug severity too? You, sure, aren&#039;t going to say that every bug requiring DB update, however severe it is, should be left up to the next major release? --[[User:Oleg Sychev|Oleg Sychev]] 14:51, 9 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I understand the idea of pulling from the items with the highest priority; however, how are we going to determine that priority. We have issue severity which has traditionally been seen as a priority indicator but we also have the number of votes. I am curious when paper cuts will be taken care of. These smaller issues can impact the user experience. I suspect in an ideal world, all the major issues will be dealt with but occasionally some simple fixes come along with patches in the tracker and it would be good to get those applied. Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Overview_of_the_Moodle_question_engine&amp;diff=28496</id>
		<title>Talk:Overview of the Moodle question engine</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Overview_of_the_Moodle_question_engine&amp;diff=28496"/>
		<updated>2010-11-25T21:41:07Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: New page: Tim -   Two areas that I keep in the back of mind are outcomes and tags. Can we tag certain questions as being related to a particular objective? Generally speaking, an activity provides a...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tim - &lt;br /&gt;
&lt;br /&gt;
Two areas that I keep in the back of mind are outcomes and tags. Can we tag certain questions as being related to a particular objective? Generally speaking, an activity provides a way for teacher to grade whether a student has demonstrated a particular outcome. I think it might be nice if the question engine could do some of outcome assessment automatically. For example, student able to multiple single digit numbers. &lt;br /&gt;
&lt;br /&gt;
I am curious if you think that the question engine should connect specific questions to a particular outcome. I am thinking of how a student&#039;s correctly answering a particular quiz question could be used to demonstrate an outcome. &lt;br /&gt;
&lt;br /&gt;
To the contrary, a good argument can be made about putting too much wait on a particular question. Instead of the question determining the outcome, it would be a series of questions whereby the student&#039;s performance on a quiz of questions determines the outcome score thus maintaining the current correlation between outcomes and a particular activity. &lt;br /&gt;
&lt;br /&gt;
In any case, as I looked at the proposal for the new question engine outcomes and tags were a couple of areas where I might anticipate some questions. The question of tagging (courses, activities, questions, resources, etc.) is really a separate issue that I think best dealt with on its own. The more I think about outcomes, I think there is good justification for not trying to associate them with individual questions. &lt;br /&gt;
&lt;br /&gt;
Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Question_Engine_2&amp;diff=28465</id>
		<title>Talk:Question Engine 2</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Question_Engine_2&amp;diff=28465"/>
		<updated>2010-11-25T08:17:57Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: New page: Tim - Do you envision Question Engine 2 being able to lay a foundation for what is commonly referred to as computer adaptive testing? Peace - Anthony&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tim - Do you envision Question Engine 2 being able to lay a foundation for what is commonly referred to as computer adaptive testing? Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17558</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17558"/>
		<updated>2010-09-02T21:46:32Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;WARNING: Under construction RIGHT NOW!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
* [[Output_renderers]]&lt;br /&gt;
* [[Migrating_your_code_to_the_2.0_rendering_API]] (n.b., some info outdated and may need updating)&lt;br /&gt;
* [[Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
Some details of how to re-design image CSS for plugin code ar in the main themes documentation: [[Themes_2.0_creating_your_first_theme#Using_images_within_CSS]]&lt;br /&gt;
&lt;br /&gt;
Be aware that themes are now cached on the server and so emptying your browser cache will not refresh the CSS. This can only be done by going to the site administration-&amp;gt;appearance-&amp;gt;themes-&amp;gt;theme selector page and clicking the &#039;invalidate theme caches&#039; button.&lt;br /&gt;
&lt;br /&gt;
Javascript is included in different ways now and will need to be migrated, see the PHPDoc comments in /lib/outputrequirements.lib and some (slightly outdated) advice here: [[JavaScript_guidelines]]&lt;br /&gt;
&lt;br /&gt;
There are other coding changes such as:&lt;br /&gt;
* MDL-24063 which eliminates PARAM_CLEAN &lt;br /&gt;
* MDL-24058 about no longer using stripslashes or addslashes&lt;br /&gt;
&lt;br /&gt;
Please feel free to add others that come to mind. CONTRIB maintainers should check their 2.0 versions for these and make sure that they are appropriately handled. &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
* http://cvs.moodle.org/moodle/blocks/upgrade.txt?view=markup&lt;br /&gt;
* http://cvs.moodle.org/moodle/mod/upgrade.txt?view=markup&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Modules_and_plugins_improvements&amp;diff=13517</id>
		<title>Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Modules_and_plugins_improvements&amp;diff=13517"/>
		<updated>2010-07-03T01:02:35Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Modules and Plugins database provides a convenient way for Moodle System Administrators to search for available plugins, patches, and tools to enhance their installation. While the basic structure has been reasonably helpful, there is much to be desired in order to help those administrators determine things like the quality of the code, the reliability of the code, and the popularity of the code. This page is to help identify the areas needed for improvement and to provide a path for implementing those improvements.&lt;br /&gt;
&lt;br /&gt;
For example, I would like for there to be various code quality levels (perhaps with gold, silver and bronze medals). The first level (bronze) would be verifying that the code has been independently tested by a Moodle developer, Moodle Partner or PHM to verify that the program at least appears to do what it says by someone of some repute. To say that the code is verified means that the code appears to work without any obvious bugs, PHP warning/notices, etc. &lt;br /&gt;
&lt;br /&gt;
The silver medal indicate that the code is &amp;quot;Moodle certified&amp;quot; which would mean that a Moodle developer or Moodle Partner has not only verified the functionality of the code but also the quality of the code. Certification would mean that the code conforms to Moodle&#039;s coding guidelines and basic security practices. Those wishing to have their code certified, could contact a Moodle Partner similar to how we handle the MCT. Code certification could be a service that Moodle Partners provide to allow developers in the community an opportunity to work with more experienced developers on how to improve their code. The goal would be to get the code certified; however, this would depend upon the complexity of the project as to how many hours of time a developer would have to work with them. Code certified by a Moodle Partner would indicate that the quality of the code has been reviewed by an experienced developer and that it is production ready. By certifying the code, the Moodle Partner is making a statement that they would feel comfortable running the code on their production servers (not that they would have to). &lt;br /&gt;
&lt;br /&gt;
Perhaps we could also develop a Moodle Certified Developer (MCD) which would mean that they have completed the Moodle Developer Course under the tutelage of a Moodle Partner and demonstrated the ability to code well according to Moodle coding guidelines. Those reviewing code may need to have some specialized training from Petr to ensure that basic security protocols are being followed.  &lt;br /&gt;
&lt;br /&gt;
The gold medal would indicate that the code has been tested, reviewed, and that a special evaluation of the code&#039;s security has shown it to meet the same high standards of security as Moodle core. Secured code has been verified, certified, and also given a review by a security specialist (most likely Petr) to ensure that the code is unlikely to have any known security vulnerabilities. Here, I envision a Moodle Partner requesting that Petr review the code or training someone on their team to specifically identify potential security issues. A gold medal would indicate that the code would be ready to move directly into core (again, not that it would but the quality of the code is such that it could). &lt;br /&gt;
&lt;br /&gt;
In addition to the code status indicator which serves as a type of quality assurance, it would be good to have popularity ratings. These should incorporate not only the number of downloads (from http://download.moodle.org/stats.php) but also the ratings that users give them. I would like to see some type of algorithm that would adjust the popularity based not merely on the average rating but also on the number of ratings such that the more popular plugins would outrank the less popular but highly rated ones.&lt;br /&gt;
&lt;br /&gt;
Personally, I would like to receive an email with information about any new M&amp;amp;P entries. I would like to be able to filter the entries by various criteria and be able to do things like send a bulk message to all of those whose code is not on the Moodle CVS server (i.e. the download link does not contain http://download.moodle.org/download.php). As an aside, I am trying to ensure that I start adding the M&amp;amp;P entry URL to the component description to facilitate moving between the tracker and the M&amp;amp;P entry to discussions, Docs, etc.&lt;br /&gt;
&lt;br /&gt;
Please continue to add ideas, hopes, etc. as to how the Modules and Plugins database can become a more useful tool not only for those who maintain it but also for those who make use of it, either here or in the [[Development_talk:Modules_and_plugins_improvements | page comments]]&lt;br /&gt;
&lt;br /&gt;
Part of what makes a plugin reputable is how quickly issues are responded to. I would want to be able to assess someone how actively the code is being maintained. We have a number of possible pieces of data but I do not know how we could calculate things in a meaningful way. The average time difference between when an issue is created and resolved might be helpful. Good code will not have many issues and thus not much activity; however, high activity indicates that it is actively being worked on. Drupal provides some of this information about its modules. &lt;br /&gt;
&lt;br /&gt;
In summary, here are some of the features that I think we are hoping for:&lt;br /&gt;
&lt;br /&gt;
* Popularity (number of download, number of views, number of installations) - I would like to see us gather more information from site registrations to learn what contrib code is actually installed. This would help if a major security issue is discovered in contrib that we could send an email just to those site admins without alarming the whole community.&lt;br /&gt;
* Ratings (should there be a distinction between ratings given by a typical user vs. a developer rating?)&lt;br /&gt;
* Comments (need to make clear that comments are not for reporting bugs, that is what the Tracker is for)&lt;br /&gt;
* Filtering - It needs to be easier to filter and sort contrib code by version, type, popularity)&lt;br /&gt;
* Quality assessment (functionality, coding guidelines, security, performance, UI)&lt;br /&gt;
* Status - Is the code being actively maintained? How can we assess this? &lt;br /&gt;
&lt;br /&gt;
Demo sites - Stuart Mealor shared with me a site (http://www.elearning.school.nz/) he set up that can serve as a bit of a demo site for CONTRIB code. I like the idea of having a CONTRIB demo site which folks could use to experiment with different plugins. It would be also interesting to have a patch demo site; however, each one would have to be it&#039;s own installation but it should not be too difficult to setup some automation of that. Besides demo (which should use the latest stable code), it would be good to have something similar for HEAD as a test site that also pulls the latest code from CVS.   &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* MDLSITE-571&lt;br /&gt;
* MDLSITE-406&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7848</id>
		<title>Plugin contribution</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7848"/>
		<updated>2010-06-30T23:48:20Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Does the file structure conform to Moodle standards? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the various ways to share and work collaboratively on contributed code.&lt;br /&gt;
#Submit code in the [http://tracker.moodle.org/ Moodle Tracker] under [http://tracker.moodle.org/browse/CONTRIB CONTRIB].&lt;br /&gt;
#Work with submitted code in [http://cvs.moodle.org Moodle&#039;s CVS server]&lt;br /&gt;
#Document features and install instructions in [https://docs.moodle.org Moodle Docs]&lt;br /&gt;
#Share and distribute code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] &lt;br /&gt;
#Talk and support code in the [http://moodle.org/course/view.php?id=5 Using Moodle forums]&lt;br /&gt;
#Maintain and further develop code with the [http://tracker.moodle.org Moodle Tracker]&lt;br /&gt;
&lt;br /&gt;
==The Frequently asked question==&lt;br /&gt;
&#039;&#039;&#039;Question:&#039;&#039;&#039; I have written a new block, activity, patch or theme to share with the Moodle community. What is the process for contributing the code? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Answer:&#039;&#039;&#039; First, thank you for your generosity and desire to share your work with the rest of the Moodle community. Code contributions are highly valued and Moodle wants to encourage creativity and generosity in keeping with its constructivist tradition and pedagogical approach. To support this, there are several tools will support your contribution by allowing the code to be more easily found, tested, used, maintained, documented, and evaluated by fellow Moodlers and developers. Learning to use the various tools common among Moodle developers will help you to efficiently and effectively develop, share and maintain the contributed code. &lt;br /&gt;
&lt;br /&gt;
==How to submit code==&lt;br /&gt;
You have created some code that you would like to contribute to the Moodle community.  The first step is to create a login in [[Tracker]]. You should create a new issue as a &amp;quot;non- core contributed module&amp;quot; project and a &amp;quot;New Feature&amp;quot; issue type. Here is a link to tracker with [http://tracker.moodle.org/secure/CreateIssue!default.jspa?pid=10033 those fields filled in]. &lt;br /&gt;
&lt;br /&gt;
Your issue will be a request that the code be evaluated and uploaded into CVS. Provide a clear description of what the code does and the functionality that it adds to Moodle. Attach the contributed code as a zip (or tar.gz) file to the tracker issue. At that point, the Contrib Coordinator will work directly with the code contributor to help evaluate the code, work on resolving any questions/issues found, etc. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to follow Moodle&#039;s coding guidelines [[Coding]].&lt;br /&gt;
*A list of current tracker [http://tracker.moodle.org/secure/BrowseProject.jspa  contributed projects is here].&lt;br /&gt;
&lt;br /&gt;
==How to work with code in CVS==&lt;br /&gt;
Once the code has been added to the CONTRIB section of Moodle&#039;s [[CVS (developer)| CVS]], the contributor will request CVS write access via http://moodle.org/cvs/ and thus be able to make changes to the contributed code. &lt;br /&gt;
&lt;br /&gt;
Contributors are encouraged to maintain a branch for each major Moodle release (i.e. 1.8, 1.9, etc.). The HEAD branch should be used as the development branch. Once CVS write access is approved, the maintainer will be able to make whatever changes are needed to maintain the code. &lt;br /&gt;
&lt;br /&gt;
That being said, contributors are encouraged to associate each change made to an issue in the tracker. This is accomplished automatically by beginning the CVS commit comment with the issue number. By doing so, the contributor helps to document the reason for the change in the code back to the issue requesting for a change. More information on working with CVS is available at: [[CVS (developer)]]. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Tip:&#039;&#039; &#039;&#039;&#039;Eclipse&#039;&#039;&#039; is an example of an Integrated Development Environment (IDE) that integrates and facilitates many of the common CVS tasks involved in working with Moodle CVS. Instructions for setting up and using Eclipse are available at: [[Eclipse]]. Experienced developers are free to use the tools they are most comfortable/productive with.&lt;br /&gt;
&lt;br /&gt;
: Another IDE with CVS support is [[Setting_up_Netbeans|NetBeans]].&lt;br /&gt;
&lt;br /&gt;
==How to provide documentation==&lt;br /&gt;
Having great code available to the community is wonderful. It is also important to educate users about how to use the code with documentation in [[Main Page|Moodle Docs]]. See [[MoodleDocs:Guidelines for contributors|guidelines for contributors]] for more help. &lt;br /&gt;
&lt;br /&gt;
A documentation page for a contributed module should have some basic elements.  A brief introduction of what the code does, a &amp;quot;Features&amp;quot; heading, perhaps a &amp;quot;Installation&amp;quot;, &amp;quot;Tips and tricks&amp;quot; and &amp;quot;See also&amp;quot; headings, all with content of course.  Sometimes a screenshot is worth 1000 words. In the &amp;quot;See also&amp;quot; put a link to the Modules and Plug database, with a note that this is the place to download versions, and the forum where questions can be answered at moodle.org.&lt;br /&gt;
&lt;br /&gt;
Other information might include: Languages Supported, Known Issues, Supported Versions (for Moodle 1.8, 1.9), and maybe which are being actively supported. The page should be added to the contributed code category by typing &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Contributed code]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
==Share code with modules and plugins database==&lt;br /&gt;
Now you have a place for users to get your code, how will they know it exists? Moodle users can easily find information about contributed code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database]. When you add an entry to this database, remember that it is searchable by any field. Every field is not required, but providing as much information as possible will help people who would like to find, read about, and then install your contribution.  In particular, the name of the module and the description of its function are important.  Screen shots are helpful (but please, not larger than 350px wide!). Links to discussion (on Moodle.org or other forum) and documentation (link to your page in the [https://docs.moodle.org Moodle docs] or another location) should be included if possible.  &lt;br /&gt;
&lt;br /&gt;
If you are maintaining your code using Moodle&#039;s CVS server, a zip file of your code is automatically created and stored on Moodle&#039;s download server ([http://download.moodle.org/ http://download.moodle.org]). Therefore, the download link for most contributed code will be a link to [http://download.moodle.org/ Moodle&#039;s download server]. If you host your code on a site other than [http://download.moodle.org/ Moodle&#039;s download server], please ensure that the download link goes directly to the file and that the file is in a standard archive format (i.e. preferably a zip file). This makes it easier for users to locate the file quickly and helps to standardize installation of the code. &lt;br /&gt;
&lt;br /&gt;
By way of example, if you have a CONTRIB plugin block called birthday, the preferred download link would be http://download.moodle.org/download.php/plugins/blocks/birthday.zip for the HEAD branch. For the MOODLE_19_STABLE branch, the URL would be http://download.moodle.org/download.php/plugins19/blocks/birthday.zip. Please note that the download.php is important as that is used to help produce the [http://download.moodle.org/stats.php download stats].&lt;br /&gt;
&lt;br /&gt;
Users may leave comments on your entry, so please check it periodically for questions and bug reports.  If you include contact information or a link to a discussion, your users may be able to contact you more directly.  The comments are not emailed automatically.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that entries added to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] require approval by a moderator before they will be visible to other Moodle users.&lt;br /&gt;
&lt;br /&gt;
==Support code and get feedback with forums==&lt;br /&gt;
As users become familiar with the contributed code, discussions about the code are likely to emerge. We strongly urge you to place links to at least one forum at moodle.org in your Modules and Plugins entry as well as in MoodleDocs. &lt;br /&gt;
&lt;br /&gt;
It is important to respond to users who have questions about how to use the code, suggestions for how to make it better, etc. If it looks like there is sufficient need for some contributed code to have its own forum, please create a request via the tracker in the MDL-SITE section. Moodle has included many contributed code projects and ideas into its core. &lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/view.php?id=44 Contributed code forum] is a generic forum.  Maybe create a thread &amp;quot;New Mousetrap module&amp;quot;.&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5 Using Moodle forums] The English speaking list of forums on many different subjects. &lt;br /&gt;
*[http://moodle.org/course/ A list of] other language forums and special areas in Moodle&lt;br /&gt;
&lt;br /&gt;
==Maintain and refine code with Tracker==&lt;br /&gt;
&lt;br /&gt;
In order to facilitate keeping track of feature requests, bugs, and other code issues, the contributor may request that a component be created in the CONTRIB section of the Moodle tracker. (This is the section where you initially made the request to have code included in CVS.moodle.org.)&lt;br /&gt;
&lt;br /&gt;
The contributor can be added to the group of CONTRIB developers in the tracker to manage the issues assigned to them and better coordinate with other developers. Users of the contributed code can then add issues which can be assigned directly to the maintainer. The tracker helps to manage the work flow involved in fixing bugs, working through feature requests, and maintaining the code. When committing changes, maintainers are strongly encouraged to begin the commit comment with a tracker number. &lt;br /&gt;
&lt;br /&gt;
We strongly encourage users to involve themselves in the process of creating a useful issue in tracker.  For the developer and code contributor,  describing the fix can help clarify the need for the code change. Further, it helps to establish good documentation about how the code developed. Others will be able to identify the issues addressed and understand why a particular decision was made.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
It is hoped that following this procedure, will help guide contributors of code in the process of learning the tools and skills used by the Moodle developers. Learning to submit code by using the tracker, work the code with CVS, support the code by providing documentation, share code in Modules and Plugins, maintain the code by using the tracker, and evolve the code by using the Moodle.org forums will assist you in successfully contributing to the Moodle community and working with Moodle&#039;s developers. &lt;br /&gt;
&lt;br /&gt;
Throughout this process, the CONTRIB Coordinator is here to encourage and support those contributing code to the Moodle community and fostering the development of tomorrow&#039;s Moodle developers.&lt;br /&gt;
&lt;br /&gt;
Eventually, the community may wish for the code to become part of the Moodle core. By following the steps above, the developers will be able to evaluate the merit of the contributed code, understand how users have used the code, see the issues that have emerged and thus have more information to make an informed decision about whether or not to incorporate the contributed code into core.&lt;br /&gt;
&lt;br /&gt;
==Most common recommendations for contributed code==&lt;br /&gt;
&lt;br /&gt;
There are several small issues that the CONTRIB Coordinator will typically check for when reviewing the code prior to committing to the CVS server. These issues help to ensure consistency and quality of code. Any suggestions made by the CONTRIB Coordinator should be considered recommendations aimed to help folks new to the Moodle community collaborate in a way consistent with standard practices within the Moodle community. The suggestions are meant to help avoid potential issues and facilitate the acceptance of your code.&lt;br /&gt;
&lt;br /&gt;
=== Does the file structure conform to Moodle standards? ===&lt;br /&gt;
Generally speaking, each file should have an appropriate extension (i.e. php, html, css, txt, etc.). To avoid issues with case sensitivity, folders and files are normally lower case; however, there are exceptions to this. Another common recommendation is to place the lang folder within the block or module rather than asking the user to copy files into the main lang folder. Changes made in the get_string function for Moodle 1.9 and onward make it possible to do this which goes a long way in keeping things modular. Similarly, to respect the modular nature of Moodle if a block requires a library it is usually preferred to keep it as a subdirectory in the block&#039;s folder. This can be especially helpful if your code is dependent upon a particular version of an external library.&lt;br /&gt;
&lt;br /&gt;
=== Does the code work without any obvious errors? ===&lt;br /&gt;
The CONTRIB Coordinator will try to install the block or module on a fresh Moodle installation and report back any errors. This testing is done with Debugging set to show All PHP notices and errors (not developer mode). The most common notices have to do with attempting to use a variable that has not been initialized or checked for existence. &lt;br /&gt;
&lt;br /&gt;
=== Does the code use the config_plugins table? ===&lt;br /&gt;
&lt;br /&gt;
Contributed blocks and modules are encouraged to make use of the &#039;&#039;&#039;config_plugins&#039;&#039;&#039; table rather than the config table. Maintainers are encouraged to read the documentation provided for the [http://xref.moodle.org/lib/moodlelib.php.html#get_config get_config()] and [http://xref.moodle.org/lib/moodlelib.php.html#set_config set_config()]] functions in the /lib/moodlelib.php file to help ensure that the footprint for the global $CFG variable does not become bloated.&lt;br /&gt;
&lt;br /&gt;
=== Does the code follow the [[Coding|Coding Guidelines]]? ===&lt;br /&gt;
The CONTRIB Coordinator will look at the code for general readability and point out any obvious deviations from the [[Coding|Coding Guidelines]]. While not all code needs to conform with each and every guideline, maintainers are encouraged to follow those guidelines as closely as possible.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Migrating contrib code to 2.0]]&lt;br /&gt;
*[[contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Overview]]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=99037 Best practices for code modification?] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7847</id>
		<title>Plugin contribution</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7847"/>
		<updated>2010-06-30T23:42:40Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Does the file structure conform to Moodle standards? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the various ways to share and work collaboratively on contributed code.&lt;br /&gt;
#Submit code in the [http://tracker.moodle.org/ Moodle Tracker] under [http://tracker.moodle.org/browse/CONTRIB CONTRIB].&lt;br /&gt;
#Work with submitted code in [http://cvs.moodle.org Moodle&#039;s CVS server]&lt;br /&gt;
#Document features and install instructions in [https://docs.moodle.org Moodle Docs]&lt;br /&gt;
#Share and distribute code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] &lt;br /&gt;
#Talk and support code in the [http://moodle.org/course/view.php?id=5 Using Moodle forums]&lt;br /&gt;
#Maintain and further develop code with the [http://tracker.moodle.org Moodle Tracker]&lt;br /&gt;
&lt;br /&gt;
==The Frequently asked question==&lt;br /&gt;
&#039;&#039;&#039;Question:&#039;&#039;&#039; I have written a new block, activity, patch or theme to share with the Moodle community. What is the process for contributing the code? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Answer:&#039;&#039;&#039; First, thank you for your generosity and desire to share your work with the rest of the Moodle community. Code contributions are highly valued and Moodle wants to encourage creativity and generosity in keeping with its constructivist tradition and pedagogical approach. To support this, there are several tools will support your contribution by allowing the code to be more easily found, tested, used, maintained, documented, and evaluated by fellow Moodlers and developers. Learning to use the various tools common among Moodle developers will help you to efficiently and effectively develop, share and maintain the contributed code. &lt;br /&gt;
&lt;br /&gt;
==How to submit code==&lt;br /&gt;
You have created some code that you would like to contribute to the Moodle community.  The first step is to create a login in [[Tracker]]. You should create a new issue as a &amp;quot;non- core contributed module&amp;quot; project and a &amp;quot;New Feature&amp;quot; issue type. Here is a link to tracker with [http://tracker.moodle.org/secure/CreateIssue!default.jspa?pid=10033 those fields filled in]. &lt;br /&gt;
&lt;br /&gt;
Your issue will be a request that the code be evaluated and uploaded into CVS. Provide a clear description of what the code does and the functionality that it adds to Moodle. Attach the contributed code as a zip (or tar.gz) file to the tracker issue. At that point, the Contrib Coordinator will work directly with the code contributor to help evaluate the code, work on resolving any questions/issues found, etc. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to follow Moodle&#039;s coding guidelines [[Coding]].&lt;br /&gt;
*A list of current tracker [http://tracker.moodle.org/secure/BrowseProject.jspa  contributed projects is here].&lt;br /&gt;
&lt;br /&gt;
==How to work with code in CVS==&lt;br /&gt;
Once the code has been added to the CONTRIB section of Moodle&#039;s [[CVS (developer)| CVS]], the contributor will request CVS write access via http://moodle.org/cvs/ and thus be able to make changes to the contributed code. &lt;br /&gt;
&lt;br /&gt;
Contributors are encouraged to maintain a branch for each major Moodle release (i.e. 1.8, 1.9, etc.). The HEAD branch should be used as the development branch. Once CVS write access is approved, the maintainer will be able to make whatever changes are needed to maintain the code. &lt;br /&gt;
&lt;br /&gt;
That being said, contributors are encouraged to associate each change made to an issue in the tracker. This is accomplished automatically by beginning the CVS commit comment with the issue number. By doing so, the contributor helps to document the reason for the change in the code back to the issue requesting for a change. More information on working with CVS is available at: [[CVS (developer)]]. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Tip:&#039;&#039; &#039;&#039;&#039;Eclipse&#039;&#039;&#039; is an example of an Integrated Development Environment (IDE) that integrates and facilitates many of the common CVS tasks involved in working with Moodle CVS. Instructions for setting up and using Eclipse are available at: [[Eclipse]]. Experienced developers are free to use the tools they are most comfortable/productive with.&lt;br /&gt;
&lt;br /&gt;
: Another IDE with CVS support is [[Setting_up_Netbeans|NetBeans]].&lt;br /&gt;
&lt;br /&gt;
==How to provide documentation==&lt;br /&gt;
Having great code available to the community is wonderful. It is also important to educate users about how to use the code with documentation in [[Main Page|Moodle Docs]]. See [[MoodleDocs:Guidelines for contributors|guidelines for contributors]] for more help. &lt;br /&gt;
&lt;br /&gt;
A documentation page for a contributed module should have some basic elements.  A brief introduction of what the code does, a &amp;quot;Features&amp;quot; heading, perhaps a &amp;quot;Installation&amp;quot;, &amp;quot;Tips and tricks&amp;quot; and &amp;quot;See also&amp;quot; headings, all with content of course.  Sometimes a screenshot is worth 1000 words. In the &amp;quot;See also&amp;quot; put a link to the Modules and Plug database, with a note that this is the place to download versions, and the forum where questions can be answered at moodle.org.&lt;br /&gt;
&lt;br /&gt;
Other information might include: Languages Supported, Known Issues, Supported Versions (for Moodle 1.8, 1.9), and maybe which are being actively supported. The page should be added to the contributed code category by typing &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Contributed code]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
==Share code with modules and plugins database==&lt;br /&gt;
Now you have a place for users to get your code, how will they know it exists? Moodle users can easily find information about contributed code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database]. When you add an entry to this database, remember that it is searchable by any field. Every field is not required, but providing as much information as possible will help people who would like to find, read about, and then install your contribution.  In particular, the name of the module and the description of its function are important.  Screen shots are helpful (but please, not larger than 350px wide!). Links to discussion (on Moodle.org or other forum) and documentation (link to your page in the [https://docs.moodle.org Moodle docs] or another location) should be included if possible.  &lt;br /&gt;
&lt;br /&gt;
If you are maintaining your code using Moodle&#039;s CVS server, a zip file of your code is automatically created and stored on Moodle&#039;s download server ([http://download.moodle.org/ http://download.moodle.org]). Therefore, the download link for most contributed code will be a link to [http://download.moodle.org/ Moodle&#039;s download server]. If you host your code on a site other than [http://download.moodle.org/ Moodle&#039;s download server], please ensure that the download link goes directly to the file and that the file is in a standard archive format (i.e. preferably a zip file). This makes it easier for users to locate the file quickly and helps to standardize installation of the code. &lt;br /&gt;
&lt;br /&gt;
By way of example, if you have a CONTRIB plugin block called birthday, the preferred download link would be http://download.moodle.org/download.php/plugins/blocks/birthday.zip for the HEAD branch. For the MOODLE_19_STABLE branch, the URL would be http://download.moodle.org/download.php/plugins19/blocks/birthday.zip. Please note that the download.php is important as that is used to help produce the [http://download.moodle.org/stats.php download stats].&lt;br /&gt;
&lt;br /&gt;
Users may leave comments on your entry, so please check it periodically for questions and bug reports.  If you include contact information or a link to a discussion, your users may be able to contact you more directly.  The comments are not emailed automatically.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that entries added to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] require approval by a moderator before they will be visible to other Moodle users.&lt;br /&gt;
&lt;br /&gt;
==Support code and get feedback with forums==&lt;br /&gt;
As users become familiar with the contributed code, discussions about the code are likely to emerge. We strongly urge you to place links to at least one forum at moodle.org in your Modules and Plugins entry as well as in MoodleDocs. &lt;br /&gt;
&lt;br /&gt;
It is important to respond to users who have questions about how to use the code, suggestions for how to make it better, etc. If it looks like there is sufficient need for some contributed code to have its own forum, please create a request via the tracker in the MDL-SITE section. Moodle has included many contributed code projects and ideas into its core. &lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/view.php?id=44 Contributed code forum] is a generic forum.  Maybe create a thread &amp;quot;New Mousetrap module&amp;quot;.&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5 Using Moodle forums] The English speaking list of forums on many different subjects. &lt;br /&gt;
*[http://moodle.org/course/ A list of] other language forums and special areas in Moodle&lt;br /&gt;
&lt;br /&gt;
==Maintain and refine code with Tracker==&lt;br /&gt;
&lt;br /&gt;
In order to facilitate keeping track of feature requests, bugs, and other code issues, the contributor may request that a component be created in the CONTRIB section of the Moodle tracker. (This is the section where you initially made the request to have code included in CVS.moodle.org.)&lt;br /&gt;
&lt;br /&gt;
The contributor can be added to the group of CONTRIB developers in the tracker to manage the issues assigned to them and better coordinate with other developers. Users of the contributed code can then add issues which can be assigned directly to the maintainer. The tracker helps to manage the work flow involved in fixing bugs, working through feature requests, and maintaining the code. When committing changes, maintainers are strongly encouraged to begin the commit comment with a tracker number. &lt;br /&gt;
&lt;br /&gt;
We strongly encourage users to involve themselves in the process of creating a useful issue in tracker.  For the developer and code contributor,  describing the fix can help clarify the need for the code change. Further, it helps to establish good documentation about how the code developed. Others will be able to identify the issues addressed and understand why a particular decision was made.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
It is hoped that following this procedure, will help guide contributors of code in the process of learning the tools and skills used by the Moodle developers. Learning to submit code by using the tracker, work the code with CVS, support the code by providing documentation, share code in Modules and Plugins, maintain the code by using the tracker, and evolve the code by using the Moodle.org forums will assist you in successfully contributing to the Moodle community and working with Moodle&#039;s developers. &lt;br /&gt;
&lt;br /&gt;
Throughout this process, the CONTRIB Coordinator is here to encourage and support those contributing code to the Moodle community and fostering the development of tomorrow&#039;s Moodle developers.&lt;br /&gt;
&lt;br /&gt;
Eventually, the community may wish for the code to become part of the Moodle core. By following the steps above, the developers will be able to evaluate the merit of the contributed code, understand how users have used the code, see the issues that have emerged and thus have more information to make an informed decision about whether or not to incorporate the contributed code into core.&lt;br /&gt;
&lt;br /&gt;
==Most common recommendations for contributed code==&lt;br /&gt;
&lt;br /&gt;
There are several small issues that the CONTRIB Coordinator will typically check for when reviewing the code prior to committing to the CVS server. These issues help to ensure consistency and quality of code. Any suggestions made by the CONTRIB Coordinator should be considered recommendations aimed to help folks new to the Moodle community collaborate in a way consistent with standard practices within the Moodle community. The suggestions are meant to help avoid potential issues and facilitate the acceptance of your code.&lt;br /&gt;
&lt;br /&gt;
=== Does the file structure conform to Moodle standards? ===&lt;br /&gt;
Generally speaking, each file should have an appropriate extension (i.e. php, html, css, txt, etc.). To avoid issues with case sensitivity, folders and files are normally lower case; however, there are exceptions to this. Another common recommendation is to place the lang folder within the block or module rather than asking the user to copy files into the main lang folder. Changes made in the get_string function for Moodle 1.9 and onward make it possible to do this which goes a long way in keeping things modular. Similarly, to respect the modular nature of Moodle if a block requires a library it is usually preferred to keep it as a subdirectory in the block&#039;s folder.&lt;br /&gt;
&lt;br /&gt;
=== Does the code work without any obvious errors? ===&lt;br /&gt;
The CONTRIB Coordinator will try to install the block or module on a fresh Moodle installation and report back any errors. This testing is done with Debugging set to show All PHP notices and errors (not developer mode). The most common notices have to do with attempting to use a variable that has not been initialized or checked for existence. &lt;br /&gt;
&lt;br /&gt;
=== Does the code use the config_plugins table? ===&lt;br /&gt;
&lt;br /&gt;
Contributed blocks and modules are encouraged to make use of the &#039;&#039;&#039;config_plugins&#039;&#039;&#039; table rather than the config table. Maintainers are encouraged to read the documentation provided for the [http://xref.moodle.org/lib/moodlelib.php.html#get_config get_config()] and [http://xref.moodle.org/lib/moodlelib.php.html#set_config set_config()]] functions in the /lib/moodlelib.php file to help ensure that the footprint for the global $CFG variable does not become bloated.&lt;br /&gt;
&lt;br /&gt;
=== Does the code follow the [[Coding|Coding Guidelines]]? ===&lt;br /&gt;
The CONTRIB Coordinator will look at the code for general readability and point out any obvious deviations from the [[Coding|Coding Guidelines]]. While not all code needs to conform with each and every guideline, maintainers are encouraged to follow those guidelines as closely as possible.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Migrating contrib code to 2.0]]&lt;br /&gt;
*[[contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Overview]]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=99037 Best practices for code modification?] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Modules_and_plugins_improvements&amp;diff=27923</id>
		<title>Talk:Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Modules_and_plugins_improvements&amp;diff=27923"/>
		<updated>2010-06-15T12:18:23Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Tags */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anthony:  I agree that this would be very helpful.  Three suggestions:&lt;br /&gt;
*  We should look at how other GNU web applications which have high rates of community contributions work, for example Drupal, MediaWiki, and WordPress.  Perhaps a page (or section) of &amp;quot;Lesson&#039;s learned&amp;quot; from these projects would be useful for this discussion.&lt;br /&gt;
*  I think it would be a good idea to expand the list of possible reviewers so that it does not focus too much only only the employees of Moodle.com (and I suspect that most of them would agree as well). Perhaps a way to do this is to have greater weight be given to those who have either contributed already certified code (that could include partners,HQ staff, or other contributors), or who have given effective reviews of a number of other modules, etc.  To not discourage new-comers in the process, perhaps an review may need three net positive votes, where a new-comer can give one vote, but a pre-certified individual could give two or three votes, etc.&lt;br /&gt;
* Obviously, we need to keep it simple and not make the certification process too difficult.  One way to do that may be to have a Wiki page on each contribution, and people could use the page comments to offer their reviews.  Those wanting their contribution to be certified could solicit review.  Before certification was given, they would need a certain amount of positive feedback, and all concerns raised in the feedback would need to be addressed (either with a fix or with a discussion that attempted to reach a consensus on any issues raised).--[[User:Gary Anderson|Gary Anderson]] 17:33, 26 April 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Many thanks Gary for your feedback and ideas. ==&lt;br /&gt;
&lt;br /&gt;
*  I will be attending the http://sf2010.drupal.org/conference/unconference so that I can meet with some of the Drupal folks. I am trying to get feedback from other open source projects and will create a lessons learned section or what I&#039;m hearing from others. &lt;br /&gt;
*  Your ideas here make me wonder if we need to have a Moodle Certified Code Reviewer similar to the MCT program. The challenge here is what is understood by code review and keeping it very specific and measurable. One argument I would anticipate hearing back would be just because someone shares code or has written code does not mean that they are writing good code. Since the purpose of code review is quality control, we need to be as clear as possible on the evaluation process and what the various ratings meeting. &lt;br /&gt;
*  I like the idea of looking at the responsiveness of the contributor to issues but think expecting all issues to be addressed is probably not realistic. But it is important that contributors be responsive to user input by responding even if the decision is made to not fix or implement a suggestion.&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&lt;br /&gt;
At the 2010 OKMoot the idea came up of adding tags so that it would be easier to see groups of plugins (for example question types). I believe the current system already has this somewhat but we may want to improve the UI. Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17553</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17553"/>
		<updated>2010-04-26T14:41:22Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;WARNING: Under construction RIGHT NOW!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
* [[Output_renderers]]&lt;br /&gt;
* [[Migrating_your_code_to_the_2.0_rendering_API]] (n.b., some info outdated and may need updating)&lt;br /&gt;
* [[Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17552</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17552"/>
		<updated>2010-04-26T14:39:26Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;WARNING: Under construction RIGHT NOW!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
* [[Output_renderers]]&lt;br /&gt;
* [[Migrating_your_code_to_the_2.0_rendering_API]]&lt;br /&gt;
* [[Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17551</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17551"/>
		<updated>2010-04-26T14:38:07Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;WARNING: Under construction RIGHT NOW!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
* [[Output_renderers]]&lt;br /&gt;
* [[Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17550</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17550"/>
		<updated>2010-04-26T14:33:50Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;WARNING: Under construction RIGHT NOW!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
* [[Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17549</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17549"/>
		<updated>2010-04-26T14:29:25Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;WARNING: Under construction RIGHT NOW!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17548</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17548"/>
		<updated>2010-04-26T14:28:45Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;WARNING: Under construction RIGHT NOW!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Automated_Manipulation_of_Strings_2.0&amp;diff=28359</id>
		<title>Talk:Automated Manipulation of Strings 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Automated_Manipulation_of_Strings_2.0&amp;diff=28359"/>
		<updated>2010-04-10T20:59:18Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Automatic translation of new strings into existing language packs */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nice spec David!&lt;br /&gt;
&lt;br /&gt;
There should be some kind of administration page available:&lt;br /&gt;
 * administer translators rights to edit a specific language pack&lt;br /&gt;
 * create new language packs&lt;br /&gt;
--[[User:koen roggemans|koen roggemans]] 08:36, 19 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Thanks for these points, Koen. --[[User:David Mudrak|David Mudrak]] 18:41, 19 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Automatic translation of new strings into existing language packs ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m excited about the general direction that this heading in. I realize that automatic/computer-based translation of strings often lags or lacks quality; however, I thought it might be a nice feature to serve as a starting place for a translation by default. For example, I recently read an article about vast improvements made with the Google translator. My thinking is that this would at least provide a starting place for a translator to come in and then improve upon the auto-generated translation by offering a human translation. I&#039;m thinking especially with CONTRIB this could be useful as someone in Brazil writing a module could have strings automatically translated into the existing language packs (or at least for which such automation might be practical). Then those strings could be cleaned up as needed. Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Modules_and_plugins_improvements&amp;diff=27922</id>
		<title>Talk:Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Modules_and_plugins_improvements&amp;diff=27922"/>
		<updated>2010-03-27T13:43:40Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Many thanks Gary for your feedback and ideas. */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anthony:  I agree that this would be very helpful.  Three suggestions:&lt;br /&gt;
*  We should look at how other GNU web applications which have high rates of community contributions work, for example Drupal, MediaWiki, and WordPress.  Perhaps a page (or section) of &amp;quot;Lesson&#039;s learned&amp;quot; from these projects would be useful for this discussion.&lt;br /&gt;
*  I think it would be a good idea to expand the list of possible reviewers so that it does not focus too much only only the employees of Moodle.com (and I suspect that most of them would agree as well). Perhaps a way to do this is to have greater weight be given to those who have either contributed already certified code (that could include partners,HQ staff, or other contributors), or who have given effective reviews of a number of other modules, etc.  To not discourage new-comers in the process, perhaps an review may need three net positive votes, where a new-comer can give one vote, but a pre-certified individual could give two or three votes, etc.&lt;br /&gt;
* Obviously, we need to keep it simple and not make the certification process too difficult.  One way to do that may be to have a Wiki page on each contribution, and people could use the page comments to offer their reviews.  Those wanting their contribution to be certified could solicit review.  Before certification was given, they would need a certain amount of positive feedback, and all concerns raised in the feedback would need to be addressed (either with a fix or with a discussion that attempted to reach a consensus on any issues raised).--[[User:Gary Anderson|Gary Anderson]] 17:33, 26 April 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Many thanks Gary for your feedback and ideas. ==&lt;br /&gt;
&lt;br /&gt;
*  I will be attending the http://sf2010.drupal.org/conference/unconference so that I can meet with some of the Drupal folks. I am trying to get feedback from other open source projects and will create a lessons learned section or what I&#039;m hearing from others. &lt;br /&gt;
*  Your ideas here make me wonder if we need to have a Moodle Certified Code Reviewer similar to the MCT program. The challenge here is what is understood by code review and keeping it very specific and measurable. One argument I would anticipate hearing back would be just because someone shares code or has written code does not mean that they are writing good code. Since the purpose of code review is quality control, we need to be as clear as possible on the evaluation process and what the various ratings meeting. &lt;br /&gt;
*  I like the idea of looking at the responsiveness of the contributor to issues but think expecting all issues to be addressed is probably not realistic. But it is important that contributors be responsive to user input by responding even if the decision is made to not fix or implement a suggestion.&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7845</id>
		<title>Plugin contribution</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7845"/>
		<updated>2010-03-03T16:57:54Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Share code with modules and plugins database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the various ways to share and work collaboratively on contributed code.&lt;br /&gt;
#Submit code in the [http://tracker.moodle.org/ Moodle Tracker] under [http://tracker.moodle.org/browse/CONTRIB CONTRIB].&lt;br /&gt;
#Work with submitted code in [http://cvs.moodle.org Moodle&#039;s CVS server]&lt;br /&gt;
#Document features and install instructions in [https://docs.moodle.org Moodle Docs]&lt;br /&gt;
#Share and distribute code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] &lt;br /&gt;
#Talk and support code in the [http://moodle.org/course/view.php?id=5 Using Moodle forums]&lt;br /&gt;
#Maintain and further develop code with the [http://tracker.moodle.org Moodle Tracker]&lt;br /&gt;
&lt;br /&gt;
==The Frequently asked question==&lt;br /&gt;
&#039;&#039;&#039;Question:&#039;&#039;&#039; I have written a new block, activity, patch or theme to share with the Moodle community. What is the process for contributing the code? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Answer:&#039;&#039;&#039; First, thank you for your generosity and desire to share your work with the rest of the Moodle community. Code contributions are highly valued and Moodle wants to encourage creativity and generosity in keeping with its constructivist tradition and pedagogical approach. To support this, there are several tools will support your contribution by allowing the code to be more easily found, tested, used, maintained, documented, and evaluated by fellow Moodlers and developers. Learning to use the various tools common among Moodle developers will help you to efficiently and effectively develop, share and maintain the contributed code. &lt;br /&gt;
&lt;br /&gt;
==How to submit code==&lt;br /&gt;
You have created some code that you would like to contribute to the Moodle community.  The first step is to create a login in [[Tracker]]. You should create a new issue as a &amp;quot;non- core contributed module&amp;quot; project and a &amp;quot;New Feature&amp;quot; issue type. Here is a link to tracker with [http://tracker.moodle.org/secure/CreateIssue!default.jspa?pid=10033 those fields filled in]. &lt;br /&gt;
&lt;br /&gt;
Your issue will be a request that the code be evaluated and uploaded into CVS. Provide a clear description of what the code does and the functionality that it adds to Moodle. Attach the contributed code as a zip (or tar.gz) file to the tracker issue. At that point, the Contrib Coordinator will work directly with the code contributor to help evaluate the code, work on resolving any questions/issues found, etc. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to follow Moodle&#039;s coding guidelines [[Coding]].&lt;br /&gt;
*A list of current tracker [http://tracker.moodle.org/secure/BrowseProject.jspa  contributed projects is here].&lt;br /&gt;
&lt;br /&gt;
==How to work with code in CVS==&lt;br /&gt;
Once the code has been added to the CONTRIB section of Moodle&#039;s [[CVS (developer)| CVS]], the contributor will request CVS write access via http://moodle.org/cvs/ and thus be able to make changes to the contributed code. &lt;br /&gt;
&lt;br /&gt;
Contributors are encouraged to maintain a branch for each major Moodle release (i.e. 1.8, 1.9, etc.). The HEAD branch should be used as the development branch. Once CVS write access is approved, the maintainer will be able to make whatever changes are needed to maintain the code. &lt;br /&gt;
&lt;br /&gt;
That being said, contributors are encouraged to associate each change made to an issue in the tracker. This is accomplished automatically by beginning the CVS commit comment with the issue number. By doing so, the contributor helps to document the reason for the change in the code back to the issue requesting for a change. More information on working with CVS is available at: [[CVS (developer)]]. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Tip:&#039;&#039; &#039;&#039;&#039;Eclipse&#039;&#039;&#039; is an example of an Integrated Development Environment (IDE) that integrates and facilitates many of the common CVS tasks involved in working with Moodle CVS. Instructions for setting up and using Eclipse are available at: [[Eclipse]]. Experienced developers are free to use the tools they are most comfortable/productive with.&lt;br /&gt;
&lt;br /&gt;
: Another IDE with CVS support is [[Setting_up_Netbeans|NetBeans]].&lt;br /&gt;
&lt;br /&gt;
==How to provide documentation==&lt;br /&gt;
Having great code available to the community is wonderful. It is also important to educate users about how to use the code with documentation in [[Main Page|Moodle Docs]]. See [[MoodleDocs:Guidelines for contributors|guidelines for contributors]] for more help. &lt;br /&gt;
&lt;br /&gt;
A documentation page for a contributed module should have some basic elements.  A brief introduction of what the code does, a &amp;quot;Features&amp;quot; heading, perhaps a &amp;quot;Installation&amp;quot;, &amp;quot;Tips and tricks&amp;quot; and &amp;quot;See also&amp;quot; headings, all with content of course.  Sometimes a screenshot is worth 1000 words. In the &amp;quot;See also&amp;quot; put a link to the Modules and Plug database, with a note that this is the place to download versions, and the forum where questions can be answered at moodle.org.&lt;br /&gt;
&lt;br /&gt;
Other information might include: Languages Supported, Known Issues, Supported Versions (for Moodle 1.8, 1.9), and maybe which are being actively supported. The page should be added to the contributed code category by typing &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Contributed code]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
==Share code with modules and plugins database==&lt;br /&gt;
Now you have a place for users to get your code, how will they know it exists? Moodle users can easily find information about contributed code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database]. When you add an entry to this database, remember that it is searchable by any field. Every field is not required, but providing as much information as possible will help people who would like to find, read about, and then install your contribution.  In particular, the name of the module and the description of its function are important.  Screen shots are helpful (but please, not larger than 350px wide!). Links to discussion (on Moodle.org or other forum) and documentation (link to your page in the [https://docs.moodle.org Moodle docs] or another location) should be included if possible.  &lt;br /&gt;
&lt;br /&gt;
If you are maintaining your code using Moodle&#039;s CVS server, a zip file of your code is automatically created and stored on Moodle&#039;s download server ([http://download.moodle.org/ http://download.moodle.org]). Therefore, the download link for most contributed code will be a link to [http://download.moodle.org/ Moodle&#039;s download server]. If you host your code on a site other than [http://download.moodle.org/ Moodle&#039;s download server], please ensure that the download link goes directly to the file and that the file is in a standard archive format (i.e. preferably a zip file). This makes it easier for users to locate the file quickly and helps to standardize installation of the code. &lt;br /&gt;
&lt;br /&gt;
By way of example, if you have a CONTRIB plugin block called birthday, the preferred download link would be http://download.moodle.org/download.php/plugins/blocks/birthday.zip for the HEAD branch. For the MOODLE_19_STABLE branch, the URL would be http://download.moodle.org/download.php/plugins19/blocks/birthday.zip. Please note that the download.php is important as that is used to help produce the [http://download.moodle.org/stats.php download stats].&lt;br /&gt;
&lt;br /&gt;
Users may leave comments on your entry, so please check it periodically for questions and bug reports.  If you include contact information or a link to a discussion, your users may be able to contact you more directly.  The comments are not emailed automatically.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that entries added to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] require approval by a moderator before they will be visible to other Moodle users.&lt;br /&gt;
&lt;br /&gt;
==Support code and get feedback with forums==&lt;br /&gt;
As users become familiar with the contributed code, discussions about the code are likely to emerge. We strongly urge you to place links to at least one forum at moodle.org in your Modules and Plugins entry as well as in MoodleDocs. &lt;br /&gt;
&lt;br /&gt;
It is important to respond to users who have questions about how to use the code, suggestions for how to make it better, etc. If it looks like there is sufficient need for some contributed code to have its own forum, please create a request via the tracker in the MDL-SITE section. Moodle has included many contributed code projects and ideas into its core. &lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/view.php?id=44 Contributed code forum] is a generic forum.  Maybe create a thread &amp;quot;New Mousetrap module&amp;quot;.&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5 Using Moodle forums] The English speaking list of forums on many different subjects. &lt;br /&gt;
*[http://moodle.org/course/ A list of] other language forums and special areas in Moodle&lt;br /&gt;
&lt;br /&gt;
==Maintain and refine code with Tracker==&lt;br /&gt;
&lt;br /&gt;
In order to facilitate keeping track of feature requests, bugs, and other code issues, the contributor may request that a component be created in the CONTRIB section of the Moodle tracker. (This is the section where you initially made the request to have code included in CVS.moodle.org.)&lt;br /&gt;
&lt;br /&gt;
The contributor can be added to the group of CONTRIB developers in the tracker to manage the issues assigned to them and better coordinate with other developers. Users of the contributed code can then add issues which can be assigned directly to the maintainer. The tracker helps to manage the work flow involved in fixing bugs, working through feature requests, and maintaining the code. When committing changes, maintainers are strongly encouraged to begin the commit comment with a tracker number. &lt;br /&gt;
&lt;br /&gt;
We strongly encourage users to involve themselves in the process of creating a useful issue in tracker.  For the developer and code contributor,  describing the fix can help clarify the need for the code change. Further, it helps to establish good documentation about how the code developed. Others will be able to identify the issues addressed and understand why a particular decision was made.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
It is hoped that following this procedure, will help guide contributors of code in the process of learning the tools and skills used by the Moodle developers. Learning to submit code by using the tracker, work the code with CVS, support the code by providing documentation, share code in Modules and Plugins, maintain the code by using the tracker, and evolve the code by using the Moodle.org forums will assist you in successfully contributing to the Moodle community and working with Moodle&#039;s developers. &lt;br /&gt;
&lt;br /&gt;
Throughout this process, the CONTRIB Coordinator is here to encourage and support those contributing code to the Moodle community and fostering the development of tomorrow&#039;s Moodle developers.&lt;br /&gt;
&lt;br /&gt;
Eventually, the community may wish for the code to become part of the Moodle core. By following the steps above, the developers will be able to evaluate the merit of the contributed code, understand how users have used the code, see the issues that have emerged and thus have more information to make an informed decision about whether or not to incorporate the contributed code into core.&lt;br /&gt;
&lt;br /&gt;
==Most common recommendations for contributed code==&lt;br /&gt;
&lt;br /&gt;
There are several small issues that the CONTRIB Coordinator will typically check for when reviewing the code prior to committing to the CVS server. These issues help to ensure consistency and quality of code. Any suggestions made by the CONTRIB Coordinator should be considered recommendations aimed to help folks new to the Moodle community collaborate in a way consistent with standard practices within the Moodle community. The suggestions are meant to help avoid potential issues and facilitate the acceptance of your code.&lt;br /&gt;
&lt;br /&gt;
=== Does the file structure conform to Moodle standards? ===&lt;br /&gt;
Generally speaking, each file should have an appropriate extension (i.e. php, html, css, txt, etc.). To avoid issues with case sensitivity, folders and files are normally lower case; however, there are exceptions to this. Another common recommendation is to place the lang folder within the block or module rather than asking the user to copy files into the main lang folder. Changes made in the get_string function for Moodle 1.9 and onward make it possible to do this which goes a long way in keeping things modular. &lt;br /&gt;
&lt;br /&gt;
=== Does the code work without any obvious errors? ===&lt;br /&gt;
The CONTRIB Coordinator will try to install the block or module on a fresh Moodle installation and report back any errors. This testing is done with Debugging set to show All PHP notices and errors (not developer mode). The most common notices have to do with attempting to use a variable that has not been initialized or checked for existence. &lt;br /&gt;
&lt;br /&gt;
=== Does the code use the config_plugins table? ===&lt;br /&gt;
&lt;br /&gt;
Contributed blocks and modules are encouraged to make use of the &#039;&#039;&#039;config_plugins&#039;&#039;&#039; table rather than the config table. Maintainers are encouraged to read the documentation provided for the [http://xref.moodle.org/lib/moodlelib.php.html#get_config get_config()] and [http://xref.moodle.org/lib/moodlelib.php.html#set_config set_config()]] functions in the /lib/moodlelib.php file to help ensure that the footprint for the global $CFG variable does not become bloated.&lt;br /&gt;
&lt;br /&gt;
=== Does the code follow the [[Coding|Coding Guidelines]]? ===&lt;br /&gt;
The CONTRIB Coordinator will look at the code for general readability and point out any obvious deviations from the [[Coding|Coding Guidelines]]. While not all code needs to conform with each and every guideline, maintainers are encouraged to follow those guidelines as closely as possible.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Overview]]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=99037 Best practices for code modification?] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7844</id>
		<title>Plugin contribution</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7844"/>
		<updated>2010-03-03T16:56:38Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the various ways to share and work collaboratively on contributed code.&lt;br /&gt;
#Submit code in the [http://tracker.moodle.org/ Moodle Tracker] under [http://tracker.moodle.org/browse/CONTRIB CONTRIB].&lt;br /&gt;
#Work with submitted code in [http://cvs.moodle.org Moodle&#039;s CVS server]&lt;br /&gt;
#Document features and install instructions in [https://docs.moodle.org Moodle Docs]&lt;br /&gt;
#Share and distribute code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] &lt;br /&gt;
#Talk and support code in the [http://moodle.org/course/view.php?id=5 Using Moodle forums]&lt;br /&gt;
#Maintain and further develop code with the [http://tracker.moodle.org Moodle Tracker]&lt;br /&gt;
&lt;br /&gt;
==The Frequently asked question==&lt;br /&gt;
&#039;&#039;&#039;Question:&#039;&#039;&#039; I have written a new block, activity, patch or theme to share with the Moodle community. What is the process for contributing the code? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Answer:&#039;&#039;&#039; First, thank you for your generosity and desire to share your work with the rest of the Moodle community. Code contributions are highly valued and Moodle wants to encourage creativity and generosity in keeping with its constructivist tradition and pedagogical approach. To support this, there are several tools will support your contribution by allowing the code to be more easily found, tested, used, maintained, documented, and evaluated by fellow Moodlers and developers. Learning to use the various tools common among Moodle developers will help you to efficiently and effectively develop, share and maintain the contributed code. &lt;br /&gt;
&lt;br /&gt;
==How to submit code==&lt;br /&gt;
You have created some code that you would like to contribute to the Moodle community.  The first step is to create a login in [[Tracker]]. You should create a new issue as a &amp;quot;non- core contributed module&amp;quot; project and a &amp;quot;New Feature&amp;quot; issue type. Here is a link to tracker with [http://tracker.moodle.org/secure/CreateIssue!default.jspa?pid=10033 those fields filled in]. &lt;br /&gt;
&lt;br /&gt;
Your issue will be a request that the code be evaluated and uploaded into CVS. Provide a clear description of what the code does and the functionality that it adds to Moodle. Attach the contributed code as a zip (or tar.gz) file to the tracker issue. At that point, the Contrib Coordinator will work directly with the code contributor to help evaluate the code, work on resolving any questions/issues found, etc. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to follow Moodle&#039;s coding guidelines [[Coding]].&lt;br /&gt;
*A list of current tracker [http://tracker.moodle.org/secure/BrowseProject.jspa  contributed projects is here].&lt;br /&gt;
&lt;br /&gt;
==How to work with code in CVS==&lt;br /&gt;
Once the code has been added to the CONTRIB section of Moodle&#039;s [[CVS (developer)| CVS]], the contributor will request CVS write access via http://moodle.org/cvs/ and thus be able to make changes to the contributed code. &lt;br /&gt;
&lt;br /&gt;
Contributors are encouraged to maintain a branch for each major Moodle release (i.e. 1.8, 1.9, etc.). The HEAD branch should be used as the development branch. Once CVS write access is approved, the maintainer will be able to make whatever changes are needed to maintain the code. &lt;br /&gt;
&lt;br /&gt;
That being said, contributors are encouraged to associate each change made to an issue in the tracker. This is accomplished automatically by beginning the CVS commit comment with the issue number. By doing so, the contributor helps to document the reason for the change in the code back to the issue requesting for a change. More information on working with CVS is available at: [[CVS (developer)]]. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Tip:&#039;&#039; &#039;&#039;&#039;Eclipse&#039;&#039;&#039; is an example of an Integrated Development Environment (IDE) that integrates and facilitates many of the common CVS tasks involved in working with Moodle CVS. Instructions for setting up and using Eclipse are available at: [[Eclipse]]. Experienced developers are free to use the tools they are most comfortable/productive with.&lt;br /&gt;
&lt;br /&gt;
: Another IDE with CVS support is [[Setting_up_Netbeans|NetBeans]].&lt;br /&gt;
&lt;br /&gt;
==How to provide documentation==&lt;br /&gt;
Having great code available to the community is wonderful. It is also important to educate users about how to use the code with documentation in [[Main Page|Moodle Docs]]. See [[MoodleDocs:Guidelines for contributors|guidelines for contributors]] for more help. &lt;br /&gt;
&lt;br /&gt;
A documentation page for a contributed module should have some basic elements.  A brief introduction of what the code does, a &amp;quot;Features&amp;quot; heading, perhaps a &amp;quot;Installation&amp;quot;, &amp;quot;Tips and tricks&amp;quot; and &amp;quot;See also&amp;quot; headings, all with content of course.  Sometimes a screenshot is worth 1000 words. In the &amp;quot;See also&amp;quot; put a link to the Modules and Plug database, with a note that this is the place to download versions, and the forum where questions can be answered at moodle.org.&lt;br /&gt;
&lt;br /&gt;
Other information might include: Languages Supported, Known Issues, Supported Versions (for Moodle 1.8, 1.9), and maybe which are being actively supported. The page should be added to the contributed code category by typing &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Contributed code]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
==Share code with modules and plugins database==&lt;br /&gt;
Now you have a place for users to get your code, how will they know it exists? Moodle users can easily find information about contributed code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database]. When you add an entry to this database, remember that it is searchable by any field. Every field is not required, but providing as much information as possible will help people who would like to find, read about, and then install your contribution.  In particular, the name of the module and the description of its function are important.  Screen shots are helpful (but please, not larger than 350px wide!). Links to discussion (on Moodle.org or other forum) and documentation (link to your page in the [https://docs.moodle.org Moodle docs] or another location) should be included if possible.  &lt;br /&gt;
&lt;br /&gt;
If you are maintaining your code using Moodle&#039;s CVS server, a zip file of your code is automatically created and stored on Moodle&#039;s download server ([http://download.moodle.org/ http://download.moodle.org]). Therefore, the download link for most contributed code will be a link to [http://download.moodle.org/ Moodle&#039;s download server]. If you host your code on a site other than [http://download.moodle.org/ Moodle&#039;s download server], please ensure that the download link goes directly to the file and that the file is in a standard archive format (i.e. preferably a zip file). This makes it easier for users to locate the file quickly and helps to standardize installation of the code. &lt;br /&gt;
&lt;br /&gt;
By way of example, if you have a CONTRIB plugin block called birthday, the preferred download link would be http://download.moodle.org/download.php/plugins/block/birthday.zip for the HEAD branch. For the MOODLE_19_STABLE branch, the URL would be http://download.moodle.org/download.php/plugins19/block/birthday.zip. Please note that the download.php is important as that is used to help produce the [http://download.moodle.org/stats.php download stats].&lt;br /&gt;
&lt;br /&gt;
Users may leave comments on your entry, so please check it periodically for questions and bug reports.  If you include contact information or a link to a discussion, your users may be able to contact you more directly.  The comments are not emailed automatically.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that entries added to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] require approval by a moderator before they will be visible to other Moodle users.&lt;br /&gt;
&lt;br /&gt;
==Support code and get feedback with forums==&lt;br /&gt;
As users become familiar with the contributed code, discussions about the code are likely to emerge. We strongly urge you to place links to at least one forum at moodle.org in your Modules and Plugins entry as well as in MoodleDocs. &lt;br /&gt;
&lt;br /&gt;
It is important to respond to users who have questions about how to use the code, suggestions for how to make it better, etc. If it looks like there is sufficient need for some contributed code to have its own forum, please create a request via the tracker in the MDL-SITE section. Moodle has included many contributed code projects and ideas into its core. &lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/view.php?id=44 Contributed code forum] is a generic forum.  Maybe create a thread &amp;quot;New Mousetrap module&amp;quot;.&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5 Using Moodle forums] The English speaking list of forums on many different subjects. &lt;br /&gt;
*[http://moodle.org/course/ A list of] other language forums and special areas in Moodle&lt;br /&gt;
&lt;br /&gt;
==Maintain and refine code with Tracker==&lt;br /&gt;
&lt;br /&gt;
In order to facilitate keeping track of feature requests, bugs, and other code issues, the contributor may request that a component be created in the CONTRIB section of the Moodle tracker. (This is the section where you initially made the request to have code included in CVS.moodle.org.)&lt;br /&gt;
&lt;br /&gt;
The contributor can be added to the group of CONTRIB developers in the tracker to manage the issues assigned to them and better coordinate with other developers. Users of the contributed code can then add issues which can be assigned directly to the maintainer. The tracker helps to manage the work flow involved in fixing bugs, working through feature requests, and maintaining the code. When committing changes, maintainers are strongly encouraged to begin the commit comment with a tracker number. &lt;br /&gt;
&lt;br /&gt;
We strongly encourage users to involve themselves in the process of creating a useful issue in tracker.  For the developer and code contributor,  describing the fix can help clarify the need for the code change. Further, it helps to establish good documentation about how the code developed. Others will be able to identify the issues addressed and understand why a particular decision was made.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
It is hoped that following this procedure, will help guide contributors of code in the process of learning the tools and skills used by the Moodle developers. Learning to submit code by using the tracker, work the code with CVS, support the code by providing documentation, share code in Modules and Plugins, maintain the code by using the tracker, and evolve the code by using the Moodle.org forums will assist you in successfully contributing to the Moodle community and working with Moodle&#039;s developers. &lt;br /&gt;
&lt;br /&gt;
Throughout this process, the CONTRIB Coordinator is here to encourage and support those contributing code to the Moodle community and fostering the development of tomorrow&#039;s Moodle developers.&lt;br /&gt;
&lt;br /&gt;
Eventually, the community may wish for the code to become part of the Moodle core. By following the steps above, the developers will be able to evaluate the merit of the contributed code, understand how users have used the code, see the issues that have emerged and thus have more information to make an informed decision about whether or not to incorporate the contributed code into core.&lt;br /&gt;
&lt;br /&gt;
==Most common recommendations for contributed code==&lt;br /&gt;
&lt;br /&gt;
There are several small issues that the CONTRIB Coordinator will typically check for when reviewing the code prior to committing to the CVS server. These issues help to ensure consistency and quality of code. Any suggestions made by the CONTRIB Coordinator should be considered recommendations aimed to help folks new to the Moodle community collaborate in a way consistent with standard practices within the Moodle community. The suggestions are meant to help avoid potential issues and facilitate the acceptance of your code.&lt;br /&gt;
&lt;br /&gt;
=== Does the file structure conform to Moodle standards? ===&lt;br /&gt;
Generally speaking, each file should have an appropriate extension (i.e. php, html, css, txt, etc.). To avoid issues with case sensitivity, folders and files are normally lower case; however, there are exceptions to this. Another common recommendation is to place the lang folder within the block or module rather than asking the user to copy files into the main lang folder. Changes made in the get_string function for Moodle 1.9 and onward make it possible to do this which goes a long way in keeping things modular. &lt;br /&gt;
&lt;br /&gt;
=== Does the code work without any obvious errors? ===&lt;br /&gt;
The CONTRIB Coordinator will try to install the block or module on a fresh Moodle installation and report back any errors. This testing is done with Debugging set to show All PHP notices and errors (not developer mode). The most common notices have to do with attempting to use a variable that has not been initialized or checked for existence. &lt;br /&gt;
&lt;br /&gt;
=== Does the code use the config_plugins table? ===&lt;br /&gt;
&lt;br /&gt;
Contributed blocks and modules are encouraged to make use of the &#039;&#039;&#039;config_plugins&#039;&#039;&#039; table rather than the config table. Maintainers are encouraged to read the documentation provided for the [http://xref.moodle.org/lib/moodlelib.php.html#get_config get_config()] and [http://xref.moodle.org/lib/moodlelib.php.html#set_config set_config()]] functions in the /lib/moodlelib.php file to help ensure that the footprint for the global $CFG variable does not become bloated.&lt;br /&gt;
&lt;br /&gt;
=== Does the code follow the [[Coding|Coding Guidelines]]? ===&lt;br /&gt;
The CONTRIB Coordinator will look at the code for general readability and point out any obvious deviations from the [[Coding|Coding Guidelines]]. While not all code needs to conform with each and every guideline, maintainers are encouraged to follow those guidelines as closely as possible.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Overview]]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=99037 Best practices for code modification?] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Setting_up_Eclipse&amp;diff=4994</id>
		<title>Setting up Eclipse</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Setting_up_Eclipse&amp;diff=4994"/>
		<updated>2009-12-22T22:16:57Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Troubleshooting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.eclipse.org/ Eclipse] is an IDE originally designed for Java, but now with plugins for many languages including PHP. It has lots of very powerful features, and it is the editor that some Moodle developers like to use. Other (more) popular choices are vim and emacs.&lt;br /&gt;
&lt;br /&gt;
However, Eclipse is not the easiest program in the world to get started with, so I&#039;m going to take you through it step by step. These instructions assume Eclipse 3.2, the current version at the time of writing. It should not change much between releases.&lt;br /&gt;
&lt;br /&gt;
This article started off as a brain-dump by [[User:Tim Hunt|Tim Hunt]]. Since then, several other people have worked through it and made corrections, so the information here should be pretty accurate.&lt;br /&gt;
&lt;br /&gt;
Since this page was written, Eclipse 3.3 and 3.4 have been released, along with a new PHP plugin called PDT, which is better, but uses more memory. You can download an all-in-one Eclipse+PDT from http://www.eclipse.org/pdt/downloads/. The following instructions, from the section [[#Setting_the_preferences_for_Moodle_development]] mostly still apply after you have done the install, but some of the details are a bit different.--[[User:Tim Hunt|Tim Hunt]] 07:30, 31 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Eclipse is written in Java, so I recommend getting the latest Java runtime environment from http://java.com/ for maximum speed and reliability.&lt;br /&gt;
&lt;br /&gt;
Eclipse is quite big, so I recommend lots of memory in your computer. I have used it on Windows, MacOS X and Linux, in each case with 1GB of memory, and that is plenty.&lt;br /&gt;
&lt;br /&gt;
==Installing Eclipse==&lt;br /&gt;
&lt;br /&gt;
Go to http://www.eclipse.org/downloads/. Click on the link corresponding to your operating system where it says &#039;&#039;&#039;Eclipse Classic&#039;&#039;&#039;. Choose a Mirror, and wait for the ~100MB download.&lt;br /&gt;
&lt;br /&gt;
You will notice that what you have got is a zip file (unless your system automatically decompresses it for you).&lt;br /&gt;
&lt;br /&gt;
On Windows, unzip it into &#039;&#039;&#039;C:\Program Files&#039;&#039;&#039; (all the files go into an &#039;&#039;&#039;Eclipse&#039;&#039;&#039; folder there). Then look in the Eclipse folder and drag Eclipse.exe to the Start menu/Desktop/Quicklaunch bar to make a shortcut for starting it.&lt;br /&gt;
&lt;br /&gt;
On MacOS, unzip and copy the Eclipse folder into Applications. Go into the Eclipse folder and drag the Eclipse app to the Dock for ease of launching.&lt;br /&gt;
&lt;br /&gt;
On Linux, unzip somewhere suitable, and make an easy way to launch it.&lt;br /&gt;
&lt;br /&gt;
==The first time you run Eclipse==&lt;br /&gt;
&lt;br /&gt;
The first time you launch Eclipse it does a bit of setup stuff, for instance, it creates a &#039;&#039;&#039;workspace&#039;&#039;&#039;. This is where it stores the things you are working on. The default location is sensible on all platforms, so use that. &lt;br /&gt;
&lt;br /&gt;
For some reason, every time you start Eclipse, it asks you which workspace you want to use. I have never seen the need to have more than one, so I recommend turning on the checkbox that says &amp;quot;Use this as the default and do not ask again&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Another thing that happens the first time you run Eclipse is that you arrive at a welcome screen. This has links to various bits of help, which you can read if you like, but you probably don&#039;t need to if you are following these instructions. So find the button on the welcome page that closes it and gets you to the main Eclipse screen.&lt;br /&gt;
&lt;br /&gt;
==Installing the necessary plugins==&lt;br /&gt;
&lt;br /&gt;
By default, Eclipse comes with the Java tools. For everything else you will need to install some plugins.&lt;br /&gt;
&lt;br /&gt;
If you are sitting behind a web proxy, from the &#039;&#039;&#039;Window&#039;&#039;&#039; menu  choose &#039;&#039;&#039;Preferences ...&#039;&#039;&#039;. Choose &#039;&#039;&#039;Install/Update&#039;&#039;&#039; from the tree view on the left, and enter the proxy information in the boxes on the right. If you aren&#039;t behind a proxy, ignore this step. (On Eclipse 3.4.0 on OSX this is in &#039;&#039;&#039;Eclipse &amp;gt; Preferences &amp;gt; General &amp;gt; Network Connections&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
From the &#039;&#039;&#039;Help&#039;&#039;&#039; menu choose &#039;&#039;&#039;Check for Updates&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the first screen of the wizard, make sure that &amp;quot;Search for new features to install&amp;quot; is selected, then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The next screen is a list of upgrade sites to check. You need to add one to the list, so click the &#039;&#039;&#039;New Remote Site ...&#039;&#039;&#039; Button.&lt;br /&gt;
&lt;br /&gt;
In the pop-up dialog, give the remote site a name like &#039;&#039;&#039;PHPeclipse Update Site&#039;&#039;&#039;; set the URL to http://update.phpeclipse.net/update/nightly; then click &#039;&#039;&#039;OK&#039;&#039;&#039;. Click &#039;&#039;&#039;Finish&#039;&#039;&#039;. Under &#039;&#039;&#039;PHPEclipse Nightly Builds&#039;&#039;&#039;, check &#039;&#039;&#039;PHPeclipse&#039;&#039;&#039;. Click &#039;&#039;&#039;Finish&#039;&#039;&#039;. Wait while it downloads (this may take a few minutes). Click &#039;&#039;&#039;Install&#039;&#039;&#039;. You will be prompted to restart Eclipse, click &#039;&#039;&#039;Restart&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note, there is now also another PHP editor for Eclipse. The update URL ishttp://download.eclipse.org/tools/pdt/updates/. I am just trying it--[[User:Tim Hunt|Tim Hunt]] 11:39, 7 November 2007 (CST)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Restart the wizard (from the &#039;&#039;&#039;Help&#039;&#039;&#039; menu choose &#039;&#039;&#039;Software Updates -&amp;gt; Find and Install&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
On the first screen of the wizard, make sure that &amp;quot;Search for new features to install&amp;quot; is selected, then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Select just two things in the box &amp;quot;Sites to include in search&amp;quot;:&lt;br /&gt;
* Your newly created &#039;&#039;&#039;Phpeclipse Update Site&#039;&#039;&#039;; and&lt;br /&gt;
* the one called &#039;&#039;&#039;Europa Discovery Site&#039;&#039;&#039; (or possibly &#039;&#039;&#039;Callisto Discovery Site&#039;&#039;&#039;).&lt;br /&gt;
Then click &#039;&#039;&#039;Finish&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
It goes off and sees what updates are available at those sites. As it does so, it may occasionally pop up a dialog asking you to choose a mirror. Each time, select a sensible one.&lt;br /&gt;
&lt;br /&gt;
Eventually, you get to a new wizard for selecting and installing the updates you want (Select the features to install). The ones you want (you may have to expand and search the tree structure) are: all the &#039;&#039;&#039;PHPEclipse Nightly Builds&#039;&#039;&#039; (from your newly created PHPEclipse Update Site) and the &#039;&#039;&#039;Web Standard Tools (WST)&#039;&#039;&#039; (usually under Callisto or Europa Discovery Site --&amp;gt; Web and J2EE Development). &lt;br /&gt;
&lt;br /&gt;
Next, and very importantly, you must click the &#039;&#039;&#039;Select Required&#039;&#039;&#039; button which should resolve dependencies and remove the warning message you are probably worrying about. Then you can click the &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
Read and agree to all the license agreements. Then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;Finish&#039;&#039;&#039;, and wait for the plugins to download.&lt;br /&gt;
&lt;br /&gt;
Once the downloads have finished, a warning will pop-up telling you that all the plugins you downloaded are not digitally signed. The Eclipse Foundation built digital signing of plugins into their architecture as a security measure, and then did not sign any of their own plugins! Anyway, click the &#039;&#039;&#039;Install All&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
Finally, a window will pop up asking you to restart Eclipse. Do so.&lt;br /&gt;
&lt;br /&gt;
==Setting the preferences for Moodle development==&lt;br /&gt;
&lt;br /&gt;
Now go to the &#039;&#039;&#039;Window&#039;&#039;&#039; menu, and choose &#039;&#039;&#039;Preferences ...&#039;&#039;&#039; (&#039;&#039;&#039;Eclipse&#039;&#039;&#039; menu on Mac OS X).&lt;br /&gt;
&lt;br /&gt;
The Eclipse preferences are immense, with a tree view on the left, which selects which screen to display on the right. Don&#039;t panic, we&#039;ll guide you through it.&lt;br /&gt;
&lt;br /&gt;
===General settings===&lt;br /&gt;
&lt;br /&gt;
If you have strong feelings about fonts (I would hate to edit code an anything except Andale Mono), choose &#039;&#039;&#039;General -&amp;gt; Appearance -&amp;gt; Colors and Fonts&#039;&#039;&#039; from the tree on the left. Then on the right look under &#039;&#039;&#039;Basic&#039;&#039;&#039; and change &#039;&#039;&#039;Text Font&#039;&#039;&#039;. All the other editor font settings will inherit from this, so this is probably the only one you have to change.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;General -&amp;gt; Content Types&#039;&#039;&#039;, select PHP Source File, and add &#039;&#039;&#039;*.html&#039;&#039;&#039; to the box at the bottom.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;General -&amp;gt; Editors -&amp;gt; File Associations&#039;&#039;&#039;, if it is not already there, add &#039;&#039;&#039;*.php&#039;&#039;&#039; to the top box. With &#039;&#039;&#039;*.php&#039;&#039;&#039; selected in the top box, make sure &#039;&#039;&#039;PHP Editor&#039;&#039;&#039; is set to default in the bottom box (use the &#039;&#039;&#039;Default&#039;&#039;&#039; button - the default will appear at the top of the list). &lt;br /&gt;
&lt;br /&gt;
With &#039;&#039;&#039;*.html&#039;&#039;&#039; selected in the top box, if it is not already there, add &#039;&#039;&#039;PHP Editor&#039;&#039;&#039; to the bottom box. Then select &#039;&#039;&#039;PHP Editor&#039;&#039;&#039; in the bottom box and click the &#039;&#039;&#039;Default&#039;&#039;&#039; button to change it, because in Moodle, most HTML files actually contain PHP code.&lt;br /&gt;
&lt;br /&gt;
If you use a web proxy, enter the details under &#039;&#039;&#039;Network Connections&#039;&#039;&#039;. (Yes, I know you have entered them somewhere else before. Now you have to enter them again here. I don&#039;t know why. You just do.)&lt;br /&gt;
&lt;br /&gt;
===PHP Settings===&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;General -&amp;gt; Editors -&amp;gt; Text Editors&#039;&#039;&#039;, check &#039;&#039;&#039;Show line numbers&#039;&#039;&#039; to display line numbers in the left margin (optional). Click &#039;&#039;&#039;Apply&#039;&#039;&#039;. (When you are editing a PHP file, you could left-click in the left margin and tick the &#039;&#039;&#039;Show Line Numbers&#039;&#039;&#039; line in the contextual menu. However, this toggle only applies to plain text files, &#039;&#039;not&#039;&#039; to HTML or PHP files. The only place where you can toggle line numbers on/off for such files is in the PHP/Appearance menu.)&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;PHPeclipse -&amp;gt; Browser Preview Defaults&#039;&#039;&#039;, turn off all checkboxes (if necessary). Click &#039;&#039;&#039;Apply&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;PHPeclipse -&amp;gt; PHP&#039;&#039;&#039;, on the &#039;&#039;&#039;Appearance&#039;&#039;&#039; tab, set &#039;&#039;&#039;Displayed tab width&#039;&#039;&#039; to 4 (if necessary). Click &#039;&#039;&#039;Apply&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;PHPeclipse -&amp;gt; PHP&#039;&#039;&#039;, on the &#039;&#039;&#039;Typing&#039;&#039;&#039; tab, turn off all the options except &#039;&#039;&#039;Pasting for correct indentation&#039;&#039;&#039;, &#039;&#039;&#039;Insert spaces for tab&#039;&#039;&#039; and &#039;&#039;&#039;Close PHPdocs and comments&#039;&#039;&#039;.  Click &#039;&#039;&#039;Apply&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;PHPeclipse -&amp;gt; PHP -&amp;gt; Editor&#039;&#039;&#039;, turn on &#039;&#039;&#039;Remove trailing spaces on editor save&#039;&#039;&#039;. Click &#039;&#039;&#039;Apply&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;PHPeclipse -&amp;gt; PHP -&amp;gt; Formatter&#039;&#039;&#039;, on the &#039;&#039;&#039;New Lines&#039;&#039;&#039; tab, turn on &#039;&#039;&#039;Clear all blank lines&#039;&#039;&#039;. Click &#039;&#039;&#039;Apply&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;PHPeclipse -&amp;gt; PHP -&amp;gt; Formatter&#039;&#039;&#039;, on the &#039;&#039;&#039;Style&#039;&#039;&#039; tab, turn off &#039;&#039;&#039;Indentation is represented by a tab&#039;&#039;&#039;. Click &#039;&#039;&#039;Apply&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;PHPeclipse -&amp;gt; PHP -&amp;gt; Templates&#039;&#039;&#039;, I like to define a new template to help with debugging:&lt;br /&gt;
;Name&lt;br /&gt;
:dump &lt;br /&gt;
;Description&lt;br /&gt;
:Dump a PHP variable&lt;br /&gt;
;Pattern&lt;br /&gt;
&amp;lt;pre&amp;gt;print_object(${word_selection}${cursor}); // DONOTCOMMIT&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can do other useful things with templates too. Here are two more I use:&lt;br /&gt;
&amp;lt;pre&amp;gt;debugging(&amp;quot;&#039;${word_selection}${cursor}&#039;&amp;quot;); // DONOTCOMMIT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$$string[&#039;${word_selection}${cursor}&#039;] = &#039;.&#039;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
That is, a simple debug message with a stack trace, and a new language string.&lt;br /&gt;
&lt;br /&gt;
There is a really stupid bug. Under &#039;&#039;&#039;PHPeclipse -&amp;gt; Project Defaults&#039;&#039;&#039;, you would like to add &amp;quot;.&amp;quot; to the &#039;&#039;&#039;Include Paths&#039;&#039;&#039;, but you can&#039;t using the GUI. You will have to edit one of the Eclipse config files by hand. So&lt;br /&gt;
# Note down the path to your Eclipse profile. On Windows it will be something like &#039;&#039;&#039;C:/Documents and settings/XXXX/workspace&#039;&#039;&#039;, and on Unixy systems something like &#039;&#039;&#039;~/workspace&#039;&#039;&#039;.&lt;br /&gt;
# Close Eclipse. &lt;br /&gt;
# Open the file &#039;&#039;&#039;net.sourceforge.phpeclipse.ui.prefs&#039;&#039;&#039; that is in the directory &#039;&#039;&#039;(your workspace)/.metadata/.plugins/org.eclipse.core.runtime/.settings&#039;&#039;&#039; in a text editor.&lt;br /&gt;
# Look for a line in the file that starts &#039;&#039;&#039;_php_include_paths=&#039;&#039;&#039; If it is not there, add it at the end.&lt;br /&gt;
# Change this line to say &#039;&#039;&#039;_php_include_paths=.&#039;&#039;&#039;&lt;br /&gt;
# Run Eclipse again.&lt;br /&gt;
&lt;br /&gt;
===SSH2===&lt;br /&gt;
Information about generating SSH2 keys for the purpose of connecting to cvs.moodle.org can be found here at https://docs.moodle.org/en/Development:SSH_key , but please finish reading this section before reading that material.&lt;br /&gt;
&lt;br /&gt;
The Eclipse installation has its own SSH client plugin so you do not have to use a separate ssh client in connection with your use of Eclipse (this is one reason you will be using extssh below,  instead of just ext,  however,  if you wish you may alter the configuration to use an external client but please post news of your success and configuration). See, http://www.jcraft.com/eclipse-cvsssh2/ , for additional information on this plugin.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Since Eclipse 3.0M6 the CVSSSH plugin is incorporated into Eclipse, [http://www.jroller.com/prane/entry/eclipse_3_0_cvs_support as &amp;quot;extssh&amp;quot; instead of &amp;quot;extssh2&amp;quot;] - --[[User:Olli Savolainen|Olli Savolainen]] 07:54, 23  June 2008 (CDT)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please note that Eclipse is fully equipped to generate ssh2 rsa and dsa keys as well as import keys.  You may encounter issues with passphrases that are too long (a bug reportedly fixed but which may still in fact be present) and some issues with using keypairs generated by other applications have been seen, so it may be best to generate a key pair with Eclipse. Additional details on how to do this will be added.&lt;br /&gt;
&lt;br /&gt;
Sourceforge, at http://sourceforge.net/docs/F02/ , provides instructions on how to create a SSH key for it&#039;s CVS (remember,  Moodle does not use sourceforge for its CVS now and you will need to generate keys for cvs.moodle.org, not sourceforge). This is mentioned by way of general explanation, not for the purposes of providing instructions on how to generate your keys for Eclipse. To make use of the public key, login to Moodle.org and add it via the Update My Developer Information tab under CVS Developers (http://moodle.org/cvs). Remember,  public keys provided to Moodle must be in the Openssh format.&lt;br /&gt;
&lt;br /&gt;
===CVS Settings===&lt;br /&gt;
&lt;br /&gt;
These are almost all hidden under the &#039;&#039;&#039;Team&#039;&#039;&#039; bit of the tree.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;General -&amp;gt; Network Connections -&amp;gt; SSH2 -&amp;gt; Key Management&#039;&#039;&#039;, you can set up a public/private key pair. If you do this, you won&#039;t have to keep typing your password when doing CVS operations. &lt;br /&gt;
&lt;br /&gt;
The rest of the ones in this section are personal preferences, but I recommend them because the default settings are very irritating.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;Team&#039;&#039;&#039;, set &#039;&#039;&#039;Perspectives&#039;&#039;&#039; to &#039;&#039;&#039;None&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;Team -&amp;gt; CVS&#039;&#039;&#039;, on the &#039;&#039;&#039;Files and Folders&#039;&#039;&#039; tab, set &#039;&#039;&#039;Default text mode&#039;&#039;&#039; to &#039;&#039;&#039;ASCII with keyword expansion (-kkv)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;Team -&amp;gt; CVS -&amp;gt; Annotate&#039;&#039;&#039; set &#039;&#039;&#039;Use Quick Diff annotate mode for local file annotations&#039;&#039;&#039; to &#039;&#039;&#039;Yes&#039;&#039;&#039;, and &#039;&#039;&#039;Open perspective after a &#039;Show Annotations&#039; operation&#039;&#039;&#039; to &#039;&#039;&#039;No&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;Team -&amp;gt; CVS -&amp;gt; Label Decorations&#039;&#039;&#039;, switch to the &#039;&#039;&#039;Icon Decorations&#039;&#039;&#039; tab and turn on all the settings, and then on the &#039;&#039;&#039;Text Decorations&#039;&#039;&#039; tab change both &#039;&#039;&#039;File Decoration&#039;&#039;&#039; and &#039;&#039;&#039;Folder Decoration&#039;&#039;&#039; to be just &#039;&#039;&#039;{name}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Web and XML settings===&lt;br /&gt;
&lt;br /&gt;
For each XXX in CSS, HTML, Javascript, XML:&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;Web and XML -&amp;gt; XML Files -&amp;gt; Source&#039;&#039;&#039;, choose &#039;&#039;&#039;Indent using spaces&#039;&#039;&#039; and &#039;&#039;&#039;indentation size&#039;&#039;&#039; 4.&lt;br /&gt;
&lt;br /&gt;
==Checking out the Moodle code==&lt;br /&gt;
&lt;br /&gt;
From the &#039;&#039;&#039;File&#039;&#039;&#039; menu, choose &#039;&#039;&#039;New -&amp;gt; Project ...&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In the wizard that pops up, choose &#039;&#039;&#039;CVS -&amp;gt; Projects from CVS&#039;&#039;&#039;, then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Create a new repository location&#039;&#039;&#039;, then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Fill in&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; border: 1px solid orange; padding: 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
For anonymous CVS access use&lt;br /&gt;
;Host&lt;br /&gt;
:XX.cvs.moodle.org&lt;br /&gt;
where XX.cvs.moodle.org is one of [[CVS_for_Administrators#CVS_Servers|these mirrors]]&lt;br /&gt;
;Repository path&lt;br /&gt;
:/cvsroot/moodle&lt;br /&gt;
;User&lt;br /&gt;
:anonymous&lt;br /&gt;
;Password&lt;br /&gt;
:(leave blank)&lt;br /&gt;
;Connection type&lt;br /&gt;
:pserver&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
;Host&lt;br /&gt;
:cvs.moodle.org&lt;br /&gt;
;Repository path&lt;br /&gt;
:/cvsroot/moodle&lt;br /&gt;
;User&lt;br /&gt;
:(your Moodle CVS username)&lt;br /&gt;
;Password&lt;br /&gt;
:(if you set up the SSH2 key thing in preferences, leave this blank, otherwise, type in your Moodle CVS password.)&lt;br /&gt;
;Connection type&lt;br /&gt;
:extssh&lt;br /&gt;
(CVS experts, if you are confused by that last one, know it is an Eclipse-specific thing.) Then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the next screen of the Wizard, choose &#039;&#039;&#039;Use an existing module&#039;&#039;&#039;. Wait a moment, then select &#039;&#039;&#039;moodle&#039;&#039;&#039; from the list. Click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the next screen, make sure the option &#039;&#039;&#039;Check out as a project configured using the New Project Wizard&#039;&#039;&#039; is selected, then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;Refresh Tags&#039;&#039;&#039;, then choose the branch you want. For now leave it set to &#039;&#039;&#039;HEAD&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;Finish&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you  will find yourself back at the start of the &#039;&#039;&#039;New Project&#039;&#039;&#039; Wizard. This is because of the option you chose three paragraphs ago. This time you should select &#039;&#039;&#039;PHP -&amp;gt; PHP Project&#039;&#039;&#039;, then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Make up a project name. &#039;&#039;&#039;moodle&#039;&#039;&#039; would be sensible.&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;Finish&#039;&#039;&#039;, and wait while all the moodle files are checked out of CVS.&lt;br /&gt;
&lt;br /&gt;
Once it has finished, it will probably ask you if you want to switch to the PHP perspective. Answer &#039;&#039;&#039;Yes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you also need another branch (1.6, 1.7, 1.8, ...) repeat all the other steps with a few changes:&lt;br /&gt;
* This time you can choose &#039;&#039;&#039;Use an existing repository location&#039;&#039;&#039; instead of typing all the sourceforge CVS details again.&lt;br /&gt;
* Select the appropriate branch. If you don&#039;t see the branch you want, see [https://docs.moodle.org/en/Development:Setting_up_Eclipse#Resetting_the_branch_information this Troubleshooting tip].&lt;br /&gt;
* Use a different project name (e.g. moodle16, moodle17, etc.).&lt;br /&gt;
&lt;br /&gt;
==Let your development web server know where your files are==&lt;br /&gt;
&lt;br /&gt;
Either by editing you web server&#039;s config files, or using a symbolic link. Make sure your webserver can see your new working set of files at a sensible URL, so you can test the code you are working on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quick tour of some cool features, and remaining configuration changes==&lt;br /&gt;
&lt;br /&gt;
I find the default workbench setup is pretty good. Here is a quick guide to some of the bits.&lt;br /&gt;
&lt;br /&gt;
===Navigator===&lt;br /&gt;
&lt;br /&gt;
To the left is the &#039;&#039;&#039;Navigator&#039;&#039;&#039;. This is a tree view of all your files. If you double-click on a file, it opens in the editor in the middle. Try opening &#039;&#039;&#039;course/lib.php&#039;&#039;&#039; now. You will notice that it comes up nicely syntax-highlighted.&lt;br /&gt;
&lt;br /&gt;
===Error highlighting===&lt;br /&gt;
&lt;br /&gt;
In the middle of the file, just type any old text, for example &amp;quot;I like Eclipse&amp;quot;. Obviously, this is not valid PHP syntax, and Eclipse will notice this, and put a red underline under it. Also, by the scrollbar is a ruler with a red mark in it to show the error.&lt;br /&gt;
&lt;br /&gt;
You will see some yellow marks lower down the ruler. There are warnings. Click on one, and you will be taken to where that warning is in the file. Hover your mouse over the warning, and you will get a tooltip explaining what the problem might be.&lt;br /&gt;
&lt;br /&gt;
Save the edited file. (Don&#039;t worry that it is broken, we&#039;ll clean up the mess later.) Notice that a red error marker is added to the file in the navigator, so you can see that there is a problem. Also, error markers are added to the course folder, and the whole project, so you could see there was an error even if the navigator tree was collapsed.&lt;br /&gt;
&lt;br /&gt;
You will probably find lots of warnings that the config.php file can&#039;t be found. In the navigator, find the file &#039;&#039;&#039;config-dist.php&#039;&#039;&#039;. Do &#039;&#039;&#039;Copy&#039;&#039;&#039; then &#039;&#039;&#039;Paste&#039;&#039;&#039; and choose to call the new file &#039;&#039;&#039;config.php&#039;&#039;&#039;. Edit this new config.php as normal. You should find that most of the include file warnings have gone now.&lt;br /&gt;
&lt;br /&gt;
Notice also that there is another marker on each file icon. A little yellow cylinder on most files, but a white-on-brown star on the one you have edited. This is telling you the CVS status of each file. The brown stars are changes you have made but not checked in yet.&lt;br /&gt;
&lt;br /&gt;
===Outline===&lt;br /&gt;
&lt;br /&gt;
Over to the right is the Outline view. This shows a list of functions and classes defined in this file. By default, they are listed in the same order as in the file, but if you click on the &#039;&#039;&#039;az&#039;&#039;&#039; toolbar button, they are sorted into alphabetical order.&lt;br /&gt;
&lt;br /&gt;
Click on the function name &#039;&#039;&#039;add_course_module&#039;&#039;&#039; in the Outline. You will see that the editor scrolls to the definition of that function.&lt;br /&gt;
&lt;br /&gt;
===Code navigation===&lt;br /&gt;
&lt;br /&gt;
In that function, hover the mouse pointer over the function name &#039;&#039;&#039;insert_record&#039;&#039;&#039;. After a while, the documentation for that function will appear in a big tooltip.&lt;br /&gt;
&lt;br /&gt;
Hold down CTRL, move the mouse pointer over the function name &#039;&#039;&#039;insert_record&#039;&#039;&#039;, then click. Eclipse should load &#039;&#039;&#039;dmllib.php&#039;&#039;&#039;, and scroll you to where this function is defined.&lt;br /&gt;
&lt;br /&gt;
In the main Eclipse toolbar, there are forward and back arrows like in a web browser. Click back now to get back to &#039;&#039;&#039;course/lib.php&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Open resource===&lt;br /&gt;
&lt;br /&gt;
From the &#039;&#039;&#039;Navigate&#039;&#039;&#039; menu, choose &#039;&#039;&#039;Open Resource...&#039;&#039;&#039;. In the dialog that pops up, start typing a filename for instance type &#039;&#039;&#039;moodlel&#039;&#039;&#039;. In the box in the middle of the dialog, you will see it list all the files in the project whose names start that way. At the bottom is a box which lists the different folders that contain a file with that name. This can be a very quick way of opening files with fairly unique names like moodlelib.php, without having to click through the levels of the navigator tree. Of course, it is not so useful for an index.php file! Click OK now to open moodlelib.php. (It would actually work if you just did CTRL + Shift + R, moodlel, Enter.)&lt;br /&gt;
&lt;br /&gt;
===Multi-file search===&lt;br /&gt;
&lt;br /&gt;
Scroll down moodlelib a little bit, and double click on the name of the constant &#039;&#039;&#039;MOODLE_INTERNAL&#039;&#039;&#039; where it is defined, so that the text is selected. Then, from the &#039;&#039;&#039;Search&#039;&#039;&#039; menu, choose &#039;&#039;&#039;Search...&#039;&#039;&#039;. Notice that the &#039;&#039;&#039;Containing text&#039;&#039;&#039; box has already been filled in for you with the text you just selected. Of course you can just type text into this box without selecting it first. Notice that you can do regular expression searches, but leave that turned off for now. In the &#039;&#039;&#039;File name patterns&#039;&#039;&#039; box type &#039;&#039;&#039;*.css, *.html, *.inc, *.js, *.php, *.xml&#039;&#039;&#039;. (This is the most useful general setting for working on moodle. Eclipse will remember this setting, so you only have to enter it once.) Click &#039;&#039;&#039;Search&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The search results will appear in a new view underneath the editor. That view has a toolbar with yellow up and down arrows. Click the down arrow a few times and it will take you to the first few matches in the code, opening the relevant files as necessary.&lt;br /&gt;
&lt;br /&gt;
===Synchronize view===&lt;br /&gt;
&lt;br /&gt;
I think this is my favorite feature. From the &#039;&#039;&#039;Window&#039;&#039;&#039; menu, select &#039;&#039;&#039;Show View -&amp;gt; Other...&#039;&#039;&#039;. In the dialog that pops up, select &#039;&#039;&#039;Team -&amp;gt; Synchronize&#039;&#039;&#039;, then click &#039;&#039;&#039;OK&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This opens the Synchronize view below the editor. The view has a toolbar. Click on the first toolbar button, which pops up the Synchronize wizard.&lt;br /&gt;
&lt;br /&gt;
On the first screen, there will probably only be one option: &#039;&#039;&#039;CVS&#039;&#039;&#039;. Make sure that is selected, then click &#039;&#039;&#039;Next &amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Under &#039;&#039;&#039;Scope&#039;&#039;&#039;, choose &#039;&#039;&#039;Workspace&#039;&#039;&#039;, then click &#039;&#039;&#039;Finish&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wait while it talks to the CVS server. After a while, you will see that the Synchronize view lists course/lib.php, and something called &#039;&#039;&#039;.project...&#039;&#039;&#039; That is, it is listing just the files you have edited, but not checked in yet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.project&#039;&#039;&#039; is something that belongs to Eclipse that we don&#039;t care about. So select it and bring up the context menu, and choose &#039;&#039;&#039;Add to .cvsignore...&#039;&#039;&#039;. In the dialog that pops up, choose the top option, then click &#039;&#039;&#039;OK&#039;&#039;&#039;. Then you will find the Synchronize view shows you a &#039;&#039;&#039;.cvsignore&#039;&#039;&#039; file that you aren&#039;t interested in, so add that to .cvsignore too!&lt;br /&gt;
&lt;br /&gt;
If you double-click on &#039;&#039;&#039;course/lib.php&#039;&#039;&#039; here, you will see that it opens the compare editor, which is a nice graphical display of the changes in this file.&lt;br /&gt;
&lt;br /&gt;
If you select a file or files here, then bring up the context menu, you will see the option to &#039;&#039;&#039;Commit...&#039;&#039;&#039; the changes. (But don&#039;t do that now!). This is the easiest way to commit things in Eclipse.&lt;br /&gt;
&lt;br /&gt;
However, our changes were rubbish, so we want to undo them. So open the context menu again, and choose &#039;&#039;&#039;Override and Update&#039;&#039;&#039;. This checks a clean copy of the file out of CVS, removing our changes.&lt;br /&gt;
&lt;br /&gt;
Note that the easiest way to do an ordinary CVS Update is to select the top-level project-folder in the Navigator view on the left, open the context menu, and choose &#039;&#039;&#039;Team -&amp;gt; Update&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
That&#039;s all of the really important features. I&#039;m sure you can learn everything else on your own. And you can always read the built in help!&lt;br /&gt;
&lt;br /&gt;
===Creating a patch===&lt;br /&gt;
&lt;br /&gt;
In the synchronise view, right-click an item (file or folder) and choose &#039;&#039;&#039;Create Patch...&#039;&#039;&#039;. Or in the navigator, right-click an item and choose &#039;&#039;&#039;Team -&amp;gt; Create Patch...&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This brings up a two-page wizard. On the first page you can select where you want the patch made. For small patches it can be useful to create them on the clipboard, but normally you will want to save them in a file.&lt;br /&gt;
&lt;br /&gt;
On the second page, you can set some options, but normally you don&#039;t need to change the defaults which are &#039;&#039;&#039;Unified&#039;&#039;&#039; diff format, and Patch root set to &#039;&#039;&#039;Workspace&#039;&#039;&#039;. Well, sometimes it is helpful to change the second one to &#039;&#039;&#039;Project&#039;&#039;&#039; but it is not important.&lt;br /&gt;
&lt;br /&gt;
There is a corresponding apply patch wizard that you can use to apply a patch to a project.&lt;br /&gt;
&lt;br /&gt;
===Switching to another branch or version===&lt;br /&gt;
&lt;br /&gt;
Suppose you have been using a check-out of HEAD from CVS, and then as the 1.9 release approaches, the MOODLE_19_STABLE branch is created, and you want to start following that instead.&lt;br /&gt;
# Right click on the moodle project in the navigator view, and select &#039;&#039;&#039;Team -&amp;gt; Switch to Another Branch or Version ...&#039;&#039;&#039;.&lt;br /&gt;
# choose the second radio button: &#039;&#039;&#039;Select the tag from the following list&#039;&#039;&#039;.&lt;br /&gt;
# If the branch you want is not in the &#039;&#039;&#039;Matching tags&#039;&#039;&#039; box, see [[Setting_up_Eclipse#Resetting the branch information|Resetting the branch information]] below.&lt;br /&gt;
# Select the branch you want and click &#039;&#039;&#039;Finish&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
Some tips on how to solve common problems that may crop up.&lt;br /&gt;
&lt;br /&gt;
===Resetting the branch information===&lt;br /&gt;
&lt;br /&gt;
Every now and then, Eclipse may lose information on the branch tags it knows about. Hitting refresh tags may fix it, but if not, try the following:&lt;br /&gt;
&lt;br /&gt;
#Bring up the tag dialogue (example using &amp;quot;Team / Switch to Another Branch or Version&amp;quot;).&lt;br /&gt;
#Click on Configure tags... (not Refresh tags).&lt;br /&gt;
#Select config-dist.php in the top left box (if this is a Moodle checkout).&lt;br /&gt;
#Click Add Checked tags.&lt;br /&gt;
#Click OK.&lt;br /&gt;
#Then you will have all tags.&lt;br /&gt;
&lt;br /&gt;
(thanks to Tim Hunt)&lt;br /&gt;
&lt;br /&gt;
This info saved my day to find all branches:&lt;br /&gt;
   1. Window-&amp;gt;Show View-&amp;gt;Other. Select CVS-&amp;gt;CVS Repositories.&lt;br /&gt;
   2. Context Menu-&amp;gt;New-&amp;gt;Repository Location...&lt;br /&gt;
   3. Fill in the location information identifying your repository and click Finish.&lt;br /&gt;
   4. Expand the newly-created repository location.&lt;br /&gt;
   5. Add the branch:&lt;br /&gt;
         1. Right-click it and expand configure branches and versions.&lt;br /&gt;
         2. Expand HEAD and select the project moodle.&lt;br /&gt;
         3. Context Menu-&amp;gt;Configure Branches and Versions...&lt;br /&gt;
         4. In the &amp;quot;Browse files for tags&amp;quot; table, select one or more files &lt;br /&gt;
            that contain tags you would like to see (for example scroll down &lt;br /&gt;
            to find config.php).&lt;br /&gt;
         5. On the right the existing tags will appear.&lt;br /&gt;
         6. Select the tags: for example MOODLE_15_STABLE&lt;br /&gt;
         7. Click &amp;quot;Add Selected Tags&amp;quot;.&lt;br /&gt;
         8. Click &amp;quot;OK&amp;quot;.&lt;br /&gt;
   6. Locate branches, MOODLE_19_STABLE, moodle MOODLE_19_STABLE.&lt;br /&gt;
   7. Context Menu-&amp;gt;Check Out As Project.&lt;br /&gt;
(&amp;quot;stolen&amp;quot; from  Joan Codina Filba	&lt;br /&gt;
General developer forum -&amp;gt; Moodle floating &amp;quot;block&amp;quot;/toolbar released -&amp;gt; Re: Moodle floating &amp;quot;block--PATCH FOR GRADES &amp;amp; ASIGNMENT --PROBLEM)&lt;br /&gt;
&lt;br /&gt;
===Error loading php files after Ubuntu 7.04 Install===&lt;br /&gt;
&lt;br /&gt;
A java issue with Ubuntu 7.04 may cause an error when you attempt to load php pages. Refer to:&lt;br /&gt;
http://www.plog4u.org/index.php/Using_PHPEclipse_:_Installation_:_Installing_PHPEclipse for details about how to fix this in Ubuntu 7.04.&lt;br /&gt;
&lt;br /&gt;
After upgrading from Ubuntu 7.04 to 7.10, I had to go in and re-edit the /etc/eclipse/java_home file in order to get the CVS functions to work and be able to open PHP files. When I tried to do a CVS update, I initially received an error about org.eclipse.team.internal.ccvs.ui.wizards.CheckoutWizard). Everything seemed to work again after reapplying the fix for the aforementioned 7.04 java issue.&lt;br /&gt;
&lt;br /&gt;
===Strange mouse behavior in Eclipse with Ubuntu 9.10===&lt;br /&gt;
&lt;br /&gt;
After upgrading to Ubuntu 9.10 I began have left mouse clicks that did not appear to be actually firing off the expected events. I stumbled across https://bugs.launchpad.net/ubuntu/+source/gtk+2.0/+bug/452938. Essentially what I did was modify /usr/bin/eclipse and added in the line: export GDK_NATIVE_WINDOWS=true so that it executes before starting Eclipse.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
&lt;br /&gt;
There is an excellent series of articles published by IBM on using Eclipse for Drupal developement here : [http://www-128.ibm.com/developerworks/ibm/osource/index.html Using open source software to design, develop, and deploy a collaborative Web site Tools and techniques for getting relatively complicated Web sites up and running quickly].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Eclipse]]&lt;br /&gt;
[[Category:Developer tools|Eclipse]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Développement:Eclipse]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Checkbox&amp;diff=15306</id>
		<title>Checkbox</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Checkbox&amp;diff=15306"/>
		<updated>2009-07-25T15:28:03Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ Moodle User Interface Guidelines|Moodle User Interface Guidelines]] &amp;gt; &#039;&#039;&#039;Checkbox&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Work in progress|forumurl=http://moodle.org/mod/forum/discuss.php?d=126884|info=&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;This is a  [[Moodle_User_Interface_Guidelines|Moodle Interface Guideline]]. Comments: [http://moodle.org/mod/forum/discuss.php?d=126884 developer forum thread] &#039;&#039;&#039;}}&lt;br /&gt;
== Problem ==&lt;br /&gt;
You want to know if a user wants to enable an option or not. In other words, you want an option with two choices &lt;br /&gt;
== Context ==&lt;br /&gt;
You are designing a form.&lt;br /&gt;
&lt;br /&gt;
== Forces: factors that affect selection ==&lt;br /&gt;
* Radio buttons and dropdown menus are too verbose for a binary choice&lt;br /&gt;
* Dropdown menus hide the other choice&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
For on/off choices where there are two options, &lt;br /&gt;
&lt;br /&gt;
Create a checkbox with an id attribute. Add a &amp;lt;label for=&amp;quot;id_of_checkbox&amp;quot;&amp;gt; element &#039;&#039;&#039;after&#039;&#039;&#039; the checkbox. As the text content of the label element, write the result of checking the box: &lt;br /&gt;
&lt;br /&gt;
 [] Show me the money&lt;br /&gt;
&lt;br /&gt;
Determine a reasonable default for the value: checked, or unchecked. the reasonable default should be such that if a user does not notice the option, they probably do not mind leaving it to default. If no reasonable default can be determined, you may want to consider highlighting the checkbox in the form it is in, since it is impossible to make a checkbox a required field per se. &lt;br /&gt;
&lt;br /&gt;
(Another use of the checkbox is to require users to always check a checkbox, i.e. &amp;quot;[ ] I have read and I accept the terms and conditions&amp;quot;, but in this case it is not really an option at all.)&lt;br /&gt;
&lt;br /&gt;
== Common mistakes ==&lt;br /&gt;
&lt;br /&gt;
Do not express the option label as a question: &amp;quot;Do you want to see the money?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do not invert the option to negative voice: &amp;quot;Don&#039;t show me the money&amp;quot;. Most times, only positive voice should be used.&lt;br /&gt;
&lt;br /&gt;
Do not use radio buttons or dropdowns when there are only two choices.&lt;br /&gt;
&lt;br /&gt;
TODO: Add further common mistakes from [http://moodle.org/mod/forum/discuss.php?d=126481]&lt;br /&gt;
&lt;br /&gt;
== Examples and implementation ==&lt;br /&gt;
&lt;br /&gt;
Some examples of good and bad implementation&lt;br /&gt;
&lt;br /&gt;
Course settings (course/edit.php) - BAD: uses dropdown yes/no rather than checkbox, uses question (is this a metacourse?)&lt;br /&gt;
Updating or adding database module (course/modedit.php?update=19&amp;amp;return=1) - BAD: uses dropdown yes/no for ratings and comments. Also asks question Require approval?&lt;br /&gt;
In general, a review of each modules is needed as we have similar issues with assignment (prevent late submissions, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related guidelines ==&lt;br /&gt;
&lt;br /&gt;
* Radio buttons&lt;br /&gt;
* [[Switch Button|Switch Button]]&lt;br /&gt;
* Sometimes extra options should be hidden with [[Progressive disclosure|Progressive disclosure]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related issues in the tracker ==&lt;br /&gt;
&lt;br /&gt;
MDL-19659 - Usability test: Proper display of configuration variables&#039; default values&lt;br /&gt;
&lt;br /&gt;
== Further information / Sources  ==&lt;br /&gt;
[http://moodle.org/mod/forum/discuss.php?d=126481 Alternatives to yes/no dropdown menus?]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Checkbox&amp;diff=15305</id>
		<title>Checkbox</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Checkbox&amp;diff=15305"/>
		<updated>2009-07-25T12:58:28Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ Moodle User Interface Guidelines|Moodle User Interface Guidelines]] &amp;gt; &#039;&#039;&#039;Checkbox&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Work in progress|forumurl=http://moodle.org/mod/forum/discuss.php?d=126884|info=&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;This is a  [[Moodle_User_Interface_Guidelines|Moodle Interface Guideline]]. Comments: [http://moodle.org/mod/forum/discuss.php?d=126884 developer forum thread] &#039;&#039;&#039;}}&lt;br /&gt;
== Problem ==&lt;br /&gt;
You want to know if a user wants to enable an option or not. In other words, you want an option with two choices &lt;br /&gt;
== Context ==&lt;br /&gt;
You are designing a form.&lt;br /&gt;
&lt;br /&gt;
== Forces: factors that affect selection ==&lt;br /&gt;
* Radio buttons and dropdown menus are too verbose for a binary choice&lt;br /&gt;
* Dropdown menus hide the other choice&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
For on/off choices where there are two options, &lt;br /&gt;
&lt;br /&gt;
Create a checkbox with an id attribute. Add a &amp;lt;label for=&amp;quot;id_of_checkbox&amp;quot;&amp;gt; element &#039;&#039;&#039;after&#039;&#039;&#039; the checkbox. As the text content of the label element, write the result of checking the box: &lt;br /&gt;
&lt;br /&gt;
 [] Show me the money&lt;br /&gt;
&lt;br /&gt;
Determine a reasonable default for the value: checked, or unchecked. the reasonable default should be such that if a user does not notice the option, they probably do not mind leaving it to default. If no reasonable default can be determined, you may want to consider highlighting the checkbox in the form it is in, since it is impossible to make a checkbox a required field per se. &lt;br /&gt;
&lt;br /&gt;
(Another use of the checkbox is to require users to always check a checkbox, i.e. &amp;quot;[ ] I have read and I accept the terms and conditions&amp;quot;, but in this case it is not really an option at all.)&lt;br /&gt;
&lt;br /&gt;
== Common mistakes ==&lt;br /&gt;
&lt;br /&gt;
Do not express the option label as a question: &amp;quot;Do you want to see the money?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do not invert the option to negative voice: &amp;quot;Don&#039;t show me the money&amp;quot;. Most times, only positive voice should be used.&lt;br /&gt;
&lt;br /&gt;
Do not use radio buttons or dropdowns when there are only two choices.&lt;br /&gt;
&lt;br /&gt;
TODO: Add further common mistakes from [http://moodle.org/mod/forum/discuss.php?d=126481]&lt;br /&gt;
&lt;br /&gt;
== Examples and implementation ==&lt;br /&gt;
&lt;br /&gt;
Some examples of good and bad implementation&lt;br /&gt;
&lt;br /&gt;
Course settings (course/edit.php) - BAD: uses dropdown yes/no rather than checkbox, uses question (is this a metacourse?)&lt;br /&gt;
Updating or adding database module (course/modedit.php?update=19&amp;amp;return=1) - BAD: uses dropdown yes/no for ratings and comments. Also asks question Require approval?&lt;br /&gt;
In general, a review of each modules is needed as we have similar issues with assignment (prevent late submissions, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related guidelines ==&lt;br /&gt;
&lt;br /&gt;
* Radio buttons&lt;br /&gt;
* [[Switch Button|Switch Button]]&lt;br /&gt;
* Sometimes extra options should be hidden with [[Progressive disclosure|Progressive disclosure]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related issues in the tracker ==&lt;br /&gt;
&lt;br /&gt;
== Further information / Sources  ==&lt;br /&gt;
[http://moodle.org/mod/forum/discuss.php?d=126481 Alternatives to yes/no dropdown menus?]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Interface_guidelines&amp;diff=27908</id>
		<title>Talk:Interface guidelines</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Interface_guidelines&amp;diff=27908"/>
		<updated>2009-07-04T02:48:02Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Language strings? */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I want to contribute for the &amp;quot;Language Strings&amp;quot; title.&lt;br /&gt;
&lt;br /&gt;
The prepositions in English usually does not correspond to meaningfull words in other languages. Say &amp;quot;&#039;&#039;&#039;3 of 10 is being displayed&#039;&#039;&#039;&amp;quot; string should be coded in the language file as is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wrong Approach:&lt;br /&gt;
----&lt;br /&gt;
Phrase 1: &#039;&#039;&#039;of&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Phrase 2: &#039;&#039;&#039;is being displayed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Instead, the correct approach is:&lt;br /&gt;
----&lt;br /&gt;
Phrase: &#039;&#039;&#039;%s of %s is being displayed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Because the preposition may or may not exist in the translation as a word, therefore the translated string may also be shuffled, i.e. may not be starting with &amp;quot;3&amp;quot; for the specific example above.&lt;br /&gt;
&lt;br /&gt;
I think, this problem can be avoided by setting a guideline for it like:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Use whole sentences or sub-sentences as language strings, do not divide your sentence into words of prepositions to avoid dublication in translations. Because not all the languages have the same grammer and linguistics that English built on.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This way, the the translated UI would be much more understandable.&lt;br /&gt;
&lt;br /&gt;
::Actually, this is already part of the coding guidelines - at least as I understand them - I have to say that [[Coding]] is not very clear on this point. Anyway, I think that Internationalisation should be a separate section of the coding guidelines, and we should keep Interface guidelines more focussed towards usability. I think I may take this discussion to the forums.--[[User:Tim Hunt|Tim Hunt]] 03:34, 5 April 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Language strings? ==&lt;br /&gt;
&lt;br /&gt;
While I appreciate the modularity of keeping the language strings separate, I am not convinced that should be a hard and fast rule. If a valid language string exists in the core code then I see no reason to duplicate it. I get the idea, I&#039;m just find myself not convinced. Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Progressive_Disclosure&amp;diff=28039</id>
		<title>Talk:Progressive Disclosure</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Progressive_Disclosure&amp;diff=28039"/>
		<updated>2009-07-04T02:18:06Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Anthony&amp;#039;s two cents */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please add your comments for the page about [[Progressive_Disclosure|Progressive disclosure]] here. --[[User:Olli Savolainen|Olli Savolainen]] 11:32, 2 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Couple issues ==&lt;br /&gt;
&lt;br /&gt;
Three problems with this:&lt;br /&gt;
&lt;br /&gt;
=== Speed of use ===&lt;br /&gt;
&lt;br /&gt;
There are two aspects to usability: &#039;&#039;&#039;ease&#039;&#039;&#039; of use (which this topic aids) and &#039;&#039;&#039;speed&#039;&#039;&#039; of use. (Speed could also be referred to as reducing frustration, making life easier, etc. It&#039;s not just about making things faster, it&#039;s about making you less likely to throw a brick through your computer monitor.)&lt;br /&gt;
&lt;br /&gt;
When somebody doesn&#039;t know how to use software or a particular area of software, ease of use is critical. When they do know how to use it, speed of use is critical.&lt;br /&gt;
&lt;br /&gt;
So clicking through to an &#039;Advanced&#039; screen can be a big problem if it is an operation people need to use frequently. We have a team of experienced and busy administrators working here and anything that makes their life harder or more tedious is a bad thing.&lt;br /&gt;
&lt;br /&gt;
=== Site policy === &lt;br /&gt;
&lt;br /&gt;
Depending on site policy, some facilities which might be &#039;advanced&#039; for most sites could in fact be &#039;required&#039; for others. For example, the grouping facility is turned off by default and is also marked as &#039;advanced&#039;. However, we use groupings extensively and with our configuration it is an error not to select the correct grouping. Hiding a field which specifically requires consideration is obviously bad design.&lt;br /&gt;
&lt;br /&gt;
So there might be some cases where a field/option which is &#039;advanced&#039; for normal usage is in fact &#039;important&#039; on a particular site.&lt;br /&gt;
&lt;br /&gt;
My suggestions would be:&lt;br /&gt;
&lt;br /&gt;
* Advanced features should not be moved to new separate pages unless we are sure there are no circumstances where people would want to use that feature on a regular basis.&lt;br /&gt;
&lt;br /&gt;
* When advanced features are hidden within a page, and users choose to show these advanced features, they should &#039;stay shown&#039; in future until the user chooses to hide them.&lt;br /&gt;
&lt;br /&gt;
* The &#039;show/hide&#039; decision should probably be remembered per screen/form/area not globally, as a user may be experienced in one area but not others.&lt;br /&gt;
&lt;br /&gt;
* The &#039;show/hide advanced&#039; feature should use a standard interface so that it behaves the same way everywhere and is obvious to users.&lt;br /&gt;
&lt;br /&gt;
* site policy (my issue #2 above) might suggest that there should be a standard way to configure specific screens so that they always show their &#039;advanced&#039; features (the &#039;show/hide&#039; button disappears). In other words administrators can &#039;lock&#039; the show/hide button. However I don&#039;t feel this is a critical feature provided that the standard show/hide is remembered per user between sessions.&lt;br /&gt;
&lt;br /&gt;
[[User:sam marshall|sam marshall]] 12:15, 2 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: sam: show/hide advanced on moodle_forms is of course persisted via get/set_user_preference.--[[User:Tim Hunt|Tim Hunt]] 13:53, 2 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Just a reminder for [http://moodle.org/mod/forum/discuss.php?d=122545 Collapsible fieldsets for uncluttering editing pages] --[[User:Frank Ralf|Frank Ralf]] 11:25, 25 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Data about user use==&lt;br /&gt;
&lt;br /&gt;
Having just skimmed Pattern Language for Pattern Language, I am specifically thinking about the Lesson Module page in MoodleDocs, currently #7 on the long page list.  &lt;br /&gt;
How do we know what people use and what they don&#039;t.  How do we gather data  and quantify it?  My language in this is limited, so I will just ask questions.   &lt;br /&gt;
&lt;br /&gt;
What is the frequency of use for any specific activity, resource or block on Moodle sites? Categories of Moodle sites would be nice (K-8, 9-12, 13+, training, other).  For example for each site, a matrix of activities, number of courses using it, number of teachers that use it and the overall count of each activities use would be interesting.  &lt;br /&gt;
&lt;br /&gt;
For example the Lesson Forum can not tell me but the SQL database can:&lt;br /&gt;
*Lesson module -how many sites use it, what is the average number of lessons per course, how many teachers per site use it? How does it relate to other activities on the site in terms of use?&lt;br /&gt;
**Dependency settings,  how many lessons use them in a site? How many teachers and how many courses?&lt;br /&gt;
**Slide show settings, ditto &lt;br /&gt;
**Branch pages and Question pages, what is the ratio and average number per lesson&lt;br /&gt;
**Clusters, ditto&lt;br /&gt;
**Imports, I don&#039;t think there is SQL data on this.   &lt;br /&gt;
&lt;br /&gt;
Do we have a SQL query that someone voluntarily can run on their site which will give us these stats without violating confidential info?    &lt;br /&gt;
&lt;br /&gt;
Just a different kind of thought about useability.   --[[User:chris collman|chris collman]] 12:45, 29 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Using statistical data to aid making design decisions is indeed an important opportunity that would need to be grasped more efficiently. A problem indeed is privacy: how to get admins to give us that data. If they can trust that they are not giving anything sensitive away and do not have to do extra work to generate data and send it to us, this might indeed be possible. &lt;br /&gt;
:&amp;quot;The Importance of Analytics in User Experience - The next big innovation in analytics isn’t going to be about the technology. It’s going to be about the UI. Smart reporting tools that answer questions and directly aid decision making – that’s what the world needs. In the meantime, UX specialists have got to get a whole lot better at analytics. Why not get started by reading this presentation by Louis Rosenfeld?&amp;quot; http://www.90percentofeverything.com/2009/06/05/the-importance-of-analytics-in-user-experience/&lt;br /&gt;
:: See also: http://moodle.org/mod/forum/discuss.php?d=126856#p556299 --[[User:Olli Savolainen|Olli Savolainen]] 11:02, 30 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::This is old stuff in the marketing department :)  Realize some sites will not want to reveal any information, even how many students or teachers they have. In the US we have things like FERPA regulations. I was thinking that doing it from the SQL side would allow things like index numbers instead of names or even ids for privacy sake. For additional security, it could  produce transparent data/report(s) that could be reviewed, then sent by the site administrator. These could be in a spreadsheet or CSV files. This optional report feature could be put in the Experimental part of Site Administration.  Figuring out which data to collect and correlate is not going to be easy.  I am sure team taught courses and meta courses add delightful wrinkles to what seems like simple questions. &lt;br /&gt;
&lt;br /&gt;
:::Data is data.  &amp;quot;A few&amp;quot; or &amp;quot;a lot&amp;quot; is meaningless without context. As an aside, I sort of wonder how much development in an open source community is driven by the squeaky wheel and special interests with resources. In private enterprise it is more about sales, that offers a slightly different spin on special interests and squeaky wheels :)  --[[User:chris collman|chris collman]] 12:54, 30 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
I would like to see this page have clear, specific examples that show exactly how and where we do this in Moodle.&lt;br /&gt;
&lt;br /&gt;
For example: in the form when adding/updating a quiz (and other activity modules), there are several options deemed advanced that are hidden behind a button.  This happens because:&lt;br /&gt;
* the module implements a set of default defaults for which items are advanced&lt;br /&gt;
* the module has implemented a settings page that allows the admin to re-specify what is advanced if they want to, and also allows the admin to change the default values for the fields&lt;br /&gt;
* the module uses mform which uses the settings to flag what is advanced and what isn&#039;t &lt;br /&gt;
* mform will automatically create the interface based on these settings plus user preferences for &amp;quot;stickiness&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I&#039;d be the first to argue that the actual interface generated by &#039;&#039;&#039;mform&#039;&#039;&#039; is not the most usable and could be improved, but the great thing is that if all developers implement progressive disclosure this way then it means that usability for this specific example of progressive disclosure CAN be fixed across Moodle simply by fixing mform.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Martin Dougiamas|Martin Dougiamas]] 08:46, 3 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Thanks Martin. Actually, to keep the work maintainable, linking to examples of existing implementations should probably be the highest priority. Taking screenshots is pretty easy too (though it could be [http://moodle.org/mod/forum/discuss.php?d=124977#p547610 a lot easier], and then eventually implementation pages (example: [[Progressive_Disclosure_Implementation|progressive disclosure implementation]]) could be filled in with explanation or links to pages where implementing the elements is explained.--[[User:Olli Savolainen|Olli Savolainen]] 12:01, 4 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Forms inconsistencies ===&lt;br /&gt;
I&#039;ve started collecting some [[User:Frank_Ralf/Moodle_forms1| examples of inconsistencies of Moodle forms ]] and took a first [[User:Frank_Ralf/Semantic_HTML5| peek under the hood of &#039;&#039;formslib&#039;&#039;]] though this is very much still a work in progress. --[[User:Frank Ralf|Frank Ralf]] 11:32, 25 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== MoodleDoc example===&lt;br /&gt;
An example (not a good one but).  A MoodleRooms student made a comment about the MoodleDocs [[Backup]] page that seemed to be about terminology.  First, I realized the intro made some huge assumptions about the user and context. Secondly, I thought the step by step section formatting was confusing. And of course I could not resist tweaking the language which did not seem to always follow demo.moodle. I am still not happy with the overall look of the page (I am sure either I or someone else will do something about it) but I think it is an improvement on usability.  &lt;br /&gt;
&lt;br /&gt;
In the step by step, I tried to indent various options.  My thinking was the options are similar to &amp;quot;advanced&amp;quot; or &amp;quot;special&amp;quot; or &amp;quot;non-default&amp;quot; settings.   Visually, I wanted the KISS steps to be clear for those who just want to click, click, click and do a manual backup.  If they want to learn more, then their eyes can wander to the indents.  Also there was no word reference to 3 screenshots in the step by step. These are common edits, which once made are generally tweaked but not reformatted by the community of editors.    &lt;br /&gt;
&lt;br /&gt;
In MoodleDocs, I think of this like having an advanced button on a form.  Sometimes bullets or the &amp;quot;:&amp;quot; features are used the same way. A very common example is the use of &amp;lt;nowiki&amp;gt;:&#039;&#039;Tip:&#039;&#039;&amp;lt;/nowiki&amp;gt; at the end of a section or below a paragraph of how to.   &lt;br /&gt;
&lt;br /&gt;
Finally, I am undecided about where the images go on this page.   Should the step by step be broken down into 3 stub headings for each screen, with a mini picture in each one? Should we have quick step by steps section, then more detailed step by step section.  Do the pictures work lined up on the right as they are.  On a page with a template, lining up images on the right does not always work. Is variety OK ?&lt;br /&gt;
&lt;br /&gt;
Olli there is one example and like most things a work in progress (WIP).--[[User:chris collman|chris collman]] 13:58, 4 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Search and Advanced search of forums  ==&lt;br /&gt;
&lt;br /&gt;
Hi Olli,&lt;br /&gt;
&lt;br /&gt;
I think what&#039;s really missing from the search forms is the possibility to &#039;&#039;&#039;limit one&#039;s search&#039;&#039;&#039; either to only the discussion or the subject (one of which should IMO be the default behavior for the search field anyway).&lt;br /&gt;
&lt;br /&gt;
See MDLSITE-664 and MDLSITE-644 for further aspects of this topic. &lt;br /&gt;
--[[User:Frank Ralf|Frank Ralf]] 11:21, 25 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Anthony&#039;s two cents ==&lt;br /&gt;
&lt;br /&gt;
I found the Predictability section difficult to understand. I wonder how we might provide guidelines for form creation. It sounds like you are proposing that each form element should have an option for a default value and a method for indicating whether it is advanced or not. I believe you are documenting functionality that is currently available for developers and working it into a recommended procedure for future code. I wonder if we might want to start thinking about the next step which would be to allow site admins the ability to set default values and whether an option is advanced or not. Going further, being able to provide this level of control for a particular context could be interesting. For example, someone in the Math department of a school may find that a particular set of options are always needed; however, the English department does not need them. The challenge here will be that if we make Moodle so customizable it may be impossible to write any books. Even with this ability to customize, it would not change much for developers since they would have to establish the initial settings. One concern with such a finely controllable approach of course is performance as it introduces another level of complexity along the order of roles and capabilities. Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Modules_and_plugins_improvements&amp;diff=13515</id>
		<title>Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Modules_and_plugins_improvements&amp;diff=13515"/>
		<updated>2009-06-19T11:54:55Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Modules and Plugins database provides a convenient way for Moodle System Administrators to search for available plugins, patches, and tools to enhance their installation. While the basic structure has been reasonably helpful, there is much to be desired in order to help those administrators determine things like the quality of the code, the reliability of the code, and the popularity of the code. This page is to help identify the areas needed for improvement and provide an path for implementing those improvements.&lt;br /&gt;
&lt;br /&gt;
For example, I would like for there to be various levels of code. The first level would be verifying that the code has been independently tested by a Moodle developer, Moodle Partner or PHM to verify that the program at least appears to do what it says by someone of some repute. To say that the code is verified means that the code essentially works without any obvious bugs, PHP warning/notices, etc. &lt;br /&gt;
&lt;br /&gt;
A similar indicator would be to have the code be &amp;quot;Moodle certified&amp;quot; which would mean that a Moodle developer or Moodle Partner has not only verified the functionality of the code but also the quality of the code. Certification would mean that the code conforms to Moodle&#039;s coding guidelines. Those wishing to have their code certified, could contact a Moodle Partner similar to how we handle the MCT. Code certified by a Moodle Partner indicates that the code is production ready and that the Moodle Partner would be comfortable having that code running on its servers.&lt;br /&gt;
&lt;br /&gt;
Perhaps we could also develop a Moodle Certified Developer (MCD) which would mean that they have completed the Moodle Developer Course under the tutelage of a Moodle Partner and demonstrated the ability to code well according to Moodle coding guidelines.  &lt;br /&gt;
&lt;br /&gt;
The final code status indicator would be to say that it is hardened or secured. Secured code has been verified, certified, and also given a review by a security specialist (most likely Petr) to ensure that the code is unlikely to have any known security vulnerabilities. Here, I envision a Moodle Partner requesting that Petr review the code. &lt;br /&gt;
&lt;br /&gt;
In addition to the code status indicator which serves as a type of quality assurance, it would be good to have popularity ratings. These should incorporate not only the number of downloads (from http://download.moodle.org/stats.php) but also the ratings that users give them. I would like to see some type of algorithm that would adjust the popularity based not merely on the average rating but also on the number of ratings such that the more popular plugins would outrank the less popular but highly rated ones.&lt;br /&gt;
&lt;br /&gt;
Personally, I would like to receive an email with information about any new M&amp;amp;P entries. I would like to be able to filter the entries by various criteria and be able to do things like send a bulk message to all of those whose code is not on the Moodle CVS server (i.e. the download link does not contain http://download.moodle.org/download.php). As an aside, I am trying to ensure that I start adding the M&amp;amp;P entry URL to the component description to facilitate moving between places.&lt;br /&gt;
&lt;br /&gt;
Please continue to add ideas, hopes, etc. as to how the Modules and Plugins database can become a more useful tool not only for those who maintain it but also for those who make use of it, either here or in the [[Development_talk:Modules_and_plugins_improvements | page comments]]&lt;br /&gt;
&lt;br /&gt;
Part of what makes a plugin reputable is how quickly issues are responded to. I would want to be able to assess someone how actively the code is being maintained. We have a number of possible pieces of data but I do not know how we could calculate things in a meaningful way. The average time difference between when an issue is created and resolved might be helpful. Good code will not have many issues and thus not much activity; however, high activity indicates that it is actively being worked on. The last touch might be a semi-useful piece of information. Any other ideas?&lt;br /&gt;
&lt;br /&gt;
Stuart Mealor shared with me a site (http://www.elearning.school.nz/) he set up that can serve as a bit of a demo site for CONTRIB code. I like the idea of having a CONTRIB demo site which folks could use to experiment with different plugins. It would be also interesting to have a patch demo site; however, each one would have to be it&#039;s own installation but it should not be too difficult to setup some automation of that. Besides demo (which should use the latest stable code), it would be good to have something similar for HEAD as a test site that also pulls the latest code from CVS.   &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* MDLSITE-571&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14107</id>
		<title>Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14107"/>
		<updated>2009-06-02T16:32:25Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document hopes to outline the goals of integrating OpenSIS with Moodle.&lt;br /&gt;
&lt;br /&gt;
Major Milestones&lt;br /&gt;
#MySQL integration&lt;br /&gt;
#Transition to adodb&lt;br /&gt;
##Evaluate OpenSIS table structures&lt;br /&gt;
###https://docs.moodle.org/en/Development:XMLDB_defining_an_XML_structure#Conventions&lt;br /&gt;
##Transition to moodle/lib/dmllib.php calls&lt;br /&gt;
#Evaluate OpenSIS language strings (get terminology matching with Moodle)&lt;br /&gt;
&lt;br /&gt;
#Evaluate OpenSIS permissions scheme and migrate toward Moodle user, role, capability, context schema&lt;br /&gt;
#Assessment OpenSIS security&lt;br /&gt;
##ensure md5 passwords&lt;br /&gt;
&lt;br /&gt;
Desired functionality from integration&lt;br /&gt;
#Users - Single signon for teachers, students, administrators between both systems. The goal is to use Moodle&#039;s libraries and authentication types. We will need to create OpenSIS capabilities and perhaps some roles. &lt;br /&gt;
#Courses - Courses created in OpenSIS should automatically create a course in Moodle. By default, this should use the following Course category hierarchy (Marking period, subject (department), course).&lt;br /&gt;
#Enrollments - Teachers and students assigned to a course/period should be automatically enrolled in the Moodle course. &lt;br /&gt;
#Grades - In Moodle grade items are stored in the gradebook. There are various ways of calculating the grades in Moodle. We need to figure out how best to handle this. Perhaps it would just be best initially to have OpenSIS look up the final grade and not worry about assignments or possibly to create some Moodle grade reports and simply use the Moodle gradebook. The downside to this is that the goal as I understand it is to keep the two systems separated enough that each could be a standalone.&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User:Anthony_Borrow&amp;diff=20683</id>
		<title>User:Anthony Borrow</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User:Anthony_Borrow&amp;diff=20683"/>
		<updated>2009-06-01T23:11:11Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* I&#039;m the Moodle CONTRIB Coordinator. In that role I attempt to:&lt;br /&gt;
** Facilitate the sharing and management of contributed code (i.e. non-core, aka CONTRIB)&lt;br /&gt;
** Identify and encourage new developers in becoming involved with the Moodle community&lt;br /&gt;
** Encourage the maintenance and documentation of contributed code&lt;br /&gt;
&lt;br /&gt;
If you have plugins, patches, themes, or other Moodle-related tools that you would like to share with the Moodle community, feel free to [http://moodle.org/user/view.php?id=51473&amp;amp;course=1 Send me a Moodle message] and to read [https://docs.moodle.org/en/Development:Guidelines_for_contributed_code Guidelines for Contributed Code] for more information.&lt;br /&gt;
&lt;br /&gt;
Feel free to check out my personal website (very much outdated) but hopefully nevertheless entertaining at [http://arborrow.org/ http://arborrow.org/].&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2405</id>
		<title>Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2405"/>
		<updated>2009-05-29T13:40:09Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
This page describes a functional spec for the &amp;quot;Moodle Community Hub&amp;quot; project, which consists of several new features in Moodle 2.0. &lt;br /&gt;
&lt;br /&gt;
The tracker issue for this project is MDL-19309.&lt;br /&gt;
&lt;br /&gt;
= Goals and rationale =&lt;br /&gt;
&lt;br /&gt;
The main goals of the Community hub project are:&lt;br /&gt;
&lt;br /&gt;
# to allow people to easily find courses around the world that they want to enrol in:&lt;br /&gt;
#* educators want to find &#039;&#039;&#039;communities of practice&#039;&#039;&#039; that are subject or region-oriented, so that they can associate with the peers on a long-term basis.&lt;br /&gt;
#* other learners want to find free and for-fee courses on various other subjects &lt;br /&gt;
# to make it easy for educators to find and download &#039;&#039;&#039;course templates&#039;&#039;&#039; from other people.  This will help educators share and identify examples of &#039;&#039;&#039;best practice&#039;&#039;&#039; in online pedagogy and hopefully improve the average quality of online courses.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;community hub&amp;quot; is not a product, it&#039;s a collection of different solutions that work together:&lt;br /&gt;
&lt;br /&gt;
* directory.moodle.org:  an open directory of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;&lt;br /&gt;
* repository plugin in Moodle 2.0: to find downloadable course templates in the directory, download them from the original site and restore them&lt;br /&gt;
* community block in Moodle 2.0: to search the directory to find enrollable courses to join&lt;br /&gt;
&lt;br /&gt;
[[Image:Community.png]]&lt;br /&gt;
&lt;br /&gt;
Downloadable courses&lt;br /&gt;
* (A) Sites that want to publish certain courses and make them downloadable do so during registration time with the Moodle Directory.&lt;br /&gt;
* (B) Later, any Moodle user can connect to the Directory (via Repository API) to search for downloadable courses and choose one (receiving a URL).&lt;br /&gt;
* (C) When the Moodle user tries to download the course, it comes from the original site.  The original site will send a Moodle archive as a .zip file (can be cached by the server).&lt;br /&gt;
* (D) The Moodle user receives the file and can now restore it normally. &lt;br /&gt;
&lt;br /&gt;
Enrollable courses&lt;br /&gt;
* (1) Sites that want to publish certain courses for the public to enrol in can do so during registration time with the Moodle Directory&lt;br /&gt;
* (2) Later, any Moodle user can connect to the Directory (via Community block in their site) to search and find courses they want to join&lt;br /&gt;
* (3) They click on a link to be sent to the other site so that they can enrol there (with or without Mnet).&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
== New teacher creating a course ==&lt;br /&gt;
&lt;br /&gt;
# New teacher needs some help with a new course for &amp;quot;Alligator farming 101&amp;quot;&lt;br /&gt;
# Teacher sees &amp;quot;Import/Export&amp;quot; block into the &amp;quot;Alligator farming 101&amp;quot; course page and presses &amp;quot;Import course&amp;quot;&lt;br /&gt;
# Teacher browses directory in the File picker (the data comes from directory.moodle.org by web services)&lt;br /&gt;
# Teacher searches for &amp;quot;Alligator&amp;quot; &lt;br /&gt;
# Teacher finds 4 courses that look good, and after reading reviews and ratings, chooses one.&lt;br /&gt;
# The course is downloaded and unpacked in Moodle.&lt;br /&gt;
# The teacher now has a good starter course they can keep developing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New teacher needs help ==&lt;br /&gt;
&lt;br /&gt;
A teacher decides they need some help and wants to talk with others teaching Alligator farming.&lt;br /&gt;
&lt;br /&gt;
# Teacher goes to his &amp;quot;Community&amp;quot; block and clicks &amp;quot;Find community&amp;quot;.&lt;br /&gt;
# Moodle displays an search courses page (the data comes from directory.moodle.org by web services)&lt;br /&gt;
# Teacher searches courses for &amp;quot;educator&amp;quot; courses on &amp;quot;Alligators&amp;quot; in their country/language.&lt;br /&gt;
# Teacher finds two, selects one, and is returned to the page where is was before clicking on &amp;quot;Find community&amp;quot;.  The selected course is now permanently listed in the Community block.&lt;br /&gt;
# Teacher clicks on the link and is taken to the course, where he can enrol and interact/learn with peers over time, subscribe to forums etc.&lt;br /&gt;
&lt;br /&gt;
== University consortium ==&lt;br /&gt;
&lt;br /&gt;
== Course creation business ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
There are three main parts to this project:&lt;br /&gt;
* Moodle.org directory (+ registration form on Moodle sites)&lt;br /&gt;
* Community membership&lt;br /&gt;
* Import/Export courses&lt;br /&gt;
&lt;br /&gt;
==Moodle.org directory==&lt;br /&gt;
&lt;br /&gt;
A new directory system (hosted at directory.moodle.org) will allow users to browse and search registered courses and hubs around the world.   This data is collected from site admins when they register their Moodle site on an &amp;quot;opt-in&amp;quot; basis.  Only courses that are marked as &amp;quot;publish&amp;quot; will be listed.&lt;br /&gt;
&lt;br /&gt;
=== Data structure ===&lt;br /&gt;
this section concerns how the database tables will look on Moodle.org. This section is about listing all data that Moodle.org should store.&lt;br /&gt;
&lt;br /&gt;
==== Sites ====&lt;br /&gt;
&lt;br /&gt;
This information will be used for [http://moodle.org/stats general statistics], as well as the directory.&lt;br /&gt;
&lt;br /&gt;
# Site name &lt;br /&gt;
# Site description&lt;br /&gt;
# URL&lt;br /&gt;
# Physical address&lt;br /&gt;
# Site manager (name, email, phone)&lt;br /&gt;
# Contact form yes/no?&lt;br /&gt;
# Mnet/WS information, enough to let a teacher authenticate to the site using Mnet 2.0 (optional)&lt;br /&gt;
# Tool usage stats (forums/quizzes/resources etc) Not for public viewing.&lt;br /&gt;
&lt;br /&gt;
Stats fields:&lt;br /&gt;
* number of courses&lt;br /&gt;
* number of users&lt;br /&gt;
* number of enrolments&lt;br /&gt;
* number of posts&lt;br /&gt;
* number of resources&lt;br /&gt;
* number of questions&lt;br /&gt;
&lt;br /&gt;
Field inherited from previous registry database:&lt;br /&gt;
* default site language&lt;br /&gt;
* Moodle version (2009050502)&lt;br /&gt;
* Moodle release (1.9.5+)&lt;br /&gt;
* Site ip address (need to be updated at every update)&lt;br /&gt;
* Secret answer&lt;br /&gt;
* Mail me the Moodle newsletter&lt;br /&gt;
* Can be contacted on the site&lt;br /&gt;
* Confirmed&lt;br /&gt;
* Time updated&lt;br /&gt;
* Time created&lt;br /&gt;
* Unreachable&lt;br /&gt;
* Time link checked&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;id&#039;&#039;&#039;&lt;br /&gt;
| int(10)&lt;br /&gt;
| auto-incrementing&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| not null&lt;br /&gt;
| Site Name&lt;br /&gt;
|-&lt;br /&gt;
| description &lt;br /&gt;
| text&lt;br /&gt;
| null&lt;br /&gt;
| site description&lt;br /&gt;
|-&lt;br /&gt;
| url&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| not null&lt;br /&gt;
| site URL&lt;br /&gt;
|-&lt;br /&gt;
| Physical address&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| null&lt;br /&gt;
| location of the company&lt;br /&gt;
|-&lt;br /&gt;
| manager name&lt;br /&gt;
| varchar(100)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| manager email&lt;br /&gt;
| varchar(100)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| manager phone&lt;br /&gt;
| varchar(20)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| statistic&lt;br /&gt;
| text&lt;br /&gt;
| null&lt;br /&gt;
| stats, text format&lt;br /&gt;
|-&lt;br /&gt;
| moodleversion&lt;br /&gt;
| varchar()&lt;br /&gt;
| null&lt;br /&gt;
| stats, text format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Courses ====&lt;br /&gt;
&lt;br /&gt;
All registered courses will be stored here.  Some will be looking for students, some will be teacher and admin communities, and some will be downloadable course templates.&lt;br /&gt;
&lt;br /&gt;
# Site&lt;br /&gt;
# Name&lt;br /&gt;
# Description&lt;br /&gt;
# URL&lt;br /&gt;
# Tags&lt;br /&gt;
## Standard (mathematics, physics, biology)  Always displayed, translatable etc ([https://docs.moodle.org/en/Course_Standard_Tags  Course Standard Tags ]) &amp;lt;span style=color:red&amp;gt;Do we need some special tags per country?&amp;lt;/span&amp;gt;&lt;br /&gt;
## User (stuff, openuni, jeromesstuff etc)  Not displayed for browsing, but searchable&lt;br /&gt;
## Metadata standard &amp;lt;span style=color:blue&amp;gt;Dublin Core&amp;lt;/span&amp;gt;&lt;br /&gt;
# Country code (AU, FR etc) &amp;lt;span style=color:blue&amp;gt;lang/countries.php&amp;lt;/span&amp;gt;&lt;br /&gt;
# Region/state (based on list) &amp;lt;span style=color:blue&amp;gt;ISO 3166-2 (XX-XXX)&amp;lt;/span&amp;gt;&lt;br /&gt;
# Language &amp;lt;span style=color:blue&amp;gt;lang.php&amp;lt;/span&amp;gt;&lt;br /&gt;
# Availability (public/private)&lt;br /&gt;
# Cost (and currency) &amp;lt;span style=color:blue&amp;gt;ISO 4217&amp;lt;/span&amp;gt;&lt;br /&gt;
# Download link: direct URL to Moodle download script or moodle.org cache or somewhere else&lt;br /&gt;
# Guest Access&lt;br /&gt;
# Accounts allowed (can we sign up)&lt;br /&gt;
# Screenshots &amp;lt;span style=color:blue&amp;gt;no references into the &amp;quot;registered_courses&amp;quot; table, all screenshots will be saved into the &amp;quot;files&amp;quot; table and the references to the &amp;quot;registered&amp;quot; will be into this &amp;quot;files&amp;quot; table.&amp;lt;/span&amp;gt;&lt;br /&gt;
# Audience:  Educators | Students | Admins&lt;br /&gt;
# Educational level being discussed (for educators audience only):  Tertiary | Secondary | Primary | Government | Corporate&lt;br /&gt;
# Tool usage stats (number of forums/quizzes/resources etc &amp;lt;span style=color:blue&amp;gt;All core modules - no participant number&amp;lt;/span&amp;gt;) Only available for downloadable content.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;id&#039;&#039;&#039;&lt;br /&gt;
| int(10)&lt;br /&gt;
| auto-incrementing&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| site id&lt;br /&gt;
| int(10)&lt;br /&gt;
| auto-incrementing&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| not null&lt;br /&gt;
| Course Name&lt;br /&gt;
|-&lt;br /&gt;
| description &lt;br /&gt;
| text&lt;br /&gt;
| null&lt;br /&gt;
| Course description&lt;br /&gt;
|-&lt;br /&gt;
| url&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| not null&lt;br /&gt;
| course URL&lt;br /&gt;
|-&lt;br /&gt;
| stdtags&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| usertags&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| metadata&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| country&lt;br /&gt;
| varchar(2)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| region&lt;br /&gt;
| varchar(6)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| language&lt;br /&gt;
| varchar(30)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| currency&lt;br /&gt;
| varchar(3)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| cost&lt;br /&gt;
| varchar(10)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| availability&lt;br /&gt;
| varchar(20)&lt;br /&gt;
| private&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| downloadlink&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| guestaccess&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| accountsallowed&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| audience&lt;br /&gt;
| varchar(20)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| educationallevel&lt;br /&gt;
| varchar(20)&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| stats&lt;br /&gt;
| text&lt;br /&gt;
| null&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
A Moodle.org web interface, with a search form, displays clickable links to each course. &lt;br /&gt;
&lt;br /&gt;
[[Image:Webinterface.png]]&lt;br /&gt;
&lt;br /&gt;
From this web interface the users can:&lt;br /&gt;
&lt;br /&gt;
* search by keyword and see a list of courses that match - hightlight key word&lt;br /&gt;
* browse a list of courses using the standard tag set (hierarchy, tree on the left)&lt;br /&gt;
* go directly to a course (if marked for public use)&lt;br /&gt;
* preview a course (if screenshots have been provided)&lt;br /&gt;
* download the course to desktop (only if an download url has been set)&lt;br /&gt;
* give a rating to the course&lt;br /&gt;
* write a comment for the course - &amp;lt;span style=color:blue&amp;gt;use comment 2.0 API&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When displaying courses, you can see and sort by:&lt;br /&gt;
&lt;br /&gt;
* Title - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Description&lt;br /&gt;
* Tags  - &#039;&#039;Sortable &amp;lt;span style=color:blue&amp;gt;(first tag retrieved by the request is considered)&amp;lt;/span&amp;gt;&#039;&#039;&lt;br /&gt;
* Screenshot(s)&lt;br /&gt;
* Cost (if any) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Rating (10-point scale displayed as 5 stars, and only if you are logged in to moodle.org) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Comments &lt;br /&gt;
* Moodle site name&lt;br /&gt;
* Date added to directory&lt;br /&gt;
* Date last updated in directory &lt;br /&gt;
* Date last checked (by a cron job)&lt;br /&gt;
* Audience (teachers, students, admins)&lt;br /&gt;
* Teacher name(s) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Web service interface ===&lt;br /&gt;
&lt;br /&gt;
A REST-based web services interface will be provided for other systems (eg Moodle sites) to use directly.&lt;br /&gt;
&lt;br /&gt;
Web services can search on:&lt;br /&gt;
* string search&lt;br /&gt;
* array language&lt;br /&gt;
* array cost&lt;br /&gt;
* array Moodle url&lt;br /&gt;
* Others?&lt;br /&gt;
&lt;br /&gt;
== Registration on Moodle sites==&lt;br /&gt;
&lt;br /&gt;
The existing Moodle registration form will be extended so that admins can choose to send in more info about their sites to the Moodle.org directory.  All courses flagged &amp;quot;Register&amp;quot; are also sent with their full details.&lt;br /&gt;
&lt;br /&gt;
A cron job will be added to Moodle so that each site can automatically inform directory.moodle.org later when course information is updated (if the admin allows it).&lt;br /&gt;
&lt;br /&gt;
Moodle.org will perform a heartbeat ping every week to verify that the site is accessible.  Sites that fail two or three in a row will be removed from the directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Registrationform.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Community membership ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Community&amp;quot; block allows people to find and subscribe to external courses that they want to be part of.&lt;br /&gt;
&lt;br /&gt;
It can be added to any page for any user, and contains:&lt;br /&gt;
&lt;br /&gt;
# A link to a search script, with a new capability to view it (default on for teachers, not students). If a user has not the capability, he will not see the &amp;quot;Community&amp;quot; block.&lt;br /&gt;
# A search script to browse/search the directory (using web services to call Moodle.org).  Users can select joinable courses from the list and they will be added to the list of &amp;quot;subscribed&amp;quot; course links in the block contents (grouped by site).&lt;br /&gt;
&lt;br /&gt;
If the course is on a site with mnet enabled in &amp;quot;open hub mode&amp;quot; then the link will take the user directly to the course and they will stay logged in.   Otherwise the link will be just be an ordinary URL and the remote site will be responsible for authentication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Blocktemplate.png]]&lt;br /&gt;
&lt;br /&gt;
== Import/Export courses ==&lt;br /&gt;
&lt;br /&gt;
The Import/Export block will be available on course pages and contains buttons to:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Export course&#039;&#039;&#039;: publish entire course (as Moodle Backup minus userdata) as a course template to a Moodle Hub (Portfolio API plugin)&lt;br /&gt;
* &#039;&#039;&#039;Import course&#039;&#039;&#039;: find/install a course template from a Hub or from another course on same site  (Repository API plugin)&lt;br /&gt;
* &#039;&#039;&#039;Publish course&#039;&#039;&#039;: to publish or update the description of the current course in the Moodle.org directory (admins only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Export course ===&lt;br /&gt;
&lt;br /&gt;
A standard export will do a normal backup (taking care to remove userdata by default), and at the end will call the portfolio API to push that file to a connected portfolio.  These could include:&lt;br /&gt;
* downloading it to the local computer (if the portfolio plugin is activated)&lt;br /&gt;
* uploading it to any general purpose repository&lt;br /&gt;
* uploading it to a Moodle Hub site already set up with Mnet peering.&lt;br /&gt;
&lt;br /&gt;
Pushing it to a Moodle Hub would trigger extra behaviours:&lt;br /&gt;
* More metadata would be required (including screenshots?)&lt;br /&gt;
* Permissions would be checked on the destination Moodle&lt;br /&gt;
* The course can be immediately restored on the external Moodle in a special &amp;quot;New&amp;quot; category as a hidden course&lt;br /&gt;
* Someone on the external Moodle can be alerted to approve/unhide the new course&lt;br /&gt;
&lt;br /&gt;
=== Import course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Import course&#039;&#039;&#039; button will pull up a normal file picker to browse repositories for files with a mimetype matching .mbkup.zip.&lt;br /&gt;
&lt;br /&gt;
One special repository plugin called &amp;quot;Courses&amp;quot; allows the user to:&lt;br /&gt;
&lt;br /&gt;
* search the moodle.org directory for downloadable courses (only)&lt;br /&gt;
* directly search any connected hubs for downloadable courses &lt;br /&gt;
* search other courses on the same server (replacing the existing import function we have)&lt;br /&gt;
&lt;br /&gt;
Once the user has selected one of these courses, the user is passed to the standard restore process.&lt;br /&gt;
&lt;br /&gt;
=== Publish course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Publish&#039;&#039;&#039; button only exists if the current site has been registered on the Moodle directory already, and if the current user has the appropriate capabilities. &lt;br /&gt;
&lt;br /&gt;
After clicking &amp;quot;Publish&amp;quot; the user will get taken to a script asking if you want to allow downloads of this course. He&#039;s also asked to upload screenshots if he&#039;d like to.&lt;br /&gt;
&lt;br /&gt;
If downloads are allowed, then you are redirected to the backup process to create and define the backup file, then returned to the script if successful.  The backup file is cached in a standard place with a standard name.  If downloads are not required then this step is skipped.&lt;br /&gt;
&lt;br /&gt;
Now the script lists the metadata that this course will be published with on the moodle.org directory (this is also available in the course settings page).  After checking/updating the metadata, the script will push the data to the Moodle.org directory.  The Moodle directory will bounce back a confirmation which gets saved locally as the &amp;quot;Last publish date&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If the checkbox to allow download was checked, then the URL to a course download script is included with this metadata.&lt;br /&gt;
&lt;br /&gt;
The course download script (eg /course/download.php?id=55&amp;amp;secret=XXXXX) will send the cached .zip file for the given course, or (if the the admin has specified that automatic updates are allowed and the course has also allowed it, then it might update the cache once a day or something).&lt;br /&gt;
&lt;br /&gt;
[[Image:Publishtemplate.png]]&lt;br /&gt;
&lt;br /&gt;
= Course settings page =&lt;br /&gt;
Some new settings will appear on this page:&lt;br /&gt;
* register on Moodle.org - a sub option is activated by default: publish (the site will be displayed in the search result on Moodle.org)&lt;br /&gt;
* cache on Moodle.org&lt;br /&gt;
* downloadable&lt;br /&gt;
* metadata&lt;br /&gt;
* screenshots&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
Full schedule and progress is in the tracker: MDL-19309&lt;br /&gt;
&lt;br /&gt;
# Moodle.org directory&lt;br /&gt;
# Web interface&lt;br /&gt;
# Web service interface &lt;br /&gt;
# Improve registration form&lt;br /&gt;
# Community block&lt;br /&gt;
# Publish courses&lt;br /&gt;
# Import courses &lt;br /&gt;
# Export courses&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Community hub technotes]] - relating to MNet developments in Moodle 1.8&lt;br /&gt;
* MDL-18580 - Community Hub tracker issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MNET]]&lt;br /&gt;
&lt;br /&gt;
[[ja:開発:コミュニティハブ]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14106</id>
		<title>Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14106"/>
		<updated>2009-05-12T16:13:00Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document hopes to outline the goals of integrating OpenSIS with Moodle.&lt;br /&gt;
&lt;br /&gt;
Major Milestones&lt;br /&gt;
#MySQL integration&lt;br /&gt;
#Transition to adodb&lt;br /&gt;
##Evaluate OpenSIS table structures&lt;br /&gt;
###https://docs.moodle.org/en/Development:XMLDB_defining_an_XML_structure#Conventions&lt;br /&gt;
##Transition to moodle/lib/dmllib.php calls&lt;br /&gt;
#Evaluate OpenSIS language strings (get terminology matching with Moodle)&lt;br /&gt;
&lt;br /&gt;
#Evaluate OpenSIS permissions scheme and migrate toward Moodle user, role, capability, context schema&lt;br /&gt;
#Assessment OpenSIS security&lt;br /&gt;
##ensure md5 passwords&lt;br /&gt;
&lt;br /&gt;
Desired functionality from integration&lt;br /&gt;
#Users - Single signon for teachers, students, administrators between both systems. The disadvantage to this is that an account will need to be created in OpenSIS for all Moodle users. Alternatively, OpenSIS could use Moodle for authentication which allows for authentication via LDAP and others. &lt;br /&gt;
#Courses - Courses created in OpenSIS should automatically create a course in Moodle. By default, this should use the following Course category hierarchy (Marking period, subject (department), course).&lt;br /&gt;
#Enrollments - Teachers and students assigned to a course/period should be automatically enrolled in the Moodle course. &lt;br /&gt;
#Grades - In Moodle grade items are stored in the gradebook. There are various ways of calculating the grades in Moodle. We need to figure out how best to handle this. Perhaps it would just be best initially to have OpenSIS look up the final grade and not worry about assignments or possibly to create some Moodle grade reports and simply use the Moodle gradebook. The downside to this is that the goal as I understand it is to keep the two systems separated enough that each could be a standalone.&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14105</id>
		<title>Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14105"/>
		<updated>2009-05-12T15:33:01Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document hopes to outline the goals of integrating OpenSIS with Moodle.&lt;br /&gt;
&lt;br /&gt;
Major Milestones&lt;br /&gt;
#MySQL integration&lt;br /&gt;
#Transition to adodb&lt;br /&gt;
##Transition to moodle/lib/dmllib.php calls&lt;br /&gt;
#Evaluate OpenSIS language strings (get terminology matching with Moodle)&lt;br /&gt;
#Evaluate OpenSIS table structures&lt;br /&gt;
#Evaluate OpenSIS permissions scheme and migrate toward Moodle user, role, capability, context schema&lt;br /&gt;
#Assessment OpenSIS security&lt;br /&gt;
##ensure md5 passwords&lt;br /&gt;
&lt;br /&gt;
Desired functionality from integration&lt;br /&gt;
#Users - Single signon for teachers, students, administrators between both systems. The disadvantage to this is that an account will need to be created in OpenSIS for all Moodle users. Alternatively, OpenSIS could use Moodle for authentication which allows for authentication via LDAP and others. &lt;br /&gt;
#Courses - Courses created in OpenSIS should automatically create a course in Moodle. By default, this should use the following Course category hierarchy (Marking period, subject (department), course).&lt;br /&gt;
#Enrollments - Teachers and students assigned to a course/period should be automatically enrolled in the Moodle course. &lt;br /&gt;
#Grades -&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14104</id>
		<title>Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14104"/>
		<updated>2009-05-12T15:31:39Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document hopes to outline the goals of integrating OpenSIS with Moodle.&lt;br /&gt;
&lt;br /&gt;
Major Milestones&lt;br /&gt;
#MySQL integration&lt;br /&gt;
#Transition to adodb&lt;br /&gt;
##Transition to moodle/lib/dmllib.php calls&lt;br /&gt;
#Reevaluate OpenSIS language strings (get terminology matching with Moodle)&lt;br /&gt;
#Reevaluate OpenSIS table structures&lt;br /&gt;
#Assessment OpenSIS security&lt;br /&gt;
##ensure md5 passwords&lt;br /&gt;
&lt;br /&gt;
Desired functionality from integration&lt;br /&gt;
#Users - Single signon for teachers, students, administrators between both systems. The disadvantage to this is that an account will need to be created in OpenSIS for all Moodle users. Alternatively, OpenSIS could use Moodle for authentication which allows for authentication via LDAP and others. &lt;br /&gt;
#Courses - Courses created in OpenSIS should automatically create a course in Moodle. By default, this should use the following Course category hierarchy (Marking period, subject (department), course).&lt;br /&gt;
#Enrollments - Teachers and students assigned to a course/period should be automatically enrolled in the Moodle course. &lt;br /&gt;
#Grades -&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14103</id>
		<title>Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14103"/>
		<updated>2009-05-12T15:23:17Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document hopes to outline the goals of integrating OpenSIS with Moodle.&lt;br /&gt;
&lt;br /&gt;
#Users - Single signon for teachers, students, administrators between both systems. The disadvantage to this is that an account will need to be created in OpenSIS for all Moodle users. Alternatively, OpenSIS could use Moodle for authentication which allows for authentication via LDAP and others. &lt;br /&gt;
#Courses - Courses created in OpenSIS should automatically create a course in Moodle. By default, this should use the following Course category hierarchy (Marking period, subject (department), course).&lt;br /&gt;
#Enrollments - Teachers and students assigned to a course/period should be automatically enrolled in the Moodle course. &lt;br /&gt;
#Grades -&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14102</id>
		<title>Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Opensis_Integration&amp;diff=14102"/>
		<updated>2009-05-12T15:22:49Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: New page: This document hopes to outline the goals of integrating OpenSIS with Moodle.  #Users - Single signon for teachers, students, administrators between both systems. The disadvantage to this i...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document hopes to outline the goals of integrating OpenSIS with Moodle.&lt;br /&gt;
&lt;br /&gt;
#Users - Single signon for teachers, students, administrators between both systems. The disadvantage to this is that an account will need to be created in OpenSIS for all Moodle users. Alternatively, OpenSIS could use Moodle for authentication which allows for authentication via LDAP and others. &lt;br /&gt;
&lt;br /&gt;
#Courses - Courses created in OpenSIS should automatically create a course in Moodle. By default, this should use the following Course category hierarchy (Marking period, subject (department), course).&lt;br /&gt;
&lt;br /&gt;
#Enrollments - Teachers and students assigned to a course/period should be automatically enrolled in the Moodle course. &lt;br /&gt;
&lt;br /&gt;
#Grades -&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Modules_and_plugins_improvements&amp;diff=13512</id>
		<title>Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Modules_and_plugins_improvements&amp;diff=13512"/>
		<updated>2009-04-26T07:48:24Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Modules and Plugins database provides a convenient way for Moodle System Administrators to search for available plugins, patches, and tools to enhance their installation. While the basic structure has been reasonably helpful, there is much to be desired in order to help those administrators determine things like the quality of the code, the reliability of the code, and the popularity of the code. This page is to help identify the areas needed for improvement and provide an path for implementing those improvements.&lt;br /&gt;
&lt;br /&gt;
For example, I would like for there to be various levels of code. The first level would be verifying that the code has been independently tested by a Moodle developer, Moodle Partner or PHM to verify that the program at least appears to do what it says by someone of some repute. To say that the code is verified means that the code essentially works without any obvious bugs, PHP warning/notices, etc. &lt;br /&gt;
&lt;br /&gt;
A similar indicator would be to have the code be &amp;quot;Moodle certified&amp;quot; which would mean that a Moodle developer or Moodle Partner has not only verified the functionality of the code but also the quality of the code. Certification would mean that the code conforms to Moodle&#039;s coding guidelines. Those wishing to have their code certified, could contact a Moodle Partner similar to how we handle the MCT. Code certified by a Moodle Partner indicates that the code is production ready and that the Moodle Partner would be comfortable having that code running on its servers.&lt;br /&gt;
&lt;br /&gt;
Perhaps we could also develop a Moodle Certified Developer (MCD) which would mean that they have completed the Moodle Developer Course under the tutelage of a Moodle Partner and demonstrated the ability to code well according to Moodle coding guidelines.  &lt;br /&gt;
&lt;br /&gt;
The final code status indicator would be to say that it is hardened or secured. Secured code has been verified, certified, and also given a review by a security specialist (most likely Petr) to ensure that the code is unlikely to have any known security vulnerabilities. Here, I envision a Moodle Partner requesting that Petr review the code. &lt;br /&gt;
&lt;br /&gt;
In addition to the code status indicator which serves as a type of quality assurance, it would be good to have popularity ratings. These should incorporate not only the number of downloads (from http://download.moodle.org/stats.php) but also the ratings that users give them. I would like to see some type of algorithm that would adjust the popularity based not merely on the average rating but also on the number of ratings such that the more popular plugins would outrank the less popular but highly rated ones.&lt;br /&gt;
&lt;br /&gt;
Personally, I would like to receive an email with information about any new M&amp;amp;P entries. I would like to be able to filter the entries by various criteria and be able to do things like send a bulk message to all of those whose code is not on the Moodle CVS server (i.e. the download link does not contain http://download.moodle.org/download.php). As an aside, I am trying to ensure that I start adding the M&amp;amp;P entry URL to the component description to facilitate moving between places.&lt;br /&gt;
&lt;br /&gt;
Please continue to add ideas, hopes, etc. as to how the Modules and Plugins database can become a more useful tool not only for those who maintain it but also for those who make use of it. &lt;br /&gt;
&lt;br /&gt;
Part of what makes a plugin reputable is how quickly issues are responded to. I would want to be able to assess someone how actively the code is being maintained. We have a number of possible pieces of data but I do not know how we could calculate things in a meaningful way. The average time difference between when an issue is created and resolved might be helpful. Good code will not have many issues and thus not much activity; however, high activity indicates that it is actively being worked on. The last touch might be a semi-useful piece of information. Any other ideas?&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Modules_and_plugins_improvements&amp;diff=13511</id>
		<title>Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Modules_and_plugins_improvements&amp;diff=13511"/>
		<updated>2009-04-25T18:11:24Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: New page: The Modules and Plugins database provides a convenient way for Moodle System Administrators to search for available plugins, patches, and tools to enhance their installation. While the bas...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Modules and Plugins database provides a convenient way for Moodle System Administrators to search for available plugins, patches, and tools to enhance their installation. While the basic structure has been reasonably helpful, there is much to be desired in order to help those administrators determine things like the quality of the code, the reliability of the code, and the popularity of the code. This page is to help identify the areas needed for improvement and provide an path for implementing those improvements.&lt;br /&gt;
&lt;br /&gt;
For example, I would like for there to be various levels of code. The first level would be verifying that the code has been independently tested by a Moodle developer, Moodle Partner or PHM to verify that the program at least appears to do what it says by someone of some repute. To say that the code is verified means that the code essentially works without any obvious bugs, PHP warning/notices, etc. &lt;br /&gt;
&lt;br /&gt;
A similar indicator would be to have the code be &amp;quot;Moodle certified&amp;quot; which would mean that a Moodle developer or Moodle Partner has not only verified the functionality of the code but also the quality of the code. Certification would mean that the code conforms to Moodle&#039;s coding guidelines. Those wishing to have their code certified, could contact a Moodle Partner similar to how we handle the MCT. Code certified by a Moodle Partner indicates that the code is production ready and that the Moodle Partner would be comfortable having that code running on its servers.&lt;br /&gt;
&lt;br /&gt;
Perhaps we could also develop a Moodle Certified Developer (MCD) which would mean that they have completed the Moodle Developer Course under the tutelage of a Moodle Partner and demonstrated the ability to code well according to Moodle coding guidelines.  &lt;br /&gt;
&lt;br /&gt;
The final code status indicator would be to say that it is hardened or secured. Secured code has been verified, certified, and also given a review by a security specialist (most likely Petr) to ensure that the code is unlikely to have any known security vulnerabilities. Here, I envision a Moodle Partner requesting that Petr review the code. &lt;br /&gt;
&lt;br /&gt;
In addition to the code status indicator which serves as a type of quality assurance, it would be good to have popularity ratings. These should incorporate not only the number of downloads (from http://download.moodle.org/stats.php) but also the ratings that users give them. I would like to see some type of algorithm that would adjust the popularity based not merely on the average rating but also on the number of ratings such that the more popular plugins would outrank the less popular but highly rated ones.&lt;br /&gt;
&lt;br /&gt;
Personally, I would like to receive an email with information about any new M&amp;amp;P entries. I would like to be able to filter the entries by various criteria and be able to do things like send a bulk message to all of those whose code is not on the Moodle CVS server (i.e. the download link does not contain http://download.moodle.org/download.php). As an aside, I am trying to ensure that I start adding the M&amp;amp;P entry URL to the component description to facilitate moving between places.&lt;br /&gt;
&lt;br /&gt;
Please continue to add ideas, hopes, etc. as to how the Modules and Plugins database can become a more useful tool not only for those who maintain it but also for those who make use of it.&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Usability/Improve_Moodle_User_Experience_Consistency&amp;diff=27909</id>
		<title>Talk:Usability/Improve Moodle User Experience Consistency</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Usability/Improve_Moodle_User_Experience_Consistency&amp;diff=27909"/>
		<updated>2009-04-09T04:18:53Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: New page: Olli - Under &amp;quot;Some potential things that require change, to be researched further&amp;quot; you mention Feedback being too technical and unhelpful feedback to normal users - could you cite an examp...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Olli - Under &amp;quot;Some potential things that require change, to be researched further&amp;quot; you mention Feedback being too technical and unhelpful feedback to normal users - could you cite an example or two to show what you mean? Thanks - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Interface_guidelines&amp;diff=1790</id>
		<title>Interface guidelines</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Interface_guidelines&amp;diff=1790"/>
		<updated>2009-03-15T23:35:49Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Standard navigation tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
This document is not authoritative, it is a collection of ideas and under construction.&lt;br /&gt;
&lt;br /&gt;
==Keeping it simple==&lt;br /&gt;
&lt;br /&gt;
Use the minimum interface required to get the job done.&lt;br /&gt;
Order the elements by contexts. Give the user a strong orientation where the places are to do several things.&lt;br /&gt;
&lt;br /&gt;
==Standard pages==&lt;br /&gt;
&lt;br /&gt;
===Activity modules===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;index.php&#039;&#039; - lists all instances for that module in a course&lt;br /&gt;
*&#039;&#039;view.php&#039;&#039; - displays a particular instance&lt;br /&gt;
*&#039;&#039;config.html&#039;&#039; - configure an instance of the module&lt;br /&gt;
&lt;br /&gt;
===Blocks===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;config.html&#039;&#039; - configure an instance of the block&lt;br /&gt;
&lt;br /&gt;
==One script per major function/page==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Page layout==&lt;br /&gt;
&lt;br /&gt;
# Print headings with print_heading, use the CSS hooks for IDs and Classes&lt;br /&gt;
# Print boxes around text using print_simple_box, use the CSS hooks for IDs and Classes&lt;br /&gt;
&lt;br /&gt;
==Form layout==&lt;br /&gt;
&lt;br /&gt;
# Show the more important settings at the top&lt;br /&gt;
# Each entry should have a label, and if necessary, a help file&lt;br /&gt;
# If there are more than 10 options, split them into required and optional/extra/advanced parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dealing with tables==&lt;br /&gt;
&lt;br /&gt;
Use the print_table function whenever possible.&lt;br /&gt;
&lt;br /&gt;
==Standard navigation tools==&lt;br /&gt;
&lt;br /&gt;
# All pages should call print_header, and supply a standard navigation path to be displayed in it. Where possible, it should look like: COURSE &amp;gt;&amp;gt; INDEX &amp;gt;&amp;gt; INSTANCE &amp;gt;&amp;gt; SUBPAGES...&lt;br /&gt;
# Pages within activity modules should call navmenu() to generate the appropriate navigation menu.&lt;br /&gt;
# Links should include associated image (if available). For example, looking at an assignment in a course displays the assignment pic and then the assignment description as a single link; however, most of the blocks like the activity block exclude the image from the link. This is important as some folks are more graphically rather than text oriented and click on the picture and do not understand why it is not working. We need to be consistent (see MDL-6820).&lt;br /&gt;
&lt;br /&gt;
==URLs==&lt;br /&gt;
&lt;br /&gt;
# URLs should be as short as possible.&lt;br /&gt;
# No underscores in parameter names or files names&lt;br /&gt;
# Never use two words when one would do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Buttons vs links==&lt;br /&gt;
&lt;br /&gt;
This is a hard one to define ...&lt;br /&gt;
&lt;br /&gt;
The Google Web Accelerator issue definitely provides some pointers here:&lt;br /&gt;
&lt;br /&gt;
# Actions which can modify the state of Moodle (data files, database, session information) should be performed through buttons&lt;br /&gt;
# At the very least, such actions which are implemented as links should forward to a confirmation page which *does* use buttons&lt;br /&gt;
&lt;br /&gt;
==Language strings==&lt;br /&gt;
&lt;br /&gt;
# Use your own language strings in a separate file. Don&#039;tuse existing language files from moodle.php or other lang files. So translators can translate in the contexts in different ways as terms are used in the special learning culture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CSS naming==&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t add font, color or layout definitions in code. This belongs to CSS theme files.&lt;br /&gt;
* See [[Standards|theme standards]]&lt;br /&gt;
&lt;br /&gt;
==Linking to help==&lt;br /&gt;
&lt;br /&gt;
* Help buttons should be on the right of the thing (as an exception it can be left, if the thing is right-aligned)&lt;br /&gt;
&lt;br /&gt;
==Related topics==&lt;br /&gt;
&lt;br /&gt;
Robin Good&#039;s Latest News. &amp;quot;Interaction Design Meets Online Real Estate&amp;quot; 1 Mar. 2005 http://www.masternewmedia.org/news/2005/03/01/interaction_design_meets_online_real.htm&lt;br /&gt;
&lt;br /&gt;
The article presents a view of virtual spaces with the focus on human actions. It reminded me of communicative approaches like Moodle. The interface serves as the handle of all the communication tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[pt:Guia para interface]]&lt;br /&gt;
[[es:Manual de estilo de la interfaz]]&lt;br /&gt;
[[ja:インターフェースガイドライン]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Interface_guidelines&amp;diff=1789</id>
		<title>Interface guidelines</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Interface_guidelines&amp;diff=1789"/>
		<updated>2009-03-15T22:22:09Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Standard navigation tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
This document is not authoritative, it is a collection of ideas and under construction.&lt;br /&gt;
&lt;br /&gt;
==Keeping it simple==&lt;br /&gt;
&lt;br /&gt;
Use the minimum interface required to get the job done.&lt;br /&gt;
Order the elements by contexts. Give the user a strong orientation where the places are to do several things.&lt;br /&gt;
&lt;br /&gt;
==Standard pages==&lt;br /&gt;
&lt;br /&gt;
===Activity modules===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;index.php&#039;&#039; - lists all instances for that module in a course&lt;br /&gt;
*&#039;&#039;view.php&#039;&#039; - displays a particular instance&lt;br /&gt;
*&#039;&#039;config.html&#039;&#039; - configure an instance of the module&lt;br /&gt;
&lt;br /&gt;
===Blocks===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;config.html&#039;&#039; - configure an instance of the block&lt;br /&gt;
&lt;br /&gt;
==One script per major function/page==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Page layout==&lt;br /&gt;
&lt;br /&gt;
# Print headings with print_heading, use the CSS hooks for IDs and Classes&lt;br /&gt;
# Print boxes around text using print_simple_box, use the CSS hooks for IDs and Classes&lt;br /&gt;
&lt;br /&gt;
==Form layout==&lt;br /&gt;
&lt;br /&gt;
# Show the more important settings at the top&lt;br /&gt;
# Each entry should have a label, and if necessary, a help file&lt;br /&gt;
# If there are more than 10 options, split them into required and optional/extra/advanced parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dealing with tables==&lt;br /&gt;
&lt;br /&gt;
Use the print_table function whenever possible.&lt;br /&gt;
&lt;br /&gt;
==Standard navigation tools==&lt;br /&gt;
&lt;br /&gt;
# All pages should call print_header, and supply a standard navigation path to be displayed in it. Where possible, it should look like: COURSE &amp;gt;&amp;gt; INDEX &amp;gt;&amp;gt; INSTANCE &amp;gt;&amp;gt; SUBPAGES...&lt;br /&gt;
# Pages within activity modules should call navmenu() to generate the appropriate navigation menu.&lt;br /&gt;
# Links should include associated image (if available). For example, looking at an assignment in a course displays the assignment pic and then the assignment description as a single link; however, most of the blocks like the activity block exclude the image from the link. This is important as some folks are more graphically rather than text oriented and click on the picture and do not understand why it is not working. We need to be consistent.&lt;br /&gt;
&lt;br /&gt;
==URLs==&lt;br /&gt;
&lt;br /&gt;
# URLs should be as short as possible.&lt;br /&gt;
# No underscores in parameter names or files names&lt;br /&gt;
# Never use two words when one would do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Buttons vs links==&lt;br /&gt;
&lt;br /&gt;
This is a hard one to define ...&lt;br /&gt;
&lt;br /&gt;
The Google Web Accelerator issue definitely provides some pointers here:&lt;br /&gt;
&lt;br /&gt;
# Actions which can modify the state of Moodle (data files, database, session information) should be performed through buttons&lt;br /&gt;
# At the very least, such actions which are implemented as links should forward to a confirmation page which *does* use buttons&lt;br /&gt;
&lt;br /&gt;
==Language strings==&lt;br /&gt;
&lt;br /&gt;
# Use your own language strings in a separate file. Don&#039;tuse existing language files from moodle.php or other lang files. So translators can translate in the contexts in different ways as terms are used in the special learning culture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CSS naming==&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t add font, color or layout definitions in code. This belongs to CSS theme files.&lt;br /&gt;
* See [[Standards|theme standards]]&lt;br /&gt;
&lt;br /&gt;
==Linking to help==&lt;br /&gt;
&lt;br /&gt;
* Help buttons should be on the right of the thing (as an exception it can be left, if the thing is right-aligned)&lt;br /&gt;
&lt;br /&gt;
==Related topics==&lt;br /&gt;
&lt;br /&gt;
Robin Good&#039;s Latest News. &amp;quot;Interaction Design Meets Online Real Estate&amp;quot; 1 Mar. 2005 http://www.masternewmedia.org/news/2005/03/01/interaction_design_meets_online_real.htm&lt;br /&gt;
&lt;br /&gt;
The article presents a view of virtual spaces with the focus on human actions. It reminded me of communicative approaches like Moodle. The interface serves as the handle of all the communication tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[pt:Guia para interface]]&lt;br /&gt;
[[es:Manual de estilo de la interfaz]]&lt;br /&gt;
[[ja:インターフェースガイドライン]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Filter_enable/disable_by_context&amp;diff=27892</id>
		<title>Talk:Filter enable/disable by context</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Filter_enable/disable_by_context&amp;diff=27892"/>
		<updated>2009-03-13T07:47:12Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: New page: Tim - Nice work! Overall, I really like the proposal and think that it would give the much needed flexibility to folks. Ultimately, admin still controls whether it is all on or all off (wi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tim - Nice work! Overall, I really like the proposal and think that it would give the much needed flexibility to folks. Ultimately, admin still controls whether it is all on or all off (with enable). Here are some notes that I made as I reviewed the proposal.&lt;br /&gt;
&lt;br /&gt;
#With respect to active, you were asking for another term which I couldn&#039;t think of but I do think it should indicate that it is active site wide. &lt;br /&gt;
#On the filter admin screen, I think it might be nice for the admin to see a list of contexts which are explicitly enabled with an option for deleting an individual context. &lt;br /&gt;
#A small detail, when deleting a filter I would want to make sure that we remember to display the notice reminding the admin to remove the code from the server to prevent it from being re-installed like we do for blocks and mods - as much consistency we can develop between how modules, blocks, and filters (i.e. plugins) are handled the more intuitive I believe Moodle is for the users. &lt;br /&gt;
#Along the lines of consistency, do the proposed navigation changes for Moodle 2.0 include providing this type of customization for blocks and modules as well? If not, I think it would be good to be able to make a block only available for Math courses, or a particular modules like WebWorks only available in Math courses. I&#039;m not sure what other issues this might raise but it seemed like some of these ideas might also be applied in a similar way to blocks/plugins. As part of this, I envision the page have a single settings button that could display multiple tabs for filters, blocks, mods, etc. Only the tabs that make sense at the particular context would be shown. For example, it does not make sense to provide a module with block or module options so just the filter tab would appear. &lt;br /&gt;
#You mention selecting the active, inactive, inherit would be from a drop down and then question if it would be better with radio buttons. I think for consistency it would be better to use radio buttons and make it look like the capabilities page. We may be at a point where we start to develop a particular look and feel for administrative options. &lt;br /&gt;
#For &amp;quot;problem pages&amp;quot; like the user profile page that may pull in information from various places or the My Moodle page, might it be possible to get a list of the used contexts on that page and use and concat together the list of active filters? As I understand it, these would be the exception cases where you want the text to be filtered based on context it belongs to rather than the particular page. Page could be the default but perhaps you could right the function to occasionally use the context. &lt;br /&gt;
&lt;br /&gt;
These were the thoughts that came to mind when I read it this morning. I&#039;m pretty tired now so I&#039;m not sure how coherent this is but I did want to get you some feedback. Peace - Anthony&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7834</id>
		<title>Plugin contribution</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plugin_contribution&amp;diff=7834"/>
		<updated>2009-02-26T19:36:55Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the various ways to share and work collaboratively on contributed code.&lt;br /&gt;
#Submit code in the [http://tracker.moodle.org/ Moodle Tracker] under [http://tracker.moodle.org/browse/CONTRIB CONTRIB].&lt;br /&gt;
#Work with submitted code in [http://cvs.moodle.org Moodle&#039;s CVS server]&lt;br /&gt;
#Document features and install instructions in [https://docs.moodle.org Moodle Docs]&lt;br /&gt;
#Share and distribute code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] &lt;br /&gt;
#Talk and support code in the [http://moodle.org/course/view.php?id=5 Using Moodle forums]&lt;br /&gt;
#Maintain and further develop code with the [http://tracker.moodle.org Moodle Tracker]&lt;br /&gt;
&lt;br /&gt;
==The Frequently asked question==&lt;br /&gt;
&#039;&#039;&#039;Question:&#039;&#039;&#039; I have written a new block, activity, patch or theme to share with the Moodle community. What is the process for contributing the code? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Answer:&#039;&#039;&#039; First, thank you for your generosity and desire to share your work with the rest of the Moodle community. Code contributions are highly valued and Moodle wants to encourage creativity and generosity in keeping with its constructivist tradition and pedagogical approach. To support this, there are several tools will support your contribution by allowing the code to be more easily found, tested, used, maintained, documented, and evaluated by fellow Moodlers and developers. Learning to use the various tools common among Moodle developers will help you to efficiently and effectively develop, share and maintain the contributed code. &lt;br /&gt;
&lt;br /&gt;
==How to submit code==&lt;br /&gt;
You have created some code that you would like to contribute to the Moodle community.  The first step is to create a login in [[Tracker]]. You should create a new issue as a &amp;quot;non- core contributed module&amp;quot; project and a &amp;quot;New Feature&amp;quot; issue type. Here is a link to tracker with [http://tracker.moodle.org/secure/CreateIssue!default.jspa?pid=10033 those fields filled in]. &lt;br /&gt;
&lt;br /&gt;
Your issue will be a request that the code be evaluated and uploaded into CVS. Provide a clear description of what the code does and the functionality that it adds to Moodle. Attach the contributed code as a zip (or tar.gz) file to the tracker issue. At that point, the Contrib Coordinator will work directly with the code contributor to help evaluate the code, work on resolving any questions/issues found, etc. &lt;br /&gt;
&lt;br /&gt;
*Contributors are encouraged to follow Moodle&#039;s coding guidelines [[Coding]]).&lt;br /&gt;
*A list of current tracker [http://tracker.moodle.org/secure/BrowseProject.jspa  contributed projects is here].&lt;br /&gt;
&lt;br /&gt;
==How to work with code in CVS==&lt;br /&gt;
Once the code has been added to the CONTRIB section of Moodle&#039;s [[CVS (developer)| CVS]], the contributor will request CVS write access via http://moodle.org/cvs/ and thus be able to make changes to the contributed code. &lt;br /&gt;
&lt;br /&gt;
Contributors are encouraged to maintain a branch for each major Moodle release (i.e. 1.8, 1.9, etc.). The HEAD branch should be used as the development branch. Once CVS write access is approved, the maintainer will be able to make whatever changes are needed to maintain the code. &lt;br /&gt;
&lt;br /&gt;
That being said, contributors are encouraged to associate each change made to an issue in the tracker. This is accomplished automatically by beginning the CVS commit comment with the issue number. By doing so, the contributor helps to document the reason for the change in the code back to the issue requesting for a change. More information on working with CVS is available at: [[CVS (developer)]]. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Tip:&#039;&#039; Eclipse is an example of an Integrated Development Environment (IDE) that integrates and facilitates many of the common CVS tasks involved in working with Moodle CVS. Instructions for setting up and using Eclipse are available at: [[Eclipse]]. Experienced developers are free to use the tools they are most comfortable/productive with.&lt;br /&gt;
&lt;br /&gt;
==How to provide documentation==&lt;br /&gt;
Having great code available to the community is wonderful. It is also important to educate users about how to use the code with documentation in [[Main Page|Moodle Docs]]. See [[MoodleDocs:Guidelines for contributors|guidelines for contributors]] for more help. &lt;br /&gt;
&lt;br /&gt;
A documentation page for a contributed module should have some basic elements.  A brief introduction of what the code does, a &amp;quot;Features&amp;quot; heading, perhaps a &amp;quot;Installation&amp;quot;, &amp;quot;Tips and tricks&amp;quot; and &amp;quot;See also&amp;quot; headings, all with content of course.  Sometimes a screenshot is worth 1000 words. In the &amp;quot;See also&amp;quot; put a link to the Modules and Plug database, with a note that this is the place to download versions, and the forum where questions can be answered at moodle.org.&lt;br /&gt;
&lt;br /&gt;
Other information might include: Languages Supported, Known Issues, Supported Versions (for Moodle 1.8, 1.9), and maybe which are being actively supported. We suggest placing &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Contributed code]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
==Share code with modules and plugins database==&lt;br /&gt;
Now you have a place for users to get your code, how will they know it exists? Moodle users can easily find information about contributed code in the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database]. When you add an entry to this database, remember that it is searchable by any field. Every field is not required, but providing as much information as possible will help people who would like to find, read about, and then install your contribution.  In particular, the name of the module and the description of its function are important.  Screen shots are helpful (but please, not larger than 350px wide!). Links to discussion (on Moodle.org or other forum) and documentation (link to your page in the [https://docs.moodle.org Moodle docs] or another location) should be included if possible.  &lt;br /&gt;
&lt;br /&gt;
If you are maintaining your code using Moodle&#039;s CVS server, a zip file of your code is automatically created and stored on Moodle&#039;s download server ([http://download.moodle.org/ http://download.moodle.org]). Therefore, the download link for most contributed code will be a link to [http://download.moodle.org/ Moodle&#039;s download server]. If you host your code on a site other than [http://download.moodle.org/ Moodle&#039;s download server], please ensure that the download link goes directly to the file and that the file is in a standard archive format (i.e. preferably a zip file). This makes it easier for users to locate the file quickly and helps to standardize installation of the code. &lt;br /&gt;
&lt;br /&gt;
Users may leave comments on your entry, so please check it periodically for questions and bug reports.  If you include contact information or a link to a discussion, your users may be able to contact you more directly.  The comments are not emailed automatically.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that entries added to the [http://moodle.org/mod/data/view.php?id=6009 Modules and Plugins database] require approval by a moderator before they will be visible to other Moodle users.&lt;br /&gt;
&lt;br /&gt;
==Support code and get feedback with forums==&lt;br /&gt;
As users become familiar with the contributed code, discussions about the code are likely to emerge. We strongly urge you to place links to at least one forum at moodle.org in your Modules and Plugins entry as well as in MoodleDocs. &lt;br /&gt;
&lt;br /&gt;
It is important to respond to users who have questions about how to use the code, suggestions for how to make it better, etc. If it looks like there is sufficient need for some contributed code to have its own forum, please create a request via the tracker in the MDL-SITE section. Moodle has included many contributed code projects and ideas into its core. &lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/view.php?id=44 Contributed code forum] is a generic forum.  Maybe create a thread &amp;quot;New Mousetrap module&amp;quot;.&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5 Using Moodle forums] The English speaking list of forums on many different subjects. &lt;br /&gt;
*[http://moodle.org/course/ A list of] other language forums and special areas in Moodle&lt;br /&gt;
&lt;br /&gt;
==Maintain and refine code with Tracker==&lt;br /&gt;
&lt;br /&gt;
In order to facilitate keeping track of feature requests, bugs, and other code issues, the contributor may request that a component be created in the CONTRIB section of the Moodle tracker. (This is the section where you initially made the request to have code included in CVS.moodle.org.)&lt;br /&gt;
&lt;br /&gt;
The contributor can be added to the group of CONTRIB developers in the tracker to manage the issues assigned to them and better coordinate with other developers. Users of the contributed code can then add issues which can be assigned directly to the maintainer. The tracker helps to manage the work flow involved in fixing bugs, working through feature requests, and maintaining the code. When committing changes, maintainers are strongly encouraged to begin the commit comment with a tracker number. &lt;br /&gt;
&lt;br /&gt;
We strongly encourage users to involve themselves in the process of creating a useful issue in tracker.  For the developer and code contributor,  describing the fix can help clarify the need for the code change. Further, it helps to establish good documentation about how the code developed. Others will be able to identify the issues addressed and understand why a particular decision was made.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
It is hoped that following this procedure, will help guide contributors of code in the process of learning the tools and skills used by the Moodle developers. Learning to submit code by using the tracker, work the code with CVS, support the code by providing documentation, share code in Modules and Plugins, maintain the code by using the tracker, and evolve the code by using the Moodle.org forums will assist you in successfully contributing to the Moodle community and working with Moodle&#039;s developers. &lt;br /&gt;
&lt;br /&gt;
Throughout this process, the CONTRIB Coordinator is here to encourage and support those contributing code to the Moodle community and fostering the development of tomorrow&#039;s Moodle developers.&lt;br /&gt;
&lt;br /&gt;
Eventually, the community may wish for the code to become part of the Moodle core. By following the steps above, the developers will be able to evaluate the merit of the contributed code, understand how users have used the code, see the issues that have emerged and thus have more information to make an informed decision about whether or not to incorporate the contributed code into core.&lt;br /&gt;
&lt;br /&gt;
==Most common recommendations for contributed code==&lt;br /&gt;
&lt;br /&gt;
There are several small issues that the CONTRIB Coordinator will typically check for when reviewing the code prior to committing to the CVS server. These issues help to ensure consistency and quality of code. Any suggestions made by the CONTRIB Coordinator should be considered recommendations aimed to help folks new to the Moodle community collaborate in a way consistent with standard practices within the Moodle community. The suggestions are meant to help avoid potential issues and facilitate the acceptance of your code.&lt;br /&gt;
&lt;br /&gt;
# Does the file structure conform to Moodle standards? - Generally speaking, each file should have an appropriate extension (i.e. php, html, css, txt, etc.). To avoid issues with case sensitivity, folders and files are normally lower case; however, there are exceptions to this. Another common recommendation is to place the lang folder within the block or module rather than asking the user to copy files into the main lang folder. Changes made in the get_string function for Moodle 1.9 and onward make it possible to do this which goes a long way in keeping things modular. &lt;br /&gt;
# Does the code work without any obvious errors - The CONTRIB Coordinator will try to install the block or module on a fresh Moodle installation and report back any errors. This testing is done with Debugging set to show All PHP notices and errors (not developer mode). The most common notices have to do with attempting to use a variable that has not been initialized or checked for existence. &lt;br /&gt;
# Does the code use the config_plugins table? - Contributed blocks and modules are encouraged to make use of the config_plugins table rather than the config table. Maintainers are encouraged to read the documentation provided for the get_config and set_config functions in the /lib/moodlelib.php file to help ensure that the footprint for the global $CFG variable does not become bloated. &lt;br /&gt;
# Does the code follow the [[Coding|Coding Guidelines]]? - The CONTRIB Coordinator will look at the code for general readability and point out any obvious deviations from the [[Coding|Coding Guidelines]]. While not all code needs to conform with each and every guideline, maintainers are encouraged to follow those guidelines as closely as possible.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Overview]]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=99037 Best practices for code modification?] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
</feed>