<?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=Poltawski</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=Poltawski"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/Special:Contributions/Poltawski"/>
	<updated>2026-04-16T03:57:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=User:Dan_Poltawski&amp;diff=96048</id>
		<title>User:Dan Poltawski</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=User:Dan_Poltawski&amp;diff=96048"/>
		<updated>2012-06-28T14:28:52Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please see my [http://moodle.org/user/view.php?id=104159&amp;amp;course=5 Moodle.org Profile] as I don&#039;t keep this one up to date.. (only just keep the other one up date :))&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:lib/formslib.php_Usage&amp;diff=81951</id>
		<title>Development:lib/formslib.php Usage</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:lib/formslib.php_Usage&amp;diff=81951"/>
		<updated>2011-03-15T14:00:14Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: added a note about ordering of get_data/is_validated as there may be a bug here&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Formslib}}&lt;br /&gt;
==Usage of Formslib==&lt;br /&gt;
&lt;br /&gt;
There are many phpdoc style comments in lib/formslib.php&lt;br /&gt;
&lt;br /&gt;
course/edit.php and the included course/edit_form.php provide a good example of usage of this library.&lt;br /&gt;
&lt;br /&gt;
Also see the PEAR docs for [http://pear.php.net/package/HTML_QuickForm/ HTML_QuickForm docs] I found this [http://pear.php.net/manual/en/package.html.html-quickform.tutorial.php quick tutorial] and this [http://www.midnighthax.com/quickform.php slightly longer one] particularly useful.&lt;br /&gt;
&lt;br /&gt;
We created some special wrapper functions for moodle. Function $mform-&amp;gt;get_data() returns an object with the contents of the submitted data or returns null if no data has been submitted or validation fails.&lt;br /&gt;
&lt;br /&gt;
===Basic Usage in A Normal Page===&lt;br /&gt;
&lt;br /&gt;
Generally the structure of a page with a form on it looks like this :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
require_once(&#039;pathtoformdescription&#039;);&lt;br /&gt;
//you&#039;ll process some page parameters at the top here and get the info about&lt;br /&gt;
//what instance of your module and what course you&#039;re in etc. Make sure you&lt;br /&gt;
//include hidden variable in your forms which have their defaults set in set_data&lt;br /&gt;
//which pass these variables from page to page&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$mform = new yourmod_formfunction_form();//name of the form you defined in file above.&lt;br /&gt;
//default &#039;action&#039; for form is strip_querystring(qualified_me())&lt;br /&gt;
if ($mform-&amp;gt;is_cancelled()){&lt;br /&gt;
    //you need this section if you have a cancel button on your form&lt;br /&gt;
    //here you tell php what to do if your user presses cancel&lt;br /&gt;
    //probably a redirect is called for!&lt;br /&gt;
    // PLEASE NOTE: is_cancelled() should be called before get_data(), as this may return true&lt;br /&gt;
} else if ($fromform=$mform-&amp;gt;get_data()){&lt;br /&gt;
//this branch is where you process validated data.&lt;br /&gt;
&lt;br /&gt;
} else {&lt;br /&gt;
// this branch is executed if the form is submitted but the data doesn&#039;t validate and the form should be redisplayed&lt;br /&gt;
// or on the first display of the form.&lt;br /&gt;
    //setup strings for heading&lt;br /&gt;
    print_header_simple($streditinga, &#039;&#039;,&lt;br /&gt;
     &amp;quot;&amp;lt;a href=\&amp;quot;$CFG-&amp;gt;wwwroot/mod/$module-&amp;gt;name/index.php?id=$course-&amp;gt;id\&amp;quot;&amp;gt;$strmodulenameplural&amp;lt;/a&amp;gt; -&amp;gt;&lt;br /&gt;
     $strnav $streditinga&amp;quot;, $mform-&amp;gt;focus(), &amp;quot;&amp;quot;, false);&lt;br /&gt;
    //notice use of $mform-&amp;gt;focus() above which puts the cursor &lt;br /&gt;
    //in the first form field or the first field with an error.&lt;br /&gt;
&lt;br /&gt;
    //call to print_heading_with_help or print_heading? then :&lt;br /&gt;
    &lt;br /&gt;
    //put data you want to fill out in the form into array $toform here then :&lt;br /&gt;
&lt;br /&gt;
    $mform-&amp;gt;set_data($toform);&lt;br /&gt;
    $mform-&amp;gt;display();&lt;br /&gt;
    print_footer($course);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You are encouraged to look at &#039;&#039;&#039;lib/formslib.php&#039;&#039;&#039; to see what additional functions and parameters are available. Available functions are well commented.&lt;br /&gt;
&lt;br /&gt;
===Defining Your Form Class===&lt;br /&gt;
&lt;br /&gt;
The form class tells us about the structure of the form. You are encouraged to put this in a file called {function}_form.php probably in the same folder in which the page that uses it is located. The name of your class should be {modname}_{function}_form eg. forum_post_form or course_edit_form. These classes will extend class moodleform.&lt;br /&gt;
&lt;br /&gt;
Note the name you give the class is used as the id attribute of your form in html (any trailing &#039;_form&#039; is chopped off&#039;). Your form class name should be unique in order for it to be selectable in CSS by theme designers who may want to tweak the css just for that form.&lt;br /&gt;
&lt;br /&gt;
====definition()====&lt;br /&gt;
&lt;br /&gt;
[[Development:lib/formslib.php_Form_Definition|Help is here for defining your form]] by defining a function definition() in your form class that sets up your form structure.&lt;br /&gt;
&lt;br /&gt;
===Use in Activity Modules Add / Update Forms===&lt;br /&gt;
&lt;br /&gt;
Syntax is the same in activity modules to create your update / add page. We are still supporting mod.html but if you want to use the new formslib then you can in Moodle 1.8 just include in your module directory the file mod_form.php instead of mod.html and it will be automatically detected. Inside this file you define a class with class name &#039;{modname}__mod_form&#039; which extends the class &#039;moodleform_mod&#039;. See many examples of the core modules which have been converted to use formslib already.&lt;br /&gt;
&lt;br /&gt;
====defaults_preprocessing====&lt;br /&gt;
&lt;br /&gt;
For activity modules you use the same syntax to define your form. You may also want to override method defaults_preprocessing this can be used to take the data from the data base and tell the form how to fill out defaults in the form with this data. For example in the forum module in forum/mod_form.php we needed to tick an enable check box if a date had been selected in the date select. Normally data is loaded from the database and directly loaded into form fields with the same name as the database record you only need to use defaults_preprocessing if there isn&#039;t this one to one relationship. Another example is the lesson/mod_form.php which takes the data from the database and unserializes it. choice/mod_form.php shows an exampe of loading data from another db table referred to by a foreign key, to include in the form.&lt;br /&gt;
&lt;br /&gt;
====Post Processing Still Done in lib.php Functions====&lt;br /&gt;
&lt;br /&gt;
Post processing of data is done in lib.php functions modname_add_instance and modname_update_instance after the data has been validated. When migrating a form often little changes need to be made in the post processing. An exception is that date and date_time_selector fields automatically have their submitted data turned into timestamps so you don&#039;t need to do this in your add and update functions anymore.&lt;br /&gt;
&lt;br /&gt;
====Automatically Including Standard Activity Module Form Elements====&lt;br /&gt;
&lt;br /&gt;
Standard activity module form elements are automatically included using the moodleform_mod method standard_coursemodule_elements(). The default is to include a visibility and groupsmode select box and to include all necessary hidden fields. You can pass a parameter false to tell the method that your module doesn&#039;t support groups and so you don&#039;t want the groupsmode select button.&lt;br /&gt;
&lt;br /&gt;
[[Category:Formslib]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Assign_roles&amp;diff=81445</id>
		<title>Assign roles</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Assign_roles&amp;diff=81445"/>
		<updated>2011-02-21T15:57:14Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: clarify course category permissions inherentance&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Roles}}&lt;br /&gt;
&lt;br /&gt;
==Locations for assigning roles==&lt;br /&gt;
&lt;br /&gt;
[[Image:Assign roles.png|thumb|Assign roles in Moodle 1.9]]&lt;br /&gt;
Assigning roles is done for/in a particular context. A site and course are examples of two different contexts.  While the process is similar for each context, the approach to role assignment page may be different.   Here are several contexts and ways to find the assign roles.&lt;br /&gt;
&lt;br /&gt;
*System context: &#039;&#039;Site Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Assign system roles&#039;&#039; (this context is named &amp;quot;site&amp;quot; in Moodle 1.7)&lt;br /&gt;
*Front page context: &#039;&#039;Site Administration &amp;gt; Front Page &amp;gt; Front Page roles&#039;&#039; (in Moodle 1.8 onwards)&lt;br /&gt;
*Course category context: Assign roles link in course categories page&lt;br /&gt;
*Course context: Assign roles link in course administration block&lt;br /&gt;
*Module context: &amp;quot;Locally assigned roles&amp;quot; tab in editing activity page&lt;br /&gt;
*Block context: Assign roles link in course block (with editing turned on)&lt;br /&gt;
*User context: Roles tab in user profile page&lt;br /&gt;
&lt;br /&gt;
{{Moodle 1.9}}In Moodle 1.9 onwards, the assign roles page lists the names of users assigned to each role (unless there are more than 10 users, in which case this is stated).&lt;br /&gt;
&lt;br /&gt;
==Contexts==&lt;br /&gt;
&lt;br /&gt;
By assigning a role to a user in a certain context, you grant them the permissions contained in that role for the current context and all lower contexts.&lt;br /&gt;
&lt;br /&gt;
The list of contexts in hierarchical order is as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:Moodle-contexts-1.8.png|right|thumbnail|200px|A diagram of the contexts in Moodle. Click on the diagram to see a more detailed view of it.]]&lt;br /&gt;
&lt;br /&gt;
*System (no parent)&lt;br /&gt;
*Front page (parent = system) - Moodle 1.8 onwards&lt;br /&gt;
*Course category (parent = parent category or system)&lt;br /&gt;
*Course (parent = category or system)&lt;br /&gt;
*Module (parent = course or system) - Moodle 1.8 onwards&lt;br /&gt;
*Block (parent = course or system) - Moodle 1.8 onwards&lt;br /&gt;
*User (parent = system)&lt;br /&gt;
&lt;br /&gt;
Inheritance will kick in if a role is assigned at a higher level. For example if a user is assigned a Teacher role in a particular course category then the user will have this role in ALL courses within the category.&lt;br /&gt;
&lt;br /&gt;
Roles will only work if the role assignment is made in the correct context. For example, a Teacher role should be assigned in the  course or course category context, a Forum moderator for a particular forum should be assigned in the module context.&lt;br /&gt;
&lt;br /&gt;
The [[Inspector role]] is an example of a role assigned in the system context. The [[Forum moderator role]] is an example of a role assigned in the module context. The [[Parent role]] is an example of a role assigned in the user context.&lt;br /&gt;
&lt;br /&gt;
==Assigning a role==&lt;br /&gt;
&lt;br /&gt;
[[Image:Roles Assign Student.JPG|thumb|Assigning users the role of student i.e. enrolling them on the course]]&amp;quot;Student&amp;quot;, &amp;quot;Teacher&amp;quot;, &amp;quot;Course Creator&amp;quot; are some of the predefined roles that come with Moodle. The site administrator may have created additional roles.&lt;br /&gt;
To assign a role:&lt;br /&gt;
#Choose the type of role you wish to assign. For example, if we wanted to assign a Student role to Martin, we&#039;d choose &amp;quot;Student&amp;quot; from the list of roles. &lt;br /&gt;
#Once you have chosen a role, two lists appear: a list of users who currently have that role (Student Demo in the example), and a list of users who don&#039;t. We can select Martin in the second list, and use the left-facing arrow button to add Martin to the list of Students. Multiple users may be selected by holding down the Apple or Ctrl key whilst clicking on the users&#039; names.&lt;br /&gt;
&lt;br /&gt;
Removing someone from a role is done by moving the user from the left column to the right.&lt;br /&gt;
&lt;br /&gt;
==Hidden assignments==&lt;br /&gt;
&lt;br /&gt;
To hide which role a user is assigned to, click the Hidden assignments check box before assigning the role to the user. This feature is useful for example if you don&#039;t want everyone with teacher rights listed in the course description.  This feature is also very useful for hiding system wide roles from everyone else on the site.&lt;br /&gt;
&lt;br /&gt;
Note: The role assignment is not hidden from admins or teachers i.e. users with the [[Capabilities/moodle/role:viewhiddenassigns|viewhiddenassigns capability]].&lt;br /&gt;
&lt;br /&gt;
==Enabling teachers to assign the role of teacher==&lt;br /&gt;
&lt;br /&gt;
By default, teachers are only allowed to assign the roles of non-editing teacher, student and guest. To enable teachers to assign the role of teacher:&lt;br /&gt;
&lt;br /&gt;
#Access &#039;&#039;Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Define roles&#039;&#039;.&lt;br /&gt;
#Click the tab &amp;quot;Allow role assignments&amp;quot;.&lt;br /&gt;
#Click the checkbox where the teacher row and column intersect.&lt;br /&gt;
#Click the &amp;quot;Save changes&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==Beware of assignments that don&#039;t make sense==&lt;br /&gt;
&lt;br /&gt;
There are many role assignments that do not make sense as the underlying functionality does not exist. Just because you give someone the &amp;quot;right&amp;quot; to do something does not guarantee that the interface or facility actually exists within the context that you have assigned that right. For example, you can assign a user the right to create new categories in the category context, however there is no interface within Moodle to do that (category creation is only available at the system level).&lt;br /&gt;
&lt;br /&gt;
Note: Users should only be assigned the role of [[Administrator role|administrator]] (i.e. a role with the capability [[Capabilities/moodle/site:doanything|moodle/site:doanything]] set to allow) in the system context. Users should only be assigned the role of [[Course creator role|course creator]] in the system or a course category context.&lt;br /&gt;
&lt;br /&gt;
==Multiple assignments==&lt;br /&gt;
&lt;br /&gt;
A significant part of the roles infrastructure is the ability to assign a user into multiple roles (at the same time). The capabilities of each role are merged to produce the effective set of capabilities. In particular it is perfectly possible for a user to be both a Teacher and Student in the same course. This differs from the behavior of Moodle prior to the introduction of roles. You should be careful to ensure that if you change a user&#039;s role that you remove them from any other roles as required as this will no longer be done automatically.&lt;br /&gt;
&lt;br /&gt;
==System roles==&lt;br /&gt;
&lt;br /&gt;
Roles assigned in the site (1.7) or system context (1.8 onwards) are called system roles and apply across the entire site, including the front page. For example, a user assigned the system role of teacher will have this role in every course on the site.&lt;br /&gt;
&lt;br /&gt;
In many sites only admins and course creators will be assigned system roles.&lt;br /&gt;
&lt;br /&gt;
The [[Blogger role]] is an example of a system role.&lt;br /&gt;
&lt;br /&gt;
==Front page roles==&lt;br /&gt;
&lt;br /&gt;
You can assign roles and set up role overrides for your front page in exactly the same way as for a course.&lt;br /&gt;
&lt;br /&gt;
There are various ways of enabling logged-in users to participate in front page activities, depending on your Moodle version. See the [[Roles FAQ]] for details.&lt;br /&gt;
&lt;br /&gt;
==Assigning a role for a front page activity==&lt;br /&gt;
&lt;br /&gt;
In versions of Moodle prior to 1.9.4, only users who are assigned front page roles appear in the list of potential users when assigning a role for a front page activity.&lt;br /&gt;
&lt;br /&gt;
To assign a user a role for a front page activity:&lt;br /&gt;
# Assign the user a front page role, such as student, in &#039;&#039;Administration &amp;gt; Front Page &amp;gt; Front Page roles&#039;&#039;.&lt;br /&gt;
# Click the &amp;quot;Locally assigned roles&amp;quot; tab in editing activity page for the front page activity.&lt;br /&gt;
# Choose the type of role you wish to assign.&lt;br /&gt;
# Use the left-facing arrow button to add a particular user to the list of users with the role.&lt;br /&gt;
&lt;br /&gt;
If a user is unassigned from a front page role AFTER being assigned a role for a front page activity, they remain assigned the role for the front page activity.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Manage roles]] - for administrators&lt;br /&gt;
*[[Useful things a teacher can do with roles]]&lt;br /&gt;
&lt;br /&gt;
Using Moodle forum discussions:&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=59900 Discrepancies between Assign Roles lists and Participants list]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=66782 What happens if a user has multiple roles in a course?]&lt;br /&gt;
&lt;br /&gt;
[[Category:Teacher]]&lt;br /&gt;
[[Category:Roles]]&lt;br /&gt;
&lt;br /&gt;
[[cs:Přidělení rolí]]&lt;br /&gt;
[[de:Rollen zuweisen]]&lt;br /&gt;
[[es:Asignar_roles]]&lt;br /&gt;
[[eu:Rolak_esleitu]]&lt;br /&gt;
[[fr:Attribuer des rôles]]&lt;br /&gt;
[[ja:ロールの割り当て]]&lt;br /&gt;
[[ru:Назначение ролей]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=CVS_for_Administrators&amp;diff=81013</id>
		<title>CVS for Administrators</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=CVS_for_Administrators&amp;diff=81013"/>
		<updated>2011-02-02T09:21:47Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: The CLEO/LUNS mirror is being retired&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://cvs.moodle.org/ CVS archive] contains all the source code for Moodle. You can use a CVS program to extract versions ranging from the most stable release to the most cutting-edge development version. CVS can be an extremely convenient way of maintaining a Moodle server.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cvstree.png|CVS tree]]&lt;br /&gt;
&lt;br /&gt;
Developers may have selective write access to the Moodle CVS archive (see [[CVS for Developers]] for details about how to do this). However, most people only need read-only access, so they can just connect to one of the mirrors using &#039;&#039;&#039;anonymous CVS&#039;&#039;&#039; as described below. There can however currently be a delay of up to 1 hour between the time a developer commits changes to developer CVS and the time it becomes available on anonymous CVS. &lt;br /&gt;
&lt;br /&gt;
==CVS Servers==&lt;br /&gt;
&lt;br /&gt;
Please choose the closest CVS mirror server to you from this list:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Country&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Server&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Provided by&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|EU&lt;br /&gt;
|&#039;&#039;&#039;eu.cvs.moodle.org&#039;&#039;&#039;&lt;br /&gt;
|[http://www.open.ac.uk/ The Open University] In case of trouble, contact [mailto:r.t.c.norfor@open.ac.uk Rod Norfor] or [mailto:d.a.woolhead@open.ac.uk Derek Woolhead]&lt;br /&gt;
|-&lt;br /&gt;
|ES&lt;br /&gt;
|&#039;&#039;&#039;es.cvs.moodle.org&#039;&#039;&#039;&lt;br /&gt;
|[http://www.mondragon.edu/ Mondragon Unibertsitatea] In case of trouble, contact [mailto:iarenuno@eteo.mondragon.edu iarenuno@eteo.mondragon.edu] or [mailto:iarenaza@escomposlinux.org iarenaza@escomposlinux.org]&lt;br /&gt;
|-&lt;br /&gt;
|UK&lt;br /&gt;
|&#039;&#039;&#039;uk.cvs.moodle.org&#039;&#039;&#039;&lt;br /&gt;
|[http://www.open.ac.uk/ The Open University] In case of trouble, contact [mailto:r.t.c.norfor@open.ac.uk Rod Norfor] or [mailto:d.a.woolhead@open.ac.uk Derek Woolhead]&lt;br /&gt;
|-&lt;br /&gt;
|US&lt;br /&gt;
|&#039;&#039;&#039;us.cvs.moodle.org&#039;&#039;&#039;&lt;br /&gt;
|San Francisco State University, Academic Technology ([http://www.sfsu.edu/ SFSU]). In case of trouble, contact [mailto:ilearn@sfsu.edu iLearn support]&lt;br /&gt;
|-&lt;br /&gt;
|US&lt;br /&gt;
|&#039;&#039;&#039;us2.cvs.moodle.org&#039;&#039;&#039;&lt;br /&gt;
|[http://www.contractorsinstitute.com The Contractors Institute] pserver and viewvc. In case of trouble contact [mailto:cvs@contractorsinstitute.com network support].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Replace the SERVER.cvs.moodle.org in the instructions below with the server you chose above!&lt;br /&gt;
&lt;br /&gt;
For up-to-date alerts about planned or unplanned outages on any of these servers subscribe to the [http://lists.moodle.org/info/outages Moodle Outage mailing list]. See [http://moodle.org/stats/network.php moodle.org/stats/network.php] for server availability.&lt;br /&gt;
&lt;br /&gt;
(If you would like to contribute to the project by running a mirror, please see [[How to set up a CVS mirror]])&lt;br /&gt;
&lt;br /&gt;
==Moodle versions and CVS branches==&lt;br /&gt;
&lt;br /&gt;
CVS stores every version of Moodle there has ever been. Versions are organised into branches as in the diagram at the top of this page. There is one branch for each series of stable releases, so the 1.9.x releases all come from the MOODLE_19_STABLE branch.&lt;br /&gt;
&lt;br /&gt;
Along that branch, each actual release is marked with a tag. For example the Moodle 1.9 release is tagged MOODLE_19, and the 1.9.1 release is MOODLE_191. The latest 1.9.x+ weekly build is always tagged MOODLE_19_WEEKLY.&lt;br /&gt;
&lt;br /&gt;
The latest development version is what all the stable branches branch away from. It is sometimes called HEAD or TRUNK. At the moment (mid 2009) this is the development version of Moodle 2.0, but around the time we get to the Moodle 2.0 beta release we will create the MOODLE_20_STABLE branch, and HEAD will become 2.1 dev.&lt;br /&gt;
&lt;br /&gt;
As explained below you when you do a CVS checkout, you choose which version you want.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installing and maintaining Moodle via CVS==&lt;br /&gt;
&lt;br /&gt;
===From a Unix computer===&lt;br /&gt;
&lt;br /&gt;
To connect and login for the first time to the CVS server, you can use this command (remember to replace &#039;&#039;&#039;SERVER.cvs.moodle.org&#039;&#039;&#039; in the instructions below with the mirror server you chose above):&lt;br /&gt;
&lt;br /&gt;
 cvs -d:pserver:anonymous@SERVER.cvs.moodle.org:/cvsroot/moodle login&lt;br /&gt;
&lt;br /&gt;
There is no password - when asked for one, just hit Enter.&lt;br /&gt;
&lt;br /&gt;
To checkout (download) the entire Moodle code for the first time, use this command to get the latest WEEKLY version (generally the latest, most bug free version):&lt;br /&gt;
&lt;br /&gt;
 cvs -z3 -d:pserver:anonymous@SERVER.cvs.moodle.org:/cvsroot/moodle co -P -r MOODLE_19_WEEKLY moodle&lt;br /&gt;
&lt;br /&gt;
Or the latest development version - sometimes called HEAD - (not for production use):&lt;br /&gt;
&lt;br /&gt;
 cvs -z3 -d:pserver:anonymous@SERVER.cvs.moodle.org:/cvsroot/moodle co -P moodle&lt;br /&gt;
&lt;br /&gt;
Or the modules in Contrib&lt;br /&gt;
&lt;br /&gt;
 cvs -z3 -d:pserver:anonymous@SERVER.cvs.moodle.org:/cvsroot/moodle co contrib&lt;br /&gt;
&lt;br /&gt;
Later, to update your local copy of Moodle to the current version in CVS you just need to go into your local Moodle directory and type:&lt;br /&gt;
&lt;br /&gt;
 cvs update -dP&lt;br /&gt;
&lt;br /&gt;
To update your local copy of Moodle to a new version (e.g. from 1.8+ to 1.9), go into your local Moodle directory and type:&lt;br /&gt;
&lt;br /&gt;
 cvs update -dP -r MOODLE_19_STABLE&lt;br /&gt;
&lt;br /&gt;
To update your local copy of Moodle to a version from a specific date (e.g. 4th February 2009), go into your local Moodle directory and type:&lt;br /&gt;
&lt;br /&gt;
  cvs -q update -dP -r MOODLE_19_STABLE -D &amp;quot;4 Feb 2009&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To update your local copy and to save the log of the process, use the following command instead the previous one:&lt;br /&gt;
&lt;br /&gt;
 cvs update -dP -r MOODLE_19_STABLE | tee upgrade.log&lt;br /&gt;
&lt;br /&gt;
Then look at the upgrade.log, notably look for lines starting with &amp;quot;C&amp;quot; (conflict):&lt;br /&gt;
&lt;br /&gt;
 grep &#039;^C&#039; upgrade.log&lt;br /&gt;
&lt;br /&gt;
Conflicts may appear in case you have manually modified your source files. You have to resolve conflicts before using the site. See [[CVS for Developers]] for more details.&lt;br /&gt;
&lt;br /&gt;
===Changing the directory name===&lt;br /&gt;
&lt;br /&gt;
By default, the CVS checkout creates a directory on your webserver called &#039;moodle&#039;. If you want your Moodle installation in a different directory, you can change the name of the directory that it will checkout the files to, by typing the following. This would download the MOODLE_19_STABLE branch into a directory called &amp;quot;mydirectory&amp;quot; (-d mydirectory).&lt;br /&gt;
&lt;br /&gt;
 cvs -z3 -d:pserver:anonymous@SERVER.cvs.moodle.org:/cvsroot/moodle co -P &#039;&#039;&#039;-d mydirectory&#039;&#039;&#039; -r MOODLE_19_STABLE moodle&lt;br /&gt;
&lt;br /&gt;
Or the latest development version to a directory called &#039;moodle-dev&#039;:&lt;br /&gt;
&lt;br /&gt;
 cvs -z3 -d:pserver:anonymous@SERVER.cvs.moodle.org:/cvsroot/moodle co -P &#039;&#039;&#039;-d moodle-dev&#039;&#039;&#039; moodle&lt;br /&gt;
&lt;br /&gt;
You can also change the name of the directory after the files are downloaded, and before you go through the Moodle install process. If you change the name of the directory before install, it will not affect anything during the install or during a CVS update. If you change the name of the directory after an install, you will need to change the config.php to reflect the name change ([[Moodle_migration#Migrating_a_complete_Moodle_site|guidance here]]). It won&#039;t affect the CVS update though.&lt;br /&gt;
&lt;br /&gt;
===Change directory owner===&lt;br /&gt;
&lt;br /&gt;
Depending on your webserver setup, you may well need to change the owner of the directory to the webserver user. Follow this step if you get permissions error when you try to access the page. For apache:&lt;br /&gt;
  &lt;br /&gt;
  chown -R www-data:www-data moodle&lt;br /&gt;
&lt;br /&gt;
===From a Windows computer===&lt;br /&gt;
&lt;br /&gt;
To get started with a fresh copy of Moodle, follow the following steps (remember to replace  &#039;&#039;&#039;SERVER.cvs.moodle.org&#039;&#039;&#039; in the instructions below with the mirror server you chose above):[[Image:CVS moodle settings for tortoise CVS.jpg|thumb|Tortoise CVS Screen capture]]&lt;br /&gt;
[[Image:Ecran cvs.jpg|thumb|Tortoise CVS (real name) Screen capture]]&lt;br /&gt;
# Get TortoiseCVS from [http://www.tortoisecvs.org/ tortoisecvs.org] and install it, then reboot.&lt;br /&gt;
# Find or create a new folder somewhere where you want Moodle to be downloaded to.&lt;br /&gt;
# Right-mouse-click that folder and choose &amp;quot;CVS Checkout&amp;quot; from the menu. You should see a dialog box. &lt;br /&gt;
# Copy this text into the CVSROOT field: &amp;lt;code&amp;gt;:pserver:anonymous@SERVER.cvs.moodle.org:/cvsroot/moodle&amp;lt;/code&amp;gt;&lt;br /&gt;
#* NOTE - replace &amp;quot;SERVER&amp;quot; with &amp;quot;eu&amp;quot;, &amp;quot;es&amp;quot;, &amp;quot;uk&amp;quot; or &amp;quot;us&amp;quot; depending on your location.&lt;br /&gt;
# Under the &amp;quot;Module&amp;quot; field, type &amp;quot;moodle&amp;quot; to get moodle. (Other options here include&amp;quot;contrib&amp;quot; to get the contrib directory of hacks and addons, or &amp;quot;mysql&amp;quot; to get the optional MySQL Admin module).&lt;br /&gt;
#* For the latest STABLE version, click on the &amp;quot;Revision&amp;quot; tab and then check the radio button labelled &amp;quot;Choose branch or tag&amp;quot;. From the drop-down menu select MOODLE_18_STABLE.&lt;br /&gt;
#* If you don&#039;t see the very latest version in the long drop-down list under Branch or tag name, click the Update List button next to it and wait for the list to be updated.&lt;br /&gt;
#* For the latest UNSTABLE development version, the radio-button &amp;quot;Use HEAD branch&amp;quot; in the Revision tab should be checked.&lt;br /&gt;
# Press the button: &amp;quot;OK&amp;quot; and everything should be downloaded. &lt;br /&gt;
&lt;br /&gt;
Later, to update your local copy of Moodle to the current version in CVS, just right-mouse-click the folder and choose &amp;quot;CVS Update&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Note that the enclosing moodle folder is self-contained - you can move it anywhere you like or even rename it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE.-&#039;&#039;&#039; Admins with a developer account on cvs.moodle.org can connect with their account name, see attached screen shot.&lt;br /&gt;
&lt;br /&gt;
===From a Mac OS X computer===&lt;br /&gt;
You will find useful informations about CVS and Mac OS X  in the documentation for the complete installation package Moodle4Mac and for the Mac OS X Server installation. &lt;br /&gt;
&lt;br /&gt;
Please read [[Complete_Install_Packages_for_Mac_OS_X#How_To_Update_Your_Moodle4Mac | How to update your Moodle4Mac]] or [[Step_by_Step_Installation_on_a_Mac_OS_X_Server#How_to_install_and_update_Moodle_via_CVS | How to install and to update Moodle via CVS]]. It works fine with the Moodle CVS servers.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
&lt;br /&gt;
If you see something like this, make sure that there is not some firewall blocking the port (it&#039;s 2401):&lt;br /&gt;
&lt;br /&gt;
 $ cvs -d:pserver:anonymous@us.cvs.moodle.org:/cvsroot/moodle login&lt;br /&gt;
 Logging in to :pserver:anonymous@us.cvs.moodle.org:2401/cvsroot/moodle&lt;br /&gt;
 CVS password:&lt;br /&gt;
 cvs [login aborted]: connect to us.cvs.moodle.org(130.212.64.111):2401 failed: Connection timed out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Switching to a new CVS server==&lt;br /&gt;
&lt;br /&gt;
If you were &#039;&#039;already&#039;&#039; using CVS and want to switch to a different server, you&#039;ll probably need to make a small change so that the control files in your working copy will point to the new mirrors. &lt;br /&gt;
&lt;br /&gt;
===Switching to a new server on Unix===&lt;br /&gt;
&lt;br /&gt;
Use a shell command like this to change existing installations to point to the new mirror (UK mirror used in this example):&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;find . -type f -name Root -print0 | xargs -0 perl -pi -e &#039;s/\@moodle\.cvs\.sourceforge\.net/\@uk\.cvs\.moodle\.org/&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It can be run from /home, say, to fix multiple sites at once.&lt;br /&gt;
&lt;br /&gt;
===Switching to a new server with TortoiseCVS===&lt;br /&gt;
&lt;br /&gt;
If you were &#039;&#039;already&#039;&#039; using Tortoise CVS on Windows it&#039;s tricky, because Tortoise doesn&#039;t have any interface for changing the server.  http://www.tortoisecvs.org/faq.html#changecvsroot explains it.  But basically, &lt;br /&gt;
&lt;br /&gt;
 1) Install WinCVS and launch it. &lt;br /&gt;
 2) Navigate to and select your Moodle folder. &lt;br /&gt;
 3) Choose &#039;Macros&#039;-&amp;gt;CVS-&amp;gt;Change Root from the menu.  &lt;br /&gt;
 4) Accept (or change) the default for the &#039;old&#039; server. &lt;br /&gt;
 5) Type the new server name. OK!  &lt;br /&gt;
&lt;br /&gt;
It takes a few seconds to go through all of the &#039;&#039;&#039;cvs&#039;&#039;&#039; folders and update the &#039;&#039;&#039;root&#039;&#039;&#039; files.&lt;br /&gt;
&lt;br /&gt;
By the way, if you don&#039;t want to install WinCVS, another way of doing this is to uninstall your TortoiseCVS client on Windows, then do a regedit to clean up all the tortoisecvs related entries (might not be necessary), then reinstall TortoiseCVS client again (a good reason to upgrade to the most recent version of TortoiseCVS!). I have tested this and it cleared up the original setting of the original anonymous CVS server setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Talk:CVS for Administrators]]&lt;br /&gt;
*[[Development:CVS_for_developers|CVS for developers]]&lt;br /&gt;
*[[Development:Setting up Eclipse]] for step by step instructions for setting up the [http://www.eclipse.org/ Eclipse IDE] for Moodle development, which including how to do the necessary CVS operations&lt;br /&gt;
*[[Development:Setting up Netbeans]] step by step instructions for those who prefer the [http://netbeans.org/ NetBeans IDE]. NetBeans comes with integrated CVS support.&lt;br /&gt;
* [[Development:Tracking Moodle CVS with git]]&lt;br /&gt;
Using Moodle forum discussions:&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=26731&amp;amp;parent=125858 Using cvs]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=91891 CVS Updating of 3rd-Party Plug-ins in the Moodle folder itself]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=108196 simple question for cvs]&lt;br /&gt;
&lt;br /&gt;
[[Category:Administrator]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Developer tools]]&lt;br /&gt;
&lt;br /&gt;
[[de:CVS für Administratoren]]&lt;br /&gt;
[[fr:CVS pour administrateurs]]&lt;br /&gt;
[[ja:管理者用CVS]]&lt;br /&gt;
[[ru:CVS для администраторов]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Moodle_2.0_release_notes&amp;diff=78065</id>
		<title>Moodle 2.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Moodle_2.0_release_notes&amp;diff=78065"/>
		<updated>2010-11-23T09:48:52Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: Corrected my email domain&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work_in_progress}}&lt;br /&gt;
&lt;br /&gt;
Expected final release date: &#039;&#039;&#039;November, 2010&#039;&#039;&#039; (if testing goes well)&lt;br /&gt;
&lt;br /&gt;
Moodle 2.0 contains a lot of large new features, some completely rewritten features, and hundreds of bug fixes.  For full details (more than you probably want!), see [http://tracker.moodle.org/browse/MDL/fixforversion/10122 the full list of fixed issues in 2.0].&lt;br /&gt;
&lt;br /&gt;
This page is a summary of the major things to look for.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Major new features==&lt;br /&gt;
&lt;br /&gt;
===[[Community hub|Community hubs]]===&lt;br /&gt;
&lt;br /&gt;
* Anybody can set up a Community hub, which is a directory of courses for public use or for private communities.  The code is implemented as separate GPL plugin for Moodle.&lt;br /&gt;
* Sites can register to any Community hub (instead of just moodle.org)&lt;br /&gt;
* Teachers on registered sites can publish their full courses to Community hubs, for download&lt;br /&gt;
* Teachers on registered sites can also advertise their courses on Community hubs, for people to join&lt;br /&gt;
* Teachers on any site can search all public Community hubs and download courses as templates for their own courses&lt;br /&gt;
* Users on any Moodle site can also search Community hubs for courses (and communities of practice) to participate in.  Initially we are encouraging &#039;&#039;&#039;&#039;communities of teaching practice&#039;&#039;&#039;&#039; but any sort of course can be listed.&lt;br /&gt;
&lt;br /&gt;
===[[Repositories|Repository support]]===&lt;br /&gt;
&lt;br /&gt;
* Moodle now supports integration with external repositories of content, making it really simple to bring documents and media into Moodle via an AJAX interface that looks like a standard &#039;&#039;&#039;Open&#039;&#039;&#039; dialogue in desktop applications.&lt;br /&gt;
* Initial plugins in 2.0 include: Alfresco, Amazon S3, Box.net, File system on Server, Flickr, Google Docs, Mahara, MERLOT, Picasa, Recent Files, Remote Moodle sites, WebDAV servers, Wikimedia, Youtube.  These are simple to develop, so many more are expected.&lt;br /&gt;
* You can also import files from your desktop or by specifying a URL.&lt;br /&gt;
&lt;br /&gt;
===[[Portfolios|Portfolio support]]===&lt;br /&gt;
&lt;br /&gt;
* Modules can now export their data to external systems, particularly useful for portfolios where snapshots of forums, assignments and other things in Moodle are useful to record in a journal or a portfolio of evidence&lt;br /&gt;
* Different formats are supported (currently LEAP2A, HTML, Images and Text, but others like PDF can be added)&lt;br /&gt;
* Initial plugins in 2.0 include: Box.net, Flickr, Google Docs, &#039;&#039;&#039;Mahara&#039;&#039;&#039; and Picasa.&lt;br /&gt;
&lt;br /&gt;
===[[Completion]]===&lt;br /&gt;
&lt;br /&gt;
* Teachers can now specify conditions that define when any &#039;&#039;&#039;activity&#039;&#039;&#039; is seen as completed by a student.  For example, when a certain number of posts have been made, or a grade has been reached, or a choice has been made.  &lt;br /&gt;
* Teachers can now specify conditions that define with any &#039;&#039;&#039;course&#039;&#039;&#039; is seen as completed by a student.  Conditions include activity completion, but could also be by grade, date or a number of other criteria.&lt;br /&gt;
* Teachers and students can see reports that show the progress of any user within a course, or through a series of courses.&lt;br /&gt;
&lt;br /&gt;
===[[Conditional activities]]===&lt;br /&gt;
&lt;br /&gt;
* Access to activities can be restricted based on certain criteria, such as dates, grade obtained, or the completion of another activity.  &lt;br /&gt;
* These can be chained together to enable progressive disclosure of the course content, if that is desired. &lt;br /&gt;
&lt;br /&gt;
===[[Cohorts]]===&lt;br /&gt;
* Also known as &amp;quot;Site-wide groups&amp;quot;, these are site-wide collections of users that can be enrolled into courses in one action, either manually or synchronised automatically&lt;br /&gt;
&lt;br /&gt;
===[[Web Services|Web services support]]===&lt;br /&gt;
* Support for standards-based web services across the entire Moodle code base, allowing the admin to expose particular functions of Moodle for use by:&lt;br /&gt;
** Administrative systems such as HR or SIS applications&lt;br /&gt;
** Mobile clients&lt;br /&gt;
* Framework contains a very high-level of security with a detailed token system and complete control over the range of functions exposed&lt;br /&gt;
* All defined functions are automatically available via:&lt;br /&gt;
** XML-RPC&lt;br /&gt;
** AMF (Flash)&lt;br /&gt;
** REST&lt;br /&gt;
** SOAP (PHP)&lt;br /&gt;
&lt;br /&gt;
===[[IMS Common Cartridge import|IMS Common Cartridge]]===&lt;br /&gt;
* Moodle can now import courses in IMS Common Cartridge format (commonly used by publishers)&lt;br /&gt;
&lt;br /&gt;
===New blocks===&lt;br /&gt;
* [[Comments block]] - like a shoutbox, allows comments to be added to any page. Great for student feedback.&lt;br /&gt;
* [[My private files block]] - allows easy access to one&#039;s private file repository in Moodle (with quota support)&lt;br /&gt;
* [[Community block]] - keeps track of external courses one is interested in &lt;br /&gt;
* [[Course completion status block]] - reports on the completion status of your courses&lt;br /&gt;
&lt;br /&gt;
===[[Plagiarism Prevention|Plagiarism prevention]]===&lt;br /&gt;
&lt;br /&gt;
* Moodle supports integration with plagiarism prevention tools such as Turnitin&lt;br /&gt;
&lt;br /&gt;
==Major improvements to existing core features==&lt;br /&gt;
&lt;br /&gt;
===[[Backup 2.0|Backup and restore]]===&lt;br /&gt;
&lt;br /&gt;
* Completely rewritten Backup/Restore framework, no longer bound by memory (can work with &#039;&#039;&#039;any size course&#039;&#039;&#039;).&lt;br /&gt;
* Completely new backup format.&lt;br /&gt;
* Improved interface.&lt;br /&gt;
* Backup can be made of whole courses, but also specific sections or activities.&lt;br /&gt;
&lt;br /&gt;
===[[Blocks 2.0|Blocks]]===&lt;br /&gt;
* Blocks are now consistently implemented on every page in Moodle&lt;br /&gt;
* No longer any limit to the block regions (in addition to left and right, put them at the top, center or bottom of pages)&lt;br /&gt;
* Any block can be made sticky (appears in all the contexts below, eg throughout a course).&lt;br /&gt;
* Blocks can be &amp;quot;docked&amp;quot; on the side of the screen (if the theme supports it)&lt;br /&gt;
&lt;br /&gt;
===[[Blogs 2.0|Blogs]]===&lt;br /&gt;
* Support for comments on each blog entry&lt;br /&gt;
* Removal of group-level and course-level blogs (these are converted into forums on upgrade)&lt;br /&gt;
* Support for external blog feeds (synchronised to Moodle blog)&lt;br /&gt;
&lt;br /&gt;
===[[Comments 2.0|Comments]]===&lt;br /&gt;
* User comments (Glossaries, Databases, Blogs, etc) are now all consistently handled  and displayed throughout Moodle, using AJAX if available&lt;br /&gt;
&lt;br /&gt;
===[[Enrolments 2.0|Enrolment plugins]]===&lt;br /&gt;
* Major improvements in the handling of guests and guest accounts &lt;br /&gt;
* Support for multiple forms of enrolment at the same time &lt;br /&gt;
* More detailed control over enrolment in courses &lt;br /&gt;
&lt;br /&gt;
===[[File handling 2.0|File handling]]===&lt;br /&gt;
&lt;br /&gt;
* Full support for Unicode file names on all operating systems.&lt;br /&gt;
* Metadata about each file (author, date, license, etc) and what the file is used for are stored in the database.&lt;br /&gt;
* Duplicate files (for example, a large video file use in two different courses) are only stored once, saving disk space.&lt;br /&gt;
* Files are no longer just &amp;quot;uploaded to the course&amp;quot;.  Files are connected to the particular bit of Moodle content that uses them. (For example, a file may belong to a file resource, a forum post or a wiki page). Access to these files is then controlled by the same rules as as that bit of Moodle, increasing security.&lt;br /&gt;
&lt;br /&gt;
===[[Filters 2.0]]===&lt;br /&gt;
&lt;br /&gt;
* In the past, you had to use the same filters everywhere in your Moodle site, and this could only be changed by admins.&lt;br /&gt;
* Now, you can have different filters in different courses, activities or categories.&lt;br /&gt;
* For example, you could turn on the LaTeX filter just for courses in the Maths and Physics categories.&lt;br /&gt;
* Or you could turn off glossary linking in the end of course exam.&lt;br /&gt;
&lt;br /&gt;
===[[HTML editor 2.0|HTML editor]]===&lt;br /&gt;
* New editor based on TinyMCE&lt;br /&gt;
* Works on more browsers&lt;br /&gt;
* Resizable editing area&lt;br /&gt;
* Cleaner XHTML output &lt;br /&gt;
* Full integration with configured external repositories to import and embed media into text&lt;br /&gt;
&lt;br /&gt;
===[[Messaging 2.0|Messaging]]===&lt;br /&gt;
* All email sent by Moodle is now treated as a message&lt;br /&gt;
* A message overview panel allows users to control how messages are sent to them&lt;br /&gt;
* Initial message output plugins in Moodle 2.0 include: Email, Jabber and Popups&lt;br /&gt;
&lt;br /&gt;
===[[My Moodle 2.0|My Moodle page]]===&lt;br /&gt;
* More customisable My Moodle page with new blocks for showing relevant information &lt;br /&gt;
* Admin can design (and optionally force) site-wide layouts for My Moodle&lt;br /&gt;
* My Moodle page given more prominence as the main &amp;quot;home page&amp;quot; for users&lt;br /&gt;
&lt;br /&gt;
===[[Navigation 2.0|Navigation]]===&lt;br /&gt;
* Standard &amp;quot;Navigation&amp;quot; block on every page showing contextual links, while allowing you to jump elsewhere quickly&lt;br /&gt;
* Standard &amp;quot;Settings&amp;quot; blocks on every page shows contextual settings as well as settings for anything else you have permissions for&lt;br /&gt;
&lt;br /&gt;
===[[Ratings 2.0|Ratings]]===&lt;br /&gt;
* User ratings (Glossaries, Databases, Forums, etc) are now all consistently handled and displayed throughout Moodle, using AJAX if available&lt;br /&gt;
* Aggregation of using ratings into activity grades is now standardised in all activities&lt;br /&gt;
&lt;br /&gt;
===[[Roles 2.0|Roles and permissions]]===&lt;br /&gt;
* Improved and simplified AJAX interfaces for defining and assigning roles&lt;br /&gt;
* Improved and simplified interfaces for tweaking permissions in any given context &lt;br /&gt;
* New &amp;quot;Archetypes&amp;quot; concept replacing the &amp;quot;Legacy roles&amp;quot; concept.&lt;br /&gt;
* New archetype &amp;quot;manager&amp;quot; to define the role of most people with system-wide editing rights, separate from &amp;quot;admin&amp;quot; role.&lt;br /&gt;
&lt;br /&gt;
===[[RSS feeds 2.0|RSS feeds]]===&lt;br /&gt;
* All RSS feeds are now secured using a random per-user token in the URL&lt;br /&gt;
* Tokens can be updated by the user at any time (if they suspect a feed URL has been compromised)&lt;br /&gt;
* RSS feeds are now more accurate (eg they support forums with separate groups), and are generated efficiently whenever required&lt;br /&gt;
&lt;br /&gt;
===[[Development:Themes 2.0|Themes]]===&lt;br /&gt;
* Many new themes in the core distribution - see [[Theme credits]] for a list&lt;br /&gt;
* All HTML and JS ouput is now far more efficient (server-side caching) and consistent (tableless layout, new CSS, YUI Framework)&lt;br /&gt;
* Themes can change the HTML of the page if they wish&lt;br /&gt;
* Core support for custom menus in all themes (for example at the top of the page)&lt;br /&gt;
&lt;br /&gt;
===[[Translation 2.0|Translation system]]===&lt;br /&gt;
* [http://lang.moodle.org/ New web portal] to make it easer for groups to collaborate on translating Moodle, and to keep their translations up-to-date.&lt;br /&gt;
* More efficient [[Development:Languages/AMOS|storage format for language strings]] should slightly improve performance.&lt;br /&gt;
&lt;br /&gt;
===User profile pages===&lt;br /&gt;
* Site-wide user profile page can be customised by users with blocks, news, feeds and so on&lt;br /&gt;
* Course-specific user profile pages show course blocks and standard profile information, plus information for teachers of that course&lt;br /&gt;
&lt;br /&gt;
==Major improvements to activity modules==&lt;br /&gt;
&lt;br /&gt;
===Lesson===&lt;br /&gt;
* Refactored internal code &lt;br /&gt;
* Forms are now standard Moodle forms&lt;br /&gt;
&lt;br /&gt;
===Quiz module and question bank===&lt;br /&gt;
&lt;br /&gt;
* [[Development:quiz_navigation|Quiz navigation improvements for students]]&lt;br /&gt;
* [[Development:Flagging_questions_during_a_quiz_attempt|Flagging questions during a quiz attempt]] &lt;br /&gt;
* [[Development:Quiz_report_enhancements|Quiz report enhancements]] - Major improvements to the quiz reports, especially regrading and item analysis&lt;br /&gt;
* [[Development:Quiz_report_statistics|Quiz report statistics]] - A brief guide&lt;br /&gt;
* [[Development:Quiz_UI_redesign|Quiz editing interface improvements]]&lt;br /&gt;
* Different settings (open/close date, number of attempts, password, time limit) for each group or student (MDL-16478)&lt;br /&gt;
* [[Development:Administration page for question types|Administration page for question types]]&lt;br /&gt;
* [[Development:Moodle 2.0 question bank improvements|Question tagging and improved searching in the question bank]]&lt;br /&gt;
* MDL-8648 Essay questions can now be randomised by random questions&lt;br /&gt;
&lt;br /&gt;
===Resource===&lt;br /&gt;
* All the resource types have been refactored into real modules, and cleaned up&lt;br /&gt;
** File - for displaying a file, possibly with supporting files (like a HTML mini-site)&lt;br /&gt;
** Folder - for displaying a collection of documents &lt;br /&gt;
** URL - for displaying a page with a given URL&lt;br /&gt;
** Page - for a single page, edited online using the HTML editor&lt;br /&gt;
** IMS - for showing a regular IMS content package&lt;br /&gt;
* Better XHTML-compliant support for frames, iframes and embedding in all these modules&lt;br /&gt;
&lt;br /&gt;
===SCORM===&lt;br /&gt;
&lt;br /&gt;
* New [[SCORM module]] settings - display attempt status, display course structure, force completed, force new attempt, lock after final attempt - allowing the behaviour dictated to the SCORM object by the authoring package to be changed MDL-11501 &lt;br /&gt;
* New reporting interface including sortable/collapsible table with group select box and ability to download in Excel, ODS and text format MDL-21555&lt;br /&gt;
* New SCORM player UI with better navigation, improved performance and better handling of stage size MDL-22951&lt;br /&gt;
&lt;br /&gt;
===[[Wiki module 2.0|Wiki]]===&lt;br /&gt;
* Completely re-written from scratch, based on NWIki from UPC&lt;br /&gt;
* Support for Mediawiki-style syntax, as well as Creole &lt;br /&gt;
* Interface improvements &lt;br /&gt;
&lt;br /&gt;
===[[Workshop module 2.0|Workshop]]===&lt;br /&gt;
&lt;br /&gt;
* Completely rewritten from scratch &lt;br /&gt;
* Vastly improved interface for managing stages and users&lt;br /&gt;
&lt;br /&gt;
==System requirements==&lt;br /&gt;
&lt;br /&gt;
Since Moodle 2.0 is such a major release, we are allowing ourselves some increases in the requirements.&lt;br /&gt;
&lt;br /&gt;
* PHP must be 5.2.8 or later (it was released 08-Dec-2008)&lt;br /&gt;
* Databases should be one of the following:&lt;br /&gt;
** MySQL 5.0.25 or later  (InnoDB storage engine highly recommended)&lt;br /&gt;
** PostgreSQL 8.3 or later&lt;br /&gt;
** Oracle 10.2 or later&lt;br /&gt;
** MS SQL 2005 or later&lt;br /&gt;
* Any standards-supporting browser from the past few years, for example:&lt;br /&gt;
** Firefox 3 or later &lt;br /&gt;
** Safari 3 or later &lt;br /&gt;
** Google Chrome 4 or later&lt;br /&gt;
** Opera 9 or later&lt;br /&gt;
** MS Internet Explorer 7 or later (Even [http://googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html Google don&#039;t support IE6 any more])&lt;br /&gt;
** etc&lt;br /&gt;
&lt;br /&gt;
==Upgrading==&lt;br /&gt;
&lt;br /&gt;
When upgrading to Moodle 2.0, you must have Moodle 1.9 or later.  if you are using an earlier version of Moodle (eg 1.8.x) then you need to upgrade to Moodle 1.9.x first. We advise that you test the upgrade first on a COPY of your production site, to make sure it works as you expect.&lt;br /&gt;
&lt;br /&gt;
For further information, see [[Upgrading to Moodle 2.0]].&lt;br /&gt;
&lt;br /&gt;
==For developers: API changes==&lt;br /&gt;
&lt;br /&gt;
See [[Development:Migrating_contrib_code_to_2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Development:Plugin system changes in Moodle 2.0]] - all the different types of plugin are now handles more consistently when it comes to installation and upgrading, capabilities, events, and so on.&lt;br /&gt;
* [[Development:DB_layer_2.0_migration_docs|Database layer changes]] - you will need to update your code.&lt;br /&gt;
* [[Development:Using_the_file_API|File handling changes]] - you will need to update your code.&lt;br /&gt;
* [[Development:Migrating your code code to the 2.0 rendering API|Rendering layer changes]] - should be mostly backwards compatible, but you are advised to upgrade your code.&lt;br /&gt;
* Require capability used to do an automatic require_login. It no longer does so. All pages must explicitly call require_login if they need it. MDL-19882&lt;br /&gt;
* [[Development:Moodle_2.0_question_type_API_changes|Changes to the question type API]]&lt;br /&gt;
* MNet has been refactored and tidied up - related third party code needs to be checked&lt;br /&gt;
* Changes and improvements to the [[Development:Local_customisation|Local customisation system]].&lt;br /&gt;
* Javascript &lt;br /&gt;
* YUI&lt;br /&gt;
* custom profile fields values are loaded into $USER-&amp;gt;profile array instead of directly into $USER object&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
&lt;br /&gt;
These people made check-ins to Moodle 2.0 code.  Thanks to all of them, of course.  Some of these people represent a team of people who actually worked on the code.&lt;br /&gt;
&lt;br /&gt;
Robert Allerstorfer &amp;lt;anet.at&amp;gt;&lt;br /&gt;
Inaki Arenaza &amp;lt;eteo.mondragon.edu&amp;gt;&lt;br /&gt;
Aaron Barnes &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Gordon Bateson &amp;lt;kanazawa-gu.ac.jp&amp;gt;&lt;br /&gt;
John Beedell &amp;lt;open.ac.uk&amp;gt;&lt;br /&gt;
Aparup Banerjee &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Andrea Bicciolo &amp;lt;mtouch.it&amp;gt;&lt;br /&gt;
Anthony Borrow &amp;lt;jesuits.net&amp;gt;&lt;br /&gt;
Peter Bulmer &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Dongsheng Cai &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Matt Clarkson &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Nicolas Connault &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Andrew Davis &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Gustav Delius &amp;lt;york.ac.uk&amp;gt;&lt;br /&gt;
Martin Dougiamas &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Shane Elliott &amp;lt;shane@pukunui.com&amp;gt;&lt;br /&gt;
Ethem Evlice&lt;br /&gt;
Helen Foster &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Nicholas Freear &amp;lt;open.ac.uk&amp;gt;&lt;br /&gt;
Valery Fremaux&lt;br /&gt;
Dariem Garces&lt;br /&gt;
Andreas Grabs &amp;lt;grabs-edv.de&amp;gt;&lt;br /&gt;
Jenny Gray &amp;lt;open.ac.uk&amp;gt;&lt;br /&gt;
Jonathan Harker &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Piers Harding &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Lukas Haemmerle &amp;lt;switch.ch&amp;gt;&lt;br /&gt;
Sam Hemelryk &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Ashley Holman &amp;lt;netspot.com.au&amp;gt;&lt;br /&gt;
Luke Hudson &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Tim Hunt &amp;lt;open.ac.uk&amp;gt;&lt;br /&gt;
Urs Hunkler &amp;lt;unodo.de&amp;gt;&lt;br /&gt;
Mike Churchward &amp;lt;oktech.ca&amp;gt;&lt;br /&gt;
Wen Hao Chuang &amp;lt;gmail.com&amp;gt;&lt;br /&gt;
Samuli Karevaara &amp;lt;lamk.fi&amp;gt;&lt;br /&gt;
Michael Ketcham &amp;lt;microsoft.com&amp;gt;&lt;br /&gt;
Eloy Lafuente &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Martin Langhoff &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Penny Leach &amp;lt;liip.ch&amp;gt;&lt;br /&gt;
Patrick Malley &amp;lt;newschoollearning.com&amp;gt;&lt;br /&gt;
Dan Marsden &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Francois Marier &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Sam Marshall &amp;lt;open.ac.uk&amp;gt;&lt;br /&gt;
Donal McMullan &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Eric Merrill &amp;lt;oakland.edu&amp;gt;&lt;br /&gt;
Howard Miller  &amp;lt;e-learndesign.co.uk&amp;gt;&lt;br /&gt;
Gareth Morgan &amp;lt;open.ac.uk&amp;gt;&lt;br /&gt;
Jerome Mouneyrac &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
David Mudrak &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Jonathan Newman &amp;lt;catalyst.net.nz&amp;gt;&lt;br /&gt;
Mark Nielsen &amp;lt;moodlerooms.com&amp;gt;&lt;br /&gt;
Matt Oquist &amp;lt;majen.net&amp;gt;&lt;br /&gt;
Mathieu Petit-Clair &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Pierre Pichet &amp;lt;uqam.ca&amp;gt;&lt;br /&gt;
Roberto Pinna &amp;lt;mfn.unipmn.it&amp;gt;&lt;br /&gt;
Jordi Piguillem &amp;lt;upc.edu.es&amp;gt;&lt;br /&gt;
Dan Poltawski &amp;lt;luns.net.uk&amp;gt;&lt;br /&gt;
Jamie Pratt &amp;lt;jamiep.org&amp;gt;&lt;br /&gt;
Joseph Rezeau &amp;lt;rezeau.org&amp;gt;&lt;br /&gt;
Shamim Rezaie &amp;lt;rezaie.info&amp;gt;&lt;br /&gt;
Luis Rodrigues&lt;br /&gt;
Olli Savolainen&lt;br /&gt;
Petr Skoda &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
John Stabinger&lt;br /&gt;
Rossiani Wijaya &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
Derek Woolhead &amp;lt;open.ac.uk&amp;gt;&lt;br /&gt;
Mitsuhiro Yoshida &amp;lt;mitstek.com&amp;gt;&lt;br /&gt;
Yu Zhang &amp;lt;moodle.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Moodle 2.0 Preview 1 release notes]] - May 4, 2010&lt;br /&gt;
* [[Moodle 2.0 Preview 2 release notes]] - May 17, 2010&lt;br /&gt;
* [[Moodle 2.0 Preview 3 release notes]] - May 31, 2010&lt;br /&gt;
* [[Moodle 2.0 Preview 4 release notes]] - June 30, 2010&lt;br /&gt;
* [[Moodle 2.0 Release Candidate 1 release notes]] - September 21, 2010&lt;br /&gt;
&lt;br /&gt;
*[[Moodle 1.9 release notes]]&lt;br /&gt;
*[[QA testing]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Release notes]]&lt;br /&gt;
[[Category:Moodle 2.0]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Notes de mise à jour de Moodle 2.0]]&lt;br /&gt;
[[es:Notas de Moodle 2.0]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Installations_30000_plus&amp;diff=76866</id>
		<title>Installations 30000 plus</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Installations_30000_plus&amp;diff=76866"/>
		<updated>2010-10-19T21:34:25Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: updated our moodle stats&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Large Installations}}&lt;br /&gt;
&lt;br /&gt;
==Austria==&lt;br /&gt;
&lt;br /&gt;
* Federal Ministry of Education - [http://www.eduhi.at/ education highway]: [http://www.edumoodle.at Free Moodle for Austrian schools.]&lt;br /&gt;
(Nov/2009)&lt;br /&gt;
 - 26.000 courses&lt;br /&gt;
 - 230.000 users&lt;br /&gt;
 - 1.711 schools&lt;br /&gt;
 - 2 hosting centers, about 15 servers, shared moodle sources&lt;br /&gt;
&lt;br /&gt;
==Brazil==&lt;br /&gt;
&lt;br /&gt;
* [https://moodle.eadesaf.serpro.gov.br Escola de Administração Fazendária - ESAF] &lt;br /&gt;
Hospeda mais de 1.770 cursos, com 69.883 Estudantes e 1.869 Tutores (em 01/08/2010), atendendo a vários segmentos do serviço público do Brasil.&lt;br /&gt;
&lt;br /&gt;
* [http://aprender.unb.br Universidade de Brasília] - 66,587 users (04/30/2009)&lt;br /&gt;
* [http://ead.mackenzie.br/mackenzievirtual/ Universidade Presbiteriana Mackenzie] - 43,237 users (25/06/2009)&lt;br /&gt;
&lt;br /&gt;
==Italy==&lt;br /&gt;
&lt;br /&gt;
* [http://elearning.uniroma1.it/ InfoSapienza - University of Rome La Sapienza] InfoSapienza&#039;s Moodle hosts more than 700 courses for about 48.000 students from about 25 faculties, ranging from enginering scientific courses to literature and medicine. (April, 9th 2009)&lt;br /&gt;
&lt;br /&gt;
==Spain==&lt;br /&gt;
&lt;br /&gt;
* [http://www.ehu.es Universidad del Pais Vasco - Euskal Herriko Unibertsitatea (UPV/EHU)]: . 34.000 users and 1.650 teachers (different) in aprox. 3.650 courses. Our University have 50.000 students, 3.500 teachers. We started with Moodle 1.6 (four years ago) as a test pilot project for a small number of courses. Currently we are using version 1.9 (since 2009, February) with LDAP authentication.&lt;br /&gt;
&lt;br /&gt;
==Taiwan==&lt;br /&gt;
&lt;br /&gt;
* [http://moodle.mcu.edu.tw Ming Chuan University]&lt;br /&gt;
 - More then 63,000 users&lt;br /&gt;
 - 33,000 users login in one day(Max)&lt;br /&gt;
&lt;br /&gt;
==United Kingdom==&lt;br /&gt;
&lt;br /&gt;
* The UK&#039;s [http://www.open.ac.uk/ Open University], a world leading institution and innovator in distance learning based in Milton Keynes, Buckinghamshire, England is well on the way to creating the world&#039;s largest Moodle installation in a £5 Million project. It is expected to host nearly 200,000 students. [http://www3.open.ac.uk/media/fullstory.aspx?id=7354 OU&#039;s News item]&lt;br /&gt;
&lt;br /&gt;
* While not a single moodle, [http://www.luns.net.uk LUNS ltd] host one of the largest clusters of Moodle installs for [http://www.cleo.net.uk/ CLEO] , with over 260,000 registered users across over 950 individual moodle installs provided to every school in Cumbria and Lancashire. Approximately 65,000 users have been active in the last month as of Jan 09.&lt;br /&gt;
&lt;br /&gt;
==United States==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sfsu.edu San Francisco State University (SFSU)] - 89,543 users (02/07/2008). Among these 89K users, about 35,430 users are considered as currently active.&lt;br /&gt;
&lt;br /&gt;
* [http://www.umn.edu/moodle University of Minnesota (UofM)] - 60,863 user accounts with around 3,000 course sites on production server. 20,994 users enrolled into academic course sites in Spring 2009. More stats: http://umn.edu/moodle/about/statistics.html&lt;br /&gt;
&lt;br /&gt;
* [http://moodle.pcsb.org Pinellas County Schools] - 56,398 registered users who have logged in and created profiles. Over 5,000 course sites that are used for everything from K12 virtual instruction to teacher professional development.&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Cohorts&amp;diff=69435</id>
		<title>Development talk:Cohorts</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Cohorts&amp;diff=69435"/>
		<updated>2010-03-08T23:50:02Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: New page: The goals specified seem to cover exactly what I think the use case for &amp;#039;global groups&amp;#039; are :) --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The goals specified seem to cover exactly what I think the use case for &#039;global groups&#039; are :) --[[User:Dan Poltawski|Dan Poltawski]] 23:50, 8 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=66284</id>
		<title>Development:Czech Hackfest 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=66284"/>
		<updated>2009-12-05T10:28:06Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: added paintweb to &amp;#039;agenda&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== See also ==&lt;br /&gt;
&lt;br /&gt;
* [http://dev.moodle.org/course/view.php?id=5 Moodle Hackfest 2009] online course&lt;br /&gt;
* Tag #moodledev09&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
; Saturday 5th December 2009 :&lt;br /&gt;
&lt;br /&gt;
* Meet each others in Prague (some arrive, some may be there already)&lt;br /&gt;
* Settle down in a hotel - Andel&#039;s hotel - [http://www.andelshotel.com], rooms booked&lt;br /&gt;
* Explore Prague (Castle, Chrles bridge, old town square, etc.)&lt;br /&gt;
* Social beer event&lt;br /&gt;
&lt;br /&gt;
; Sunday 6th December 2009 :&lt;br /&gt;
* Leaving Prague at 10:30 together by a rented micro-bus (about 120 mins)&lt;br /&gt;
* Lunch at [http://www.jested.cz Jested, Liberec] or in Liberec.&lt;br /&gt;
* Moving to the mountains (by bus or car or foot ;-), according to snow conditions)&lt;br /&gt;
* Accommodating at [http://www.dudovi.cz/jizerka/eng/ubytovani.htm Jizerka] ( [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=jizerka&amp;amp;sll=50.82524,15.428925&amp;amp;sspn=0.298851,0.467606&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;hq=&amp;amp;hnear=Kořenov-Jizerka,+Czech+Republic&amp;amp;ll=50.822313,15.329361&amp;amp;spn=0.149435,0.233803&amp;amp;z=13 Google Maps] )&lt;br /&gt;
&lt;br /&gt;
; Monday 7th December 2009&lt;br /&gt;
* Moodle 2.0 release planning&lt;br /&gt;
* Triage of remaining bugs (assign developers, priorities)&lt;br /&gt;
* Bug sprint&lt;br /&gt;
&lt;br /&gt;
; Tuesday 8th December 2009&lt;br /&gt;
* Moodle 2.x planning&lt;br /&gt;
* Creating detailed roadmap for all modules based on tracker&lt;br /&gt;
&lt;br /&gt;
; Wednesday 9th December 2009&lt;br /&gt;
* Moodle 3.0 brainstorming and planning&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
&lt;br /&gt;
; Thursday 10th December 2009&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
* Skiiing?&lt;br /&gt;
&lt;br /&gt;
; Friday 11th December 2009 &lt;br /&gt;
* moving back to Prague on Friday&lt;br /&gt;
* more Prague sightseeing&lt;br /&gt;
* - Andel&#039;s hotel - [http://www.andelshotel.com], rooms booked&lt;br /&gt;
* official end of hackfest&lt;br /&gt;
&lt;br /&gt;
== Things to discuss ==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Languages]]&lt;br /&gt;
* Synchronising grades between Gradebook and modules like quiz that automatically compute a grade. What happens if the teacher edits in the gradebook so the grade becomes locked, then the student re-attempts the quiz and gets another grade?&lt;br /&gt;
* Decide about the PARAM_XXX cleaners, where they can be used and other types of validation (just simple types, allow DB access too, only use them for param cleaning, PARAM_XXX as regexp constants, PARAM_XXX extensible via /local stuff). But in any case, must be decided and documented once and for all.&lt;br /&gt;
* Talk about adding class=&amp;quot;moodletarget_xxxx&amp;quot; to links we were sending to new page via target=&amp;quot;_xxxx&amp;quot; (non XHTML anymore) and post-process them with JS.&lt;br /&gt;
* Discuss about date/time/timezones/calendars in 2.0. One initial point of reference: MDL-18375&lt;br /&gt;
* planned changes in themes&lt;br /&gt;
* major roles and enrolment changes&lt;br /&gt;
* future of assignment module&lt;br /&gt;
* performance problems&lt;br /&gt;
* cron processing&lt;br /&gt;
* large scale moodle set-ups&lt;br /&gt;
* webservices and integrations with 3rd party systems, CLI tools&lt;br /&gt;
* Integrating paintweb?&lt;br /&gt;
&lt;br /&gt;
== Attendees and arrivals ==&lt;br /&gt;
&lt;br /&gt;
Maximum of 16 places, so far we have (in chaotic order):&lt;br /&gt;
&lt;br /&gt;
# Martin Dougiamas&lt;br /&gt;
# Eloy Lafuente&lt;br /&gt;
# Petr Skoda&lt;br /&gt;
# Tim Hunt&lt;br /&gt;
# Helen Foster&lt;br /&gt;
# Penny Leach&lt;br /&gt;
# Dan Poltawski&lt;br /&gt;
# David Mudrak&lt;br /&gt;
# Shane Elliott&lt;br /&gt;
# Chris Roy&lt;br /&gt;
# Brian King&lt;br /&gt;
# Daniele Cordella&lt;br /&gt;
# Mike Churchward&lt;br /&gt;
# Hubert Chathi&lt;br /&gt;
# Matt Oquist&lt;br /&gt;
# Kris Stokking&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
I wanted to add some ideas of things we could talk about, and for some reason I did not want to use the talk page so I am adding them here. These are just ideas. Take them or leave them.&lt;br /&gt;
&lt;br /&gt;
===What is the balance between Yack and Hack?===&lt;br /&gt;
&lt;br /&gt;
That is, how much time will we be talking, and how much time writing code on our laptops?--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Probably more yacking than hacking....&lt;br /&gt;
&lt;br /&gt;
===Planning specific bits of the post 2.0-roadmap===&lt;br /&gt;
&lt;br /&gt;
The main thing is that we keep talking about how recent released, especially 2.0, have had a lot of under the hood changes and that we really need to do some work on the actual activities themselves. I was wonder if if we should have a section of time allocated to what we consider the most important modules (or other things like the gradebook/filepicker/backup).&lt;br /&gt;
&lt;br /&gt;
In order to have meaningful discussion, I suggest that in advanced of the hackfest, each participant is assigned (or volunteers for) one of those bit. They are then expected to read every open bug and feature request for that component, and spend some time following the associated forum, and come up with a summary of what the most pressing issues there seem to be. Then at the hackfest they would lead that discussion section, kicking off by explaining to the rest of us what they learned during their research.&lt;br /&gt;
&lt;br /&gt;
Naturally, if we do this, I volunteer for the quiz and question bank. Of course, I already have a pretty good idea what is going on there. I guess this would probably be more work if people had to look at an area they had not thought about before, so that is not fair.--[[User:Tim Hunt|Tim Hunt]] ~10:00, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1. Naturally, I volunteer for Workshop, given that the Tim&#039;s last sentence applies for my case, too. --[[User:David Mudrak|David Mudrak]] 10:51, 7 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===How about a work-on-2.0 day===&lt;br /&gt;
&lt;br /&gt;
The aim would be that by the end of the day, we have fixed as many of the Fix-for 2.0 bugs as possible, and also have reviewed all the ones that we cannot fix immediately, so we end up with a really good, triaged bug-list of what is left to be done. By the end of the day, all the bugs should be assigned to someone who feels confident they will be able to fix it.--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC) and Dan Poltawski. We discussed this at the GBBF last night.&lt;br /&gt;
&lt;br /&gt;
===&#039;Prepared&#039; Bug Squashing===&lt;br /&gt;
&lt;br /&gt;
Basically the same as the above suggestion, but I want to emphasise some preperation beforehand so that we can get to the real unsolved issues which would benefit with us all being in the same room and discussing solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With each bug we triage before the hackfest, we should try to:&lt;br /&gt;
* a) Link or close issues which have been fixed, or will be fixed by 2.0 (etc)&lt;br /&gt;
* b) Document unsolved issues which we need discussion or a plan to be fixed (&#039;&#039;&#039;this is most important for the hackfest itself&#039;&#039;&#039;)&lt;br /&gt;
* c) Document bugs which could be fixed with a little time (at the hackfest or later)&lt;br /&gt;
* d) Document bugs to pester someone else about ;-)&lt;br /&gt;
&lt;br /&gt;
Depending on how much time you can devote, I suggest trying these triaging views in order:&lt;br /&gt;
* 1) Reviewing all open bugs reported by yourself, starting oldest first.&lt;br /&gt;
* 2) Reviewing your assigned issues, starting with oldest first &lt;br /&gt;
* 3) Reviewing &#039;nobody&#039; or &#039;imported&#039; bugs starting with the oldest first.&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
There is a lot of old cruft in the tracker. Many of the issues have or will be fixed soon, so we could do a lot by just looking at our own issues and setting the status/links appropiately. For all the others, some are just without a decided solution - these would be great ones to at least think about discussing. --[[User:Dan Poltawski|Dan Poltawski]] 17:28, 15 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=66053</id>
		<title>Development:Czech Hackfest 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=66053"/>
		<updated>2009-11-29T22:58:20Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== See also ==&lt;br /&gt;
&lt;br /&gt;
* [http://dev.moodle.org/course/view.php?id=5 Moodle Hackfest 2009] online course&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
; Saturday 5th December 2009 :&lt;br /&gt;
&lt;br /&gt;
* Meet each others in Prague (some arrive, some may be there already)&lt;br /&gt;
* Settle down in a hotel - probably [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* Explore Prague (Castle etc)&lt;br /&gt;
* Social beer event&lt;br /&gt;
&lt;br /&gt;
; Sunday 6th December 2009 :&lt;br /&gt;
* Leaving Prague together by a rented micro-bus (about 120 mins)&lt;br /&gt;
* Lunch at [http://www.jested.cz Jested, Liberec].&lt;br /&gt;
* Moving to the mountains (by bus or car or foot ;-), according to snow conditions)&lt;br /&gt;
* Accommodating at [http://www.dudovi.cz/jizerka/eng/ubytovani.htm Jizerka] ( [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=jizerka&amp;amp;sll=50.82524,15.428925&amp;amp;sspn=0.298851,0.467606&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;hq=&amp;amp;hnear=Kořenov-Jizerka,+Czech+Republic&amp;amp;ll=50.822313,15.329361&amp;amp;spn=0.149435,0.233803&amp;amp;z=13 Google Maps] )&lt;br /&gt;
&lt;br /&gt;
; Monday 7th December 2009&lt;br /&gt;
* Moodle 2.0 release planning&lt;br /&gt;
* Triage of remaining bugs (assign developers, priorities)&lt;br /&gt;
* Bug sprint&lt;br /&gt;
&lt;br /&gt;
; Tuesday 8th December 2009&lt;br /&gt;
* Moodle 2.x planning&lt;br /&gt;
* Creating detailed roadmap for all modules based on tracker&lt;br /&gt;
&lt;br /&gt;
; Wednesday 9th December 2009&lt;br /&gt;
* Moodle 3.0 brainstorming and planning&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
&lt;br /&gt;
; Thursday 10th December 2009&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
* Skiiing?&lt;br /&gt;
&lt;br /&gt;
; Friday 11th December 2009 &lt;br /&gt;
* moving back to Prague on Friday&lt;br /&gt;
* more Prague sightseeing&lt;br /&gt;
* Settle down in a hotel - probably again [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* official end of hackfest&lt;br /&gt;
&lt;br /&gt;
== Things to discuss ==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Languages]]&lt;br /&gt;
* Synchronising grades between Gradebook and modules like quiz that automatically compute a grade. What happens if the teacher edits in the gradebook so the grade becomes locked, then the student re-attempts the quiz and gets another grade?&lt;br /&gt;
&lt;br /&gt;
== Attendees and arrivals ==&lt;br /&gt;
&lt;br /&gt;
Maximum of 16 places, so far we have (in chaotic order):&lt;br /&gt;
&lt;br /&gt;
# Martin Dougiamas&lt;br /&gt;
# Eloy Lafuente&lt;br /&gt;
# Petr Skoda&lt;br /&gt;
# Tim Hunt&lt;br /&gt;
# Helen Foster&lt;br /&gt;
# Penny Leach&lt;br /&gt;
# Dan Poltawski&lt;br /&gt;
# David Mudrak&lt;br /&gt;
# Shane Elliott&lt;br /&gt;
# Chris Roy&lt;br /&gt;
# Brian King&lt;br /&gt;
# Daniele Cordella&lt;br /&gt;
# Mike Churchward&lt;br /&gt;
# Hubert Chathi&lt;br /&gt;
# Matt Oquist&lt;br /&gt;
# Kris Stokking&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
I wanted to add some ideas of things we could talk about, and for some reason I did not want to use the talk page so I am adding them here. These are just ideas. Take them or leave them.&lt;br /&gt;
&lt;br /&gt;
===What is the balance between Yack and Hack?===&lt;br /&gt;
&lt;br /&gt;
That is, how much time will we be talking, and how much time writing code on our laptops?--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===Planning specific bits of the post 2.0-roadmap===&lt;br /&gt;
&lt;br /&gt;
The main thing is that we keep talking about how recent released, especially 2.0, have had a lot of under the hood changes and that we really need to do some work on the actual activities themselves. I was wonder if if we should have a section of time allocated to what we consider the most important modules (or other things like the gradebook/filepicker/backup).&lt;br /&gt;
&lt;br /&gt;
In order to have meaningful discussion, I suggest that in advanced of the hackfest, each participant is assigned (or volunteers for) one of those bit. They are then expected to read every open bug and feature request for that component, and spend some time following the associated forum, and come up with a summary of what the most pressing issues there seem to be. Then at the hackfest they would lead that discussion section, kicking off by explaining to the rest of us what they learned during their research.&lt;br /&gt;
&lt;br /&gt;
Naturally, if we do this, I volunteer for the quiz and question bank. Of course, I already have a pretty good idea what is going on there. I guess this would probably be more work if people had to look at an area they had not thought about before, so that is not fair.--[[User:Tim Hunt|Tim Hunt]] ~10:00, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1. Naturally, I volunteer for Workshop, given that the Tim&#039;s last sentence applies for my case, too. --[[User:David Mudrak|David Mudrak]] 10:51, 7 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===How about a work-on-2.0 day===&lt;br /&gt;
&lt;br /&gt;
The aim would be that by the end of the day, we have fixed as many of the Fix-for 2.0 bugs as possible, and also have reviewed all the ones that we cannot fix immediately, so we end up with a really good, triaged bug-list of what is left to be done. By the end of the day, all the bugs should be assigned to someone who feels confident they will be able to fix it.--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC) and Dan Poltawski. We discussed this at the GBBF last night.&lt;br /&gt;
&lt;br /&gt;
===&#039;Prepared&#039; Bug Squashing===&lt;br /&gt;
&lt;br /&gt;
Basically the same as the above suggestion, but I want to emphasise some preperation beforehand so that we can get to the real unsolved issues which would benefit with us all being in the same room and discussing solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With each bug we triage before the hackfest, we should try to:&lt;br /&gt;
* a) Link or close issues which have been fixed, or will be fixed by 2.0 (etc)&lt;br /&gt;
* b) Document unsolved issues which we need discussion or a plan to be fixed (&#039;&#039;&#039;this is most important for the hackfest itself&#039;&#039;&#039;)&lt;br /&gt;
* c) Document bugs which could be fixed with a little time (at the hackfest or later)&lt;br /&gt;
* d) Document bugs to pester someone else about ;-)&lt;br /&gt;
&lt;br /&gt;
Depending on how much time you can devote, I suggest trying these triaging views in order:&lt;br /&gt;
* 1) Reviewing all open bugs reported by yourself, starting oldest first.&lt;br /&gt;
* 2) Reviewing your assigned issues, starting with oldest first &lt;br /&gt;
* 3) Reviewing &#039;nobody&#039; or &#039;imported&#039; bugs starting with the oldest first.&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
There is a lot of old cruft in the tracker. Many of the issues have or will be fixed soon, so we could do a lot by just looking at our own issues and setting the status/links appropiately. For all the others, some are just without a decided solution - these would be great ones to at least think about discussing. --[[User:Dan Poltawski|Dan Poltawski]] 17:28, 15 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=66052</id>
		<title>Development:Czech Hackfest 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=66052"/>
		<updated>2009-11-29T22:55:54Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: adding a google maps link because I keep wanting to link to it ;-)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Work in progress here - do not rely on this yet.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [http://dev.moodle.org/course/view.php?id=5 Moodle Hackfest 2009] online course&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
; Saturday 5th December 2009 :&lt;br /&gt;
&lt;br /&gt;
* Meet each others in Prague (some arrive, some may be there already)&lt;br /&gt;
* Settle down in a hotel - probably [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* Explore Prague (Castle etc)&lt;br /&gt;
* Social beer event&lt;br /&gt;
&lt;br /&gt;
; Sunday 6th December 2009 :&lt;br /&gt;
* Leaving Prague together by a rented micro-bus (about 120 mins)&lt;br /&gt;
* Lunch at [http://www.jested.cz Jested, Liberec].&lt;br /&gt;
* Moving to the mountains (by bus or car or foot ;-), according to snow conditions)&lt;br /&gt;
* Accommodating at [http://www.dudovi.cz/jizerka/eng/ubytovani.htm Jizerka] ( [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=jizerka&amp;amp;sll=50.82524,15.428925&amp;amp;sspn=0.298851,0.467606&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;hq=&amp;amp;hnear=Kořenov-Jizerka,+Czech+Republic&amp;amp;ll=50.822313,15.329361&amp;amp;spn=0.149435,0.233803&amp;amp;z=13 Google Maps] )&lt;br /&gt;
&lt;br /&gt;
; Monday 7th December 2009&lt;br /&gt;
* Moodle 2.0 release planning&lt;br /&gt;
* Triage of remaining bugs (assign developers, priorities)&lt;br /&gt;
* Bug sprint&lt;br /&gt;
&lt;br /&gt;
; Tuesday 8th December 2009&lt;br /&gt;
* Moodle 2.x planning&lt;br /&gt;
* Creating detailed roadmap for all modules based on tracker&lt;br /&gt;
&lt;br /&gt;
; Wednesday 9th December 2009&lt;br /&gt;
* Moodle 3.0 brainstorming and planning&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
&lt;br /&gt;
; Thursday 10th December 2009&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
* Skiiing?&lt;br /&gt;
&lt;br /&gt;
; Friday 11th December 2009 &lt;br /&gt;
* moving back to Prague on Friday&lt;br /&gt;
* more Prague sightseeing&lt;br /&gt;
* Settle down in a hotel - probably again [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* official end of hackfest&lt;br /&gt;
&lt;br /&gt;
== Things to discuss ==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Languages]]&lt;br /&gt;
* Synchronising grades between Gradebook and modules like quiz that automatically compute a grade. What happens if the teacher edits in the gradebook so the grade becomes locked, then the student re-attempts the quiz and gets another grade?&lt;br /&gt;
&lt;br /&gt;
== Attendees and arrivals ==&lt;br /&gt;
&lt;br /&gt;
Maximum of 16 places, so far we have (in chaotic order):&lt;br /&gt;
&lt;br /&gt;
# Martin Dougiamas&lt;br /&gt;
# Eloy Lafuente&lt;br /&gt;
# Petr Skoda&lt;br /&gt;
# Tim Hunt&lt;br /&gt;
# Helen Foster&lt;br /&gt;
# Penny Leach&lt;br /&gt;
# Dan Poltawski&lt;br /&gt;
# David Mudrak&lt;br /&gt;
# Shane Elliott&lt;br /&gt;
# Chris Roy&lt;br /&gt;
# Brian King&lt;br /&gt;
# Daniele Cordella&lt;br /&gt;
# Mike Churchward&lt;br /&gt;
# Hubert Chathi&lt;br /&gt;
# Matt Oquist&lt;br /&gt;
# Kris Stokking&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
I wanted to add some ideas of things we could talk about, and for some reason I did not want to use the talk page so I am adding them here. These are just ideas. Take them or leave them.&lt;br /&gt;
&lt;br /&gt;
===What is the balance between Yack and Hack?===&lt;br /&gt;
&lt;br /&gt;
That is, how much time will we be talking, and how much time writing code on our laptops?--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===Planning specific bits of the post 2.0-roadmap===&lt;br /&gt;
&lt;br /&gt;
The main thing is that we keep talking about how recent released, especially 2.0, have had a lot of under the hood changes and that we really need to do some work on the actual activities themselves. I was wonder if if we should have a section of time allocated to what we consider the most important modules (or other things like the gradebook/filepicker/backup).&lt;br /&gt;
&lt;br /&gt;
In order to have meaningful discussion, I suggest that in advanced of the hackfest, each participant is assigned (or volunteers for) one of those bit. They are then expected to read every open bug and feature request for that component, and spend some time following the associated forum, and come up with a summary of what the most pressing issues there seem to be. Then at the hackfest they would lead that discussion section, kicking off by explaining to the rest of us what they learned during their research.&lt;br /&gt;
&lt;br /&gt;
Naturally, if we do this, I volunteer for the quiz and question bank. Of course, I already have a pretty good idea what is going on there. I guess this would probably be more work if people had to look at an area they had not thought about before, so that is not fair.--[[User:Tim Hunt|Tim Hunt]] ~10:00, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1. Naturally, I volunteer for Workshop, given that the Tim&#039;s last sentence applies for my case, too. --[[User:David Mudrak|David Mudrak]] 10:51, 7 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===How about a work-on-2.0 day===&lt;br /&gt;
&lt;br /&gt;
The aim would be that by the end of the day, we have fixed as many of the Fix-for 2.0 bugs as possible, and also have reviewed all the ones that we cannot fix immediately, so we end up with a really good, triaged bug-list of what is left to be done. By the end of the day, all the bugs should be assigned to someone who feels confident they will be able to fix it.--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC) and Dan Poltawski. We discussed this at the GBBF last night.&lt;br /&gt;
&lt;br /&gt;
===&#039;Prepared&#039; Bug Squashing===&lt;br /&gt;
&lt;br /&gt;
Basically the same as the above suggestion, but I want to emphasise some preperation beforehand so that we can get to the real unsolved issues which would benefit with us all being in the same room and discussing solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With each bug we triage before the hackfest, we should try to:&lt;br /&gt;
* a) Link or close issues which have been fixed, or will be fixed by 2.0 (etc)&lt;br /&gt;
* b) Document unsolved issues which we need discussion or a plan to be fixed (&#039;&#039;&#039;this is most important for the hackfest itself&#039;&#039;&#039;)&lt;br /&gt;
* c) Document bugs which could be fixed with a little time (at the hackfest or later)&lt;br /&gt;
* d) Document bugs to pester someone else about ;-)&lt;br /&gt;
&lt;br /&gt;
Depending on how much time you can devote, I suggest trying these triaging views in order:&lt;br /&gt;
* 1) Reviewing all open bugs reported by yourself, starting oldest first.&lt;br /&gt;
* 2) Reviewing your assigned issues, starting with oldest first &lt;br /&gt;
* 3) Reviewing &#039;nobody&#039; or &#039;imported&#039; bugs starting with the oldest first.&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
There is a lot of old cruft in the tracker. Many of the issues have or will be fixed soon, so we could do a lot by just looking at our own issues and setting the status/links appropiately. For all the others, some are just without a decided solution - these would be great ones to at least think about discussing. --[[User:Dan Poltawski|Dan Poltawski]] 17:28, 15 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64840</id>
		<title>Development:Debian Packaging Team</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64840"/>
		<updated>2009-11-01T19:52:14Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* php-simpletest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a shameless abuse of the moodle docs wiki for the debian packaging team to keep track of their goals and not loose mind ;-)&lt;br /&gt;
