<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/21/en/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/21/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aborrow"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/Special:Contributions/Aborrow"/>
	<updated>2026-04-12T03:49:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Database_templates&amp;diff=94881</id>
		<title>Database templates</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Database_templates&amp;diff=94881"/>
		<updated>2012-01-08T02:59:03Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Tag usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Database}}&lt;br /&gt;
{{Update}}&lt;br /&gt;
Templates for the [[Database activity module]] allow you to control the visual layout of information when listing, viewing or editing database entries. It is a similar to the technique used to &#039;&#039;mail merge&#039;&#039; letters in word processors such as Open Office Writer or Microsoft Word. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tag usage ==&lt;br /&gt;
&lt;br /&gt;
The content of each [[Database fields|field]] you create for your database and some special tags (listed below) can be inserted into the output template by the use of tags.&lt;br /&gt;
&lt;br /&gt;
Fields have the format &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[fieldname]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. All other tags have the format &amp;lt;code&amp;gt;##sometag##&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To use the tags in the box on the left of the page, use the HTML viewer, place your cursor in the text area of your target edit and then click on the tag you want to place. Alternatively, you may simply type the appropriate name within the required symbols like &amp;lt;code&amp;gt;##this##&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[this]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;##edit##&amp;lt;/code&amp;gt; creates a clickable icon link that allows you to edit the current entry (only appears if you have the rights to do this)&lt;br /&gt;
* &amp;lt;code&amp;gt;##delete##&amp;lt;/code&amp;gt; creates a link that lets you delete the current entry (only appears if you have the rights to do this)&lt;br /&gt;
* &amp;lt;code&amp;gt;##approve##&amp;lt;/code&amp;gt; create a link that lets you approve the current database entry (only appears if you have the rights to do this)&lt;br /&gt;
* &amp;lt;code&amp;gt;##more##&amp;lt;/code&amp;gt; creates a link to the single view, which may contain more detailed info&lt;br /&gt;
* &amp;lt;code&amp;gt;##moreurl##&amp;lt;/code&amp;gt; creates just the URL for the above link, useful for creating your own links. You can click on the link icon and type &amp;lt;code&amp;gt;##moreurl##&amp;lt;/code&amp;gt; into URL field or in source view type &amp;lt;pre&amp;gt;&amp;lt;a href=&amp;quot;##moreurl##&amp;quot;&amp;gt;[[fieldname]]&amp;lt;/a&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;##comments##&amp;lt;/code&amp;gt; creates a link to the view/edit comments page, the link text is the current number of comments (only appears if comments are turned on)&lt;br /&gt;
* &amp;lt;code&amp;gt;##user##&amp;lt;/code&amp;gt; creates a link to the user page of the user who submitted the entry, link text is their name&lt;br /&gt;
* &amp;lt;code&amp;gt;##timeadded##&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;##timemodified##&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List template ==&lt;br /&gt;
&lt;br /&gt;
This template allows you to control the fields used and their layout when viewing multiple entries at once (e.g. search results). It is possible that this view may simply provide an overview with more detailed information available by clicking on an entry to access the single view of the entry.&lt;br /&gt;
&lt;br /&gt;
See [http://tracker.moodle.org/secure/attachment/23333/moodle_databse_activity_list_formatting.pdf Designing a list view in Moodle database activity] for instructions on how to create a list template table.&lt;br /&gt;
&lt;br /&gt;
The list template can also be used as a way to [[Database export|export your database]] as a CSV file.&lt;br /&gt;
&lt;br /&gt;
== Single template ==&lt;br /&gt;
This is used to display a single entry at a time and so has more space for display and can use, for example, larger versions of images or optionally provide more information than shown in the list view.&lt;br /&gt;
&lt;br /&gt;
[[Image:Databasesingletemplate.png]]&lt;br /&gt;
&lt;br /&gt;
== Advanced search template ==&lt;br /&gt;
&lt;br /&gt;
An advanced search template is for creating the interface form used in the advanced search. &lt;br /&gt;
&lt;br /&gt;
== Add template ==&lt;br /&gt;
&lt;br /&gt;
This template creates the interface form used when adding or editing database entries. &lt;br /&gt;
&lt;br /&gt;
== RSS template ==&lt;br /&gt;
&lt;br /&gt;
Lets you control the content of the [[RSS]] feed for database entries.&lt;br /&gt;
&lt;br /&gt;
== CSS template ==&lt;br /&gt;
&lt;br /&gt;
If any of the [[HTML in Moodle|HTML]] in your other templates requires [[CSS]] to provide visual style you can specify it here.&lt;br /&gt;
&lt;br /&gt;
== Javascript template ==&lt;br /&gt;
&lt;br /&gt;
You can use javascript to manipulate the way elements are displayed in either the List, Single or Add templates. Basically you need to enclose the part you want to manipulate in some named html element. The naming is essential as it allows you to identify the element for manipulation. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s say, for example, you have a field in your database that stores a person&#039;s name and when you display the names in the List View you want to count the times a name matches some criteria and display the result.&lt;br /&gt;
&lt;br /&gt;
Your database will contain a field which we will call &amp;quot;name&amp;quot;. In your List template you will be able to display the contents of that field by using the &amp;lt;nowiki&amp;gt;[[name]]&amp;lt;/nowiki&amp;gt; construct at the place where you want that information displayed. For example in the &#039;&#039;Repeated entry&#039;&#039; on the list template you will have&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Name: [[name]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;table&amp;gt;  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You now need to modify that entry to ensure that the part you want to manipulate is a named element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td name=&amp;quot;named&amp;quot;&amp;gt;Name: [[name]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;table&amp;gt;  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The footer of your list view can then contain another named element to display the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;div name=&amp;quot;result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your javascript template can now look as follows&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 var cnt = 0;&lt;br /&gt;
 var re = /foo|Foo/;&lt;br /&gt;
 &lt;br /&gt;
 function init(){&lt;br /&gt;
   var namedElements = document.getElementsByName(&amp;quot;named&amp;quot;);&lt;br /&gt;
   for (i=0; i &amp;lt; namedElements.length; i++) {&lt;br /&gt;
       if(re.test(namedElements[i].innerHTML)) cnt++;&lt;br /&gt;
     }&lt;br /&gt;
   var namedResult = document.getElementsByName(&amp;quot;result&amp;quot;);&lt;br /&gt;
   namedResult[0].innerHTML = cnt;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
 window.onload = init;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will display a table of names as is usual in the list view. Now at the bottom there will also be the count of the names that matched foo or Foo.&lt;br /&gt;
&lt;br /&gt;
== Reset templates button ==&lt;br /&gt;
&lt;br /&gt;
When you first create a database the templates will be pre-filled with appropriate HTML. If you later add fields then you can press the &#039;&#039;reset templates&#039;&#039; button and it will add HTML for the new fields in a similar fashion. If you have edited any of the templates in the meantime then your changes will be lost. It is recommended that you finalize the database fields before changing the template code.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Database presets]]&lt;br /&gt;
*[http://video.google.com/videoplay?docid=7026851446099005477 Video demonstrating tag usage]&lt;br /&gt;
&lt;br /&gt;
Using Moodle forum discussions: &lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=55338 Look of the database module]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=74243 How can I list database information horizontally instead of vertically?]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=61179 For those who want the display of Moodle Site&#039;s Modules and plugins]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=84050 Can&#039;t get columns to line up in list view]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=86927 Time stamp for database entries?]&lt;br /&gt;
&lt;br /&gt;
[[de:Datenbank-Vorlagen]]&lt;br /&gt;
[[fr:Modèles]]&lt;br /&gt;
[[ru:Шаблоны]]&lt;br /&gt;
[[ja:データベーステンプレート]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=89617</id>
		<title>Birthday block</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=89617"/>
		<updated>2011-09-15T13:29:36Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Importing data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Birthday Block==&lt;br /&gt;
&lt;br /&gt;
The Birthday Block makes use of a user profile date field to store the date of birth (or anniversary) for each user. The Birthday Block alphabettically displays the user&#039;s full name with picture and the ability to click on the send message icon to directly send the user a Moodle message. &lt;br /&gt;
&lt;br /&gt;
The settings page allows the site admin to select which user profile date field to use (currently only one can be used throughout the site). The data stored in the user profile date field is now a unix timestamp (this was not the case in the 1.9 version). Typically institutions auto-populate this field using a CSV upload of the data and then prevent the users from editing the data. &lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
*Copy the files into the \blocks folder. &lt;br /&gt;
*Go to the \admin page and allow the block to be installed&lt;br /&gt;
*Go to Users, Accounts, User profile fields&lt;br /&gt;
*Create a new user profile date field &lt;br /&gt;
*Input a Shortname (for example, dob), Name (for example, Birthday), and a Description&lt;br /&gt;
*Generally speaking, it is recommended that the field not be required, that it be locked, and visible to user&lt;br /&gt;
*Click on the Save Changes button&lt;br /&gt;
*In the Site Administration Block, click on Modules, Blocks, and the settings link for the Birthday block&lt;br /&gt;
*Select the newly created user profile date field you wish to use to store the birth dates&lt;br /&gt;
*Enter the Birth Dates into the created user profile date field (or upload them via a CSV file)&lt;br /&gt;
*Add the Birthday block to your page to see a list of those celebrating birthdays&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
&lt;br /&gt;
Thanks to the generosity of translators, the Birthday Block is available in many languages:&lt;br /&gt;
*English&lt;br /&gt;
*Spanish&lt;br /&gt;
*French&lt;br /&gt;
*Japanese&lt;br /&gt;
*German&lt;br /&gt;
*Italian&lt;br /&gt;
*and many more&lt;br /&gt;
&lt;br /&gt;
If the block is not available in your language feel free to contact me so that we can create one.&lt;br /&gt;
&lt;br /&gt;
===Importing data===&lt;br /&gt;
&lt;br /&gt;
It is possible to mass import the user profile date field data when importing users. More detailed instructions are available on the [https://docs.moodle.org/20/en/Upload_users#Fields_that_can_be_included Upload users] page. In 1.9, the data imported was a text string of a date in either ISO, EUR, or USA format. In 2.0 and beyond, the data imported for the date of birth should be a Unix timestamp.&lt;br /&gt;
&lt;br /&gt;
===Styling===&lt;br /&gt;
&lt;br /&gt;
Styling varies from theme to theme. The following has been setup in the birthday block&#039;s styles.php file:&lt;br /&gt;
&lt;br /&gt;
.block_birthday .listentry div.user { float: left; }&lt;br /&gt;
.block_birthday .listentry div.message { float: right; }&lt;br /&gt;
&lt;br /&gt;
Some themes allow for the styles.css to be overridden or added to. &lt;br /&gt;
&lt;br /&gt;
===Contributor/Maintainer===&lt;br /&gt;
The Birthday Block was contributed and is maintained by [https://docs.moodle.org/20/en/User:Anthony_Borrow Anthony Borrow].&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
[http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=901 Birthday block&#039;s Modules and Plugins database entry]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86693</id>
		<title>Birthday block</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86693"/>
		<updated>2011-07-31T03:48:36Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Birthday Block==&lt;br /&gt;
&lt;br /&gt;
The Birthday Block makes use of a user profile date field to store the date of birth (or anniversary) for each user. The Birthday Block alphabettically displays the user&#039;s full name with picture and the ability to click on the send message icon to directly send the user a Moodle message. &lt;br /&gt;
&lt;br /&gt;
The settings page allows the site admin to select which user profile date field to use (currently only one can be used throughout the site). The data stored in the user profile date field is now a unix timestamp (this was not the case in the 1.9 version). Typically institutions auto-populate this field using a CSV upload of the data and then prevent the users from editing the data. &lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
*Copy the files into the \blocks folder. &lt;br /&gt;
*Go to the \admin page and allow the block to be installed&lt;br /&gt;
*Go to Users, Accounts, User profile fields&lt;br /&gt;
*Create a new user profile date field &lt;br /&gt;
*Input a Shortname (for example, dob), Name (for example, Birthday), and a Description&lt;br /&gt;
*Generally speaking, it is recommended that the field not be required, that it be locked, and visible to user&lt;br /&gt;
*Click on the Save Changes button&lt;br /&gt;
*In the Site Administration Block, click on Modules, Blocks, and the settings link for the Birthday block&lt;br /&gt;
*Select the newly created user profile date field you wish to use to store the birth dates&lt;br /&gt;
*Enter the Birth Dates into the created user profile date field (or upload them via a CSV file)&lt;br /&gt;
*Add the Birthday block to your page to see a list of those celebrating birthdays&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
&lt;br /&gt;
Thanks to the generosity of translators, the Birthday Block is available in many languages:&lt;br /&gt;
*English&lt;br /&gt;
*Spanish&lt;br /&gt;
*French&lt;br /&gt;
*Japanese&lt;br /&gt;
*German&lt;br /&gt;
*Italian&lt;br /&gt;
*and many more&lt;br /&gt;
&lt;br /&gt;
If the block is not available in your language feel free to contact me so that we can create one.&lt;br /&gt;
&lt;br /&gt;
===Importing data===&lt;br /&gt;
&lt;br /&gt;
It is possible to mass import the user profile date field data when importing users. More detailed instructions are available on the [https://docs.moodle.org/20/en/Upload_users#Fields_that_can_be_included Upload users] page. &lt;br /&gt;
&lt;br /&gt;
===Styling===&lt;br /&gt;
&lt;br /&gt;
Styling varies from theme to theme. The following has been setup in the birthday block&#039;s styles.php file:&lt;br /&gt;
&lt;br /&gt;
.block_birthday .listentry div.user { float: left; }&lt;br /&gt;
.block_birthday .listentry div.message { float: right; }&lt;br /&gt;
&lt;br /&gt;
Some themes allow for the styles.css to be overridden or added to. &lt;br /&gt;
&lt;br /&gt;
===Contributor/Maintainer===&lt;br /&gt;
The Birthday Block was contributed and is maintained by [https://docs.moodle.org/20/en/User:Anthony_Borrow Anthony Borrow].&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
[http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=901 Birthday block&#039;s Modules and Plugins database entry]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86692</id>
		<title>Birthday block</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86692"/>
		<updated>2011-07-31T03:47:53Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Contributor/Maintainer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Birthday Block==&lt;br /&gt;
&lt;br /&gt;
The Birthday Block makes use of a user profile date field to store the date of birth (or anniversary) for each user. The Birthday Block alphabettically displays the user&#039;s full name with picture and the ability to click on the send message icon to directly send the user a Moodle message. &lt;br /&gt;
&lt;br /&gt;
The settings page allows the site admin to select which user profile date field to use (currently only one can be used throughout the site). The data stored in the user profile date field is now a unix timestamp (this was not the case in the 1.9 version). Typically institutions auto-populate this field using a CSV upload of the data and then prevent the users from editing the data. &lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
*Copy the files into the \blocks folder. &lt;br /&gt;
*Go to the \admin page and allow the block to be installed&lt;br /&gt;
*Go to Users, Accounts, User profile fields&lt;br /&gt;
*Create a new user profile date field &lt;br /&gt;
*Input a Shortname (for example, dob), Name (for example, Birthday), and a Description&lt;br /&gt;
*Generally speaking, it is recommended that the field not be required, that it be locked, and visible to user&lt;br /&gt;
*Click on the Save Changes button&lt;br /&gt;
*In the Site Administration Block, click on Modules, Blocks, and the settings link for the Birthday block&lt;br /&gt;
*Select the newly created user profile date field you wish to use to store the birth dates&lt;br /&gt;
*Enter the Birth Dates into the created user profile date field (or upload them via a CSV file)&lt;br /&gt;
*Add the Birthday block to your page to see a list of those celebrating birthdays&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
&lt;br /&gt;
Thanks to the generosity of translators, the Birthday Block is available in many languages:&lt;br /&gt;
*English&lt;br /&gt;
*Spanish&lt;br /&gt;
*French&lt;br /&gt;
*Japanese&lt;br /&gt;
*German&lt;br /&gt;
*Italian&lt;br /&gt;
*and many more&lt;br /&gt;
&lt;br /&gt;
If the block is not available in your language feel free to contact me so that we can create one.&lt;br /&gt;
&lt;br /&gt;
===Advanced Options===&lt;br /&gt;
&lt;br /&gt;
It is possible to mass import the user profile date field data when importing users. More detailed instructions are available on the [https://docs.moodle.org/20/en/Upload_users#Fields_that_can_be_included Upload users] page. &lt;br /&gt;
&lt;br /&gt;
===Styling===&lt;br /&gt;
&lt;br /&gt;
Styling varies from theme to theme. The following has been setup in the birthday block&#039;s styles.php file:&lt;br /&gt;
&lt;br /&gt;
.block_birthday .listentry div.user { float: left; }&lt;br /&gt;
.block_birthday .listentry div.message { float: right; }&lt;br /&gt;
&lt;br /&gt;
Some themes allow for the styles.css to be overridden or added to. &lt;br /&gt;
&lt;br /&gt;
===Contributor/Maintainer===&lt;br /&gt;
The Birthday Block was contributed and is maintained by [https://docs.moodle.org/20/en/User:Anthony_Borrow Anthony Borrow].&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
[http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=901 Birthday block&#039;s Modules and Plugins database entry]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86691</id>
		<title>Birthday block</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86691"/>
		<updated>2011-07-31T03:47:29Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Contributor/Maintainer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Birthday Block==&lt;br /&gt;
&lt;br /&gt;
The Birthday Block makes use of a user profile date field to store the date of birth (or anniversary) for each user. The Birthday Block alphabettically displays the user&#039;s full name with picture and the ability to click on the send message icon to directly send the user a Moodle message. &lt;br /&gt;
&lt;br /&gt;
The settings page allows the site admin to select which user profile date field to use (currently only one can be used throughout the site). The data stored in the user profile date field is now a unix timestamp (this was not the case in the 1.9 version). Typically institutions auto-populate this field using a CSV upload of the data and then prevent the users from editing the data. &lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
*Copy the files into the \blocks folder. &lt;br /&gt;
*Go to the \admin page and allow the block to be installed&lt;br /&gt;
*Go to Users, Accounts, User profile fields&lt;br /&gt;
*Create a new user profile date field &lt;br /&gt;
*Input a Shortname (for example, dob), Name (for example, Birthday), and a Description&lt;br /&gt;
*Generally speaking, it is recommended that the field not be required, that it be locked, and visible to user&lt;br /&gt;
*Click on the Save Changes button&lt;br /&gt;
*In the Site Administration Block, click on Modules, Blocks, and the settings link for the Birthday block&lt;br /&gt;
*Select the newly created user profile date field you wish to use to store the birth dates&lt;br /&gt;
*Enter the Birth Dates into the created user profile date field (or upload them via a CSV file)&lt;br /&gt;
*Add the Birthday block to your page to see a list of those celebrating birthdays&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
&lt;br /&gt;
Thanks to the generosity of translators, the Birthday Block is available in many languages:&lt;br /&gt;
*English&lt;br /&gt;
*Spanish&lt;br /&gt;
*French&lt;br /&gt;
*Japanese&lt;br /&gt;
*German&lt;br /&gt;
*Italian&lt;br /&gt;
*and many more&lt;br /&gt;
&lt;br /&gt;
If the block is not available in your language feel free to contact me so that we can create one.&lt;br /&gt;
&lt;br /&gt;
===Advanced Options===&lt;br /&gt;
&lt;br /&gt;
It is possible to mass import the user profile date field data when importing users. More detailed instructions are available on the [https://docs.moodle.org/20/en/Upload_users#Fields_that_can_be_included Upload users] page. &lt;br /&gt;
&lt;br /&gt;
===Styling===&lt;br /&gt;
&lt;br /&gt;
Styling varies from theme to theme. The following has been setup in the birthday block&#039;s styles.php file:&lt;br /&gt;
&lt;br /&gt;
.block_birthday .listentry div.user { float: left; }&lt;br /&gt;
.block_birthday .listentry div.message { float: right; }&lt;br /&gt;
&lt;br /&gt;
Some themes allow for the styles.css to be overridden or added to. &lt;br /&gt;
&lt;br /&gt;
===Contributor/Maintainer===&lt;br /&gt;
The Birthday Block was contributed and is maintained by [User:Anthony_Borrow Anthony Borrow].&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
[http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=901 Birthday block&#039;s Modules and Plugins database entry]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86690</id>
		<title>Birthday block</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86690"/>
		<updated>2011-07-31T03:47:11Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Birthday Block==&lt;br /&gt;
&lt;br /&gt;
The Birthday Block makes use of a user profile date field to store the date of birth (or anniversary) for each user. The Birthday Block alphabettically displays the user&#039;s full name with picture and the ability to click on the send message icon to directly send the user a Moodle message. &lt;br /&gt;
&lt;br /&gt;
The settings page allows the site admin to select which user profile date field to use (currently only one can be used throughout the site). The data stored in the user profile date field is now a unix timestamp (this was not the case in the 1.9 version). Typically institutions auto-populate this field using a CSV upload of the data and then prevent the users from editing the data. &lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
*Copy the files into the \blocks folder. &lt;br /&gt;
*Go to the \admin page and allow the block to be installed&lt;br /&gt;
*Go to Users, Accounts, User profile fields&lt;br /&gt;
*Create a new user profile date field &lt;br /&gt;
*Input a Shortname (for example, dob), Name (for example, Birthday), and a Description&lt;br /&gt;
*Generally speaking, it is recommended that the field not be required, that it be locked, and visible to user&lt;br /&gt;
*Click on the Save Changes button&lt;br /&gt;
*In the Site Administration Block, click on Modules, Blocks, and the settings link for the Birthday block&lt;br /&gt;
*Select the newly created user profile date field you wish to use to store the birth dates&lt;br /&gt;
*Enter the Birth Dates into the created user profile date field (or upload them via a CSV file)&lt;br /&gt;
*Add the Birthday block to your page to see a list of those celebrating birthdays&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
&lt;br /&gt;
Thanks to the generosity of translators, the Birthday Block is available in many languages:&lt;br /&gt;
*English&lt;br /&gt;
*Spanish&lt;br /&gt;
*French&lt;br /&gt;
*Japanese&lt;br /&gt;
*German&lt;br /&gt;
*Italian&lt;br /&gt;
*and many more&lt;br /&gt;
&lt;br /&gt;
If the block is not available in your language feel free to contact me so that we can create one.&lt;br /&gt;
&lt;br /&gt;
===Advanced Options===&lt;br /&gt;
&lt;br /&gt;
It is possible to mass import the user profile date field data when importing users. More detailed instructions are available on the [https://docs.moodle.org/20/en/Upload_users#Fields_that_can_be_included Upload users] page. &lt;br /&gt;
&lt;br /&gt;
===Styling===&lt;br /&gt;
&lt;br /&gt;
Styling varies from theme to theme. The following has been setup in the birthday block&#039;s styles.php file:&lt;br /&gt;
&lt;br /&gt;
.block_birthday .listentry div.user { float: left; }&lt;br /&gt;
.block_birthday .listentry div.message { float: right; }&lt;br /&gt;
&lt;br /&gt;
Some themes allow for the styles.css to be overridden or added to. &lt;br /&gt;
&lt;br /&gt;
===Contributor/Maintainer===&lt;br /&gt;
The Birthday Block was contributed and is maintained by [User:Anthony_Borrow|Anthony Borrow].&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
[http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=901 Birthday block&#039;s Modules and Plugins database entry]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86689</id>
		<title>Birthday block</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Birthday_block&amp;diff=86689"/>
		<updated>2011-07-31T03:46:04Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Birthday Block==&lt;br /&gt;
&lt;br /&gt;
The Birthday Block makes use of a user profile date field to store the date of birth (or anniversary) for each user. The Birthday Block alphabettically displays the user&#039;s full name with picture and the ability to click on the send message icon to directly send the user a Moodle message. &lt;br /&gt;
&lt;br /&gt;
The settings page allows the site admin to select which user profile date field to use (currently only one can be used throughout the site). The data stored in the user profile date field is now a unix timestamp (this was not the case in the 1.9 version). Typically institutions auto-populate this field using a CSV upload of the data and then prevent the users from editing the data. &lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
*Copy the files into the \blocks folder. &lt;br /&gt;
*Go to the \admin page and allow the block to be installed&lt;br /&gt;
*Go to Users, Accounts, User profile fields&lt;br /&gt;
*Create a new user profile date field &lt;br /&gt;
*Input a Shortname (for example, dob), Name (for example, Birthday), and a Description&lt;br /&gt;
*Generally speaking, it is recommended that the field not be required, that it be locked, and visible to user&lt;br /&gt;
*Click on the Save Changes button&lt;br /&gt;
*In the Site Administration Block, click on Modules, Blocks, and the settings link for the Birthday block&lt;br /&gt;
*Select the newly created user profile date field you wish to use to store the birth dates&lt;br /&gt;
*Enter the Birth Dates into the created user profile date field (or upload them via a CSV file)&lt;br /&gt;
*Add the Birthday block to your page to see a list of those celebrating birthdays&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
&lt;br /&gt;
Thanks to the generosity of translators, the Birthday Block is available in many languages:&lt;br /&gt;
*English&lt;br /&gt;
*Spanish&lt;br /&gt;
*French&lt;br /&gt;
*Japanese&lt;br /&gt;
*German&lt;br /&gt;
*Italian&lt;br /&gt;
*and many more&lt;br /&gt;
&lt;br /&gt;
If the block is not available in your language feel free to contact me so that we can create one.&lt;br /&gt;
&lt;br /&gt;
===Advanced Options===&lt;br /&gt;
&lt;br /&gt;
It is possible to mass import the user profile date field data when importing users. More detailed instructions are available on the [https://docs.moodle.org/20/en/Upload_users#Fields_that_can_be_included|Upload users] page. &lt;br /&gt;
&lt;br /&gt;
===Styling===&lt;br /&gt;
&lt;br /&gt;
Styling varies from theme to theme. The following has been setup in the birthday block&#039;s styles.php file:&lt;br /&gt;
&lt;br /&gt;
.block_birthday .listentry div.user { float: left; }&lt;br /&gt;
.block_birthday .listentry div.message { float: right; }&lt;br /&gt;
&lt;br /&gt;
Some themes allow for the styles.css to be overridden or added to. &lt;br /&gt;
&lt;br /&gt;
===Contributor/Maintainer===&lt;br /&gt;
The Birthday Block was contributed and is maintained by [User:Anthony_Borrow|Anthony Borrow].&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
[http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=901|Birthday block&#039;s Modules and Plugins database entry]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=MNet&amp;diff=85570</id>
		<title>MNet</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=MNet&amp;diff=85570"/>
		<updated>2011-07-01T02:36:50Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Authentication}}&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Please refer to [[TOC_with_notes#Authentication|these notes]] before editing this page.&#039;&#039;&#039;&amp;lt;/p&amp;gt;The network feature allows a Moodle administrator to establish a link with another Moodle, and to share some resources with the users of that Moodle. This features was introduced in Moodle 1.8.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The initial release of MNet is bundled with a Authentication Plugin, which makes single-sign-on between Moodles possible. A user with the username &amp;lt;em&amp;gt;jody&amp;lt;/em&amp;gt; logs in to her Moodle server as normal, and clicks on a link that takes her to a page on another Moodle server. Normally, she would have only the privileges of a guest on the remote Moodle, but behind the scenes, single-sign-on has established a fully authenticated session for Jody on the remote site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNING:&#039;&#039;&#039;  MNet requires the use of &#039;&#039;&#039;xmlrpc&#039;&#039;&#039;. Please go to your phpinfo page if you are interested in using this and search for --with-xmlrpc.  If your php has not been compiled with xmlrpc then you need to address that first! At present it appears that PEAR xmlrpc will not work.&lt;br /&gt;
[[Image:Administration Block Users Authentication MoodleNetwork.jpg|thumb|MNet setting in &#039;&#039;Admin &amp;gt; User &amp;gt; Authentication &amp;gt; Moodle Network]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; An [http://moodle.org/mod/forum/discuss.php?d=175158 initial announcement to end support for MNet in Moodle 2.3] was made in the MNet forums.&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
The MNet feature requires that your server has the &#039;&#039;&#039;Curl&#039;&#039;&#039; and &#039;&#039;&#039;OpenSSL&#039;&#039;&#039; extensions installed. When you install or upgrade to Moodle 1.8, your system will generate a new OpenSSL certificate for encrypted communication with other Moodles, and will thereafter rotate encryption keys on a monthly basis (approx).&lt;br /&gt;
&lt;br /&gt;
Communication takes place over an XML-RPC transport, and the XML-RPC documents are wrapped first in an XMLDSIG (XML digital signature) envelope, and then in an XMLENC (XML encryption) envelope. The encryption all happens within PHP, and does not require an https (Apache SSL) server.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
*[http://www.w3.org/TR/xmldsig-core/ XML Digital Signatures]&lt;br /&gt;
*[http://www.w3.org/TR/xmlenc-core/ XML Encryption]&lt;br /&gt;
&lt;br /&gt;
A special mode can be enabled which would allow a machine with a specified IP address to make calls to the XML-RPC layer without using either encryption or signature envelopes. This mode is provided to enable Moodle to communicate with other software systems in which the integration of signatures and encryption might be prohibitively difficult. It is not envisioned that unencrypted inter-Moodle networking will ever be enabled.&lt;br /&gt;
&lt;br /&gt;
==Peer to Peer Network==&lt;br /&gt;
&lt;br /&gt;
This is the basic layout of the system. It can be very useful to run one Moodle per faculty or departments, each with its own user management, and yet permit users to roam across the Moodle installs... subject to permissions of course. &lt;br /&gt;
&lt;br /&gt;
===Setup===&lt;br /&gt;
&lt;br /&gt;
The instructions will cover 2 Moodle installations: MoodleA and MoodleB. Both are installed correctly and have never had a Moodle Network configuration.&lt;br /&gt;
&lt;br /&gt;
Note: If you experience problems, ensure debugging is turned on in &#039;&#039;Site Administration &amp;gt; Server &amp;gt; Debugging&#039;&#039;. Extra diagnostic messages may be displayed (particularly from Moodle 1.9.2)&lt;br /&gt;
&lt;br /&gt;
For Moodle 2.0, you need to enable Networking (under the Site Administration &amp;gt; Advanced Features menu). This will add the &amp;quot;Networking&amp;quot; menu to the Site Administration menu.&lt;br /&gt;
&lt;br /&gt;
# Get them to talk to each other&lt;br /&gt;
## Ensure &#039;&#039;Admin &amp;gt; Server &amp;gt; Environment&#039;&#039; indicates you have curl installed&lt;br /&gt;
## If MoodleA and MoodleB are hosted in the same domain, ensure they have a different cookie prefix. Note that changing the cookie prefix will log you out! You can change the cookie prefix via &#039;&#039;Admin &amp;gt; Server &amp;gt; Session Handling&#039;&#039;.&lt;br /&gt;
## On both, go to &#039;&#039;Admin &amp;gt; Network &amp;gt; Settings&#039;&#039; and turn Networking ON.&lt;br /&gt;
## On MoodleA go to &#039;&#039;Admin &amp;gt; Network &amp;gt; Peers&#039;&#039; - put the URL of MoodleB under &amp;quot;Add New Host&amp;quot; and click Add. The URL should include the directory where your Moodle code is located, for example &#039;&#039;www.mymoodle.org/moodle&#039;&#039;.&lt;br /&gt;
## Do the equivalent on MoodleB.&lt;br /&gt;
# Get user roaming going&lt;br /&gt;
## (Although discussion exists about removing this setting, it is still required as of 2.0.1)  [http://moodle.org/mod/forum/discuss.php?d=141491] ). On both servers: &lt;br /&gt;
### For 2.0, go to &#039;&#039;Administration &amp;gt; Plugins &amp;gt; Authentication &amp;gt; Manage authentication&#039;&#039;. Enable &#039;&#039;MNet Authentication&#039;&#039; by clicking the &#039;enable&#039; icon.&lt;br /&gt;
### For 1.9, go to &#039;&#039;Administration &amp;gt; Users &amp;gt; Authentication &amp;gt; Manage authentication&#039;&#039;  and enable Moodle Network authentication plugin. Click on &#039;Settings&#039; and enable auto_add_remote_users.&#039;&#039;&lt;br /&gt;
## On MoodleA go to &#039;&#039;Admin &amp;gt; Networking &amp;gt; (Manage) Peers&#039;&#039;, click on &#039;MoodleB&#039;, and click on &#039;Services&#039;. Enable SSO-IDP(SSO Identity Provider) publish and subscribe, and SSO-SP(SSO Service Provider) publish and subscribe.&lt;br /&gt;
## Do the equivalent on MoodleB. (By both publishing and subscribing you allow users to move freely between the two servers. By only publishing or subscribing between servers you create a one way traversal)&lt;br /&gt;
## On both, go to &#039;&#039;Admin &amp;gt; Users &amp;gt; Permissions &amp;gt; Define Roles&#039;&#039;, only roles that have &amp;quot;Roam to a remote Moodle moodle/site:mnetlogintoremote&amp;quot; will be allowed to roam. Grant the privilege as appropriate.&lt;br /&gt;
### eg. enabling for &#039;&#039;Authenticated user&#039;&#039; allows any authenticated user to roam between servers.&lt;br /&gt;
## On both servers, go to the homepage, and add the &#039;Network Servers&#039; block.&lt;br /&gt;
## To test, it is recommended to use a different browser (even on a different machine) that is logged in to neither. Login to MoodleA with a non-administrator account that has the permissions to roam. You should see the Network Servers block, and clicking on it you should go to MoodleB with a newly autocreated account. &lt;br /&gt;
# Get remote enrolments going -- this is optional. It allows an administrator of MoodleB to enrol users that are &amp;quot;native&amp;quot; to MoodleB in remote courses in MoodleA, and viceversa.&lt;br /&gt;
## On both, go to &#039;&#039;Site administration &amp;gt; Plugins &amp;gt; Enrolments &amp;gt; Manage enrol plugins&#039;&#039; in 2.0 onwards or &#039;&#039;Administration &amp;gt; Courses &amp;gt; Enrolments&#039;&#039; pre-2.0 and enable Moodle Network enrolment plugin (click Save). Click on &#039;Edit&#039; and enable &#039;allow_allcourses&#039; or select some courses or categories to be remotely enrolled.&lt;br /&gt;
## On the server you want to receive enrolments:&lt;br /&gt;
### For 2.0, go to &#039;&#039;Site administration &amp;gt; Plugins &amp;gt; Enrolments &amp;gt; Manage enrol plugins&#039;&#039;. Enable &#039;&#039;MNet remote enrolments&#039;&#039; by clicking the &#039;enable&#039; icon. (For &#039;&#039;MNet remote enrolments&#039;&#039; settings info see [[MNet_remote_enrolments|MNet remote enrolments]])&lt;br /&gt;
### For 1.9, go to &#039;&#039;Administration &amp;gt; Users &amp;gt; Authentication &amp;gt; Manage authentication&#039;&#039;  and enable Moodle Network authentication plugin. Click on &#039;Settings&#039; and enable auto_add_remote_users.&#039;&#039;&lt;br /&gt;
## On MoodleA go to &#039;&#039;Admin &amp;gt; Network &amp;gt; Peers&#039;&#039;, click on &#039;MoodleB&#039;, and click on &#039;Services&#039;. Enable Enrolment publish and/or subscribe.&lt;br /&gt;
## Do the equivalent on MoodleB.&lt;br /&gt;
## On every course you want to allow enrolments into:&lt;br /&gt;
### Enter course and go to &#039;&#039;Settings -&amp;gt; Course administration -&amp;gt; Users -&amp;gt; Enrolment methods&#039;&#039;&lt;br /&gt;
### From &#039;&#039;Add method&#039;&#039; drop-down select &#039;&#039;MNet remote enrolments&#039;&#039;&lt;br /&gt;
### On the new screen select the &#039;&#039;Remote host&#039;&#039; you want to allow enrolments from, the Role for the enrolled users, and click save. (Note: you can only add a single &#039;&#039;MNet remote enrolments&#039;&#039; method per course.)&lt;br /&gt;
&lt;br /&gt;
===Using it===&lt;br /&gt;
# For 1.9: in MoodleA go to &#039;&#039;Admin &amp;gt; Networking &amp;gt; Enrolments&#039;&#039;. You will see MoodleB listed. Click on MoodleB and you will see a list of courses that MoodleB offers for remote enrolment. Select the course you want, and then enroll the users you want to that course.&lt;br /&gt;
# For 2.0: in MoodleA go to &#039;&#039;Admin &amp;gt; Networking &amp;gt; Remote enrolments client&#039;&#039;. You will see MoodleB listed. Click on &#039;&#039;Edit enrolments&#039;&#039; button beside MoodleB and you will see a list of courses that MoodleB offers for remote enrolment. Click &#039;Edit enrolments&#039;&#039;, select the users you want to enroll, and then click Add to enroll them in the course.&lt;br /&gt;
&lt;br /&gt;
==Connecting to a Mnet hub==&lt;br /&gt;
A Mnet hub (do not confuse it with the [[Community hub]] project of Moodle 2.0) is a Moodle server that is configured to accept connections from other Moodle servers, and to provide a set of services to users of these other servers. This guideline will direct you to connect to a Mnet hub, assess the services it has to offer, and enable those services for your users.&lt;br /&gt;
&lt;br /&gt;
===Setup===&lt;br /&gt;
# Get talking to the Hub&lt;br /&gt;
## Ensure that the &#039;&#039;Admin &amp;gt; Server &amp;gt; Environment&#039;&#039; page indicates you have curl and openssl installed&lt;br /&gt;
## Go to &#039;&#039;Admin &amp;gt; Network &amp;gt; Settings&#039;&#039; and turn Networking on&lt;br /&gt;
## Go to &#039;&#039;Admin &amp;gt; Network &amp;gt; Peers&#039;&#039; and enter the URL of Mnet Hub under &amp;quot;Add New Host&amp;quot;. Click &amp;lt;em&amp;gt;Add&amp;lt;/em&amp;gt;&lt;br /&gt;
## The host details for the Mnet Hub should appear with the Site Name field already populated. Click &amp;lt;em&amp;gt;Save changes&amp;lt;/em&amp;gt;&lt;br /&gt;
## The details will be written to your database and two new tabs will appear in this window: &#039;Services&#039; and &#039;Logs&#039;. Click &amp;lt;em&amp;gt;Services&amp;lt;/em&amp;gt;&lt;br /&gt;
##A list of services will appear, each with a checkbox for &#039;publish&#039; and &#039;subscribe&#039;. Check the checkboxes for any services you want to publish or subscribe to&lt;br /&gt;
&lt;br /&gt;
===Using it===&lt;br /&gt;
If the Mnet Hub has already enabled a service for you, there will be a tick alongside the appropriate checkbox, for example: if the Hub is &amp;lt;em&amp;gt;publishing&amp;lt;/em&amp;gt; Moodle Networked Enrolment, then a tick will appear alongside the &amp;lt;em&amp;gt;subscribe&amp;lt;/em&amp;gt; checkbox for this service. Note that in order to enable some functionality, prominently &amp;lt;em&amp;gt;single-sign-on&amp;lt;/em&amp;gt;, you may have to &amp;lt;em&amp;gt;publish&amp;lt;/em&amp;gt; a service, e.g. the &amp;lt;em&amp;gt;Identity Provider&amp;lt;/em&amp;gt; service. The Mnet Hub will access this service on your Moodle, asking it to authenticate your users.&lt;br /&gt;
# Enable Roaming&lt;br /&gt;
## Subscribe to &amp;lt;em&amp;gt;SSO (Service Provider)&amp;lt;/em&amp;gt; by checking the box&lt;br /&gt;
## Publish &amp;lt;em&amp;gt;SSO (Identity Provider)&amp;lt;/em&amp;gt; by checking the box&lt;br /&gt;
## Click &amp;lt;em&amp;gt;Save changes&amp;lt;/em&amp;gt;&lt;br /&gt;
## Go to &#039;&#039;Admin &amp;gt; Users &amp;gt; Permissions &amp;gt; Define Roles&#039;&#039;, and grant the capability &amp;lt;em&amp;gt;Roam to a remote Moodle moodle/site:mnetlogintoremote&amp;lt;/em&amp;gt; to an appropriate role&lt;br /&gt;
## Go to &#039;&#039;Administration &amp;gt; Plugins &amp;gt; Authentication &amp;gt; Manage authentication&#039;&#039; in 2.0 onwards or &#039;&#039;Administration &amp;gt; Users &amp;gt; Authentication &amp;gt; Manage authentication&#039;&#039; in 1.9 and enable the &amp;lt;em&amp;gt;Moodle Network authentication&amp;lt;/em&amp;gt; plugin&lt;br /&gt;
## Go to your homepage, turn on editing, and add the &#039;Network Servers&#039; block&lt;br /&gt;
## Using a different web-browser, log on as a non-admin user who inhabits the role you granted the roaming capability to&lt;br /&gt;
## Note that the Mnet Hub is listed in the Network Servers block on the homepage. Click on the link to that server&lt;br /&gt;
## Some of your user details will be transferred to the Mnet Hub server, and a browsing session will be started for you as if you had logged on there directly&lt;br /&gt;
# Enable Networked Enrolment&lt;br /&gt;
## Return to the web browser you&#039;ve been using as the site administrator&lt;br /&gt;
## Go to &#039;&#039;Admin &amp;gt; Network &amp;gt; Peers&#039;&#039; and click on the entry for the Mnet Hub.&lt;br /&gt;
## Click on the Services tab&lt;br /&gt;
## Subscribe to &amp;lt;em&amp;gt;Moodle Networked Enrolment&amp;lt;/em&amp;gt;&lt;br /&gt;
## Go to &#039;&#039;Site administration &amp;gt; Plugins &amp;gt; Enrolments &amp;gt; Manage enrol plugins&#039;&#039; in 2.0 onwards or &#039;&#039;Administration &amp;gt; Courses &amp;gt; Enrolments&#039;&#039; pre-2.0 and enable the &amp;lt;em&amp;gt;Moodle Network enrolment&amp;lt;/em&amp;gt; plugin. Click &amp;lt;em&amp;gt;Save changes&amp;lt;/em&amp;gt;&lt;br /&gt;
## Click on &amp;lt;em&amp;gt;edit&amp;lt;/em&amp;gt; to view the details for networked enrolments.&lt;br /&gt;
## Go to &#039;&#039;Admin &amp;gt; Networking &amp;gt; Enrolments&#039;&#039; to see a list of Moodle servers that offer this service to you&lt;br /&gt;
## Click on a server name to view a list of courses that the server offers to your users&lt;br /&gt;
## Click on a course name, to view a list users that you can enrol in this course&lt;br /&gt;
## Enrol users&lt;br /&gt;
## Profit!&lt;br /&gt;
&lt;br /&gt;
==Running a Mnet hub==&lt;br /&gt;
A Mnet hub is a regular Moodle site that runs in a special mode. As a Moodle Administrator, when you add another Moodle site to your list of network peers, your Moodle will contact that site to find out what it is called, and to request its public key for encrypted communication. Normally, the remote server will simply provide this information without making any record of the transaction.&lt;br /&gt;
&lt;br /&gt;
A Mnet hub is different. As soon as you add an entry for a Mnet hub to your system, the Mnet hub will create an entry for your server in its list of hosts, and may immediately begin to offer services to the users of your site.&lt;br /&gt;
&lt;br /&gt;
This section will guide you to set up a Mnet hub, and select services to offer to all comers.&lt;br /&gt;
&lt;br /&gt;
===Setup===&lt;br /&gt;
# Enable Networking&lt;br /&gt;
## Ensure that the &#039;&#039;Admin &amp;gt; Server &amp;gt; Environment&#039;&#039; page indicates you have curl and openssl installed&lt;br /&gt;
## Go to &#039;&#039;Admin &amp;gt; Network &amp;gt; Settings&#039;&#039; and turn Networking on &lt;br /&gt;
## Go to &#039;&#039;Admin &amp;gt; Network &amp;gt; Peers&#039;&#039; and tick the checkbox for &amp;lt;em&amp;gt;Register all hosts&amp;lt;/em&amp;gt;. Click on &amp;lt;em&amp;gt;Save Changes&amp;lt;/em&amp;gt;&lt;br /&gt;
## On the same page, the first entry in your list of hosts should be &amp;lt;em&amp;gt;All hosts&amp;lt;/em&amp;gt;. Click this link&lt;br /&gt;
## Click on &amp;lt;em&amp;gt;Services&amp;lt;/em&amp;gt; and enable any services you want to offer to all comers&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Moodle Network FAQ]]&lt;br /&gt;
* [[Development:Moodle Network|Moodle Network development notes]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=6976 MNet forum]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=92749 Examples of how people are using Moodle networks] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Authentication]]&lt;br /&gt;
[[Category:Enrolment]]&lt;br /&gt;
[[Category:MNet]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Réseau Moodle]]&lt;br /&gt;
[[ja:Moodleネットワーク]]&lt;br /&gt;
[[es:Red Moodle]]&lt;br /&gt;
[[cs:Síťové služby]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Database_export&amp;diff=85557</id>
		<title>Database export</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Database_export&amp;diff=85557"/>
		<updated>2011-06-30T07:48:20Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Database}}&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Please refer to [[TOC_with_notes#Database|these notes]] before editing this page.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Choose the format you wish to export to ==&lt;br /&gt;
&lt;br /&gt;
The Database activity module provides an Export tab that allows users to export database entries to either the CSV (comma separated values) or ODS (OpenOffice Calc) formats. Previously, it was possible to export to the XLS (Microsoft Excel) format; however, problems with creating that format have led to it being removed. The workaround is to use either CSV or ODS formats both of which can be opened with the latest version of Microsoft Excel. &lt;br /&gt;
&lt;br /&gt;
When using the CSV format, the user can select either the comma, semicolon, or tab to separate the fields. The selection of the proper character is important. If users select to use a comma to separate the fields and some of the fields contain data with commas then the number of columns is going to be misaligned and likely cause confusion. &lt;br /&gt;
&lt;br /&gt;
== Choose the fields you wish to export ==&lt;br /&gt;
&lt;br /&gt;
Users can select which fields from the database they wish to have exported. By default, all fields are checked to be included. Choose the fields that you wish to have included in the export.&lt;br /&gt;
&lt;br /&gt;
== Export entries ==&lt;br /&gt;
&lt;br /&gt;
Once the export type and the fields to be exported have been selected, clicking on the Export entries pushbutton will generate the file. The user will usually have the option of either opening or saving the file. &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Adding a database entry]] - including import.&lt;br /&gt;
* See http://tracker.moodle.org/browse/MDL-19864 - regarding errors related to XLS export&lt;br /&gt;
&lt;br /&gt;
[[de:Datenbank_Export]]&lt;br /&gt;
[[ru:Экспорт базы данных]]&lt;br /&gt;
[[ja:データベースのエクスポート]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Database_activity_module]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Database_export&amp;diff=85556</id>
		<title>Database export</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Database_export&amp;diff=85556"/>
		<updated>2011-06-30T07:45:46Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Database}}&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Please refer to [[TOC_with_notes#Database|these notes]] before editing this page.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Choose the format you wish to export to ==&lt;br /&gt;
&lt;br /&gt;
The Database activity module provides an Export tab that allows users to export database entries to either the CSV (comma separated values) or ODS (OpenOffice Calc) formats. Previously, it was possible to export to the XLS (Microsoft Excel) format; however, problems with creating that format have led to it being removed. The workaround is to use either CSV or ODS formats both of which can be opened with the latest version of Microsoft Excel. &lt;br /&gt;
&lt;br /&gt;
When using the CSV format, the user can select either the comma, semicolon, or tab to separate the fields. The selection of the proper character is important. If users select to use a comma to separate the fields and some of the fields contain data with commas then the number of columns is going to be misaligned and likely cause confusion. &lt;br /&gt;
&lt;br /&gt;
== Choose the fields you wish to export ==&lt;br /&gt;
&lt;br /&gt;
Users can select which fields from the database they wish to have exported. By default, all fields are checked to be included. Choose the fields that you wish to have included in the export.&lt;br /&gt;
&lt;br /&gt;
== Export entries ==&lt;br /&gt;
&lt;br /&gt;
Once the export type and the fields to be exported have been selected, clicking on the Export entries pushbutton will generate the file. The user will usually have the option of either opening or saving the file. &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Adding a database entry]] - including import.&lt;br /&gt;
* See [http://tracker.moodle.org/browse/MDL-19864 MDL-19864] for errors related to XLS export&lt;br /&gt;
&lt;br /&gt;
[[de:Datenbank_Export]]&lt;br /&gt;
[[ru:Экспорт базы данных]]&lt;br /&gt;
[[ja:データベースのエクスポート]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Database_activity_module]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Database_export&amp;diff=85553</id>
		<title>Database export</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Database_export&amp;diff=85553"/>
		<updated>2011-06-30T07:36:02Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Database}}&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Please refer to [[TOC_with_notes#Database|these notes]] before editing this page.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Choose the format you wish to export to ==&lt;br /&gt;
&lt;br /&gt;
The Database activity module provides an Export tab that allows users to export database entries to either the CSV (comma separated values) or ODS (OpenOffice Calc) formats. Previously, it was possible to export to the XLS (Microsoft Excel) format; however, problems with creating that format have led to it being removed. The workaround is to use either CSV or ODS formats both of which can be opened with the latest version of Microsoft Excel. &lt;br /&gt;
&lt;br /&gt;
When using the CSV format, the user can select either the comma, semicolon, or tab to separate the fields. The selection of the proper character is important. If users select to use a comma to separate the fields and some of the fields contain data with commas then the number of columns is going to be misaligned and likely cause confusion. &lt;br /&gt;
&lt;br /&gt;
== Choose the fields you wish to export ==&lt;br /&gt;
&lt;br /&gt;
Users can select which fields from the database they wish to have exported. By default, all fields are checked to be included. Choose the fields that you wish to have included in the export.&lt;br /&gt;
&lt;br /&gt;
== Export entries ==&lt;br /&gt;
&lt;br /&gt;
Once the export type and the fields to be exported have been selected, clicking on the Export entries pushbutton will generate the file. The user will usually have the option of either opening or saving the file. &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Adding a database entry]] - including import.&lt;br /&gt;
* See [http://tracker.moodle.org/browse/MDL-19864] for errors related to XLS export&lt;br /&gt;
&lt;br /&gt;
[[de:Datenbank_Export]]&lt;br /&gt;
[[ru:Экспорт базы данных]]&lt;br /&gt;
[[ja:データベースのエクスポート]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Database_activity_module]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Database_export&amp;diff=85550</id>
		<title>Database export</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Database_export&amp;diff=85550"/>
		<updated>2011-06-30T07:35:09Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Database}}&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Please refer to [[TOC_with_notes#Database|these notes]] before editing this page.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Choose the format you wish to export to ==&lt;br /&gt;
&lt;br /&gt;
The Database activity module provides an Export tab that allows users to export database entries to either the CSV (comma separated values) or ODS (OpenOffice Calc) formats. Previously, it was possible to export to the XLS (Microsoft Excel) format; however, problems with creating that format have led to it being removed. The workaround is to use either CSV or ODS formats both of which can be opened with the latest version of Microsoft Excel. &lt;br /&gt;
&lt;br /&gt;
When using the CSV format, the user can select either the comma, semicolon, or tab to separate the fields. The selection of the proper character is important. If users select to use a comma to separate the fields and some of the fields contain data with commas then the number of columns is going to be misaligned and likely cause confusion. &lt;br /&gt;
&lt;br /&gt;
== Choose the fields you wish to export ==&lt;br /&gt;
&lt;br /&gt;
Users can select which fields from the database they wish to have exported. By default, all fields are checked to be included. Choose the fields that you wish to have included in the export.&lt;br /&gt;
&lt;br /&gt;
== Export entries ==&lt;br /&gt;
&lt;br /&gt;
Once the export type and the fields to be exported have been selected, clicking on the Export entries pushbutton will generate the file. The user will usually have the option of either opening or saving the file. &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Adding a database entry]] - including import.&lt;br /&gt;
* See [http://tracker.moodle.org/browse/MDL-19864|MDL-19864] for errors related to XLS export&lt;br /&gt;
&lt;br /&gt;
[[]]&lt;br /&gt;
[[de:Datenbank_Export]]&lt;br /&gt;
[[ru:Экспорт базы данных]]&lt;br /&gt;
[[ja:データベースのエクスポート]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Database_activity_module]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Category:Contributed_code&amp;diff=85196</id>
		<title>Category:Contributed code</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Category:Contributed_code&amp;diff=85196"/>
		<updated>2011-06-14T08:17:10Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An index of documentation pages about contributed code.&lt;br /&gt;
&lt;br /&gt;
Contributed code, or &amp;quot;contrib&amp;quot; for short, is understood to be all code contributed to Moodle which is not included in the standard Moodle distribution. The standard Moodle distribution, sometimes known as &amp;quot;Core&amp;quot; code is the code stored and developed at [http://git.moodle.org/gw?p=moodle.git;a=summary git.moodle.org].&lt;br /&gt;
&lt;br /&gt;
Contributed code is usually managed by the developer of the plugin or patch; however, as people change jobs or move on for whatever reason others can volunteer to step in to serve as the primary maintainer of a contribution. &lt;br /&gt;
&lt;br /&gt;
The code is hosted on a the version control system (VCS) of the developers choice. Previously, CVS was used for both [http://cvs.moodle.org/moodle/ core Moodle code] and [http://cvs.moodle.org/contrib/ CONTRIB code]. Git is now the preferred VCS for both Moodle core and CONTRIB code. There are various Git repositories; however, the most commonly used Git repository is [http://github.com/ Github.com]. &lt;br /&gt;
&lt;br /&gt;
Developers of CONTRIB code can create their own publicly accessible Git repository of the code (for an example see https://github.com/moodlehq/). Plugins typically use the following naming convention: moodle-{type}_{name} so that the book activity module would be named moodle-mod_book. Developers are encouraged to be consistent. &lt;br /&gt;
&lt;br /&gt;
At the moment, all CONTRIB code (and core code) should be indexed in the [http://moodle.org/mod/data/view.php?id=6009 Modules and plugins database]. That said, work is being done to create a new Plugins database that will allow much more flexibility in how CONTRIB code is shared and reviewed. Those interested can follow that work at [http://tracker.moodle.org/browse/MDLSITE-571 MDLSITE-571].&lt;br /&gt;
&lt;br /&gt;
Anthony Borrow, the CONTRIB Coordinator, is happy to answer any questions related to CONTRIB code and will help direct folks to the appropriate developer. Feel free to contact the CONTRIB Coordinator via Moodle message. &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Installing contributed modules or plugins]]&lt;br /&gt;
*[[Contributed code FAQ]]&lt;br /&gt;
*[[Development:Guidelines for contributed code]]&lt;br /&gt;
*[[Development:contrib]]&lt;br /&gt;
*[http://moodle.org/mod/data/view.php?id=6009 Modules and plugins database]&lt;br /&gt;
&lt;br /&gt;
[[Category:Teacher]]&lt;br /&gt;
[[Category:Administrator]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
&lt;br /&gt;
[[eu:Kategoria:Kode ezestandarra]]&lt;br /&gt;
[[ja:Category:ブロック ( 非標準 )]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Git&amp;diff=83116</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Git&amp;diff=83116"/>
		<updated>2011-04-29T15:52:32Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://git-scm.com/ Git] is a free and open source version control system. Git is a more sophisticated replacement for [[CVS]]. You can find the official Git Moodle repository at http://git.moodle.org/ or mirror at https://github.com/moodle/moodle. The particular advantage of Git is its distributed model, making it ideal for managing local customisations to Moodle. It is also suitable for development of contrib plugins for Moodle.&lt;br /&gt;
&lt;br /&gt;
Use the &#039;&#039;Git&#039;&#039; category link at the end of this page to get a list of all Git related pages.&lt;br /&gt;
&lt;br /&gt;
==Books and tutorials==&lt;br /&gt;
* [http://progit.org/ Pro Git Book]&lt;br /&gt;
* [http://book.git-scm.com/ Git Community Book]&lt;br /&gt;
* [http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html Official Git tutorial]&lt;br /&gt;
* [http://help.github.com/ GitHub Help]&lt;br /&gt;
&lt;br /&gt;
==Moodle specific guides==&lt;br /&gt;
* [[Installing Moodle from Git repository]] - WIP&lt;br /&gt;
* [[Maintaining Moodle customisations with Git]] - WIP&lt;br /&gt;
* Submitting patches and pull requests - TODO&lt;br /&gt;
* [[Git repositories for contrib modules]] - WIP&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
The most powerful tool you can git is probably command line git. If you prefer clicking you can try one of the following, more information at [http://git-scm.com/tools http://git-scm.com/tools].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IDE integrations&#039;&#039;&#039;&lt;br /&gt;
* [http://www.eclipse.org/egit/ EGit plugin for Eclipse IDE]&lt;br /&gt;
* [http://netbeans.org/projects/versioncontrol/pages/Git_main Netbeans] - early access official Git plugin for Netbeans&lt;br /&gt;
* [http://www.jetbrains.com/phpstorm/ PHPStorm] - commercial IDE with Git support&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frontends&#039;&#039;&#039;&lt;br /&gt;
* [http://code.google.com/p/tortoisegit/ TortoiseGit] - Windows only UI&lt;br /&gt;
* [http://gitx.frim.nl/ GitX] - OS X only UI&lt;br /&gt;
* [http://www.syntevo.com/smartgit/index.html SmartGit] - feature rich multiplatform UI (free for non-commercial use)&lt;br /&gt;
&lt;br /&gt;
==Hosting==&lt;br /&gt;
* [http://github.com/ GitHub] - probably the best hosting choice for beginners&lt;br /&gt;
* [http://gitorious.org/ Gitorious] - free hosting running on open source code&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Git Migration]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=162723 Moving from CVS to git in November 2010] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Git]]&lt;br /&gt;
[[Category:Administrator]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=80936</id>
		<title>Development:Guidelines for contributed code</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=80936"/>
		<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 [[Development: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;
*[[Development:Migrating contrib code to 2.0]]&lt;br /&gt;
*[[Development:contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Development: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:Developer|Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Process&amp;diff=80006</id>
		<title>Development talk:Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Process&amp;diff=80006"/>
		<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/21/en/index.php?title=Development_talk:Process&amp;diff=79776</id>
		<title>Development talk:Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Process&amp;diff=79776"/>
		<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/21/en/index.php?title=Development_talk:Process&amp;diff=79314</id>
		<title>Development talk:Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Process&amp;diff=79314"/>
		<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/21/en/index.php?title=Development_talk:Overview_of_the_Moodle_question_engine&amp;diff=78294</id>
		<title>Development talk:Overview of the Moodle question engine</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Overview_of_the_Moodle_question_engine&amp;diff=78294"/>
		<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/21/en/index.php?title=Development_talk:Question_Engine_2&amp;diff=78228</id>
		<title>Development talk:Question Engine 2</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Question_Engine_2&amp;diff=78228"/>
		<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/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=75455</id>
		<title>Development:Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=75455"/>
		<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;
* [[Development:DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Development:Using the File API in Moodle forms]]&lt;br /&gt;
* [[Development:Output_renderers]]&lt;br /&gt;
* [[Development:Migrating_your_code_to_the_2.0_rendering_API]] (n.b., some info outdated and may need updating)&lt;br /&gt;
* [[Development: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: [[Development: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: [[Development: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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Modules_and_plugins_improvements&amp;diff=73519</id>
		<title>Development:Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Modules_and_plugins_improvements&amp;diff=73519"/>
		<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;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=73477</id>
		<title>Development:Guidelines for contributed code</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=73477"/>
		<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 [[Development: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 [[Development: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;
*[[Development:Migrating contrib code to 2.0]]&lt;br /&gt;
*[[Development:contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Development: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:Developer|Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=73476</id>
		<title>Development:Guidelines for contributed code</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=73476"/>
		<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 [[Development: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 [[Development: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;
*[[Development:Migrating contrib code to 2.0]]&lt;br /&gt;
*[[Development:contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Development: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:Developer|Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Modules_and_plugins_improvements&amp;diff=73045</id>
		<title>Development talk:Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Modules_and_plugins_improvements&amp;diff=73045"/>
		<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/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71484</id>
		<title>Development:Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71484"/>
		<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;
* [[Development:DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Development:Using the File API in Moodle forms]]&lt;br /&gt;
* [[Development:Output_renderers]]&lt;br /&gt;
* [[Development:Migrating_your_code_to_the_2.0_rendering_API]] (n.b., some info outdated and may need updating)&lt;br /&gt;
* [[Development:Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71480</id>
		<title>Development:Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71480"/>
		<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;
* [[Development:DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Development:Using the File API in Moodle forms]]&lt;br /&gt;
* [[Development:Output_renderers]]&lt;br /&gt;
* [[Development:Migrating_your_code_to_the_2.0_rendering_API]]&lt;br /&gt;
* [[Development:Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71479</id>
		<title>Development:Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71479"/>
		<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;
* [[Development:DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Development:Using the File API in Moodle forms]]&lt;br /&gt;
* [[Development:Output_renderers]]&lt;br /&gt;
* [[Development:Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71477</id>
		<title>Development:Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71477"/>
		<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;
* [[Development:DB_layer_2.0_migration_docs]]&lt;br /&gt;
* [[Development:Using the File API in Moodle forms]]&lt;br /&gt;
* [[Development:Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71475</id>
		<title>Development:Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71475"/>
		<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;
* [[Development:Using the File API in Moodle forms]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71474</id>
		<title>Development:Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Migrating_contrib_code_to_2.0&amp;diff=71474"/>
		<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;
* [[Development:Using the File API in Moodle forms]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Languages/AMOS&amp;diff=70902</id>
		<title>Development talk:Languages/AMOS</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Languages/AMOS&amp;diff=70902"/>
		<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/21/en/index.php?title=Development_talk:Modules_and_plugins_improvements&amp;diff=70194</id>
		<title>Development talk:Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Modules_and_plugins_improvements&amp;diff=70194"/>
		<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/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=69266</id>
		<title>Development:Guidelines for contributed code</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=69266"/>
		<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 [[Development: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 [[Development: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;
*[[Development:contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Development: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:Developer|Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=69265</id>
		<title>Development:Guidelines for contributed code</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Guidelines_for_contributed_code&amp;diff=69265"/>
		<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 [[Development: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 [[Development: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;
*[[Development:contrib]] CONTRIB is an area in the Moodle CVS &lt;br /&gt;
*[[Translation]] for information on the translation of contributed code&lt;br /&gt;
*[[Development: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:Developer|Guidelines for contributors]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Multi_course_grader_report&amp;diff=68075</id>
		<title>Multi course grader report</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Multi_course_grader_report&amp;diff=68075"/>
		<updated>2010-02-01T23:31:06Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Multi Course Grader Report was developed by [http://www.beauxcreations.com Barry Oosthuizen] as a quick way to get a detailed overview of all courses on site.&lt;br /&gt;
It also acts as a quick way to navigate to any other course&#039;s Grader Report by use of hyperlinks on the course names.  I made it because it was easy to make, took only a day to develop and I think it will be useful for somebody&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
*Upload and extract the zip file from the Modules and Plugins database to your grade/report folder.&lt;br /&gt;
*Visit the Site Admin &amp;gt; Notifications page&lt;br /&gt;
&lt;br /&gt;
==How to use it==&lt;br /&gt;
#Visit any course page as teacher/admin etc&lt;br /&gt;
#Click on Grades in the Administration block / Visit the gradebook&lt;br /&gt;
#Click on the &amp;quot;Multi Course Grader Report&amp;quot; subtab / option from the &amp;quot;Choose an action menu&amp;quot; (if you still use this)&lt;br /&gt;
##You are now viewing everyone&#039;s grades for all courses you have access to&lt;br /&gt;
##To view only of the displayed courses&#039;s Grader Report, click on the name of the course&lt;br /&gt;
##To visit the XLS/XML/ODS/TXT Grade Export page of any of the displayed courses (when in Multi Grader view) click on the appropriate icon underneath the Course name&lt;br /&gt;
##To use the multi grader as a navigation help, right click and choose &#039;open as new tab&#039; when you open a new Grader report or Grade Export page.  This way you can always come back to the back without having to wait for the page to refresh&lt;br /&gt;
&lt;br /&gt;
==Live Demo==&lt;br /&gt;
You may visit the [http://www.example.com Beaux Creations website] where you will find log in instructions.  You can then view the multi course grader in action by visiting the Grade Book of any course and then clicking on the &#039;Multi Course Grader Report&#039; subtab (or using the &amp;quot;Choose an action&amp;quot; dropdown menu)&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
*The Multi Course Grader does not cater for groups or grade editing.  The standard grader report may be used for that purpose.&lt;br /&gt;
&lt;br /&gt;
==Access Levels==&lt;br /&gt;
*Users can only view courses to which they have permission to view the grade reports.&lt;br /&gt;
&lt;br /&gt;
==Screen Shot==&lt;br /&gt;
[[Image:beaux_creations_multi_course_grader_report.gif]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Site_wide_user_report&amp;diff=68074</id>
		<title>Site wide user report</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Site_wide_user_report&amp;diff=68074"/>
		<updated>2010-02-01T23:30:16Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Site Wide User Report was developed by [http://www.beauxcreations.com Barry Oosthuizen] as a quick way to get a detailed overview of all user reports on a site.&lt;br /&gt;
It also acts as a quick way to navigate to any other course&#039;s User Reports by use of hyperlinks on the course names.  I made it because it was easy to make, took only a day to develop and I think it will be useful for somebody&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
*Upload and extract the zip file from the Modules and Plugins database to your grade/report folder.&lt;br /&gt;
*Visit the Site Admin &amp;gt; Notifications page&lt;br /&gt;
&lt;br /&gt;
==How to use it==&lt;br /&gt;
#Visit any course page as teacher/admin etc&lt;br /&gt;
#Click on Grades in the Administration block / Visit the gradebook&lt;br /&gt;
#Click on the &amp;quot;Site Wide User Report&amp;quot; subtab / option from the &amp;quot;Choose an action menu&amp;quot; (if you still use this)&lt;br /&gt;
##You are now viewing everyone&#039;s grades for all courses you have access to&lt;br /&gt;
##To view only one of the displayed courses&#039;s User Report, click on the name of the course&lt;br /&gt;
##To view the Site Wide User Reports of only one specific student, click on the name of the student&lt;br /&gt;
###To view only one user report (not site wide) of a student click on their name for that course.&lt;br /&gt;
##To use the Site Wide User Report as a navigation help, right click and choose &#039;open as new tab&#039; when you open a new Site Wide User report / User Report.  This way you can always come back to the back without having to wait for the page to refresh.&lt;br /&gt;
&lt;br /&gt;
==Live Demo==&lt;br /&gt;
You may visit the [http://www.example.com Beaux Creations website] where you will find log in instructions.  You can then view the multi course grader in action by visiting the Grade Book of any course and then clicking on the &#039;Site Wide User Report&#039; subtab (or using the &amp;quot;Choose an action&amp;quot; dropdown menu)&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
*The Site Wide User Report does not cater for groups.  The standard user reports may be used for that purpose.&lt;br /&gt;
*For really large insitutions this may take ages to load&lt;br /&gt;
&lt;br /&gt;
==Access Levels==&lt;br /&gt;
*Users can only view courses/grades to which they have permission to view the grade reports.&lt;br /&gt;
&lt;br /&gt;
==Screen Shot==&lt;br /&gt;
[[Image:beaux_creations_site_wide_user_report.gif]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Admin_Report_Roles_capabilities&amp;diff=67151</id>
		<title>Admin Report Roles capabilities</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Admin_Report_Roles_capabilities&amp;diff=67151"/>
		<updated>2010-01-11T21:55:50Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Roles capabilities admin report compares the permissions of all roles, side by side, to assist the coordinator to give capabilities and avoid inconsistencies in roles hierarchy. The admin can choose which roles to compare, and then displays a table. Each row shows a particular capability and each role is displayed as a column which are color coded to show the permission.&lt;br /&gt;
[[Image:Rolescapabilities.png|600px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [http://tracker.moodle.org/browse/CONTRIB/component/10595 Roles Capabilities in Moodle&#039;s Tracker]&lt;br /&gt;
* [http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=3304 Roles Capabilities in Moodle&#039;s Modules and Plugins Database]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Setting_up_Eclipse&amp;diff=66616</id>
		<title>Development:Setting up Eclipse</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Setting_up_Eclipse&amp;diff=66616"/>
		<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 [[Development: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:Developer|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/21/en/index.php?title=Development:Checkbox&amp;diff=60556</id>
		<title>Development:Checkbox</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Checkbox&amp;diff=60556"/>
		<updated>2009-07-25T15:28:03Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development: 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  [[Development: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;
* [[Development:Switch Button|Switch Button]]&lt;br /&gt;
* Sometimes extra options should be hidden with [[Development: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/21/en/index.php?title=Development:Checkbox&amp;diff=60555</id>
		<title>Development:Checkbox</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Checkbox&amp;diff=60555"/>
		<updated>2009-07-25T12:58:28Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development: 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  [[Development: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;
* [[Development:Switch Button|Switch Button]]&lt;br /&gt;
* Sometimes extra options should be hidden with [[Development: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/21/en/index.php?title=Development_talk:Interface_guidelines&amp;diff=59283</id>
		<title>Development talk:Interface guidelines</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Interface_guidelines&amp;diff=59283"/>
		<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 [[Development: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/21/en/index.php?title=Development_talk:Progressive_Disclosure&amp;diff=59282</id>
		<title>Development talk:Progressive Disclosure</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Progressive_Disclosure&amp;diff=59282"/>
		<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 [[Development: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: [[Development: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/21/en/index.php?title=Development:Modules_and_plugins_improvements&amp;diff=58404</id>
		<title>Development:Modules and plugins improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Modules_and_plugins_improvements&amp;diff=58404"/>
		<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;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=MRBS_block&amp;diff=57119</id>
		<title>MRBS block</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=MRBS_block&amp;diff=57119"/>
		<updated>2009-06-03T11:57:00Z</updated>

		<summary type="html">&lt;p&gt;Aborrow: /* Contributor/Maintainer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==MRBS Block==&lt;br /&gt;
&lt;br /&gt;
The MRBS block integrates the MRBS project (http://sourceforge.net/projects/mrbs/) by using Moodle functions to authenticate. While initially designed to work with Moodle 1.6 as a single sign on integration, later work made the MRBS project a contributed Moodle block. &lt;br /&gt;
&lt;br /&gt;
Stephen Bourget was kind enough to work on some changes to prepare the MRBS block to take advantage of roles and for use with Moodle 1.7 and beyond. Furthermore, a recently discovered SQL injection vulnerability in the MRBS application was patched. As a result, the MRBS integration/block is no longer supported or maintained for versions prior to Moodle 1.7.&lt;br /&gt;
&lt;br /&gt;
As with any customization, it is recommended that you have a good backup of your Moodle site before attempting to install contributed code. While those contributing code make every effort to provide the best code that they can, using contributed code nevertheless entails a certain degree of risk as contributed code is not as carefully reviewed and/or tested as the Moodle core code.   &lt;br /&gt;
&lt;br /&gt;
MRBS is useful for scheduling a variety of resources.  More information about MRBS can be obtained at http://mrbs.sourceforge.net/. As distributed here it is setup for periods; however, this can easily be changed to times by modifying the config.inc.php file.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
* Code - Copy the files into your Moodle blocks folder ($CFG-&amp;gt;dirroot/blocks)&lt;br /&gt;
* Database - Login in as a Moodle Administrator and go to the Administration notifications page to create the MRBS tables&lt;br /&gt;
* Capabilities - The MRBS block is primarily intended for use on the Moodle front page. Privileges to use the scheduler are currently based on three custom defined capabilities: &lt;br /&gt;
&lt;br /&gt;
# block/mrbs:administermrbs&lt;br /&gt;
# block/mrbs:editmrbs&lt;br /&gt;
# block/mrbs:viewmrbs &lt;br /&gt;
&lt;br /&gt;
** While these capabilities are created automatically, the system roles are not. As such, it is recommended that you create three system wide roles by:&lt;br /&gt;
&lt;br /&gt;
# Login as the Site administrator&lt;br /&gt;
# Go to the Site Administration block&lt;br /&gt;
# Click on Users -&amp;gt; Permissions -&amp;gt; Define Roles&lt;br /&gt;
# Click on the &#039;Add a new role&#039; pushbutton&lt;br /&gt;
# Fill in the Name, Short name, and description fields with MRBS Administrator, MRBS Scheduler, or MRBS Viewer depending on the role you are creating. &lt;br /&gt;
# Under Permissions set the capability to allow for the respective role (i.e. block/mrbs:administermrbs for the MRBS Administrator role, block/mrbs:editmrbs for the MRBS Scheduler role, and block/mrbs:viewmrbs for the MRBS Viewer role). &lt;br /&gt;
# Scroll down to the bottom and click on the &#039;Add a new role&#039; (or &#039;Save changes&#039; if editing the role) pushbutton. &lt;br /&gt;
# Once the roles are created, go to Site Administration block, click on Frontpage -&amp;gt; Frontpage roles and assign users to the appropriate/desired roles. &lt;br /&gt;
&lt;br /&gt;
** Typically, teachers get assigned as MRBS Schedulers and students as MRBS Viewers. Keep in mind that no assignment is equivalent to MRBS Viewers. Site administrators have the option of making the MRBS Calendar viewable to guests and non-logged in users. To force users to login in order to view the MRBS Calendar:&lt;br /&gt;
# Login as the site administrator&lt;br /&gt;
# Go to the Site Administration block under Security -&amp;gt; Site Policies &lt;br /&gt;
# Enable the &#039;Force users to login&#039; setting&lt;br /&gt;
&lt;br /&gt;
===Suggested configuration rules===&lt;br /&gt;
Not following these suggestions will not totally break mrbs, but will prevent some features working optimally.&lt;br /&gt;
&lt;br /&gt;
* Where bookings are for courses, the booking name should match the shortname of the course&lt;br /&gt;
* Rooms should be described such that:&lt;br /&gt;
** All teaching rooms include the word &#039;teaching&#039; in their description&lt;br /&gt;
** IT teaching rooms should have &#039;Teaching IT&#039; in their description&lt;br /&gt;
** Teaching rooms that are not suitable for general teaching (i.e. tech workshops) should have &#039;special&#039; in their names.&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
&lt;br /&gt;
Thanks to the generosity of translators, the MRBS Block is available in:&lt;br /&gt;
*English (en_utf8)&lt;br /&gt;
*Spanish (es_utf8)&lt;br /&gt;
*German (de_utf8) &lt;br /&gt;
** Installation instructions in German are available at: https://docs.moodle.org/de/blocks/mrbs#.C3.84ndern_der_MRBS_Texte&lt;br /&gt;
&lt;br /&gt;
If you would like to supply translations for other languages, please create an issue in the tracker and attach a zip file of the language files.&lt;br /&gt;
&lt;br /&gt;
===Extra Moodle MRBS Features===&lt;br /&gt;
* [[MRBS_block/import|Import timetable]]&lt;br /&gt;
* [[MRBS_block/forcebook|Force booking]]&lt;br /&gt;
* [[MRBS_block/usertt|User timetables]]&lt;br /&gt;
&lt;br /&gt;
===Contributor/Maintainer===&lt;br /&gt;
The MRBS Block was contributed and is maintained by Mike Worth and Anthony Borrow. More information about the MRBS Block is available at: http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=734&lt;br /&gt;
&lt;br /&gt;
The block was originally contributed by Anthony Borrow; however, Mike Worth has done significant work on new features for the MRBS block, and has graciously taken on the role of co-maintainer. More details about these new features are available at: http://moodle.org/mod/forum/discuss.php?d=121753&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributed code]]&lt;/div&gt;</summary>
		<author><name>Aborrow</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Opensis_Integration&amp;diff=57082</id>
		<title>Development:Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Opensis_Integration&amp;diff=57082"/>
		<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/21/en/index.php?title=User:Anthony_Borrow&amp;diff=57003</id>
		<title>User:Anthony Borrow</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=User:Anthony_Borrow&amp;diff=57003"/>
		<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/21/en/index.php?title=Development:Community_hub&amp;diff=56902</id>
		<title>Development:Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Community_hub&amp;diff=56902"/>
		<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/21/en/index.php?title=Development:Opensis_Integration&amp;diff=55617</id>
		<title>Development:Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Opensis_Integration&amp;diff=55617"/>
		<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/21/en/index.php?title=Development:Opensis_Integration&amp;diff=55612</id>
		<title>Development:Opensis Integration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Opensis_Integration&amp;diff=55612"/>
		<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>
</feed>