&lt;br /&gt;
= Removing Embedded Libraries =&lt;br /&gt;
&lt;br /&gt;
== phpmailer ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=429339&lt;br /&gt;
&lt;br /&gt;
We can probably fix this by helping changing the way that phpmailer is used in moodle, See MDL-20701&lt;br /&gt;
&lt;br /&gt;
== tinymce ==&lt;br /&gt;
In Moodle 1.9 this is not being used (I dont think). In Moodle 2.0 this needs thinking about&lt;br /&gt;
&lt;br /&gt;
== libphp-adodb ==&lt;br /&gt;
Won&#039;t fix. Moodle customise it.&lt;br /&gt;
&lt;br /&gt;
== libphp-snoopy ==&lt;br /&gt;
Lookes like the changes are only in cosmetics. Can go.&lt;br /&gt;
&lt;br /&gt;
== libmarkdown-php ==&lt;br /&gt;
We can&#039;t fix this one, moodle uses markdown extra&lt;br /&gt;
&lt;br /&gt;
== nusoap ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529573&lt;br /&gt;
&lt;br /&gt;
Doesn&#039;t need to be used on debian since we have php5 and soap extension. Removing&lt;br /&gt;
&lt;br /&gt;
== php-simpletest ==&lt;br /&gt;
Need to investigate..&lt;br /&gt;
&lt;br /&gt;
: I believe there are a few Moodle-specific tweaks - look in the code:--[[User:Tim Hunt|Tim Hunt]] 19:10, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Just seems to be declaring the $CFG global:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
diff --git a/lib/simpletestlib/test_case.php b/lib/simpletestlib/test_case.php&lt;br /&gt;
index 62d0349..91835a3 100644&lt;br /&gt;
--- a/lib/simpletestlib/test_case.php&lt;br /&gt;
+++ b/lib/simpletestlib/test_case.php&lt;br /&gt;
@@ -458,6 +458,7 @@&lt;br /&gt;
          */&lt;br /&gt;
         function _requireWithError($file) {&lt;br /&gt;
             $this-&amp;gt;_enableErrorReporting();&lt;br /&gt;
+            global $CFG; // Moodle patch for $CFG global in unit test files&lt;br /&gt;
             include($file);&lt;br /&gt;
             $error = isset($php_errormsg) ? $php_errormsg : false;&lt;br /&gt;
             $this-&amp;gt;_disableErrorReporting();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64834</id>
		<title>Development:Debian Packaging Team</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64834"/>
		<updated>2009-11-01T17:59:30Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a shameless abuse of the moodle docs wiki for the debian packaging team to keep track of their goals and not loose mind ;-)&lt;br /&gt;
&lt;br /&gt;
= Removing Embedded Libraries =&lt;br /&gt;
&lt;br /&gt;
== phpmailer ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=429339&lt;br /&gt;
&lt;br /&gt;
We can probably fix this by helping changing the way that phpmailer is used in moodle, See MDL-20701&lt;br /&gt;
&lt;br /&gt;
== tinymce ==&lt;br /&gt;
In Moodle 1.9 this is not being used (I dont think). In Moodle 2.0 this needs thinking about&lt;br /&gt;
&lt;br /&gt;
== libphp-adodb ==&lt;br /&gt;
Won&#039;t fix. Moodle customise it.&lt;br /&gt;
&lt;br /&gt;
== libphp-snoopy ==&lt;br /&gt;
Lookes like the changes are only in cosmetics. Can go.&lt;br /&gt;
&lt;br /&gt;
== libmarkdown-php ==&lt;br /&gt;
We can&#039;t fix this one, moodle uses markdown extra&lt;br /&gt;
&lt;br /&gt;
== nusoap ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529573&lt;br /&gt;
&lt;br /&gt;
Doesn&#039;t need to be used on debian since we have php5 and soap extension. Removing&lt;br /&gt;
&lt;br /&gt;
== php-simpletest ==&lt;br /&gt;
Need to investigate..&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64833</id>
		<title>Development:Debian Packaging Team</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64833"/>
		<updated>2009-11-01T17:52:55Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* Removing Embedded Libraries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a shameless abuse of the moodle docs wiki for the debian packaging team to keep track of their goals and not loose mind ;-)&lt;br /&gt;
&lt;br /&gt;
= Removing Embedded Libraries =&lt;br /&gt;
&lt;br /&gt;
== phpmailer ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=429339&lt;br /&gt;
&lt;br /&gt;
We can probably fix this by helping changing the way that phpmailer is used in moodle, See MDL-20701&lt;br /&gt;
&lt;br /&gt;
== tinymce ==&lt;br /&gt;
In Moodle 1.9 this is not being used (I dont think). In Moodle 2.0 this needs thinking about&lt;br /&gt;
&lt;br /&gt;
== libphp-adodb ==&lt;br /&gt;
Won&#039;t fix. Moodle customise it.&lt;br /&gt;
&lt;br /&gt;
== libphp-snoopy ==&lt;br /&gt;
Lookes like the changes are only in cosmetics. Can go.&lt;br /&gt;
&lt;br /&gt;
== libmarkdown-php ==&lt;br /&gt;
We can&#039;t fix this one, moodle uses markdown extra&lt;br /&gt;
&lt;br /&gt;
== nusoap ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529573&lt;br /&gt;
&lt;br /&gt;
Doesn&#039;t need to be used on debian since we have php5 and soap extension. Removing&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64831</id>
		<title>Development:Debian Packaging Team</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64831"/>
		<updated>2009-11-01T12:23:21Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* nusoap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a shameless abuse of the moodle docs wiki for the debian packaging team to keep track of their goals and not loose mind ;-)&lt;br /&gt;
&lt;br /&gt;
= Removing Embedded Libraries =&lt;br /&gt;
&lt;br /&gt;
== phpmailer ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=429339&lt;br /&gt;
&lt;br /&gt;
We can probably fix this by helping changing the way that phpmailer is used in moodle, See MDL-20701&lt;br /&gt;
&lt;br /&gt;
== tinymce ==&lt;br /&gt;
In Moodle 1.9 this is not being used (I dont think). In Moodle 2.0 this needs thinking about&lt;br /&gt;
&lt;br /&gt;
== libphp-adodb ==&lt;br /&gt;
Won&#039;t fix. Moodle customise it.&lt;br /&gt;
&lt;br /&gt;
== libphp-snoopy ==&lt;br /&gt;
Lookes like the changes are only in cosmetics. Can go.&lt;br /&gt;
&lt;br /&gt;
== kses ==&lt;br /&gt;
== domxml-php4-to-php5.php ==&lt;br /&gt;
== libmarkdown-php ==&lt;br /&gt;
We can&#039;t fix this one, moodle uses markdown extra&lt;br /&gt;
&lt;br /&gt;
== nusoap ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529573&lt;br /&gt;
&lt;br /&gt;
Can be done&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64830</id>
		<title>Development:Debian Packaging Team</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64830"/>
		<updated>2009-11-01T12:15:33Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* Removing Embedded Libraries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a shameless abuse of the moodle docs wiki for the debian packaging team to keep track of their goals and not loose mind ;-)&lt;br /&gt;
&lt;br /&gt;
= Removing Embedded Libraries =&lt;br /&gt;
&lt;br /&gt;
== phpmailer ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=429339&lt;br /&gt;
&lt;br /&gt;
We can probably fix this by helping changing the way that phpmailer is used in moodle, See MDL-20701&lt;br /&gt;
&lt;br /&gt;
== tinymce ==&lt;br /&gt;
In Moodle 1.9 this is not being used (I dont think). In Moodle 2.0 this needs thinking about&lt;br /&gt;
&lt;br /&gt;
== libphp-adodb ==&lt;br /&gt;
Won&#039;t fix. Moodle customise it.&lt;br /&gt;
&lt;br /&gt;
== libphp-snoopy ==&lt;br /&gt;
Lookes like the changes are only in cosmetics. Can go.&lt;br /&gt;
&lt;br /&gt;
== kses ==&lt;br /&gt;
== domxml-php4-to-php5.php ==&lt;br /&gt;
== libmarkdown-php ==&lt;br /&gt;
We can&#039;t fix this one, moodle uses markdown extra&lt;br /&gt;
&lt;br /&gt;
== nusoap ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529573&lt;br /&gt;
Can be done&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64829</id>
		<title>Development:Debian Packaging Team</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64829"/>
		<updated>2009-11-01T12:01:45Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* libphp-snoopy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a shameless abuse of the moodle docs wiki for the debian packaging team to keep track of their goals and not loose mind ;-)&lt;br /&gt;
&lt;br /&gt;
= Removing Embedded Libraries =&lt;br /&gt;
&lt;br /&gt;
== phpmailer ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=429339&lt;br /&gt;
&lt;br /&gt;
We can probably fix this by helping changing the way that phpmailer is used in moodle, See MDL-20701&lt;br /&gt;
&lt;br /&gt;
== tinymce ==&lt;br /&gt;
In Moodle 1.9 this is not being used (I dont think). In Moodle 2.0 this needs thinking about&lt;br /&gt;
&lt;br /&gt;
== libphp-adodb ==&lt;br /&gt;
Won&#039;t fix. Moodle customise it.&lt;br /&gt;
&lt;br /&gt;
== libphp-snoopy ==&lt;br /&gt;
Lookes like the changes are only in cosmetics. Can go.&lt;br /&gt;
&lt;br /&gt;
== kses ==&lt;br /&gt;
== domxml-php4-to-php5.php ==&lt;br /&gt;
== libmarkdown-php ==&lt;br /&gt;
We can&#039;t fix this one, moodle uses markdown extra&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64828</id>
		<title>Development:Debian Packaging Team</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Debian_Packaging_Team&amp;diff=64828"/>
		<updated>2009-11-01T11:42:47Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: New page: This page is a shameless abuse of the moodle docs wiki for the debian packaging team to keep track of their goals and not loose mind ;-)  = Removing Embedded Libraries =  == phpmailer == h...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a shameless abuse of the moodle docs wiki for the debian packaging team to keep track of their goals and not loose mind ;-)&lt;br /&gt;
&lt;br /&gt;
= Removing Embedded Libraries =&lt;br /&gt;
&lt;br /&gt;
== phpmailer ==&lt;br /&gt;
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=429339&lt;br /&gt;
&lt;br /&gt;
We can probably fix this by helping changing the way that phpmailer is used in moodle, See MDL-20701&lt;br /&gt;
&lt;br /&gt;
== tinymce ==&lt;br /&gt;
In Moodle 1.9 this is not being used (I dont think). In Moodle 2.0 this needs thinking about&lt;br /&gt;
&lt;br /&gt;
== libphp-adodb ==&lt;br /&gt;
Won&#039;t fix. Moodle customise it.&lt;br /&gt;
&lt;br /&gt;
== libphp-snoopy ==&lt;br /&gt;
Probably won&#039;t fix. Maybe we can remove customisations in packaging.&lt;br /&gt;
&lt;br /&gt;
== kses ==&lt;br /&gt;
== domxml-php4-to-php5.php ==&lt;br /&gt;
== libmarkdown-php ==&lt;br /&gt;
We can&#039;t fix this one, moodle uses markdown extra&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=62076</id>
		<title>Development talk:Theme changes in 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=62076"/>
		<updated>2009-08-25T21:56:19Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* Caching of &amp;#039;minified&amp;#039; unified stylesheet? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think this is a great system. Some comments on specific issues:&lt;br /&gt;
&lt;br /&gt;
1. Browser-specific stylesheets - is it time to move away from these?&lt;br /&gt;
&lt;br /&gt;
The OU system for this is a lot better. We add special classes to body (in addition to whatever&#039;s normally there), so you have &lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;ie ie7&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;gecko gecko19&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes indicate the browser engine and version so that we can specify a generic engine if a problem affects all versions, or a specific version.&lt;br /&gt;
&lt;br /&gt;
This means you can put the IE exceptions right next to the standard rules and they can be included in all stylesheets for any module. So you do&lt;br /&gt;
&lt;br /&gt;
 #mypage .whatever {&lt;br /&gt;
   /** normal rules */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 .ie6#mypage .whatever {&lt;br /&gt;
   /** broken rules */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that we don&#039;t just need exceptions for IE. Over time we&#039;ve needed rare (single) exceptions for Firefox (hence &#039;gecko&#039; stuff above; the issue was actually only in gecko18 I think) and WebKit too.&lt;br /&gt;
&lt;br /&gt;
IMO this system should be adopted in core Moodle. It&#039;s very simple and is far preferable to either CSS hacks (appalling) or separate stylesheets (unmaintainable).&lt;br /&gt;
&lt;br /&gt;
2. Debugging mode&lt;br /&gt;
&lt;br /&gt;
Maybe developer debug mode should send a special revision number (rev=debug) in order to regenerate the css every time, and send it without the expires header etc. That would probably make it pretty slow though. &lt;br /&gt;
&lt;br /&gt;
Alternatively, this could be an additional option in the debugging page so that you can turn on &#039;CSS debugging&#039; which would sent the rev=debug on every page, and turn it off when debugging other stuff that isn&#039;t css.&lt;br /&gt;
&lt;br /&gt;
having to manually update the number every single time you change css would be a huge annoyance when debugging css problems imo so I think one of these solutions is better.&lt;br /&gt;
&lt;br /&gt;
3. Removing comments&lt;br /&gt;
&lt;br /&gt;
Removing comments would be great. &lt;br /&gt;
&lt;br /&gt;
It&#039;s not only a performance issue, but:&lt;br /&gt;
&lt;br /&gt;
a. Because of the performance concern developers (including me) tend to not include comments at all, this is really bad for maintainability.&lt;br /&gt;
&lt;br /&gt;
b. If a student looks into our code and it says something &#039;unprofessional&#039; like &#039;only needed because IE sucks&#039; they might in theory complain - yes I have genuinely had a student complaint for using the word &#039;sucks&#039; in public - so this is another discouragement for developers to comment properly.&lt;br /&gt;
&lt;br /&gt;
4. Performance&lt;br /&gt;
&lt;br /&gt;
If these are served for lifetime (ie expires 10 years in future) as they should be, I think this would actually improve performance for most sites (that see a lot of repeat visits), even if it takes 50x longer to serve the css itself...&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, everything else is awesome. :)&lt;br /&gt;
&lt;br /&gt;
[[User:sam marshall|sam marshall]]&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. from sam&#039;s suggestions is already done. We should make sure it is not lost in any changes.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t see any point in multiple parent themes. Too complicated. Theme + parent + standard is sufficient. I guess once you are at two parents like that, it is no harder to code a general array, it is just much easier for theme developers to screw up. Oh, I guess there is not harm in the extra flexibility.&lt;br /&gt;
&lt;br /&gt;
No problem that this does not include -&amp;gt;requires-&amp;gt;css. We should comment that to make it clear that you rarely need to use it, but keep it as an emergency fallback for people who are doing random customisations.&lt;br /&gt;
&lt;br /&gt;
I proposed getting rid of meta.php before, but martin vetoed it. Somewhere in the themes  forum is a post form me where I list all the ways it is currently used in core and contrib. I still think we should get rid of it.&lt;br /&gt;
&lt;br /&gt;
Moodle 1.9 themes still work in Moodle 2.0. I would like that to continue to be true. I think it is still possible. Look at the code in theme_config class for handling legacy config.php files, and the code in deprecatedlib.php that implements the old function for serving CSS.&lt;br /&gt;
&lt;br /&gt;
--[[User:Tim Hunt|Tim Hunt]] 17:00, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. yes, I considered this too - I called this theme designer mode. I am not a big friend to using DEBUG_DEVELOPER for this, that is why I proposed it as separate option.&lt;br /&gt;
&lt;br /&gt;
Why not multiple parents when it is so easy to implement?&lt;br /&gt;
&lt;br /&gt;
I do not understand the &amp;quot;emergency need&amp;quot; for -&amp;gt;requires-&amp;gt;css() - the /local/ plug-ins are the correct place for emergency hacks, not the core. You just create new dir in /local/something/styles.css and it will be included automatically on all pages. The problem with custom CSS is that it can not fit into the one huge stylesheet - you can not load it before it because YUI reset will alter it and also after because it would not by style-able via themes which is not an option imo.&lt;br /&gt;
&lt;br /&gt;
I wanted to intentionally disable all old themes, I agree it should be as easy to upgrade as possible, but I still think that admins should be required to take some actions manually or else they will keep complaining that themes are &amp;quot;broken&amp;quot; in 2.0 and nobody told them they should update them. I think the ideal solution would be to allow easy downloads of themes via the Moodle UI instead of full backwards compatibility :-)&lt;br /&gt;
&lt;br /&gt;
[[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] 19:34, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think the thing is that for a lot of less experienced admins, for example, the teacher in a school who does it in their same time, they may have tinkered with their theme in the past (or the person before them may have) and they may not remember what was done. Tinkering with the theme, for example changing the logo or a few colours, may be one of the most  For them, we want the upgrade to be as simple as possible. If we cannot keep their old theme working, is there any way we can automate the upgrade? Or do we just encourage them to use one of Patrick Malley&#039;s nice new themes, and show them how easy it is to add their own logo to one?--[[User:Tim Hunt|Tim Hunt]] 20:09, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
I like the sound of these proposals generally.&lt;br /&gt;
&lt;br /&gt;
1) Themes in dataroot: I assume the intention is to completely remove any executable code in these themes?&lt;br /&gt;
&lt;br /&gt;
2) Breaking backwards compatibility: This is the one close to my heart, I just did a quick find and it&#039;ll mean we have to update 1003 custom themes (as today stands) which will obviously be a big barrier to Moodle 2.0 upgrade. Having said that I don&#039;t necessarily think its a bad idea. Having &#039;limited&#039; backwards compatibility where by the theme &#039;just&#039; works might be of limited value (i&#039;m sure we&#039;d need to convert all themes eventually anyway). We need to come up with clear reasons why we need to break backwards compatibility to satisfy less tolerant people than me though ;-)&lt;br /&gt;
&lt;br /&gt;
3) Removing $CFG-&amp;gt;themeww/themedir. From anecdotal evidence I think I might be the only person in the world using this feature and I think there are probably better ways to achieve what we are doing, so I am not going to argue very hard to keep it..&lt;br /&gt;
&lt;br /&gt;
I wrote some guidelines to give theme authors a few years ago, which sort of documents the stupid things we get in submitted themes (overriding all styles, uncessarily altering header/footer etc). I put these in Moodle Docs, might be interesting to you or not: [[CLEO_Moodle_Theme_Guidelines]].&lt;br /&gt;
&lt;br /&gt;
In most cases, the &#039;flexibilty/power&#039; we give theme authors at the moment leads to more breakage due to use of unnecessary modifications in something which could be achieved in a 10 line css file..&lt;br /&gt;
&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 09:45, 22 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
== Caching of &#039;minified&#039; unified stylesheet? ==&lt;br /&gt;
Shortly after Tim did his javascript cleanup, I did a hacky little test of minifying all included javascript and caching it by md5 hash. I didn&#039;t get very far, but one thing I did notice was that the minification process was surprisingly slow. Serving the single stylesheet might suffer from this problem also if we do additional processing. Do we need caching of the compiled stylesheets?&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 19:29, 25 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yes, we definitely need caching. I am pretty sure that is in the proposal.--[[User:Tim Hunt|Tim Hunt]] 21:18, 25 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Apologies.. just found &#039;storing of final CSS files in dataroot - caches need to be deleted after each theme revision change; this could significantly reduce server load&#039; --[[User:Dan Poltawski|Dan Poltawski]] 21:56, 25 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=62071</id>
		<title>Development talk:Theme changes in 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=62071"/>
		<updated>2009-08-25T19:29:37Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think this is a great system. Some comments on specific issues:&lt;br /&gt;
&lt;br /&gt;
1. Browser-specific stylesheets - is it time to move away from these?&lt;br /&gt;
&lt;br /&gt;
The OU system for this is a lot better. We add special classes to body (in addition to whatever&#039;s normally there), so you have &lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;ie ie7&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;gecko gecko19&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes indicate the browser engine and version so that we can specify a generic engine if a problem affects all versions, or a specific version.&lt;br /&gt;
&lt;br /&gt;
This means you can put the IE exceptions right next to the standard rules and they can be included in all stylesheets for any module. So you do&lt;br /&gt;
&lt;br /&gt;
 #mypage .whatever {&lt;br /&gt;
   /** normal rules */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 .ie6#mypage .whatever {&lt;br /&gt;
   /** broken rules */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that we don&#039;t just need exceptions for IE. Over time we&#039;ve needed rare (single) exceptions for Firefox (hence &#039;gecko&#039; stuff above; the issue was actually only in gecko18 I think) and WebKit too.&lt;br /&gt;
&lt;br /&gt;
IMO this system should be adopted in core Moodle. It&#039;s very simple and is far preferable to either CSS hacks (appalling) or separate stylesheets (unmaintainable).&lt;br /&gt;
&lt;br /&gt;
2. Debugging mode&lt;br /&gt;
&lt;br /&gt;
Maybe developer debug mode should send a special revision number (rev=debug) in order to regenerate the css every time, and send it without the expires header etc. That would probably make it pretty slow though. &lt;br /&gt;
&lt;br /&gt;
Alternatively, this could be an additional option in the debugging page so that you can turn on &#039;CSS debugging&#039; which would sent the rev=debug on every page, and turn it off when debugging other stuff that isn&#039;t css.&lt;br /&gt;
&lt;br /&gt;
having to manually update the number every single time you change css would be a huge annoyance when debugging css problems imo so I think one of these solutions is better.&lt;br /&gt;
&lt;br /&gt;
3. Removing comments&lt;br /&gt;
&lt;br /&gt;
Removing comments would be great. &lt;br /&gt;
&lt;br /&gt;
It&#039;s not only a performance issue, but:&lt;br /&gt;
&lt;br /&gt;
a. Because of the performance concern developers (including me) tend to not include comments at all, this is really bad for maintainability.&lt;br /&gt;
&lt;br /&gt;
b. If a student looks into our code and it says something &#039;unprofessional&#039; like &#039;only needed because IE sucks&#039; they might in theory complain - yes I have genuinely had a student complaint for using the word &#039;sucks&#039; in public - so this is another discouragement for developers to comment properly.&lt;br /&gt;
&lt;br /&gt;
4. Performance&lt;br /&gt;
&lt;br /&gt;
If these are served for lifetime (ie expires 10 years in future) as they should be, I think this would actually improve performance for most sites (that see a lot of repeat visits), even if it takes 50x longer to serve the css itself...&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, everything else is awesome. :)&lt;br /&gt;
&lt;br /&gt;
[[User:sam marshall|sam marshall]]&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. from sam&#039;s suggestions is already done. We should make sure it is not lost in any changes.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t see any point in multiple parent themes. Too complicated. Theme + parent + standard is sufficient. I guess once you are at two parents like that, it is no harder to code a general array, it is just much easier for theme developers to screw up. Oh, I guess there is not harm in the extra flexibility.&lt;br /&gt;
&lt;br /&gt;
No problem that this does not include -&amp;gt;requires-&amp;gt;css. We should comment that to make it clear that you rarely need to use it, but keep it as an emergency fallback for people who are doing random customisations.&lt;br /&gt;
&lt;br /&gt;
I proposed getting rid of meta.php before, but martin vetoed it. Somewhere in the themes  forum is a post form me where I list all the ways it is currently used in core and contrib. I still think we should get rid of it.&lt;br /&gt;
&lt;br /&gt;
Moodle 1.9 themes still work in Moodle 2.0. I would like that to continue to be true. I think it is still possible. Look at the code in theme_config class for handling legacy config.php files, and the code in deprecatedlib.php that implements the old function for serving CSS.&lt;br /&gt;
&lt;br /&gt;
--[[User:Tim Hunt|Tim Hunt]] 17:00, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. yes, I considered this too - I called this theme designer mode. I am not a big friend to using DEBUG_DEVELOPER for this, that is why I proposed it as separate option.&lt;br /&gt;
&lt;br /&gt;
Why not multiple parents when it is so easy to implement?&lt;br /&gt;
&lt;br /&gt;
I do not understand the &amp;quot;emergency need&amp;quot; for -&amp;gt;requires-&amp;gt;css() - the /local/ plug-ins are the correct place for emergency hacks, not the core. You just create new dir in /local/something/styles.css and it will be included automatically on all pages. The problem with custom CSS is that it can not fit into the one huge stylesheet - you can not load it before it because YUI reset will alter it and also after because it would not by style-able via themes which is not an option imo.&lt;br /&gt;
&lt;br /&gt;
I wanted to intentionally disable all old themes, I agree it should be as easy to upgrade as possible, but I still think that admins should be required to take some actions manually or else they will keep complaining that themes are &amp;quot;broken&amp;quot; in 2.0 and nobody told them they should update them. I think the ideal solution would be to allow easy downloads of themes via the Moodle UI instead of full backwards compatibility :-)&lt;br /&gt;
&lt;br /&gt;
[[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] 19:34, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think the thing is that for a lot of less experienced admins, for example, the teacher in a school who does it in their same time, they may have tinkered with their theme in the past (or the person before them may have) and they may not remember what was done. Tinkering with the theme, for example changing the logo or a few colours, may be one of the most  For them, we want the upgrade to be as simple as possible. If we cannot keep their old theme working, is there any way we can automate the upgrade? Or do we just encourage them to use one of Patrick Malley&#039;s nice new themes, and show them how easy it is to add their own logo to one?--[[User:Tim Hunt|Tim Hunt]] 20:09, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
I like the sound of these proposals generally.&lt;br /&gt;
&lt;br /&gt;
1) Themes in dataroot: I assume the intention is to completely remove any executable code in these themes?&lt;br /&gt;
&lt;br /&gt;
2) Breaking backwards compatibility: This is the one close to my heart, I just did a quick find and it&#039;ll mean we have to update 1003 custom themes (as today stands) which will obviously be a big barrier to Moodle 2.0 upgrade. Having said that I don&#039;t necessarily think its a bad idea. Having &#039;limited&#039; backwards compatibility where by the theme &#039;just&#039; works might be of limited value (i&#039;m sure we&#039;d need to convert all themes eventually anyway). We need to come up with clear reasons why we need to break backwards compatibility to satisfy less tolerant people than me though ;-)&lt;br /&gt;
&lt;br /&gt;
3) Removing $CFG-&amp;gt;themeww/themedir. From anecdotal evidence I think I might be the only person in the world using this feature and I think there are probably better ways to achieve what we are doing, so I am not going to argue very hard to keep it..&lt;br /&gt;
&lt;br /&gt;
I wrote some guidelines to give theme authors a few years ago, which sort of documents the stupid things we get in submitted themes (overriding all styles, uncessarily altering header/footer etc). I put these in Moodle Docs, might be interesting to you or not: [[CLEO_Moodle_Theme_Guidelines]].&lt;br /&gt;
&lt;br /&gt;
In most cases, the &#039;flexibilty/power&#039; we give theme authors at the moment leads to more breakage due to use of unnecessary modifications in something which could be achieved in a 10 line css file..&lt;br /&gt;
&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 09:45, 22 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
== Caching of &#039;minified&#039; unified stylesheet? ==&lt;br /&gt;
Shortly after Tim did his javascript cleanup, I did a hacky little test of minifying all included javascript and caching it by md5 hash. I didn&#039;t get very far, but one thing I did notice was that the minification process was surprisingly slow. Serving the single stylesheet might suffer from this problem also if we do additional processing. Do we need caching of the compiled stylesheets?&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 19:29, 25 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=62070</id>
		<title>Development:Czech Hackfest 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=62070"/>
		<updated>2009-08-25T19:21:32Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: correcting my surname ;-)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Work in progress here - do not rely on this yet.&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
; Saturday 5th December 2009 :&lt;br /&gt;
&lt;br /&gt;
* Meet each others in Prague (some arrive, some may be there already)&lt;br /&gt;
* Settle down in a hotel - probably [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* Explore Prague (Castle etc)&lt;br /&gt;
* Social beer event&lt;br /&gt;
&lt;br /&gt;
; Sunday 6th December 2009 :&lt;br /&gt;
* Leaving Prague together by a rented micro-bus (about 120 mins)&lt;br /&gt;
* Lunch at [http://www.jested.cz Jested, Liberec].&lt;br /&gt;
* Moving to the mountains (by bus or car or foot ;-), according to snow conditions)&lt;br /&gt;
* Accommodating at [http://www.dudovi.cz/jizerka/eng/ubytovani.htm Jizerka]&lt;br /&gt;
&lt;br /&gt;
; Monday 7th December 2009&lt;br /&gt;
* Moodle 2.0 release planning&lt;br /&gt;
* Triage of remaining bugs (assign developers, priorities)&lt;br /&gt;
* Bug sprint&lt;br /&gt;
&lt;br /&gt;
; Tuesday 8th December 2009&lt;br /&gt;
* Moodle 2.x planning&lt;br /&gt;
* Creating detailed roadmap for all modules based on tracker&lt;br /&gt;
&lt;br /&gt;
; Wednesday 9th December 2009&lt;br /&gt;
* Moodle 3.0 brainstorming and planning&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
&lt;br /&gt;
; Thursday 10th December 2009&lt;br /&gt;
* Moodle 2.0 bugs&lt;br /&gt;
* Skiiing?&lt;br /&gt;
&lt;br /&gt;
; Friday 11th December 2009 &lt;br /&gt;
* moving back to Prague on Friday&lt;br /&gt;
* more Prague sightseeing&lt;br /&gt;
* Settle down in a hotel - probably again [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* official end of hackfest&lt;br /&gt;
&lt;br /&gt;
== Attendees and arrivals ==&lt;br /&gt;
&lt;br /&gt;
Maximum of 16 places, so far we have (in chaotic order):&lt;br /&gt;
&lt;br /&gt;
# Martin Dougiamas&lt;br /&gt;
# Eloy Lafuente&lt;br /&gt;
# Petr Skoda&lt;br /&gt;
# Tim Hunt&lt;br /&gt;
# Helen Foster&lt;br /&gt;
# Penny Leach&lt;br /&gt;
# Dan Poltawski&lt;br /&gt;
# David Mudrak&lt;br /&gt;
# Shane Elliott&lt;br /&gt;
# Chris Roy&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
I wanted to add some ideas of things we could talk about, and for some reason I did not want to use the talk page so I am adding them here. These are just ideas. Take them or leave them.&lt;br /&gt;
&lt;br /&gt;
===What is the balance between Yack and Hack?===&lt;br /&gt;
&lt;br /&gt;
That is, how much time will we be talking, and how much time writing code on our laptops?--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===Planning specific bits of the post 2.0-roadmap===&lt;br /&gt;
&lt;br /&gt;
The main thing is that we keep talking about how recent released, especially 2.0, have had a lot of under the hood changes and that we really need to do some work on the actual activities themselves. I was wonder if if we should have a section of time allocated to what we consider the most important modules (or other things like the gradebook/filepicker/backup).&lt;br /&gt;
&lt;br /&gt;
In order to have meaningful discussion, I suggest that in advanced of the hackfest, each participant is assigned (or volunteers for) one of those bit. They are then expected to read every open bug and feature request for that component, and spend some time following the associated forum, and come up with a summary of what the most pressing issues there seem to be. Then at the hackfest they would lead that discussion section, kicking off by explaining to the rest of us what they learned during their research.&lt;br /&gt;
&lt;br /&gt;
Naturally, if we do this, I volunteer for the quiz and question bank. Of course, I already have a pretty good idea what is going on there. I guess this would probably be more work if people had to look at an area they had not thought about before, so that is not fair.--[[User:Tim Hunt|Tim Hunt]] ~10:00, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1. Naturally, I volunteer for Workshop, given that the Tim&#039;s last sentence applies for my case, too. --[[User:David Mudrak|David Mudrak]] 10:51, 7 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===How about a work-on-2.0 day===&lt;br /&gt;
&lt;br /&gt;
The aim would be that by the end of the day, we have fixed as many of the Fix-for 2.0 bugs as possible, and also have reviewed all the ones that we cannot fix immediately, so we end up with a really good, triaged bug-list of what is left to be done. By the end of the day, all the bugs should be assigned to someone who feels confident they will be able to fix it.--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC) and Dan Poltawski. We discussed this at the GBBF last night.&lt;br /&gt;
&lt;br /&gt;
===&#039;Prepared&#039; Bug Squashing===&lt;br /&gt;
&lt;br /&gt;
Basically the same as the above suggestion, but I want to emphasise some preperation beforehand so that we can get to the real unsolved issues which would benefit with us all being in the same room and discussing solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With each bug we triage before the hackfest, we should try to:&lt;br /&gt;
* a) Link or close issues which have been fixed, or will be fixed by 2.0 (etc)&lt;br /&gt;
* b) Document unsolved issues which we need discussion or a plan to be fixed (&#039;&#039;&#039;this is most important for the hackfest itself&#039;&#039;&#039;)&lt;br /&gt;
* c) Document bugs which could be fixed with a little time (at the hackfest or later)&lt;br /&gt;
* d) Document bugs to pester someone else about ;-)&lt;br /&gt;
&lt;br /&gt;
Depending on how much time you can devote, I suggest trying these triaging views in order:&lt;br /&gt;
* 1) Reviewing all open bugs reported by yourself, starting oldest first.&lt;br /&gt;
* 2) Reviewing your assigned issues, starting with oldest first &lt;br /&gt;
* 3) Reviewing &#039;nobody&#039; or &#039;imported&#039; bugs starting with the oldest first.&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
There is a lot of old cruft in the tracker. Many of the issues have or will be fixed soon, so we could do a lot by just looking at our own issues and setting the status/links appropiately. For all the others, some are just without a decided solution - these would be great ones to at least think about discussing. --[[User:Dan Poltawski|Dan Poltawski]] 17:28, 15 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=61979</id>
		<title>Development talk:Theme changes in 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=61979"/>
		<updated>2009-08-22T09:46:09Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think this is a great system. Some comments on specific issues:&lt;br /&gt;
&lt;br /&gt;
1. Browser-specific stylesheets - is it time to move away from these?&lt;br /&gt;
&lt;br /&gt;
The OU system for this is a lot better. We add special classes to body (in addition to whatever&#039;s normally there), so you have &lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;ie ie7&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;gecko gecko19&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes indicate the browser engine and version so that we can specify a generic engine if a problem affects all versions, or a specific version.&lt;br /&gt;
&lt;br /&gt;
This means you can put the IE exceptions right next to the standard rules and they can be included in all stylesheets for any module. So you do&lt;br /&gt;
&lt;br /&gt;
 #mypage .whatever {&lt;br /&gt;
   /** normal rules */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 .ie6#mypage .whatever {&lt;br /&gt;
   /** broken rules */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that we don&#039;t just need exceptions for IE. Over time we&#039;ve needed rare (single) exceptions for Firefox (hence &#039;gecko&#039; stuff above; the issue was actually only in gecko18 I think) and WebKit too.&lt;br /&gt;
&lt;br /&gt;
IMO this system should be adopted in core Moodle. It&#039;s very simple and is far preferable to either CSS hacks (appalling) or separate stylesheets (unmaintainable).&lt;br /&gt;
&lt;br /&gt;
2. Debugging mode&lt;br /&gt;
&lt;br /&gt;
Maybe developer debug mode should send a special revision number (rev=debug) in order to regenerate the css every time, and send it without the expires header etc. That would probably make it pretty slow though. &lt;br /&gt;
&lt;br /&gt;
Alternatively, this could be an additional option in the debugging page so that you can turn on &#039;CSS debugging&#039; which would sent the rev=debug on every page, and turn it off when debugging other stuff that isn&#039;t css.&lt;br /&gt;
&lt;br /&gt;
having to manually update the number every single time you change css would be a huge annoyance when debugging css problems imo so I think one of these solutions is better.&lt;br /&gt;
&lt;br /&gt;
3. Removing comments&lt;br /&gt;
&lt;br /&gt;
Removing comments would be great. &lt;br /&gt;
&lt;br /&gt;
It&#039;s not only a performance issue, but:&lt;br /&gt;
&lt;br /&gt;
a. Because of the performance concern developers (including me) tend to not include comments at all, this is really bad for maintainability.&lt;br /&gt;
&lt;br /&gt;
b. If a student looks into our code and it says something &#039;unprofessional&#039; like &#039;only needed because IE sucks&#039; they might in theory complain - yes I have genuinely had a student complaint for using the word &#039;sucks&#039; in public - so this is another discouragement for developers to comment properly.&lt;br /&gt;
&lt;br /&gt;
4. Performance&lt;br /&gt;
&lt;br /&gt;
If these are served for lifetime (ie expires 10 years in future) as they should be, I think this would actually improve performance for most sites (that see a lot of repeat visits), even if it takes 50x longer to serve the css itself...&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, everything else is awesome. :)&lt;br /&gt;
&lt;br /&gt;
[[User:sam marshall|sam marshall]]&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. from sam&#039;s suggestions is already done. We should make sure it is not lost in any changes.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t see any point in multiple parent themes. Too complicated. Theme + parent + standard is sufficient. I guess once you are at two parents like that, it is no harder to code a general array, it is just much easier for theme developers to screw up. Oh, I guess there is not harm in the extra flexibility.&lt;br /&gt;
&lt;br /&gt;
No problem that this does not include -&amp;gt;requires-&amp;gt;css. We should comment that to make it clear that you rarely need to use it, but keep it as an emergency fallback for people who are doing random customisations.&lt;br /&gt;
&lt;br /&gt;
I proposed getting rid of meta.php before, but martin vetoed it. Somewhere in the themes  forum is a post form me where I list all the ways it is currently used in core and contrib. I still think we should get rid of it.&lt;br /&gt;
&lt;br /&gt;
Moodle 1.9 themes still work in Moodle 2.0. I would like that to continue to be true. I think it is still possible. Look at the code in theme_config class for handling legacy config.php files, and the code in deprecatedlib.php that implements the old function for serving CSS.&lt;br /&gt;
&lt;br /&gt;
--[[User:Tim Hunt|Tim Hunt]] 17:00, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. yes, I considered this too - I called this theme designer mode. I am not a big friend to using DEBUG_DEVELOPER for this, that is why I proposed it as separate option.&lt;br /&gt;
&lt;br /&gt;
Why not multiple parents when it is so easy to implement?&lt;br /&gt;
&lt;br /&gt;
I do not understand the &amp;quot;emergency need&amp;quot; for -&amp;gt;requires-&amp;gt;css() - the /local/ plug-ins are the correct place for emergency hacks, not the core. You just create new dir in /local/something/styles.css and it will be included automatically on all pages. The problem with custom CSS is that it can not fit into the one huge stylesheet - you can not load it before it because YUI reset will alter it and also after because it would not by style-able via themes which is not an option imo.&lt;br /&gt;
&lt;br /&gt;
I wanted to intentionally disable all old themes, I agree it should be as easy to upgrade as possible, but I still think that admins should be required to take some actions manually or else they will keep complaining that themes are &amp;quot;broken&amp;quot; in 2.0 and nobody told them they should update them. I think the ideal solution would be to allow easy downloads of themes via the Moodle UI instead of full backwards compatibility :-)&lt;br /&gt;
&lt;br /&gt;
[[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] 19:34, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think the thing is that for a lot of less experienced admins, for example, the teacher in a school who does it in their same time, they may have tinkered with their theme in the past (or the person before them may have) and they may not remember what was done. Tinkering with the theme, for example changing the logo or a few colours, may be one of the most  For them, we want the upgrade to be as simple as possible. If we cannot keep their old theme working, is there any way we can automate the upgrade? Or do we just encourage them to use one of Patrick Malley&#039;s nice new themes, and show them how easy it is to add their own logo to one?--[[User:Tim Hunt|Tim Hunt]] 20:09, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
I like the sound of these proposals generally.&lt;br /&gt;
&lt;br /&gt;
1) Themes in dataroot: I assume the intention is to completely remove any executable code in these themes?&lt;br /&gt;
&lt;br /&gt;
2) Breaking backwards compatibility: This is the one close to my heart, I just did a quick find and it&#039;ll mean we have to update 1003 custom themes (as today stands) which will obviously be a big barrier to Moodle 2.0 upgrade. Having said that I don&#039;t necessarily think its a bad idea. Having &#039;limited&#039; backwards compatibility where by the theme &#039;just&#039; works might be of limited value (i&#039;m sure we&#039;d need to convert all themes eventually anyway). We need to come up with clear reasons why we need to break backwards compatibility to satisfy less tolerant people than me though ;-)&lt;br /&gt;
&lt;br /&gt;
3) Removing $CFG-&amp;gt;themeww/themedir. From anecdotal evidence I think I might be the only person in the world using this feature and I think there are probably better ways to achieve what we are doing, so I am not going to argue very hard to keep it..&lt;br /&gt;
&lt;br /&gt;
I wrote some guidelines to give theme authors a few years ago, which sort of documents the stupid things we get in submitted themes (overriding all styles, uncessarily altering header/footer etc). I put these in Moodle Docs, might be interesting to you or not: [[CLEO_Moodle_Theme_Guidelines]].&lt;br /&gt;
&lt;br /&gt;
In most cases, the &#039;flexibilty/power&#039; we give theme authors at the moment leads to more breakage due to use of unnecessary modifications in something which could be achieved in a 10 line css file..&lt;br /&gt;
&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 09:45, 22 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=61978</id>
		<title>Development talk:Theme changes in 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=61978"/>
		<updated>2009-08-22T09:45:27Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: Dans comments on Petr&amp;#039;s proposal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think this is a great system. Some comments on specific issues:&lt;br /&gt;
&lt;br /&gt;
1. Browser-specific stylesheets - is it time to move away from these?&lt;br /&gt;
&lt;br /&gt;
The OU system for this is a lot better. We add special classes to body (in addition to whatever&#039;s normally there), so you have &lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;ie ie7&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;gecko gecko19&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes indicate the browser engine and version so that we can specify a generic engine if a problem affects all versions, or a specific version.&lt;br /&gt;
&lt;br /&gt;
This means you can put the IE exceptions right next to the standard rules and they can be included in all stylesheets for any module. So you do&lt;br /&gt;
&lt;br /&gt;
 #mypage .whatever {&lt;br /&gt;
   /** normal rules */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 .ie6#mypage .whatever {&lt;br /&gt;
   /** broken rules */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that we don&#039;t just need exceptions for IE. Over time we&#039;ve needed rare (single) exceptions for Firefox (hence &#039;gecko&#039; stuff above; the issue was actually only in gecko18 I think) and WebKit too.&lt;br /&gt;
&lt;br /&gt;
IMO this system should be adopted in core Moodle. It&#039;s very simple and is far preferable to either CSS hacks (appalling) or separate stylesheets (unmaintainable).&lt;br /&gt;
&lt;br /&gt;
2. Debugging mode&lt;br /&gt;
&lt;br /&gt;
Maybe developer debug mode should send a special revision number (rev=debug) in order to regenerate the css every time, and send it without the expires header etc. That would probably make it pretty slow though. &lt;br /&gt;
&lt;br /&gt;
Alternatively, this could be an additional option in the debugging page so that you can turn on &#039;CSS debugging&#039; which would sent the rev=debug on every page, and turn it off when debugging other stuff that isn&#039;t css.&lt;br /&gt;
&lt;br /&gt;
having to manually update the number every single time you change css would be a huge annoyance when debugging css problems imo so I think one of these solutions is better.&lt;br /&gt;
&lt;br /&gt;
3. Removing comments&lt;br /&gt;
&lt;br /&gt;
Removing comments would be great. &lt;br /&gt;
&lt;br /&gt;
It&#039;s not only a performance issue, but:&lt;br /&gt;
&lt;br /&gt;
a. Because of the performance concern developers (including me) tend to not include comments at all, this is really bad for maintainability.&lt;br /&gt;
&lt;br /&gt;
b. If a student looks into our code and it says something &#039;unprofessional&#039; like &#039;only needed because IE sucks&#039; they might in theory complain - yes I have genuinely had a student complaint for using the word &#039;sucks&#039; in public - so this is another discouragement for developers to comment properly.&lt;br /&gt;
&lt;br /&gt;
4. Performance&lt;br /&gt;
&lt;br /&gt;
If these are served for lifetime (ie expires 10 years in future) as they should be, I think this would actually improve performance for most sites (that see a lot of repeat visits), even if it takes 50x longer to serve the css itself...&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, everything else is awesome. :)&lt;br /&gt;
&lt;br /&gt;
[[User:sam marshall|sam marshall]]&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. from sam&#039;s suggestions is already done. We should make sure it is not lost in any changes.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t see any point in multiple parent themes. Too complicated. Theme + parent + standard is sufficient. I guess once you are at two parents like that, it is no harder to code a general array, it is just much easier for theme developers to screw up. Oh, I guess there is not harm in the extra flexibility.&lt;br /&gt;
&lt;br /&gt;
No problem that this does not include -&amp;gt;requires-&amp;gt;css. We should comment that to make it clear that you rarely need to use it, but keep it as an emergency fallback for people who are doing random customisations.&lt;br /&gt;
&lt;br /&gt;
I proposed getting rid of meta.php before, but martin vetoed it. Somewhere in the themes  forum is a post form me where I list all the ways it is currently used in core and contrib. I still think we should get rid of it.&lt;br /&gt;
&lt;br /&gt;
Moodle 1.9 themes still work in Moodle 2.0. I would like that to continue to be true. I think it is still possible. Look at the code in theme_config class for handling legacy config.php files, and the code in deprecatedlib.php that implements the old function for serving CSS.&lt;br /&gt;
&lt;br /&gt;
--[[User:Tim Hunt|Tim Hunt]] 17:00, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. yes, I considered this too - I called this theme designer mode. I am not a big friend to using DEBUG_DEVELOPER for this, that is why I proposed it as separate option.&lt;br /&gt;
&lt;br /&gt;
Why not multiple parents when it is so easy to implement?&lt;br /&gt;
&lt;br /&gt;
I do not understand the &amp;quot;emergency need&amp;quot; for -&amp;gt;requires-&amp;gt;css() - the /local/ plug-ins are the correct place for emergency hacks, not the core. You just create new dir in /local/something/styles.css and it will be included automatically on all pages. The problem with custom CSS is that it can not fit into the one huge stylesheet - you can not load it before it because YUI reset will alter it and also after because it would not by style-able via themes which is not an option imo.&lt;br /&gt;
&lt;br /&gt;
I wanted to intentionally disable all old themes, I agree it should be as easy to upgrade as possible, but I still think that admins should be required to take some actions manually or else they will keep complaining that themes are &amp;quot;broken&amp;quot; in 2.0 and nobody told them they should update them. I think the ideal solution would be to allow easy downloads of themes via the Moodle UI instead of full backwards compatibility :-)&lt;br /&gt;
&lt;br /&gt;
[[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] 19:34, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think the thing is that for a lot of less experienced admins, for example, the teacher in a school who does it in their same time, they may have tinkered with their theme in the past (or the person before them may have) and they may not remember what was done. Tinkering with the theme, for example changing the logo or a few colours, may be one of the most  For them, we want the upgrade to be as simple as possible. If we cannot keep their old theme working, is there any way we can automate the upgrade? Or do we just encourage them to use one of Patrick Malley&#039;s nice new themes, and show them how easy it is to add their own logo to one?--[[User:Tim Hunt|Tim Hunt]] 20:09, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
I like the sound of these proposals generally.&lt;br /&gt;
&lt;br /&gt;
1) Themes in dataroot: I assume the intention is to completely remove any executable code in these themes?&lt;br /&gt;
&lt;br /&gt;
2) Breaking backwards compatibility: This is the one close to my heart, I just did a quick find and it&#039;ll mean we have to update 1003 custom themes (as today stands) which will obviously be a big barrier to Moodle 2.0 upgrade. Having said that I don&#039;t necessarily think its a bad idea. Having &#039;limited&#039; backwards compatibility where by the theme &#039;just&#039; works might be of limited value (i&#039;m sure we&#039;d need to convert all themes eventually anyway). We need to come up with clear reasons why we need to break backwards compatibility to satisfy less tolerant people than me though ;-)&lt;br /&gt;
&lt;br /&gt;
3) Removing $CFG-&amp;gt;themeww/themedir. From anecdotal evidence I think I might be the only person in the world using this feature and I think there are probably better ways to achieve what we are doing, so I am not going to argue very hard to keep it..&lt;br /&gt;
&lt;br /&gt;
I wrote some guidelines to give theme authors a few years ago, which sort of documents the stupid things we get in submitted themes (overriding all styles, uncessarily altering header/footer etc). I put these in Moodle Docs, might be interesting to you or not: [[CLEO_Moodle_Theme_Guidelines]]  In most cases, the &#039;flexibilty/power&#039; we give theme authors at the moment leads to more breakage due to use of unnecessary modifications in something which could be achieved in a 10 line css file..&lt;br /&gt;
&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 09:45, 22 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=61977</id>
		<title>Development talk:Theme changes in 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Theme_changes_in_2.0&amp;diff=61977"/>
		<updated>2009-08-22T09:44:57Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: Dans comments on Petr&amp;#039;s proposal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think this is a great system. Some comments on specific issues:&lt;br /&gt;
&lt;br /&gt;
1. Browser-specific stylesheets - is it time to move away from these?&lt;br /&gt;
&lt;br /&gt;
The OU system for this is a lot better. We add special classes to body (in addition to whatever&#039;s normally there), so you have &lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;ie ie7&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body class=&amp;quot;gecko gecko19&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes indicate the browser engine and version so that we can specify a generic engine if a problem affects all versions, or a specific version.&lt;br /&gt;
&lt;br /&gt;
This means you can put the IE exceptions right next to the standard rules and they can be included in all stylesheets for any module. So you do&lt;br /&gt;
&lt;br /&gt;
 #mypage .whatever {&lt;br /&gt;
   /** normal rules */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 .ie6#mypage .whatever {&lt;br /&gt;
   /** broken rules */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that we don&#039;t just need exceptions for IE. Over time we&#039;ve needed rare (single) exceptions for Firefox (hence &#039;gecko&#039; stuff above; the issue was actually only in gecko18 I think) and WebKit too.&lt;br /&gt;
&lt;br /&gt;
IMO this system should be adopted in core Moodle. It&#039;s very simple and is far preferable to either CSS hacks (appalling) or separate stylesheets (unmaintainable).&lt;br /&gt;
&lt;br /&gt;
2. Debugging mode&lt;br /&gt;
&lt;br /&gt;
Maybe developer debug mode should send a special revision number (rev=debug) in order to regenerate the css every time, and send it without the expires header etc. That would probably make it pretty slow though. &lt;br /&gt;
&lt;br /&gt;
Alternatively, this could be an additional option in the debugging page so that you can turn on &#039;CSS debugging&#039; which would sent the rev=debug on every page, and turn it off when debugging other stuff that isn&#039;t css.&lt;br /&gt;
&lt;br /&gt;
having to manually update the number every single time you change css would be a huge annoyance when debugging css problems imo so I think one of these solutions is better.&lt;br /&gt;
&lt;br /&gt;
3. Removing comments&lt;br /&gt;
&lt;br /&gt;
Removing comments would be great. &lt;br /&gt;
&lt;br /&gt;
It&#039;s not only a performance issue, but:&lt;br /&gt;
&lt;br /&gt;
a. Because of the performance concern developers (including me) tend to not include comments at all, this is really bad for maintainability.&lt;br /&gt;
&lt;br /&gt;
b. If a student looks into our code and it says something &#039;unprofessional&#039; like &#039;only needed because IE sucks&#039; they might in theory complain - yes I have genuinely had a student complaint for using the word &#039;sucks&#039; in public - so this is another discouragement for developers to comment properly.&lt;br /&gt;
&lt;br /&gt;
4. Performance&lt;br /&gt;
&lt;br /&gt;
If these are served for lifetime (ie expires 10 years in future) as they should be, I think this would actually improve performance for most sites (that see a lot of repeat visits), even if it takes 50x longer to serve the css itself...&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, everything else is awesome. :)&lt;br /&gt;
&lt;br /&gt;
[[User:sam marshall|sam marshall]]&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. from sam&#039;s suggestions is already done. We should make sure it is not lost in any changes.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t see any point in multiple parent themes. Too complicated. Theme + parent + standard is sufficient. I guess once you are at two parents like that, it is no harder to code a general array, it is just much easier for theme developers to screw up. Oh, I guess there is not harm in the extra flexibility.&lt;br /&gt;
&lt;br /&gt;
No problem that this does not include -&amp;gt;requires-&amp;gt;css. We should comment that to make it clear that you rarely need to use it, but keep it as an emergency fallback for people who are doing random customisations.&lt;br /&gt;
&lt;br /&gt;
I proposed getting rid of meta.php before, but martin vetoed it. Somewhere in the themes  forum is a post form me where I list all the ways it is currently used in core and contrib. I still think we should get rid of it.&lt;br /&gt;
&lt;br /&gt;
Moodle 1.9 themes still work in Moodle 2.0. I would like that to continue to be true. I think it is still possible. Look at the code in theme_config class for handling legacy config.php files, and the code in deprecatedlib.php that implements the old function for serving CSS.&lt;br /&gt;
&lt;br /&gt;
--[[User:Tim Hunt|Tim Hunt]] 17:00, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
2. yes, I considered this too - I called this theme designer mode. I am not a big friend to using DEBUG_DEVELOPER for this, that is why I proposed it as separate option.&lt;br /&gt;
&lt;br /&gt;
Why not multiple parents when it is so easy to implement?&lt;br /&gt;
&lt;br /&gt;
I do not understand the &amp;quot;emergency need&amp;quot; for -&amp;gt;requires-&amp;gt;css() - the /local/ plug-ins are the correct place for emergency hacks, not the core. You just create new dir in /local/something/styles.css and it will be included automatically on all pages. The problem with custom CSS is that it can not fit into the one huge stylesheet - you can not load it before it because YUI reset will alter it and also after because it would not by style-able via themes which is not an option imo.&lt;br /&gt;
&lt;br /&gt;
I wanted to intentionally disable all old themes, I agree it should be as easy to upgrade as possible, but I still think that admins should be required to take some actions manually or else they will keep complaining that themes are &amp;quot;broken&amp;quot; in 2.0 and nobody told them they should update them. I think the ideal solution would be to allow easy downloads of themes via the Moodle UI instead of full backwards compatibility :-)&lt;br /&gt;
&lt;br /&gt;
[[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] 19:34, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think the thing is that for a lot of less experienced admins, for example, the teacher in a school who does it in their same time, they may have tinkered with their theme in the past (or the person before them may have) and they may not remember what was done. Tinkering with the theme, for example changing the logo or a few colours, may be one of the most  For them, we want the upgrade to be as simple as possible. If we cannot keep their old theme working, is there any way we can automate the upgrade? Or do we just encourage them to use one of Patrick Malley&#039;s nice new themes, and show them how easy it is to add their own logo to one?--[[User:Tim Hunt|Tim Hunt]] 20:09, 21 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
I like the sound of these proposals generally.&lt;br /&gt;
&lt;br /&gt;
1) Themes in dataroot: I assume the intention is to completely remove any executable code in these themes?&lt;br /&gt;
&lt;br /&gt;
2) Breaking backwards compatibility: This is the one close to my heart, I just did a quick find and it&#039;ll mean we have to update 1003 custom themes (as today stands) which will obviously be a big barrier to Moodle 2.0 upgrade. Having said that I don&#039;t necessarily think its a bad idea. Having &#039;limited&#039; backwards compatibility where by the theme &#039;just&#039; works might be of limited value (i&#039;m sure we&#039;d need to convert all themes eventually anyway). We need to come up with clear reasons why we need to break backwards compatibility to satisfy less tolerant people than me though ;-)&lt;br /&gt;
&lt;br /&gt;
3) Removing $CFG-&amp;gt;themeww/themedir. From anecdotal evidence I think I might be the only person in the world using this feature and I think there are probably better ways to achieve what we are doing, so I am not going to argue very hard to keep it..&lt;br /&gt;
&lt;br /&gt;
I wrote some guidelines to give theme authors a few years ago, which sort of documents the stupid things we get in submitted themes (overriding all styles, uncessarily altering header/footer etc). I put these in Moodle Docs, might be interesting to you or not: [[CLEO_Moodle_Theme_Guidelines]]  In most cases, the &#039;flexibilty/power&#039; we give theme authors at the moment leads to more breakage due to use of unnecessary modifications in something which could be achieved in a 10 line css file..&lt;br /&gt;
&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 09:44, 22 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Developer_documentation&amp;diff=61637</id>
		<title>Development:Developer documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Developer_documentation&amp;diff=61637"/>
		<updated>2009-08-16T20:26:41Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: updated security link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[:Category:Developer|Developer]] section of Moodle Docs is aimed at developers who contribute to the Moodle code, plugins, themes, and so on.&lt;br /&gt;
* If you manage a Moodle site, [[Administrator documentation]] may suit your needs better. &lt;br /&gt;
* If you teach using Moodle, try [[Teacher documentation]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; New developer documentation pages should be added to the &#039;&#039;Development namespace&#039;&#039; by typing &amp;lt;code&amp;gt;Development:&amp;lt;/code&amp;gt; before the new page name i.e. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Development:New page name]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. If you are a developer, you probably want to change your [[Special:Preferences|preferences]] to include the Development namespace in searches.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A page may be added to the Developer category by adding the template &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{CategoryDeveloper}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; to the bottom of the page. - If required, you can use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Developer|Sort key]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; to provide a sort key other than the default page name.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How Moodle development works==&lt;br /&gt;
&lt;br /&gt;
The [[Development:Overview|overview of the Moodle development process]] explains how Moodle development occurs and how people become Moodle developers. Current plans are listed on the [[Roadmap]].&lt;br /&gt;
&lt;br /&gt;
You can also enrol in one of the [http://dev.moodle.org Moodle Developer Courses].&lt;br /&gt;
&lt;br /&gt;
==Guidelines==&lt;br /&gt;
&lt;br /&gt;
The following guidelines are crucial reading for anyone wanting to contribute to the Moodle code base:&lt;br /&gt;
*[[Development:Coding|Coding guidelines]] have to be followed by all Moodle developers&lt;br /&gt;
*[[Moodle design goals]] spells out the basic design goals behind Moodle&lt;br /&gt;
*[[Interface guidelines]] aim to provide a common feel to the Moodle user interface&lt;br /&gt;
*[[CVS (developer)|Moodle CVS for developers]] explains how to work with the Moodle code in CVS&lt;br /&gt;
*[[Tracker]] explains the Moodle Tracker for keeping track of bugs, issues, feature requests etc&lt;br /&gt;
*[[Development:Working with the Community|Working with the Community]] explains how to engage with the dev community and discuss changes&lt;br /&gt;
*[[Development:Unit tests|Unit tests]] explains how to run the unit tests, and how to write new test cases.&lt;br /&gt;
*[[Development:Fast portable SQL]] shows SQL techniques that are fast, efficient, and known to work on all supported DBs.&lt;br /&gt;
&lt;br /&gt;
==Documentation for core components==&lt;br /&gt;
&lt;br /&gt;
This section is for documentation of specific components of the existing core Moodle code. Discussion of components that are under discussion or in development can be found in the [[Development:Developer notes|developer notes]] or on the [[Roadmap|roadmap]].&lt;br /&gt;
&lt;br /&gt;
The documents below give a general overview. For detailed function-by-function documentation, see the [http://phpdocs.moodle.org/ phpDocumentor] documentation that is automatically generated from the comments in the code. &lt;br /&gt;
&lt;br /&gt;
And don&#039;t forget that the most up-to-date and detailed description of how the code works is the code itself, and you can [http://xref.moodle.org/nav.html?index.html browse the code online] using [[Development:PHPXref|PHPXref]].&lt;br /&gt;
&lt;br /&gt;
===Core components that affect everything===&lt;br /&gt;
&lt;br /&gt;
*[[Development:Database schema introduction|The database schema]]&lt;br /&gt;
*[[Development:What happens when you require config.php|What happens when you require config.php]]&lt;br /&gt;
*lib/moodlelib.php &lt;br /&gt;
*[[Development:lib/weblib.php|lib/weblib.php]] for outputting stuff&lt;br /&gt;
*[[Development:JavaScript_functions|JavaScript function available on the client side]]&lt;br /&gt;
*[[Development:XMLDB_Documentation|Database abstraction layer]] @ v[[1.7]]&lt;br /&gt;
*[[Development:Roles|Roles and Capabilities system]] @ v[[1.7]] for controlling who can do what&lt;br /&gt;
*[[Development:lib/formslib.php|Forms library]] @ v[[1.8]] for creating accessible and secure HTML forms that let users edit things&lt;br /&gt;
*[[Development:Using_the_file_API|File API]] @ v[[2.0]] for managing files stored by Moodle&lt;br /&gt;
&lt;br /&gt;
===Core libraries with a more specific uses===&lt;br /&gt;
&lt;br /&gt;
*[[Authentication API]]&lt;br /&gt;
*[[Cookieless Sessions]]&lt;br /&gt;
*[[Email processing]]&lt;br /&gt;
*[[Development:Environment checking|Environment checking]] before install, check the user&#039;s server to ensure Moodle will work there.&lt;br /&gt;
*[[Development:Groups|Groups system]]&lt;br /&gt;
*[[Development:Grades|Gradebook]]&lt;br /&gt;
*[[Development:Moodle Network|Moodle Network]]&lt;br /&gt;
*[[Question engine]]&lt;br /&gt;
*[[Stats package]]&lt;br /&gt;
*[[UTF-8 migration|Migration to UTF-8]] @ v[[:Category:Moodle 1.6|1.6]]&lt;br /&gt;
*[http://developer.yahoo.com/yui YUI JavaScript library] - YUI was selected as the official AJAX library for Moodle.&lt;br /&gt;
*[[Development:lib/graphlib|lib/graphlib]]&lt;br /&gt;
*[[Development:Admin settings|Admin settings]]&lt;br /&gt;
&lt;br /&gt;
===Modules included in the standard distribution===&lt;br /&gt;
&lt;br /&gt;
*[[Development:Lesson Specification|Lesson Specification]]&lt;br /&gt;
*[[Quiz developer docs|Quiz module]]&lt;br /&gt;
*[[SCORM schema|SCORM module 1.5 schema]]&lt;br /&gt;
&lt;br /&gt;
==How you can contribute==&lt;br /&gt;
&lt;br /&gt;
===Make a new plugin===&lt;br /&gt;
&lt;br /&gt;
The M in Moodle stands for modular, and the easiest, most maintainable way to add new functionality to Moodle is by using one of the many plugin APIs. There are many types of plugin you can write:&lt;br /&gt;
*[[Development:Modules|Activity modules]], see also [[Development:NEWMODULE Documentation]] (work in progress)&lt;br /&gt;
*[[Development:Admin reports|Admin reports]]&lt;br /&gt;
*[[Development:Assignment types|Assignment types]]&lt;br /&gt;
*[[Development:Authentication plugins|Authentication plugins]]&lt;br /&gt;
*[[Development:Blocks|Blocks]]&lt;br /&gt;
*[[Course formats]]&lt;br /&gt;
*[[Development:Course Report Plugins|Course reports]]&lt;br /&gt;
*[[Development:Database fields|Database fields]]&lt;br /&gt;
*[[Development:Database presets|Database presets]]&lt;br /&gt;
*[[Development:Enrolment plugins|Enrolment plugins]]&lt;br /&gt;
*[[Development:Filters|Filters]]&lt;br /&gt;
*[[Development:Gradebook plugins|Gradebook plugins]] (1.9 onwards)&lt;br /&gt;
**[[Development:Gradebook_Report_Tutorial|Gradebook report]]&lt;br /&gt;
**[[Development:Gradebook export|Gradebook export]]&lt;br /&gt;
**[[Development:Gradebook import|Gradebook import]]&lt;br /&gt;
*[[Development:Writing_a_Portfolio_Plugin|Portfolio plugins]] (2.0 onwards)&lt;br /&gt;
*[[Development:Question_type_plugin_how_to|Question types]]&lt;br /&gt;
*[[Development:Question import/export formats|Question import/export formats]]&lt;br /&gt;
*[[Development:How to write a quiz report plugin|Quiz reports]]&lt;br /&gt;
*[[Development:Repository plugins|Repository plugins]] (2.0 onwards)&lt;br /&gt;
*[[Development:Resource types|Resource types]]&lt;br /&gt;
*[[Development:Search engine adapters|Search engine adapters]]&lt;br /&gt;
&lt;br /&gt;
General information that applies to all types of plugins&lt;br /&gt;
*[[Development:Places to search for lang strings|Where to put language strings for your plugin]]&lt;br /&gt;
*[[Development:Installing and upgrading plugin database tables|Defining the database tables for your plugin]]&lt;br /&gt;
&lt;br /&gt;
Please see the [[Development:Guidelines for contributed code|Guidelines for contributed code]] for an overview of how to contribute to the Moodle code.&lt;br /&gt;
&lt;br /&gt;
Sometimes it is not possible to write a proper plugin for what you want to do, in which case you may have to resort to using the [[Development:Local_customisation|local customisations]] hook.&lt;br /&gt;
&lt;br /&gt;
===Change core code===&lt;br /&gt;
&lt;br /&gt;
Some types of change can only be made by editing the core Moodle code. Such changes are much harder to maintain than plugins. If you want your core change to be considered for inclusion in the official Moodle release, you need to create an issue in the [[Tracker|tracker]], and attach your change as a [[Development:How_to_create_a_patch|patch]]. It is also a good idea to discuss your ideas in the forums first.  See [[Development:Overview#Major_Development]] for more details.&lt;br /&gt;
&lt;br /&gt;
===Ways to contribute that do not involve PHP programming===&lt;br /&gt;
&lt;br /&gt;
*[[Themes|Create Moodle themes]]&lt;br /&gt;
*[[Translation|Translate Moodle into other languages]]&lt;br /&gt;
*[[MoodleDocs:Guidelines for contributors|Help document Moodle]]&lt;br /&gt;
*[[Development:Tests|Join the testing effort]], which involves [[Tracker|participating in the bug tracker]]&lt;br /&gt;
&lt;br /&gt;
==Plans for the future==&lt;br /&gt;
&lt;br /&gt;
Ideas for and details of planned future features of Moodle are initially discussed on the forums in the [http://moodle.org/course/view.php?id=5 Using Moodle] course at moodle.org. That developer discussions are intermixed with user discussions in the same forums may seem strange at first but is one of the reasons for the success of Moodle. It is important that both end-users and developers discuss the future features together.&lt;br /&gt;
&lt;br /&gt;
Once ideas begin to crystallize on the forums they can be summarized in this wiki, either as part of the [[Roadmap|roadmap]] or in the form of [[Development:Developer notes|developer notes]]. These pages then form the basis for further discussion in the forums.&lt;br /&gt;
&lt;br /&gt;
*[[Roadmap]]&lt;br /&gt;
*[[Development:Developer notes|Developer notes]]&lt;br /&gt;
*[[Student projects]]&lt;br /&gt;
*[[Developer meetings]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
*[[Developer FAQ]] - frequently asked questions, especially useful for newcomers to Moodle&lt;br /&gt;
*[[Development:Finding_your_way_into_the_Moodle_code|Finding your way into the Moodle code]] - also aimed at newcomers&lt;br /&gt;
*[http://tracker.moodle.org/ Moodle tracker] - bug reports, feature requests and other tracked issues&lt;br /&gt;
**[[Firefox tracker search]] - How to setup a firefox quicksearch to easily navigate to moodle bugs&lt;br /&gt;
**[[Firefox tracker search#Firefox Search Plugins|Firefox Search Plugins]] - Find tracked issues even more easily&lt;br /&gt;
*[[Unmerged files]] - changes on the stable branch in CVS that have not been merged to [[HEAD]]&lt;br /&gt;
*Browse the code online:&lt;br /&gt;
**[http://cvs.moodle.org/moodle/ the code with a complete change history from CVS]&lt;br /&gt;
**[http://xref.moodle.org/index.html the code, with links generated by PHPXref]&lt;br /&gt;
*[http://phpdocs.moodle.org/ Moodle PHP doc reference] - compiled from the comment attached to each class and function in the code&lt;br /&gt;
*[[Development:Database Schema|Database Schema]] - for recent releases&lt;br /&gt;
*[http://moodle.org/course/view.php?id=5#4 Development news and discussion] section of Using Moodle course&lt;br /&gt;
**especially the [http://moodle.org/mod/forum/view.php?id=55 General developer forum]&lt;br /&gt;
**[[Filters used on the Moodle.org forums|cool tricks you can use in the moodle.org forums]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
Some tools people use when working on Moodle code:&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
&lt;br /&gt;
* [[Development:Setting_up_Netbeans|Setting up NetBeans for Moodle development]] - NetBeans for PHP is a great out-of-the-box editor.&lt;br /&gt;
* [[Development:Setting_up_Eclipse|Setting up Eclipse for Moodle development]] - Eclipse is a great editor to use for php development, if you can work out how to set it up.&lt;br /&gt;
* [[Development:vim|Setting up Vim for Moodle development]]&lt;br /&gt;
&lt;br /&gt;
=== Browser add-ons ===&lt;br /&gt;
*[http://getfirebug.com Firebug], see [[Development:Firebug]].&lt;br /&gt;
* [[Web developer extension]]&lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/394 ViewSourceWith] - The main goal is to view page source with external applications, but you can do a lot of other things as well.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous === &lt;br /&gt;
*[[Development:ctags|Ctags]] - Using a tags file to navigate code&lt;br /&gt;
*[[W3C_validation|W3C HTML validator]] - Moodle has built in support to make using it easier.&lt;br /&gt;
*[[Development:Windows Installer|Windows Installer]] - Windows Installer documentation for developer.&lt;br /&gt;
&lt;br /&gt;
See also: [http://dev.moodle.org/mod/forum/view.php?id=18 Useful Development Tools forum]in the [http://dev.moodle.org/course/view.php?id=2 Introduction to Moodle Programming course]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/security/ Moodle Security Announcements]&lt;br /&gt;
*[http://moodle.com/partners/ Moodle Partners] - providers of custom Moodle development services&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Developer tools]]&lt;br /&gt;
&lt;br /&gt;
[[ru:Development:Краткий обзор]]&lt;br /&gt;
[[es:Documentación para Desarrolladores]]&lt;br /&gt;
[[fr:Documentation développeur]]&lt;br /&gt;
[[pt:Desenvolvimento:Documentação para programadores]]&lt;br /&gt;
[[zh:开发者文档]]&lt;br /&gt;
[[ja:開発者ドキュメント]]&lt;br /&gt;
[[fi:Ohjelmoijan opas]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=61621</id>
		<title>Development:Czech Hackfest 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Czech_Hackfest_2009&amp;diff=61621"/>
		<updated>2009-08-15T17:28:28Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: Adding my idea about &amp;#039;prepared bug squashing&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Work in progress here - do not rely on this yet.&lt;br /&gt;
&lt;br /&gt;
== Programme ==&lt;br /&gt;
&lt;br /&gt;
; Saturday 5th December 2009 :&lt;br /&gt;
&lt;br /&gt;
* Meet each others in Prague (some arrive, some may be there already)&lt;br /&gt;
* Settle down in a hotel - probably [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* Explore Prague (Castle etc)&lt;br /&gt;
* Social beer event&lt;br /&gt;
&lt;br /&gt;
; Sunday 6th December 2009 :&lt;br /&gt;
* Leaving Prague together by a rented micro-bus (about 120 mins)&lt;br /&gt;
* Lunch at [http://www.jested.cz Jested, Liberec].&lt;br /&gt;
* Moving to the mountains (by bus or car or foot ;-), according to snow conditions)&lt;br /&gt;
* Accommodating at [http://www.dudovi.cz/jizerka/eng/ubytovani.htm Jizerka]&lt;br /&gt;
&lt;br /&gt;
; Monday 7th December 2009&lt;br /&gt;
; Tuesday 8th December 2009&lt;br /&gt;
; Wednesday 9th December 2009&lt;br /&gt;
; Thursday 10th December 2009&lt;br /&gt;
; Friday 11th December 2009 &lt;br /&gt;
* bugathon&lt;br /&gt;
* polishing 2.0&lt;br /&gt;
* planning roadmap for Moodle 2.x and 3.0&lt;br /&gt;
* hacking&lt;br /&gt;
* talking&lt;br /&gt;
* drinking&lt;br /&gt;
* skiing&lt;br /&gt;
* snow-balling&lt;br /&gt;
* making Moodle snow-man&lt;br /&gt;
* etc&lt;br /&gt;
&lt;br /&gt;
; Friday 11th December 2009&lt;br /&gt;
* moving back to Prague on Friday&lt;br /&gt;
* more Prague sightseeing&lt;br /&gt;
* Settle down in a hotel - probably again [http://www.andelshotel.com] or [http://www.angelohotel.com] (we are discussing with them to get some sale, do not book anything yet).&lt;br /&gt;
* official end of hackfest&lt;br /&gt;
&lt;br /&gt;
== Attendees and arrivals ==&lt;br /&gt;
&lt;br /&gt;
Maximum of 16 places, so far we have (in chaotic order):&lt;br /&gt;
&lt;br /&gt;
# Martin D&lt;br /&gt;
# Eloy L&lt;br /&gt;
# Petr S&lt;br /&gt;
# Tim H&lt;br /&gt;
# Helen F&lt;br /&gt;
# Penny L&lt;br /&gt;
# Dan P&lt;br /&gt;
# David M&lt;br /&gt;
# Shane E&lt;br /&gt;
# Chris P&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
&lt;br /&gt;
I wanted to add some ideas of things we could talk about, and for some reason I did not want to use the talk page so I am adding them here. These are just ideas. Take them or leave them.&lt;br /&gt;
&lt;br /&gt;
===What is the balance between Yack and Hack?===&lt;br /&gt;
&lt;br /&gt;
That is, how much time will we be talking, and how much time writing code on our laptops?--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===Planning specific bits of the post 2.0-roadmap===&lt;br /&gt;
&lt;br /&gt;
The main thing is that we keep talking about how recent released, especially 2.0, have had a lot of under the hood changes and that we really need to do some work on the actual activities themselves. I was wonder if if we should have a section of time allocated to what we consider the most important modules (or other things like the gradebook/filepicker/backup).&lt;br /&gt;
&lt;br /&gt;
In order to have meaningful discussion, I suggest that in advanced of the hackfest, each participant is assigned (or volunteers for) one of those bit. They are then expected to read every open bug and feature request for that component, and spend some time following the associated forum, and come up with a summary of what the most pressing issues there seem to be. Then at the hackfest they would lead that discussion section, kicking off by explaining to the rest of us what they learned during their research.&lt;br /&gt;
&lt;br /&gt;
Naturally, if we do this, I volunteer for the quiz and question bank. Of course, I already have a pretty good idea what is going on there. I guess this would probably be more work if people had to look at an area they had not thought about before, so that is not fair.--[[User:Tim Hunt|Tim Hunt]] ~10:00, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1. Naturally, I volunteer for Workshop, given that the Tim&#039;s last sentence applies for my case, too. --[[User:David Mudrak|David Mudrak]] 10:51, 7 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===How about a work-on-2.0 day===&lt;br /&gt;
&lt;br /&gt;
The aim would be that by the end of the day, we have fixed as many of the Fix-for 2.0 bugs as possible, and also have reviewed all the ones that we cannot fix immediately, so we end up with a really good, triaged bug-list of what is left to be done. By the end of the day, all the bugs should be assigned to someone who feels confident they will be able to fix it.--[[User:Tim Hunt|Tim Hunt]] 09:41, 8 August 2009 (UTC) and Dan Poltawski. We discussed this at the GBBF last night.&lt;br /&gt;
&lt;br /&gt;
===&#039;Prepared&#039; Bug Squashing===&lt;br /&gt;
&lt;br /&gt;
Basically the same as the above suggestion, but I want to emphasise some preperation beforehand so that we can get to the real unsolved issues which would benefit with us all being in the same room and discussing solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With each bug we triage before the hackfest, we should try to:&lt;br /&gt;
* a) Link or close issues which have been fixed, or will be fixed by 2.0 (etc)&lt;br /&gt;
* b) Document unsolved issues which we need discussion or a plan to be fixed (&#039;&#039;&#039;this is most important for the hackfest itself&#039;&#039;&#039;)&lt;br /&gt;
* c) Document bugs which could be fixed with a little time (at the hackfest or later)&lt;br /&gt;
* d) Document bugs to pester someone else about ;-)&lt;br /&gt;
&lt;br /&gt;
Depending on how much time you can devote, I suggest trying these triaging views in order:&lt;br /&gt;
* 1) Reviewing all open bugs reported by yourself, starting oldest first.&lt;br /&gt;
* 2) Reviewing your assigned issues, starting with oldest first &lt;br /&gt;
* 3) Reviewing &#039;nobody&#039; or &#039;imported&#039; bugs starting with the oldest first.&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
There is a lot of old cruft in the tracker. Many of the issues have or will be fixed soon, so we could do a lot by just looking at our own issues and setting the status/links appropiately. For all the others, some are just without a decided solution - these would be great ones to at least think about discussing. --[[User:Dan Poltawski|Dan Poltawski]] 17:28, 15 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Theme_reference&amp;diff=58776</id>
		<title>Theme reference</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Theme_reference&amp;diff=58776"/>
		<updated>2009-06-24T21:57:26Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: adding link to cleo moodle guidelines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Themes}}&lt;br /&gt;
This is a reference manual for the theme class and id values.  It is based on Moodle 1.54.  Please make a note for items that are 1.6, 1.7, 1.8, or 2.0 specific.&lt;br /&gt;
&lt;br /&gt;
==Login Page==&lt;br /&gt;
&lt;br /&gt;
*The main part of the page above the breadcrumb navigation.&lt;br /&gt;
&lt;br /&gt;
div id = &amp;quot;page&amp;quot; - The background of the whole page.&amp;lt;br&amp;gt;&lt;br /&gt;
div id = &amp;quot;header&amp;quot; - The header section of the page.&amp;lt;br&amp;gt;&lt;br /&gt;
div class = &amp;quot;headermain&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
div class = &amp;quot;headermenu&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
div class = &amp;quot;logininfo&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The breadcrumb navigation.&lt;br /&gt;
&lt;br /&gt;
table class = &amp;quot;navbar&amp;quot; - Box surrounding the naviational items.&amp;lt;br&amp;gt;&lt;br /&gt;
div class = &amp;quot;breadcrumb&amp;quot; - navigational breadcrumb text.&amp;lt;br&amp;gt;&lt;br /&gt;
div class = &amp;quot;navbutton&amp;quot; - drop down box for language selection.&amp;lt;br&amp;gt;&lt;br /&gt;
div class = &amp;quot;langmenu&amp;quot; - drop down box for language selection.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The actual content of the page&lt;br /&gt;
&lt;br /&gt;
div id = &amp;quot;content&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
table class = &amp;quot;loginbox&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
div class = &amp;quot;header left&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
div class = &amp;quot;header right&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
td class = &amp;quot;content left&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
td class = &amp;quot;content right&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* adds a background image to the content of the login box&lt;br /&gt;
   on both the right and left side */&lt;br /&gt;
.loginbox .content {  &lt;br /&gt;
  border-color:#DDDDDD;&lt;br /&gt;
	background-color: white;&lt;br /&gt;
	background-image:url(gen_background2.jpg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* adds a background image to the header text &lt;br /&gt;
   above the login box on both the right and left side */&lt;br /&gt;
#content .header {&lt;br /&gt;
 border-color: #dddddd;   &lt;br /&gt;
  background-color:#FCFCFC;&lt;br /&gt;
	background-image: url(cellpic3.gif);&lt;br /&gt;
	color: #dddddd;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: There is class called &amp;quot;content&amp;quot; and there is an id called &amp;quot;content&amp;quot;.  Make sure that you are referencing the correct one.&lt;br /&gt;
&lt;br /&gt;
Note: &amp;quot;header&amp;quot; is a class name and an id name.  Be careful.&lt;br /&gt;
&lt;br /&gt;
==Main Page==&lt;br /&gt;
===Course view===&lt;br /&gt;
&lt;br /&gt;
===Category view===&lt;br /&gt;
&lt;br /&gt;
==Course Page==&lt;br /&gt;
&lt;br /&gt;
===Topic view===&lt;br /&gt;
&lt;br /&gt;
===Week view===&lt;br /&gt;
&lt;br /&gt;
===Social view===&lt;br /&gt;
&lt;br /&gt;
==Calendar Page==&lt;br /&gt;
&lt;br /&gt;
==Blog Page==&lt;br /&gt;
&lt;br /&gt;
==Assignments Page==&lt;br /&gt;
&lt;br /&gt;
==Chat Page==&lt;br /&gt;
&lt;br /&gt;
==Choice Page==&lt;br /&gt;
&lt;br /&gt;
==Forum Page==&lt;br /&gt;
&lt;br /&gt;
==Glossary Page==&lt;br /&gt;
&lt;br /&gt;
==Hot Pot==&lt;br /&gt;
&lt;br /&gt;
==Lesson Page==&lt;br /&gt;
&lt;br /&gt;
==Quiz Page==&lt;br /&gt;
&lt;br /&gt;
==Resource Page==&lt;br /&gt;
&lt;br /&gt;
==SCORM Page==&lt;br /&gt;
&lt;br /&gt;
==Survey Page==&lt;br /&gt;
&lt;br /&gt;
==Wiki Page==&lt;br /&gt;
&lt;br /&gt;
==Workshop Page==&lt;br /&gt;
&lt;br /&gt;
== See Also &lt;br /&gt;
* [[CLEO Moodle Theme Guidelines]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Coding_style&amp;diff=57946</id>
		<title>Development talk:Coding style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Coding_style&amp;diff=57946"/>
		<updated>2009-06-12T00:15:06Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: Martin &amp;amp; Eloy are not cool (tm)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PHP5 constructor ==&lt;br /&gt;
&lt;br /&gt;
Should we enforce the PHP5 constructor __construct() instead of $classname() [[User:Nicolas Connault|Nicolas Connault]] 19:55, 19 May 2009 (UTC)&lt;br /&gt;
:+1. I think we agreed about that some time ago (when igniting some 2.0 developments) --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 00:03, 20 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Inline comments ==&lt;br /&gt;
&lt;br /&gt;
I have been using since ages ago &amp;quot;///&amp;quot; with outer alignment (I think that it was caused by some agreement long time ago, not my decision), for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
function check_moodle_environment(..., ..., ..., ...) {&lt;br /&gt;
&lt;br /&gt;
    $status = true;&lt;br /&gt;
&lt;br /&gt;
/// This are cached per request&lt;br /&gt;
    static $result = true;&lt;br /&gt;
    static $env_results;&lt;br /&gt;
    static $cache_exists = false;&lt;br /&gt;
&lt;br /&gt;
/// if we have results cached, use them&lt;br /&gt;
    if ($cache_exists) {&lt;br /&gt;
        $environment_results = $env_results;&lt;br /&gt;
/// No cache exists, calculate everything&lt;br /&gt;
    } else {&lt;br /&gt;
    /// Get the more recent version before the requested&lt;br /&gt;
        if (!$version = get_latest_version_available($version, $env_select)) {&lt;br /&gt;
            $status = false;&lt;br /&gt;
        }&lt;br /&gt;
        ....&lt;br /&gt;
        ....&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Is that allowed, or only the &amp;quot;//&amp;quot; with inner alignment as commented at [[Development:Coding style#Inline comments|inline comments]] --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 00:03, 20 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I did start doing all mine this way, but if you look at the code it seems you and I are the only ones.  :P  It seems sensible to make the standard fit what most people are used to (and how most of the code looks). &lt;br /&gt;
-- [[User:Martin Dougiamas|Martin Dougiamas]] 06:02, 9 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eloy and Martin, this the only thing which consistently offends me about moodle coding style! Please go inline like all the cool kids ;-) --[[User:Dan Poltawski|Dan Poltawski]] 00:15, 12 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Trailing spaces==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Lines should not contain trailing spaces. In order to facilitate this convention, most editors can be configured to strip trailing spaces, such as upon a save operation. However, if you are editing an existing Moodle file and are planning to submit your changes to CVS, please switch off that feature so that whitespace changes do not pollute CVS history (other developers will have trouble viewing what you&#039;ve done if every other line has been edited for whitespace).&amp;quot;&lt;br /&gt;
Wouldn&#039;t the CVS history only get &#039;polluted&#039; when someone fetched a file that DIDN&#039;T follow this principle and returned it following the principle? Isn&#039;t that the price that has to be paid to clean things up? Otherwise this is pretty scary for someone who feels: &amp;quot;Great I can turn on my editor to autostrip those when saving. BUT I have to remember to turn that off if submitting it! (Or become a &#039;polluter&#039;!)&amp;quot; &lt;br /&gt;
And what happens if I have already saved it locally while working on (and striped those trailing spaces) and later try to commit it. Maybe my ignorance about CVS is making me pose a &amp;quot;silly&amp;quot; question. [[User:Jeff Forssell|Jeff Forssell]] 07:17, 27 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Jeff, the point with coding guidelines is that all new code must follow all the guidelines. With old bad code, mostly it is better to make the smallest change necessary when, for example, you fix a bug. That makes it clearest what the purpose of your change was. However, any line you do change while fixing the bug, you can then improve the coding style on that line. &lt;br /&gt;
&lt;br /&gt;
: Really good editors actually have an option &amp;quot;Strip trailing whitespace when saving a file - but only from lines that I have edited&amp;quot;, which is what you really want.&lt;br /&gt;
&lt;br /&gt;
: The real way to avoid being a CVS polluter is to follow the best practice and always do a cvs diff and review all your changes (and if necessary amend them) before you do a CVS commit.--[[User:Tim Hunt|Tim Hunt]] 03:52, 1 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Breaking up lines (e.g. huge arrays) ===&lt;br /&gt;
&lt;br /&gt;
The coding style says to align the start of the following lines with the element in the first.. e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$myarray = array( &#039;fred&#039; =&amp;gt; &#039;blue&#039;,&lt;br /&gt;
                  &#039;tom&#039;  =&amp;gt; &#039;green&#039; );&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I have to say I don&#039;t like this. While it looks very pretty it is a code maintenance nightmare. If you change (say) the array name you have to change every other line just to keep it looking nice. Surely if you &#039;&#039;&#039;must&#039;&#039;&#039; have it looking like this, do this...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$myarray = array(&lt;br /&gt;
    &#039;fred&#039; =&amp;gt; &#039;blue&#039;,&lt;br /&gt;
    &#039;tom&#039;  =&amp;gt; &#039;green&#039; );&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s the same issue with long lists of assignments - making all the RHSs line up. Completely unnecessary and just asking for errors. Don&#039;t encourage people to change code that they don&#039;t have to. If they don&#039;t touch it then they can&#039;t break it.   --[[User:Howard Miller|Howard Miller]] 13:52, 1 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Agree 100% with Howard, I prefer the 2nd alternative for sure, if not always, at least in places where indentation is already considerable. BTW, same for harcoded SQLs and other strings. --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 13:58, 1 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1 from me too for a fixed indent for follow-on lines. Actually I have always used 8-spaces (double the normal indent) ever since I started programming in Java and read their docing guidelines. I think it is helpful to have a different level of indent for a follow-on line and a block.&lt;br /&gt;
&lt;br /&gt;
: Sure, makes sense.  I&#039;ve fixed the docs.  The only exception IMO would be wrapping function parameters, which just look too wierd to me if you wrap them the same as arrays.  See [https://docs.moodle.org/en/Development:Coding_style#Wrapping_function_declarations the example]. -- [[User:Martin Dougiamas|Martin Dougiamas]] 06:08, 9 June 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:NEWMODULE_Adding_capabilities&amp;diff=56389</id>
		<title>Development:NEWMODULE Adding capabilities</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:NEWMODULE_Adding_capabilities&amp;diff=56389"/>
		<updated>2009-05-23T09:46:15Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: remove reference to glossary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{New_Module}}&lt;br /&gt;
In order to add a capabilities for your &amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt; you need to:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==1. Create a file access.php in the &amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt;/db directory==&lt;br /&gt;
&lt;br /&gt;
This should contain a list of the capabilities that you want to define. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$mod_&amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt;_capabilities = array(&lt;br /&gt;
    &#039;mod/&amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt;:&amp;lt;&amp;lt;CAPABILITYNAME&amp;gt;&amp;gt;&#039; =&amp;gt; array(&lt;br /&gt;
        &#039;riskbitmask&#039; =&amp;gt; RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG,&lt;br /&gt;
        &#039;captype&#039; =&amp;gt; &#039;write&#039;,&lt;br /&gt;
        &#039;contextlevel&#039; =&amp;gt; CONTEXT_MODULE,&lt;br /&gt;
        &#039;legacy&#039; =&amp;gt; array(&lt;br /&gt;
            &#039;student&#039; =&amp;gt; CAP_ALLOW,&lt;br /&gt;
            &#039;teacher&#039; =&amp;gt; CAP_ALLOW,&lt;br /&gt;
            &#039;editingteacher&#039; =&amp;gt; CAP_ALLOW,&lt;br /&gt;
            &#039;admin&#039; =&amp;gt; CAP_ALLOW&lt;br /&gt;
        )&lt;br /&gt;
    ),&lt;br /&gt;
&lt;br /&gt;
    // Add more capabilities here ...&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The various parts of the capability definition are:&lt;br /&gt;
&lt;br /&gt;
===Capability name (&#039;mod/&amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt;:&amp;lt;&amp;lt;CAPABILITYNAME&amp;gt;&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
This is the internal name used for this this capability. In addition to this internal name, you should also add the language string &amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt;:&amp;lt;&amp;lt;CAPABILITYNAME&amp;gt;&amp;gt; to your module&#039;s language file, to give the capability a name that users will see in the interface.&lt;br /&gt;
&lt;br /&gt;
===riskbitmask===&lt;br /&gt;
&lt;br /&gt;
Allowing people to do various things sometimes requires introducing possible security risks. For example, if you can post to a forum, you can post unsolicited advertising. To a certain extent users have to be trusted. To help administrators and teachers know what the issues are, each capability should list any associated risks. See [[Development:Hardening_new_Roles_system]]. will be reflected in the list of icons of each row of the &#039;Override permissions&#039;-&amp;gt;roles page.&lt;br /&gt;
&lt;br /&gt;
Technically, this value is a bit field, so you should combine the relevant risks constants with the &#039;|&#039; operator. So typical values might be:&lt;br /&gt;
* RISK_SPAM&lt;br /&gt;
* RISK_PERSONAL | RISK_XSS | RISK_DATALOSS&lt;br /&gt;
&lt;br /&gt;
===captype===&lt;br /&gt;
&lt;br /&gt;
Should be either &#039;read&#039; or &#039;write&#039;. &#039;read&#039; is for capabilities that just let you view things. &#039;write&#039; for capabilities that let you change things.&lt;br /&gt;
&lt;br /&gt;
===contextlevel===&lt;br /&gt;
&lt;br /&gt;
The context level where this capability is most relevant. If you are writing a module this will almost always be CONTEXT_MODULE. (This does not have much effect. It is just used to sort and group capabilities on the define roles and override roles pages.)&lt;br /&gt;
&lt;br /&gt;
===legacy===&lt;br /&gt;
&lt;br /&gt;
This is badly named, it would be better called &#039;defaultpermissions&#039; or something.&lt;br /&gt;
&lt;br /&gt;
This section defines, for each legacy role type, what permissions those roles should be given when your module is first installed (or when a new capability is detected on upgrade).&lt;br /&gt;
&lt;br /&gt;
Normally, you just add one line for each role that you want to give the capability to. The line should look like &#039;roletype&#039; =&amp;gt; CAP_ALLOW. Just leave out roles that you do not want to get the capability be default. Very exceptionally, you may need to specify a default permission of CAP_PREVENT, CAP_PROHIBIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2. Get Moodle to load the updated capabilities==&lt;br /&gt;
&lt;br /&gt;
The capabilities you defined are only read (and copied into the Moodle database) when your module is installed or upgraded. So every time you edit the db/access.php file you must&lt;br /&gt;
# Increase your module&#039;s version number by editing the file mod/&amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt;/version.php.&lt;br /&gt;
# Go to the the Administration ► Notifications page, and click through the steps to let Moodle upgrade itself. You should see the name of your module in one of the steps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3. Checking the capability in your code==&lt;br /&gt;
&lt;br /&gt;
In order to check whether the current user has a particular capability, you need to use the has_capability function. To do that, first you have to get the appropriate context. In this case, it will be a module context.&lt;br /&gt;
&lt;br /&gt;
1. First we need to get the $cm id, and verify that it is correct (there are lots of different ways you might do this, this is only an example.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$cmid = required_param(&#039;cmid&#039;, PARAM_INT);&lt;br /&gt;
if (!$cm = get_coursemodule_from_id(&#039;&amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt;&#039;, $cmid)) {&lt;br /&gt;
    error(&amp;quot;Course module ID was incorrect&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Then you get the module context:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$context = get_context_instance(CONTEXT_MODULE, $cm-&amp;gt;id);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Finally, you can actually check the permission&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
if (has_capability(&#039;mod/&amp;lt;&amp;lt;NEWMODULE&amp;gt;&amp;gt;:&amp;lt;&amp;lt;CAPABILITYNAME&amp;gt;&amp;gt;&#039;, $context)) {&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normally, you do 1. and 2. once at the top of a script, and then call has_capability as needed within the script with the appropriate capabilities.&lt;br /&gt;
&lt;br /&gt;
===Useful variations===&lt;br /&gt;
&lt;br /&gt;
====Controlling overall access to a script====&lt;br /&gt;
&lt;br /&gt;
Suppose you have a page that should only be available to users with a particular capability. For example, only users with mod/quiz:viewreports should be able to access mod/quiz/report.php. In cases like this, you can use the require_capability function:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
require_capability($capability, $context);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
near the top of your script. (As soon as you have got the context and called require_login is a good time.) All this does internally is&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
if (!has_capability($capability, $context)) {&lt;br /&gt;
    // Display error and exit.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
but using require_capability makes your code simpler and is recommended. (Of course, anywhere you might print a link to a page like this, you should only print the link if the user has the right capability.)&lt;br /&gt;
&lt;br /&gt;
====Getting a list of users with a capability====&lt;br /&gt;
&lt;br /&gt;
Suppose you need to get a list of all the users with a particular capability. (For example, the quiz reports list all the users with the mod/quiz:attempt capability. Then you can use the get_users_by_capability function. &lt;br /&gt;
&lt;br /&gt;
====Checking the permissions of another user====&lt;br /&gt;
&lt;br /&gt;
There is an optional 3rd parameter to has_capability that you can use to check another user&#039;s permissions:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
has_capability($capability, $context, $otheruser-&amp;gt;id);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Excluding administrators====&lt;br /&gt;
&lt;br /&gt;
Administrators have a magic &#039;moodle/site:doanything&#039; capability that gives them every other capability. If you wish to disable that magic override for one particular capability check, you can use the optional 4th parameter to has capability:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
has_capability($capability, $context, NULL, false);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
However, you normally should not do this.&lt;br /&gt;
&lt;br /&gt;
====Performance considerations====&lt;br /&gt;
&lt;br /&gt;
The has_capability function has been carefully optimised, and is pretty fast and you should not really worry. However, it has to perform a fairly complex computation, and if you are going to make exactly the same has_capability call several times in a page (perhaps in a loop) it is probably worth moving the permission check outside the loop. For example don&#039;t do:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
foreach ($attempts as $attempt) {&lt;br /&gt;
    if (has_capability(&#039;mod/quiz:viewreports&#039;, $context)) {&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Instead do&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$canviewreports = has_capability(&#039;mod/quiz:viewreports&#039;, $context);&lt;br /&gt;
foreach ($attempts as $attempt) {&lt;br /&gt;
    if ($canviewreports) {&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get_users_by_capability is a very expensive computation. If you are calling it more than once in your script, you are probably doing something wrong ;-)&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Roles]]&lt;br /&gt;
* [[Development:Hardening_new_Roles_system]] - information about risks&lt;br /&gt;
* [[Development:NEWMODULE_Documentation]] - NEWMODULE Documentation front page&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;br /&gt;
[[Category:Roles]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Importing_Moodle_CVS_history_into_git&amp;diff=55715</id>
		<title>Development:Importing Moodle CVS history into git</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Importing_Moodle_CVS_history_into_git&amp;diff=55715"/>
		<updated>2009-05-14T08:57:49Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: mos new versions of git dont have git-commands now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Importing CVS==&lt;br /&gt;
&lt;br /&gt;
To begin we must import the CVS repository into a local git filesystem using [http://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html git-cvsimport].&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 CVSROOT=:pserver:anonymous@uk.cvs.moodle.org:/cvsroot/moodle&lt;br /&gt;
 MODULE=moodle&lt;br /&gt;
 INSTALLDIR=moodle&lt;br /&gt;
 git cvsimport -p x -v -k -o cvshead -d $CVSROOT -C $INSTALLDIR $MODULE &amp;amp;&amp;gt; cvsimport.log&lt;br /&gt;
&lt;br /&gt;
(When might one want to use the -m -u and -s flags?)&lt;br /&gt;
 -u purely cosmetic&lt;br /&gt;
 -s slashes can cause problems but this doesn&#039;t seem to be the case with moodle&lt;br /&gt;
 -m ?&lt;br /&gt;
&lt;br /&gt;
This will run for a &#039;&#039;&#039;very&#039;&#039;&#039; long time as it checks out every revision of each file (including all branches).  However, if you run the command after a successful initial run it will simply get the new revisions since it was last run.  This creates a new git repository which can then be cloned and worked upon. &lt;br /&gt;
&lt;br /&gt;
At the time of writing the size of a new Moodle git repository was approximately 866MB &#039;&#039;unpacked&#039;&#039;, and 75MB packed. Newer versions of git pack the project during import, so your resulting repository plus checkout should be a bit over 100MB. Still, it is a good idea to pack the repository to make it smaller and faster, running &lt;br /&gt;
&lt;br /&gt;
 git-repack -a -d &lt;br /&gt;
&lt;br /&gt;
With the -o cvshead flag, the &amp;quot;HEAD&amp;quot; of the CVS repo will appear as &#039;cvshead&#039; in GIT, making things a lot clearer.&lt;br /&gt;
&lt;br /&gt;
==Importing CVS Faster==&lt;br /&gt;
&lt;br /&gt;
For initial imports, it is highly recommended that you fetch the CVS repository from one of Moodle [[CVS_for_Administrators#CVS_Servers | cvs servers]] and run the initial cvsimport against your local copy of the repository. &lt;br /&gt;
&lt;br /&gt;
:: For the more adventurous: Keith Packard wrote another importer that does a better job at the initial import, called parsecvs. I use parsecvs for the initial import and then git-cvsimport daily for the incremental imports. --[[User:Martin Langhoff|Martin Langhoff]] 15:04, 19 July 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:: It took me a few minutes to find the info in the Sourceforge docs on how to fetch the raw CVS repo via rsync. Just type &#039;rsync -av &amp;quot;rsync://moodle.cvs.sourceforge.net/cvsroot/moodle/moodle/*&amp;quot; .&#039; (without the single quotes) and you&#039;ll be done --[[User:Iñaki Arenaza|Iñaki Arenaza]] 17:54, 25 December 2006 (CST). &lt;br /&gt;
&lt;br /&gt;
:: This rsync command line doesn&#039;t work as-is anymore, since the repository was moved from sourceforge. Some mirrors (at least es.cvs.moodle.org at this time) provide rsync, but some don&#039;t (like eu.cvs.moodle.org). Find the best mirror for you and update the rsync call accordingly.&lt;br /&gt;
&lt;br /&gt;
After the initial import, you can run git-cvsimport against your favorite cvs.moodle.org mirror repository, or update your local copy via rsync as sas demonstrated in [http://www.progsoc.org/~wildfire/git/update-repo.sh this script].&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html git-cvsimport man page]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Importing Moodle CVS history into git]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Git_Migration_Workflows&amp;diff=55415</id>
		<title>Development:Git Migration Workflows</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Git_Migration_Workflows&amp;diff=55415"/>
		<updated>2009-05-07T09:18:24Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Workflows for Migrating to Git =&lt;br /&gt;
&lt;br /&gt;
Quite a number of developers are now familiar with git and are enthusiastic about the power and flexibility it brings to the development process. It is not clear how workflows in the current development process will transfer if a switch to git is made. &lt;br /&gt;
&lt;br /&gt;
Git doesn&#039;t place constraints to one model of development which is both a feature and a hindrance for people understanding how the development process takes place. A number of workflows need to be developed in order that developers can understand how git would fit into moodle development.&lt;br /&gt;
&lt;br /&gt;
Please edit this page to add your suggested workflows or questions for a workflow to do something.&lt;br /&gt;
&lt;br /&gt;
== General Model for Commiting to HEAD ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;: How do developers &#039;commit&#039; to the canonical repository?&lt;br /&gt;
&lt;br /&gt;
* Developers &#039;push&#039; to a central repository as happens with CVS now. Commit access is granted via ssh. (But external contributors can publish their git repository branches to developers with commit access for inclusion to the mainline)&lt;br /&gt;
* Developers push to their personal repository and an integrator/gatekeeper approves and merges changes (e.g. linus kernel branch) &lt;br /&gt;
* Others/hybrid approaches?&lt;br /&gt;
&lt;br /&gt;
== Commiting to STABLE branches ==&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;: How do developers commit to the stable branches? How do we ensure changes have been merged into head?&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Git]]&lt;br /&gt;
[[Category:Developer tools|Git]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Git_Migration_Workflows&amp;diff=55414</id>
		<title>Development:Git Migration Workflows</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Git_Migration_Workflows&amp;diff=55414"/>
		<updated>2009-05-07T09:17:19Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: New page: = Workflows for Migrating to Git =  Quite a number of developers are now familiar with git and are enthusiastic about the power and flexibility it brings to the development process. It is ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Workflows for Migrating to Git =&lt;br /&gt;
&lt;br /&gt;
Quite a number of developers are now familiar with git and are enthusiastic about the power and flexibility it brings to the development process. It is not clear how workflows in the current development process will transfer if a switch to git is made. &lt;br /&gt;
&lt;br /&gt;
Git doesn&#039;t place constraints to one model of development which is both a feature and a hindrance for people understanding how the development process takes place. A number of workflows need to be developed in order that developers can understand how git would fit into moodle development.&lt;br /&gt;
&lt;br /&gt;
Please edit this page to add your suggested workflows or questions for a workflow to do something.&lt;br /&gt;
&lt;br /&gt;
== General Model for Commiting to HEAD ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;: How do developers &#039;commit&#039; to the canonical repository?&lt;br /&gt;
&lt;br /&gt;
* Developers &#039;push&#039; to a central repository as happens with CVS now. Commit access is granted via ssh. (But external contributors can publish their git repository branches to developers with commit access for inclusion to the mainline)&lt;br /&gt;
* Developers push to their personal repository and an integrator/gatekeeper approves and merges changes (e.g. linus kernel branch) &lt;br /&gt;
* Others/hybrid approaches?&lt;br /&gt;
&lt;br /&gt;
== Commiting to STABLE branches ==&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;: How do developers commit to the stable branches? How do we ensure changes have been merged into head?&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Projects_for_new_developers&amp;diff=53334</id>
		<title>Projects for new developers</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Projects_for_new_developers&amp;diff=53334"/>
		<updated>2009-03-26T13:57:14Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: adding myself&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Moodle will be taking part in the [http://socghop.appspot.com/ Google Summer of Code] for our fourth year in 2009!&lt;br /&gt;
&lt;br /&gt;
If you&#039;re thinking of applying to work with Moodle for GSOC 2009, please see [[Applying to work with Moodle for GSOC]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This evolving page lists possible Moodle projects for new developers derived from community suggestions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you have any ideas for new features in Moodle which might be suitable as GSOC projects, please see [[Development:New feature ideas]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Custom report generator==&lt;br /&gt;
&lt;br /&gt;
An interface for enabling Moodle admins to create custom reports.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Mentors&#039;&#039;&#039;: To be confirmed&lt;br /&gt;
&lt;br /&gt;
For further details see:&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=116895 Feature for creating custom reports] forum discussion&lt;br /&gt;
* Tracker issue MDL-18323&lt;br /&gt;
&lt;br /&gt;
==Record audio repository plugin==&lt;br /&gt;
&lt;br /&gt;
Use a Flash or Java plugin to record the audio to a suitable compressed format. The data could then be uploaded as for a File upload plugin.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP and Flash or Java&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Mentors&#039;&#039;&#039;: To be confirmed&lt;br /&gt;
&lt;br /&gt;
For further details see:&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=117135 Record audio repository plugin] and [http://moodle.org/mod/forum/discuss.php?d=116968 GSOC: Record Audio/Video directly into resources/activities] forum discussions&lt;br /&gt;
* Tracker issue MDL-18341&lt;br /&gt;
&lt;br /&gt;
==Google Gears integration==&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Mentors&#039;&#039;&#039;: To be confirmed&lt;br /&gt;
&lt;br /&gt;
For further details see:&lt;br /&gt;
* http://gears.google.com&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=118015 Google Gears integration] and [http://moodle.org/mod/forum/discuss.php?d=107920 OLPC and GG-based offline-moodle] forum discussions&lt;br /&gt;
* Tracker issue MDL-18444&lt;br /&gt;
&lt;br /&gt;
==XML admin settings presets==&lt;br /&gt;
&lt;br /&gt;
Create an interface for allowing administrators to export settings in an XML file for restoring to another Moodle site.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Mentors&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=17383&amp;amp;course=5 Penny Leach] [http://moodle.org/user/view.php?id=104159&amp;amp;course=5 Dan Poltawski]&lt;br /&gt;
&lt;br /&gt;
For further details see:&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=118494 GSOC project: XML admin settings presets] forum discussion&lt;br /&gt;
* Tracker issue MDL-18548&lt;br /&gt;
&lt;br /&gt;
==Workflow support in the Database activity module==&lt;br /&gt;
&lt;br /&gt;
Add the ability to control the state of a database record, permissions at different state levels and email notifications.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP and understanding UML syntax of [http://en.wikipedia.org/wiki/State_diagram state diagrams], workflow principles&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Mentors&#039;&#039;&#039;: [https://docs.moodle.org/en/User:David_Mudrak David Mudrák]&lt;br /&gt;
&lt;br /&gt;
For further details see:&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=118830 Workflow support] forum discussion&lt;br /&gt;
* Tracker issue MDL-18572&lt;br /&gt;
&lt;br /&gt;
==Flash-Based Statistics Visualizer==&lt;br /&gt;
&lt;br /&gt;
Continue work done by [http://hackerdan.com/ Dan Servos] for GSoC 2008 to create a Moodle plugin that can visualize grades and other statistics interactively through a browser.  The [http://hackerdan.com/gsoc/screen-cast/ current version] allows users to do correlations, time-series charts, etc., on a lot of the data Moodle records; more viz tools, export, etc., would make it extremely useful to people dealing with large courses.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP and Flash&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Mentors&#039;&#039;&#039;: [mailto:gvwilson@cs.toronto.edu Greg Wilson]&lt;br /&gt;
&lt;br /&gt;
For further details see:&lt;br /&gt;
*[[Student projects/Animated grade statistics report]]&lt;br /&gt;
&lt;br /&gt;
==What You Paint Is What You Get extension to the WYSIWYG editor==&lt;br /&gt;
&lt;br /&gt;
Younger Moodle users like drawing and painting more than writing. Add a feature that lets the main text editor of Moodle switch to &amp;quot;draw&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP and Flash or JavaScript or other alternative&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: High&lt;br /&gt;
:&#039;&#039;&#039;Mentors&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=13727&amp;amp;course=5 Martin Langhoff]&lt;br /&gt;
&lt;br /&gt;
For further details see:&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=119670 gsoc: what you paint is what you get] forum discussion&lt;br /&gt;
* http://wiki.laptop.org/go/XS_Moodle_design#What_You_Paint_Is_What_You_Get_editor&lt;br /&gt;
* Tracker issue MDL-18651&lt;br /&gt;
&lt;br /&gt;
==Blog-style course format==&lt;br /&gt;
&lt;br /&gt;
Course formats drive the main page in Moodle -- the course page. The existing course formats assume that the teacher has everthing planned ahead of time, and that the course fits in one page. Primary teachers live in a different world -- they prepare each day no more than a few days beforehand, and their course is a year long. A blog-style format can make their life much much simpler.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium-low&lt;br /&gt;
:&#039;&#039;&#039;Mentors&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=13727&amp;amp;course=5 Martin Langhoff]&lt;br /&gt;
&lt;br /&gt;
For further details see:&lt;br /&gt;
* Tracker issue MDL-18652&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[GSOC]] - describing Moodle&#039;s involvement with Google in their Summer of Code program&lt;br /&gt;
* [[Talk:Projects for new developers]] for 2008 project ideas which have not yet been implemented&lt;br /&gt;
* [[Development:Usability/Improve Moodle User Experience Consistency]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GSOC]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Weekly_Code_Review&amp;diff=53072</id>
		<title>Development:Weekly Code Review</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Weekly_Code_Review&amp;diff=53072"/>
		<updated>2009-03-23T14:37:49Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* Every Tuesday */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Moodle has a weekly process of code review in the stable branches to help improve the quality of stable packages and to help detect any regressions that may have occurred in stable code.&lt;br /&gt;
&lt;br /&gt;
Here is the process for testers and developers:&lt;br /&gt;
&lt;br /&gt;
==Every Tuesday==&lt;br /&gt;
&lt;br /&gt;
===Don&#039;t check any new fixes into CVS===&lt;br /&gt;
&lt;br /&gt;
HEAD is OK, but please avoid new fixes in all STABLE branches unless they are definitely definitely not going to cause new bugs  ;-)&lt;br /&gt;
&lt;br /&gt;
===Find bugs to test===&lt;br /&gt;
&lt;br /&gt;
All developers and testers should be looking at:&lt;br /&gt;
&lt;br /&gt;
 Moodle 1.9 stable:  [http://tracker.moodle.org/secure/IssueNavigator.jspa?mode=hide&amp;amp;requestId=10565 1.9.x Needs QA review]&lt;br /&gt;
&lt;br /&gt;
(Make sure you can see the QA Assigned column)&lt;br /&gt;
&lt;br /&gt;
Grab any bug that:&lt;br /&gt;
&lt;br /&gt;
* Is from the last week&lt;br /&gt;
* You did not fix&lt;br /&gt;
* Does not have a QA assignee yet &lt;br /&gt;
&lt;br /&gt;
and claim it by editing the bug to add your name as QA Assignee.&lt;br /&gt;
&lt;br /&gt;
===Test the fix===&lt;br /&gt;
&lt;br /&gt;
* Read the comments &lt;br /&gt;
* Look at the patch attached to the tracker&lt;br /&gt;
* Try the feature out to make sure it works as advertised &lt;br /&gt;
** Ensure you have debugging set to the DEBUG_DEVELOPER &amp;amp; look for new errors&lt;br /&gt;
** Test for potential regressions in other areas the fix may affect&lt;br /&gt;
* Post new comments (or talk on Moodle HQ) if you need clarification&lt;br /&gt;
&lt;br /&gt;
===Deal with any problems===&lt;br /&gt;
&lt;br /&gt;
* Post a comment on the bug with details (preferably including patch!)&lt;br /&gt;
* Reopen the bug&lt;br /&gt;
* If it looks like the original developer isn&#039;t seeing it, reassign to Eloy Lafuente for [[Development:Bug triage|triage]]&lt;br /&gt;
* If the fix is obvious and you have CVS access, fix it yourself&lt;br /&gt;
&lt;br /&gt;
===Mark the fix as reviewed===&lt;br /&gt;
&lt;br /&gt;
* When you are satisfied the bug is correctly fixed, simply change the status from Resolved to Closed&lt;br /&gt;
* If you committed any fix, let somebody else review it again - do not Close it yourself&lt;br /&gt;
&lt;br /&gt;
==Every Wednesday==&lt;br /&gt;
&lt;br /&gt;
* The download site will automatically tag the whole current stable codebase (e.g. MOODLE_19_WEEKLY) at 1:00 GMT on Wednesday morning and then build download packages&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=93474 Tuesday Code Reviews] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Weekly Code Review]]&lt;br /&gt;
[[Category:Quality Assurance]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Installations_30000_plus&amp;diff=50428</id>
		<title>Installations 30000 plus</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Installations_30000_plus&amp;diff=50428"/>
		<updated>2009-02-08T01:14:49Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Large Installations}}&lt;br /&gt;
&lt;br /&gt;
==Austria==&lt;br /&gt;
&lt;br /&gt;
* Federal Ministry of Education - [http://http://www.eduhi.at/ education highway]: [http://www.edumoodle.at Free Moodle for Austrian schools.]&lt;br /&gt;
(02/Sept/2008)&lt;br /&gt;
 - 3.849 courses&lt;br /&gt;
 - 114.845 users&lt;br /&gt;
 - 1.000+ schools&lt;br /&gt;
 - 1 Installation&lt;br /&gt;
&lt;br /&gt;
==Brazil==&lt;br /&gt;
&lt;br /&gt;
* [http://aprender.unb.br Universidade de Brasília] - 34,587 users (12/20/2007)&lt;br /&gt;
&lt;br /&gt;
==United Kingdom==&lt;br /&gt;
&lt;br /&gt;
* The UK&#039;s [http://www.open.ac.uk/ Open University], a world leading institution and innovator in distance learning based in Milton Keynes, Buckinghamshire, England is well on the way to creating the world&#039;s largest Moodle installation in a £5 Million project. It is expected to host nearly 200,000 students. [http://www3.open.ac.uk/media/fullstory.aspx?id=7354 OU&#039;s News item]&lt;br /&gt;
&lt;br /&gt;
* While not a single moodle, [http://www.luns.net.uk LUNS ltd] host one of the largest clusters of Moodle installs for [http://www.cleo.net.uk/ CLEO] , with over 175,000 registered users across over 700 individual moodle installs provided to every school in Cumbria and Lancashire. Approximately 50,000 users have been active in the last month as of Jan 09.&lt;br /&gt;
&lt;br /&gt;
==United States==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sfsu.edu San Francisco State University (SFSU)] - 89,543 users (02/07/2008). Among these 89K users, about 35,430 users are considered as currently active.&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Installations_30000_plus&amp;diff=50427</id>
		<title>Installations 30000 plus</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Installations_30000_plus&amp;diff=50427"/>
		<updated>2009-02-08T01:11:17Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: adding note about the CLEO install&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Large Installations}}&lt;br /&gt;
&lt;br /&gt;
==Austria==&lt;br /&gt;
&lt;br /&gt;
* Federal Ministry of Education - [http://http://www.eduhi.at/ education highway]: [http://www.edumoodle.at Free Moodle for Austrian schools.]&lt;br /&gt;
(02/Sept/2008)&lt;br /&gt;
 - 3.849 courses&lt;br /&gt;
 - 114.845 users&lt;br /&gt;
 - 1.000+ schools&lt;br /&gt;
 - 1 Installation&lt;br /&gt;
&lt;br /&gt;
==Brazil==&lt;br /&gt;
&lt;br /&gt;
* [http://aprender.unb.br Universidade de Brasília] - 34,587 users (12/20/2007)&lt;br /&gt;
&lt;br /&gt;
==United Kingdom==&lt;br /&gt;
&lt;br /&gt;
* The UK&#039;s [http://www.open.ac.uk/ Open University], a world leading institution and innovator in distance learning based in Milton Keynes, Buckinghamshire, England is well on the way to creating the world&#039;s largest Moodle installation in a £5 Million project. It is expected to host nearly 200,000 students. [http://www3.open.ac.uk/media/fullstory.aspx?id=7354 OU&#039;s News item]&lt;br /&gt;
&lt;br /&gt;
* While not a single moodle, [http://www.luns.net.uk LUNS ltd] host one of the largest clusters of Moodle installs for [http://www.cleo.net.uk/ CLEO] , with over 175,000 registered users across over 700 individual moodle installs provided for to every school in Cumbria and Lancashire. Approximately 50,000 users have been active in the last month as of Jan 09.&lt;br /&gt;
&lt;br /&gt;
==United States==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sfsu.edu San Francisco State University (SFSU)] - 89,543 users (02/07/2008). Among these 89K users, about 35,430 users are considered as currently active.&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Web_services&amp;diff=49967</id>
		<title>Development talk:Web services</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Web_services&amp;diff=49967"/>
		<updated>2009-02-03T07:32:40Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==general remarks about OUTPUT of operations:==&lt;br /&gt;
Is true of false informative enough ?&lt;br /&gt;
Should the API have some sort of &amp;quot;last_error&amp;quot; function giving back more details such as &amp;quot;non existing course, non existing user, duplicate entry ...)&lt;br /&gt;
Shall we consider that affecting a role that already exist or removing role that do not exist as an error (output=false) or not (output=true)&lt;br /&gt;
:yep, agree, I&#039;d result always one well defined $result object, with his status, error code and error msg (and perhaps, the whole original WS request encapsulated for easier debugging).&lt;br /&gt;
:[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 19:55, 21 December 2007 (CST)&lt;br /&gt;
I agree but throught the WS we need to be  be carefull with the feedback we give to errors, due to security issues. --[[User:Ludo (Marc Alier)|Ludo (Marc Alier)]] 14:14, 22 December 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
==some WS to be able to... build courses ?==&lt;br /&gt;
Perhpas it would be a great idea to start thinking about some WS functionalities like this:&lt;br /&gt;
&lt;br /&gt;
* add_course, delete_course, reset_course&lt;br /&gt;
* add_section, delete_section, show_section, hide_section&lt;br /&gt;
* add_activity, delete_activity, show_activity, hide_activity&lt;br /&gt;
&lt;br /&gt;
Apart from the WS utility itself: automated creation of courses... it would help (or force, as we prefer), to better encapsulate course/section/modules internals, 100% isolating the creation and configuration from the frontend (forms, WS...). It implies some decisions, like upwards compatibility of old modules (although I think it can be maintained)... and so on, you know.&lt;br /&gt;
&lt;br /&gt;
Just one idea to analyse. But with benefits in the end, IMO.&lt;br /&gt;
[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 20:02, 21 December 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
I do agree with this ; this would also allow creation of specific courses, customized for some users, depending of their &amp;quot;performances&amp;quot; in external evaluations methods ; when the ePortfolio API will be finalized in Moodle core&#039;s, accessing the portfolio of any user would be  needed.&lt;br /&gt;
[[User:Patrick Pollet|Patrick Pollet]] 04:21, 30 December 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
==the problem of ID of entity to fetch:==&lt;br /&gt;
In the list of API calls defined in this page, Moodle entity to process (user,course,grade,event ...) is identified by an ID, that is implicitly the Moodle&#039;s internal id field used in the database. This raises a problem since it is very likely that in the &amp;quot;external SIS&amp;quot; talking to Moodle across the Web Service, the entity will be identified by another attribute such as an idNumber (user,course), a short name (course) or even an username (login of user). &lt;br /&gt;
&lt;br /&gt;
So either we must provide :&lt;br /&gt;
&lt;br /&gt;
* extra API calls to convert external identifiers to Moodle&#039;s internal id, such as user_id_from_idnumber, user_id_from_username, course_id_from_shortname ..., at the cost of extra calls   before the real one ; three calls would be needed to enrol student &amp;quot;CS2121212&amp;quot;, to course &amp;quot;JAVA_101&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
* extra API functions such as delete_user_byusername, get_course_by_idnumber , enrol_student_byidnumber_tocourse_byshortname ....&lt;br /&gt;
&lt;br /&gt;
* or add parameters to the current API calls specifiying what identifier we are using  such as delete_user(id,idField) with idField being a string that could be &amp;quot;id&amp;quot;,&amp;quot;idnumber&amp;quot;,&amp;quot;username&amp;quot;,&amp;quot;email&amp;quot; ... or enrol_student(sid,&amp;quot;idnumber&amp;quot;,cid,&amp;quot;shortname&amp;quot;) . This is the approach in the current SOAP implementation (with some calls of the previous type (get_user_byusername()...)   &lt;br /&gt;
&lt;br /&gt;
[[User:Patrick Pollet|Patrick Pollet]] 04:21, 30 December 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
== output of operations: adding URLs?==&lt;br /&gt;
In addition, I suggest to return the full URL towards every Moodle entity, either added or got.&lt;br /&gt;
* user added with id 12345 --&amp;gt; http://moodle.xxx.edu/user/view.php?id=12345&amp;amp;course=1&lt;br /&gt;
* got user 12345 --&amp;gt; http://moodle.xxx.edu/user/view.php?id=12345&amp;amp;course=1&lt;br /&gt;
* course added with id 67 --&amp;gt; http://moodle.xxx.edu/course/view.php?id=67&lt;br /&gt;
* got course 67 --&amp;gt; http://moodle.xxx.edu/course/view.php?id=67&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
Today, in my uPortal installation, I request for Moodle database and display a list of courses in which the connected user is enrolled. Of course I provide links to these courses so that he can directly access. In addition I display a list of the last changes in these courses, again with links to the resources/activities.&lt;br /&gt;
&lt;br /&gt;
If the URLs are returned by the WS then the calling service has nothing to know about Moodle URLs. Else it has to build every URL by aggregating Moodle alias + adequate PHP script + entity ID&lt;br /&gt;
&lt;br /&gt;
== Implementation feedback ==&lt;br /&gt;
&lt;br /&gt;
[Feedback]&lt;br /&gt;
Speaking as someone who will be using this API to integrate with another line of business application I would recommend the following changes.&lt;br /&gt;
&lt;br /&gt;
The add_user method should really be a &#039;SetUser&#039; ie it will create the record if it does not exist or update it it if it does. The ID that is passed into the method would be *our* primary key which Moodle would use to recognise the user record within Moodle. We would not normally need to know anything about the Moodle primary key.&lt;br /&gt;
&lt;br /&gt;
One option to make the web services maintainable is to accept XML as a parameter and not a structure or custom object. That way you can define an XSD which will define required\optional parameters. Equally if you include a version number you can change the XML to add new features without having to redefine the web service signature itself (and hence clients will not have to recompile their code). So you may receive a SetUser call with XML V1.0 and another with XML V2.0 on the same webservice but from two different clients supporting different versions of the API.&lt;br /&gt;
&lt;br /&gt;
The method *must* accept an array of users - it&#039;s a little trickier to set this up in the client code but is much more scalable (if there&#039;s some good sample code then this is easier anyway). The latency (round trip time) with web service calls is high so you want to do as much as you can in a single call. We have a customer who wants us to deploy Moodle to 40,000 users - we&#039;re not going to do that using individual calls.&lt;br /&gt;
&lt;br /&gt;
Would it be possible to expand on the existing web service work rather than produce something completely new? We&#039;re investing a lot of effort with these services and we wouldn&#039;t like to have to re-do that work.&lt;br /&gt;
[/Feedback]&lt;br /&gt;
&lt;br /&gt;
== Using web services to allow client side code such as js, Flash/Flex or java to communicate with Moodle ==&lt;br /&gt;
&lt;br /&gt;
I understand these web services should also allow client side code to communicate with Moodle.&lt;br /&gt;
&lt;br /&gt;
I imagined that web services used by client side code should be authenticated with a &#039;session key&#039;. When the server outputs a page with such an object in it then a random session key string should be created and passed into the client side code through the html that embeds/outputs the object in a page. I think the session key should be associated with a user and probably a Moodle context. Then the context can be used within block related code or activity module related code to know when for example the client side code passes a log message back to Moodle or when it passes a grade back to Moodle that the grade is for such and such an activity. For web services for Flash I thought an appropriate way to do this would be to have an array of objects of session keys and there associated context/other data in the $SESSION object.&lt;br /&gt;
&lt;br /&gt;
== Config settings ==&lt;br /&gt;
&lt;br /&gt;
This are the main switches / global config settings to control what&#039;s available:&lt;br /&gt;
&lt;br /&gt;
* WS Global switch:&lt;br /&gt;
** Check for global$CFG-&amp;gt;enablewebservices properly (outer layer).&lt;br /&gt;
* WS Capability:&lt;br /&gt;
** Create the &#039;moodle/site:use webservices&#039; capability and check for it in medium layer globally (after auth). Default to admin role only.&lt;br /&gt;
* WS Protocol/Function switches:&lt;br /&gt;
** Create new setting $CFG-&amp;gt;enabledwsprotocols, with list of enabled protocols (default to none) and check request against that (outer layer)&lt;br /&gt;
** Create new setting $CFG-&amp;gt;enabledwsfunctions, with list of enabled functions (default to none) and check request against that (on function invocation)&lt;br /&gt;
* WS Function capabilities?? Not sure (overlay with normal capabilities). -1&lt;br /&gt;
* Other restrictions (fixed list of users, IP, SSL required...)&lt;br /&gt;
[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 08:44, 27 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
== IP restriction ==&lt;br /&gt;
&lt;br /&gt;
We&#039;d like a feature to restrict web services to a list of specified IP addresses for additional security. On our services we just have like this:&lt;br /&gt;
&lt;br /&gt;
 $allowedaddresses=preg_split(&#039;/[,\s]+/&#039;,$CFG-&amp;gt;privilegedserverips,-1,PREG_SPLIT_NO_EMPTY);&lt;br /&gt;
 if(!in_array($_SERVER[&#039;REMOTE_ADDR&#039;],$allowedaddresses,true)) {&lt;br /&gt;
    error(&#039;You are not permitted to access this page.&#039;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
(note I think REMOTE_ADDR may not be reliable on all systems? eh whatever)&lt;br /&gt;
&lt;br /&gt;
so we use a comma-separated list of IP addresses that are permitted. Something similar would be good for this.&lt;br /&gt;
&lt;br /&gt;
Maybe it should really go into the user section ie a way to restrict a specific user to given IPs? Of course ideally it would then support ranges/wildcards as well, etc, but then it becomes a lot of work instead of a simple option to the webservice stuff...&lt;br /&gt;
&lt;br /&gt;
[[User:sam marshall|sam marshall]] 08:52, 27 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
:There is already a nice address_in_subnet function in lib/moodlelib.php, which gives you a flexible way to check IP addresses. Normally used in combination with getremoteaddr(), also in moodlelib.--[[User:Tim Hunt|Tim Hunt]] 20:40, 27 January 2009 (CST)&lt;br /&gt;
&lt;br /&gt;
== Why the Auth Plugin? ==&lt;br /&gt;
Just curious what I missed - what was the reason for implementing a web services auth plugin? I agree with what Eloy said in chat - the problem with this approach is that you&#039;d probably want to apply any restrictions that might be implemented in the plugin to be applied to users with traditional authentication? --[[User:Dan Poltawski|Dan Poltawski]] 01:32, 3 February 2009 (CST)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:MNet&amp;diff=49948</id>
		<title>Development:MNet</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:MNet&amp;diff=49948"/>
		<updated>2009-02-02T22:42:57Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: fix definiton of is_mnet_remote_user (following on from MDL-18118)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 1.8}}&lt;br /&gt;
&lt;br /&gt;
Random notes for Moodle Network. Should get these organised...&lt;br /&gt;
&lt;br /&gt;
* Documentation for administrators is here [[Moodle Network]]&lt;br /&gt;
* Some old documentation about the initial planning and dev&lt;br /&gt;
** [[Community_hub]]&lt;br /&gt;
** [[Community_hub_technotes]]&lt;br /&gt;
** [[Community_hub_progress]]&lt;br /&gt;
&lt;br /&gt;
=Key config variables and functions=&lt;br /&gt;
&lt;br /&gt;
     // what mnethostid should &amp;quot;local&amp;quot; users have?&lt;br /&gt;
     // this is guaranteed to be set, except during the 1.7-&amp;gt;1.8 upgrade&lt;br /&gt;
     $id = $CFG-&amp;gt;mnet_localhost_id; &lt;br /&gt;
     &lt;br /&gt;
     // a quick way to check if our user is remote:&lt;br /&gt;
     is_mnet_remote_user($user); &lt;br /&gt;
     // internally is_mnet_remote_user() does&lt;br /&gt;
     // if ($user-&amp;gt;mnethostid != $CFG-&amp;gt;mnet_localhost_id)&lt;br /&gt;
&lt;br /&gt;
     // Are we listening to mnet requests? Nothing else works if we aren&#039;t.&lt;br /&gt;
     if ($CFG-&amp;gt;mnet_dispatcher_mode === &#039;strict&#039;) {&lt;br /&gt;
         // Moodle is listening to mnet requests. Nothing else works if we aren&#039;t.&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     // Are we allowing remote users in via auth/mnet?&lt;br /&gt;
     if (is_enabled_auth(&#039;mnet&#039;)) {&lt;br /&gt;
          // yes indeed&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     // Will auth/mnet autocreate new user accts?&lt;br /&gt;
     if (get_config(&#039;auth/mnet&#039;, &#039;auto_add_remote_users&#039;)) {&lt;br /&gt;
         // yes it will!&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
=Protocols=&lt;br /&gt;
&lt;br /&gt;
==MNET handshake==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Authentication/SSO==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Enrolment==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=To Do=&lt;br /&gt;
&lt;br /&gt;
Some immediate items that would add polish without major surgery&lt;br /&gt;
&lt;br /&gt;
* Exchange more enrolment info at log-entry exchange time on cron&lt;br /&gt;
* Special default role&lt;br /&gt;
** Add a new &amp;quot;remote student&amp;quot; role&lt;br /&gt;
** Add a config var to enrol/mnet: &amp;quot;defaultremoterole&amp;quot; to use &amp;quot;remote student&amp;quot;&lt;br /&gt;
** Add a config var to the courses table to optionally override defaultremoterole&lt;br /&gt;
* Nicer CSS in the &amp;quot;my courses&amp;quot; listing in moodle homepage for remote hosts and remote courses. See course/lib.php print_remote_course() and print_remote_host().&lt;br /&gt;
&lt;br /&gt;
=Roadmap=&lt;br /&gt;
&lt;br /&gt;
A bit more work, and a whole lot more features. From easy to hard...&lt;br /&gt;
&lt;br /&gt;
* Better per-host stats and log views for administrators. This is relatively easy using data we already have.&lt;br /&gt;
* In mod/forum craft a special URL for remote users so that the post URL is in the wantsurl parameter, so they can bounce-off their IDP in one go. &lt;br /&gt;
** According to Jonathan Harker, this requires that we modify jump to accept the remote wwwroot as a parameter. Also: will this be safe enough?&lt;br /&gt;
* Display aggregated calendar on the IDP&lt;br /&gt;
* Exchange grades. Needs a bit of design.&lt;br /&gt;
* Build a SCORM/IMSCP/MoodleZip repository scheme.&lt;br /&gt;
** MartinL has some ideas on how to get this done in easy and super-scalable.&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Moodle Network]]&lt;br /&gt;
[[Category:MNET]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Site-wide_groups&amp;diff=49133</id>
		<title>Site-wide groups</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Site-wide_groups&amp;diff=49133"/>
		<updated>2009-01-21T12:42:02Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* Explaining why we need site-wide groups for enrolment purposes (Dan Poltawski) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Explaining why we need site-wide groups for enrolment purposes (Dan Poltawski) ==&lt;br /&gt;
&lt;br /&gt;
In my experience the need for site wide groups has not been entirely clear to developers, especially unclear is why existing enrolment plugins are not sufficient for schools (K12/primary/secondary), especially when compared to higher education. I developed the [http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=1585&amp;amp;filter=1 CLEO MIS Tool] as a stop-gap solution to address some of the deficiencies and this has been very popular. I&#039;m convinced of the need for &#039;a solution&#039; so I will try and explain the reasons here. &lt;br /&gt;
&lt;br /&gt;
===Dans Example Simplified school ===&lt;br /&gt;
&lt;br /&gt;
====Components====&lt;br /&gt;
* School Moodle&lt;br /&gt;
** Maintained by teachers or curriculum support staff &lt;br /&gt;
** Rapidly changing&lt;br /&gt;
** Course design can vary across schools/ departments/ teaching staff&lt;br /&gt;
&lt;br /&gt;
* MIS (student information) System&lt;br /&gt;
** Contains student details, class lists etc &lt;br /&gt;
** Maintained by school administrative staff&lt;br /&gt;
** Relatively static and standardised, used to generate reports, timetables etc&lt;br /&gt;
** Often contains &#039;&#039;imperfect&#039;&#039; data&lt;br /&gt;
&lt;br /&gt;
* Relevant to both - don&#039;t typically have sophisticated technical support to craft data to integrate both&lt;br /&gt;
&lt;br /&gt;
====Existing Solutions====&lt;br /&gt;
&lt;br /&gt;
* Use an enrolment plugin to generate enrolments from MIS System&lt;br /&gt;
** Requires a class group from MIS to map directly to a course &lt;br /&gt;
** A moodle course has to be created for every single physical class (not how it works practically- nightmare for teachers)&lt;br /&gt;
** The &#039;course design&#039; to be consistent across school (One teacher might create a single moodle course for all her physical classes, another might created one moodle course shared across classes and other variations).&lt;br /&gt;
** &#039;The power&#039; to do stuff is in the teachers hands - largely automatic rather than teacher choosing who they wish in each course&lt;br /&gt;
&lt;br /&gt;
* Manual Enrolment (This is typically how many many schools use moodle)&lt;br /&gt;
** Teacher assigns every user from the complete list (1000+) of users one at a time&lt;br /&gt;
** If using groups mode in the course, picks these out individually too&lt;br /&gt;
** Massive time hog&lt;br /&gt;
&lt;br /&gt;
* CLEO MIS Tool&lt;br /&gt;
** Good&lt;br /&gt;
*** Populates &#039;class groups&#039; (separate db table -unrelated to core stuff) from MIS system via csv import&lt;br /&gt;
*** At role assignment time, teacher can select a MIS class group from list and assign all users in group at once (rather than stuednt at a time)&lt;br /&gt;
*** Can assign multiple class groups to one course, or any variation&lt;br /&gt;
*** Power is in the teachers hands how to organise&lt;br /&gt;
*** MIS Grouped enrolment at any role-assignment point&lt;br /&gt;
** Bad&lt;br /&gt;
*** Intentionally dumb: simply selects the users who are present in a mis group at a specific time and enrols them, changes in MIS groups are not reflected in role assignments over time&lt;br /&gt;
*** Doesn&#039;t create course level groups in moodle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====The Dream Solution====&lt;br /&gt;
* MIS System populates &#039;global groups&#039; data &lt;br /&gt;
* Global groups can be populated by multiple plugins (extension to existing enrolment plugins?)&lt;br /&gt;
* Teacher can assign any number of global groups to a course - these can also populate course groups (for separate groups mode etc)&lt;br /&gt;
* Changes in MIS data reflected in course enrolments (At least for users added)&lt;br /&gt;
&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 06:32, 21 January 2009 (CST)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Site-wide_groups&amp;diff=49127</id>
		<title>Site-wide groups</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Site-wide_groups&amp;diff=49127"/>
		<updated>2009-01-21T12:34:51Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: fixing typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Explaining why we need site-wide groups for enrolment purposes (Dan Poltawski) ==&lt;br /&gt;
&lt;br /&gt;
In my experience the need for site wide groups has not been entirely clear to developers, especially unclear is why existing enrolment plugins are not sufficient, especially when compared to higher education. I developed the [http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=1585&amp;amp;filter=1 CLEO MIS Tool] as a stop-gap solution to address some of the deficiencies and this has been very popular. I&#039;m convinced of the need for &#039;a solution&#039; so I will try and explain the reasons here. &lt;br /&gt;
&lt;br /&gt;
===Dans Example Simplified school ===&lt;br /&gt;
&lt;br /&gt;
====Components====&lt;br /&gt;
* School Moodle&lt;br /&gt;
** Maintained by teachers or curriculum support staff &lt;br /&gt;
** Rapidly changing&lt;br /&gt;
** Course design can vary across schools/ departments/ teaching staff&lt;br /&gt;
&lt;br /&gt;
* MIS (student information) System&lt;br /&gt;
** Contains student details, class lists etc &lt;br /&gt;
** Maintained by school administrative staff&lt;br /&gt;
** Relatively static and standardised, used to generate reports, timetables etc&lt;br /&gt;
** Often contains &#039;&#039;imperfect&#039;&#039; data&lt;br /&gt;
&lt;br /&gt;
* Relevant to both - don&#039;t typically have sophisticated technical support to craft data to integrate both&lt;br /&gt;
&lt;br /&gt;
====Existing Solutions====&lt;br /&gt;
&lt;br /&gt;
* Use an enrolment plugin to generate enrolments from MIS System&lt;br /&gt;
** Requires a class group from MIS to map directly to a course &lt;br /&gt;
** A moodle course has to be created for every single physical class (not how it works practically- nightmare for teachers)&lt;br /&gt;
** The &#039;course design&#039; to be consistent across school (One teacher might create a single moodle course for all her physical classes, another might created one moodle course shared across classes and other variations).&lt;br /&gt;
** &#039;The power&#039; to do stuff is in the teachers hands - largely automatic rather than teacher choosing who they wish in each course&lt;br /&gt;
&lt;br /&gt;
* Manual Enrolment (This is typically how many many schools use moodle)&lt;br /&gt;
** Teacher assigns every user from the complete list (1000+) of users one at a time&lt;br /&gt;
** If using groups mode in the course, picks these out individually too&lt;br /&gt;
** Massive time hog&lt;br /&gt;
&lt;br /&gt;
* CLEO MIS Tool&lt;br /&gt;
** Good&lt;br /&gt;
*** Populates &#039;class groups&#039; (separate db table -unrelated to core stuff) from MIS system via csv import&lt;br /&gt;
*** At role assignment time, teacher can select a MIS class group from list and assign all users in group at once (rather than stuednt at a time)&lt;br /&gt;
*** Can assign multiple class groups to one course, or any variation&lt;br /&gt;
*** Power is in the teachers hands how to organise&lt;br /&gt;
*** MIS Grouped enrolment at any role-assignment point&lt;br /&gt;
** Bad&lt;br /&gt;
*** Intentionally dumb: simply selects the users who are present in a mis group at a specific time and enrols them, changes in MIS groups are not reflected in role assignments over time&lt;br /&gt;
*** Doesn&#039;t create course level groups in moodle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====The Dream Solution====&lt;br /&gt;
* MIS System populates &#039;global groups&#039; data &lt;br /&gt;
* Global groups can be populated by multiple plugins (extension to existing enrolment plugins?)&lt;br /&gt;
* Teacher can assign any number of global groups to a course - these can also populate course groups (for separate groups mode etc)&lt;br /&gt;
* Changes in MIS data reflected in course enrolments (At least for users added)&lt;br /&gt;
&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 06:32, 21 January 2009 (CST)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Site-wide_groups&amp;diff=49126</id>
		<title>Site-wide groups</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Site-wide_groups&amp;diff=49126"/>
		<updated>2009-01-21T12:32:31Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: Tried to add the details fleshing out the need for &amp;#039;group based enrollment&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Explaining why we need site-wide groups for enrolment purposes (Dan Poltawski) ==&lt;br /&gt;
&lt;br /&gt;
In my experience the need for site wide groups has not been entirely clear to developers, especially unclear is why existing enrolment plugins are not sufficient, especially when compared to higher education. I developed the [http://moodle.org/mod/data/view.php?d=13&amp;amp;rid=1585&amp;amp;filter=1 CLEO MIS Tool] as a stop-gap solution to address some of the deficiencies and this has been very popular. I&#039;m convinced of the need for &#039;a solution&#039; so I will try and explain the reasons here. &lt;br /&gt;
&lt;br /&gt;
===Dans Example Simplified school ===&lt;br /&gt;
&lt;br /&gt;
====Components====&lt;br /&gt;
* School Moodle&lt;br /&gt;
** Maintained by teachers or curriculum support staff &lt;br /&gt;
** Rapidly changing&lt;br /&gt;
** Course design can vary across schools/ departments/ teaching staff&lt;br /&gt;
&lt;br /&gt;
* MIS (student information) System&lt;br /&gt;
** Contains student details, class lists etc &lt;br /&gt;
** Maintained by school administrative staff&lt;br /&gt;
** Relatively static and standardised, used to generate reports, timetables etc&lt;br /&gt;
** Often contains &#039;&#039;imperfect&#039;&#039; data&lt;br /&gt;
&lt;br /&gt;
* Relevant to both - don&#039;t typically have sophisticated technical support to craft data to integrate both&lt;br /&gt;
&lt;br /&gt;
====Existing Solutions====&lt;br /&gt;
&lt;br /&gt;
* Use an enrolment plugin to generate enrolments from MIS System&lt;br /&gt;
** Requires a class group from MIS to map directly to a course &lt;br /&gt;
** A moodle course has to be created for every single physical class (not how it works practically- nightmare for teachers)&lt;br /&gt;
** The &#039;course design&#039; to be consistent across school (One teacher might create a single moodle course for all her physical classes, another might created one moodle course shared across classes and other variations).&lt;br /&gt;
** &#039;The power&#039; to do stuff is in the techers hands - largely automatic rather than teacher chosing who they wish in each course&lt;br /&gt;
&lt;br /&gt;
* Manual Enrolment (This is typically how many many schools use moodle)&lt;br /&gt;
** Teacher assigns every user from the complete list (1000+) of users one at a time&lt;br /&gt;
** If using groups mode in the course, picks these out individually too&lt;br /&gt;
** Massive time hog&lt;br /&gt;
&lt;br /&gt;
* CLEO MIS Tool&lt;br /&gt;
** Good&lt;br /&gt;
*** Populates &#039;class groups&#039; (seperate db table -unrelated to core stuff) from MIS system via csv import&lt;br /&gt;
*** At role assignment time, teacher can select a MIS class group from list and assign all users in group at once (rather than stuednt at a time)&lt;br /&gt;
*** Can assign multiple class groups to one course, or any variation&lt;br /&gt;
*** Power is in the teachers hands how to organise&lt;br /&gt;
*** MIS Grouped enrollment at any role-assignment point&lt;br /&gt;
** Bad&lt;br /&gt;
*** Intentionally dumb: simply selects the users who are present in a mis group at a specific time and enrols them, changes in MIS groups are not reflected in role assigments over time&lt;br /&gt;
*** Doesn&#039;t create course level groups in moodle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====The Dream Solution====&lt;br /&gt;
* MIS System populates &#039;global groups&#039; data &lt;br /&gt;
* Global groups can be populated by multiple plugins (extension to existing enrolment plugins?)&lt;br /&gt;
* Teacher can assign any number of global groups to a course - these can also populate course groups (for seperate groups mode etc)&lt;br /&gt;
* Changes in MIS data reflected in course enrolments (At least for users added)&lt;br /&gt;
&lt;br /&gt;
--[[User:Dan Poltawski|Dan Poltawski]] 06:32, 21 January 2009 (CST)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development_talk:Plugin_types&amp;diff=48638</id>
		<title>Development talk:Plugin types</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development_talk:Plugin_types&amp;diff=48638"/>
		<updated>2009-01-06T11:11:00Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: New page: Not looked at them at all (not added to list as I don&amp;#039;t know about them) - but I think this page is missing newly added messaging plugin types --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Not looked at them at all (not added to list as I don&#039;t know about them) - but I think this page is missing newly added messaging plugin types --[[User:Dan Poltawski|Dan Poltawski]] 05:11, 6 January 2009 (CST)&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Local_customisation&amp;diff=48344</id>
		<title>Development:Local customisation</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Local_customisation&amp;diff=48344"/>
		<updated>2008-12-18T17:51:54Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: Added info about workaround for an install.xml file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Disclaimer ==&lt;br /&gt;
&lt;br /&gt;
Some of these entries are things that Penny has patches for and has not yet committed, and are under discussion.  The meta bug for all these items is here:  http://tracker.moodle.org/browse/MDL-17376&lt;br /&gt;
&lt;br /&gt;
== General customisations ==&lt;br /&gt;
&lt;br /&gt;
Moodle has been designed with extensibility in mind. There are many plug-in points available though out Moodle to allow developers add new functionality to Moodle without modifying core code.&lt;br /&gt;
&lt;br /&gt;
See the [[Developer_documentation#Make_a_new_plugin|make a new plugin section of the Developer documentation page]] for the different plugin types available, and documentation on how to develop for them.&lt;br /&gt;
&lt;br /&gt;
== local/ folder for &#039;hacky&#039; customisations ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is not possible to use the available plug-in points to make your change. In situations like this then the local folder is for you. The idea is that instead of scattering your changes throughout the code base, you put them all in a folder called &#039;local&#039;. Using this folder means you won&#039;t have to deal with merging problems when you upgrade the rest of your Moodle installation.&lt;br /&gt;
&lt;br /&gt;
The local folder has some of the plug-in points available which are available to other modules. Perhaps most useful the local/db/ folder can be used to make database schema changes and custom role permissions.&lt;br /&gt;
&lt;br /&gt;
However, using the local folder should be absolutely the last resort. Long term, you will almost certainly find it easier to maintain your changes if you can package them up as one of the standard types of plugins.&lt;br /&gt;
&lt;br /&gt;
=== Local database changes and version ===&lt;br /&gt;
&lt;br /&gt;
If you need to make local database customisations that are not easily encapsulated by a block or module, Moodle does support the use of a local db upgrade script, and local version number.&lt;br /&gt;
&lt;br /&gt;
This is almost exactly the same as every other db/upgrade.php and version.php except for the following points:&lt;br /&gt;
&lt;br /&gt;
==== local/version.php ====&lt;br /&gt;
&lt;br /&gt;
local/version.php must look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$local_version = 2008121700;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== local/db/install.xml ====&lt;br /&gt;
&lt;br /&gt;
Local/ has no install.xml - only an upgrade.php.  This is because often the changes that you want to make are not full tables, but just extra columns, and a local install.xml makes less sense than just upgrade.php. &lt;br /&gt;
&lt;br /&gt;
If you would like to create tables using using an install.xml this can be achieved by putting something like that this in your upgrade.php file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$result = install_from_xmldb_file(dirname(__FILE__).&#039;/install.xml&#039;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== local/db/upgrade.php ====&lt;br /&gt;
&lt;br /&gt;
local/db/upgrade.php must look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
function xmldb_local_upgrade($oldversion) {&lt;br /&gt;
    global $CFG, $db;&lt;br /&gt;
&lt;br /&gt;
    $result = true;&lt;br /&gt;
&lt;br /&gt;
    if ($result &amp;amp;&amp;amp; $result &amp;lt; 2008121700) {&lt;br /&gt;
        $result = $result &amp;amp;&amp;amp; create_table($table);&lt;br /&gt;
    }&lt;br /&gt;
    return $result;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local post-installation data insertion ===&lt;br /&gt;
&lt;br /&gt;
In discussion - see http://tracker.moodle.org/browse/MDL-17440&lt;br /&gt;
&lt;br /&gt;
=== Local capabilities ===&lt;br /&gt;
&lt;br /&gt;
Just like core and modules, Moodle supports the use of a db/access.php inside local/ to define local capabilities.&lt;br /&gt;
&lt;br /&gt;
The formatting is exactly the same as the other db/access.php scripts  - an array keyed by capability name, containing arrays of capability data, like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$local_capabilities = array(&lt;br /&gt;
    &#039;moodle/local:capability&#039; =&amp;gt; array(&lt;br /&gt;
        &#039;captype&#039;      =&amp;gt; &#039;write&#039;,&lt;br /&gt;
        &#039;contextlevel&#039; =&amp;gt; CONTEXT_SYSTEM,&lt;br /&gt;
        &#039;riskbitmask&#039;  =&amp;gt; RISK_SPAM,&lt;br /&gt;
    ),&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for all local capabilities you add, you&#039;ll need to add language strings.&lt;br /&gt;
Moodle will expect to find them in local/lang/en_utf8/local.php (eg for English)&lt;br /&gt;
with a key (following the above example) of local:capability&lt;br /&gt;
&lt;br /&gt;
=== Local event subscriptions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Pending commit &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It is often very helpful to be able to write custom code that subscribes to normal events that Moodle throws.  It&#039;s also handy to be able to throw and catch your own custom events, as the Event API provides a very handy mechanism to do signal handling.&lt;br /&gt;
&lt;br /&gt;
Local event handlers get registered at install/upgrade time just as the event handlers for modules do.  To trigger an update when you add a new event handler, you must bump the local version number.&lt;br /&gt;
&lt;br /&gt;
Event handlers must be defined in an array, keyed by event name, with each entry in the array information about the handler, like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    $handlers = array(&lt;br /&gt;
        &#039;some_core_event&#039;     =&amp;gt; array(            // eg &#039;user_created&#039;&lt;br /&gt;
            &#039;handlerfile&#039;     =&amp;gt; &#039;/local/lib.php&#039;, // example&lt;br /&gt;
            &#039;handlerfunction&#039; =&amp;gt; &#039;local_user_create_handler&#039;,&lt;br /&gt;
            &#039;schedule&#039;        =&amp;gt; &#039;cron&#039;&lt;br /&gt;
        )&lt;br /&gt;
    );&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local admin menu items and settings ===&lt;br /&gt;
&lt;br /&gt;
You can add extra configuration items to Moodle by creating a file, local/settings.php which accesses the $ADMIN variable directly and adds new items to it.  This will make them appear in the site administration block on the homepage, and create the config options that administrators can change.  You can also add whole new custom config pages (admin_externalpage).  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$ADMIN-&amp;gt;add(&#039;root&#039;, new admin_category($name, $title);&lt;br /&gt;
$ADMIN-&amp;gt;add(&#039;foo&#039;, new admin_externalpage($name, $title, $url, $cap);&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local backup and restore hooks ===&lt;br /&gt;
&lt;br /&gt;
In discussion - see http://tracker.moodle.org/browse/MDL-17444&lt;br /&gt;
&lt;br /&gt;
=== Local course deletion hook ===&lt;br /&gt;
&lt;br /&gt;
This is due to be removed, and replaced with an event.&lt;br /&gt;
&lt;br /&gt;
Previously, when you emptied (&#039;&#039;&#039;not deleted&#039;&#039;&#039;) a course, the notify_local_course_delete method was called, which looked for a local_delete_course method in local/lib.php.  The naming of this is a little ambiguous because the course is being emptied, not deleted.&lt;br /&gt;
&lt;br /&gt;
Going forwards, we aim to have two events - course_emptied and course_deleted.  Support for the local_delete_course method will be removed.&lt;br /&gt;
&lt;br /&gt;
See http://tracker.moodle.org/browse/MDL-17445 for more info.&lt;br /&gt;
&lt;br /&gt;
=== Local my moodle overrides ===&lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;&#039;pending commit&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
By default, the My Moodle page shows a course overview in the center column.  Some sites might want to replace that with some custom code, or even just some static content.  This is very easily accomplished by:&lt;br /&gt;
&lt;br /&gt;
* Creating a local/lib.php&lt;br /&gt;
* Putting a function in there, called local_my_moodle.&lt;br /&gt;
&lt;br /&gt;
This function will be called &#039;&#039;&#039;instead of&#039;&#039; (rather than in addition to), the default center column.&lt;br /&gt;
&lt;br /&gt;
=== Local stickyblocks targets ===&lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;&#039;pending commit&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
In the case where you&#039;re developing a heavily customised site, it might happen that you develop a pagetype that has the ability for people to add blocks to.  In this case, you might want to also make it stickyblock enabled.&lt;br /&gt;
&lt;br /&gt;
This is easily achieved by:&lt;br /&gt;
&lt;br /&gt;
* Create local/lib.php&lt;br /&gt;
* Create a method in there called local_get_sticky_pagetypes that returns an array just like the $pagetypes array at the top of admin/stickyblocks.php.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function local_get_sticky_pagetypes() {&lt;br /&gt;
    return array(&lt;br /&gt;
        &#039;custom_pagetype&#039; =&amp;gt; array(&lt;br /&gt;
            &#039;id&#039; =&amp;gt; &#039;custom_pagetype&#039;,&lt;br /&gt;
            &#039;lib&#039; =&amp;gt; &#039;/local/lib.php&#039;,&lt;br /&gt;
            &#039;name&#039; =&amp;gt; get_string(&#039;custom_pagetype&#039;, &#039;local&#039;)&lt;br /&gt;
        )&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You then must create a page that extends page_base.  Don&#039;t forget that if your pagetype is stickyblock enabled, it needs to take this into account in some of its methods.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class custom_pagetype extends page_base {&lt;br /&gt;
&lt;br /&gt;
    // normal page type class&lt;br /&gt;
&lt;br /&gt;
    function url_get_path() {&lt;br /&gt;
        global $CFG;&lt;br /&gt;
        if (defined(&#039;ADMIN_STICKYBLOCKS&#039;)) { // admin is editing stickyblocks, not a normal page&lt;br /&gt;
            return $CFG-&amp;gt;wwwroot . &#039;/admin/stickyblocks.php&#039;;&lt;br /&gt;
        }&lt;br /&gt;
        return &#039;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function url_get_parameters() {&lt;br /&gt;
        global $CFG;&lt;br /&gt;
        if (defined(&#039;ADMIN_STICKYBLOCKS&#039;)) {&lt;br /&gt;
            return array(&#039;pt&#039; =&amp;gt;  &#039;custom_pagetype&#039;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and map it with page_map_class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
page_map_class(&#039;custom_pagetype&#039;, &#039;custom_pagetype&#039;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local user profile view hook ===&lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;&#039;pending commit&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Sometimes, it may be desirable to do something like add extra buttons to the bottom of the user&#039;s profile page - if you&#039;ve developed some custom code to perform extra actions on a user, for example.  This is very easy to do.&lt;br /&gt;
&lt;br /&gt;
* Create local/lib.php&lt;br /&gt;
* Create a function in there, local_user_view.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function local_user_view($user, $course) {&lt;br /&gt;
&lt;br /&gt;
    // capability check&lt;br /&gt;
&lt;br /&gt;
    // extra stuff&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local language strings ===&lt;br /&gt;
&lt;br /&gt;
The only place in the above list that requires an additional language file is the local capabilites.  These are expected to be in lang/$lang/local.php and keyed with local:capname.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can of course add lang/$lang/local.php just like an extra language file and call it with the usual get_string(&#039;key&#039;, &#039;local&#039;, $a) syntax.&lt;br /&gt;
&lt;br /&gt;
There is also the ability to create a special custom lang/{$lang}_local/ directory (eg lang/en_utf8_local/), which contains just the strings that you want to override from the main language pack.  Moodle will always look there &#039;&#039;&#039;first&#039;&#039;&#039; before finding the strings in the normal language pack.&lt;br /&gt;
&lt;br /&gt;
This is because, historically, people have wanted to override some strings, typically things like &#039;course&#039; to become &#039;module&#039;, or similar, and have created custom language packs.  But then this forces the users to have this custom pack selected.  The use of {$lang}_local is much more lightweight.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[http://cvs.moodle.org/moodle/lib/locallib.php?view=markup CVS:moodle/lib/locallib.php]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=86903 Local Customisations] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Local customisation]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:How_to_apply_a_patch&amp;diff=48045</id>
		<title>Development:How to apply a patch</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:How_to_apply_a_patch&amp;diff=48045"/>
		<updated>2008-12-11T13:48:58Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: /* Dealing with potential problems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This page explains how you can apply a patch file. Patch is a standard format, and there are many options for how to apply one. Pick the one that is easiest for you.&lt;br /&gt;
&lt;br /&gt;
Perhaps most critical is the usage of the -p flag, which tells patch about the relationship between the directory where the patch file is located and the files that will be patched.  See the references below for details and DO NOT assume anything.  &lt;br /&gt;
&lt;br /&gt;
==Apply a Patch in Windows using [http://gnuwin32.sourceforge.net/packages/patch.htm gnuwin32]==&lt;br /&gt;
&lt;br /&gt;
* Download and extract patch for windows from [http://gnuwin32.sourceforge.net/packages/patch.htm sourceforge] I placed the patch.exe binary in C:\bin&lt;br /&gt;
&lt;br /&gt;
* Download and extract Moodle somewhere. eg: C:\moodle&lt;br /&gt;
&lt;br /&gt;
* Download the patch file and place it in the same directory you put Moodle (C:\moodle\password-policy-17.diff)&lt;br /&gt;
&lt;br /&gt;
* Open the patch file with Wordpad, and click &#039;File&#039; &amp;gt;&amp;gt; &#039;Save as...&#039;, choose a different name for the file eg (&#039;mynewpatch.diff&#039;) and &amp;quot;Save as type&amp;quot; &amp;gt;&amp;gt; &#039;Text Document - MS-DOS Format&#039;&lt;br /&gt;
&lt;br /&gt;
* Open up a command text window, and type:&lt;br /&gt;
&lt;br /&gt;
    cd \moodle&lt;br /&gt;
    c:\bin\patch.exe --dry-run -p1 &amp;lt; mynewpatch.diff&lt;br /&gt;
&lt;br /&gt;
:The number after &amp;lt;tt&amp;gt;&#039;-p&#039;&amp;lt;/tt&amp;gt; option can vary depending on the patch file, as it depends on the way the patch file was generated. Have a look at the [http://www.rt.com/man/patch.1.html &#039;patch&#039; utility manual page ] to see how the &amp;lt;tt&amp;gt;&#039;-p&#039;&amp;lt;/tt&amp;gt; option works. You could also have a look at this [http://www.linuxtutorialblog.com/post/introduction-using-diff-and-patch-tutorial diff and patch tutorial].&lt;br /&gt;
* You should get an output similar to this (the names and quantity of patched files vary from patch to patch):&lt;br /&gt;
&lt;br /&gt;
    patching file admin/settings/security.php&lt;br /&gt;
    patching file lang/en_utf8/admin.php&lt;br /&gt;
    patching file lib/moodlelib.php&lt;br /&gt;
    patching file login/change_password.php&lt;br /&gt;
    patching file login/signup.php&lt;br /&gt;
    patching file user/edit.php&lt;br /&gt;
    Hunk #1 succeeded at 430 (offset 2 lines).&lt;br /&gt;
&lt;br /&gt;
:At this stage the patch &amp;lt;b&amp;gt;has not been applied&amp;lt;/b&amp;gt;. We just simulated the application (with the &amp;lt;tt&amp;gt;&#039;--dry-run&#039;&amp;lt;/tt&amp;gt; option), to see if we are going to find any problems with it. Before explaining how to actually apply the patch, we are going to talk about what could be wrong, and how to deal with it.&lt;br /&gt;
&lt;br /&gt;
===Potential problems and how to deal with them===&lt;br /&gt;
====Potential problems====&lt;br /&gt;
If everything goes well, the patch will apply cleanly and life should be good! But sometimes the patch will not apply 100% cleanly due to a version mismatch between the original files used to produce the patch file and your local files. In this case, the &#039;patch&#039; command will try to apply as many changes as it can, and will emit some diagnostics describing the problems it encounters. &lt;br /&gt;
&lt;br /&gt;
* If you get any &amp;lt;tt&amp;gt;&#039;Hunk #n succeeded...&#039;&amp;lt;/tt&amp;gt; messages, the patch would have been applied correctly although at different line numbers than the original file. If we had actually applied the patch, the &#039;patch&#039; command would have created an additional file for each of the files where the hunk was applied at a different offset, that would be named like the original file with the additional extension &amp;lt;tt&amp;gt;.orig&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* If you get any &amp;lt;tt&amp;gt;&#039;Hunk #n failed...&#039;&amp;lt;/tt&amp;gt; messages, the patch would have not applied correctly. In this case the &#039;patch&#039; command would have created two additional files for each of the files where the hunk was not applied correctly, called:&lt;br /&gt;
** &amp;lt;tt&amp;gt;original-file-name.orig&amp;lt;/tt&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; This would be the original file before the patch was applied, just like above.&lt;br /&gt;
** &amp;lt;tt&amp;gt;original-file-name.rej&amp;amp;nbsp;&amp;lt;/tt&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; This file would contain the hunks that could not be applied correctly, so you could inspect them.&lt;br /&gt;
&lt;br /&gt;
====Dealing with potential problems====&lt;br /&gt;
Dealing with the first problem (the offsetted hunks) is trivial: we just need to delete the .orig files once we actually apply the patch.&lt;br /&gt;
&lt;br /&gt;
In the second case (failed hunks), unless you know how to fix the failed hunks by hand, you &amp;lt;b&amp;gt;should not apply&amp;lt;/b&amp;gt; the patch, as that would corrupt your Moodle install. If you want to apply the patch and try to fix the failed hunks by hand, you should use the &amp;lt;tt&amp;gt;&#039;-b&#039;&amp;lt;/tt&amp;gt; option. That option automatically makes a backup of every file the patch applies to, with the &amp;lt;tt&amp;gt;.orig&amp;lt;/tt&amp;gt; extension. That would allow you go back to the original files state by simply overwritting the modified files with their &amp;lt;tt&amp;gt;.orig&amp;lt;/tt&amp;gt; backups.&lt;br /&gt;
&lt;br /&gt;
Sometimes, there will be a large difference in line numbers since a patch was generated and the patch will not apply. You can tell patch allow larger differences in line numbers by using the fuzz option &#039;-F&#039; to increase the number of lines difference there can be. For example patch -F 100 would allow 100 lines difference.&lt;br /&gt;
&lt;br /&gt;
===Actually applying the patch===&lt;br /&gt;
Now that we know what could go wrong and how to deal with it, let&#039;s see how to apply the patch. We only need to remove the &amp;lt;tt&amp;gt;&#039;--dry-run&#039;&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
    cd \moodle&lt;br /&gt;
    c:\bin\patch.exe -p1 &amp;lt; mynewpatch.diff&lt;br /&gt;
&lt;br /&gt;
and optionally use the &amp;lt;tt&amp;gt;&#039;-b&#039;&amp;lt;/tt&amp;gt; option if we are going to try to fix the failed hunks by hand:&lt;br /&gt;
&lt;br /&gt;
    cd \moodle&lt;br /&gt;
    c:\bin\patch.exe -b -p1 &amp;lt; mynewpatch.diff&lt;br /&gt;
&lt;br /&gt;
==Apply a Patch in Linux using &amp;quot;patch&amp;quot;==&lt;br /&gt;
use something like:&lt;br /&gt;
patch -p1 &amp;lt; patchfile.diff&lt;br /&gt;
see [http://linux.about.com/od/commands/l/blcmdl1_patch.htm here] for more details on using Patch in Linux&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Patch]]&lt;br /&gt;
* [[Development:How_to_create_a_patch]]&lt;br /&gt;
* [http://drupal.org/node/32875 Drupal - using Cygwin in Windows to apply a patch]&lt;br /&gt;
* [http://drupal.org/node/60818 Drupal - how to apply a patch in Mac OS X]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=61379#p286372 moodle post - using gnuwin32 to apply a patch]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:How_to_apply_a_patch&amp;diff=48044</id>
		<title>Development:How to apply a patch</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:How_to_apply_a_patch&amp;diff=48044"/>
		<updated>2008-12-11T13:48:34Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: quick note about the fuzz option&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This page explains how you can apply a patch file. Patch is a standard format, and there are many options for how to apply one. Pick the one that is easiest for you.&lt;br /&gt;
&lt;br /&gt;
Perhaps most critical is the usage of the -p flag, which tells patch about the relationship between the directory where the patch file is located and the files that will be patched.  See the references below for details and DO NOT assume anything.  &lt;br /&gt;
&lt;br /&gt;
==Apply a Patch in Windows using [http://gnuwin32.sourceforge.net/packages/patch.htm gnuwin32]==&lt;br /&gt;
&lt;br /&gt;
* Download and extract patch for windows from [http://gnuwin32.sourceforge.net/packages/patch.htm sourceforge] I placed the patch.exe binary in C:\bin&lt;br /&gt;
&lt;br /&gt;
* Download and extract Moodle somewhere. eg: C:\moodle&lt;br /&gt;
&lt;br /&gt;
* Download the patch file and place it in the same directory you put Moodle (C:\moodle\password-policy-17.diff)&lt;br /&gt;
&lt;br /&gt;
* Open the patch file with Wordpad, and click &#039;File&#039; &amp;gt;&amp;gt; &#039;Save as...&#039;, choose a different name for the file eg (&#039;mynewpatch.diff&#039;) and &amp;quot;Save as type&amp;quot; &amp;gt;&amp;gt; &#039;Text Document - MS-DOS Format&#039;&lt;br /&gt;
&lt;br /&gt;
* Open up a command text window, and type:&lt;br /&gt;
&lt;br /&gt;
    cd \moodle&lt;br /&gt;
    c:\bin\patch.exe --dry-run -p1 &amp;lt; mynewpatch.diff&lt;br /&gt;
&lt;br /&gt;
:The number after &amp;lt;tt&amp;gt;&#039;-p&#039;&amp;lt;/tt&amp;gt; option can vary depending on the patch file, as it depends on the way the patch file was generated. Have a look at the [http://www.rt.com/man/patch.1.html &#039;patch&#039; utility manual page ] to see how the &amp;lt;tt&amp;gt;&#039;-p&#039;&amp;lt;/tt&amp;gt; option works. You could also have a look at this [http://www.linuxtutorialblog.com/post/introduction-using-diff-and-patch-tutorial diff and patch tutorial].&lt;br /&gt;
* You should get an output similar to this (the names and quantity of patched files vary from patch to patch):&lt;br /&gt;
&lt;br /&gt;
    patching file admin/settings/security.php&lt;br /&gt;
    patching file lang/en_utf8/admin.php&lt;br /&gt;
    patching file lib/moodlelib.php&lt;br /&gt;
    patching file login/change_password.php&lt;br /&gt;
    patching file login/signup.php&lt;br /&gt;
    patching file user/edit.php&lt;br /&gt;
    Hunk #1 succeeded at 430 (offset 2 lines).&lt;br /&gt;
&lt;br /&gt;
:At this stage the patch &amp;lt;b&amp;gt;has not been applied&amp;lt;/b&amp;gt;. We just simulated the application (with the &amp;lt;tt&amp;gt;&#039;--dry-run&#039;&amp;lt;/tt&amp;gt; option), to see if we are going to find any problems with it. Before explaining how to actually apply the patch, we are going to talk about what could be wrong, and how to deal with it.&lt;br /&gt;
&lt;br /&gt;
===Potential problems and how to deal with them===&lt;br /&gt;
====Potential problems====&lt;br /&gt;
If everything goes well, the patch will apply cleanly and life should be good! But sometimes the patch will not apply 100% cleanly due to a version mismatch between the original files used to produce the patch file and your local files. In this case, the &#039;patch&#039; command will try to apply as many changes as it can, and will emit some diagnostics describing the problems it encounters. &lt;br /&gt;
&lt;br /&gt;
* If you get any &amp;lt;tt&amp;gt;&#039;Hunk #n succeeded...&#039;&amp;lt;/tt&amp;gt; messages, the patch would have been applied correctly although at different line numbers than the original file. If we had actually applied the patch, the &#039;patch&#039; command would have created an additional file for each of the files where the hunk was applied at a different offset, that would be named like the original file with the additional extension &amp;lt;tt&amp;gt;.orig&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* If you get any &amp;lt;tt&amp;gt;&#039;Hunk #n failed...&#039;&amp;lt;/tt&amp;gt; messages, the patch would have not applied correctly. In this case the &#039;patch&#039; command would have created two additional files for each of the files where the hunk was not applied correctly, called:&lt;br /&gt;
** &amp;lt;tt&amp;gt;original-file-name.orig&amp;lt;/tt&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; This would be the original file before the patch was applied, just like above.&lt;br /&gt;
** &amp;lt;tt&amp;gt;original-file-name.rej&amp;amp;nbsp;&amp;lt;/tt&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; This file would contain the hunks that could not be applied correctly, so you could inspect them.&lt;br /&gt;
&lt;br /&gt;
====Dealing with potential problems====&lt;br /&gt;
Dealing with the first problem (the offsetted hunks) is trivial: we just need to delete the .orig files once we actually apply the patch.&lt;br /&gt;
&lt;br /&gt;
In the second case (failed hunks), unless you know how to fix the failed hunks by hand, you &amp;lt;b&amp;gt;should not apply&amp;lt;/b&amp;gt; the patch, as that would corrupt your Moodle install. If you want to apply the patch and try to fix the failed hunks by hand, you should use the &amp;lt;tt&amp;gt;&#039;-b&#039;&amp;lt;/tt&amp;gt; option. That option automatically makes a backup of every file the patch applies to, with the &amp;lt;tt&amp;gt;.orig&amp;lt;/tt&amp;gt; extension. That would allow you go back to the original files state by simply overwritting the modified files with their &amp;lt;tt&amp;gt;.orig&amp;lt;/tt&amp;gt; backups.&lt;br /&gt;
&lt;br /&gt;
Sometimes, there will be a large difference in line numbers since a patch was generated and the patch will not apply. You can tell patch allow larger differences in line numbers by using the fuzz option to increase the number of lines difference there can be. For example patch -F 100 would allow 100 lines difference.&lt;br /&gt;
&lt;br /&gt;
===Actually applying the patch===&lt;br /&gt;
Now that we know what could go wrong and how to deal with it, let&#039;s see how to apply the patch. We only need to remove the &amp;lt;tt&amp;gt;&#039;--dry-run&#039;&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
    cd \moodle&lt;br /&gt;
    c:\bin\patch.exe -p1 &amp;lt; mynewpatch.diff&lt;br /&gt;
&lt;br /&gt;
and optionally use the &amp;lt;tt&amp;gt;&#039;-b&#039;&amp;lt;/tt&amp;gt; option if we are going to try to fix the failed hunks by hand:&lt;br /&gt;
&lt;br /&gt;
    cd \moodle&lt;br /&gt;
    c:\bin\patch.exe -b -p1 &amp;lt; mynewpatch.diff&lt;br /&gt;
&lt;br /&gt;
==Apply a Patch in Linux using &amp;quot;patch&amp;quot;==&lt;br /&gt;
use something like:&lt;br /&gt;
patch -p1 &amp;lt; patchfile.diff&lt;br /&gt;
see [http://linux.about.com/od/commands/l/blcmdl1_patch.htm here] for more details on using Patch in Linux&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Patch]]&lt;br /&gt;
* [[Development:How_to_create_a_patch]]&lt;br /&gt;
* [http://drupal.org/node/32875 Drupal - using Cygwin in Windows to apply a patch]&lt;br /&gt;
* [http://drupal.org/node/60818 Drupal - how to apply a patch in Mac OS X]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=61379#p286372 moodle post - using gnuwin32 to apply a patch]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44690</id>
		<title>Development:Git tips</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44690"/>
		<updated>2008-10-02T12:58:23Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: added work in progress note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
Many developers find git a useful tool to help them with moodle development, here some tips and workflows can be shared to help others.&lt;br /&gt;
&lt;br /&gt;
== Thorough Resolved Bug QA review with git ==&lt;br /&gt;
&lt;br /&gt;
The power of having fast access to all of moodle commit history means we can search and checkout any point in moodle source code history which allows us to powerfully QA a bug.&lt;br /&gt;
&lt;br /&gt;
Please note this workflow might not be ideal for all scenarios (for example if lots of work has been done in the same area since).&lt;br /&gt;
&lt;br /&gt;
Example Workflow to QA MDL-16600:&lt;br /&gt;
&lt;br /&gt;
First checkout a new branch for us to work on testing the bug in MOODLE_19_STABLE. We can delete this branch later, its less dangerous than playing any of our &#039;live&#039; branches.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git checkout -b QA-MDL-16600 origin/MOODLE_19_STABLE&lt;br /&gt;
Branch QA-MDL-16600 set up to track remote branch refs/remotes/origin/MOODLE_19_STABLE.&lt;br /&gt;
Switched to a new branch &amp;quot;QA-MDL-16600&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now search for any commits related to this bug fix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  git log --grep=&#039;MDL-16600&#039;&lt;br /&gt;
commit 1c2c8b09469ac27a3829e7267f399356a05b9810&lt;br /&gt;
Author: tjhunt &amp;lt;tjhunt&amp;gt;&lt;br /&gt;
Date:   Fri Sep 26 05:49:06 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    MDL-16600 forcedownload broken for file resources.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to test that these commits fixed the bug, we will revert this commit, and then try to reproduce the reported bug:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git revert -n 1c2c8b09469ac27a3829e7267f399356a05b9810 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve reproduced the problem, we will reset our repository back to HEAD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git reset --hard HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if the bug is fixed, it can be closed and we can delete our branch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git branch -D QA-MDL-16600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please add your own tips here!)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Using GIT to backup moodledata]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Git tips]]&lt;br /&gt;
[[Category:Developer tools]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44686</id>
		<title>Development:Git tips</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44686"/>
		<updated>2008-10-02T12:47:19Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: developer tools category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Many developers find git a useful tool to help them with moodle development, here some tips and workflows can be shared to help others.&lt;br /&gt;
&lt;br /&gt;
== Thorough Resolved Bug QA review with git ==&lt;br /&gt;
&lt;br /&gt;
The power of having fast access to all of moodle commit history means we can search and checkout any point in moodle source code history which allows us to powerfully QA a bug.&lt;br /&gt;
&lt;br /&gt;
Please note this workflow might not be ideal for all scenarios (for example if lots of work has been done in the same area since).&lt;br /&gt;
&lt;br /&gt;
Example Workflow to QA MDL-16600:&lt;br /&gt;
&lt;br /&gt;
First checkout a new branch for us to work on testing the bug in MOODLE_19_STABLE. We can delete this branch later, its less dangerous than playing any of our &#039;live&#039; branches.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git checkout -b QA-MDL-16600 origin/MOODLE_19_STABLE&lt;br /&gt;
Branch QA-MDL-16600 set up to track remote branch refs/remotes/origin/MOODLE_19_STABLE.&lt;br /&gt;
Switched to a new branch &amp;quot;QA-MDL-16600&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now search for any commits related to this bug fix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  git log --grep=&#039;MDL-16600&#039;&lt;br /&gt;
commit 1c2c8b09469ac27a3829e7267f399356a05b9810&lt;br /&gt;
Author: tjhunt &amp;lt;tjhunt&amp;gt;&lt;br /&gt;
Date:   Fri Sep 26 05:49:06 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    MDL-16600 forcedownload broken for file resources.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to test that these commits fixed the bug, we will revert this commit, and then try to reproduce the reported bug:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git revert -n 1c2c8b09469ac27a3829e7267f399356a05b9810 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve reproduced the problem, we will reset our repository back to HEAD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git reset --hard HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if the bug is fixed, it can be closed and we can delete our branch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git branch -D QA-MDL-16600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Using GIT to backup moodledata]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Git tips]]&lt;br /&gt;
[[Category:Developer tools]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44685</id>
		<title>Development:Git tips</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44685"/>
		<updated>2008-10-02T12:31:52Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: added seelaso&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Many developers find git a useful tool to help them with moodle development, here some tips and workflows can be shared to help others.&lt;br /&gt;
&lt;br /&gt;
== Thorough Resolved Bug QA review with git ==&lt;br /&gt;
&lt;br /&gt;
The power of having fast access to all of moodle commit history means we can search and checkout any point in moodle source code history which allows us to powerfully QA a bug.&lt;br /&gt;
&lt;br /&gt;
Please note this workflow might not be ideal for all scenarios (for example if lots of work has been done in the same area since).&lt;br /&gt;
&lt;br /&gt;
Example Workflow to QA MDL-16600:&lt;br /&gt;
&lt;br /&gt;
First checkout a new branch for us to work on testing the bug in MOODLE_19_STABLE. We can delete this branch later, its less dangerous than playing any of our &#039;live&#039; branches.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git checkout -b QA-MDL-16600 origin/MOODLE_19_STABLE&lt;br /&gt;
Branch QA-MDL-16600 set up to track remote branch refs/remotes/origin/MOODLE_19_STABLE.&lt;br /&gt;
Switched to a new branch &amp;quot;QA-MDL-16600&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now search for any commits related to this bug fix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  git log --grep=&#039;MDL-16600&#039;&lt;br /&gt;
commit 1c2c8b09469ac27a3829e7267f399356a05b9810&lt;br /&gt;
Author: tjhunt &amp;lt;tjhunt&amp;gt;&lt;br /&gt;
Date:   Fri Sep 26 05:49:06 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    MDL-16600 forcedownload broken for file resources.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to test that these commits fixed the bug, we will revert this commit, and then try to reproduce the reported bug:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git revert -n 1c2c8b09469ac27a3829e7267f399356a05b9810 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve reproduced the problem, we will reset our repository back to HEAD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git reset --hard HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if the bug is fixed, it can be closed and we can delete our branch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git branch -D QA-MDL-16600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Using GIT to backup moodledata]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Git tips]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44682</id>
		<title>Development:Git tips</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44682"/>
		<updated>2008-10-02T12:09:17Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: info about deleting branch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Many developers find git a useful tool to help them with moodle development, here some tips and workflows can be shared to help others.&lt;br /&gt;
&lt;br /&gt;
== Thorough Resolved Bug QA review with git ==&lt;br /&gt;
&lt;br /&gt;
The power of having fast access to all of moodle commit history means we can search and checkout any point in moodle source code history which allows us to powerfully QA a bug.&lt;br /&gt;
&lt;br /&gt;
Please note this workflow might not be ideal for all scenarios (for example if lots of work has been done in the same area since).&lt;br /&gt;
&lt;br /&gt;
Example Workflow to QA MDL-16600:&lt;br /&gt;
&lt;br /&gt;
First checkout a new branch for us to work on testing the bug in MOODLE_19_STABLE. We can delete this branch later, its less dangerous than playing any of our &#039;live&#039; branches.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git checkout -b QA-MDL-16600 origin/MOODLE_19_STABLE&lt;br /&gt;
Branch QA-MDL-16600 set up to track remote branch refs/remotes/origin/MOODLE_19_STABLE.&lt;br /&gt;
Switched to a new branch &amp;quot;QA-MDL-16600&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now search for any commits related to this bug fix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  git log --grep=&#039;MDL-16600&#039;&lt;br /&gt;
commit 1c2c8b09469ac27a3829e7267f399356a05b9810&lt;br /&gt;
Author: tjhunt &amp;lt;tjhunt&amp;gt;&lt;br /&gt;
Date:   Fri Sep 26 05:49:06 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    MDL-16600 forcedownload broken for file resources.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to test that these commits fixed the bug, we will revert this commit, and then try to reproduce the reported bug:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git revert -n 1c2c8b09469ac27a3829e7267f399356a05b9810 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve reproduced the problem, we will reset our repository back to HEAD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git reset --hard HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if the bug is fixed, it can be closed and we can delete our branch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git branch -D QA-MDL-16600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Git tips]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44681</id>
		<title>Development:Git tips</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44681"/>
		<updated>2008-10-02T11:59:44Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: added a tip which allows QA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Many developers find git a useful tool to help them with moodle development, here some tips and workflows can be shared to help others.&lt;br /&gt;
&lt;br /&gt;
== Thorough Resolved Bug QA review with git ==&lt;br /&gt;
&lt;br /&gt;
The power of having fast access to all of moodle commit history means we can search and checkout any point in moodle source code history which allows us to powerfully QA a bug.&lt;br /&gt;
&lt;br /&gt;
Please note this workflow might not be ideal for all scenarios (for example if lots of work has been done in the same area since).&lt;br /&gt;
&lt;br /&gt;
Example Workflow to QA MDL-16600:&lt;br /&gt;
&lt;br /&gt;
First checkout a new branch for us to work on testing the bug in MOODLE_19_STABLE. We can delete this branch later, its less dangerous than playing any of our &#039;live&#039; branches.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git checkout -b QA-MDL-16600 origin/MOODLE_19_STABLE&lt;br /&gt;
Branch QA-MDL-16600 set up to track remote branch refs/remotes/origin/MOODLE_19_STABLE.&lt;br /&gt;
Switched to a new branch &amp;quot;QA-MDL-16600&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now search for any commits related to this bug fix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  git log --grep=&#039;MDL-16600&#039;&lt;br /&gt;
commit 1c2c8b09469ac27a3829e7267f399356a05b9810&lt;br /&gt;
Author: tjhunt &amp;lt;tjhunt&amp;gt;&lt;br /&gt;
Date:   Fri Sep 26 05:49:06 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    MDL-16600 forcedownload broken for file resources.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to test that these commits fixed the bug, we will revert this commit, and then try to reproduce the reported bug:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git revert -n 1c2c8b09469ac27a3829e7267f399356a05b9810 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once we&#039;ve reproduced the problem, we will reset our repository back to HEAD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git reset --hard HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now if the bug is fixed, it can be closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Git tips]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44680</id>
		<title>Development:Git tips</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/21/en/index.php?title=Development:Git_tips&amp;diff=44680"/>
		<updated>2008-10-02T11:29:38Z</updated>

		<summary type="html">&lt;p&gt;Poltawski: updated cateogory&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Many developers find git a useful tool to help them with moodle development, here some tips and workflows can be shared to help others.&lt;br /&gt;
&lt;br /&gt;
== Streamlining Resolved Bug QA review with git ==&lt;br /&gt;
&lt;br /&gt;
The power of having fast access to all of moodle commit history means we can search and checkout any point in moodle source code history which allows us to powerfully QA a bug.&lt;br /&gt;
&lt;br /&gt;
Example Workflow to QA &lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Git tips]]&lt;/div&gt;</summary>
		<author><name>Poltawski</name></author>
	</entry>
</feed>