<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/test/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TimHunt</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/test/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TimHunt"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/Special:Contributions/TimHunt"/>
	<updated>2026-04-10T20:28:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=error/admin/sectionerror&amp;diff=48544</id>
		<title>error/admin/sectionerror</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=error/admin/sectionerror&amp;diff=48544"/>
		<updated>2009-01-01T13:57:16Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The error means that a new admin page &#039;foo&#039; (the one you&#039;re developing right now) is not registered with the Admin menu. It is triggered with the call:&lt;br /&gt;
 admin_externalpage_setup(&#039;foo&#039;);&lt;br /&gt;
&lt;br /&gt;
The solution is to add a reference to the page in the appropriate file in admin/settings/&#039;&#039;XXX&#039;&#039;.php. Something like:&lt;br /&gt;
&lt;br /&gt;
 $ADMIN-&amp;gt;add(&amp;quot;&#039;&#039;parent_section&#039;&#039;&amp;quot;, new admin_externalpage(&#039;foo&#039;, &amp;quot;Foo Admin Component&amp;quot;, &amp;quot;$CFG-&amp;gt;wwwroot/$CFG-&amp;gt;admin/foo.php&amp;quot;));&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Admin_settings&amp;diff=48419</id>
		<title>Development:Admin settings</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Admin_settings&amp;diff=48419"/>
		<updated>2008-12-22T03:25:17Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* External pages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Moodle&#039;s configuration is stored in a mixture of the config, config_plugins, and a few other tables. These settings are edited through the administration screens, which can be accessed by going to the .../admin/index.php URL on your moodle site, or using the Administration block that appears to administrators of the Moodle front page. This page explains how the code for displaying and editing of these settings works.&lt;br /&gt;
&lt;br /&gt;
==Where to find the code==&lt;br /&gt;
&lt;br /&gt;
This is explained further below, but in summary:&lt;br /&gt;
* The library code is all in lib/adminlib.php.&lt;br /&gt;
* The definition of the all the parts of the admin tree is in admin/settings/* some of which call out to plugins to see if they have settings they want to add.&lt;br /&gt;
* The editing and saving of settings is managed by admin/settings.php, admin/upgradesettings.php, and admin/search.php.&lt;br /&gt;
* The administration blocks that appear on the front page and on most of the admin screens is in blocks/admin_tree and blocks/admin_bookmarks.&lt;br /&gt;
&lt;br /&gt;
In my experience most of this code is pretty easy to understand and work with, so here I will focus on giving an overview. For details, see the code.&lt;br /&gt;
&lt;br /&gt;
==The building blocks==&lt;br /&gt;
&lt;br /&gt;
All the settings are arranged into a tree structure. This tree structure is represented in memory as a tree of PHP objects.&lt;br /&gt;
&lt;br /&gt;
At the root of the tree is an &#039;&#039;&#039;admin_root&#039;&#039;&#039; object.&lt;br /&gt;
&lt;br /&gt;
That has children that are &#039;&#039;&#039;admin_category&#039;&#039;&#039;s.&lt;br /&gt;
&lt;br /&gt;
Admin categories contain other categories, &#039;&#039;&#039;admin_settingpage&#039;&#039;&#039;s, and &#039;&#039;&#039;admin_externalpage&#039;&#039;&#039;s.&lt;br /&gt;
&lt;br /&gt;
Settings pages contain individual &#039;&#039;&#039;admin_setting&#039;&#039;&#039;s.&lt;br /&gt;
&lt;br /&gt;
admin_setting is a base class with lots of subclasses like &#039;&#039;&#039;admin_setting_configtext&#039;&#039;&#039;, &#039;&#039;&#039;admin_setting_configcheckbox&#039;&#039;&#039;, and so on. If you need to, you can create new subclasses.&lt;br /&gt;
&lt;br /&gt;
External pages are for things that do not fit into the normal settings structure. For example the global assign roles page, or the page for managing activity modules.&lt;br /&gt;
&lt;br /&gt;
==How the tree is built==&lt;br /&gt;
&lt;br /&gt;
When Moodle needs the admin tree, it calls admin_get_root in lib/adminlib.php, which&lt;br /&gt;
# creates a global $ADMIN object which is an instance of admin_root.&lt;br /&gt;
# does require_once admin/settings/top.php, which adds the top level categories to $ADMIN.&lt;br /&gt;
# does require_once on all the other files in admin/settings to add more specific settings pages and the settings themselves. Some of these settings files additionally make calls out to various types of plugins. For example&lt;br /&gt;
#* admin/settings/plugins.php gives activity modules, blocks, question types, ... a chance to add admin settings.&lt;br /&gt;
# adds the admin reports to the tree.&lt;br /&gt;
&lt;br /&gt;
As an optimisation, before building each bit of the tree, some capability checks are performed, and bits of the tree are skipped if the current user does not have permission to access them.&lt;br /&gt;
&lt;br /&gt;
Exactly how different types of plugin should add their settings to the tree should be documented in the [[Development:Developer_documentation#Make_a_new_plugin|instructions for writing that sort of plugin]].&lt;br /&gt;
&lt;br /&gt;
==Individual settings==&lt;br /&gt;
&lt;br /&gt;
Let us look at a simple example: [http://cvs.moodle.org/moodle/mod/forum/settings.php?view=markup mod/forum/settings.php]. This is included by admin/settings/plugins.php, which has already created $settings, which is an admin_settingpage that we can add to. The file contains lots of lines that look a bit like:&lt;br /&gt;
&lt;br /&gt;
 $settings-&amp;gt;add(new admin_setting_configcheckbox(&#039;forum_replytouser&#039;, get_string(&#039;replytouser&#039;, &#039;forum&#039;),&lt;br /&gt;
                    get_string(&#039;configreplytouser&#039;, &#039;forum&#039;), 1));&lt;br /&gt;
&lt;br /&gt;
What this means is that to our settings page, we are adding a checkbox setting. To understand this in more detail, we need to know what arguments the constructor for an admin_setting takes. The definition of the constructor is:&lt;br /&gt;
&lt;br /&gt;
 function admin_setting($name, $visiblename, $description, $defaultsetting) {&lt;br /&gt;
&lt;br /&gt;
So, $name here is &#039;forum_replytouser&#039;. This means that this setting is stored in the database in the row of the config table where name=&#039;forum_replytouser&#039;, and is accessible as $CFG-&amp;gt;forum_replytouser.&lt;br /&gt;
&lt;br /&gt;
$visiblename is get_string(&#039;replytouser&#039;, &#039;forum&#039;), this is the label that is put in front of setting on the admin screen.&lt;br /&gt;
&lt;br /&gt;
$description is get_string(&#039;configreplytouser&#039;, &#039;forum&#039;), this is a short bit of text displayed underneath the setting to explain it further.&lt;br /&gt;
&lt;br /&gt;
$defaultsetting is the default value for this setting. This value is used when Moodle is installed. For simple settings like checkboxes and text fields, this is a simple value. For some more complicated settings, this is an array.&lt;br /&gt;
&lt;br /&gt;
Let as now look at a more complicated example, from mod/quiz/settingstree.php:&lt;br /&gt;
&lt;br /&gt;
 $quizsettings-&amp;gt;add(new admin_setting_text_with_advanced(&#039;quiz/timelimit&#039;,&lt;br /&gt;
         get_string(&#039;timelimit&#039;, &#039;quiz&#039;), get_string(&#039;configtimelimit&#039;, &#039;quiz&#039;),&lt;br /&gt;
         array(&#039;value&#039; =&amp;gt; &#039;0&#039;, &#039;fix&#039; =&amp;gt; false), PARAM_INT));&lt;br /&gt;
&lt;br /&gt;
This shows two new things:&lt;br /&gt;
&lt;br /&gt;
$name here is &#039;quiz/timelimit&#039;. This is more complicated than a simple setting name. It means that this setting is stored in the config_plugins table, in the row where plugin=&#039;quiz&#039; and name=&#039;timelimit&#039;. It is not accessible through $CFG, to get it you can use get_config(&#039;quiz&#039;, &#039;timelimit&#039;).&lt;br /&gt;
&lt;br /&gt;
And this example shows a $defaultsetting that is an array.&lt;br /&gt;
&lt;br /&gt;
Normally, if you want a particular sort of setting, the easiest way is to look around the admin screens of your Moodle site, and find a setting like the one you want. Then go and copy the code and edit it. Therefore, we do not include a complete list of setting types here.&lt;br /&gt;
&lt;br /&gt;
==External pages==&lt;br /&gt;
&lt;br /&gt;
admin_externalpages represent screens of settings that do not fall into the standard pattern of admin_settings. The admin_externalpage object in the settings tree holds the URL of a PHP page that controls various settings.&lt;br /&gt;
&lt;br /&gt;
In that PHP page, near the start you need to call the function admin_externalpage_setup($pagename), then, instead of the usual print_header and print_footer functions, you use admin_externalpage_print_header() and admin_externalpage_print_footer() functions. This ensures that your page appears with the administration blocks and appropriate navigation.&lt;br /&gt;
&lt;br /&gt;
Note that if your external page relies on additional optional or required params, you may need to use the optional arguments to admin_externalpage_print_header to ensure that the Blocks editing on/off button works.&lt;br /&gt;
&lt;br /&gt;
Note that there are some subclasses of admin_externalpage, for example admin_page_managemods. In a lot of cases, these subclasses only exist to override the search method so this page can be found by appropriate searches.&lt;br /&gt;
&lt;br /&gt;
Once again, to understand this in more depth, your best approach is to look at how some of the external pages in Moodle work.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Modules|adding settings for actvitiy modules]]&lt;br /&gt;
* [[Development:Admin_reports#How_your_report_gets_included_in_the_admin_tree|adding admin reports to the tree]]&lt;br /&gt;
* [[Development:Repository_plugins#APIs_for_Administration|configuration of repository plugins]]&lt;br /&gt;
* [[Development:Filters#Adding_a_settings_screen|configuration for filter]]&lt;br /&gt;
* [[Development:Developer_documentation|Other developer documentation]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Modules&amp;diff=48163</id>
		<title>Development:Modules</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Modules&amp;diff=48163"/>
		<updated>2008-12-14T13:20:51Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Activity modules&#039;&#039;&#039; reside in the &#039;mod&#039; directory. Each module is in a separate subdirectory and consists of the following mandatory elements (plus extra scripts unique to each module):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;mod_form.php&#039;&#039; - a form to set up or update an instance of this module&lt;br /&gt;
* &#039;&#039;version.php&#039;&#039; - defines some meta-info&lt;br /&gt;
* &#039;&#039;icon.gif&#039;&#039; - a 16x16 icon for the module&lt;br /&gt;
* &#039;&#039;db/install.xml&#039;&#039; - defines the structure of db tables for all database types. Is used during module installation&lt;br /&gt;
* &#039;&#039;db/upgrade.php&#039;&#039; - defines changes in the structure of db tables. Is used during module upgrade&lt;br /&gt;
* &#039;&#039;db/access.php&#039;&#039; - defines module capabilities&lt;br /&gt;
* &#039;&#039;index.php&#039;&#039; - a page to list all instances in a course&lt;br /&gt;
* &#039;&#039;view.php&#039;&#039; - a page to view a particular instance&lt;br /&gt;
* &#039;&#039;lib.php&#039;&#039; - any/all functions defined by the module should be in here. If the modulename is called widget, then the required functions include:&lt;br /&gt;
:* widget_install() - will be called during the installation of the module&lt;br /&gt;
:* widget_add_instance() - code to add a new instance of widget&lt;br /&gt;
:* widget_update_instance() - code to update an existing instance&lt;br /&gt;
:* widget_delete_instance() - code to delete an instance&lt;br /&gt;
:* widget_user_outline() - given an instance, return a summary of a user&#039;s contribution&lt;br /&gt;
:* widget_user_complete() - given an instance, print details of a user&#039;s contribution&lt;br /&gt;
:* widget_get_view_actions() / widget_get_view_actions() - Used by the participation report (course/report/participation/index.php) to classify actions in the logs table.&lt;br /&gt;
:* Other functions available but not required are:&lt;br /&gt;
:** widget_delete_course() - code to clean up anything that would be leftover after all instances are deleted&lt;br /&gt;
:** widget_process_options() - code to pre-process the form data from module settings&lt;br /&gt;
:** [[Development:Implementing Reset course functionality in a module|widget_reset_course_form() and widget_delete_userdata()]] - used to implement [[Reset course]] feature.&lt;br /&gt;
:* To avoid possible conflict, any module functions should be named starting with widget_ and any constants you define should start with WIDGET_&lt;br /&gt;
* &#039;&#039;backuplib.php&#039;&#039; and &#039;&#039;restorelib.php&#039;&#039; (optional)&lt;br /&gt;
* &#039;&#039;settings.php&#039;&#039; or &#039;&#039;settingstree.php&#039;&#039; - (optional) a definition of an admin settings page for this module. mod/assignment/settings.php is a good simple example. mod/quiz/settingstree.php is a more complex example.&lt;br /&gt;
* &#039;&#039;defaults.php&#039;&#039; - lets you easily define default values for your configuration variables. It is included by upgrade_activity_modules in lib/adminlib.php. It should define an array $defaults. These values are then loaded into the config table. Alternatively, if you set $defaults[&#039;_use_config_plugins&#039;] to true, the values are instead loaded into the config_plugins table, which is better practice. See mod/quiz/defaults.php for an example.&lt;br /&gt;
* &#039;&#039;lang/en_utf8/widget.php&#039;&#039; - (optional) Lastly, each module will have some language files that contain strings for that module.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: When creating a new module, the new name of the module must not contain numbers or other special characters!&lt;br /&gt;
&lt;br /&gt;
You need a db table with the same name as your module. This table must have at least three fields: id, course and name.&lt;br /&gt;
&lt;br /&gt;
You should also make sure that your activity module provides appropriate support for groups and metacourses. &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Development:Backup]]&lt;br /&gt;
* Tracker issue [http://tracker.moodle.org/browse/CONTRIB-52 CONTRIB-52 Improvements to make NEWMODULE really useful] - including download link for new module template supporting roles, formslib etc. (unfinished) &lt;br /&gt;
* http://download.moodle.org/plugins16/mod/NEWMODULE.zip - new module template for versions of Moodle prior to 1.7. Please follow the README instructions inside the zip.&lt;br /&gt;
&lt;br /&gt;
Using Moodle forum discussions:&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=66165 A new resource type: where do I put the language strings?]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=65986 New Module Template Code for Moodle 1.7]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=90154 LEGACY roles and capabilities]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Modules]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
&lt;br /&gt;
[[es:Módulos de actividades (desarrollador)]]&lt;br /&gt;
[[fr:Modules (développeur)]]&lt;br /&gt;
[[ja:モジュール (開発者)]]&lt;br /&gt;
[[zh:开发:模块_(开发者)]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=48153</id>
		<title>Question permissions explained with diagrams</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=48153"/>
		<updated>2008-12-14T03:08:45Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==A simple story==&lt;br /&gt;
&lt;br /&gt;
===1. Setting the scene===&lt;br /&gt;
&lt;br /&gt;
For this explanation, we will image we have this very simple Moodle site. There are three courses, all in the Miscellaneous category. The courses have a few activities in them.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions1.png]] &lt;br /&gt;
&lt;br /&gt;
===2. Introducing Fred===&lt;br /&gt;
&lt;br /&gt;
We will focus on a particular user: Fred. Fred is a teacher in two of the courses. In Moodle, everyone gets some permissions throughout the whole Moodle site because they are logged in. Additionally, Fred gets more permissions in the courses he teaches, and all the activities in those courses, because he has the teacher role there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions2.png]]&lt;br /&gt;
&lt;br /&gt;
===3. Using questions in a course===&lt;br /&gt;
&lt;br /&gt;
Fred creates some questions in his maths course and adds them to the quiz. Why does this work?&lt;br /&gt;
&lt;br /&gt;
By default, questions are created in the question bank in a category that belongs to that course. Fred is a teacher in the course. Teachers are allowed to create questions. Therefore Fred can create the questions, and they get stored linked to the course.&lt;br /&gt;
&lt;br /&gt;
The quiz is in the course. Fred is a teacher in the course, so Fred has permission to add questions to the quiz. The quiz is in the course, so the course questions are potentially available. Fred is a teacher in the course, so he is allowed use the questions in the course question bank. Therefore Fred can add the questions to his quiz.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions3.png]]&lt;br /&gt;
&lt;br /&gt;
===4. Trying to share questions===&lt;br /&gt;
&lt;br /&gt;
Fred now wants to reuse some of his questions in his biology course. However, the biology quiz is not in the maths course, so the questions are not available.&lt;br /&gt;
&lt;br /&gt;
So Fred&#039;s friendly Moodle administrator Annie moves the questions into the part of the question bank associated with the category Miscellaneous. Disaster! now Fred can&#039;t see his questions at all. Why not?&lt;br /&gt;
&lt;br /&gt;
Now the questions are outside the course. Fred has no extra permissions outside the course, so he cannot access the questions there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions4.png]]&lt;br /&gt;
&lt;br /&gt;
===5. Successfully sharing questions===&lt;br /&gt;
&lt;br /&gt;
Annie creates a new role &#039;Question user&#039; that allows all the permissions needed to access the question bank. Annie assigns Fred that role in the whole system. Now Fred can see his questions from within both courses, edit them, and add them to his quizzes. Why?&lt;br /&gt;
&lt;br /&gt;
The questions are linked to category Miscellaneous. Miscellaneous is inside the system. Fred is a Question user in the system. Question users can access the question bank. So Fred can access this part of the question bank.&lt;br /&gt;
&lt;br /&gt;
The quizzes are in courses where Fred is a teacher, so Fred is has permission to add questions to the quizzes. The quizzes are in the Miscellaneous category, so the questions in that part of the question bank are potentially available. We have just seen that Fred has permission to access these question. Therefore Fred can add these questions to his quizzes.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions5.png]]&lt;br /&gt;
&lt;br /&gt;
==Summary of the rules==&lt;br /&gt;
&lt;br /&gt;
Questions are stored in the question bank linked to some part of your Moodle system (technically a context). The part of the system might be (and most often is) a course, or a course category, the whole system, or an individual activity.&lt;br /&gt;
&lt;br /&gt;
===To create and editing questions===&lt;br /&gt;
&lt;br /&gt;
you must have the appropriate [[Question_permissions|capability]] in the part of the system where the questions are stored, to have permission to do the corresponding operation (add, edit, ...).&lt;br /&gt;
&lt;br /&gt;
===To adding questions to a quiz===&lt;br /&gt;
&lt;br /&gt;
three checks have to pass:&lt;br /&gt;
# You must have the mod/quiz:manage capability in that quiz, to have permission to add questions to it.&lt;br /&gt;
# The quiz must be inside the part of the system where the questions are stored, in order for the questions to be available in the quiz.&lt;br /&gt;
# You must have the moodle/question:use(all/mine) capability in the part of the system where the questions are stored, to have permission to use those questions.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Question bank]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=How_to_let_teachers_share_questions_between_courses&amp;diff=48152</id>
		<title>How to let teachers share questions between courses</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=How_to_let_teachers_share_questions_between_courses&amp;diff=48152"/>
		<updated>2008-12-14T03:08:22Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: New page: {{Questions}}{{Moodle 1.9}}The page explain how Administrators can let teachers share questions between courses in Moodle 1.9.  ==What you need to do==  ===1. Create a new role Question sh...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Questions}}{{Moodle 1.9}}The page explain how Administrators can let teachers share questions between courses in Moodle 1.9.&lt;br /&gt;
&lt;br /&gt;
==What you need to do==&lt;br /&gt;
&lt;br /&gt;
===1. Create a new role Question sharer===&lt;br /&gt;
&lt;br /&gt;
As usual, you create a new role by going to Administration -&amp;gt; Users -&amp;gt; Permissions -&amp;gt; Define roles.&lt;br /&gt;
&lt;br /&gt;
You can use whatever Name and Short name you like for the role. Set the &#039;Legacy role type&#039; to None.&lt;br /&gt;
&lt;br /&gt;
In Moodle 2.0 and later, set the role to be assignable in the System and Category contexts.&lt;br /&gt;
&lt;br /&gt;
Set the following capabilities to Allow:&lt;br /&gt;
moodle/question:add&lt;br /&gt;
moodle/question:editall&lt;br /&gt;
moodle/question:managecategory&lt;br /&gt;
moodle/question:moveall&lt;br /&gt;
moodle/question:viewall&lt;br /&gt;
moodle/question:useall&lt;br /&gt;
&lt;br /&gt;
===2. Assign the new role in the System context===&lt;br /&gt;
&lt;br /&gt;
Any user who you wish to be able to access the shared areas of the question bank must have the new role assigned in the System context. (Administration -&amp;gt; Users -&amp;gt; Permissions -&amp;gt; Assign system roles)&lt;br /&gt;
&lt;br /&gt;
Or, for more control, you can assign this role in a course category. That lets the user share questions only between the courses in that category.&lt;br /&gt;
&lt;br /&gt;
==What teachers need to do==&lt;br /&gt;
&lt;br /&gt;
Once you have done the above steps. Teachers who have the Question sharer role will be able to see the shared areas of the question bank when they are editing quizzes, or when they click on the &#039;Questions&#039; link in the course administration block.&lt;br /&gt;
&lt;br /&gt;
Any questions they store in the shared areas of the question bank will be visible in all their courses.&lt;br /&gt;
&lt;br /&gt;
==Why does this work?==&lt;br /&gt;
&lt;br /&gt;
See: [[Question permissions explained with diagrams]].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Question bank]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_Engine_Changes_in_Moodle_1.9&amp;diff=48151</id>
		<title>Question Engine Changes in Moodle 1.9</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_Engine_Changes_in_Moodle_1.9&amp;diff=48151"/>
		<updated>2008-12-14T02:57:21Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* More info about changes in Moodle 1.9 can be found on these pages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Questions}}&lt;br /&gt;
{{Moodle 1.9}}&lt;br /&gt;
==General Clean Up of UI and Code==&lt;br /&gt;
&lt;br /&gt;
* Many parts of the question code have been cleaned up. The Quiz / Question UI has some improvements - the category editing page&#039;s table has been replaced by unordered lists and the controls for editing categories have been improved.&lt;br /&gt;
* Question code no longer relies on browser sessions. Before if you had more than one browser window open for editing a quiz / questions navigation would have been unpredictable now you can have several independent browser windows open at once to edit quizzes and questions.&lt;br /&gt;
* Further work has been done on separating the question bank code from the quiz module to make it possible to access questions in the question bank from other modules.&lt;br /&gt;
&lt;br /&gt;
==Better Management of Files Linked to In Questions==&lt;br /&gt;
&lt;br /&gt;
[[Questions linking to files|Since Moodle 1.9 we have some automatic handling of files linked to from questions. When you &#039;&#039;&#039;move questions between sharing contexts&#039;&#039;&#039; and when you &#039;&#039;&#039;back up&#039;&#039;&#039; courses with questions in them, Moodle will now help you manage files linked to in your questions.]]&lt;br /&gt;
&lt;br /&gt;
==Separated Questions into Different Category Hierarchies in Different Context Levels==&lt;br /&gt;
&lt;br /&gt;
Before 1.9 questions were always associated with one course. You could &#039;share&#039; a question to allow it to be visible in another course. Now questions can be shared in an activity, a course, a course category or with the whole system. These different levels of sharing are Moodle &#039;contexts&#039;. More info here [[Question contexts]]&lt;br /&gt;
&lt;br /&gt;
Upon upgrade :&lt;br /&gt;
* a category that was shared will now be in the System context and it will have the course name from which it has been taken appended to the category name in brackets.&lt;br /&gt;
* Questions that were not shared will be put in the course context upon upgrade.&lt;br /&gt;
* The only exception to this is the special case outlined below in [[#Random Questions Selecting from Subcategories]]&lt;br /&gt;
&lt;br /&gt;
==More Granular Capabilities==&lt;br /&gt;
&lt;br /&gt;
Since Moodle 1.9 we have more granular capabilities for access and use of questions see [[Question permissions]] for more info. Question permissions are now tested in the context in which the questions are shared see [[Question contexts]] for more info.&lt;br /&gt;
&lt;br /&gt;
====Upgrade====&lt;br /&gt;
&lt;br /&gt;
On upgrade from an older version of Moodle question capabilities are automatically assigned.&lt;br /&gt;
&lt;br /&gt;
Roles that previously had the moodle/question:manage capability will have :&lt;br /&gt;
&lt;br /&gt;
* [[Capabilities/moodle/question:add|moodle/question:add]]&lt;br /&gt;
* [[Capabilities/moodle/question:editmine|moodle/question:editmine]] / [[Capabilities/moodle/question:editall|editall]]&lt;br /&gt;
* [[Capabilities/moodle/question:viewmine|moodle/question:viewmine]] / [[Capabilities/moodle/question:viewall|viewall]]&lt;br /&gt;
* [[Capabilities/moodle/question:usemine|moodle/question:usemine]] / [[Capabilities/moodle/question:useall|useall]]&lt;br /&gt;
* [[Capabilities/moodle/question:movemine|moodle/question:movemine]] / [[Capabilities/moodle/question:moveall|moveall]]&lt;br /&gt;
&lt;br /&gt;
This will give all users effectively the same permissions as they had previously for questions shared at the course level.&lt;br /&gt;
&lt;br /&gt;
==Potential Issues on Upgrade==&lt;br /&gt;
&lt;br /&gt;
===Access to question categories shared outside a course===&lt;br /&gt;
&lt;br /&gt;
Questions that are shared above the course level may not be available to course teachers. Normally the teacher role is assigned at the course level so the teacher&#039;s capabilities will only cover the course in which they are assigned the teacher role. You must define a new role and assign all users that you want to be able to share questions above the course level that role. You do this by :&lt;br /&gt;
&lt;br /&gt;
* log in as an admin&lt;br /&gt;
* go to Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Define roles&lt;br /&gt;
* click on Add New Role button&lt;br /&gt;
* define a new Role Shared Question Creator&lt;br /&gt;
* give the role these question permissions :&lt;br /&gt;
** [[Capabilities/moodle/question:add|moodle/question:add]]&lt;br /&gt;
** [[Capabilities/moodle/question:editall|moodle/question:editall]]&lt;br /&gt;
** [[Capabilities/moodle/question:viewall|moodle/question:viewall]]&lt;br /&gt;
** [[Capabilities/moodle/question:moveall|moodle/question:moveall]]&lt;br /&gt;
** [[Capabilities/moodle/question:managecategory|moodle/question:managecategory]]&lt;br /&gt;
* and probably also :&lt;br /&gt;
** [[Capabilities/moodle/question:useall|moodle/question:useall]]&lt;br /&gt;
&lt;br /&gt;
You can also create a role &#039;Shared question user&#039;:&lt;br /&gt;
&lt;br /&gt;
* log in as an admin&lt;br /&gt;
* go to Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Define roles&lt;br /&gt;
* click on Add New Role button&lt;br /&gt;
* define a new Role Shared question user&lt;br /&gt;
* give the role these question permissions :&lt;br /&gt;
** [[Capabilities/moodle/question:viewall|moodle/question:viewall]]&lt;br /&gt;
** [[Capabilities/moodle/question:useall|moodle/question:useall]]&lt;br /&gt;
&lt;br /&gt;
Assign the role at the system level to give the user the &#039;Shared question user&#039; /  &#039;Shared Question Creator&#039; permissions in the System context and in all the Course Categories. The user will also have the same permissions in all courses and activities unless you override the permissions at these levels for any of the roles the user has (eg. Teacher / Student etc) a &#039;prevent&#039; at a lower context level will override an allow at the system or course category level. You assign a role at the system level by going to Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Assign global roles.&lt;br /&gt;
&lt;br /&gt;
You can also assign a role at the course category level by going to Administration &amp;gt; Courses &amp;gt; Add/edit courses and clicking on one of the course category names and then clicking on the Assign Roles link to the top right of the screen. The role will apply to all contained course categories and also to all courses / activities contained.&lt;br /&gt;
&lt;br /&gt;
===Random Questions Selecting from Subcategories===&lt;br /&gt;
&lt;br /&gt;
[[Image:randomquestionenvironmentcheck.jpg|thumb|Screen shot of problems reported in environment check upgrading to 1.9]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Normally upon upgrade questions that are shared are moved to a category in the system context. Questions that are not shared are kept in the course context.&lt;br /&gt;
&lt;br /&gt;
In the following special case this is not true and the sharing status of some questions may have been changed :&lt;br /&gt;
&lt;br /&gt;
* You have some random questions in your quizzes which are selected from sub categories.&lt;br /&gt;
* AND the sub categories the random questions are selected from have a different &#039;shared&#039; status to any of the sub categories. Eg. you have a random question in a category that is not shared and some of the sub categories you are selecting from are not shared. OR you have a random question in a category that is shared and some of the sub categories you are selecting from are shared.&lt;br /&gt;
&lt;br /&gt;
There is a special check for this case in the environment check code and a special admin report for checking this.&lt;br /&gt;
&lt;br /&gt;
When a random question as above is found in the question bank then :&lt;br /&gt;
&lt;br /&gt;
* all sub categories below the random question are set to the same &#039;shared&#039; status as the category the random question is in.&lt;br /&gt;
* if there is another random question in one of the sub categories it is ignored, all sub categories are set to the same status.&lt;br /&gt;
&lt;br /&gt;
Questions already included in quizzes will continue to work as before.&lt;br /&gt;
&lt;br /&gt;
There is an environment check to check for possible problems with &#039;Random Questions Selecting from Subcategories&#039;. See screen shot. &lt;br /&gt;
&lt;br /&gt;
[[Image:randomquestionadminreport.jpg|thumb|Screen shot of questions admin report reporting problems with random questions.]]&lt;br /&gt;
&lt;br /&gt;
More information about the issue on your system is available in Admin / Reports / Question, this is linked to from the environment check message when a problem is detected. Environment checks and the question admin report have been backported to the latest version of MOODLE_18_STABLE.&lt;br /&gt;
&lt;br /&gt;
==More info about changes in Moodle 1.9 can be found on these pages==&lt;br /&gt;
&lt;br /&gt;
* [[Question permissions explained with diagrams]]&lt;br /&gt;
* [[How to let teachers share questions between courses]]&lt;br /&gt;
* [[Question bank]]&lt;br /&gt;
* [[Question categories]]&lt;br /&gt;
* [[Question contexts]]&lt;br /&gt;
* [[Question permissions]]&lt;br /&gt;
* [[Question reports]]&lt;br /&gt;
* [[Questions linking to files]]&lt;br /&gt;
* [[Quiz submission email notification]]&lt;br /&gt;
&lt;br /&gt;
The following permissions are new in Moodle 1.9 (they replace moodle/question:manage, giving more control over exactly what someone can do) :&lt;br /&gt;
&lt;br /&gt;
* [[Capabilities/moodle/question:add|moodle/question:add]]&lt;br /&gt;
* [[Capabilities/moodle/question:editmine|moodle/question:editmine]] / [[Capabilities/moodle/question:editall|editall]]&lt;br /&gt;
* [[Capabilities/moodle/question:viewmine|moodle/question:viewmine]] / [[Capabilities/moodle/question:viewall|viewall]]&lt;br /&gt;
* [[Capabilities/moodle/question:usemine|moodle/question:usemine]] / [[Capabilities/moodle/question:useall|useall]]&lt;br /&gt;
* [[Capabilities/moodle/question:movemine|moodle/question:movemine]] / [[Capabilities/moodle/question:moveall|moveall]]&lt;br /&gt;
&lt;br /&gt;
And the following no longer exist :&lt;br /&gt;
&lt;br /&gt;
* [[Capabilities/moodle/question:manage|moodle/question:manage]]&lt;br /&gt;
* [[Capabilities/moodle/question:import|moodle/question:import]]&lt;br /&gt;
* [[Capabilities/moodle/question:export|moodle/question:export]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ja:Moodle 1.9における問題エンジンの変更]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Quiz_Usability_portal/Different_paginating_features_in_quiz&amp;diff=48144</id>
		<title>Development:Quiz Usability portal/Different paginating features in quiz</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Quiz_Usability_portal/Different_paginating_features_in_quiz&amp;diff=48144"/>
		<updated>2008-12-13T09:11:48Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Return to: [[Development:Quiz_Usability_portal|Quiz Usability portal]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This document discusses Quiz functionality in Moodle 1.9 and Moodle 2 HEAD in Dec 2008, in order to solve issues related to tickets MDL-17333 and MDL-6353.&lt;br /&gt;
== The issue ==&lt;br /&gt;
&lt;br /&gt;
I read the description in MDL-6353 and thought this was a mistake until I tested it:&lt;br /&gt;
&amp;quot;Well, if the option &#039;shuffle questions&#039; is turned on, then they are automatically paginated.&lt;br /&gt;
&lt;br /&gt;
But if the shuffle option is off, then they are actually manually paginated. The quiz &#039;questions per page&#039; option then only has an effect when a new question is added.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I realized that this is right. So &amp;quot;I think what this setting does is it keeps the quiz organized permanently&amp;quot; in the description of this bug is wrong IF shuffle questions is set to &amp;quot;No&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Like, what?? This inconsistency of behaviour makes no sense to me whatsoever, and is not communicated by the UI at all. This is not an issue with the wording of the setting, but the whole model of the functionality.&lt;br /&gt;
&lt;br /&gt;
== Breaking it down ==&lt;br /&gt;
&lt;br /&gt;
That is, there are three features for managing the paging of a quiz&lt;br /&gt;
* A. Repaginate on request - allows changing the paginating manually afterwards for a more intricate paginating&lt;br /&gt;
* B. Keep quiz paginated consistently throughout with N questions&lt;br /&gt;
* C. Paginate any questions added from now on with N per page&lt;br /&gt;
(B and C are currently strangely mixed between the two settings  &amp;quot;questions per page&amp;quot; and &amp;quot;shuffle questions&amp;quot;. ).&lt;br /&gt;
&lt;br /&gt;
A is a command, B and C are modes/settings which need to be made apparent in the UI. To make C not a mode, it could be a selection the user makes at the time of each &#039;add question&#039; operation.&lt;br /&gt;
&lt;br /&gt;
So the wording &amp;quot;After adding N questions&amp;quot; does make sense when shuffle questions is NOT enabled, since that is all it does (feature C). &lt;br /&gt;
&lt;br /&gt;
But it does not make sense when shuffle questions is enabled, in which case the feature in question turns into another feature (features B &amp;amp; C combined).&lt;br /&gt;
&lt;br /&gt;
=== Storing the order when paginating is fixed ===&lt;br /&gt;
&lt;br /&gt;
When B is set, the quiz editing UI should reflect this reality:&lt;br /&gt;
* the editing UI should show the questions according to B&lt;br /&gt;
* the controls for paging should be disabled (as they are)&lt;br /&gt;
&lt;br /&gt;
This arises the question of whether or not the manual order of questions should still be stored when B is set - and if it is, should the UI reflect this reality - the fact that in a sense, the quiz is storing &#039;&#039;two different quiz layouts&#039;&#039; when B is set, and that the user has the option to &amp;quot;undo&amp;quot; the effect of setting B by turning it off.&lt;br /&gt;
&lt;br /&gt;
Or should setting B result in &lt;br /&gt;
# first running A with the number of questions per page set for B, &lt;br /&gt;
# and then enforcing that order,&lt;br /&gt;
# and when B is turned off only the enforcing of the order is stopped&lt;br /&gt;
&lt;br /&gt;
This would mean that the manual ordering would be lost when the user would set B. This is a destructive operation, should the user be warned about it? Since (confirm this?) it is a non-destructive operation in earlier versions of Moodle, users might rely that it is so also in new versions.&lt;br /&gt;
&lt;br /&gt;
=== The way it currently works ===&lt;br /&gt;
* Shuffle off, questions per page on: C -&amp;gt; explicitly repaginating with A still possible&lt;br /&gt;
* Shuffle on, questions per page on: B+C -&amp;gt; explicitly repaginating with A not possible, since the number is fixed in any case&lt;br /&gt;
* Questions per page off: none; questions are paged manually and put onto the last page of quiz when being added&lt;br /&gt;
&lt;br /&gt;
=== Usage scenarios and relationship to features ===&lt;br /&gt;
&lt;br /&gt;
Three usage scenarios I can think of:&lt;br /&gt;
# User wants to make sure his/her quiz consistently has N questions per page &lt;br /&gt;
## Subscenario: The user basically  does not want to think about it at all: 1. You know from the start you want your quiz to have one-question per page, so you set that on the quiz settings screen when you create the quiz. 2. Then you add 10 questions to the quiz from the question bank.&lt;br /&gt;
# User wants to just add questions and afterwards think about paging: mostly keep a consistent paging scheme but user might want to deviate from it on some pages (for example, first page only has an introductory question, while further pages have a greater quantity)&lt;br /&gt;
# The user needs to set the layout of their questions manually: User already has an intricate paging scheme realized in the quiz, but wants to add further questions with a consistent paging scheme only for the new questions &lt;br /&gt;
## But if the number of questions to add is big, it is useful to be capable of automatically page the *new* questions while adding them, requiring feature C.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In 1, the user is served by either &lt;br /&gt;
* adding their questions first and then applying A (and then redoing that after adding further questions)&lt;br /&gt;
* having B set, and then adding questions. In this case the user can also set B on after adding the questions&lt;br /&gt;
&lt;br /&gt;
In 2, the user can use A after adding the questions he/she wants, and afterwards make modifications to the paging manually. But 3.1 applies here, too.&lt;br /&gt;
&lt;br /&gt;
== Options for a solution  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DISCLAIMER: The reasoning was made ENTIRELY WITHOUT user testing or extensive research of further use cases that might be related to this functionality. Still, it seems the best we got for now.&#039;&#039;&#039;&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
As B and C are modes, and thus their being active should be reflected by the edit page.&lt;br /&gt;
&lt;br /&gt;
The safest model would seem to be having three distinct features. However, I am not at all sure if C is such a special case that it should be eliminated altogether.&lt;br /&gt;
&lt;br /&gt;
If you remove functionality C altogether, that means not supporting the use case the UI currently supports when shuffle questions is off: &amp;quot;In 3, the user can add their questions manually. But if the number of questions to add is big, it is useful to be capable of automatically page the *new* questions while adding them, requiring feature C. &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Option 1===&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to take the risk of removing functionality, add a separate setting on the quiz settings page for C. This is mutually exclusive with the actual keeping quiz paginated permanently. That is, I would create three radio buttons. &lt;br /&gt;
&lt;br /&gt;
Note that this also has the advantage of simplifying the drop down menus by removing the &amp;quot;Never&amp;quot; or &amp;quot;Unlimited&amp;quot; option, as that option is moved to the first radio button, making the UI more obvious (as you do not have to  search the option/remember whether or not that non-numeric option was there or not - Recognition rather than recall in Nielsen&#039;s heuristics).&lt;br /&gt;
&lt;br /&gt;
 ( ) Manual paging&lt;br /&gt;
 ( ) Manual paging, but when I add questions, paginate &lt;br /&gt;
     them with [ v] questions  per page&lt;br /&gt;
 ( ) Keep the entire quiz paginated with [ v] questions per page&lt;br /&gt;
&lt;br /&gt;
The dropdowns that are not with the currently active radio button should be disabled using javascript.&lt;br /&gt;
&lt;br /&gt;
===Option 2===&lt;br /&gt;
&lt;br /&gt;
The other option, then would seem to be making the functionality work according to how it is worded in 1.9: that is, discard functionality C and make the setting on the settings page only toggle B, independent of shuffle questions - assuming that the dependency with shuffle options has no purpose in the first place.&lt;br /&gt;
&lt;br /&gt;
==Tim&#039;s thoughts==&lt;br /&gt;
&lt;br /&gt;
Thank you for summarising everything an covering so many possibilities. I would not have reached the following suggestion without reading all your options.&lt;br /&gt;
&lt;br /&gt;
Also, I am very aware that I am likely to have a strong sub-conscious bias in favour of how the quiz has always worked, but actually, I still think that the following is right, even though it is only a small change from how the quiz used to work - all your other changes make the way the quiz used to work much more understandable.&lt;br /&gt;
&lt;br /&gt;
I think we need to consider the two cases separately:&lt;br /&gt;
&lt;br /&gt;
===Shuffle questions: Yes===&lt;br /&gt;
&lt;br /&gt;
In this case, the other settings is &amp;quot;Questions per page: N&amp;quot;, or &amp;quot;All questions on one page&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On both the Editing quiz and Order and paging tabs, the list of question should always be shown broken into pages of the specified size, and there should be no options to manually control page breaks. The controls for adding new questions should only appear at the end, possibly it would be clearer if they only appeared outside the grey box for the last page.&lt;br /&gt;
&lt;br /&gt;
I would be inclined to keep the UI for moving questions up and down in the list, and reordering them on the order and paging tab, because getting the list of questions in order may help teachers ensure they have exactly the list of questions they intend in the quiz.&lt;br /&gt;
&lt;br /&gt;
===Shuffle questions: No===&lt;br /&gt;
&lt;br /&gt;
In this case, we should only support manual paging. That is, basically option C, but with the option of manually doing a repaginate (A). &lt;br /&gt;
&lt;br /&gt;
:My logic is that the new UI makes it very clear what the current state of the pagination of the quiz is. Therefore, there is very little value in a &#039;Keep the entire quiz paginated with [ v] questions per page&#039; mode in the UI, especially if a repaginate is easy to trigger.&lt;br /&gt;
&lt;br /&gt;
In this case, the other setting becomes &amp;quot;New page every N questions&amp;quot; or &amp;quot;Never start a new page&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Suppose it is set to new page every 3 questions. Then the way it should work is, when you add a question to the last page on the quiz, if, as a result, that last page contains three or more question, then we automatically add a blank page at the end of the quiz, as well as adding the question.&lt;br /&gt;
&lt;br /&gt;
===More radical suggestion===&lt;br /&gt;
&lt;br /&gt;
Actually, the whole problem is that the place you go to change these settings, the quiz settings form, is nowhere near the place where you can see the effect of these settings. That is what we need to change.&lt;br /&gt;
&lt;br /&gt;
There is already a precedent for this, the $quiz-&amp;gt;grade field. This can only be set on the quiz editing page.&lt;br /&gt;
&lt;br /&gt;
So, I think that similarly we should remove the shuffle questions and questions per page setting from the quiz settings form, and instead change the line that looks like &lt;br /&gt;
&lt;br /&gt;
Update this Quiz: *Shuffle questions: Yes | Questions per page: 1&lt;br /&gt;
&lt;br /&gt;
To look like:&lt;br /&gt;
&lt;br /&gt;
Shuffle questions: [Yes |v] | New page: [every N questions |v]&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Shuffle questions: [No |v] | New page: [Never |v] | (Repaginate ...)&lt;br /&gt;
&lt;br /&gt;
Both of those dropdowns will be the sort that submit a form when they are changed, so the new value can be saved, and the display of the questions in the quiz can be updated appropriately.&lt;br /&gt;
&lt;br /&gt;
I have tried to find a consistent wording for the second drop-down, that works for both shuffle options. If necessary, we could have the second dropdown depend on the state of the first.&lt;br /&gt;
&lt;br /&gt;
Do what I said above about how to show the list of questions, and what controls are available in each mode.&lt;br /&gt;
&lt;br /&gt;
Am I making any sense here?&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Debugging&amp;diff=48091</id>
		<title>Debugging</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Debugging&amp;diff=48091"/>
		<updated>2008-12-12T06:54:57Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Location: &#039;&#039;Administration &amp;gt; Server &amp;gt; Debugging&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Debugging messages are intended to help Moodle developers. If you have a problem with your Moodle site and ask for help in a Moodle.org forum, a developer may ask you to turn debug messages on, in order to locate the cause of the problem.&lt;br /&gt;
&lt;br /&gt;
==How to turn on debugging==&lt;br /&gt;
&lt;br /&gt;
Go into the admin screens, and look under Administration &amp;gt; Server &amp;gt; Debugging. Set the &#039;&#039;&#039;Debug messages&#039;&#039;&#039; to &#039;&#039;&#039;ALL&#039;&#039;&#039;, and &#039;&#039;&#039;Display debug messages&#039;&#039;&#039; to &#039;&#039;&#039;Yes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Once you have got the error message, and copied and pasted it somewhere, you are recommended to turn debugging back off again.&lt;br /&gt;
&lt;br /&gt;
==Debug messages==&lt;br /&gt;
&lt;br /&gt;
{{Moodle 1.7}}From Moodle 1.7 onwards, further options are provided for controlling how to handle PHP error messages. The administrator can select the types of error messages to be displayed or logged. &lt;br /&gt;
&lt;br /&gt;
The options for debugging include:&lt;br /&gt;
* NONE: Do not show any errors or warnings&lt;br /&gt;
* MINIMAL: Show only fatal errors&lt;br /&gt;
* NORMAL: Show errors, warnings and notices&lt;br /&gt;
* ALL: Show all reasonable PHP debug messages&lt;br /&gt;
* DEVELOPER: extra Moodle debug messages for developers - If you turn this on, then PHP&#039;s error_reporting will be increased so that more warnings are printed.  This is only useful for developers.&lt;br /&gt;
&lt;br /&gt;
==Display debug messages==&lt;br /&gt;
&lt;br /&gt;
There is an option to choose whether to display error messages or simply record them in the server logs.&lt;br /&gt;
&lt;br /&gt;
==Debug email sending==&lt;br /&gt;
&lt;br /&gt;
Determines whether or not to enable verbose debug information during sending of email messages to SMTP server.&lt;br /&gt;
&lt;br /&gt;
==Performance info==&lt;br /&gt;
&lt;br /&gt;
The Performance info option determines whether performance info will be included in the footer of the standard theme (and some other themes). Performance info includes the time for the page to load, the amount of memory used to generate the page, cpu usage, load, and the record cache hit/miss ration.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=91031 Debugging Turned on to Developer Mode on 1.8.2] forum discussion including instructions on how to turn debugging off&lt;br /&gt;
&lt;br /&gt;
[[Category:Administrator]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development_talk:lib/formslib.php&amp;diff=48087</id>
		<title>Development talk:lib/formslib.php</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development_talk:lib/formslib.php&amp;diff=48087"/>
		<updated>2008-12-12T01:17:20Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;what do the numbers refer to:&lt;br /&gt;
&lt;br /&gt;
auth\cas\index_form.html (18) &lt;br /&gt;
&lt;br /&gt;
the (18) ?&lt;br /&gt;
&lt;br /&gt;
:Just guessing, but I think the list may have originally been generated from some CVS command, and that the numbers are CVS file revision numbers.--[[User:Tim Hunt|Tim Hunt]] 19:17, 11 December 2008 (CST)&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=SCORM_FAQ&amp;diff=48039</id>
		<title>SCORM FAQ</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=SCORM_FAQ&amp;diff=48039"/>
		<updated>2008-12-11T12:06:04Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: Not a stub any more by the looks of it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Scorm}}==How can I create SCORM content?==&lt;br /&gt;
&lt;br /&gt;
See [[Tools for creating SCORM content]] for a list of options.&lt;br /&gt;
==My SCORM Module doesn&#039;t function properly==&lt;br /&gt;
&lt;br /&gt;
* Make sure you are running Moodle 1.9.3 or 1.8.7 or higher, a large number of SCORM related bugs have been fixed in these versions. see [http://tracker.moodle.org/browse/MDL/component/10080?selected=com.atlassian.jira.plugin.system.project:component-changelog-panel Changelog here]&lt;br /&gt;
* Make sure your SCORM object is SCORM compliant - check it in an external SCORM player like [https://docs.moodle.org/en/Tools_for_creating_SCORM_content#Reload Reload] to see if it works there.&lt;br /&gt;
* Post a copy of your SCORM object in the [http://moodle.org/mod/data/view.php?d=50 SCORM Repository] and post a message asking for help in the forums, linking to your SCORM object explaining exactly what you expect to happen, and what is happening instead.&lt;br /&gt;
&lt;br /&gt;
==What version of SCORM is supported?==&lt;br /&gt;
&lt;br /&gt;
* SCORM 1.2 is supported in Moodle 1.9.3 and Moodle 1.8.7 and passes all the tests in the ADL Conformance test suite 1.2..7 for SCORM 1.2. (This is not the same as being certified SCORM 1.2 compliant, but it is the level that must be attained before Moodle can apply for certification.)&lt;br /&gt;
&lt;br /&gt;
* SCORM 2004 is not completely supported in Moodle at this stage. Parts of the API have been implemented, but others such as Navigation and Sequencing have not yet been implemented. It is unlikely at this stage that it will be completed by the time Moodle 2.0 is released, however it is being actively worked on.&lt;br /&gt;
&lt;br /&gt;
* AICC objects are supported in Moodle 1.9.3 or 1.8.7 and higher - unfortunately the availability of publicly accessible AICC objects is limited, so testing has been rather difficult. If you have any AICC objects you are willing to share, please upload them to the [http://moodle.org/mod/data/view.php?d=50 SCORM Repository]&lt;br /&gt;
&lt;br /&gt;
* SCORM 2.0 has not been released yet by ADL, and Moodle does not support any of it at this stage.&lt;br /&gt;
==What you can do to help in the SCORM Forum==&lt;br /&gt;
&lt;br /&gt;
When trying to engage the community to help with a problem you are facing, you will get a better response if you follow a few simple guidelines:&lt;br /&gt;
&lt;br /&gt;
* be prepared to provide a SCORM package that illustrates your problem - if you don&#039;t then it will be very difficult for anyone offering assistance to recreate your situation - a real barrier to help.&lt;br /&gt;
&lt;br /&gt;
* always start your report with version information - preferably the information displayed on the Admin -&amp;gt; Environment panel eg. http://localhost/moodle/admin/environment.php where http://localhost/moodle is your particular prefix.  With this it will be clear how you are running your Moodle instance, on what platform, and at which version.  This will quickly expose issues where a simple upgrade will solve your problem.&lt;br /&gt;
&lt;br /&gt;
==My SCORM doesn&#039;t transfer grades the way I want it to==&lt;br /&gt;
* please see [https://docs.moodle.org/en/SCORM_FAQ#My_SCORM_Module_doesn.27t_function_properly FAQ:My SCORM Module doesn&#039;t function properly]&lt;br /&gt;
* make sure in the update/edit a SCORM object screen, that the &amp;quot;maximum grade&amp;quot; setting is set to what you would expect (most people use 100)&lt;br /&gt;
* make sure in the update/edit a SCORM object screen, that the &amp;quot;grading method&amp;quot; is set to what you would prefer.&lt;br /&gt;
* Much of the way SCORM objects are graded is controlled inside the SCORM Authoring process before it is packaged for use in an LMS like Moodle - make sure all your grading settings are set correctly. Moodle 2.0 contains some new controls that allow a teacher to override the behaviour as set by the SCORM object to allow for greater more flexible control. (see MDL-11501 for more information on this)&lt;br /&gt;
&lt;br /&gt;
==slash arguments warning when I add/update SCORM obects in my course==&lt;br /&gt;
As of Moodle 1.9.3 SCORM forces what is referred to as &amp;quot;slash arguments&amp;quot; - Unfortunately, some PHP servers don&#039;t allow this method and your SCORM objects may not display. This affects IIS 5 and earlier, and some Apache servers. Under IIS 5 and earlier, a workaround using an [http://www.isapirewrite.com/ ISAPI re-write] tool can be used, Apache users should look at this link: https://docs.moodle.org/en/Installation_FAQ#Uploaded_files_give_.22File_not_found.22 - A check on the admin/health.php page is also made to see if slasharguments is supported - visit http://yourmoodlesite/admin/health.php to check to see the status of slasharguments on your server.&lt;br /&gt;
&lt;br /&gt;
==Zlib warning when I add/update SCORM objects in my course==&lt;br /&gt;
Zlib is a php compression setting made in a websites PHP configuration - unfortunately some browsers don&#039;t handle this well (especially Internet Explorer 6) Some webhosts enable this setting, but it will likely cause issues for your users when they attempt to view/use the SCORM object. You will need to contact your server administrator to turn this off. The setting to change in php configuration is &amp;quot;zlib.output_compression&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Large SCORM package will upload to Moodle, but will not display==&lt;br /&gt;
If you get a blank page after filling in the title, description, and selecting a large SCORM file, it&#039;s likely that the file you are trying to upload is too big for the php zip library to handle - you must use external zip/unzip binaries - see here: https://docs.moodle.org/en/System_paths#Path_to_zip&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=1951 SCORM forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=User_talk:Howard_Miller&amp;diff=48003</id>
		<title>User talk:Howard Miller</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=User_talk:Howard_Miller&amp;diff=48003"/>
		<updated>2008-12-11T03:09:32Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* Moodle XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi Howard, sorry for taking ages to respond - haven&#039;t been here in a while. You&#039;re right, a2enmod is a bit debian-specific, but the directives to be placed in the configuration are not. I think apache 1 and 2 differ on how to enable modules and a2enmod applies to version 2, but I&#039;m more of a tinkerer than an expert there :) I&#039;ll edit it in again, but with that caveat. - [[User:Matt Gibson|Matt Gibson]] 08:37, 12 October 2006 (CDT)&lt;br /&gt;
&lt;br /&gt;
Hi Howard, thanks for your work improving Docs continuously! Hyper-cool! [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 13:02, 14 March 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Moodle XML ==&lt;br /&gt;
&lt;br /&gt;
Hello Howard,&lt;br /&gt;
&lt;br /&gt;
I learned from http://www.qedoc.org/en/index.php?title=Moodle_XML_format that you are the creator (maintainer, guru...) of the Moodle XML format. I have started a XML FAQ page (https://docs.moodle.org/en/XML_FAQ) and an Import and export FAQ page (https://docs.moodle.org/en/Import_and_export_FAQ) to collect all the scattered information regarding importing and exporting Moodle content namely in XML format.&lt;br /&gt;
&lt;br /&gt;
I think it is really important for Moodle to have a well defined, standardized Import/Export API so one can easily create content outside of Moodle XML is the obvious candidate for such a format.&lt;br /&gt;
&lt;br /&gt;
At the moment I am working on creating a XML Schema for Moodle XML incorporating all the information from the Moodle XML documentation. That would help users and third party tool developers to validate Moodle XML files before importing them into Moodle.&lt;br /&gt;
&lt;br /&gt;
I have further plans for creating some XSLT stylesheets for converting quiz content via Moodle XML into human readable formats as this is a frequent request in the forums.&lt;br /&gt;
&lt;br /&gt;
And it would be very useful to have tools for using word processing  or spreadsheet software to create Moodle XML (there are already some tools out there for this; and some using the GIFT format for export).&lt;br /&gt;
&lt;br /&gt;
As this is very much still work in progress I would appreciate any advice. For example for the best place on docs.moodle.org to document this ongoing work.&lt;br /&gt;
&lt;br /&gt;
Kind regards&lt;br /&gt;
--[[User:Frank Ralf|Frank Ralf]] 04:22, 10 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I think it is more important that Moodle XML format can continue to evolve as we add new features to Moodle. An important design goal for Moodle XML format is lossless way to transfer questions from one Moodle to another.&lt;br /&gt;
&lt;br /&gt;
We will never break it gratuitously (fortunately it is easy to extend XML formats in backwards and forwards compatible ways - providing people using the format ignore stuff they don&#039;t recognise and use sensible defaults for anything that is missing), but the format will never be frozen either.&lt;br /&gt;
&lt;br /&gt;
However, with that understanding better documentation of the format would be greatly appreciated.--Tim Hunt, Quiz Module Maintainer.&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=User_talk:Howard_Miller&amp;diff=48002</id>
		<title>User talk:Howard Miller</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=User_talk:Howard_Miller&amp;diff=48002"/>
		<updated>2008-12-11T03:08:21Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* Moodle XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi Howard, sorry for taking ages to respond - haven&#039;t been here in a while. You&#039;re right, a2enmod is a bit debian-specific, but the directives to be placed in the configuration are not. I think apache 1 and 2 differ on how to enable modules and a2enmod applies to version 2, but I&#039;m more of a tinkerer than an expert there :) I&#039;ll edit it in again, but with that caveat. - [[User:Matt Gibson|Matt Gibson]] 08:37, 12 October 2006 (CDT)&lt;br /&gt;
&lt;br /&gt;
Hi Howard, thanks for your work improving Docs continuously! Hyper-cool! [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 13:02, 14 March 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Moodle XML ==&lt;br /&gt;
&lt;br /&gt;
Hello Howard,&lt;br /&gt;
&lt;br /&gt;
I learned from http://www.qedoc.org/en/index.php?title=Moodle_XML_format that you are the creator (maintainer, guru...) of the Moodle XML format. I have started a XML FAQ page (https://docs.moodle.org/en/XML_FAQ) and an Import and export FAQ page (https://docs.moodle.org/en/Import_and_export_FAQ) to collect all the scattered information regarding importing and exporting Moodle content namely in XML format.&lt;br /&gt;
&lt;br /&gt;
I think it is really important for Moodle to have a well defined, standardized Import/Export API so one can easily create content outside of Moodle XML is the obvious candidate for such a format.&lt;br /&gt;
&lt;br /&gt;
At the moment I am working on creating a XML Schema for Moodle XML incorporating all the information from the Moodle XML documentation. That would help users and third party tool developers to validate Moodle XML files before importing them into Moodle.&lt;br /&gt;
&lt;br /&gt;
I have further plans for creating some XSLT stylesheets for converting quiz content via Moodle XML into human readable formats as this is a frequent request in the forums.&lt;br /&gt;
&lt;br /&gt;
And it would be very useful to have tools for using word processing  or spreadsheet software to create Moodle XML (there are already some tools out there for this; and some using the GIFT format for export).&lt;br /&gt;
&lt;br /&gt;
As this is very much still work in progress I would appreciate any advice. For example for the best place on docs.moodle.org to document this ongoing work.&lt;br /&gt;
&lt;br /&gt;
Kind regards&lt;br /&gt;
--[[User:Frank Ralf|Frank Ralf]] 04:22, 10 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I think it is more important that Moodle XML format can continue to evolve as we add new features to Moodle. An important design goal for Moodle XML format is lossless way to transfer questions from one Moodle to another.&lt;br /&gt;
&lt;br /&gt;
We will never break it gratuitously (fortunately it is easy to extend XML formats in backwards and forwards compatible ways - ignore stuff you don&#039;t recognise and default anything that is missing), but the format will never be frozen either.--Tim Hunt, Quiz Module Maintainer.&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Gradebook_improvements&amp;diff=47886</id>
		<title>Development:Gradebook improvements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Gradebook_improvements&amp;diff=47886"/>
		<updated>2008-12-09T04:04:20Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
Same aspects of gradebook were not fully solved in 1.9.x, this page tries to summarize potential improvements&lt;br /&gt;
&lt;br /&gt;
==Aggregation of hidden grades==&lt;br /&gt;
Overlook problem partially solve after the database freeze - workaround was to recalculate the grades on the fly so that users that can the hidden grades are ignored. This approach is expensive and can not be used in conditional activities, grade exports, etc.&lt;br /&gt;
&lt;br /&gt;
Solution is to add new flag into grade categories - &#039;&#039;aggregate hidden grades&#039;&#039;. Having two values for each grade would be too complex, selective agrragation should solve most of the problems and should be reasonably backwards compatible.&lt;br /&gt;
&lt;br /&gt;
==Final grading in activities==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Effectiveness of grading interface==&lt;br /&gt;
&lt;br /&gt;
==Tracking of submission dates==&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Tim&#039;s_Gradebook_thoughts|Tim&#039;s Gradebook thoughts]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Tim%27s_Gradebook_thoughts&amp;diff=47885</id>
		<title>Development:Tim&#039;s Gradebook thoughts</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Tim%27s_Gradebook_thoughts&amp;diff=47885"/>
		<updated>2008-12-09T04:04:11Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
My thoughts on the gradebook stuff, having just read [http://moodle.org/mod/cvsadmin/view.php?conversationid=1187#c52318 Petr and Eloy&#039;s long jabber discussion] (only developers will be able to access that).&lt;br /&gt;
&lt;br /&gt;
The key thing is something Eloy said (sorry can&#039;t find the exact quote now):&lt;br /&gt;
&lt;br /&gt;
:We need to define what we mean by a grade in Moodle, with a simple model for what can change them, and how.&lt;br /&gt;
&lt;br /&gt;
I think that once we are agreed what we are trying to do, a consensus for how best to structure the code will be easy. But we first need a description of how grading in Moodle work, and we need to try to write it in teacher&#039;s langauge. If you like, we should write the one-page help file &amp;quot;Introduction to Grades in Moodle&amp;quot;. (There does not seem to be anything like that now!)&lt;br /&gt;
&lt;br /&gt;
==Things I think everyone agrees on==&lt;br /&gt;
&lt;br /&gt;
# Grades should be stored centrally in the gradebook.&lt;br /&gt;
# Every grade-item has a minimum and a maximum, and the grade for each student will be between those two limits.&lt;br /&gt;
# Activities, etc. should only manipulate grades through a defined API.&lt;br /&gt;
# Some activities have an automatically calculated grade.&lt;br /&gt;
# Teachers need to be able to manually override any grade, with an optional comment, or grade any grade item that is not automatically generated.&lt;br /&gt;
# (Similarly there are calculated/imported columns in the gradebook, which teachers may want to manually override for some students.)&lt;br /&gt;
# The key problem is, what happens when the automatically computed grade value changes after a teacher has manually overridden the grade?&lt;br /&gt;
&lt;br /&gt;
==More thougths==&lt;br /&gt;
&lt;br /&gt;
A. Problem 7. is really the one we are all arguing about. If only we can solve that, I think the rest is easy. Actually, there is a related issue, what happes if, in some peer-review module, Student one grades Student two, then the teacher overrides that grade in the gradebook. Then Student one tried to change his grading.&lt;br /&gt;
&lt;br /&gt;
B. Petr has this language &amp;quot;modules &#039;propose&#039; grades into gradebook&amp;quot;, and &#039;Final grading&#039; when a teacher edits a grade in the gradebook. I don&#039;t think I understand this yet - there may be a good technical solution here. However, I am sure that this lanuage would be totally incomprehensible to most teachers, and they are the people who really need to understand how this works. I would like to read how Petr would describe his proposal to end-users.&lt;br /&gt;
&lt;br /&gt;
C. I think it should not matter whether the grading UI or information is shown in the gradebook, or individual activities. Grading is an absolutely fundamental part of a VLE. It is one of the strands that ties a whole course and its activities together. Therefore, I think it is inevitable that there will be grade-related UI both in the modules and it the gradebook. However, for this to be managable, it is even more important that there is a single underlying model of what a grade is in Moodle, and that all the information ends up centrally stored in the gradebook.&lt;br /&gt;
&lt;br /&gt;
That is, we should know what we mean by actions like&lt;br /&gt;
* activity module M automatically calculates that student S has earned grade G for this activity; or&lt;br /&gt;
* User T has given student S grade G with comment C on grade item M;&lt;br /&gt;
and what effect they will have on the contents of the gradebook in all cases. If we can do that, then it does not matter where a particular bit of UI that a user can use to trigger one of these actions happens to be.&lt;br /&gt;
&lt;br /&gt;
D. If you like, this is an argument for a Model-View-Controller architecture.&lt;br /&gt;
* There should be a central model of what a grade is. That is the information that is actually stored in the gradebook.&lt;br /&gt;
* There should be a fixed API for manupulating grades. That is, the controller should make a limited set of actions available to the rest of Moodle.&lt;br /&gt;
* We should have the ability to have multiple views of the central grading data, and multiple interfaces for updating it. We already have lots of plug-in views in the gradebook itself (both for viewing and updating). But to give teachers and students the interface they expect, we need UI for seeing and updating grades in the activities too.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Gradebook_improvements|Petr&#039;s notes on this topic]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Tim%27s_Gradebook_thoughts&amp;diff=47884</id>
		<title>Development:Tim&#039;s Gradebook thoughts</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Tim%27s_Gradebook_thoughts&amp;diff=47884"/>
		<updated>2008-12-09T04:01:13Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: New page: My thoughts on the gradebook stuff, having just read [http://moodle.org/mod/cvsadmin/view.php?conversationid=1187#c52318 Petr and Eloy&amp;#039;s long jabber discussion] (only developers will be ab...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My thoughts on the gradebook stuff, having just read [http://moodle.org/mod/cvsadmin/view.php?conversationid=1187#c52318 Petr and Eloy&#039;s long jabber discussion] (only developers will be able to access that).&lt;br /&gt;
&lt;br /&gt;
The key thing is something Eloy said (sorry can&#039;t find the exact quote now):&lt;br /&gt;
&lt;br /&gt;
:We need to define what we mean by a grade in Moodle, with a simple model for what can change them, and how.&lt;br /&gt;
&lt;br /&gt;
I think that once we are agreed what we are trying to do, a consensus for how best to structure the code will be easy. But we first need a description of how grading in Moodle work, and we need to try to write it in teacher&#039;s langauge. If you like, we should write the one-page help file &amp;quot;Introduction to Grades in Moodle&amp;quot;. (There does not seem to be anything like that now!)&lt;br /&gt;
&lt;br /&gt;
==Things I think everyone agrees on==&lt;br /&gt;
&lt;br /&gt;
# Grades should be stored centrally in the gradebook.&lt;br /&gt;
# Every grade-item has a minimum and a maximum, and the grade for each student will be between those two limits.&lt;br /&gt;
# Activities, etc. should only manipulate grades through a defined API.&lt;br /&gt;
# Some activities have an automatically calculated grade.&lt;br /&gt;
# Teachers need to be able to manually override any grade, with an optional comment, or grade any grade item that is not automatically generated.&lt;br /&gt;
# (Similarly there are calculated/imported columns in the gradebook, which teachers may want to manually override for some students.)&lt;br /&gt;
# The key problem is, what happens when the automatically computed grade value changes after a teacher has manually overridden the grade?&lt;br /&gt;
&lt;br /&gt;
==More thougths==&lt;br /&gt;
&lt;br /&gt;
A. Problem 7. is really the one we are all arguing about. If only we can solve that, I think the rest is easy. Actually, there is a related issue, what happes if, in some peer-review module, Student one grades Student two, then the teacher overrides that grade in the gradebook. Then Student one tried to change his grading.&lt;br /&gt;
&lt;br /&gt;
B. Petr has this language &amp;quot;modules &#039;propose&#039; grades into gradebook&amp;quot;, and &#039;Final grading&#039; when a teacher edits a grade in the gradebook. I don&#039;t think I understand this yet - there may be a good technical solution here. However, I am sure that this lanuage would be totally incomprehensible to most teachers, and they are the people who really need to understand how this works. I would like to read how Petr would describe his proposal to end-users.&lt;br /&gt;
&lt;br /&gt;
C. I think it should not matter whether the grading UI or information is shown in the gradebook, or individual activities. Grading is an absolutely fundamental part of a VLE. It is one of the strands that ties a whole course and its activities together. Therefore, I think it is inevitable that there will be grade-related UI both in the modules and it the gradebook. However, for this to be managable, it is even more important that there is a single underlying model of what a grade is in Moodle, and that all the information ends up centrally stored in the gradebook.&lt;br /&gt;
&lt;br /&gt;
That is, we should know what we mean by actions like&lt;br /&gt;
* activity module M automatically calculates that student S has earned grade G for this activity; or&lt;br /&gt;
* User T has given student S grade G with comment C on grade item M;&lt;br /&gt;
and what effect they will have on the contents of the gradebook in all cases. If we can do that, then it does not matter where a particular bit of UI that a user can use to trigger one of these actions happens to be.&lt;br /&gt;
&lt;br /&gt;
D. If you like, this is an argument for a Model-View-Controller architecture.&lt;br /&gt;
* There should be a central model of what a grade is. That is the information that is actually stored in the gradebook.&lt;br /&gt;
* There should be a fixed API for manupulating grades. That is, the controller should make a limited set of actions available to the rest of Moodle.&lt;br /&gt;
* We should have the ability to have multiple views of the central grading data, and multiple interfaces for updating it. We already have lots of plug-in views in the gradebook itself (both for viewing and updating). But to give teachers and students the interface they expect, we need UI for seeing and updating grades in the activities too.&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Developer_notes&amp;diff=47883</id>
		<title>Development:Developer notes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Developer_notes&amp;diff=47883"/>
		<updated>2008-12-09T03:58:09Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* Gradebook */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This area is for developers to work on various bits of code and documentation as necessary. Once material has matured it should be linked to from the main [[Development:Developer documentation|Developer documentation]] page.&lt;br /&gt;
&lt;br /&gt;
==Core code==&lt;br /&gt;
&lt;br /&gt;
*[[Other lang issues|Language issues]] &lt;br /&gt;
*[[Datalib Notes]]&lt;br /&gt;
*[[Application/session variables]]&lt;br /&gt;
*[[Filters schema]]&lt;br /&gt;
*[[Filterall support]]&lt;br /&gt;
*[[Groups documentation for module developers]]&lt;br /&gt;
*[[Development:Plan to improve ability to delegate administrator tasks to course category level|Plan to improve ability to delegate administrator tasks to course category level]]&lt;br /&gt;
*[[Development:Stealth mode and nested activities|Stealth mode and nested activities]]&lt;br /&gt;
*[[Development:Enrolment_plugins_2.0|How enrolments should work in Moodle 2.0]]&lt;br /&gt;
*[[Development:Redesigning the override roles page|Redesigning the override roles page]]&lt;br /&gt;
&lt;br /&gt;
===Gradebook===&lt;br /&gt;
&lt;br /&gt;
*[[Development:Gradebook_improvements|Gradebook improvements]] - ideas from Petr.&lt;br /&gt;
*[[Development:Tim&#039;s_Gradebook_thoughts|Tim&#039;s Gradebook thoughts]]&lt;br /&gt;
&lt;br /&gt;
==Modules and other recognised plugin types==&lt;br /&gt;
&lt;br /&gt;
===Lesson===&lt;br /&gt;
&lt;br /&gt;
*[[Adding_question_types_to_lesson|Adding question types to lesson module]]&lt;br /&gt;
*[[Development:New lesson navigation | New lesson navigation]]&lt;br /&gt;
*[[Development:Adding blocks to lesson | Adding blocks to lesson]]&lt;br /&gt;
&lt;br /&gt;
===Quiz &amp;amp; question types===&lt;br /&gt;
&lt;br /&gt;
*[[Calculated question development]]&lt;br /&gt;
*[[Numerical question units and intervals]]&lt;br /&gt;
*[[Development:Plans for adaptive mode|Plans for adaptive mode]]&lt;br /&gt;
*[[Development:Quiz UI redesign | Quiz UI redesign]]&lt;br /&gt;
*[[Development:Implementation of true negative marks in MC-type questions|Implementation of true negative marks in MC-type questions]]&lt;br /&gt;
*[[Development:Administration page for question types|Administration page for question types]]&lt;br /&gt;
*[[Development:Moodle 2.0 question bank improvements|Moodle 2.0 question bank improvements]] - including question tagging and improved searchability.&lt;br /&gt;
*[[Development:Shortanswer question development|Shortanswer question development]]&lt;br /&gt;
&lt;br /&gt;
===Other activity modules===&lt;br /&gt;
&lt;br /&gt;
*[[Forum development|Forum functional upgrade]]&lt;br /&gt;
*[[Wiki development|Wiki module development]]&lt;br /&gt;
*[[Development:Assignment development|Assignment refactoring and development]]&lt;br /&gt;
&lt;br /&gt;
===Gradebook Plugins===&lt;br /&gt;
&lt;br /&gt;
*[[Development:External Database Plugin]]&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
&lt;br /&gt;
*[[Blogs and forums|Blogs, forums and the nature of discussion]]&lt;br /&gt;
*[[Conditional activities]]&lt;br /&gt;
*[[Improved Payment Plugin]]&lt;br /&gt;
*[[Development:Moodle-specific customisations to the HTML editor]]&lt;br /&gt;
&lt;br /&gt;
==Other==&lt;br /&gt;
&lt;br /&gt;
*[[MoodleDocs development]]&lt;br /&gt;
*[[Usability]]&lt;br /&gt;
*[[Document Management API]]&lt;br /&gt;
*[[wikindx|Possible integration of WIKINDX with Moodle]]&lt;br /&gt;
*[[Development:Snapshot - flat HTML export of complete course]]&lt;br /&gt;
*[[Development:Offline Moodle | Development:Offline Moodle - A Moodle that runs on a mobile device with the internet]]&lt;br /&gt;
*[[Development:A standard set of fixtures for unit tests?|A standard set of fixtures for unit tests?]]&lt;br /&gt;
&lt;br /&gt;
==Archive: past proposals==&lt;br /&gt;
&lt;br /&gt;
===Things that got implemented===&lt;br /&gt;
&lt;br /&gt;
====Core code====&lt;br /&gt;
&lt;br /&gt;
*[[Development:Ajax user selector|Ajax user selector]]&lt;br /&gt;
*[[Roles]] - in Moodle 1.7&lt;br /&gt;
*[[Moodle forms library]] - in Moodle 1.8&lt;br /&gt;
**[[Martin form notes]]&lt;br /&gt;
&lt;br /&gt;
====Quiz &amp;amp; question types====&lt;br /&gt;
&lt;br /&gt;
*[[Development:Plan_to_Improve_Flexibility_of_Question_Category_Sharing_and_Permissions|Plans for enhancing the question bank]] - in Moodle 1.9&lt;br /&gt;
*[[Development:Email notification when a quiz is submitted|Email notification when a quiz is submitted]] - in Moodle 1.9&lt;br /&gt;
*[[Development:Plans for enhancing import/export in questiontype plugins]] - in Moodle 1.9&lt;br /&gt;
*[[Development:quiz_navigation | Quiz navigation]]&lt;br /&gt;
*[[Development:Open_protocol_for_accessing_question_engines|Open protocol for accessing question engines]]&lt;br /&gt;
*[[Development:Quiz report enhancements|Quiz report enhancements]]&lt;br /&gt;
*[[Development:Flagging questions during a quiz attempt|Flagging questions during a quiz attempt]]&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[[Quiz and quesions community testing day]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Developer_notes&amp;diff=47882</id>
		<title>Development:Developer notes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Developer_notes&amp;diff=47882"/>
		<updated>2008-12-09T03:57:48Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This area is for developers to work on various bits of code and documentation as necessary. Once material has matured it should be linked to from the main [[Development:Developer documentation|Developer documentation]] page.&lt;br /&gt;
&lt;br /&gt;
==Core code==&lt;br /&gt;
&lt;br /&gt;
*[[Other lang issues|Language issues]] &lt;br /&gt;
*[[Datalib Notes]]&lt;br /&gt;
*[[Application/session variables]]&lt;br /&gt;
*[[Filters schema]]&lt;br /&gt;
*[[Filterall support]]&lt;br /&gt;
*[[Groups documentation for module developers]]&lt;br /&gt;
*[[Development:Plan to improve ability to delegate administrator tasks to course category level|Plan to improve ability to delegate administrator tasks to course category level]]&lt;br /&gt;
*[[Development:Stealth mode and nested activities|Stealth mode and nested activities]]&lt;br /&gt;
*[[Development:Enrolment_plugins_2.0|How enrolments should work in Moodle 2.0]]&lt;br /&gt;
*[[Development:Redesigning the override roles page|Redesigning the override roles page]]&lt;br /&gt;
&lt;br /&gt;
===Gradebook===&lt;br /&gt;
&lt;br /&gt;
*[[Development:Gradebook_improvements|Gradebook improvements]] - ideas from Petr.&lt;br /&gt;
*[[Development:Tim&#039;s_Gradebook_thoughts|Tim&#039;s_Gradebook_thoughts]]&lt;br /&gt;
&lt;br /&gt;
==Modules and other recognised plugin types==&lt;br /&gt;
&lt;br /&gt;
===Lesson===&lt;br /&gt;
&lt;br /&gt;
*[[Adding_question_types_to_lesson|Adding question types to lesson module]]&lt;br /&gt;
*[[Development:New lesson navigation | New lesson navigation]]&lt;br /&gt;
*[[Development:Adding blocks to lesson | Adding blocks to lesson]]&lt;br /&gt;
&lt;br /&gt;
===Quiz &amp;amp; question types===&lt;br /&gt;
&lt;br /&gt;
*[[Calculated question development]]&lt;br /&gt;
*[[Numerical question units and intervals]]&lt;br /&gt;
*[[Development:Plans for adaptive mode|Plans for adaptive mode]]&lt;br /&gt;
*[[Development:Quiz UI redesign | Quiz UI redesign]]&lt;br /&gt;
*[[Development:Implementation of true negative marks in MC-type questions|Implementation of true negative marks in MC-type questions]]&lt;br /&gt;
*[[Development:Administration page for question types|Administration page for question types]]&lt;br /&gt;
*[[Development:Moodle 2.0 question bank improvements|Moodle 2.0 question bank improvements]] - including question tagging and improved searchability.&lt;br /&gt;
*[[Development:Shortanswer question development|Shortanswer question development]]&lt;br /&gt;
&lt;br /&gt;
===Other activity modules===&lt;br /&gt;
&lt;br /&gt;
*[[Forum development|Forum functional upgrade]]&lt;br /&gt;
*[[Wiki development|Wiki module development]]&lt;br /&gt;
*[[Development:Assignment development|Assignment refactoring and development]]&lt;br /&gt;
&lt;br /&gt;
===Gradebook Plugins===&lt;br /&gt;
&lt;br /&gt;
*[[Development:External Database Plugin]]&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
&lt;br /&gt;
*[[Blogs and forums|Blogs, forums and the nature of discussion]]&lt;br /&gt;
*[[Conditional activities]]&lt;br /&gt;
*[[Improved Payment Plugin]]&lt;br /&gt;
*[[Development:Moodle-specific customisations to the HTML editor]]&lt;br /&gt;
&lt;br /&gt;
==Other==&lt;br /&gt;
&lt;br /&gt;
*[[MoodleDocs development]]&lt;br /&gt;
*[[Usability]]&lt;br /&gt;
*[[Document Management API]]&lt;br /&gt;
*[[wikindx|Possible integration of WIKINDX with Moodle]]&lt;br /&gt;
*[[Development:Snapshot - flat HTML export of complete course]]&lt;br /&gt;
*[[Development:Offline Moodle | Development:Offline Moodle - A Moodle that runs on a mobile device with the internet]]&lt;br /&gt;
*[[Development:A standard set of fixtures for unit tests?|A standard set of fixtures for unit tests?]]&lt;br /&gt;
&lt;br /&gt;
==Archive: past proposals==&lt;br /&gt;
&lt;br /&gt;
===Things that got implemented===&lt;br /&gt;
&lt;br /&gt;
====Core code====&lt;br /&gt;
&lt;br /&gt;
*[[Development:Ajax user selector|Ajax user selector]]&lt;br /&gt;
*[[Roles]] - in Moodle 1.7&lt;br /&gt;
*[[Moodle forms library]] - in Moodle 1.8&lt;br /&gt;
**[[Martin form notes]]&lt;br /&gt;
&lt;br /&gt;
====Quiz &amp;amp; question types====&lt;br /&gt;
&lt;br /&gt;
*[[Development:Plan_to_Improve_Flexibility_of_Question_Category_Sharing_and_Permissions|Plans for enhancing the question bank]] - in Moodle 1.9&lt;br /&gt;
*[[Development:Email notification when a quiz is submitted|Email notification when a quiz is submitted]] - in Moodle 1.9&lt;br /&gt;
*[[Development:Plans for enhancing import/export in questiontype plugins]] - in Moodle 1.9&lt;br /&gt;
*[[Development:quiz_navigation | Quiz navigation]]&lt;br /&gt;
*[[Development:Open_protocol_for_accessing_question_engines|Open protocol for accessing question engines]]&lt;br /&gt;
*[[Development:Quiz report enhancements|Quiz report enhancements]]&lt;br /&gt;
*[[Development:Flagging questions during a quiz attempt|Flagging questions during a quiz attempt]]&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[[Quiz and quesions community testing day]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=User:Tim_Hunt&amp;diff=47857</id>
		<title>User:Tim Hunt</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=User:Tim_Hunt&amp;diff=47857"/>
		<updated>2008-12-08T08:27:55Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* My to-do list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See http://moodle.org/user/view.php?id=93821&amp;amp;course=5&lt;br /&gt;
&lt;br /&gt;
==My to-do list==&lt;br /&gt;
&lt;br /&gt;
Naturally, my main todo list is [http://tracker.moodle.org/secure/IssueNavigator.jspa?reset=true&amp;amp;&amp;amp;pid=10011&amp;amp;resolution=-1&amp;amp;fixfor=-2&amp;amp;fixfor=-3&amp;amp;assigneeSelect=issue_current_user&amp;amp;sorter/field=issuekey&amp;amp;sorter/order=DESC in the tracker]. That is a detailed view. Here is a higher level view:&lt;br /&gt;
&lt;br /&gt;
1. Finish bugs relating to managing course categories.&lt;br /&gt;
&lt;br /&gt;
2. Document the changes I would like to make at the core of the quiz system - that is, changes to some key database tables, and how questions move through states as students attempt the quizzes. Then, presumably, &lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Christmas probably comes here &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. General quiz bug fixing. Since I have been busy with other work, assorted minor quiz bugs have been accumulating for a while, and I could usefully spend at least a week fixing some of them.&lt;br /&gt;
&lt;br /&gt;
4. Finish some minor tasks assigned to me relating to Olli&#039;s new quiz editing interface (MDL-17284).&lt;br /&gt;
&lt;br /&gt;
5. Finish a couple of minor bits of [[Development:Roles_administration_improvements_for_Moodle_2.0]].&lt;br /&gt;
&lt;br /&gt;
6. The planned improvements to the question bank for Moodle 2.0. [[Development:Moodle_2.0_question_bank_improvements]] Probably at least a couple of weeks work.&lt;br /&gt;
&lt;br /&gt;
7. Think about a load-testing framework for the quiz, and use it to see if we can nail the intermittent reliability problems that people sometimes report.&lt;br /&gt;
&lt;br /&gt;
8. Tabs in editing interfaces. That is, put course settings and roles settings in the same tab bar, as we do with activity settings. In activities that already have tab bars, combine the settings tabs with the other tabs. Use a tab bar on the course category editing screen, instead of an ad-hoc roles link.&lt;br /&gt;
&lt;br /&gt;
9. Implement the changes documented in 2 if there is time, and if I am allowed.&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:lib/formslib.php_Form_Definition&amp;diff=47842</id>
		<title>Development:lib/formslib.php Form Definition</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:lib/formslib.php_Form_Definition&amp;diff=47842"/>
		<updated>2008-12-08T05:46:43Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* disabledIf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Formslib}}&lt;br /&gt;
==definition()==&lt;br /&gt;
&lt;br /&gt;
The definition of the elements to be included in the form, their &#039;types&#039; (PARAM_*), helpbuttons included, etc is all included in a function you must define in your class &#039;definition();&#039;&lt;br /&gt;
&lt;br /&gt;
definition() is used to define the elements in the form and &#039;&#039;&#039;this definition will be used for validating data submitted as well as for printing the form.&#039;&#039;&#039; For select and checkbox type elements only data that could have been selected will be allowed. And only data that corresponds to a form element in the defintion will be accepted as submitted data.&lt;br /&gt;
&lt;br /&gt;
The definition() should include all elements that are going to be used on form, some elements may be removed or tweaked later in definition_after_data(). Please do not create conditional elements in definition(), the definition() should not directly depend on the submitted data.&lt;br /&gt;
&lt;br /&gt;
==Use Fieldsets to group Form Elements==&lt;br /&gt;
&lt;br /&gt;
You use code like this to open a fieldset with a legend.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//-------------------------------------------------------------------------------&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;header&#039;, &#039;nameforyourheaderelement&#039;, get_string(&#039;titleforlegened&#039;, &#039;modulename&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can&#039;t yet nest these visible fieldsets unfortunately. But in fact groups of elements are wrapped in invisible fieldsets.&lt;br /&gt;
&lt;br /&gt;
You close a fieldset with moodle_form&#039;s closeHeaderBefore method. You tell closeHeaderBefore the element before you wish to end the fieldset. A fieldset is automatically closed if you open a new one. You need to use this code only if you want to close a fieldset and the subsequent form elements are not to be enclosed by a visible fieldset (they are still enclosed with an invisibe one with no legend) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;closeHeaderBefore(&#039;buttonar&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==addElement==&lt;br /&gt;
&lt;br /&gt;
Use the addElement method to add an element to a form. The first few arguments are always the same. The first param is the type of the element to add. The second is the elementname to use which is normally the html name of the element in the form. The third is often the text for the label for the element.&lt;br /&gt;
&lt;br /&gt;
Some examples are below :&lt;br /&gt;
===button===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            $mform-&amp;gt;addElement(&#039;button&#039;, &#039;intro&#039;, get_string(&amp;quot;buttonlabel&amp;quot;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A button element. If you want a submit or cancel button see &#039;submit&#039; element. &lt;br /&gt;
&lt;br /&gt;
===checkbox===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;checkbox&#039;, &#039;ratingtime&#039;, get_string(&#039;ratingtime&#039;, &#039;forum&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a simple checkbox. The third param for this element is the label to display on the left side of the form. You can also supply a string as a fourth param to specify a label that will appear on the right of the element. Checkboxes and radio buttons can be grouped and have individual labels on their right.&lt;br /&gt;
&lt;br /&gt;
====advcheckbox====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;advcheckbox&#039;, &#039;ratingtime&#039;, get_string(&#039;ratingtime&#039;, &#039;forum&#039;), &#039;Label displayed after checkbox&#039;, array(&#039;group&#039; =&amp;gt; 1), array(0, 1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Similar to the checkbox above, but with a couple of important improvements:&lt;br /&gt;
&lt;br /&gt;
#The 5th parameter is a normal $attributes array, normally used to set HTML attributes for the &amp;lt;input&amp;gt; element. However, a special value of &#039;group&#039; can be given, which will add a class name to the element, and enable its grouping for a [[Development:lib/formslib.php_add_checkbox_controller|checkbox controller]]&lt;br /&gt;
#The 6th parameter is an array of values that will be associated with the checked/unchecked state of the checkbox. With a normal checkbox you cannot choose that value, and in fact an unchecked checkbox will not even be sent with the form data.&lt;br /&gt;
&lt;br /&gt;
===choosecoursefile===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;choosecoursefile&#039;, &#039;mediafile&#039;, get_string(&#039;mediafile&#039;, &#039;lesson&#039;), array(&#039;courseid&#039;=&amp;gt;$COURSE-&amp;gt;id));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Choose a file from the course files area. The fourth option is a list of options for the element. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
array(&#039;courseid&#039;=&amp;gt;null,//if it is null (default then use global $COURSE&lt;br /&gt;
 &#039;height&#039;=&amp;gt;500,// height of the popup window&lt;br /&gt;
 &#039;width&#039;=&amp;gt;750, // width of the popup window&lt;br /&gt;
&#039;options&#039;=&amp;gt;&#039;none&#039;);//options string for the pop up window &lt;br /&gt;
                   //eg. &#039;menubar=0,location=0,scrollbars,resizable&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===date_selector===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;date_selector&#039;, &#039;assesstimefinish&#039;, get_string(&#039;to&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a date selector. You can select a Day, Month and Year using a group of select boxes. The fourth param here is an array of options. The defaults for the options are :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;array(&#039;startyear&#039;=&amp;gt;1970, &#039;stopyear&#039;=&amp;gt;2020,&lt;br /&gt;
                    &#039;timezone&#039;=&amp;gt;99, &#039;applydst&#039;=&amp;gt;true, &#039;optional&#039;=&amp;gt;false);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can override these defaults by supplying an array as fourth param with one or more keys with a value to override the default. You can supply a fifth param of attributes here as well.&lt;br /&gt;
&lt;br /&gt;
===date_time_selector===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;date_time_selector&#039;, &#039;assesstimestart&#039;, get_string(&#039;from&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a group of select boxes to select a date (Day Month and Year) and time (Hour and Minute). When submitted, submitted data is processed and a timestamp is passed to $form-&amp;gt;get_data(); the fourth param here is an array of options. The defaults for the options are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;array(&#039;startyear&#039;=&amp;gt;1970, &#039;stopyear&#039;=&amp;gt;2020,&lt;br /&gt;
                    &#039;timezone&#039;=&amp;gt;99, &#039;applydst&#039;=&amp;gt;true, &#039;step&#039;=&amp;gt;5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can override these defaults by supplying an array as fourth param with one or more keys with a value to override the default. You can supply a fifth param of attributes here as well.&lt;br /&gt;
&lt;br /&gt;
===file===&lt;br /&gt;
&lt;br /&gt;
File upload input box with browse button. In the form definition type&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            $mform-&amp;gt;addElement(&#039;file&#039;, &#039;attachment&#039;, get_string(&#039;attachment&#039;, &#039;forum&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after form submission and validation use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            if ($data = $mform-&amp;gt;get_data()) {&lt;br /&gt;
              ...&lt;br /&gt;
              $mform-&amp;gt;save_files($destination_directory);&lt;br /&gt;
              ...&lt;br /&gt;
            }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need advanced settings such as required file, different max upload size or name of uploaded file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            $this-&amp;gt;set_upload_manager(new upload_manager(&#039;attachment&#039;, true, false, $COURSE, false, 0, true, true, false));&lt;br /&gt;
            $mform-&amp;gt;addElement(&#039;file&#039;, &#039;attachment&#039;, get_string(&#039;attachment&#039;, &#039;forum&#039;));&lt;br /&gt;
            $mform-&amp;gt;addRule(&#039;attachment&#039;, null, &#039;required&#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            if ($data = $mform-&amp;gt;get_data()) {&lt;br /&gt;
              ...&lt;br /&gt;
              $mform-&amp;gt;save_files($destination_directory);&lt;br /&gt;
              $newfilename = $mform-&amp;gt;get_new_filename();&lt;br /&gt;
              ...&lt;br /&gt;
            }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When porting old code it is also possible to use the upload manager directly for processing of uploaded files.&lt;br /&gt;
&lt;br /&gt;
Please note that if using set_upload_manager() it must be before addElement(&#039;file&#039;,..).&lt;br /&gt;
&lt;br /&gt;
{{Moodle 2.0}}&lt;br /&gt;
File uploading was rewritten in 2.0. Please see inline docs for now. This page will be updated when the new API stabilises.&lt;br /&gt;
&lt;br /&gt;
===filepicker===&lt;br /&gt;
{{Moodle 2.0}}&lt;br /&gt;
General replacement of &#039;&#039;file&#039;&#039; element.&lt;br /&gt;
&lt;br /&gt;
===hidden===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         $mform-&amp;gt;addElement(&#039;hidden&#039;, &#039;reply&#039;, &#039;yes&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A hidden element. Set the element name (in this case &#039;&#039;&#039;reply&#039;&#039;&#039;) to the stated value (in this case &#039;&#039;&#039;yes&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
===htmleditor &amp;amp; format===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;htmleditor&#039;, &#039;text&#039;, get_string(&#039;choicetext&#039;, &#039;choice&#039;));&lt;br /&gt;
        $mform-&amp;gt;setType(&#039;text&#039;, PARAM_RAW);&lt;br /&gt;
	$mform-&amp;gt;addRule(&#039;text&#039;, null, &#039;required&#039;, null, &#039;client&#039;);&lt;br /&gt;
&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;format&#039;, &#039;format&#039;, get_string(&#039;format&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can supply a fourth param to htmleditor of an array of options :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
array(&#039;canUseHtmlEditor&#039;=&amp;gt;&#039;detect&#039;,&#039;rows&#039;=&amp;gt;10, &#039;cols&#039;=&amp;gt;65, &lt;br /&gt;
&#039;width&#039;=&amp;gt;0,&#039;height&#039;=&amp;gt;0, &#039;course&#039;=&amp;gt;0);&lt;br /&gt;
//options same as print_textarea params&lt;br /&gt;
//use rows and cols options to control htmleditor size.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modgrade===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;modgrade&#039;, &#039;scale&#039;, get_string(&#039;grade&#039;), false);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a custom element for selecting a grade for any activity module. The fourth argument is whether to include an option for no grade which has a value 0. This select box does include scales. The default is true, include no grade option.&lt;br /&gt;
&lt;br /&gt;
A helpbutton is automatically added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===password===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         $mform-&amp;gt;addElement(&#039;password&#039;, &#039;password&#039;, get_string(&#039;label&#039;), $attributes);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A password element. Fourth param is an array or string of attributes.&lt;br /&gt;
&lt;br /&gt;
===passwordunmask===&lt;br /&gt;
{{Moodle 1.9}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         $mform-&amp;gt;addElement(&#039;passwordunmask&#039;, &#039;password&#039;, get_string(&#039;label&#039;), $attributes);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A password element with option to show the password in plaintext. Fourth param is an array or string of attributes.&lt;br /&gt;
&lt;br /&gt;
===radio===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $radioarray=array();&lt;br /&gt;
        $radioarray[] = &amp;amp;MoodleQuickForm::createElement(&#039;radio&#039;, &#039;yesno&#039;, &#039;&#039;, get_string(&#039;yes&#039;), 1, $attributes);&lt;br /&gt;
        $radioarray[] = &amp;amp;MoodleQuickForm::createElement(&#039;radio&#039;, &#039;yesno&#039;, &#039;&#039;, get_string(&#039;no&#039;), 0, $attributes);&lt;br /&gt;
        $mform-&amp;gt;addGroup($radioarray, &#039;radioar&#039;, &#039;&#039;, array(&#039; &#039;), false);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second param names the radio button and should be the same for each button in the group in order to toggle correctly. Third param would be the label for the form element but is generally ignored as this element will always be in a group which has it&#039;s own label. Fourth param is a string, a label to be displayed on the right of the element. The fifth is the value for this radio button. $attributes can be a string or an array of attributes.&lt;br /&gt;
&lt;br /&gt;
It is possible to add help to individual radio buttons but this requires a custom template to be defined for the group elements. See MDL-15571.&lt;br /&gt;
&lt;br /&gt;
====setDefault====&lt;br /&gt;
&lt;br /&gt;
To set the default for a radio button group as above use the following :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;setDefault(&#039;yesno&#039;, 0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would make the default &#039;no&#039;.&lt;br /&gt;
&lt;br /&gt;
===select===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;select&#039;, &#039;type&#039;, get_string(&#039;forumtype&#039;, &#039;forum&#039;), $FORUM_TYPES, $attributes);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fourth param for this element is an array of options for the select box. The keys are the values for the option and the value of the array is the text for the option. The fifth param $attributes is optional, see text element for description of attributes param.&lt;br /&gt;
&lt;br /&gt;
====multi-select====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $select = &amp;amp;$mform-&amp;gt;addElement(&#039;select&#039;, &#039;colors&#039;, get_string(&#039;colors&#039;), array(&#039;red&#039;, &#039;blue&#039;, &#039;green&#039;), $attributes);&lt;br /&gt;
        $select-&amp;gt;setMultiple(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===selectyesno===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;selectyesno&#039;, &#039;maxbytes&#039;, get_string(&#039;maxattachmentsize&#039;, &#039;forum&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want a yes / no select box this one automatically translates itself and has value 1 for yes and 0 for no.&lt;br /&gt;
&lt;br /&gt;
===static===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         $mform-&amp;gt;addElement(&#039;static&#039;, &#039;description&#039;, get_string(&#039;description&#039;, &#039;exercise&#039;),&lt;br /&gt;
                  get_string(&#039;descriptionofexercise&#039;, &#039;exercise&#039;, $COURSE-&amp;gt;students));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a static element. It should be used with care it is used to display a static piece of text with a label. The third param is the label and the fourth is the static text itself.&lt;br /&gt;
&lt;br /&gt;
===submit, reset and cancel===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        //normally you use add_action_buttons instead of this code&lt;br /&gt;
        $buttonarray=array();&lt;br /&gt;
        $buttonarray[] = &amp;amp;$mform-&amp;gt;createElement(&#039;submit&#039;, &#039;submitbutton&#039;, get_string(&#039;savechanges&#039;));&lt;br /&gt;
        $buttonarray[] = &amp;amp;$mform-&amp;gt;createElement(&#039;reset&#039;, &#039;resetbutton&#039;, get_string(&#039;revert&#039;));&lt;br /&gt;
        $buttonarray[] = &amp;amp;$mform-&amp;gt;createElement(&#039;cancel&#039;);&lt;br /&gt;
        $mform-&amp;gt;addGroup($buttonarray, &#039;buttonar&#039;, &#039;&#039;, array(&#039; &#039;), false);&lt;br /&gt;
        $mform-&amp;gt;closeHeaderBefore(&#039;buttonar&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;Submit&#039; type element is a submit type form element which will submit the form. A &#039;Reset&#039; will not submit the form but will reset any changes the user has made to form contents. A &#039;Cancel&#039; element cancels form submission. You need to have a branch in your code before you check for get_data() to check if submission has been cancelled with is_cancelled(); See the example on the usage page.&lt;br /&gt;
&lt;br /&gt;
You should name your submit and reset buttons &#039;submitbutton&#039; and &#039;resetbutton&#039; or something similar (not &#039;submit&#039; and &#039;reset&#039;). This avoids problems in JavaScript of collisions between form element names and names of JavaScript methods of the form object.&lt;br /&gt;
&lt;br /&gt;
====add_action_buttons($cancel = true, $submitlabel=null);====&lt;br /&gt;
&lt;br /&gt;
You will normally use this helper function which is a method of moodleform to add all the &#039;action&#039; buttons to the end of your form. A boolean parameter allow you to specify whether to include a cancel button and specify the label for your submit button (pass the result of get_string). Default for the submit button label is get_string(&#039;savechanges&#039;).&lt;br /&gt;
&lt;br /&gt;
===text===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;text&#039;, &#039;name&#039;, get_string(&#039;forumname&#039;, &#039;forum&#039;), $attributes);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For a simple text element. Your fourth parameter here can be a string or array of attributes for the text element. The following are equivalent :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $attributes=&#039;size=&amp;quot;20&amp;quot;&#039;;&lt;br /&gt;
        $attributes=array(&#039;size&#039;=&amp;gt;&#039;20&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Generally you are encouraged to use CSS instead of using attributes for styling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A format element can be used as a format select box. It will be non-selectable if you&#039;re using an html editor.&lt;br /&gt;
&lt;br /&gt;
The third param for this element is $useHtmlEditor and it defaults to null in which case an html editor is used if the browser and user profile support it.&lt;br /&gt;
&lt;br /&gt;
===textarea===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            $mform-&amp;gt;addElement(&#039;textarea&#039;, &#039;introduction&#039;, get_string(&amp;quot;introtext&amp;quot;, &amp;quot;survey&amp;quot;), &#039;wrap=&amp;quot;virtual&amp;quot; rows=&amp;quot;20&amp;quot; cols=&amp;quot;50&amp;quot;&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A textarea element. If you want an htmleditor use htmleditor element. Fourth element here is a string or array of attributes.&lt;br /&gt;
&lt;br /&gt;
==addGroup==&lt;br /&gt;
&lt;br /&gt;
A &#039;group&#039; in formslib is just a group of elements that will have a label and will be included on one line. &lt;br /&gt;
&lt;br /&gt;
For example typical code to include a submit and cancel button on the same line : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $buttonarray=array();&lt;br /&gt;
        $buttonarray[] =&amp;amp; $mform-&amp;gt;createElement(&#039;submit&#039;, &#039;submitbutton&#039;, get_string(&#039;savechanges&#039;));&lt;br /&gt;
        $buttonarray[] =&amp;amp; $mform-&amp;gt;createElement(&#039;submit&#039;, &#039;cancel&#039;, get_string(&#039;cancel&#039;));&lt;br /&gt;
        $mform-&amp;gt;addGroup($buttonarray, &#039;buttonar&#039;, &#039;&#039;, array(&#039; &#039;), false);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You use the same arguments for createElement as you do for addElement. Any label for the element in the third argument is normally ignored (but not in the case of the submit buttons above where the third argument is not for a label but is the text for the button).&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example of putting a date_selector (which is itself a group of elements) and a checkbox on the same line, note that you can disable every element in the group using the group name &#039;availablefromgroup&#039; but it doesn&#039;t disable the controlling element the &#039;availablefromenabled&#039; checkbox:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $availablefromgroup=array();&lt;br /&gt;
	$availablefromgroup[] =&amp;amp; $mform-&amp;gt;createElement(&#039;date_selector&#039;, &#039;availablefrom&#039;, &#039;&#039;);&lt;br /&gt;
	$availablefromgroup[] =&amp;amp; $mform-&amp;gt;createElement(&#039;checkbox&#039;, &#039;availablefromenabled&#039;, &#039;&#039;, get_string(&#039;enable&#039;));&lt;br /&gt;
        $mform-&amp;gt;addGroup($availablefromgroup, &#039;availablefromgroup&#039;, get_string(&#039;availablefromdate&#039;, &#039;data&#039;), &#039;&amp;amp;nbsp;&#039;, false);&lt;br /&gt;
        $mform-&amp;gt;disabledIf(&#039;availablefromgroup&#039;, &#039;availablefromenabled&#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==setHelpButton==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            $mform-&amp;gt;setHelpButton(&#039;lessondefault&#039;, array(&#039;lessondefault&#039;, get_string(&#039;lessondefault&#039;, &#039;lesson&#039;), &#039;lesson&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
First param is an elementname and the second param is an array of params that are passed to helpbutton in weblib.php. Params are :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 * @param string $page  The keyword that defines a help page&lt;br /&gt;
 * @param string $title The title of links, rollover tips, alt tags etc&lt;br /&gt;
 *           &#039;Help with&#039; (or the language equivalent) will be prefixed and &#039;...&#039; will be stripped.&lt;br /&gt;
 * @param string $module Which module is the page defined in&lt;br /&gt;
 * @param mixed $image Use a help image for the link?  (true/false/&amp;quot;both&amp;quot;)&lt;br /&gt;
 * @param boolean $linktext If true, display the title next to the help icon.&lt;br /&gt;
 * @param string $text If defined then this text is used in the page, and&lt;br /&gt;
 *           the $page variable is ignored.&lt;br /&gt;
 * @param boolean $return If true then the output is returned as a string, if false it is printed to the current page.&lt;br /&gt;
 * @param string $imagetext The full text for the helpbutton icon. If empty use default help.gif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure you don&#039;t set boolean $return to false. &lt;br /&gt;
&lt;br /&gt;
You need to do use this method after addElement();&lt;br /&gt;
&lt;br /&gt;
==setDefault==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $mform-&amp;gt;addElement(&#039;select&#039;, &#039;grade&#039;, get_string(&#039;gradeforsubmission&#039;, &#039;exercise&#039;), $grades);&lt;br /&gt;
        $mform-&amp;gt;setHelpButton(&#039;grade&#039;, array(&#039;grade&#039;, get_string(&#039;gradeforsubmission&#039;, &#039;exercise&#039;), &#039;exercise&#039;));&lt;br /&gt;
        $mform-&amp;gt;setDefault(&#039;grade&#039;, 100);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the default of the form value with setDefault($elementname, $value); where elementname is the elementname whose default you want to set and $value is the default to set. We set the defaults for the form in definition(). This default is what is used if no data is loaded into the form with set_data(); eg. on display of the form for an &#039;add&#039; rather than &#039;update&#039; function.&lt;br /&gt;
&lt;br /&gt;
==disabledIf==&lt;br /&gt;
&lt;br /&gt;
For any element or groups of element in a form you can conditionally disable the group or individual element depending on conditions.&lt;br /&gt;
&lt;br /&gt;
You can use $mform-&amp;gt;disabledIf($elementName, $dependentOn, $condition = &#039;notchecked&#039;, $value=null)&lt;br /&gt;
&lt;br /&gt;
* elementname can be a group. If you specify a group all elements in the group will be disabled (if dependentOn is in elementname group that is ignored and not disabled). These are the element names you&#039;ve used as the first argument in addElement or addGroup.&lt;br /&gt;
* dependentOn is the actual name of the element as it will appear in html. This can be different to the name used in addGroup particularly but also addElement where you&#039;re adding a complex element like a date_selector. Check the html of your page. You typically make the depedentOn a checkbox or select box.&lt;br /&gt;
* $condition will be notchecked, checked, selected, eq or if it is anything else then we test for neq.&lt;br /&gt;
* If $condition is eq or neq then we check the value of the dependentOn field and check for equality (==) or nonequality (!=) in js&lt;br /&gt;
* If $condition is checked or notchecked then we check to see if a checkbox is checked or not.&lt;br /&gt;
* If $condition is selected then we check to see if a particular option is selected from a dropdown list.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
 // Disable my control unless a checkbox is checked.&lt;br /&gt;
 $mform-&amp;gt;disabledIf(&#039;mycontrol&#039;, &#039;somecheckbox&#039;);&lt;br /&gt;
 &lt;br /&gt;
 // Disable my control if a checkbox &#039;&#039;&#039;is&#039;&#039;&#039; checked.&lt;br /&gt;
 $mform-&amp;gt;disabledIf(&#039;mycontrol&#039;, &#039;somecheckbox&#039;, &#039;checked&#039;);&lt;br /&gt;
 &lt;br /&gt;
 // Disable my control unless a dropdown has value 42.&lt;br /&gt;
 $mform-&amp;gt;disabledIf(&#039;mycontrol&#039;, &#039;someselect&#039;, &#039;eq&#039;, 42);&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: I am not sure this section is complete. I just found and added one missing case, but there may be others--[[User:Tim Hunt|Tim Hunt]] 06:04, 15 October 2007 (CDT)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==setType==&lt;br /&gt;
&lt;br /&gt;
PARAM_* types are used to specify how a submitted variable should be cleaned. These should be used for get parameters such as id, course etc. which are used to load a page and also with setType(); method. Every form element should have a type specified except select, radio box and checkbox elements, these elements do a good job of cleaning themselves (only specified options are allowed as user input).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Most Commonly Used PARAM_* Types===&lt;br /&gt;
&lt;br /&gt;
These are the most commonly used PARAM_* types and their proper uses. More types can be seen in moodlelib.php starting around line 100.&lt;br /&gt;
&lt;br /&gt;
* PARAM_CLEAN is deprecated and you should try to use a more specific type.&lt;br /&gt;
* PARAM_TEXT should be used for cleaning data that is expected to be plain text. It will strip all html tags. But will still let tags for multilang support through.&lt;br /&gt;
* PARAM_NOTAGS should be used for cleaning data that is expected to be plain text. It will strip *all* html type tags. It will still *not* let tags for multilang support through. This should be used for instance for email addresses where no multilang support is appropriate.&lt;br /&gt;
* PARAM_RAW means no cleaning whatsoever, it is used mostly for data from the html editor. Data from the editor is later cleaned before display using format_text() function. PARAM_RAW can also be used for data that is validated by some other way or printed by p() or s().&lt;br /&gt;
* PARAM_INT should be used for integers.&lt;br /&gt;
* PARAM_ACTION is an alias of PARAM_ALPHA and is used for hidden fields specifying form actions.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
* [http://web.archive.org/web/20080214041550/http://www.midnighthax.com/quickform.php PEAR HTML QuickForm Getting Started Guide by Keith Edmunds of Midnighthax.com (via archive.org as original now dead)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Formslib]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=User:Tim_Hunt&amp;diff=47839</id>
		<title>User:Tim Hunt</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=User:Tim_Hunt&amp;diff=47839"/>
		<updated>2008-12-08T01:42:42Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See http://moodle.org/user/view.php?id=93821&amp;amp;course=5&lt;br /&gt;
&lt;br /&gt;
==My to-do list==&lt;br /&gt;
&lt;br /&gt;
Naturally, my main todo list is [http://tracker.moodle.org/secure/IssueNavigator.jspa?reset=true&amp;amp;&amp;amp;pid=10011&amp;amp;resolution=-1&amp;amp;fixfor=-2&amp;amp;fixfor=-3&amp;amp;assigneeSelect=issue_current_user&amp;amp;sorter/field=issuekey&amp;amp;sorter/order=DESC in the tracker]. That is a detailed view. Here is a higher level view:&lt;br /&gt;
&lt;br /&gt;
1. Finish bugs relating to managing course categories.&lt;br /&gt;
&lt;br /&gt;
2. Document the changes I would like to make at the core of the quiz system - that is, changes to some key database tables, and how questions move through states as students attempt the quizzes. Then, presumably, &lt;br /&gt;
&lt;br /&gt;
3. General quiz bug fixing. Since I have been busy with other work, assorted minor quiz bugs have been accumulating for a while, and I could usefully spend at least a week fixing some of them.&lt;br /&gt;
&lt;br /&gt;
4. Finish some minor tasks assigned to me relating to Olli&#039;s new quiz editing interface (MDL-17284).&lt;br /&gt;
&lt;br /&gt;
5. Finish a couple of minor bits of [[Development:Roles_administration_improvements_for_Moodle_2.0]].&lt;br /&gt;
&lt;br /&gt;
6. The planned improvements to the question bank for Moodle 2.0. [[Development:Moodle_2.0_question_bank_improvements]] Probably at least a couple of weeks work.&lt;br /&gt;
&lt;br /&gt;
7. Think about a load-testing framework for the quiz, and use it to see if we can nail the intermittent reliability problems that people sometimes report.&lt;br /&gt;
&lt;br /&gt;
8. Tabs in editing interfaces. That is, put course settings and roles settings in the same tab bar, as we do with activity settings. In activities that already have tab bars, combine the settings tabs with the other tabs. Use a tab bar on the course category editing screen, instead of an ad-hoc roles link.&lt;br /&gt;
&lt;br /&gt;
9. Implement the changes documented in 2 if there is time, and if I am allowed.&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Site_backup&amp;diff=47817</id>
		<title>Site backup</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Site_backup&amp;diff=47817"/>
		<updated>2008-12-07T06:48:17Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Site backups are recommended in order to have all data saved with the best confidence and the shortest recovery time.&lt;br /&gt;
&lt;br /&gt;
==What needs to be backed up==&lt;br /&gt;
&lt;br /&gt;
A Moodle system comprises three parts:&lt;br /&gt;
# The data stored in the database,&lt;br /&gt;
# The uploaded, and other data files, stored on disc, and&lt;br /&gt;
# The files containing the Moodle code.&lt;br /&gt;
&lt;br /&gt;
You can confirm where all these things are for your Moodle by checking in your config.php file.&lt;br /&gt;
# There are several parameters that tell Moodle which database to connect to;&lt;br /&gt;
# $CFG-&amp;gt;dataroot controls where the data files are stored; and&lt;br /&gt;
# $CFG-&amp;gt;dirroot points to where the code is stored.&lt;br /&gt;
&lt;br /&gt;
==Creating a backup of your Moodle site==&lt;br /&gt;
&lt;br /&gt;
===The database===&lt;br /&gt;
&lt;br /&gt;
There are two main things you need to make a copy of - the database and the uploaded files. The Moodle scripts themselves are less important, since you can always download a fresh copy if you have to.&lt;br /&gt;
&lt;br /&gt;
There are many ways to do such backups. Here is an outline of a little script you can run on Unix to backup the database (it works well to have such a script run daily via a cron task):&lt;br /&gt;
&lt;br /&gt;
 cd /my/backup/directory&lt;br /&gt;
 mv moodle-database.sql.gz moodle-database-old.sql.gz&lt;br /&gt;
 mysqldump -h example.com -u myusername --password=mypassword -C -Q -e --create-options mydatabasename &amp;gt; moodle-database.sql&lt;br /&gt;
 gzip moodle-database.sql&lt;br /&gt;
&lt;br /&gt;
====Character Encoding====&lt;br /&gt;
&lt;br /&gt;
When dumping the entire Moodle database, administrators should be careful to watch for possible character encoding issues. In some instances, backups created with mysqldump or phpmyadmin may not properly encode all of the data resulting in spurious A characters. One solution is to use mySQL Administrator 1.1 or another tool that will force a UTF-8 dump of the data.&lt;br /&gt;
&lt;br /&gt;
===The data filse===&lt;br /&gt;
&lt;br /&gt;
For the files, you can use rsync regularly to copy only the changed files to another host:&lt;br /&gt;
&lt;br /&gt;
 rsync -auvtz --delete -e ssh mysshusername@example.com:/my/server/directory /my/backup/directory/&lt;br /&gt;
&lt;br /&gt;
If you want to run the cronscript at the machine you are running moodle at you have to use following rsync syntax&lt;br /&gt;
&lt;br /&gt;
 rsync -auvtz --delete -e ssh /path/to/local/folder/ remoteuser@remoteserver:/path/to/remote/folder/&lt;br /&gt;
&lt;br /&gt;
If you do not want the root mailbox be spammed by statusmails of the rsync use&lt;br /&gt;
 &lt;br /&gt;
  rsync -autzq --delete -e ssh /path/to/local/folder/ remoteuser@remoteserver:/path/to/remote/folder/&lt;br /&gt;
&lt;br /&gt;
===The code files===&lt;br /&gt;
&lt;br /&gt;
If you have not customised the code, you can always download a new copy. However, it is still a good idea to keep your own local copy with the rest of your backup, and if you are doing customisation, it is essential. The steps are he same as for backing up the data files.&lt;br /&gt;
&lt;br /&gt;
==Restoring a site backup==&lt;br /&gt;
&lt;br /&gt;
If you have followed the above instructions and created a backup of a Moodle site, you may need to know how to restore the site backup you created.  Here is a set of basic steps that make up the restore process.&lt;br /&gt;
&lt;br /&gt;
1. Rename the original moodle directory to something different (so you still have it) and copy the backed up moodle directory or a newly downloaded moodle directory in its place.&lt;br /&gt;
&lt;br /&gt;
2. If you are running mysql, a backup of the database should be a .sql, .gz or .tar.gz file.  If it is .tar.gz or .gz you need to extract it until it is an sql file.&lt;br /&gt;
&lt;br /&gt;
 tar -xzvf moodlesqlfile.tar.gz&lt;br /&gt;
&lt;br /&gt;
3. If you are running mysql, import the sql file back into a newly created database on the mysql server.  Be careful here, some backups try to import right back into the same working database that moodle is connected to.  This causes database problems that damage a Moodle installation.  The best thing to do is make a new database, restore the backed up database into it, and change the Moodle config.php file to connect to this new database (this way you still have the original database).&lt;br /&gt;
&lt;br /&gt;
once you have created the new database:&lt;br /&gt;
 mysql -p new_database &amp;lt; moodlesqlfile.sql&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Backup FAQ]]&lt;br /&gt;
*[[Automated course backup]]&lt;br /&gt;
*The section &amp;quot;Backup important data&amp;quot; in [[Upgrading]]&lt;br /&gt;
*[http://www.moodletutorials.org/view_video.php?viewkey=e257e44aa9d5bade97ba Video showing how to backup a whole Moodle site (on Linux)]&lt;br /&gt;
*[http://youtube.com/watch?v=ufAmf_jm_p8 Video showing how to backup a whole Moodle site (on Windows)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backup]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Update_profile&amp;diff=47812</id>
		<title>Update profile</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Update_profile&amp;diff=47812"/>
		<updated>2008-12-06T13:52:32Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: Reverted edits by Poolequayster (Talk); changed back to last version by Aborrow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Location: &#039;&#039;Administration &amp;gt; Users &amp;gt; Accounts &amp;gt; Add a new user&#039;&#039; or &#039;&#039;Browse list of users&#039;&#039;, or by choosing the &#039;&#039;Edit profile&#039;&#039; tab from one&#039;s own profile.&lt;br /&gt;
&lt;br /&gt;
==Updating Your Profile ==&lt;br /&gt;
{{Moodle 1.8}}&lt;br /&gt;
The fields are divided into 3 sections - General, Picture &amp;amp; Optional which are all explained below.  Note that some settings are &#039;advanced&#039;, so you may need to click the &#039;Show Advanced&#039; button on the right to see all the settings. The advanced settings are indicated below.&lt;br /&gt;
&lt;br /&gt;
Remember to click &#039;Update profile&#039; when you have finished.&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
The first section contains fields that must be completed:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First name &amp;amp; Surname&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These are self-explanatory. These names will identify you everywhere in your Moodle courses.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email address&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The email address should be an address that you check regularly. It is used for acknowledgements and announcements from Moodle, including messages from Forums that you are subscribed to. It is also the address that is displayed to other users of Moodle, depending on your &#039;Email display&#039; setting (below).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email display&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This controls the visibility of your email address to others.  The three settings are self-explanatory but please note &#039;Hide my email address from everyone&#039; only hides it from students.  Teaching staff and other staff with editing access will always be able to see your email address.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email activated&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can either enable or disable emails being sent to an address. Note that if this is disabled, you will not receive any email whatsoever from the site. This is not recommend, as you may miss important course-related messages.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email format (advanced)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are two formats: &amp;quot;Pretty HTML format&amp;quot; (messages will be formatted) and &amp;quot;Plain text format&amp;quot; (plain text with no formatting).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email digest type (advanced)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This setting determines how you receive any posts from Forums to which you are subscribed, allowing you to receive messages individually or on a daily basis.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Forum auto-subscribe (advanced)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This setting lets you decide if you want email copies of posts that are added to forums. If you set this to subscribe, the system will automatically email you copies of new posts in forums that you post in, unless you manually override it when posting.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Forum tracking (advanced)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Enabling forum tracking means highlighting the posts you have not read yet, which should improve your forum navigation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When editing text (advanced)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can usually be left on &amp;quot;Use HTML editor (some browsers only)&amp;quot;. This allows for text formatting options, but requires newer browsers. If you find your browser is not letting you edit text, change this setting to &amp;quot;Use standard web forms&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AJAX and JavaScript (advanced)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This determines whether the Moodle interface will use advanced navigation features such as drag-and-drop, that require AJAX and JavaScript to function. These features can cause problems on some browsers so you might prefer to turn them off.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Screen Reader (advanced)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you use a screen reader, this setting should be set to &#039;Yes&#039;. (A screen reader is a form of &#039;assistive technology&#039; used by blind and partially-sighted users to interpret what is displayed on the screen).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;City/town &amp;amp; Country&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add your location.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Timezone&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field is used to convert time-related messages on the system (such as assignment deadlines) from the local timezone (the time in London) to the correct time in whichever zone you have selected.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Preferred language and theme (advanced)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can view Moodle in several different languages and colour themes, which you can select via these two options. Note: changing the preferred language only affects the Moodle interface, not the course content!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In this field you can enter some text about yourself, be it information about your studies, hobbies, qualifications or anything else.&lt;br /&gt;
&lt;br /&gt;
=== Picture ===&lt;br /&gt;
&lt;br /&gt;
This section is optional and allows you to choose your own profile picture.  Your current picture is shown, if you have already chosen one.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New picture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Browse button allows you to choose a new picture for your profile. Your picture is uploaded when you choose the &#039;Update Profile&#039; at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
Your picture will be resized by Moodle when you upload it - to 100 pixels by 100 pixels for the larger view (e.g. in your profile) and 35 pixels by 35 pixels for the smaller view (e.g. on the Forums). If the picture you upload is not square, Moodle will automatically chop the edges off to make it square.&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
&lt;br /&gt;
There are several optional fields (all advanced) allowing you to add further details to your profile such as contact details and your website.&lt;br /&gt;
&lt;br /&gt;
==Adding a new user==&lt;br /&gt;
&lt;br /&gt;
The add a new user page allows you to manually create a new user account. If you create a test account, you can use a made-up email address.&lt;br /&gt;
&lt;br /&gt;
The required field must be entered before the user will be accepted by Moodle. The required fields in a standard Moodle install are: Username, New password, Surname, Email address, City/town, Select a country.&lt;br /&gt;
&lt;br /&gt;
Validity checks on the required field are performed. For example, usernames can only contain alphabetical letters or numbers. As a result using the underscore character &#039;_&#039; is not permitted; however, using a period is permitted. So a username of joe_smith would not be allowed but joe.smith is permissible. The email address should be in the format of a valid email (for example, joe.smith@myisp.com). If password complexity requirements are enabled by the site administrator, they new password field is also checked to ensure it complies with those requirements. See [[admin/setting/sitepolicies#Password_policy|Password policy]] for more information.&lt;br /&gt;
&lt;br /&gt;
Other fields that are part of a user&#039;s profile can also be filled out when the user is created. Some of the profile fields can be revealed by pressing the &amp;quot;Show Advanced&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
The new user information is saved by pressing the &amp;quot;Update user&amp;quot; button near the bottom of the form.&lt;br /&gt;
&lt;br /&gt;
Note: You can always create new accounts manually, regardless of which [[Authentication|authentication method]] you are using.&lt;br /&gt;
&lt;br /&gt;
==Updating a user profile==&lt;br /&gt;
&lt;br /&gt;
Users with the capability [[Capabilities/moodle/user:update|moodle/user:update]] are able to update another user&#039;s profile i.e. in addition to being able to edit the profile, all settings (username, password, authentication method, force new password etc.) may be changed.&lt;br /&gt;
&lt;br /&gt;
==Account disabling==&lt;br /&gt;
&lt;br /&gt;
An account may be disabled by setting the authentication method to &amp;quot;[[No login]]&amp;quot;. The account email may not be used to create another account.&lt;br /&gt;
&lt;br /&gt;
[[Category:Administrator]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Modifier le profil]]&lt;br /&gt;
[[de:Nutzerprofil aktualisieren]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Administrator_role&amp;diff=47811</id>
		<title>Administrator role</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Administrator_role&amp;diff=47811"/>
		<updated>2008-12-06T13:52:18Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: Reverted edits by Poolequayster (Talk); changed back to last version by Ghillenb&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Administrator|Admins]] (short for Administrators) can do anything and go anywhere in the site.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assigning users the role of admin==&lt;br /&gt;
&lt;br /&gt;
To assign a user the role of admin in Moodle 1.7 onwards:&lt;br /&gt;
#Access &#039;&#039;Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Assign system roles&#039;&#039;.&lt;br /&gt;
#Choose the administrator role to assign.&lt;br /&gt;
#Select a user in the potential users list, and use the left-facing arrow button to add it to the existing users list.&lt;br /&gt;
&lt;br /&gt;
Note: Users should only be assigned the role of admin (i.e. a role with the capability [[Capabilities/moodle/site:doanything|moodle/site:doanything]] set to allow) in the system context.&lt;br /&gt;
&lt;br /&gt;
==Creating admins pre-1.7 ==&lt;br /&gt;
&lt;br /&gt;
To create an admin in versions of Moodle prior to 1.7:&lt;br /&gt;
#Login as the primary admin user.&lt;br /&gt;
#Click on the admin link at the bottom of the site administration block.&lt;br /&gt;
#Click on the &amp;quot;Assign admins&amp;quot; link.&lt;br /&gt;
#Select any of the users from the right column (&#039;potential admins&#039;) of the screen and then click the &amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
To remove admin rights, simply follow the instructions above but select the existing admin from the left hand side and click the &amp;quot;&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot; button instead.&lt;br /&gt;
&lt;br /&gt;
==Primary administrators==&lt;br /&gt;
&lt;br /&gt;
In versions of Moodle prior to 1.7, only the [[Primary administrator pre-1.7|primary admin]] could create admins or remove admin rights for other users. In Moodle 1.7 onwards there is no primary administrator. However, a duplicate administrator role may be created with slightly fewer capabilities allowed.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=36856 I lost my administrator&#039;s rights] forum discussion&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=43562 How to create an extra admin account]&lt;br /&gt;
&lt;br /&gt;
[[Category:Roles]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Choisir les administrateurs]]&lt;br /&gt;
[[ja:管理者の割り当て]]&lt;br /&gt;
[[de:Administrator-Rolle]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Obsolete_-_Moodle_forms_library&amp;diff=47810</id>
		<title>Development:Obsolete - Moodle forms library</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Obsolete_-_Moodle_forms_library&amp;diff=47810"/>
		<updated>2008-12-06T13:36:39Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* Documentation of the forms library that is used in Moodle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==OBSOLETE INFORMATION==&lt;br /&gt;
{{obsolete_design}}&lt;br /&gt;
&#039;&#039;&#039;This was a proposal for discussion that was not used.&lt;br /&gt;
&lt;br /&gt;
==[[Development:lib/formslib.php|Documentation of the forms library that is used in Moodle]]==&lt;br /&gt;
&lt;br /&gt;
The above link will take you to the documentation of the forms library that was implemented as a result of the discussions archived here.&lt;br /&gt;
&lt;br /&gt;
==And now, on with the history ...==&lt;br /&gt;
&lt;br /&gt;
The OU has developed quite a nice in-house library to simplify creating Moodle editing forms. We would like to contribute it back to the community, and then as part of the accessibility work we are comissioning, get all Moodle forms modified to use it. However, before we can contribute it back, we need to get consensus withing the community that it is right for Moodle, and we need to tidy up the code a bit.&lt;br /&gt;
&lt;br /&gt;
This document outlines how the library should work after cleaning up, so the community can see whether they like it, and OU developers know what is involved in the cleanup.&lt;br /&gt;
&lt;br /&gt;
==What the system will be capable of==&lt;br /&gt;
&lt;br /&gt;
The library allows developers to create editing forms by creating a high-level representation of the form as a data-structure in memory, configuring all necessary options, and setting initial values of fields, and then the library generates the actual HTML of the form to include in the page.&lt;br /&gt;
&lt;br /&gt;
We are not planning to change significantly the way that Moodle editing forms look and function. However, by putting all the HTML (and JavaScript, CSS, ...) generation in one place, we make it much easier to make systematic improvements to accessibility, usability, client-side validation, etc. in future. Indeed, the OU&#039;s code already generates HTML that is a bit more accessible that most Moodle forms.&lt;br /&gt;
&lt;br /&gt;
By allowing developers to think at a higher level, we make their life easier, in the same way that datalib saves them from worrying about the details of SQL most of the time.&lt;br /&gt;
&lt;br /&gt;
The general way the library will work is that it will assume sensible defaults for everything to reduce the amount that has to be typed. So for a lot of input fields, you will only have to specify&lt;br /&gt;
&lt;br /&gt;
# the field type (e.g. text, think &amp;lt;input type=&amp;quot;&amp;quot; ... /&amp;gt;, However the hope would be to move towards higher-level types, such as integer, path, url, as in require_param, etc.)&lt;br /&gt;
# the field name (think &amp;lt;input name=&amp;quot;&amp;quot; ... /&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Everything else that is needed will be derived from these using sensible defaults. We need label text? We&#039;ll look up the field name in the lang file (each form will specify which lang file to use). We need a help link? Well, use /lang/en_utf8/help$langfile/$name.html. We need a field size? Each type will have a sensible default.&lt;br /&gt;
&lt;br /&gt;
However, if you want to override any of these defaults, you can by setting that option explicitly. Because there will be lots of options, and normally you will only need to change a few, the library will use a named attribute style, so example code would look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$field = new text_field(&#039;fieldname&#039;);&lt;br /&gt;
$field-&amp;gt;set_set(&#039;size&#039;, 30);&lt;br /&gt;
$field-&amp;gt;set_set(&#039;label&#039;, &#039;lablestring&#039;);&lt;br /&gt;
&lt;br /&gt;
// or &lt;br /&gt;
&lt;br /&gt;
$field = new text_field(&#039;fieldname&#039;);&lt;br /&gt;
$field-&amp;gt;set_set(array(&#039;size&#039; =&amp;gt; 30, &#039;label&#039; =&amp;gt; &#039;lablestring&#039;));&lt;br /&gt;
&lt;br /&gt;
// or &lt;br /&gt;
&lt;br /&gt;
$field = new text_field(&#039;fieldname&#039;, array(&lt;br /&gt;
        &#039;size&#039; =&amp;gt; 30, &lt;br /&gt;
        &#039;label&#039; =&amp;gt; &#039;lablestring&#039;&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, &#039;lablestring&#039; would again get looked up in the lang file automatically.&lt;br /&gt;
&lt;br /&gt;
For this situation, where there are lots of options available, but most people only need to change a few, I think this style of API works better than PHP function calls with lots of optional parameters. The options available for each field type will be documented in the comment where that class is defined.&lt;br /&gt;
&lt;br /&gt;
The library is designed to make it easy to add new field types, or new options to existing field types. Indeed, that is how the library has evolved so far: a bit at a time as needed. &lt;br /&gt;
&lt;br /&gt;
New field types are just new PHP classes, and they are likely to be subclasses of a base class that only change a few things. They don&#039;t even have to be defined in the central form library. If you need an specialist field type only within one (e.g. contrib) module, you can create a new field-type subclass in that module code and use it in that modules forms without having to touch core code. And if we later want to move that field type into core, it is trivial to move the class definition.&lt;br /&gt;
&lt;br /&gt;
Since we will have to tidy up the code anyway, all the function/class/method/option names in the API are potentially changable.&lt;br /&gt;
&lt;br /&gt;
==PHP API==&lt;br /&gt;
&lt;br /&gt;
Each thing in the API will be a PHP class, these basically fall into three categories: the whole form, groupings of form fields, and individual field types. Note that the groupings are currently only used for functional reasons, like showing or hiding groups of elements. Logical groupings, that would correspond to &amp;lt;fieldset&amp;gt; tags for accessibility, are not included yet, but could be added.&lt;br /&gt;
&lt;br /&gt;
I am just going to list all the possible method calls. I will assume that it is clear what they do from their names (and I am running out of time).&lt;br /&gt;
&lt;br /&gt;
===The whole form===&lt;br /&gt;
&lt;br /&gt;
There is a class to represent a form, and most of the time you will be able to do everything you want to do by calling methods on this class, and you don&#039;t have to worry about the rest of the API.&lt;br /&gt;
&lt;br /&gt;
 $mf = new moodle_form($langfile);&lt;br /&gt;
&lt;br /&gt;
 $field = &amp;amp;$mf-&amp;gt;add($fieldtype, $fieldname, $fieldoptions, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$mf-&amp;gt;add_item($fieldobject, $insertbefore); // $insertbefore is optional. By default things are inserted at the end of the form.&lt;br /&gt;
 $field = &amp;amp;$mf-&amp;gt;remove($fieldname);&lt;br /&gt;
 $field = &amp;amp;$mf-&amp;gt;get($fieldname);&lt;br /&gt;
&lt;br /&gt;
These let you add or remove things from the form. The field you have just done stuff to is returned, but most of the time you will not bother to do anything with the return value. These method work with groups, etc. not just fields.&lt;br /&gt;
&lt;br /&gt;
 $mf-&amp;gt;set_action($url);&lt;br /&gt;
 $mf-&amp;gt;set_init_html_editor(); // There was a reason why the library can&#039;t guess this from the list of fields.&lt;br /&gt;
 $mf-&amp;gt;set_submit_caption($langstringid);&lt;br /&gt;
 $mf-&amp;gt;set_hidden($fieldname, $value);&lt;br /&gt;
 $mf-&amp;gt;set_value($fieldname, $value); // The initial value for this field. (or use the $form attribute on show()).  &lt;br /&gt;
 $mf-&amp;gt;set_error($fieldname, $message); // Error message to be displayed in red next to this field if you are doing server-side validation.&lt;br /&gt;
&lt;br /&gt;
 $mf-&amp;gt;show($action, $form);&lt;br /&gt;
&lt;br /&gt;
Show the form. $form is an object holding the default value of each field that has not already been set using set_value().&lt;br /&gt;
&lt;br /&gt;
 $mf-&amp;gt;add_xhtml($htmlphpcode, $insertbefore);&lt;br /&gt;
 $mf-&amp;gt;set_xhtml_param($name, $value);&lt;br /&gt;
&lt;br /&gt;
You can insert arbitrary bits of HTML or PHP code into the form using this. When outputting the form, the library does &#039;&#039;&#039;eval(&#039;?&amp;gt;&#039;.$htmlphpcode.&#039;&amp;lt;?php &#039;);&#039;&#039;&#039; in a place where $form is in scope, and the variables passed in via set_xhtml_param are available from an array as $xmlform[$name].&lt;br /&gt;
&lt;br /&gt;
 $new_mf = moodle_form::loadfile($xmlfilename);&lt;br /&gt;
 $new_mf = moodle_form::loadstring($xmlstring);&lt;br /&gt;
&lt;br /&gt;
Create a whole form using the XML syntax mentioned below.&lt;br /&gt;
&lt;br /&gt;
===Fields===&lt;br /&gt;
&lt;br /&gt;
The library also has classes representing the different field types, which you can use if you want.&lt;br /&gt;
&lt;br /&gt;
 $field = new xxxx_field($name, $options_array); // where xxxx is one of the field types below.&lt;br /&gt;
 $field-&amp;gt;set($optionname, $optionvalue);&lt;br /&gt;
 $field-&amp;gt;set($optionarray); // Array of $optionname =&amp;gt; $optionvalue pairs.&lt;br /&gt;
 $optionvalue = $field-&amp;gt;get($optionname);&lt;br /&gt;
&lt;br /&gt;
 $field-&amp;gt;set_value($value); // Sets the initial value of this field.&lt;br /&gt;
&lt;br /&gt;
 $field-&amp;gt;output($form); // Print this form element. &lt;br /&gt;
&lt;br /&gt;
Normally you won&#039;t call output() directly. You will call $mf-&amp;gt;output, which will call $field-&amp;gt;output on each field for you, but you can use this yourself if you just want to print one form control anywhere you like, not as part of a form.&lt;br /&gt;
&lt;br /&gt;
===Groups===&lt;br /&gt;
&lt;br /&gt;
Groups (which will probably get renamed to conditionalshow, but I don&#039;t want to change all the examples just now) allow you to show or hide a collection of fields, depending on the setting of another field.&lt;br /&gt;
&lt;br /&gt;
groups have basically the same methods as fields, but $name is optional. $name has no function, unless you need to identify the group later for a call the $mf-&amp;gt;get($groupname);&lt;br /&gt;
&lt;br /&gt;
There are a few extra methods they have over fields:&lt;br /&gt;
&lt;br /&gt;
 $field = &amp;amp;$group-&amp;gt;add($fieldtype, $fieldname, $fieldoptions, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$group-&amp;gt;add_item($fieldobject, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$group-&amp;gt;remove($fieldname);&lt;br /&gt;
 $field = &amp;amp;$group-&amp;gt;get($fieldname);&lt;br /&gt;
&lt;br /&gt;
 $group-&amp;gt;set_condition($conditionfield, $conditionvalue);&lt;br /&gt;
&lt;br /&gt;
The elements within the group will only be visible when the field $conditionfield elsewhere in the form has value $conditionvalue. This works best when $conditionfield is a dropdown.&lt;br /&gt;
&lt;br /&gt;
Do we also want a conditionalenable group that enables/disables a bunch of fields, rather than showing or hiding them?&lt;br /&gt;
&lt;br /&gt;
===Multiples===&lt;br /&gt;
&lt;br /&gt;
This lets you do things like enter multiple usernames, as in the &#039;working example&#039; below. You would also use it on the editing form for multiple choice questions, to enter any number of answers with matching grades.&lt;br /&gt;
&lt;br /&gt;
Again, they support the same methods as fields, and also:&lt;br /&gt;
&lt;br /&gt;
 $field = &amp;amp;$multiple-&amp;gt;add($fieldtype, $fieldname, $fieldoptions, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$multiple-&amp;gt;add_item($fieldobject, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$multiple-&amp;gt;remove($fieldname);&lt;br /&gt;
 $field = &amp;amp;$multiple-&amp;gt;get($fieldname);&lt;br /&gt;
&lt;br /&gt;
 $multiple-&amp;gt;set_max($number);&lt;br /&gt;
&lt;br /&gt;
For accessibility reasons, multiples work by printing a certain number of copies into the HTML, and these are then shown or hidden by the JavaScript. This is for accessibility reasons, and so the forms work without JavaScript. max is the number of copies that are printed. It defaults to 10.&lt;br /&gt;
&lt;br /&gt;
==Field types initially supported==&lt;br /&gt;
&lt;br /&gt;
All field will support the options:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lable&#039;&#039;&#039; the field lable. This is a string that is looked up in the language file. Or, if the string starts with an &#039;=&#039; character, then this is trimmed off, and the rest of the string is used literally. Defaults to name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;help&#039;&#039;&#039; the name of the help file to link to. Defaults to name. Setting to &#039;&#039; removes the help icon.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;helpalt&#039;&#039;&#039; the langstring to use for the tooltip of the help icon.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;optional&#039;&#039;&#039; if set to &#039;yes&#039;, then adds a checkbox before the field to enable or diable it. The checkbox&#039;s name is name is constructed by taking the field name and appending &#039;enable&#039;. If you want another name, set this option to the checkbox name, instead of &#039;yes&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;needcapability&#039;&#039;&#039; this is mainly aimed at 1.7 roles and permissions. Will hide this field unless the user has the named capability. At first, this will only recognise the values admin, teacher, student, noneditingteacher, guest, and translate these into the obvious isadmin() type calls.&lt;br /&gt;
&lt;br /&gt;
More options will probably get added in future.&lt;br /&gt;
&lt;br /&gt;
===display===&lt;br /&gt;
&lt;br /&gt;
Just diplay a value with a label, the value can&#039;t be edited.&lt;br /&gt;
&lt;br /&gt;
===text===&lt;br /&gt;
&lt;br /&gt;
Text input box.&lt;br /&gt;
&lt;br /&gt;
Supports the additional options:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;required&#039;&#039;&#039; a regexp that is used for client-side validation against that regexp.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;size&#039;&#039;&#039; as in &amp;lt;input size=&amp;quot;&amp;quot; ... /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===file===&lt;br /&gt;
&lt;br /&gt;
File upload box.&lt;br /&gt;
&lt;br /&gt;
===date===&lt;br /&gt;
&lt;br /&gt;
Date, like quiz open and close dates.&lt;br /&gt;
&lt;br /&gt;
===html===&lt;br /&gt;
&lt;br /&gt;
The standard HTML editor, or just a text area, depending on the settings. (This calls print_textarea).&lt;br /&gt;
&lt;br /&gt;
===dropdown===&lt;br /&gt;
&lt;br /&gt;
A dropdown menu. This field has the additional methods:&lt;br /&gt;
&lt;br /&gt;
 $dropdown-&amp;gt;add_option($value, $label);&lt;br /&gt;
 $dropdown-&amp;gt;remove_option($value);&lt;br /&gt;
&lt;br /&gt;
$label is optional. By default: if $value is an integer, use that integer as the label, otherwise look $value up in the langfile.&lt;br /&gt;
&lt;br /&gt;
Dropdown supports the additional option:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;default&#039;&#039;&#039; which option to select by default.&lt;br /&gt;
&lt;br /&gt;
===radio===&lt;br /&gt;
&lt;br /&gt;
A set of linked radio buttons, which are defined in the same way as dropdown menu options.&lt;br /&gt;
&lt;br /&gt;
===multiselect===&lt;br /&gt;
&lt;br /&gt;
A list box where you can select multiple options, which are defined in the same way as dropdown menu options.&lt;br /&gt;
&lt;br /&gt;
Actually, I think we should change the implementation of this to use a set of checkboxes when there are fewer than about a dozen options, and automatically switch to useing a list box when there are more than that. And maybe add an optional parameter to force the listbox/checkbox decision one way or the other.&lt;br /&gt;
&lt;br /&gt;
===yesno===&lt;br /&gt;
&lt;br /&gt;
A dropdown menu with just the two options &#039;yes&#039; and &#039;no&#039;.&lt;br /&gt;
&lt;br /&gt;
===user===&lt;br /&gt;
&lt;br /&gt;
A flashy text box where you can enter user&#039;s names, and it does AJAX stuff to help you auto-complete them.&lt;br /&gt;
&lt;br /&gt;
===visible===&lt;br /&gt;
&lt;br /&gt;
This generates the standard &amp;quot;Visible to students&amp;quot; field that appears on add/update module forms.&lt;br /&gt;
&lt;br /&gt;
===groupmode===&lt;br /&gt;
&lt;br /&gt;
This generates the standard &amp;quot;Group mode&amp;quot; field that appears on add/update module forms.&lt;br /&gt;
&lt;br /&gt;
==XML form definition format==&lt;br /&gt;
&lt;br /&gt;
This provides the quickest way to create most forms. It should be clear how this translates into the PHP API calls defined above. XML elements $mf-&amp;gt;add() calls. XML attributes correspond either to required information, or to set_opt calls. Form filds, like dropdowns, that need extra information get it from child elements. See the examples below for what it looks like.&lt;br /&gt;
&lt;br /&gt;
==A working example==&lt;br /&gt;
&lt;br /&gt;
Here is an example of a form produced with the current (un-cleaned-up) version of the OU&#039;s library. The form looks like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Add_newsfeed_form.png]]&lt;br /&gt;
&lt;br /&gt;
There is some OU-specific stuff here, like presentation and authids, and the fact that we reveal $user-&amp;gt;username to teachers. I am assuming you can filter that out.&lt;br /&gt;
&lt;br /&gt;
More interestingly, notice that&lt;br /&gt;
&lt;br /&gt;
* The required field Name has not been filled it, so its label is red, and the create button is disabled. Below, you will see that anything typed into this field will actually be validated against a regular expression.&lt;br /&gt;
* The user field type does cool AJAX to save you typing the whole name.&lt;br /&gt;
* After you have added one user as a poster, a second box appeared where we could type a second user name. And when we finish typing here, a third box will appear.&lt;br /&gt;
&lt;br /&gt;
The XML defining the form looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editform langfile=&#039;block_newsfeed&#039;&amp;gt;&lt;br /&gt;
     &amp;lt;text name=&#039;location&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;text name=&#039;name&#039; required=&#039;\S&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;text name=&#039;pres&#039; required=&#039;^([0-9]{2}[a-zA-Z]?)?$&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;html name=&#039;summary&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;dropdown name=&#039;type&#039;&amp;gt;&lt;br /&gt;
       &amp;lt;option value=&#039;internal&#039;&amp;gt;type_internal&amp;lt;/option&amp;gt;&lt;br /&gt;
       &amp;lt;option value=&#039;external&#039;&amp;gt;type_external&amp;lt;/option&amp;gt;&lt;br /&gt;
     &amp;lt;/dropdown &amp;gt;&lt;br /&gt;
     &amp;lt;group requiredname=&amp;quot;type&amp;quot; requiredvalue=&amp;quot;external&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;item type=&#039;text&#039; name=&#039;url&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;/group&amp;gt;&lt;br /&gt;
     &amp;lt;group requiredname=&amp;quot;type&amp;quot; requiredvalue=&amp;quot;internal&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;date name=&#039;startdate&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;dropdown name=&#039;public&#039;&amp;gt;&lt;br /&gt;
           &amp;lt;option value=&#039;1&#039;&amp;gt;access_public&amp;lt;/option&amp;gt;&lt;br /&gt;
           &amp;lt;option value=&#039;0&#039;&amp;gt;access_private&amp;lt;/option&amp;gt;&lt;br /&gt;
         &amp;lt;/dropdown &amp;gt;&lt;br /&gt;
         &amp;lt;text name=&#039;defaultauthid&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;multiple&amp;gt;&lt;br /&gt;
             &amp;lt;text name=&#039;optionalauthids&#039; required=&#039;^([A-Z0-9]+)?$&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;/multiple&amp;gt;&lt;br /&gt;
         &amp;lt;multiple&amp;gt;&lt;br /&gt;
             &amp;lt;user name=&#039;posters&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;/multiple&amp;gt;&lt;br /&gt;
         &amp;lt;multiple&amp;gt;&lt;br /&gt;
             &amp;lt;user name=&#039;approvers&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;/multiple&amp;gt;&lt;br /&gt;
     &amp;lt;/group&amp;gt;          &lt;br /&gt;
&amp;lt;/editform&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PHP code that creates the form definition ($xf), and the object with all the current values ($form) and sets all the default values looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$xf=xml_form::load_file(&#039;editfeed.xml&#039;);&lt;br /&gt;
$xf-&amp;gt;set_init_html_editor(true);&lt;br /&gt;
$form=new stdClass;&lt;br /&gt;
$newsfeedid=optional_param(&#039;newsfeedid&#039;,0,PARAM_INT);&lt;br /&gt;
if($newsfeedid) {&lt;br /&gt;
    $nf=feed_system::$inst-&amp;gt;get_feed($newsfeedid);&lt;br /&gt;
    $form-&amp;gt;location=$nf-&amp;gt;get_folder()-&amp;gt;get_path();&lt;br /&gt;
    $xf-&amp;gt;set_hidden(&#039;newsfeedid&#039;,$newsfeedid);&lt;br /&gt;
    &lt;br /&gt;
    $form-&amp;gt;name=$nf-&amp;gt;get_name();&lt;br /&gt;
    $form-&amp;gt;pres=$nf-&amp;gt;get_pres();&lt;br /&gt;
    if($form-&amp;gt;pres==null) {&lt;br /&gt;
        $form-&amp;gt;pres=&#039;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    $form-&amp;gt;summary=$nf-&amp;gt;get_summary();&lt;br /&gt;
    if(is_a($nf,&#039;external_news_feed&#039;)) {&lt;br /&gt;
        $form-&amp;gt;type=&#039;external&#039;;&lt;br /&gt;
        $form-&amp;gt;url=$form-&amp;gt;get_url();&lt;br /&gt;
    } else {&lt;br /&gt;
        $form-&amp;gt;type=&#039;internal&#039;;&lt;br /&gt;
        $form-&amp;gt;startdate=$nf-&amp;gt;get_start_date();&lt;br /&gt;
        $form-&amp;gt;public=$nf-&amp;gt;is_public();&lt;br /&gt;
        $form-&amp;gt;defaultauthid=$nf-&amp;gt;get_default_authid();&lt;br /&gt;
        xml_form::set_multiple($form,&#039;optionalauthids&#039;,$nf-&amp;gt;get_optional_authids());&lt;br /&gt;
        xml_form::set_multiple($form,&#039;posters&#039;,$nf-&amp;gt;get_poster_usernames());&lt;br /&gt;
        xml_form::set_multiple($form,&#039;approvers&#039;,$nf-&amp;gt;get_approver_usernames());&lt;br /&gt;
        $form-&amp;gt;newsfeedid=$newsfeedid;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
} else {&lt;br /&gt;
    $folderid=required_param(&#039;folderid&#039;,PARAM_INT);&lt;br /&gt;
    $lf=feed_system::$inst-&amp;gt;get_location_folder($folderid,null);&lt;br /&gt;
    $nf=null;&lt;br /&gt;
    $xf-&amp;gt;set_submit_caption(get_string(&#039;create&#039;));&lt;br /&gt;
    $form-&amp;gt;location=$lf-&amp;gt;get_path();&lt;br /&gt;
    $xf-&amp;gt;set_hidden(&#039;newsfeedid&#039;,0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ... print_header and other boring bits.&lt;br /&gt;
&lt;br /&gt;
print_simple_box_start(&#039;center&#039;);&lt;br /&gt;
$xf-&amp;gt;show(basename(__FILE__), $form);&lt;br /&gt;
print_simple_box_end();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples of converting existing Moodle forms==&lt;br /&gt;
&lt;br /&gt;
These are four example forms that Marting Dougiamas asked to see how we would handle.&lt;br /&gt;
&lt;br /&gt;
===Add resource -&amp;gt; Link to a file or web site===&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Add link resource.png]]&lt;br /&gt;
&lt;br /&gt;
I have taken the liberty of changing the way the window options work on this form. Instead of having a show/hide window settings button, and when that is turned on showing all the options for both same window and new window, I have changed it to be a same window/popup window dropdown, and depending on the setting there, showing or hiding the particular set of options. It would also be possible to use the library to generate the existing form.&lt;br /&gt;
&lt;br /&gt;
This form contains some very specific bits, namely the location field and the parameters sections. For now I have kept the existing code to generate these bits. If fields like the location field were used in other places, we could add a url field type. I don&#039;t see any future in generalising the parameters bit, though the code to generate it could be cleaned up. I just copied and pasted the existing code, and made the minimal changes.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve used a multiselect for the window options. That will require a small change to the response processing code. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mf = moodle_form::loadstring(&#039;&lt;br /&gt;
&amp;lt;editform langfile=&amp;quot;resource&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;text name=&amp;quot;name&amp;quot; help=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;htmlarea name=&amp;quot;summary&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xhtml label=&amp;quot;location&amp;quot;&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
        echo &amp;quot;&amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;reference\&amp;quot; size=\&amp;quot;90\&amp;quot; value=\&amp;quot;$form-&amp;gt;reference\&amp;quot; alt=\&amp;quot;reference\&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
        button_to_popup_window (&amp;quot;/files/index.php?id=$form-&amp;gt;course&amp;amp;amp;choose=form.reference&amp;quot;, &amp;quot;coursefiles&amp;quot;, $xmlform[&#039;strchooseafile&#039;], 500, 750, $xmlform[&#039;strchooseafile&#039;]);&lt;br /&gt;
        echo &amp;quot;&amp;lt;input type=\&amp;quot;button\&amp;quot; name=\&amp;quot;searchbutton\&amp;quot; value=\&amp;quot;$xmlform[&#039;strsearch&#039;] ...\&amp;quot; &amp;quot;.&lt;br /&gt;
             &amp;quot;onclick=\&amp;quot;return window.open(&#039;$CFG-&amp;gt;resource_websearch&#039;, &#039;websearch&#039;, &#039;menubar=1,location=1,directories=1,toolbar=1,scrollbars,resizable,width=800,height=600&#039;);\&amp;quot; /&amp;gt;\n&amp;quot;;&lt;br /&gt;
        if ($CFG-&amp;gt;resource_allowlocalfiles) {&lt;br /&gt;
            button_to_popup_window (&amp;quot;/mod/resource/type/file/localfile.php?choose=form.reference&amp;quot;, &lt;br /&gt;
            &amp;quot;localfiles&amp;quot;, get_string(&#039;localfilechoose&#039;, &#039;resource&#039;), 400, 600, &lt;br /&gt;
            get_string(&#039;localfilechoose&#039;, &#039;resource&#039;));&lt;br /&gt;
        }&lt;br /&gt;
    ]]&amp;gt;&amp;lt;/xhtml&amp;gt;&lt;br /&gt;
    &amp;lt;url name=&amp;quot;location&amp;quot; showuploadbutton=&amp;quot;1&amp;quot; showsearchbutton=&amp;quot;1&amp;quot; help=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;dropdown name=&amp;quot;windowpopup&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&#039;0&#039;&amp;gt;pagewindow&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&#039;1&#039;&amp;gt;newwindow&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/dropdown&amp;gt;&lt;br /&gt;
    &amp;lt;group requiredname=&amp;quot;newwindow&amp;quot; requiredvalue=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;hidden name=&amp;quot;hframepage&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;multiselect name=&amp;quot;framepage&amp;quot; help=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;frameifpossible&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/multiselect&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
    &amp;lt;group requiredname=&amp;quot;newwindow&amp;quot; requiredvalue=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multiselect name=&amp;quot;windowoptions&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/multiselect&amp;gt;&lt;br /&gt;
        &amp;lt;integer name=&amp;quot;resource_popupwidth&amp;quot; label=&amp;quot;resource_popupwidth&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;integer name=&amp;quot;resource_popupheight&amp;quot; label=&amp;quot;resource_popupheight&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
    &amp;lt;yesno name=&amp;quot;parameters&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;group requiredname=&amp;quot;newwindow&amp;quot; requiredvalue=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xhtml&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;?php print_string(&amp;quot;parameter&amp;quot;, &amp;quot;resource&amp;quot;) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;?php print_string(&amp;quot;variablename&amp;quot;, &amp;quot;resource&amp;quot;) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
for ($i=0; $i &amp;lt; $xmlform[&#039;maxparameters&#039;]; $i++) {&lt;br /&gt;
    echo &amp;quot;&amp;lt;tr&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;td valign=\&amp;quot;top\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;select name=\&amp;quot;parameter$i\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;option value=\&amp;quot;-\&amp;quot;&amp;gt;-- &amp;quot;.get_string(&#039;chooseparameter&#039;, &#039;resource&#039;).&amp;quot; --&amp;lt;/option&amp;gt;\n&amp;quot;;&lt;br /&gt;
    foreach ($xmlform[&#039;parameters&#039;] as $field=&amp;gt;$fieldarr) {&lt;br /&gt;
        if ($fieldarr[&#039;value&#039;] === &amp;quot;optgroup&amp;quot;) {&lt;br /&gt;
            echo &amp;quot;&amp;lt;optgroup label=\&amp;quot;{$fieldarr[&#039;langstr&#039;]}\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
        } elseif ($fieldarr[&#039;value&#039;] === &amp;quot;/optgroup&amp;quot;) {&lt;br /&gt;
            echo &amp;quot;&amp;lt;/optgroup&amp;gt;\n&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            echo &amp;quot;&amp;lt;option value=\&amp;quot;$field\&amp;quot;&amp;quot;;&lt;br /&gt;
            if ($xmlform[&#039;alltextfield&#039;][$i][&#039;parameter&#039;] == $field) {&lt;br /&gt;
                echo &amp;quot; selected=\&amp;quot;selected\&amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            echo &amp;quot;&amp;gt;{$fieldarr[&#039;langstr&#039;]}&amp;lt;/option&amp;gt;\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;&amp;lt;/select&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;/td&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;td valign=\&amp;quot;top\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;parse$i\&amp;quot; value=\&amp;quot;{$xmlform[&#039;alltextfield&#039;][$i][&#039;parse&#039;]}\&amp;quot; alt=\&amp;quot;parameter$i\&amp;quot;/&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;/td&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    ]]&amp;gt;&amp;lt;/xhtml&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&#039;)&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;strchooseafile&#039;, get_string(...));&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;strsearch&#039;, get_string(...));&lt;br /&gt;
&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;maxparameters&#039;, $this-&amp;gt;maxparameters);&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;parameters&#039;, $this-&amp;gt;parameters);&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;alltextfield&#039;, $alltextfield); // Assuming that this code is after the end of setup() in mod\resource\type\file\resource.class.php&lt;br /&gt;
&lt;br /&gt;
$winopt = $mf-&amp;gt;get(&#039;windowoptions&#039;);&lt;br /&gt;
foreach ($RESOURCE_WINDOW_OPTIONS as $optionname) {&lt;br /&gt;
    $defaultvalue = &amp;quot;resource_popup$optionname&amp;quot;;&lt;br /&gt;
    $form-&amp;gt;$optionname = $CFG-&amp;gt;$defaultvalue;&lt;br /&gt;
    if ($optionname != &#039;height&#039; &amp;amp;&amp;amp; $optionname != &#039;width&#039;) {&lt;br /&gt;
        $winopt-&amp;gt;add_option($optionname, &amp;quot;str$optionname&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add quiz===&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Add quiz form.png]]&lt;br /&gt;
&lt;br /&gt;
To convert this form, we need to do something special for the &amp;quot;students may review&amp;quot; bit. You could either invent an new &amp;lt;optiongrid&amp;gt; type, which would be quite easy to implement. That is the option used below. Alternatively, you could use the feature for including arbitrary HTML and PHP in the form, and keep the existing code for generating this part of the form. Since the existing layout breaks when you make the browser window narrow, as in the screenshot, I would be inclined to redo it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mf = moodle_form::loadstring(&#039;&lt;br /&gt;
&amp;lt;editform langfile=&amp;quot;quiz&amp;quot; help=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;text name=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;htmlarea name=&amp;quot;introduction&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;date name=&amp;quot;available&amp;quot; label=&amp;quot;quizopen&amp;quot; optional=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;date name=&amp;quot;due&amp;quot; label=&amp;quot;quizclose&amp;quot; optional=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;real name=&amp;quot;timelimit&amp;quot; lableafter=&amp;quot;minutes&amp;quot; helpalt=&amp;quot;quiztimer&amp;quot; optional=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;dropdown name=&amp;quot;questionsperpage&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&#039;0&#039;&amp;gt;unlimited&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;!-- other options will be added programmatically --&amp;gt;&lt;br /&gt;
    &amp;lt;/dropdown&amp;gt;&lt;br /&gt;
    &amp;lt;yesno name=&amp;quot;shufflequestions&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ... skipping the next few boring fields ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;optiongrid name=&amp;quot;reviewoptions&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;col name=&amp;quot;responses&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;col name=&amp;quot;scores&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;col name=&amp;quot;feedback&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;col name=&amp;quot;answers&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;row name=&amp;quot;immediately&amp;quot; lable=&amp;quot;reviewimmediately&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;row name=&amp;quot;open&amp;quot; lable=&amp;quot;reviewopen&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;row name=&amp;quot;closed&amp;quot; lable=&amp;quot;reviewclosed&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/optiongrid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ... skipping the next few boring fields ... --&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;groupmode/&amp;gt;&lt;br /&gt;
    &amp;lt;visible/&amp;gt;&lt;br /&gt;
&#039;)&lt;br /&gt;
$questionsperpage =&amp;amp; $mf-&amp;gt;get(&#039;questionsperpage&#039;);&lt;br /&gt;
for ($i = 1; $i &amp;lt;= 50; $i += 1) {&lt;br /&gt;
    $questionsperpage-&amp;gt;add_option($i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This does not take into account the settings on http://&#039;&#039;example.com&#039;&#039;/moodle/admin/module.php?module=quiz, which lets the admin move certain quiz options to be hidden behind an &amp;quot;advanced&amp;quot; option. To implement this you would need to add a show/hide advanced control (I would do this as a &amp;lt;yesno name=&amp;quot;showadvanced&amp;quot;/&amp;gt;, and an empty advanced group, then use some PHP code like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fix = 0;&lt;br /&gt;
$advgroup = $mf-&amp;gt;get_field(&#039;advanced&#039;);&lt;br /&gt;
&lt;br /&gt;
if ($CFG-&amp;gt;quiz_fix_timelimit) {&lt;br /&gt;
    $item = &amp;amp;$mf-&amp;gt;remove(&#039;timelimit&#039;);&lt;br /&gt;
    $advgroup-&amp;gt;add($item)&lt;br /&gt;
    $fix = 1;&lt;br /&gt;
}&lt;br /&gt;
// ... and so on, for all the other options. Or you could try to be clever &lt;br /&gt;
// and do this as a loop over an array of field names ... then&lt;br /&gt;
if (!$fix) {&lt;br /&gt;
    $form-&amp;gt;remove(&#039;showadvanced&#039;);&lt;br /&gt;
    $form-&amp;gt;remove(&#039;advanced&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add database===&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Add_database_form.png]]&lt;br /&gt;
&lt;br /&gt;
I won&#039;t type out full code for this example most of it is simple, and it should be clear how to do it given the above examples, just comment on a couple of things:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entries required before viewing&#039;&#039;&#039; I assume this is only indented because the label is so long that having it all lined up would break the table layout. I think our code using CSS for layout just word-wraps long labels and keeps everything aligned, which I think is better.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allow posts to be rated?&#039;&#039;&#039; I would put the disabled controls in a group that only appears if the checkbox is checked, so that those controls show and hide, rather than enabling or disabling. However, if we want to keep this the same as it is now, you could implemnt the conditionalenable group type.&lt;br /&gt;
&lt;br /&gt;
===Manage groups for a course===&lt;br /&gt;
&lt;br /&gt;
This sort of form is currently beyond what the form library was designed to produce. I would leave this as hand-coded HTML. In time, the form library may gain some AJAX field types for selecting students, and such like, that could usefully be within a redesigned version of this form. Since the form field types just output HTML and Javascript, it should be possible to use them within hand-crafted forms.&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Groups_form.png]]&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
&lt;br /&gt;
Do we need a syntax like lable=&#039;langfile:langstring&#039; for using lang strings from other lang files where necessary? &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Where does this live. I think the main library file that people have to include should be lib/formlib.php, and that is all anyone needs to include. However, to we break each field type into its own PHP file, perhaps in a lib/formlib directory, to make it easier to add new field types in future? &#039;&#039;&#039;Probably all in one file&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Some form fields will need bits of CSS and JavaScript to work. Do we add the CSS to the standard theme, and combine all the javascript into a single library somewhere, or do we break it up into the individual field types, and recombine it dynamically at runtime? I think I favour breaking up the PHP code, but keeping all the JS and CSS in one place. &#039;&#039;&#039;Should use YUI were possible. We will still need some custom JavaScript and CSS though. Where?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do we use this for vaidation as well? &#039;&#039;&#039;Yes.&#039;&#039;&#039; Currently Moodle PHP files that do forms tend to look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$var1 = require/optional_param(...);&lt;br /&gt;
// etc. for all the other form variables.&lt;br /&gt;
&lt;br /&gt;
if (data_submitted &amp;amp;&amp;amp; confirm_sesskey()) {&lt;br /&gt;
   // Try to process submitted data.&lt;br /&gt;
   if (/*processing ok*/)&lt;br /&gt;
	   // Redirect away&lt;br /&gt;
} else {&lt;br /&gt;
   // Set initial form values.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lots of code to output the form HTML. Of maybe include(somthing.html);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The proposal is to change this to something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mf = new moodle_form();&lt;br /&gt;
// Setup $mf with the form structure&lt;br /&gt;
&lt;br /&gt;
$form = new stdClass;&lt;br /&gt;
if ($mf-&amp;gt;validate_submitted_data($form)) { // Pass by reference to get data back.&lt;br /&gt;
   // Try to process submitted data in $form&lt;br /&gt;
   if (/*processing ok*/)&lt;br /&gt;
	   // Redirect away&lt;br /&gt;
} else {&lt;br /&gt;
   // Set initial values in $form&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$mf-&amp;gt;display($form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Obsolete - Moodle forms library]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Obsolete_-_Moodle_forms_library&amp;diff=47809</id>
		<title>Development:Obsolete - Moodle forms library</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Obsolete_-_Moodle_forms_library&amp;diff=47809"/>
		<updated>2008-12-06T13:35:37Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* OBSOLETE INFORMATION */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==OBSOLETE INFORMATION==&lt;br /&gt;
{{obsolete_design}}&lt;br /&gt;
&#039;&#039;&#039;This was a proposal for discussion that was not used.&lt;br /&gt;
&lt;br /&gt;
==[[Development:lib/formslib.php|Documentation of the forms library that is used in Moodle]]==&lt;br /&gt;
&lt;br /&gt;
The OU has developed quite a nice in-house library to simplify creating Moodle editing forms. We would like to contribute it back to the community, and then as part of the accessibility work we are comissioning, get all Moodle forms modified to use it. However, before we can contribute it back, we need to get consensus withing the community that it is right for Moodle, and we need to tidy up the code a bit.&lt;br /&gt;
&lt;br /&gt;
This document outlines how the library should work after cleaning up, so the community can see whether they like it, and OU developers know what is involved in the cleanup.&lt;br /&gt;
&lt;br /&gt;
==What the system will be capable of==&lt;br /&gt;
&lt;br /&gt;
The library allows developers to create editing forms by creating a high-level representation of the form as a data-structure in memory, configuring all necessary options, and setting initial values of fields, and then the library generates the actual HTML of the form to include in the page.&lt;br /&gt;
&lt;br /&gt;
We are not planning to change significantly the way that Moodle editing forms look and function. However, by putting all the HTML (and JavaScript, CSS, ...) generation in one place, we make it much easier to make systematic improvements to accessibility, usability, client-side validation, etc. in future. Indeed, the OU&#039;s code already generates HTML that is a bit more accessible that most Moodle forms.&lt;br /&gt;
&lt;br /&gt;
By allowing developers to think at a higher level, we make their life easier, in the same way that datalib saves them from worrying about the details of SQL most of the time.&lt;br /&gt;
&lt;br /&gt;
The general way the library will work is that it will assume sensible defaults for everything to reduce the amount that has to be typed. So for a lot of input fields, you will only have to specify&lt;br /&gt;
&lt;br /&gt;
# the field type (e.g. text, think &amp;lt;input type=&amp;quot;&amp;quot; ... /&amp;gt;, However the hope would be to move towards higher-level types, such as integer, path, url, as in require_param, etc.)&lt;br /&gt;
# the field name (think &amp;lt;input name=&amp;quot;&amp;quot; ... /&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Everything else that is needed will be derived from these using sensible defaults. We need label text? We&#039;ll look up the field name in the lang file (each form will specify which lang file to use). We need a help link? Well, use /lang/en_utf8/help$langfile/$name.html. We need a field size? Each type will have a sensible default.&lt;br /&gt;
&lt;br /&gt;
However, if you want to override any of these defaults, you can by setting that option explicitly. Because there will be lots of options, and normally you will only need to change a few, the library will use a named attribute style, so example code would look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$field = new text_field(&#039;fieldname&#039;);&lt;br /&gt;
$field-&amp;gt;set_set(&#039;size&#039;, 30);&lt;br /&gt;
$field-&amp;gt;set_set(&#039;label&#039;, &#039;lablestring&#039;);&lt;br /&gt;
&lt;br /&gt;
// or &lt;br /&gt;
&lt;br /&gt;
$field = new text_field(&#039;fieldname&#039;);&lt;br /&gt;
$field-&amp;gt;set_set(array(&#039;size&#039; =&amp;gt; 30, &#039;label&#039; =&amp;gt; &#039;lablestring&#039;));&lt;br /&gt;
&lt;br /&gt;
// or &lt;br /&gt;
&lt;br /&gt;
$field = new text_field(&#039;fieldname&#039;, array(&lt;br /&gt;
        &#039;size&#039; =&amp;gt; 30, &lt;br /&gt;
        &#039;label&#039; =&amp;gt; &#039;lablestring&#039;&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, &#039;lablestring&#039; would again get looked up in the lang file automatically.&lt;br /&gt;
&lt;br /&gt;
For this situation, where there are lots of options available, but most people only need to change a few, I think this style of API works better than PHP function calls with lots of optional parameters. The options available for each field type will be documented in the comment where that class is defined.&lt;br /&gt;
&lt;br /&gt;
The library is designed to make it easy to add new field types, or new options to existing field types. Indeed, that is how the library has evolved so far: a bit at a time as needed. &lt;br /&gt;
&lt;br /&gt;
New field types are just new PHP classes, and they are likely to be subclasses of a base class that only change a few things. They don&#039;t even have to be defined in the central form library. If you need an specialist field type only within one (e.g. contrib) module, you can create a new field-type subclass in that module code and use it in that modules forms without having to touch core code. And if we later want to move that field type into core, it is trivial to move the class definition.&lt;br /&gt;
&lt;br /&gt;
Since we will have to tidy up the code anyway, all the function/class/method/option names in the API are potentially changable.&lt;br /&gt;
&lt;br /&gt;
==PHP API==&lt;br /&gt;
&lt;br /&gt;
Each thing in the API will be a PHP class, these basically fall into three categories: the whole form, groupings of form fields, and individual field types. Note that the groupings are currently only used for functional reasons, like showing or hiding groups of elements. Logical groupings, that would correspond to &amp;lt;fieldset&amp;gt; tags for accessibility, are not included yet, but could be added.&lt;br /&gt;
&lt;br /&gt;
I am just going to list all the possible method calls. I will assume that it is clear what they do from their names (and I am running out of time).&lt;br /&gt;
&lt;br /&gt;
===The whole form===&lt;br /&gt;
&lt;br /&gt;
There is a class to represent a form, and most of the time you will be able to do everything you want to do by calling methods on this class, and you don&#039;t have to worry about the rest of the API.&lt;br /&gt;
&lt;br /&gt;
 $mf = new moodle_form($langfile);&lt;br /&gt;
&lt;br /&gt;
 $field = &amp;amp;$mf-&amp;gt;add($fieldtype, $fieldname, $fieldoptions, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$mf-&amp;gt;add_item($fieldobject, $insertbefore); // $insertbefore is optional. By default things are inserted at the end of the form.&lt;br /&gt;
 $field = &amp;amp;$mf-&amp;gt;remove($fieldname);&lt;br /&gt;
 $field = &amp;amp;$mf-&amp;gt;get($fieldname);&lt;br /&gt;
&lt;br /&gt;
These let you add or remove things from the form. The field you have just done stuff to is returned, but most of the time you will not bother to do anything with the return value. These method work with groups, etc. not just fields.&lt;br /&gt;
&lt;br /&gt;
 $mf-&amp;gt;set_action($url);&lt;br /&gt;
 $mf-&amp;gt;set_init_html_editor(); // There was a reason why the library can&#039;t guess this from the list of fields.&lt;br /&gt;
 $mf-&amp;gt;set_submit_caption($langstringid);&lt;br /&gt;
 $mf-&amp;gt;set_hidden($fieldname, $value);&lt;br /&gt;
 $mf-&amp;gt;set_value($fieldname, $value); // The initial value for this field. (or use the $form attribute on show()).  &lt;br /&gt;
 $mf-&amp;gt;set_error($fieldname, $message); // Error message to be displayed in red next to this field if you are doing server-side validation.&lt;br /&gt;
&lt;br /&gt;
 $mf-&amp;gt;show($action, $form);&lt;br /&gt;
&lt;br /&gt;
Show the form. $form is an object holding the default value of each field that has not already been set using set_value().&lt;br /&gt;
&lt;br /&gt;
 $mf-&amp;gt;add_xhtml($htmlphpcode, $insertbefore);&lt;br /&gt;
 $mf-&amp;gt;set_xhtml_param($name, $value);&lt;br /&gt;
&lt;br /&gt;
You can insert arbitrary bits of HTML or PHP code into the form using this. When outputting the form, the library does &#039;&#039;&#039;eval(&#039;?&amp;gt;&#039;.$htmlphpcode.&#039;&amp;lt;?php &#039;);&#039;&#039;&#039; in a place where $form is in scope, and the variables passed in via set_xhtml_param are available from an array as $xmlform[$name].&lt;br /&gt;
&lt;br /&gt;
 $new_mf = moodle_form::loadfile($xmlfilename);&lt;br /&gt;
 $new_mf = moodle_form::loadstring($xmlstring);&lt;br /&gt;
&lt;br /&gt;
Create a whole form using the XML syntax mentioned below.&lt;br /&gt;
&lt;br /&gt;
===Fields===&lt;br /&gt;
&lt;br /&gt;
The library also has classes representing the different field types, which you can use if you want.&lt;br /&gt;
&lt;br /&gt;
 $field = new xxxx_field($name, $options_array); // where xxxx is one of the field types below.&lt;br /&gt;
 $field-&amp;gt;set($optionname, $optionvalue);&lt;br /&gt;
 $field-&amp;gt;set($optionarray); // Array of $optionname =&amp;gt; $optionvalue pairs.&lt;br /&gt;
 $optionvalue = $field-&amp;gt;get($optionname);&lt;br /&gt;
&lt;br /&gt;
 $field-&amp;gt;set_value($value); // Sets the initial value of this field.&lt;br /&gt;
&lt;br /&gt;
 $field-&amp;gt;output($form); // Print this form element. &lt;br /&gt;
&lt;br /&gt;
Normally you won&#039;t call output() directly. You will call $mf-&amp;gt;output, which will call $field-&amp;gt;output on each field for you, but you can use this yourself if you just want to print one form control anywhere you like, not as part of a form.&lt;br /&gt;
&lt;br /&gt;
===Groups===&lt;br /&gt;
&lt;br /&gt;
Groups (which will probably get renamed to conditionalshow, but I don&#039;t want to change all the examples just now) allow you to show or hide a collection of fields, depending on the setting of another field.&lt;br /&gt;
&lt;br /&gt;
groups have basically the same methods as fields, but $name is optional. $name has no function, unless you need to identify the group later for a call the $mf-&amp;gt;get($groupname);&lt;br /&gt;
&lt;br /&gt;
There are a few extra methods they have over fields:&lt;br /&gt;
&lt;br /&gt;
 $field = &amp;amp;$group-&amp;gt;add($fieldtype, $fieldname, $fieldoptions, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$group-&amp;gt;add_item($fieldobject, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$group-&amp;gt;remove($fieldname);&lt;br /&gt;
 $field = &amp;amp;$group-&amp;gt;get($fieldname);&lt;br /&gt;
&lt;br /&gt;
 $group-&amp;gt;set_condition($conditionfield, $conditionvalue);&lt;br /&gt;
&lt;br /&gt;
The elements within the group will only be visible when the field $conditionfield elsewhere in the form has value $conditionvalue. This works best when $conditionfield is a dropdown.&lt;br /&gt;
&lt;br /&gt;
Do we also want a conditionalenable group that enables/disables a bunch of fields, rather than showing or hiding them?&lt;br /&gt;
&lt;br /&gt;
===Multiples===&lt;br /&gt;
&lt;br /&gt;
This lets you do things like enter multiple usernames, as in the &#039;working example&#039; below. You would also use it on the editing form for multiple choice questions, to enter any number of answers with matching grades.&lt;br /&gt;
&lt;br /&gt;
Again, they support the same methods as fields, and also:&lt;br /&gt;
&lt;br /&gt;
 $field = &amp;amp;$multiple-&amp;gt;add($fieldtype, $fieldname, $fieldoptions, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$multiple-&amp;gt;add_item($fieldobject, $insertbefore);&lt;br /&gt;
 $field = &amp;amp;$multiple-&amp;gt;remove($fieldname);&lt;br /&gt;
 $field = &amp;amp;$multiple-&amp;gt;get($fieldname);&lt;br /&gt;
&lt;br /&gt;
 $multiple-&amp;gt;set_max($number);&lt;br /&gt;
&lt;br /&gt;
For accessibility reasons, multiples work by printing a certain number of copies into the HTML, and these are then shown or hidden by the JavaScript. This is for accessibility reasons, and so the forms work without JavaScript. max is the number of copies that are printed. It defaults to 10.&lt;br /&gt;
&lt;br /&gt;
==Field types initially supported==&lt;br /&gt;
&lt;br /&gt;
All field will support the options:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lable&#039;&#039;&#039; the field lable. This is a string that is looked up in the language file. Or, if the string starts with an &#039;=&#039; character, then this is trimmed off, and the rest of the string is used literally. Defaults to name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;help&#039;&#039;&#039; the name of the help file to link to. Defaults to name. Setting to &#039;&#039; removes the help icon.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;helpalt&#039;&#039;&#039; the langstring to use for the tooltip of the help icon.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;optional&#039;&#039;&#039; if set to &#039;yes&#039;, then adds a checkbox before the field to enable or diable it. The checkbox&#039;s name is name is constructed by taking the field name and appending &#039;enable&#039;. If you want another name, set this option to the checkbox name, instead of &#039;yes&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;needcapability&#039;&#039;&#039; this is mainly aimed at 1.7 roles and permissions. Will hide this field unless the user has the named capability. At first, this will only recognise the values admin, teacher, student, noneditingteacher, guest, and translate these into the obvious isadmin() type calls.&lt;br /&gt;
&lt;br /&gt;
More options will probably get added in future.&lt;br /&gt;
&lt;br /&gt;
===display===&lt;br /&gt;
&lt;br /&gt;
Just diplay a value with a label, the value can&#039;t be edited.&lt;br /&gt;
&lt;br /&gt;
===text===&lt;br /&gt;
&lt;br /&gt;
Text input box.&lt;br /&gt;
&lt;br /&gt;
Supports the additional options:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;required&#039;&#039;&#039; a regexp that is used for client-side validation against that regexp.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;size&#039;&#039;&#039; as in &amp;lt;input size=&amp;quot;&amp;quot; ... /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===file===&lt;br /&gt;
&lt;br /&gt;
File upload box.&lt;br /&gt;
&lt;br /&gt;
===date===&lt;br /&gt;
&lt;br /&gt;
Date, like quiz open and close dates.&lt;br /&gt;
&lt;br /&gt;
===html===&lt;br /&gt;
&lt;br /&gt;
The standard HTML editor, or just a text area, depending on the settings. (This calls print_textarea).&lt;br /&gt;
&lt;br /&gt;
===dropdown===&lt;br /&gt;
&lt;br /&gt;
A dropdown menu. This field has the additional methods:&lt;br /&gt;
&lt;br /&gt;
 $dropdown-&amp;gt;add_option($value, $label);&lt;br /&gt;
 $dropdown-&amp;gt;remove_option($value);&lt;br /&gt;
&lt;br /&gt;
$label is optional. By default: if $value is an integer, use that integer as the label, otherwise look $value up in the langfile.&lt;br /&gt;
&lt;br /&gt;
Dropdown supports the additional option:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;default&#039;&#039;&#039; which option to select by default.&lt;br /&gt;
&lt;br /&gt;
===radio===&lt;br /&gt;
&lt;br /&gt;
A set of linked radio buttons, which are defined in the same way as dropdown menu options.&lt;br /&gt;
&lt;br /&gt;
===multiselect===&lt;br /&gt;
&lt;br /&gt;
A list box where you can select multiple options, which are defined in the same way as dropdown menu options.&lt;br /&gt;
&lt;br /&gt;
Actually, I think we should change the implementation of this to use a set of checkboxes when there are fewer than about a dozen options, and automatically switch to useing a list box when there are more than that. And maybe add an optional parameter to force the listbox/checkbox decision one way or the other.&lt;br /&gt;
&lt;br /&gt;
===yesno===&lt;br /&gt;
&lt;br /&gt;
A dropdown menu with just the two options &#039;yes&#039; and &#039;no&#039;.&lt;br /&gt;
&lt;br /&gt;
===user===&lt;br /&gt;
&lt;br /&gt;
A flashy text box where you can enter user&#039;s names, and it does AJAX stuff to help you auto-complete them.&lt;br /&gt;
&lt;br /&gt;
===visible===&lt;br /&gt;
&lt;br /&gt;
This generates the standard &amp;quot;Visible to students&amp;quot; field that appears on add/update module forms.&lt;br /&gt;
&lt;br /&gt;
===groupmode===&lt;br /&gt;
&lt;br /&gt;
This generates the standard &amp;quot;Group mode&amp;quot; field that appears on add/update module forms.&lt;br /&gt;
&lt;br /&gt;
==XML form definition format==&lt;br /&gt;
&lt;br /&gt;
This provides the quickest way to create most forms. It should be clear how this translates into the PHP API calls defined above. XML elements $mf-&amp;gt;add() calls. XML attributes correspond either to required information, or to set_opt calls. Form filds, like dropdowns, that need extra information get it from child elements. See the examples below for what it looks like.&lt;br /&gt;
&lt;br /&gt;
==A working example==&lt;br /&gt;
&lt;br /&gt;
Here is an example of a form produced with the current (un-cleaned-up) version of the OU&#039;s library. The form looks like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Add_newsfeed_form.png]]&lt;br /&gt;
&lt;br /&gt;
There is some OU-specific stuff here, like presentation and authids, and the fact that we reveal $user-&amp;gt;username to teachers. I am assuming you can filter that out.&lt;br /&gt;
&lt;br /&gt;
More interestingly, notice that&lt;br /&gt;
&lt;br /&gt;
* The required field Name has not been filled it, so its label is red, and the create button is disabled. Below, you will see that anything typed into this field will actually be validated against a regular expression.&lt;br /&gt;
* The user field type does cool AJAX to save you typing the whole name.&lt;br /&gt;
* After you have added one user as a poster, a second box appeared where we could type a second user name. And when we finish typing here, a third box will appear.&lt;br /&gt;
&lt;br /&gt;
The XML defining the form looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editform langfile=&#039;block_newsfeed&#039;&amp;gt;&lt;br /&gt;
     &amp;lt;text name=&#039;location&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;text name=&#039;name&#039; required=&#039;\S&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;text name=&#039;pres&#039; required=&#039;^([0-9]{2}[a-zA-Z]?)?$&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;html name=&#039;summary&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;dropdown name=&#039;type&#039;&amp;gt;&lt;br /&gt;
       &amp;lt;option value=&#039;internal&#039;&amp;gt;type_internal&amp;lt;/option&amp;gt;&lt;br /&gt;
       &amp;lt;option value=&#039;external&#039;&amp;gt;type_external&amp;lt;/option&amp;gt;&lt;br /&gt;
     &amp;lt;/dropdown &amp;gt;&lt;br /&gt;
     &amp;lt;group requiredname=&amp;quot;type&amp;quot; requiredvalue=&amp;quot;external&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;item type=&#039;text&#039; name=&#039;url&#039;/&amp;gt;&lt;br /&gt;
     &amp;lt;/group&amp;gt;&lt;br /&gt;
     &amp;lt;group requiredname=&amp;quot;type&amp;quot; requiredvalue=&amp;quot;internal&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;date name=&#039;startdate&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;dropdown name=&#039;public&#039;&amp;gt;&lt;br /&gt;
           &amp;lt;option value=&#039;1&#039;&amp;gt;access_public&amp;lt;/option&amp;gt;&lt;br /&gt;
           &amp;lt;option value=&#039;0&#039;&amp;gt;access_private&amp;lt;/option&amp;gt;&lt;br /&gt;
         &amp;lt;/dropdown &amp;gt;&lt;br /&gt;
         &amp;lt;text name=&#039;defaultauthid&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;multiple&amp;gt;&lt;br /&gt;
             &amp;lt;text name=&#039;optionalauthids&#039; required=&#039;^([A-Z0-9]+)?$&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;/multiple&amp;gt;&lt;br /&gt;
         &amp;lt;multiple&amp;gt;&lt;br /&gt;
             &amp;lt;user name=&#039;posters&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;/multiple&amp;gt;&lt;br /&gt;
         &amp;lt;multiple&amp;gt;&lt;br /&gt;
             &amp;lt;user name=&#039;approvers&#039;/&amp;gt;&lt;br /&gt;
         &amp;lt;/multiple&amp;gt;&lt;br /&gt;
     &amp;lt;/group&amp;gt;          &lt;br /&gt;
&amp;lt;/editform&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PHP code that creates the form definition ($xf), and the object with all the current values ($form) and sets all the default values looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$xf=xml_form::load_file(&#039;editfeed.xml&#039;);&lt;br /&gt;
$xf-&amp;gt;set_init_html_editor(true);&lt;br /&gt;
$form=new stdClass;&lt;br /&gt;
$newsfeedid=optional_param(&#039;newsfeedid&#039;,0,PARAM_INT);&lt;br /&gt;
if($newsfeedid) {&lt;br /&gt;
    $nf=feed_system::$inst-&amp;gt;get_feed($newsfeedid);&lt;br /&gt;
    $form-&amp;gt;location=$nf-&amp;gt;get_folder()-&amp;gt;get_path();&lt;br /&gt;
    $xf-&amp;gt;set_hidden(&#039;newsfeedid&#039;,$newsfeedid);&lt;br /&gt;
    &lt;br /&gt;
    $form-&amp;gt;name=$nf-&amp;gt;get_name();&lt;br /&gt;
    $form-&amp;gt;pres=$nf-&amp;gt;get_pres();&lt;br /&gt;
    if($form-&amp;gt;pres==null) {&lt;br /&gt;
        $form-&amp;gt;pres=&#039;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    $form-&amp;gt;summary=$nf-&amp;gt;get_summary();&lt;br /&gt;
    if(is_a($nf,&#039;external_news_feed&#039;)) {&lt;br /&gt;
        $form-&amp;gt;type=&#039;external&#039;;&lt;br /&gt;
        $form-&amp;gt;url=$form-&amp;gt;get_url();&lt;br /&gt;
    } else {&lt;br /&gt;
        $form-&amp;gt;type=&#039;internal&#039;;&lt;br /&gt;
        $form-&amp;gt;startdate=$nf-&amp;gt;get_start_date();&lt;br /&gt;
        $form-&amp;gt;public=$nf-&amp;gt;is_public();&lt;br /&gt;
        $form-&amp;gt;defaultauthid=$nf-&amp;gt;get_default_authid();&lt;br /&gt;
        xml_form::set_multiple($form,&#039;optionalauthids&#039;,$nf-&amp;gt;get_optional_authids());&lt;br /&gt;
        xml_form::set_multiple($form,&#039;posters&#039;,$nf-&amp;gt;get_poster_usernames());&lt;br /&gt;
        xml_form::set_multiple($form,&#039;approvers&#039;,$nf-&amp;gt;get_approver_usernames());&lt;br /&gt;
        $form-&amp;gt;newsfeedid=$newsfeedid;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
} else {&lt;br /&gt;
    $folderid=required_param(&#039;folderid&#039;,PARAM_INT);&lt;br /&gt;
    $lf=feed_system::$inst-&amp;gt;get_location_folder($folderid,null);&lt;br /&gt;
    $nf=null;&lt;br /&gt;
    $xf-&amp;gt;set_submit_caption(get_string(&#039;create&#039;));&lt;br /&gt;
    $form-&amp;gt;location=$lf-&amp;gt;get_path();&lt;br /&gt;
    $xf-&amp;gt;set_hidden(&#039;newsfeedid&#039;,0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ... print_header and other boring bits.&lt;br /&gt;
&lt;br /&gt;
print_simple_box_start(&#039;center&#039;);&lt;br /&gt;
$xf-&amp;gt;show(basename(__FILE__), $form);&lt;br /&gt;
print_simple_box_end();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples of converting existing Moodle forms==&lt;br /&gt;
&lt;br /&gt;
These are four example forms that Marting Dougiamas asked to see how we would handle.&lt;br /&gt;
&lt;br /&gt;
===Add resource -&amp;gt; Link to a file or web site===&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Add link resource.png]]&lt;br /&gt;
&lt;br /&gt;
I have taken the liberty of changing the way the window options work on this form. Instead of having a show/hide window settings button, and when that is turned on showing all the options for both same window and new window, I have changed it to be a same window/popup window dropdown, and depending on the setting there, showing or hiding the particular set of options. It would also be possible to use the library to generate the existing form.&lt;br /&gt;
&lt;br /&gt;
This form contains some very specific bits, namely the location field and the parameters sections. For now I have kept the existing code to generate these bits. If fields like the location field were used in other places, we could add a url field type. I don&#039;t see any future in generalising the parameters bit, though the code to generate it could be cleaned up. I just copied and pasted the existing code, and made the minimal changes.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve used a multiselect for the window options. That will require a small change to the response processing code. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mf = moodle_form::loadstring(&#039;&lt;br /&gt;
&amp;lt;editform langfile=&amp;quot;resource&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;text name=&amp;quot;name&amp;quot; help=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;htmlarea name=&amp;quot;summary&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xhtml label=&amp;quot;location&amp;quot;&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
        echo &amp;quot;&amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;reference\&amp;quot; size=\&amp;quot;90\&amp;quot; value=\&amp;quot;$form-&amp;gt;reference\&amp;quot; alt=\&amp;quot;reference\&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
        button_to_popup_window (&amp;quot;/files/index.php?id=$form-&amp;gt;course&amp;amp;amp;choose=form.reference&amp;quot;, &amp;quot;coursefiles&amp;quot;, $xmlform[&#039;strchooseafile&#039;], 500, 750, $xmlform[&#039;strchooseafile&#039;]);&lt;br /&gt;
        echo &amp;quot;&amp;lt;input type=\&amp;quot;button\&amp;quot; name=\&amp;quot;searchbutton\&amp;quot; value=\&amp;quot;$xmlform[&#039;strsearch&#039;] ...\&amp;quot; &amp;quot;.&lt;br /&gt;
             &amp;quot;onclick=\&amp;quot;return window.open(&#039;$CFG-&amp;gt;resource_websearch&#039;, &#039;websearch&#039;, &#039;menubar=1,location=1,directories=1,toolbar=1,scrollbars,resizable,width=800,height=600&#039;);\&amp;quot; /&amp;gt;\n&amp;quot;;&lt;br /&gt;
        if ($CFG-&amp;gt;resource_allowlocalfiles) {&lt;br /&gt;
            button_to_popup_window (&amp;quot;/mod/resource/type/file/localfile.php?choose=form.reference&amp;quot;, &lt;br /&gt;
            &amp;quot;localfiles&amp;quot;, get_string(&#039;localfilechoose&#039;, &#039;resource&#039;), 400, 600, &lt;br /&gt;
            get_string(&#039;localfilechoose&#039;, &#039;resource&#039;));&lt;br /&gt;
        }&lt;br /&gt;
    ]]&amp;gt;&amp;lt;/xhtml&amp;gt;&lt;br /&gt;
    &amp;lt;url name=&amp;quot;location&amp;quot; showuploadbutton=&amp;quot;1&amp;quot; showsearchbutton=&amp;quot;1&amp;quot; help=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;dropdown name=&amp;quot;windowpopup&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&#039;0&#039;&amp;gt;pagewindow&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&#039;1&#039;&amp;gt;newwindow&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/dropdown&amp;gt;&lt;br /&gt;
    &amp;lt;group requiredname=&amp;quot;newwindow&amp;quot; requiredvalue=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;hidden name=&amp;quot;hframepage&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;multiselect name=&amp;quot;framepage&amp;quot; help=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;frameifpossible&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/multiselect&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
    &amp;lt;group requiredname=&amp;quot;newwindow&amp;quot; requiredvalue=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;multiselect name=&amp;quot;windowoptions&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/multiselect&amp;gt;&lt;br /&gt;
        &amp;lt;integer name=&amp;quot;resource_popupwidth&amp;quot; label=&amp;quot;resource_popupwidth&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;integer name=&amp;quot;resource_popupheight&amp;quot; label=&amp;quot;resource_popupheight&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
    &amp;lt;yesno name=&amp;quot;parameters&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;group requiredname=&amp;quot;newwindow&amp;quot; requiredvalue=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xhtml&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;?php print_string(&amp;quot;parameter&amp;quot;, &amp;quot;resource&amp;quot;) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;?php print_string(&amp;quot;variablename&amp;quot;, &amp;quot;resource&amp;quot;) ?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
for ($i=0; $i &amp;lt; $xmlform[&#039;maxparameters&#039;]; $i++) {&lt;br /&gt;
    echo &amp;quot;&amp;lt;tr&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;td valign=\&amp;quot;top\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;select name=\&amp;quot;parameter$i\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;option value=\&amp;quot;-\&amp;quot;&amp;gt;-- &amp;quot;.get_string(&#039;chooseparameter&#039;, &#039;resource&#039;).&amp;quot; --&amp;lt;/option&amp;gt;\n&amp;quot;;&lt;br /&gt;
    foreach ($xmlform[&#039;parameters&#039;] as $field=&amp;gt;$fieldarr) {&lt;br /&gt;
        if ($fieldarr[&#039;value&#039;] === &amp;quot;optgroup&amp;quot;) {&lt;br /&gt;
            echo &amp;quot;&amp;lt;optgroup label=\&amp;quot;{$fieldarr[&#039;langstr&#039;]}\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
        } elseif ($fieldarr[&#039;value&#039;] === &amp;quot;/optgroup&amp;quot;) {&lt;br /&gt;
            echo &amp;quot;&amp;lt;/optgroup&amp;gt;\n&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            echo &amp;quot;&amp;lt;option value=\&amp;quot;$field\&amp;quot;&amp;quot;;&lt;br /&gt;
            if ($xmlform[&#039;alltextfield&#039;][$i][&#039;parameter&#039;] == $field) {&lt;br /&gt;
                echo &amp;quot; selected=\&amp;quot;selected\&amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            echo &amp;quot;&amp;gt;{$fieldarr[&#039;langstr&#039;]}&amp;lt;/option&amp;gt;\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;&amp;lt;/select&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;/td&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;td valign=\&amp;quot;top\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;parse$i\&amp;quot; value=\&amp;quot;{$xmlform[&#039;alltextfield&#039;][$i][&#039;parse&#039;]}\&amp;quot; alt=\&amp;quot;parameter$i\&amp;quot;/&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;/td&amp;gt;\n&amp;quot;;&lt;br /&gt;
    echo &amp;quot;&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    ]]&amp;gt;&amp;lt;/xhtml&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
&#039;)&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;strchooseafile&#039;, get_string(...));&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;strsearch&#039;, get_string(...));&lt;br /&gt;
&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;maxparameters&#039;, $this-&amp;gt;maxparameters);&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;parameters&#039;, $this-&amp;gt;parameters);&lt;br /&gt;
$mf-&amp;gt;set_xhtml_param(&#039;alltextfield&#039;, $alltextfield); // Assuming that this code is after the end of setup() in mod\resource\type\file\resource.class.php&lt;br /&gt;
&lt;br /&gt;
$winopt = $mf-&amp;gt;get(&#039;windowoptions&#039;);&lt;br /&gt;
foreach ($RESOURCE_WINDOW_OPTIONS as $optionname) {&lt;br /&gt;
    $defaultvalue = &amp;quot;resource_popup$optionname&amp;quot;;&lt;br /&gt;
    $form-&amp;gt;$optionname = $CFG-&amp;gt;$defaultvalue;&lt;br /&gt;
    if ($optionname != &#039;height&#039; &amp;amp;&amp;amp; $optionname != &#039;width&#039;) {&lt;br /&gt;
        $winopt-&amp;gt;add_option($optionname, &amp;quot;str$optionname&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add quiz===&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Add quiz form.png]]&lt;br /&gt;
&lt;br /&gt;
To convert this form, we need to do something special for the &amp;quot;students may review&amp;quot; bit. You could either invent an new &amp;lt;optiongrid&amp;gt; type, which would be quite easy to implement. That is the option used below. Alternatively, you could use the feature for including arbitrary HTML and PHP in the form, and keep the existing code for generating this part of the form. Since the existing layout breaks when you make the browser window narrow, as in the screenshot, I would be inclined to redo it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mf = moodle_form::loadstring(&#039;&lt;br /&gt;
&amp;lt;editform langfile=&amp;quot;quiz&amp;quot; help=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;text name=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;htmlarea name=&amp;quot;introduction&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;date name=&amp;quot;available&amp;quot; label=&amp;quot;quizopen&amp;quot; optional=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;date name=&amp;quot;due&amp;quot; label=&amp;quot;quizclose&amp;quot; optional=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;real name=&amp;quot;timelimit&amp;quot; lableafter=&amp;quot;minutes&amp;quot; helpalt=&amp;quot;quiztimer&amp;quot; optional=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;dropdown name=&amp;quot;questionsperpage&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&#039;0&#039;&amp;gt;unlimited&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;!-- other options will be added programmatically --&amp;gt;&lt;br /&gt;
    &amp;lt;/dropdown&amp;gt;&lt;br /&gt;
    &amp;lt;yesno name=&amp;quot;shufflequestions&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ... skipping the next few boring fields ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;optiongrid name=&amp;quot;reviewoptions&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;col name=&amp;quot;responses&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;col name=&amp;quot;scores&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;col name=&amp;quot;feedback&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;col name=&amp;quot;answers&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;row name=&amp;quot;immediately&amp;quot; lable=&amp;quot;reviewimmediately&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;row name=&amp;quot;open&amp;quot; lable=&amp;quot;reviewopen&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;row name=&amp;quot;closed&amp;quot; lable=&amp;quot;reviewclosed&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/optiongrid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ... skipping the next few boring fields ... --&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;groupmode/&amp;gt;&lt;br /&gt;
    &amp;lt;visible/&amp;gt;&lt;br /&gt;
&#039;)&lt;br /&gt;
$questionsperpage =&amp;amp; $mf-&amp;gt;get(&#039;questionsperpage&#039;);&lt;br /&gt;
for ($i = 1; $i &amp;lt;= 50; $i += 1) {&lt;br /&gt;
    $questionsperpage-&amp;gt;add_option($i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This does not take into account the settings on http://&#039;&#039;example.com&#039;&#039;/moodle/admin/module.php?module=quiz, which lets the admin move certain quiz options to be hidden behind an &amp;quot;advanced&amp;quot; option. To implement this you would need to add a show/hide advanced control (I would do this as a &amp;lt;yesno name=&amp;quot;showadvanced&amp;quot;/&amp;gt;, and an empty advanced group, then use some PHP code like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fix = 0;&lt;br /&gt;
$advgroup = $mf-&amp;gt;get_field(&#039;advanced&#039;);&lt;br /&gt;
&lt;br /&gt;
if ($CFG-&amp;gt;quiz_fix_timelimit) {&lt;br /&gt;
    $item = &amp;amp;$mf-&amp;gt;remove(&#039;timelimit&#039;);&lt;br /&gt;
    $advgroup-&amp;gt;add($item)&lt;br /&gt;
    $fix = 1;&lt;br /&gt;
}&lt;br /&gt;
// ... and so on, for all the other options. Or you could try to be clever &lt;br /&gt;
// and do this as a loop over an array of field names ... then&lt;br /&gt;
if (!$fix) {&lt;br /&gt;
    $form-&amp;gt;remove(&#039;showadvanced&#039;);&lt;br /&gt;
    $form-&amp;gt;remove(&#039;advanced&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add database===&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Add_database_form.png]]&lt;br /&gt;
&lt;br /&gt;
I won&#039;t type out full code for this example most of it is simple, and it should be clear how to do it given the above examples, just comment on a couple of things:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entries required before viewing&#039;&#039;&#039; I assume this is only indented because the label is so long that having it all lined up would break the table layout. I think our code using CSS for layout just word-wraps long labels and keeps everything aligned, which I think is better.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allow posts to be rated?&#039;&#039;&#039; I would put the disabled controls in a group that only appears if the checkbox is checked, so that those controls show and hide, rather than enabling or disabling. However, if we want to keep this the same as it is now, you could implemnt the conditionalenable group type.&lt;br /&gt;
&lt;br /&gt;
===Manage groups for a course===&lt;br /&gt;
&lt;br /&gt;
This sort of form is currently beyond what the form library was designed to produce. I would leave this as hand-coded HTML. In time, the form library may gain some AJAX field types for selecting students, and such like, that could usefully be within a redesigned version of this form. Since the form field types just output HTML and Javascript, it should be possible to use them within hand-crafted forms.&lt;br /&gt;
&lt;br /&gt;
[[Image:Formproposal_Groups_form.png]]&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
&lt;br /&gt;
Do we need a syntax like lable=&#039;langfile:langstring&#039; for using lang strings from other lang files where necessary? &#039;&#039;&#039;yes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Where does this live. I think the main library file that people have to include should be lib/formlib.php, and that is all anyone needs to include. However, to we break each field type into its own PHP file, perhaps in a lib/formlib directory, to make it easier to add new field types in future? &#039;&#039;&#039;Probably all in one file&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Some form fields will need bits of CSS and JavaScript to work. Do we add the CSS to the standard theme, and combine all the javascript into a single library somewhere, or do we break it up into the individual field types, and recombine it dynamically at runtime? I think I favour breaking up the PHP code, but keeping all the JS and CSS in one place. &#039;&#039;&#039;Should use YUI were possible. We will still need some custom JavaScript and CSS though. Where?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do we use this for vaidation as well? &#039;&#039;&#039;Yes.&#039;&#039;&#039; Currently Moodle PHP files that do forms tend to look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$var1 = require/optional_param(...);&lt;br /&gt;
// etc. for all the other form variables.&lt;br /&gt;
&lt;br /&gt;
if (data_submitted &amp;amp;&amp;amp; confirm_sesskey()) {&lt;br /&gt;
   // Try to process submitted data.&lt;br /&gt;
   if (/*processing ok*/)&lt;br /&gt;
	   // Redirect away&lt;br /&gt;
} else {&lt;br /&gt;
   // Set initial form values.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lots of code to output the form HTML. Of maybe include(somthing.html);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The proposal is to change this to something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$mf = new moodle_form();&lt;br /&gt;
// Setup $mf with the form structure&lt;br /&gt;
&lt;br /&gt;
$form = new stdClass;&lt;br /&gt;
if ($mf-&amp;gt;validate_submitted_data($form)) { // Pass by reference to get data back.&lt;br /&gt;
   // Try to process submitted data in $form&lt;br /&gt;
   if (/*processing ok*/)&lt;br /&gt;
	   // Redirect away&lt;br /&gt;
} else {&lt;br /&gt;
   // Set initial values in $form&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$mf-&amp;gt;display($form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Obsolete - Moodle forms library]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=User_talk:Helen_Foster&amp;diff=47695</id>
		<title>User talk:Helen Foster</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=User_talk:Helen_Foster&amp;diff=47695"/>
		<updated>2008-12-04T13:11:08Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: New section: Suggestion that is probably total overkill&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Documentation for different versions ==&lt;br /&gt;
&lt;br /&gt;
Helen&lt;br /&gt;
&lt;br /&gt;
Is there a mechanism for specifying which version of Moodle a particular document refers to?  If, for instance, a feature is only available in version 1.6, how would a 1.5.3 user know they couldn&#039;t follow these instructions?&lt;br /&gt;
&lt;br /&gt;
Equally, if something is done differently in two versions, how would we stop an edit war breaking out between 1.5.3 and 1.6 users?&lt;br /&gt;
&lt;br /&gt;
I appreciate this probably isn&#039;t an issue just yet, but it&#039;s possible it may become one in later versions.&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
[[User:CHRISF|CHRISF]] 19:20, 1 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi ChrisF, thanks for highlighting the issue of differences in Moodle versions. Perhaps a Moodle 1.6 template, inserted using the code &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Moodle 1.6}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, may be used to show features specific to Moodle 1.6. What do you think? --[[User:Helen|Helen]] 04:22, 4 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Good idea.  I think that would clear it up nicely.  [[User:CHRISF|CHRISF]] 18:08, 7 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Template styles ==&lt;br /&gt;
Hi Helen! I noticed that you reverted my edits on [[Template:Book]] and [[Template:Assignments]]. You were right -- I didn&#039;t realise that the [[MoodleDocs:Styling|style]] doesn&#039;t match [[MoodleDocs:Style guide|moodle.org style]]. However, the current template doesn&#039;t look right either. It should float to the right instead of occupying a substantial part of the upper screen (for eg. on [[Calculated question developer docs]] page) -- this wil provide easier navigation. Also, the tempalate should be colorful and/or bordered -- this looks more attractive and the reader can understand that it is not a part of the article. May be we can have orange or similar colored templates (such as [[Template:Large Installations]] and [[Template:excerpted from Jason Cole]]) that match with moodle.org style? Is there any official style documentation? Is there a moodle.org style guide which describes styles for templates -- I couldn&#039;t find one? [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 17:40, 30 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi Utkarshraj, thanks for your contributions to Moodle Docs. As you&#039;ve found, [[MoodleDocs:Style guide]] and [[MoodleDocs:Styling]] contain all the Moodle Docs styling documentation to-date. Please add your comments about template styling to [[MoodleDocs talk:Styling]]. --[[User:Helen Foster|Helen Foster]] 17:26, 31 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Thank you! I&#039;ve started the discussion at [[MoodleDocs talk:Styling]]. [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 19:14, 31 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:::LoL, I just realized that the problem is not with the templates, but with themes. Templates just look find with the MoodleDocs theme, but when I am logged in, I use MonoBook theme -- it doesn&#039;t display them as right-aligned (at Wikipedia, we explicity make the templates right-aligned). Sorry for wasting your time! [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 14:44, 18 April 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Removing erroneous pages ==&lt;br /&gt;
&lt;br /&gt;
How can unsuitable pages be removed? I just found [[RHLANGUAGE]] which is not documentation-quality...&lt;br /&gt;
Maybe you could do it (please) Helen? Not sure.&lt;br /&gt;
&lt;br /&gt;
Best, Dan&lt;br /&gt;
--[[User:Dan Stowell|Dan Stowell]] 04:24, 4 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Thanks Dan, for future reference please add the deletion template, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Deletion}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, to any unsuitable page you find. --[[User:Helen Foster|Helen Foster]] 04:45, 5 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Moodle Doc Is Great ==&lt;br /&gt;
&lt;br /&gt;
You have done a great job and inspired me to use Media Wiki!&lt;br /&gt;
&lt;br /&gt;
:Thanks Martin, though it&#039;s everyone&#039;s contributions that make Moodle Docs a great resource! --[[User:Helen Foster|Helen Foster]] 06:36, 24 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== tr wiki ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
Can you arrange for a wiki https://docs.moodle.org/tr (Türkçe) to be set up.&lt;br /&gt;
&lt;br /&gt;
:Thanks Ethem, I&#039;ll do so as soon as possible. --[[User:Helen Foster|Helen Foster]] 17:12, 15 June 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Word Censorship Page ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen, &lt;br /&gt;
&lt;br /&gt;
Note sure why you deleted some of this page. The idea is (partly) to provide instructions on how to use the settings page of the filter. You also removed the &#039;see also&#039; back to the main filters administration page. I&#039;m not sure what&#039;s wrong with that either. Your advice appreciated :-)&lt;br /&gt;
&lt;br /&gt;
--[[User:Howard Miller|Howard Miller]] 22:54, 20 June 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Oh, sorry Howard for not explaining my changes to [[Word censorship]]. I deleted text duplicated on the Word censorship settings page in Moodle and removed the See also link since [[Filters]] is listed in [[:Category:Filter]]. However, please feel free to revert any/all of my changes. Your contributions to the documentation are always appreciated :-) --[[User:Helen Foster|Helen Foster]] 17:03, 21 June 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::That&#039;s cool Helen. So is that the rule - don&#039;t put stuff in the docs that is already in the built-in help?? --[[User:Howard Miller|Howard Miller]] 18:15, 21 June 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:::The [http://moodle.org/help.php?file=index.html Moodle help files] will remain in each language pack and so it is not necessary to include their text in this documentation, however sometimes it makes things clearer to do so, at least to start with. --[[User:Helen Foster|Helen Foster]] 15:46, 22 June 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Contrib code documentation ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
Where would you suggest I document contrib code. I have some documentation for the Moodle for Mobiles project which installs in {yourmoodleroot}/mobile The code is in cvs in contrib/mobile. It is general documentation about what MFM does.&lt;br /&gt;
&lt;br /&gt;
I guess the place to put it would be https://docs.moodle.org/en/mobile&lt;br /&gt;
&lt;br /&gt;
Jamie&lt;br /&gt;
&lt;br /&gt;
:Hi Jamie, actually the project already has a page, [[Moodle for Mobiles]] ;-) though [[mobile]] could redirect to it. You&#039;re also welcome to use any documentation pages linked to Moodle for Mobiles pages in Moodle 1.6. --[[User:Helen Foster|Helen Foster]] 15:56, 22 June 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Thanks Helen!! Adding the documentation now. Will redirect from mobile as well. [[User:Jamie Pratt|Jamie Pratt]] 16:08, 22 June 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:::Cool Helen you did the redirect for me. Thanks for your very speedy response to my enquiry and all your help! -- [[User:Jamie Pratt|Jamie Pratt]] 16:22, 22 June 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Chinese Moodle Documentation==&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
I&#039;d like to launch the Chinese Moodle Documentation translation. As I know, MediaWiki has the function that convert charset between Simplified Chinese(GB2312, GB18030) and Traditional Chinese(BIG5). So maybe it&#039;s no need to create two. &lt;br /&gt;
&lt;br /&gt;
Now I&#039;m a translator of moodle and maintain a special moodle Chinese version.&lt;br /&gt;
&lt;br /&gt;
--[[User:Sun Sunner|Sun Sunner]] 21:31, 22 July 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi Sun, thanks for your offer. I&#039;ll be in touch soon. --[[User:Helen Foster|Helen Foster]] 19:42, 23 July 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Spam or what ever you call it in MoodleDocs ==&lt;br /&gt;
&lt;br /&gt;
Yikes, I just looked at Tips and Tricks and your reversal a while back.  I am too lazy/dumb to look, how often do you have to do that? That is not nice.  And since I can never give you enough praise,  THANKS ! --[[User:chris collman|chris collman]] 02:08, 31 July 2006 (WST) today and yesterday&lt;br /&gt;
&lt;br /&gt;
== Brazilian Portuguese Documentation ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen, we have met at MoodleMoot - i am coordinating the PT_BR translation and would like to launch the Wiki version in Português Brasileiro, starting with the documentation files. No problem with Wikis, i am already the admin of another wikimedia site. Our Moodle.org site has more than 400 people collaborating and i hope to get everybody involved in this new project!&lt;br /&gt;
--[[User:Paula de Waal|Paula de Waal]] 02:02, 1 August 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Went through teacher documentation links ==&lt;br /&gt;
Hi Helen, before I ran off on vacation (holiday to you :) for a week ) you will notice I did some editing and adjusting.   My focus was on what I consider the first impression a new teacher gets when they enter MoodleDocs.  Thus I went through most of the links in the text in the teacher documentation page.   I also put in some cross links via &amp;quot;see also&amp;quot; and added some images (yeah not real happy see below). &lt;br /&gt;
&lt;br /&gt;
I would really like us (notice that pronoun) to think about how to made the teacher documentation page look like the administrator documention or developer documentation pages.   I would copy the entire contents of the current teacher doc page to a new &amp;quot;course documentation&amp;quot; page. The major task is figuring out the sections for the new teacher doc page, so they function like the admin doc page. That kind of big thinking is just a bit beyond me before vacation perhaps you know of someone who would love that task?&lt;br /&gt;
&lt;br /&gt;
Changing the teacher doc page also means doublechecking other pages that were linked to it and  figuring out it they should point to the new course doc page. I could do that.&lt;br /&gt;
&lt;br /&gt;
Images, I am still feel akward.   I tried a floating table. I tried using thumb, resizing the images with a px and alignment.   I still can&#039;t figure out an easy way to force a section break so it will not appear to one side of the image, but rather below it.  I used a lot of  br .   The thumb resize method works but the quality of the image is not so hot.  Better to   have the file the correct size to begin with, but then we might have to have multiple files of the same image in different sizes.  &lt;br /&gt;
&lt;br /&gt;
Keep up the great work.  --[[User:chris collman|chris collman]] 22:43, 11 August 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Thanks for sorting out the question type documentation ==&lt;br /&gt;
&lt;br /&gt;
That really needed doing. --[[User:Tim Hunt|Tim Hunt]] 11:28, 11 September 2006 (CDT)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wowie Zowie  Helen &#039;&#039;&#039;- oh yeah, that is what we are talking about!   And ditto the thanks to Tim, it will take me a while to switch my head to having lesson questions and quiz questions able to come from the same place (bank).  I will be checking and changing links, away from Question types to specific pages on the Question Bank list.  --[[User:chris collman|chris collman]] 05:33, 12 September 2006 (CDT)  &lt;br /&gt;
&lt;br /&gt;
:Thanks Tim, and a big THANK YOU for your work on the [[Quiz module]]. --[[User:Helen Foster|Helen Foster]] 03:04, 12 September 2006 (CDT)&lt;br /&gt;
&lt;br /&gt;
Joseph and Chris, thanks for your additional comments, which I&#039;ve moved to [[Talk:Question types]] --[[User:Helen Foster|Helen Foster]] 02:23, 9 October 2006 (CDT)&lt;br /&gt;
&lt;br /&gt;
==mod/helps and redirects in MoodleDocs==&lt;br /&gt;
Hi Helen,  I need some big picture confirmation, the view wiki page comment raised a little red flag ontop of my Marblehead as dawn seemed to break here in the Great Granite State once again.  &lt;br /&gt;
&lt;br /&gt;
I try to not get into help pages because I understood those were  &amp;quot;Please don&#039;t edit&amp;quot; pages (and responsibility of developer), which makes a lot of sense, especially with new features. Also Help files have a different format (for example no images or examples of use) because of their in context purpose.  What are my guidelines when something is redirected from what I assume is an online help page link like &amp;quot;mod/wiki/helpsome topic&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
I am happy to edit and reorganize and add screen shots etc because I am pretty confident now in my edits and reformats (thank you very much and others who follow me around teaching me where to pay attention). When I see a redirect from help, I would like to assume somebody is going to write the help page after the MoodleDoc page has been created.  The redirect is the as a sort of &amp;quot;in the meantime&amp;quot;.   Same question: is this a good assumption to guide my editing?&lt;br /&gt;
&lt;br /&gt;
 I confess, reading some Moodle help pages causes me to wince, and (just like that pesky&lt;br /&gt;
 version of the lesson demo with the innapropriate cluster) they keep returning like an old&lt;br /&gt;
 tooth ache.  One of my todo&#039;s is to figure out the priorities of rewriting help pages on our&lt;br /&gt;
 production Moodles .  So in the meantime, I pretend all tooth aches are in another world :)  &lt;br /&gt;
&lt;br /&gt;
I am having entirely too much fun this morning, sorry for the lengthy post--[[User:chris collman|chris collman]] 06:28, 7 November 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
==Quizzes and Questions==&lt;br /&gt;
Hi Helen, this could me being confused, but if I am confused......&lt;br /&gt;
Example scenario, you go to the Quiz page and you wanted to know about quiz import/export (or worse still you didn&#039;t know it existed) that option doesn&#039;t exist on the menu. I know why - it&#039;s because that isn&#039;t part of the Quizzes &#039;group&#039; (is that the right word? those double squiggly bracket things at the top of the page). It&#039;s part of the Questions group. I&#039;m struggling big time to see how the two knit together - I&#039;m not sure that they do! --[[User:Howard Miller|Howard Miller]] 10:42, 1 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Howard, the reason why quiz and question pages have different templates is because questions may be used in [[Lesson module|lessons]] as well as quizzes. I&#039;ve started adding a few question links to the page [[Editing a quiz]]. Please feel free to add more links wherever appropriate, thanks :-) --[[User:Helen Foster|Helen Foster]] 12:45, 3 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
== Those squiggly bracket thingies ==&lt;br /&gt;
Actually I can&#039;t find any documentation *anywhere* for those double-squiggly-bracket things at the top of many pages. Can we get something in the edit instructions please :-) --[[User:Howard Miller|Howard Miller]] 11:09, 1 December 2006 (CST)&lt;br /&gt;
Oh they&#039;re templates - I&#039;ll shut up now !!!!  --[[User:Howard Miller|Howard Miller]] 11:12, 1 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Howard, glad you found the templates info in [[MoodleDocs:Style guide]]. Please feel free to add something on templates to [[Help:Editing]] too ;-) --[[User:Helen Foster|Helen Foster]] 12:35, 3 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
== Page rename please ==&lt;br /&gt;
&lt;br /&gt;
Helen, please can we rename [[Numerical_question_units_and_intervals]] to have a Development: prefix please. Thanks.&lt;br /&gt;
&lt;br /&gt;
:Done, thanks Tim. Any more pages to be renamed? --[[User:Helen Foster|Helen Foster]] 01:02, 2 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
Yes please, another one: can we rename [[Development:OM Protocol]] to [[Development:Open protocol for accessing question engines]], and change [[Development:Opaque]] to point to the new name too. Thanks 08:30, 4 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
Wow! That was fast![[User:Tim Hunt|Tim Hunt]] 09:22, 4 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
Another one please: [[Cleanups_required_in_the_quiz_and_question_bank]] -&amp;gt; [[Development:Required quiz cleanups]] or similar.&lt;br /&gt;
&lt;br /&gt;
== MoodleDocs in Arabic ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
I&#039;m Intrested in starting MoodleDocs in Arabic ... would you please provide a directory for Arabic (ar) language&lt;br /&gt;
&lt;br /&gt;
Many Thanks&lt;br /&gt;
&lt;br /&gt;
:Hi, thanks for your offer. Assuming you&#039;ve read [[MoodleDocs:Starting MoodleDocs|starting Moodle Docs in another language]], please email &#039;&#039;docs@moodle.org&#039;&#039;, stating how many people are interested in contributing and who is willing to be an administrator. --[[User:Helen Foster|Helen Foster]] 10:15, 12 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==template of templates ==&lt;br /&gt;
Hi wonderful Helen,&lt;br /&gt;
https://docs.moodle.org/en/User:chris_collman/sandbox1#Given_the_above&lt;br /&gt;
&lt;br /&gt;
*I tried creating the above template, which I thought might be useful in Teacher Documentation.  &lt;br /&gt;
*I am also playing around in my sandbox1 with formating a page of templates that will automatically adjust.  This might be beyond my skill at the moment but why not?   I am looking at the difference between the administrator page and the teacher page off the documentation link.   Think the &amp;quot;Given the above&amp;quot; might be useful for those one step beyond not &#039;noing &lt;br /&gt;
anything. I was thinking of sub title (which would have an index) for each module, that would show the template. &lt;br /&gt;
&lt;br /&gt;
* where or how can I find a list of templates in MoodleDocs.  &lt;br /&gt;
&lt;br /&gt;
Best Chris--[[User:chris collman|chris collman]] 20:42, 23 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Chris, here&#039;s a list: [[Special%3AAllpages&amp;amp;from=&amp;amp;namespace=10|All pages (Template namespace)]]. Thanks, as always, for your contributions :-) --[[User:Helen Foster|Helen Foster]] 16:44, 25 December 2006 (CST)&lt;br /&gt;
::I am surprised that there are not more.  I will try to create one but only put it &amp;quot;off the beaten track&amp;quot; and will ask your opinion.  Thanks, and I appreciate all YOUR work. Happy Holidays. --[[User:chris collman|chris collman]] 16:55, 26 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
=== How about this ===&lt;br /&gt;
*[[:Template:Teacher documentation]]&lt;br /&gt;
I first thought this would be a list of other templates.  Now it it more than that.  Not sure, seems to long.&lt;br /&gt;
&lt;br /&gt;
I would put this on the [[Teacher documentation]] page for starters.   If you think this is too long then there are 3 options. 1) don&#039;t use it, 2)Keep it as is and see what reaction is, 3) Only have Resources, Activities and Teacher Admin template links (for lack of a better name, to contain course, reports, enrollment, maybe blocks), showing up here.   There is already a resources template.  I could create a Resources and Teacher Admin templates.  &lt;br /&gt;
&lt;br /&gt;
Hope you are having a nice holiday --[[User:chris collman|chris collman]] 13:57, 28 December 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Chris, sorry I didn&#039;t see your Teacher documentation template before now. It looks great :-) Please go ahead and put it on the [[Teacher documentation]] page. --[[User:Helen Foster|Helen Foster]] 04:07, 16 January 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
== SUSE Linux Server 10 shell script ==&lt;br /&gt;
https://docs.moodle.org/en/SUSE_Linux_Server_10 by Alex Inman contains a link to whitfieldschool.org which downloads a shell script. The script looks like it requires root priviledges to run. From a security point, this is worrying - is there anything that can be done to quarantine the page until someone can verify (or preferably ask Alex if the install can do without the script altogether)? --[[User:Ken Wilson|Ken Wilson]] 17:24, 7 January 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Ken, thanks for your comments which have been moved to [[Talk:SUSE Linux Server 10]]. Hopefully Alex will respond soon. --[[User:Helen Foster|Helen Foster]] 05:30, 9 January 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
== Norwegian version ==&lt;br /&gt;
&lt;br /&gt;
Hi!&lt;br /&gt;
Could you make a /no/Hovedside site where we could start editing Norwegian documentation.&lt;br /&gt;
I&#039;ve sent you a message in the Moodlesystem as well.&lt;br /&gt;
&lt;br /&gt;
KR&lt;br /&gt;
John Harald&lt;br /&gt;
&lt;br /&gt;
:Hi John Harald, thanks for your offer. I&#039;ll be in touch soon. --[[User:Helen Foster|Helen Foster]] 04:15, 16 January 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Development:&amp;quot; Prefix ==&lt;br /&gt;
&lt;br /&gt;
I have noticed that names many of the articles in the Developer Category are prefixed with the word Development while others are not.  Ain&#039;t this inconsistent?&lt;br /&gt;
&lt;br /&gt;
[[User:vikram solia|vikram solia]] 20:53, 6 February 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Vikram, thanks for your comments. There are no doubt more pages in [[:Category:Developer]] which require the Development prefix - the documentation wiki is a work in progress ;-) However, I don&#039;t think that all pages should be prefixed, as some pages are of interest to non-developers too, for example [[Themes]]. --[[User:Helen Foster|Helen Foster]] 03:54, 7 February 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
::In fact, wouldn&#039;t it be better if Development was a suffix and not a prefix as that would allow articles to be listed under their appropriate alphabet instead of getting aggregated under &#039;D&#039; due to the &#039;Development&#039; prefix. -- [[User:vikram solia|vikram solia]] 11:45, 7 February 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
:::The reason it&#039;s a prefix is that it makes it the [[Special%3AAllpages&amp;amp;from=&amp;amp;namespace=100|Development namespace]], which may be searched separately from the main namespace. Regarding the listing of pages in [[:Category:Developer]], this is reported as [http://tracker.moodle.org/browse/MDLSITE-96 bug MDLSITE-96] and awaits fixing ;-) --[[User:Helen Foster|Helen Foster]] 10:39, 8 February 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
==Lesson demo update==&lt;br /&gt;
Hi Helen, just realized when I sent you a message in your Moodle site, I did not reference that I was talking about what I had done there.   Figure you will look here before there.  I am slowly making progress.  - Best  Chris--[[User:chris collman|chris collman]] 17:26, 3 April 2007 (CDT)&lt;br /&gt;
::This project fell off my &amp;quot;daily chip away at it&amp;quot; list and I think I was within 4 hours of having an improved lesson topic section for demo.moodle.org  ready for the sharks to tear apart &amp;lt;grin&amp;gt;  I even made a special out of the way [[User:chris_collman/LessonDemo1|Lesson Demo]] page  in MoodleDocs! FYI: I am going to find what I was working on back in April, restore it to 1.9 localhost and pick up the ball again.  I will be asking you for a public sandbox 1.9 when I get it together.  I apologize.  Thanks to HOP this hit me over the head this morning. Mea cupa --[[User:chris collman|chris collman]] 06:05, 7 December 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
:: FYI; See tracker [http://tracker.moodle.org/browse/MDLSITE-304 MDLSITE-304]. --[[User:chris collman|chris collman]] 16:28, 7 December 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
== Please can you delete Cleanups_required_in_the_quiz_and_question_bank ==&lt;br /&gt;
&lt;br /&gt;
It is obsolete. Lots of it has been done, and the other items now exist as tracker bugs, which is the right place for them. Thanks.[[User:Tim Hunt|Tim Hunt]] 05:22, 23 June 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Done, thanks Tim. --[[User:Helen Foster|Helen Foster]] 06:43, 23 June 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Please fix my typo in a page title ==&lt;br /&gt;
&lt;br /&gt;
I screwed up. Emails notification and confirmation when quizzes are submitted should start Email, singular. There are only links there from the roadmap page, and the quiz template. Sorry for being so careless.&lt;br /&gt;
&lt;br /&gt;
:No problem, it&#039;s now [[Quiz submission email notification]]. --[[User:Helen Foster|Helen Foster]] 12:12, 26 June 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
==Page style question==&lt;br /&gt;
Hi Helen.  I seem to be back to MoodleDocs after a summer away.   &lt;br /&gt;
#I noticed in Lesson forum we had the usual confusion between questions in Lesson or questions in Quiz. I believe we should leave question pages to be primarily about the Quiz module. I did decide that &amp;quot;Tips and tricks&amp;quot; was a good standard place to point out there was a difference.  I made an exception in Multple choice because multianswer is so radically different and created a sub heading.&lt;br /&gt;
#When I got to True/False question, there were bullets in the intro.  I changed it to text to match what I thought was our usual style.  The next page was [[Random Short-Answer Matching question type]], something new to me.  It had the same thing and noticed you had created the page.   &lt;br /&gt;
&amp;lt;nowiki&amp;gt;:)&amp;lt;/nowiki&amp;gt; Is it ok if I a) reformat the opening before any sub heading to text (drop the bullets) and, b) change &amp;quot;respondent&amp;quot; to &amp;quot;student&amp;quot;.  I would like to do these two things when I see it on a page? Maybe I am being too &#039;old fashion&#039; or &#039;provincial&#039;, so I thought I would check.&lt;br /&gt;
Best as always  --[[User:chris collman|chris collman]] 12:30, 31 August 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Import Data to Grade Book ==&lt;br /&gt;
&lt;br /&gt;
I am new to Moodle and I do not know where to ask this.  Please excuse if I am at the wrong place .  I know that I can post  off-line assignment and grade it; Can I use this to import the marks that I have already awarded.  I have these marks in an excel file.  I know I can grade the off-line assignment one student at a time.  Ccan I copy + paste all the data in one step?     &lt;br /&gt;
What can the grade book plus do in this context?  [[User:Sanjay P. K.|Sanjay P. K.]] 06:05, 10 September 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
==Moodle database module - javascript==&lt;br /&gt;
&lt;br /&gt;
I have been trying in vain to find some documentation on using javascript templates in the database module. Could you possibly point me in the direction of how to use this feature? --[[User:Lindsay Magnus|Lindsay Magnus]] 04:27, 24 October 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Hi Lindsay, as far as I know there is not yet any documentation on using JavaScript templates in the database module. Perhaps you could take a look at the JavaScript template in the image gallery preset and/or ask about it in the Using Moodle [http://moodle.org/mod/forum/view.php?id=3505 Database module forum]. Please add anything you discover to [[Database templates]] to hopefully encourage others to contribute documentation too. --[[User:Helen Foster|Helen Foster]] 03:01, 25 October 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
::Thanx Helen, I have put what I have figured so far, I hope it is the type of thing that is useful on moodle Docs --[[User:Lindsay Magnus|Lindsay Magnus]] 06:00, 25 October 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
:::Great! It&#039;s very useful. Thanks Lindsay :-) --[[User:Helen Foster|Helen Foster]] 06:20, 25 October 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Organising New pages ==&lt;br /&gt;
Hi helen,&lt;br /&gt;
I&#039;ve started work on some Wimba pages.  The MoodleDocs links take me through to mod/voicetools/mod, mod/voicetools/index &amp;amp; mod/voicetool/view.  You will see that I have already statred working on /mod.&lt;br /&gt;
#How do I add rename pages so they are more friendly /Wimba/Adding_a_voice_tool for example?&lt;br /&gt;
#Can i create a /Wimba index page?&lt;br /&gt;
#Can i create a Wimba category?&lt;br /&gt;
&lt;br /&gt;
Many thanks&lt;br /&gt;
Matt&lt;br /&gt;
&lt;br /&gt;
:Hi Matt,&lt;br /&gt;
:It&#039;s probably easiest for me to rename pages for you if you let me know the more friendly names (see [http://moodle.org/mod/forum/discuss.php?d=82778&amp;amp;parent=371960 Moodle Docs page renaming] for an alternative method).&lt;br /&gt;
:Regarding creating additional pages, please respect the fact that Moodle Docs is for Moodle documentation. In general, the Moodle Docs link pages should be sufficient. --[[User:Helen Foster|Helen Foster]] 16:25, 14 November 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
::Thanks Helen.  I&#039;ve redirected a third page too, hope I got it right.  I&#039;ve created a wimba overview page in the non-standard modules category as well.&lt;br /&gt;
::Hoping to do some work on the assignment pages this week :-) --[[User:Matt Lingard|Matt Lingard]] 11:21, 19 November 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assign admin ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
The other day, you redirected my &#039;assign admin&#039; page to a different. I was planning to submit this for the High School Open Source competition that google is holding. I havn&#039;t claimed it yet because i wanted to check anything and maybe submit and extra one with it.&lt;br /&gt;
&lt;br /&gt;
This page woul;d have counted as a Documentation Page fixed.&lt;br /&gt;
&lt;br /&gt;
Please reply soon&lt;br /&gt;
&lt;br /&gt;
Michael P&lt;br /&gt;
&lt;br /&gt;
:Hi Michael, thanks for your documentation on assigning admins and good to hear you&#039;re planning on taking part in the Google Highly Open Participation project :-) Please start by claiming a task from the list here: http://code.google.com/p/google-highly-open-participation-moodle/issues/list then if you claim a documentation task I can help you further --[[User:Helen Foster|Helen Foster]] 07:52, 17 December 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
== Change the name of site==&lt;br /&gt;
Hello, could you please change this:&lt;br /&gt;
Dodaj/edytuj kurs&lt;br /&gt;
into this:&lt;br /&gt;
Dodaj/edytuj kursy&lt;br /&gt;
(https://docs.moodle.org/pl/index.php?title=Dodaj/edytuj_kurs)&lt;br /&gt;
:No problem, it&#039;s changed. Thanks for your documentation contribution :-) --[[User:Helen Foster|Helen Foster]] 09:20, 26 December 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
==FAQ mystery==&lt;br /&gt;
I&#039;m not sure when this happened but when you used to do a search for FAQ you got a list of the FAQs (sensible). Now you get an useless category page with nothing in it. I&#039;m unsure why --[[User:Howard Miller|Howard Miller]] 09:23, 8 January 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Howard, the blank category page is a bug - it should display like this: [[:Category:FAQ]]. As a work-around I have listed the  FAQ pages here: [[FAQ]]. --[[User:Helen Foster|Helen Foster]] 10:33, 8 January 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
== Rename request ==&lt;br /&gt;
&lt;br /&gt;
Helen, please could you rename&lt;br /&gt;
&lt;br /&gt;
Development:Plans_for_enhancing_import/export_in_questiontype_plugins&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
Development:Import/export_for_questiontype_plugins&lt;br /&gt;
&lt;br /&gt;
Since Howard has now implemented it.&lt;br /&gt;
&lt;br /&gt;
::Done: [[Development:Import/export for questiontype plugins]]. Thanks Tim and Howard :-) --[[User:Helen Foster|Helen Foster]] 05:24, 11 January 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
I add topic in comunity brazil.&lt;br /&gt;
http://moodle.org/mod/forum/discuss.php?d=88252#p389946&lt;br /&gt;
and add dicussion for Paula de Wall&lt;br /&gt;
https://docs.moodle.org/pt_br/Usu%C3%A1rio_Discuss%C3%A3o:Paula_de_Waal&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Rewording to contributed code ?==&lt;br /&gt;
Hi Helen, Do I understand that you would like to see MoodleSpeak moving towards &amp;quot;contributed code&amp;quot;  and away from &amp;quot;non-standard&amp;quot; ?   Thus Certificate is a &amp;quot;Contributed code module&amp;quot; .  It sounds much more collaborative and MoodleLike AND less like a hack for some proprietary software package.  Good idea even if the ripples are going to be hard to predict !  --[[User:chris collman|chris collman]] 09:19, 3 February 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
:Chris, you&#039;re very observant! Yes, we&#039;re going to rename &amp;quot;non-standard code&amp;quot; as &amp;quot;contributed code&amp;quot; (or &amp;quot;contrib&amp;quot; for short) - see MDLSITE-329. --[[User:Helen Foster|Helen Foster]] 09:49, 15 February 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
==Messy pages and the like==&lt;br /&gt;
Helen, do you think it might be a thought to create a category for &amp;quot;Needing attention&amp;quot; pages. Some pages have become very &amp;quot;messy&amp;quot; and could do with some TLC. It would be handy to mark them when found and then we (or someone) can come back later and fix them. I know it puts a negative blight on a page though.... --[[User:Howard Miller|Howard Miller]] 06:23, 30 March 2008 (CDT)&lt;br /&gt;
:Nice idea, something like a stub.  Suggest whatever it is, be placed on the discussion page, not the main page (my pet peeve with wikipedia and their 1/3 page &amp;quot;improvement&amp;quot; templates). Ooops, Helen does such a great job in curtailing that sort of thing, it must be were I have learned my &amp;quot;attitude&amp;quot;. --[[User:chris collman|chris collman]] 11:49, 30 March 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
::Howard and Chris, thanks for your comments. Would the [[Template:Update|update template]] be suitable, or should we create a &amp;quot;Needing attention&amp;quot; template and category? --[[User:Helen Foster|Helen Foster]] 15:23, 30 March 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
:::Can not speak for Howard, but I have an excuse.  I didn&#039;t look hard enough because I am bald and forever a Newbie :)  That will do fine.  --[[User:chris collman|chris collman]] 06:19, 31 March 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
:::That&#039;s always been there hasn&#039;t it :-)  Yes, that&#039;ll do nicely. --[[User:Howard Miller|Howard Miller]] 03:24, 3 April 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
==Game module==&lt;br /&gt;
Hi, In https://docs.moodle.org/en/Category:Contributed_code the Game module is two times. One time as Hangman and one time as Game. Please delete the Hangman.&lt;br /&gt;
&lt;br /&gt;
:No problem, page deleted as requested. --[[User:Helen Foster|Helen Foster]] 14:56, 3 April 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Romanian help pages ==&lt;br /&gt;
&lt;br /&gt;
Dear Helen,&lt;br /&gt;
&lt;br /&gt;
My company implements Moodle in Cluj, Transylvania, (Romania) we have contracted two Moodle installations at universities in my city. We have to do (anyway) a full Moodle translation to Romanian: the existing one is 10% complete. &lt;br /&gt;
My coworkers will finish it this month, and it will be submitted to translations@moodle.org.&lt;br /&gt;
&lt;br /&gt;
In parallel, we have to ellaborate tutorials for Moodle (in Romanian), which will be assembled as a book. I would like to use this opportunity to translate the great amount of English articles to Romanian &#039;&#039;unsing the MoodleDocs&#039;&#039; framework. I think this can be beneficial to everybody, if you agree.&lt;br /&gt;
&lt;br /&gt;
Best regards,&lt;br /&gt;
&lt;br /&gt;
Marcel&lt;br /&gt;
&lt;br /&gt;
:Hi Marcel,&lt;br /&gt;
&lt;br /&gt;
:Regarding the translation of Moodle into Romanian, I suggest that you inform translation coordinator Koen Roggemans ([mailto:translation@moodle.org translation@moodle.org]) now, rather than after you finish your work.&lt;br /&gt;
&lt;br /&gt;
:Thanks for your offer to start a Romanian Moodle Docs :-) Assuming you&#039;ve read [[MoodleDocs:Starting MoodleDocs|starting Moodle Docs in another language]], please email [mailto:docs@moodle.org docs@moodle.org] stating how many people are interested in contributing and who is willing to be an administrator. --[[User:Helen Foster|Helen Foster]] 09:40, 5 April 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
== SCORM 2004 support - has this materialized? ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
I noticed that you&#039;ve been involved in efforts to make the SCORM/AICC module conformant with SCORM 2004.  Did this effort ever produce results?  We&#039;re thinking of using Moodle on a project that requires SCORM 2004 conformance.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
&lt;br /&gt;
Dan Young&lt;br /&gt;
&lt;br /&gt;
== Can you remove... ==&lt;br /&gt;
&lt;br /&gt;
This page : [[Development:Import questions]] --[[User:Howard Miller|Howard Miller]] 03:47, 11 July 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Done. Thanks Howard --[[User:Helen Foster|Helen Foster]] 08:55, 11 July 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Wiki rights please! ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen! &lt;br /&gt;
&lt;br /&gt;
Would it be possible to get some more editing rights in the wiki?  Particularly being able to move pages would be helpful because I keep forgetting to namespace them in Development:&lt;br /&gt;
&lt;br /&gt;
Ta!&lt;br /&gt;
Penny&lt;br /&gt;
&lt;br /&gt;
:Done. Thanks Penny --[[User:Helen Foster|Helen Foster]] 10:14, 22 July 2008 (CDT)&lt;br /&gt;
==Chris Major page changes - Request reviews==&lt;br /&gt;
&lt;br /&gt;
===Administration block ultimate disambig===&lt;br /&gt;
I may have overstepped my bounds.   I was a little surprised to find so many links.  The list sort of demonstrates why I think Administration block should get a disambig tag.  &lt;br /&gt;
[https://docs.moodle.org/en/index.php?title=Special:Whatlinkshere/Administration_block&amp;amp;limit=500&amp;amp;from=2068 See this list of over 30 pages].&lt;br /&gt;
&lt;br /&gt;
Say yes and I will go through and modify all the disambig links on that page so course and site admin block gets sorted out at the source :)--[[User:chris collman|chris collman]] 08:00, 30 September 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Yes please Chris, that would be wonderful! Thanks for your offer :-) --[[User:Helen Foster|Helen Foster]] 17:02, 30 September 2008 (CDT)&lt;br /&gt;
::OK onto that I go, just for a change of pace--[[User:chris collman|chris collman]] 17:15, 30 September 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Authentication draft ===&lt;br /&gt;
Hi Helen.  Would you check out my draft [[Talk:Authentication#Start_Draft_here|Authentication page]]?  &lt;br /&gt;
&lt;br /&gt;
Best   --[[User:chris collman|chris collman]] 11:01, 24 July 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Hi Chris, please see [[Talk:Authentication]] for my comments on your draft. Again, a big THANK YOU for your ideas and suggestions :-) --[[User:Helen Foster|Helen Foster]] 08:04, 30 July 2008 (CDT)&lt;br /&gt;
::Changed the page, simple and I show links to all 5 submenus.  --[[User:chris collman|chris collman]] 11:15, 30 July 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
=== Upload Users draft ===&lt;br /&gt;
Hi Helen. Would you or somebody check out my draft [[Talk:Upload_users#Proposed_changes_July_2008|Upload users page]] ?  &lt;br /&gt;
Best --[[User:chris collman|chris collman]] 08:51, 25 July 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Hi Chris, as I&#039;m so slow at getting round to reviewing your suggested major page changes, I&#039;ve created a review template and a category - [[:Category:Pages requiring a review]] - to encourage others to help with reviewing! --[[User:Helen Foster|Helen Foster]] 12:07, 29 August 2008 (CDT)&lt;br /&gt;
::You know how I feel about banner like templates that demand  :-)  Here are the positive statements that I will try to follow.  I will use the category so it appears at the bottom of the article page.  &#039;&#039;&#039;If&#039;&#039;&#039; I use any banner like template (except stub), it will appear on the comment page with the proposed revision or comment below it. Thanks for suggestions, my biggest problem is remembering to do it! --[[User:chris collman|chris collman]] 07:22, 30 August 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Where did you find the information about MediaWiki:Loginprompt ==&lt;br /&gt;
&lt;br /&gt;
Oh, and hello! But a question: I really tried to search the MediaWiki manuals on how to change the login prompt, but didn&#039;t find out (or guess) that it is MediaWiki:Loginprompt. I tried MediaWiki:UserLogin. Where did you find that information? In case I need to dig up similar information some other time. (Plus I&#039;m going nuts not finding it :-) --[[User:Samuli Karevaara|Samuli Karevaara]] 22:42, 7 September 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Hi Samuli, Mediawiki&#039;s equivalent to Moodle&#039;s language packs is the [[Special:Allmessages|list of system messages]], available via the special pages link in the toolbox. To change any words or phrases in the interface, just search the system messages and edit the appropriate MediaWiki page. (Note: Only wiki admins can edit MediaWiki pages.) --[[User:Helen Foster|Helen Foster]] 02:48, 8 September 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
::Thanks a bunch! I &#039;&#039;was&#039;&#039; looking at that list also, but somehow didn&#039;t connect the dots. (Click the links, that is...) D&#039;oh. --[[User:Samuli Karevaara|Samuli Karevaara]] 04:59, 8 September 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
== New documentation in Galician ==&lt;br /&gt;
Hi Helen, I would like to start translating MoodleDocs into Galician (gl). I&#039;m familiar with wikis and am willing to become an administrator. [[User:Xosé Calvo|Xosé Calvo]] 02:16, 12 November 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
:Hi Xosé, thanks for your offer. Please email [mailto:docs@moodle.org docs@moodle.org] so I have your contact address. --[[User:Helen Foster|Helen Foster]] 08:47, 14 November 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
== Documentation in Persian (Farsi) ==&lt;br /&gt;
&lt;br /&gt;
Would you please setup a wiki for Persian (Farsi) language?&lt;br /&gt;
&lt;br /&gt;
:Hi, please start by reading [[MoodleDocs:Starting MoodleDocs|starting Moodle Docs in another language]]. --[[User:Helen Foster|Helen Foster]] 08:55, 14 November 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
:: Hi Helen, I already read that page and then wrote to you according to that page. Oh I checked it again right now and am seeing a different procedure. I guess you just updated it. Aren&#039;t you? ;-)&lt;br /&gt;
&lt;br /&gt;
:::You&#039;re very observant Shamim, yes, the page has just been updated. We think it&#039;s most helpful for new Moodlers to have help pop-ups in their own language. Do you agree? --[[User:Helen Foster|Helen Foster]] 05:39, 18 November 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
== Creating new FAQ pages ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen,&lt;br /&gt;
&lt;br /&gt;
I have successfully created a stub for a XML FAQ page (https://docs.moodle.org/en/XML_FAQ) but how do I get it promoted on https://docs.moodle.org/en/Category:FAQ ?&lt;br /&gt;
&lt;br /&gt;
I also would like to create an Import/Export FAQ for collecting all the information regarding Moodle import and export which is scattered in different forums.&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
[[User:Frank Ralf|Frank Ralf]]&lt;br /&gt;
&lt;br /&gt;
:Hi Helen will have to answer the Import/Export question.  I jumped in and added &amp;lt;nowiki&amp;gt;[[Category:FAQ]]&amp;lt;/nowiki&amp;gt; to the bottom of the page, which anyone can do. And took your hint and added a &amp;lt;nowiki&amp;gt;{{stub}}&amp;lt;/nowiki&amp;gt; template at the top.  Thanks for the XML work. Best --[[User:chris collman|chris collman]] 14:16, 3 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
::Hi Frank, thanks for your offer - an [[Import and export FAQ]] page would be great, thanks! --[[User:Helen Foster|Helen Foster]] 04:12, 4 December 2008 (CST)&lt;br /&gt;
:::Thanks to both of you! Helen, how did you get that nice Contents menu on your Import and export FAQ page? I couldn&#039;t figure that out from the source. --[[User:Frank Ralf|Frank Ralf]] 05:30, 4 December 2008 (CST) Problem solved, just found the documentation ;-) --[[User:Frank Ralf|Frank Ralf]] 05:43, 4 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
== Suggestion that is probably total overkill ==&lt;br /&gt;
&lt;br /&gt;
# Create a new FAQ namespace.&lt;br /&gt;
# In this namespace, create one page for each frequent question, where the contents of the page is the answer.&lt;br /&gt;
# Use our new knowledge of transclusions to build the FAQ lists by just pulling in pages from the FAQ namespace.&lt;br /&gt;
&lt;br /&gt;
The benefits of doing this are&lt;br /&gt;
* The same FAQ can appear in more than one list without copying-and-pasting.&lt;br /&gt;
* Each question gets a unique URL that so in the forums, we can point people to a page that just answers their specific question.&lt;br /&gt;
&lt;br /&gt;
Disadvantages&lt;br /&gt;
* Editing FAQ lists becomes incomprehensible to anyone who is not a MediaWiki geek.&lt;br /&gt;
&lt;br /&gt;
If we went this way, I would like to use B to build a new FAQ page: &amp;quot;Troubleshooting FAQ&amp;quot;. Might be a good idea anyway.&lt;br /&gt;
&lt;br /&gt;
I hasten to say that I am not recommending this approach. The disadvantages could easily outweigh the advantages. I am simply pointing out a technical possibility that may be worth considering either now, or in the future.--[[User:Tim Hunt|Tim Hunt]] 07:11, 4 December 2008 (CST)&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Talk:Administrator_documentation&amp;diff=47581</id>
		<title>Talk:Administrator documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Talk:Administrator_documentation&amp;diff=47581"/>
		<updated>2008-12-03T05:49:44Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: Reverted edits by Ambercar (Talk); changed back to last version by Rcollman&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Course Formats==&lt;br /&gt;
Perhaps there should be something on course formats.  We do have several alternatives, such as the hybrid course format (did not Chardelle do that one?  I use it in my 1.5) and accordion.  There are a number that we could reference, similar to the way the &amp;quot;non standard&amp;quot; blocks are set up in this wiki.&lt;br /&gt;
--[[User:awyatt|A. T. Wyatt]]&lt;br /&gt;
&lt;br /&gt;
==Site stats==&lt;br /&gt;
&lt;br /&gt;
There should be a page explaining the site stats (also for teachers).--[[User:N Hansen|N Hansen]] 22:50, 18 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Yes please - [[Site stats]] - we really need documentation for 1.6 features. --[[User:Helen Foster|Helen Foster]] 05:51, 19 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== New User should like this page ==&lt;br /&gt;
I am sure everyone is sick of my new user soapbox.  I think this is A GOOD EXAMPLE of an opening page for a new administrator user.  The Teacher Documentation page could move in this direction. I do appreciate all the hard work everyone is doing here --[[User:chris collman |chris collman]] 00:44, 31 July 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Oracle Documentation ==&lt;br /&gt;
There is next to zero documentation to help out those who want to (or are obliged to) use Oracle.  I&#039;ve managed to set up a moodle1.7 with an Oracle backend in it&#039;s default state, however, it&#039;s default state is not happy with 1.8&#039;s UTF8 requirement (Oracle is using something it calls &amp;quot;WE8MSWIN1252&amp;quot; encoding, not up to scratch for 1.8).  This is more of a how-do-I with Oracle issue than a moodle thing.  But I&#039;d love to keep in touch with other admins using Moodle with Oracle on the b-side.  See also my comments to [[Installing_Oracle_for_PHP]].&lt;br /&gt;
[[User:Bryan Cribbs|Bryan Cribbs]] 22:05, 28 January 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
:is there a mailing list I can join? -bryan&lt;br /&gt;
&lt;br /&gt;
==Logs and Reports==&lt;br /&gt;
I changed the primary administrator page -(yikes will Helen approve?) so instead of saying &amp;quot;logs&amp;quot; under &amp;quot;Other&amp;quot; it now says &amp;quot;Reports (administrator) and Logs&amp;quot;.  I created an &amp;quot;Reports (administrator)&amp;quot; page with links to the 4 sub catagories seen in 1.8.  We could do that here but no other section uses the double bullet format, so I opted to link to another page.  The &amp;quot;Logs&amp;quot; entry will still link to &amp;quot;Logs&amp;quot;.  Back in 1.5 teacher reports were called logs. There were and still are a lot of stubs around the subject of logs/reports.  &lt;br /&gt;
&lt;br /&gt;
So while I am researching this subject for myself, I figured we might as well start to bring MoodleDocs up to the 1.8 standard in this area for new administrators and teachers .  Best --[[User:chris collman|chris collman]] 08:12, 8 September 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Hi Chris, thanks as always for your documentation contributions :-) You&#039;re right about [[Administrator documentation]] needing updating and improving. I&#039;m going to take a look at it too. --[[User:Helen Foster|Helen Foster]] 04:37, 11 September 2007 (CDT)&lt;br /&gt;
:Hi Helen, ditto thanks to you.  I seem to find myself in the Special pages in my hobby time. Orphans and broken and redirects and disambu&#039;s.  Leads to interesting pages and links like I tried to correct.  Best --[[User:chris collman|chris collman]] 12:28, 11 September 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
==Format Change Nov 2008==&lt;br /&gt;
This is a frequently visited page and several screens long. &lt;br /&gt;
*I sort of forgot where I was and created sub headings for the different systems (oops, should have checked with my friends first).   A case sensitive Mac link was broken and it took me a while to make sure I was in the right section. I note that a heading that goes on for two or three screens of scrolling is generally unfriendly.&lt;br /&gt;
*This page is also a candidate for the Table of Contents trick, to improve a quick search. I used the link word &amp;quot;Top&amp;quot; because it is short and sweet. Generally, I think this should/could be placed at the end of a major heading section.   &lt;br /&gt;
&lt;br /&gt;
It is just fine to revert any and all of my changes. I apologize for not making a comment here first and asking for comments before rushing in.  Best to all --[[User:chris collman|chris collman]] 06:21, 17 November 2008 (CST)&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47580</id>
		<title>Question permissions explained with diagrams</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47580"/>
		<updated>2008-12-03T05:46:51Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* 5. Successfully sharing questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==A simple story==&lt;br /&gt;
&lt;br /&gt;
===1. Setting the scene===&lt;br /&gt;
&lt;br /&gt;
For this explanation, we will image we have this very simple Moodle site. There are three courses, all in the Miscellaneous category. The courses have a few activities in them.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions1.png]] &lt;br /&gt;
&lt;br /&gt;
===2. Introducing Fred===&lt;br /&gt;
&lt;br /&gt;
We will focus on a particular user: Fred. Fred is a teacher in two of the courses. In Moodle, everyone gets some permissions throughout the whole Moodle site because they are logged in. Additionally, Fred gets more permissions in the courses he teaches, and all the activities in those courses, because he has the teacher role there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions2.png]]&lt;br /&gt;
&lt;br /&gt;
===3. Using questions in a course===&lt;br /&gt;
&lt;br /&gt;
Fred creates some questions in his maths course and adds them to the quiz. Why does this work?&lt;br /&gt;
&lt;br /&gt;
By default, questions are created in the question bank in a category that belongs to that course. Fred is a teacher in the course. Teachers are allowed to create questions. Therefore Fred can create the questions, and they get stored linked to the course.&lt;br /&gt;
&lt;br /&gt;
The quiz is in the course. Fred is a teacher in the course, so Fred has permission to add questions to the quiz. The quiz is in the course, so the course questions are potentially available. Fred is a teacher in the course, so he is allowed use the questions in the course question bank. Therefore Fred can add the questions to his quiz.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions3.png]]&lt;br /&gt;
&lt;br /&gt;
===4. Trying to share questions===&lt;br /&gt;
&lt;br /&gt;
Fred now wants to reuse some of his questions in his biology course. However, the biology quiz is not in the maths course, so the questions are not available.&lt;br /&gt;
&lt;br /&gt;
So Fred&#039;s friendly Moodle administrator Annie moves the questions into the part of the question bank associated with the category Miscellaneous. Disaster! now Fred can&#039;t see his questions at all. Why not?&lt;br /&gt;
&lt;br /&gt;
Now the questions are outside the course. Fred has no extra permissions outside the course, so he cannot access the questions there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions4.png]]&lt;br /&gt;
&lt;br /&gt;
===5. Successfully sharing questions===&lt;br /&gt;
&lt;br /&gt;
Annie creates a new role &#039;Question user&#039; that allows all the permissions needed to access the question bank. Annie assigns Fred that role in the whole system. Now Fred can see his questions from within both courses, edit them, and add them to his quizzes. Why?&lt;br /&gt;
&lt;br /&gt;
The questions are linked to category Miscellaneous. Miscellaneous is inside the system. Fred is a Question user in the system. Question users can access the question bank. So Fred can access this part of the question bank.&lt;br /&gt;
&lt;br /&gt;
The quizzes are in courses where Fred is a teacher, so Fred is has permission to add questions to the quizzes. The quizzes are in the Miscellaneous category, so the questions in that part of the question bank are potentially available. We have just seen that Fred has permission to access these question. Therefore Fred can add these questions to his quizzes.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions5.png]]&lt;br /&gt;
&lt;br /&gt;
==Summary of the rules==&lt;br /&gt;
&lt;br /&gt;
Questions are stored in the question bank linked to some part of your Moodle system (technically a context). The part of the system might be (and most often is) a course, or a course category, the whole system, or an individual activity.&lt;br /&gt;
&lt;br /&gt;
===To create and editing questions===&lt;br /&gt;
&lt;br /&gt;
you must have the appropriate [[Question_permissions|capability]] in the part of the system where the questions are stored, to have permission to do the corresponding operation (add, edit, ...).&lt;br /&gt;
&lt;br /&gt;
===To adding questions to a quiz===&lt;br /&gt;
&lt;br /&gt;
three checks have to pass:&lt;br /&gt;
# You must have the mod/quiz:manage capability in that quiz, to have permission to add questions to it.&lt;br /&gt;
# The quiz must be inside the part of the system where the questions are stored, in order for the questions to be available in the quiz.&lt;br /&gt;
# You must have the moodle/question:use(all/mine) capability in the part of the system where the questions are stored, to have permission to use those questions.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Question bank]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Questions]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_Engine_Changes_in_Moodle_1.9&amp;diff=47579</id>
		<title>Question Engine Changes in Moodle 1.9</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_Engine_Changes_in_Moodle_1.9&amp;diff=47579"/>
		<updated>2008-12-03T05:44:23Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* More info about changes in Moodle 1.9 can be found on these pages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Questions}}&lt;br /&gt;
{{Moodle 1.9}}&lt;br /&gt;
==General Clean Up of UI and Code==&lt;br /&gt;
&lt;br /&gt;
* Many parts of the question code have been cleaned up. The Quiz / Question UI has some improvements - the category editing page&#039;s table has been replaced by unordered lists and the controls for editing categories have been improved.&lt;br /&gt;
* Question code no longer relies on browser sessions. Before if you had more than one browser window open for editing a quiz / questions navigation would have been unpredictable now you can have several independent browser windows open at once to edit quizzes and questions.&lt;br /&gt;
* Further work has been done on separating the question bank code from the quiz module to make it possible to access questions in the question bank from other modules.&lt;br /&gt;
&lt;br /&gt;
==Better Management of Files Linked to In Questions==&lt;br /&gt;
&lt;br /&gt;
[[Questions linking to files|Since Moodle 1.9 we have some automatic handling of files linked to from questions. When you &#039;&#039;&#039;move questions between sharing contexts&#039;&#039;&#039; and when you &#039;&#039;&#039;back up&#039;&#039;&#039; courses with questions in them, Moodle will now help you manage files linked to in your questions.]]&lt;br /&gt;
&lt;br /&gt;
==Separated Questions into Different Category Hierarchies in Different Context Levels==&lt;br /&gt;
&lt;br /&gt;
Before 1.9 questions were always associated with one course. You could &#039;share&#039; a question to allow it to be visible in another course. Now questions can be shared in an activity, a course, a course category or with the whole system. These different levels of sharing are Moodle &#039;contexts&#039;. More info here [[Question contexts]]&lt;br /&gt;
&lt;br /&gt;
Upon upgrade :&lt;br /&gt;
* a category that was shared will now be in the System context and it will have the course name from which it has been taken appended to the category name in brackets.&lt;br /&gt;
* Questions that were not shared will be put in the course context upon upgrade.&lt;br /&gt;
* The only exception to this is the special case outlined below in [[#Random Questions Selecting from Subcategories]]&lt;br /&gt;
&lt;br /&gt;
==More Granular Capabilities==&lt;br /&gt;
&lt;br /&gt;
Since Moodle 1.9 we have more granular capabilities for access and use of questions see [[Question permissions]] for more info. Question permissions are now tested in the context in which the questions are shared see [[Question contexts]] for more info.&lt;br /&gt;
&lt;br /&gt;
====Upgrade====&lt;br /&gt;
&lt;br /&gt;
On upgrade from an older version of Moodle question capabilities are automatically assigned.&lt;br /&gt;
&lt;br /&gt;
Roles that previously had the moodle/question:manage capability will have :&lt;br /&gt;
&lt;br /&gt;
* [[Capabilities/moodle/question:add|moodle/question:add]]&lt;br /&gt;
* [[Capabilities/moodle/question:editmine|moodle/question:editmine]] / [[Capabilities/moodle/question:editall|editall]]&lt;br /&gt;
* [[Capabilities/moodle/question:viewmine|moodle/question:viewmine]] / [[Capabilities/moodle/question:viewall|viewall]]&lt;br /&gt;
* [[Capabilities/moodle/question:usemine|moodle/question:usemine]] / [[Capabilities/moodle/question:useall|useall]]&lt;br /&gt;
* [[Capabilities/moodle/question:movemine|moodle/question:movemine]] / [[Capabilities/moodle/question:moveall|moveall]]&lt;br /&gt;
&lt;br /&gt;
This will give all users effectively the same permissions as they had previously for questions shared at the course level.&lt;br /&gt;
&lt;br /&gt;
==Potential Issues on Upgrade==&lt;br /&gt;
&lt;br /&gt;
===Access to question categories shared outside a course===&lt;br /&gt;
&lt;br /&gt;
Questions that are shared above the course level may not be available to course teachers. Normally the teacher role is assigned at the course level so the teacher&#039;s capabilities will only cover the course in which they are assigned the teacher role. You must define a new role and assign all users that you want to be able to share questions above the course level that role. You do this by :&lt;br /&gt;
&lt;br /&gt;
* log in as an admin&lt;br /&gt;
* go to Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Define roles&lt;br /&gt;
* click on Add New Role button&lt;br /&gt;
* define a new Role Shared Question Creator&lt;br /&gt;
* give the role these question permissions :&lt;br /&gt;
** [[Capabilities/moodle/question:add|moodle/question:add]]&lt;br /&gt;
** [[Capabilities/moodle/question:editall|moodle/question:editall]]&lt;br /&gt;
** [[Capabilities/moodle/question:viewall|moodle/question:viewall]]&lt;br /&gt;
** [[Capabilities/moodle/question:moveall|moodle/question:moveall]]&lt;br /&gt;
** [[Capabilities/moodle/question:managecategory|moodle/question:managecategory]]&lt;br /&gt;
* and probably also :&lt;br /&gt;
** [[Capabilities/moodle/question:useall|moodle/question:useall]]&lt;br /&gt;
&lt;br /&gt;
You can also create a role &#039;Shared question user&#039;:&lt;br /&gt;
&lt;br /&gt;
* log in as an admin&lt;br /&gt;
* go to Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Define roles&lt;br /&gt;
* click on Add New Role button&lt;br /&gt;
* define a new Role Shared question user&lt;br /&gt;
* give the role these question permissions :&lt;br /&gt;
** [[Capabilities/moodle/question:viewall|moodle/question:viewall]]&lt;br /&gt;
** [[Capabilities/moodle/question:useall|moodle/question:useall]]&lt;br /&gt;
&lt;br /&gt;
Assign the role at the system level to give the user the &#039;Shared question user&#039; /  &#039;Shared Question Creator&#039; permissions in the System context and in all the Course Categories. The user will also have the same permissions in all courses and activities unless you override the permissions at these levels for any of the roles the user has (eg. Teacher / Student etc) a &#039;prevent&#039; at a lower context level will override an allow at the system or course category level. You assign a role at the system level by going to Administration &amp;gt; Users &amp;gt; Permissions &amp;gt; Assign global roles.&lt;br /&gt;
&lt;br /&gt;
You can also assign a role at the course category level by going to Administration &amp;gt; Courses &amp;gt; Add/edit courses and clicking on one of the course category names and then clicking on the Assign Roles link to the top right of the screen. The role will apply to all contained course categories and also to all courses / activities contained.&lt;br /&gt;
&lt;br /&gt;
===Random Questions Selecting from Subcategories===&lt;br /&gt;
&lt;br /&gt;
[[Image:randomquestionenvironmentcheck.jpg|thumb|Screen shot of problems reported in environment check upgrading to 1.9]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Normally upon upgrade questions that are shared are moved to a category in the system context. Questions that are not shared are kept in the course context.&lt;br /&gt;
&lt;br /&gt;
In the following special case this is not true and the sharing status of some questions may have been changed :&lt;br /&gt;
&lt;br /&gt;
* You have some random questions in your quizzes which are selected from sub categories.&lt;br /&gt;
* AND the sub categories the random questions are selected from have a different &#039;shared&#039; status to any of the sub categories. Eg. you have a random question in a category that is not shared and some of the sub categories you are selecting from are not shared. OR you have a random question in a category that is shared and some of the sub categories you are selecting from are shared.&lt;br /&gt;
&lt;br /&gt;
There is a special check for this case in the environment check code and a special admin report for checking this.&lt;br /&gt;
&lt;br /&gt;
When a random question as above is found in the question bank then :&lt;br /&gt;
&lt;br /&gt;
* all sub categories below the random question are set to the same &#039;shared&#039; status as the category the random question is in.&lt;br /&gt;
* if there is another random question in one of the sub categories it is ignored, all sub categories are set to the same status.&lt;br /&gt;
&lt;br /&gt;
Questions already included in quizzes will continue to work as before.&lt;br /&gt;
&lt;br /&gt;
There is an environment check to check for possible problems with &#039;Random Questions Selecting from Subcategories&#039;. See screen shot. &lt;br /&gt;
&lt;br /&gt;
[[Image:randomquestionadminreport.jpg|thumb|Screen shot of questions admin report reporting problems with random questions.]]&lt;br /&gt;
&lt;br /&gt;
More information about the issue on your system is available in Admin / Reports / Question, this is linked to from the environment check message when a problem is detected. Environment checks and the question admin report have been backported to the latest version of MOODLE_18_STABLE.&lt;br /&gt;
&lt;br /&gt;
==More info about changes in Moodle 1.9 can be found on these pages==&lt;br /&gt;
&lt;br /&gt;
* [[Question permissions explained with diagrams]]&lt;br /&gt;
* [[Question bank]]&lt;br /&gt;
* [[Question categories]]&lt;br /&gt;
* [[Question contexts]]&lt;br /&gt;
* [[Question permissions]]&lt;br /&gt;
* [[Question reports]]&lt;br /&gt;
* [[Questions linking to files]]&lt;br /&gt;
* [[Quiz submission email notification]]&lt;br /&gt;
&lt;br /&gt;
The following permissions are new in Moodle 1.9 (they replace moodle/question:manage, giving more control over exactly what someone can do) :&lt;br /&gt;
&lt;br /&gt;
* [[Capabilities/moodle/question:add|moodle/question:add]]&lt;br /&gt;
* [[Capabilities/moodle/question:editmine|moodle/question:editmine]] / [[Capabilities/moodle/question:editall|editall]]&lt;br /&gt;
* [[Capabilities/moodle/question:viewmine|moodle/question:viewmine]] / [[Capabilities/moodle/question:viewall|viewall]]&lt;br /&gt;
* [[Capabilities/moodle/question:usemine|moodle/question:usemine]] / [[Capabilities/moodle/question:useall|useall]]&lt;br /&gt;
* [[Capabilities/moodle/question:movemine|moodle/question:movemine]] / [[Capabilities/moodle/question:moveall|moveall]]&lt;br /&gt;
&lt;br /&gt;
And the following no longer exist :&lt;br /&gt;
&lt;br /&gt;
* [[Capabilities/moodle/question:manage|moodle/question:manage]]&lt;br /&gt;
* [[Capabilities/moodle/question:import|moodle/question:import]]&lt;br /&gt;
* [[Capabilities/moodle/question:export|moodle/question:export]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ja:Moodle 1.9における問題エンジンの変更]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_permissions&amp;diff=47578</id>
		<title>Question permissions</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_permissions&amp;diff=47578"/>
		<updated>2008-12-03T05:44:01Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Questions}}&lt;br /&gt;
Roles and capabilities in Moodle 1.7 onwards enable possibilities such as students being given permission to edit questions. The following capabilities are related to questions:&lt;br /&gt;
&lt;br /&gt;
*[[Capabilities/moodle/question:config|moodle/question:config]]&lt;br /&gt;
*[[Capabilities/moodle/question:export|moodle/question:export]]&lt;br /&gt;
*[[Capabilities/moodle/question:import|moodle/question:import]]&lt;br /&gt;
*[[Capabilities/moodle/question:managecategory|question:managecategory]]&lt;br /&gt;
*[[Capabilities/moodle/question:manage|moodle/question:manage]] (1.7 and 1.8 only)&lt;br /&gt;
*[[Capabilities/moodle/question:export|moodle/question:export]] (1.7 and 1.8 only)&lt;br /&gt;
*[[Capabilities/moodle/question:import|moodle/question:import]] (1.7 and 1.8 only)&lt;br /&gt;
*[[Capabilities/moodle/question:add|moodle/question:add]] (1.9 onwards)&lt;br /&gt;
*[[Capabilities/moodle/question:editall|moodle/question:editall]] (1.9 onwards)&lt;br /&gt;
*[[Capabilities/moodle/question:editmine|moodle/question:editmine]] (1.9 onwards)&lt;br /&gt;
*[[Capabilities/moodle/question:moveall|moodle/question:moveall]] (1.9 onwards)&lt;br /&gt;
*[[Capabilities/moodle/question:movemine|moodle/question:movemine]] (1.9 onwards)&lt;br /&gt;
*[[Capabilities/moodle/question:useall|moodle/question:useall]] (1.9 onwards)&lt;br /&gt;
*[[Capabilities/moodle/question:usemine|moodle/question:usemine]] (1.9 onwards)&lt;br /&gt;
*[[Capabilities/moodle/question:viewall|moodle/question:viewall]] (1.9 onwards)&lt;br /&gt;
*[[Capabilities/moodle/question:viewmine|moodle/question:viewmine]] (1.9 onwards)&lt;br /&gt;
&lt;br /&gt;
==Capabilities in Moodle 1.9==&lt;br /&gt;
{{Moodle 1.9}}In Moodle 1.9 onwards,&lt;br /&gt;
* The last nine capabilities listed replace moodle/question:manage&lt;br /&gt;
* moodle/question:add is used to determine whether a user has permission to import questions&lt;br /&gt;
* moodle/question:viewall and moodle/question:viewmine are used to determine whether a user has permission to export&lt;br /&gt;
&lt;br /&gt;
Also in Moodle 1.9 onwards, certain capabilities contain the words &#039;&#039;all&#039;&#039; or &#039;&#039;mine&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;all&#039;&#039; means all questions, and if you have the &#039;&#039;all&#039;&#039; capability, &#039;&#039;mine&#039;&#039; is not tested. &lt;br /&gt;
* &#039;&#039;mine&#039;&#039; means that you have the capability for your questions but not for questions created by others&lt;br /&gt;
&lt;br /&gt;
If you have the view capability for a question you can view a question created by another and &amp;quot;Save as New Question&amp;quot;. This creates a new question that is one you created and which you can then do anything you have &#039;&#039;mine&#039;&#039; capability to do with.&lt;br /&gt;
&lt;br /&gt;
==Contexts and permissions==&lt;br /&gt;
&lt;br /&gt;
In Moodle 1.9 onwards, we have separate category hierarchies in [[Question contexts]] and the permissions for what you can do with a question depend on the context in which the question is.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Question permissions explained with diagrams]]&lt;br /&gt;
*[[Question creator role]]&lt;br /&gt;
*[[Question Engine Changes in Moodle 1.9]]&lt;br /&gt;
*[[Question contexts]]&lt;br /&gt;
Using Moodle forum discussions:&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=67725 capability for editing new questions]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=68072 examining present capabilities for questions]&lt;br /&gt;
&lt;br /&gt;
[[Category:Roles]]&lt;br /&gt;
&lt;br /&gt;
[[ja:問題パーミッション]]&lt;br /&gt;
[[de:Fragen-Rechte]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47577</id>
		<title>Question permissions explained with diagrams</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47577"/>
		<updated>2008-12-03T05:43:23Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==A simple story==&lt;br /&gt;
&lt;br /&gt;
===1. Setting the scene===&lt;br /&gt;
&lt;br /&gt;
For this explanation, we will image we have this very simple Moodle site. There are three courses, all in the Miscellaneous category. The courses have a few activities in them.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions1.png]] &lt;br /&gt;
&lt;br /&gt;
===2. Introducing Fred===&lt;br /&gt;
&lt;br /&gt;
We will focus on a particular user: Fred. Fred is a teacher in two of the courses. In Moodle, everyone gets some permissions throughout the whole Moodle site because they are logged in. Additionally, Fred gets more permissions in the courses he teaches, and all the activities in those courses, because he has the teacher role there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions2.png]]&lt;br /&gt;
&lt;br /&gt;
===3. Using questions in a course===&lt;br /&gt;
&lt;br /&gt;
Fred creates some questions in his maths course and adds them to the quiz. Why does this work?&lt;br /&gt;
&lt;br /&gt;
By default, questions are created in the question bank in a category that belongs to that course. Fred is a teacher in the course. Teachers are allowed to create questions. Therefore Fred can create the questions, and they get stored linked to the course.&lt;br /&gt;
&lt;br /&gt;
The quiz is in the course. Fred is a teacher in the course, so Fred has permission to add questions to the quiz. The quiz is in the course, so the course questions are potentially available. Fred is a teacher in the course, so he is allowed use the questions in the course question bank. Therefore Fred can add the questions to his quiz.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions3.png]]&lt;br /&gt;
&lt;br /&gt;
===4. Trying to share questions===&lt;br /&gt;
&lt;br /&gt;
Fred now wants to reuse some of his questions in his biology course. However, the biology quiz is not in the maths course, so the questions are not available.&lt;br /&gt;
&lt;br /&gt;
So Fred&#039;s friendly Moodle administrator Annie moves the questions into the part of the question bank associated with the category Miscellaneous. Disaster! now Fred can&#039;t see his questions at all. Why not?&lt;br /&gt;
&lt;br /&gt;
Now the questions are outside the course. Fred has no extra permissions outside the course, so he cannot access the questions there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions4.png]]&lt;br /&gt;
&lt;br /&gt;
===5. Successfully sharing questions===&lt;br /&gt;
&lt;br /&gt;
Annie creates a new role &#039;Question user&#039; that allows all the permissions needed to access the question bank. Annie assigns Fred that role in the whole system. Now Fred can see his questions from within both courses, edit them, and add them to his quizzes. Why?&lt;br /&gt;
&lt;br /&gt;
The questions are linked to category Miscellaneous. Miscellaneous is inside the system. Fred is a Question user in the system. Question users can access the question bank. So Fred can access this part of the question bank.&lt;br /&gt;
&lt;br /&gt;
The quizzes are in courses where Fred is a teacher, so Fred is has permission to add questions to the quiz. The quiz is in the Miscellaneous category, so the questions in that part of the question bank are potentially available. We have just seen that Fred has permission to access these question. Therefore Fred can add these questions to his quizzes.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions5.png]]&lt;br /&gt;
&lt;br /&gt;
==Summary of the rules==&lt;br /&gt;
&lt;br /&gt;
Questions are stored in the question bank linked to some part of your Moodle system (technically a context). The part of the system might be (and most often is) a course, or a course category, the whole system, or an individual activity.&lt;br /&gt;
&lt;br /&gt;
===To create and editing questions===&lt;br /&gt;
&lt;br /&gt;
you must have the appropriate [[Question_permissions|capability]] in the part of the system where the questions are stored, to have permission to do the corresponding operation (add, edit, ...).&lt;br /&gt;
&lt;br /&gt;
===To adding questions to a quiz===&lt;br /&gt;
&lt;br /&gt;
three checks have to pass:&lt;br /&gt;
# You must have the mod/quiz:manage capability in that quiz, to have permission to add questions to it.&lt;br /&gt;
# The quiz must be inside the part of the system where the questions are stored, in order for the questions to be available in the quiz.&lt;br /&gt;
# You must have the moodle/question:use(all/mine) capability in the part of the system where the questions are stored, to have permission to use those questions.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Question bank]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Questions]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47576</id>
		<title>Question permissions explained with diagrams</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47576"/>
		<updated>2008-12-03T05:27:31Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* 3. Using questions in a course */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==A simple story==&lt;br /&gt;
&lt;br /&gt;
===1. Setting the scene===&lt;br /&gt;
&lt;br /&gt;
For this explanation, we will image we have this very simple Moodle site. There are three courses, all in the Miscellaneous category. The courses have a few activities in them.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions1.png]] &lt;br /&gt;
&lt;br /&gt;
===2. Introducing Fred===&lt;br /&gt;
&lt;br /&gt;
We will focus on a particular user: Fred. Fred is a teacher in two of the courses. In Moodle, everyone gets some permissions throughout the whole Moodle site because they are logged in. Additionally, Fred gets more permissions in the courses he teaches, and all the activities in those courses, because he has the teacher role there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions2.png]]&lt;br /&gt;
&lt;br /&gt;
===3. Using questions in a course===&lt;br /&gt;
&lt;br /&gt;
Fred creates some questions in his maths course and adds them to the quiz. Why does this work?&lt;br /&gt;
&lt;br /&gt;
By default, questions are created in the question bank in a category that belongs to that course. Fred is a teacher in the course. Teachers are allowed to create questions. Therefore Fred can create the questions, and they get stored linked to the course.&lt;br /&gt;
&lt;br /&gt;
The quiz is in the course. Fred is a teacher in the course, so Fred has permission to add questions to the quiz. The quiz is in the course, so the course questions are potentially available. Fred is a teacher in the course, so he is allowed use the questions in the course question bank. Therefore Fred can add the questions to his quiz.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions3.png]]&lt;br /&gt;
&lt;br /&gt;
===4. Trying to share questions===&lt;br /&gt;
&lt;br /&gt;
Fred now wants to reuse some of his questions in his biology course. However, the biology quiz is not in the maths course, so the questions are not available.&lt;br /&gt;
&lt;br /&gt;
So Fred&#039;s friendly Moodle administrator Annie moves the questions into the part of the question bank associated with the category Miscellaneous. Disaster! now Fred can&#039;t see his questions at all. Why not?&lt;br /&gt;
&lt;br /&gt;
Now the questions are outside the course. Fred has no extra permissions outside the course, so he cannot access the questions there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions4.png]]&lt;br /&gt;
&lt;br /&gt;
===5. Successfully sharing questions===&lt;br /&gt;
&lt;br /&gt;
Annie creates a new role &#039;Question user&#039; that allows all the permissions needed to access the question bank. Annie assigns Fred that role in the whole system. Now Fred can see his questions from within both courses, edit them, and add them to his quizzes. Why?&lt;br /&gt;
&lt;br /&gt;
The questions are linked to category Miscellaneous. Miscellaneous is inside the system. Fred is a Question user in the system. Question users can access the question bank. So Fred can access this part of the question bank.&lt;br /&gt;
&lt;br /&gt;
The quizzes are in courses where Fred is a teacher, so Fred is has permission to add questions to the quiz. The quiz is in the Miscellaneous category, so the questions in that part of the question bank are potentially available. We have just seen that Fred has permission to access these question. Therefore Fred can add these questions to his quizzes.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions5.png]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Question bank]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Questions]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47575</id>
		<title>Question permissions explained with diagrams</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47575"/>
		<updated>2008-12-03T05:26:29Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==A simple story==&lt;br /&gt;
&lt;br /&gt;
===1. Setting the scene===&lt;br /&gt;
&lt;br /&gt;
For this explanation, we will image we have this very simple Moodle site. There are three courses, all in the Miscellaneous category. The courses have a few activities in them.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions1.png]] &lt;br /&gt;
&lt;br /&gt;
===2. Introducing Fred===&lt;br /&gt;
&lt;br /&gt;
We will focus on a particular user: Fred. Fred is a teacher in two of the courses. In Moodle, everyone gets some permissions throughout the whole Moodle site because they are logged in. Additionally, Fred gets more permissions in the courses he teaches, and all the activities in those courses, because he has the teacher role there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions2.png]]&lt;br /&gt;
&lt;br /&gt;
===3. Using questions in a course===&lt;br /&gt;
&lt;br /&gt;
Fred creates some questions in his maths course and adds them to the quiz. Why does this work?&lt;br /&gt;
&lt;br /&gt;
By default, questions are created in the question bank in a category that belongs to that course. Fred is a teacher in the course. Teachers are allowed to create questions. He can create the questions, and they get stored linked to the course.&lt;br /&gt;
&lt;br /&gt;
The quiz is in the course. Fred is a teacher in the course, so Fred has permission to add questions to the quiz. The quiz is in the course, so the course questions are potentially available. Fred is a teacher in the course, so he is allowed use the questions in the course question bank. Therefore Fred can add the questions to his quiz.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions3.png]]&lt;br /&gt;
&lt;br /&gt;
===4. Trying to share questions===&lt;br /&gt;
&lt;br /&gt;
Fred now wants to reuse some of his questions in his biology course. However, the biology quiz is not in the maths course, so the questions are not available.&lt;br /&gt;
&lt;br /&gt;
So Fred&#039;s friendly Moodle administrator Annie moves the questions into the part of the question bank associated with the category Miscellaneous. Disaster! now Fred can&#039;t see his questions at all. Why not?&lt;br /&gt;
&lt;br /&gt;
Now the questions are outside the course. Fred has no extra permissions outside the course, so he cannot access the questions there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions4.png]]&lt;br /&gt;
&lt;br /&gt;
===5. Successfully sharing questions===&lt;br /&gt;
&lt;br /&gt;
Annie creates a new role &#039;Question user&#039; that allows all the permissions needed to access the question bank. Annie assigns Fred that role in the whole system. Now Fred can see his questions from within both courses, edit them, and add them to his quizzes. Why?&lt;br /&gt;
&lt;br /&gt;
The questions are linked to category Miscellaneous. Miscellaneous is inside the system. Fred is a Question user in the system. Question users can access the question bank. So Fred can access this part of the question bank.&lt;br /&gt;
&lt;br /&gt;
The quizzes are in courses where Fred is a teacher, so Fred is has permission to add questions to the quiz. The quiz is in the Miscellaneous category, so the questions in that part of the question bank are potentially available. We have just seen that Fred has permission to access these question. Therefore Fred can add these questions to his quizzes.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions5.png]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Question bank]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Questions]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47574</id>
		<title>Question permissions explained with diagrams</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47574"/>
		<updated>2008-12-03T05:21:35Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* 4. Trying to share questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==A simple story==&lt;br /&gt;
&lt;br /&gt;
===1. Setting the scene===&lt;br /&gt;
&lt;br /&gt;
For this explanation, we will image we have this very simple Moodle site. There are three courses, all in the Miscellaneous category. The courses have a few activities in them.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions1.png]] &lt;br /&gt;
&lt;br /&gt;
===2. Introducing Fred===&lt;br /&gt;
&lt;br /&gt;
We will focus on a particular user: Fred. Fred is a teacher in two of the courses. In Moodle, everyone gets some permissions throughout the whole Moodle site because they are logged in. Additionally, Fred gets more permissions in the courses he teaches, and all the activities in those courses, because he has the teacher role there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions2.png]]&lt;br /&gt;
&lt;br /&gt;
===3. Using questions in a course===&lt;br /&gt;
&lt;br /&gt;
Fred creates some questions in his maths course and adds them to the quiz. Why does this work?&lt;br /&gt;
&lt;br /&gt;
By default, questions are created in the question bank in a category that belongs to that course. Fred is a teacher in the course. Teachers are allowed to create questions. He can create the questions, and they get stored linked to the course.&lt;br /&gt;
&lt;br /&gt;
In the quiz. Fred is a teacher, so Fred is allowed to add questions to the quiz. The quiz is in the course, so the course questions are potentially available. Fred is a teacher in the course, so he is allowed use the questions in the course question bank. Therefore Fred can add the questions to his quiz.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions3.png]]&lt;br /&gt;
&lt;br /&gt;
===4. Trying to share questions===&lt;br /&gt;
&lt;br /&gt;
Fred now wants to reuse some of his questions in his biology course. However, the biology quiz is not in the maths course, so the questions are not available.&lt;br /&gt;
&lt;br /&gt;
So Fred&#039;s friendly Moodle administrator Annie moves the questions into the part of the question bank associated with the category Miscellaneous. Disaster! now Fred can&#039;t see his questions at all. Why not?&lt;br /&gt;
&lt;br /&gt;
Now the questions are outside the course. Fred has no extra permissions outside the course, so he cannot access the questions there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions4.png]]&lt;br /&gt;
&lt;br /&gt;
===5. Successfully sharing questions===&lt;br /&gt;
&lt;br /&gt;
Annie creates a new role &#039;Question user&#039; that allows all the permissions needed to access the question bank. Annie assigns Fred that role in the whole system. Now Fred can see his questions from within both courses, edit them, and add them to his quizzes. Why?&lt;br /&gt;
&lt;br /&gt;
The questions are linked to category Miscellaneous. Miscellaneous is inside the system. Fred is a Question user in the system. Question users can access the question bank. So Fred can access this part of the question bank.&lt;br /&gt;
&lt;br /&gt;
In the quiz. Fred is a teacher, so Fred is allowed to add questions to the quiz. The quiz is in the Miscellaneous category, so the course questions are potentially available. We have just seen that Fred has permission to access these question. Therefore Fred can add the questions to his quizzes.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions5.png]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Question bank]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Questions]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47573</id>
		<title>Question permissions explained with diagrams</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Question_permissions_explained_with_diagrams&amp;diff=47573"/>
		<updated>2008-12-03T05:16:54Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: New page: ==A simple story==  ===1. Setting the scene===  For this explanation, we will image we have this very simple Moodle site. There are three courses, all in the Miscellaneous category. The co...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==A simple story==&lt;br /&gt;
&lt;br /&gt;
===1. Setting the scene===&lt;br /&gt;
&lt;br /&gt;
For this explanation, we will image we have this very simple Moodle site. There are three courses, all in the Miscellaneous category. The courses have a few activities in them.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions1.png]] &lt;br /&gt;
&lt;br /&gt;
===2. Introducing Fred===&lt;br /&gt;
&lt;br /&gt;
We will focus on a particular user: Fred. Fred is a teacher in two of the courses. In Moodle, everyone gets some permissions throughout the whole Moodle site because they are logged in. Additionally, Fred gets more permissions in the courses he teaches, and all the activities in those courses, because he has the teacher role there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions2.png]]&lt;br /&gt;
&lt;br /&gt;
===3. Using questions in a course===&lt;br /&gt;
&lt;br /&gt;
Fred creates some questions in his maths course and adds them to the quiz. Why does this work?&lt;br /&gt;
&lt;br /&gt;
By default, questions are created in the question bank in a category that belongs to that course. Fred is a teacher in the course. Teachers are allowed to create questions. He can create the questions, and they get stored linked to the course.&lt;br /&gt;
&lt;br /&gt;
In the quiz. Fred is a teacher, so Fred is allowed to add questions to the quiz. The quiz is in the course, so the course questions are potentially available. Fred is a teacher in the course, so he is allowed use the questions in the course question bank. Therefore Fred can add the questions to his quiz.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions3.png]]&lt;br /&gt;
&lt;br /&gt;
===4. Trying to share questions===&lt;br /&gt;
&lt;br /&gt;
Fred now wants to reuse some of his questions in his biology course. However, the biology quiz is not in the maths course, so the questions are not accessible.&lt;br /&gt;
&lt;br /&gt;
So Fred&#039;s friendly Moodle administrator Annie moves the questions into the part of the question bank associated with the category Miscellaneous. Disaster! now Fred can&#039;t see his questions at all. Why not?&lt;br /&gt;
&lt;br /&gt;
Now the questions are outside the course. Fred has no extra permissions outside the course, so he cannot access the questions there.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions4.png]]&lt;br /&gt;
&lt;br /&gt;
===5. Successfully sharing questions===&lt;br /&gt;
&lt;br /&gt;
Annie creates a new role &#039;Question user&#039; that allows all the permissions needed to access the question bank. Annie assigns Fred that role in the whole system. Now Fred can see his questions from within both courses, edit them, and add them to his quizzes. Why?&lt;br /&gt;
&lt;br /&gt;
The questions are linked to category Miscellaneous. Miscellaneous is inside the system. Fred is a Question user in the system. Question users can access the question bank. So Fred can access this part of the question bank.&lt;br /&gt;
&lt;br /&gt;
In the quiz. Fred is a teacher, so Fred is allowed to add questions to the quiz. The quiz is in the Miscellaneous category, so the course questions are potentially available. We have just seen that Fred has permission to access these question. Therefore Fred can add the questions to his quizzes.&lt;br /&gt;
&lt;br /&gt;
[[Image:QuestionPermissions5.png]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Question bank]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Questions]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=File:QuestionPermissions4.png&amp;diff=47572</id>
		<title>File:QuestionPermissions4.png</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=File:QuestionPermissions4.png&amp;diff=47572"/>
		<updated>2008-12-03T05:06:53Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: uploaded a new version of &amp;quot;Image:QuestionPermissions4.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=File:QuestionPermissions5.png&amp;diff=47571</id>
		<title>File:QuestionPermissions5.png</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=File:QuestionPermissions5.png&amp;diff=47571"/>
		<updated>2008-12-03T04:41:27Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=File:QuestionPermissions4.png&amp;diff=47570</id>
		<title>File:QuestionPermissions4.png</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=File:QuestionPermissions4.png&amp;diff=47570"/>
		<updated>2008-12-03T04:41:20Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=File:QuestionPermissions3.png&amp;diff=47569</id>
		<title>File:QuestionPermissions3.png</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=File:QuestionPermissions3.png&amp;diff=47569"/>
		<updated>2008-12-03T04:41:13Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=File:QuestionPermissions2.png&amp;diff=47568</id>
		<title>File:QuestionPermissions2.png</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=File:QuestionPermissions2.png&amp;diff=47568"/>
		<updated>2008-12-03T04:41:05Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=File:QuestionPermissions1.png&amp;diff=47567</id>
		<title>File:QuestionPermissions1.png</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=File:QuestionPermissions1.png&amp;diff=47567"/>
		<updated>2008-12-03T04:40:57Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Development:Unmerged_files&amp;diff=47421</id>
		<title>Development:Unmerged files</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Development:Unmerged_files&amp;diff=47421"/>
		<updated>2008-12-01T07:06:06Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* To generate this information yourself */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Files with MOODLE_17_MERGED tag not updated - Fri Nov 28 17:43:56 CET 2008 ==&lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/user/view.php /cvsroot/moodle/user/view.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?PHP // $Id: view.php,v 1.123.2.10 2008/11/12 03:50:10 dongsheng Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?PHP // $Id: view.php,v 1.123.2.11 2008/11/18 02:21:29 dongsheng Exp $&lt;br /&gt;
&lt;br /&gt;
==Files with MOODLE_18_MERGED tag not updated - Fri Nov 28 17:43:59 CET 2008 ==&lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/admin/settings/security.php /cvsroot/moodle/admin/settings/security.php]&lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/blocks/admin/block_admin.php /cvsroot/moodle/blocks/admin/block_admin.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php //$Id: block_admin.php,v 1.84.2.4 2008/05/02 06:18:06 jerome Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php //$Id: block_admin.php,v 1.84.2.5 2008/11/28 06:27:39 ikawhero Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/lang/en_utf8/qtype_calculated.php /cvsroot/moodle/lang/en_utf8/qtype_calculated.php]&lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/mnet/remote_client.php /cvsroot/moodle/mnet/remote_client.php]&lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/search/documents/physical_pdf.php /cvsroot/moodle/search/documents/physical_pdf.php]&lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/search/documents/physical_xml.php /cvsroot/moodle/search/documents/physical_xml.php]&lt;br /&gt;
&lt;br /&gt;
==Files with MOODLE_19_MERGED tag not updated - Fri Nov 28 17:42:27 CET 2008 ==&lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/admin/uploaduser.php /cvsroot/moodle/admin/uploaduser.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php  // $Id: uploaduser.php,v 1.68.2.13 2008/09/26 09:10:20 scyrma Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php  // $Id: uploaduser.php,v 1.68.2.14 2008/10/18 00:10:00 arborrow Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/filter/tex/texed.php /cvsroot/moodle/filter/tex/texed.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?PHP // $Id: texed.php,v 1.7.2.1 2007/12/19 17:38:42 skodak Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?PHP // $Id: texed.php,v 1.7.2.2 2008/11/11 18:35:42 mjollnir_ Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/grade/edit/outcome/edit_form.php /cvsroot/moodle/grade/edit/outcome/edit_form.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php  //$Id: edit_form.php,v 1.5.2.2 2008/03/03 10:21:42 nicolasconnault Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php  //$Id: edit_form.php,v 1.5.2.3 2008/10/22 09:09:32 nicolasconnault Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/grade/edit/tree/outcomeitem_form.php /cvsroot/moodle/grade/edit/tree/outcomeitem_form.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php  //$Id: outcomeitem_form.php,v 1.12.2.13 2008/10/17 14:01:07 nicolasconnault Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php  //$Id: outcomeitem_form.php,v 1.12.2.14 2008/10/22 09:09:32 nicolasconnault Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/lang/en_utf8/grades.php /cvsroot/moodle/lang/en_utf8/grades.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?PHP // $Id: grades.php,v 1.111.2.58 2008/10/17 14:32:44 nicolasconnault Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?PHP // $Id: grades.php,v 1.111.2.59 2008/10/22 09:09:32 nicolasconnault Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/lib/formslib.php /cvsroot/moodle/lib/formslib.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php // $Id: formslib.php,v 1.129.2.17 2008/10/13 19:38:49 skodak Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php // $Id: formslib.php,v 1.129.2.18 2008/10/22 09:09:31 nicolasconnault Exp $ &lt;br /&gt;
 &amp;lt;  * @version $Id: formslib.php,v 1.129.2.17 2008/10/13 19:38:49 skodak Exp $ &lt;br /&gt;
 &amp;gt;  * @version $Id: formslib.php,v 1.129.2.18 2008/10/22 09:09:31 nicolasconnault Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/lib/moodlelib.php /cvsroot/moodle/lib/moodlelib.php]&lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/lib/questionlib.php /cvsroot/moodle/lib/questionlib.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php  // $Id: questionlib.php,v 1.119.2.18 2008/11/27 11:50:20 tjhunt Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php  // $Id: questionlib.php,v 1.119.2.19 2008/11/28 02:41:06 tjhunt Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/mod/quiz/report/grading/report.php /cvsroot/moodle/mod/quiz/report/grading/report.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php  // $Id: report.php,v 1.25.2.13 2008/08/12 06:07:13 tjhunt Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php  // $Id: report.php,v 1.25.2.14 2008/11/28 06:07:24 tjhunt Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/question/type/questiontype.php /cvsroot/moodle/question/type/questiontype.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php  // $Id: questiontype.php,v 1.74.2.13 2008/10/08 10:19:51 jamiesensei Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php  // $Id: questiontype.php,v 1.74.2.14 2008/11/28 06:07:25 tjhunt Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/question/type/essay/questiontype.php /cvsroot/moodle/question/type/essay/questiontype.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php  // $Id: questiontype.php,v 1.20.2.7 2008/08/20 09:46:03 tjhunt Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php  // $Id: questiontype.php,v 1.20.2.8 2008/11/28 06:07:24 tjhunt Exp $ &lt;br /&gt;
  &lt;br /&gt;
 RCS file: [http://cvs.moodle.org/moodle/question/type/random/questiontype.php /cvsroot/moodle/question/type/random/questiontype.php]&lt;br /&gt;
 &amp;lt; &amp;lt;?php  // $Id: questiontype.php,v 1.12.2.6 2008/11/10 07:56:43 tjhunt Exp $ &lt;br /&gt;
 &amp;gt; &amp;lt;?php  // $Id: questiontype.php,v 1.12.2.7 2008/11/28 06:07:25 tjhunt Exp $&lt;br /&gt;
&lt;br /&gt;
==To generate this information yourself==&lt;br /&gt;
&lt;br /&gt;
Run the following commandline at the top level of your CVS sandbox:&lt;br /&gt;
&lt;br /&gt;
 cvs diff -kkv -r MOODLE_19_MERGED -r MOODLE_19_STABLE | egrep &#039;^(RCS|[&amp;lt;&amp;gt;] &amp;lt;\?[Pp][Hh][Pp] *\/\/ *\$Id)&#039; &amp;gt; unmergedfiles.txt; cat unmergedfiles.txt&lt;br /&gt;
&lt;br /&gt;
==Some useful links==&lt;br /&gt;
&lt;br /&gt;
* [[:en:Development:CVS for developers|Moodle CVS for developers]]: explains how to work with the Moodle code in CVS.&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=43267 Review Unmerged files, please...] discussion from moodle.org forums.&lt;br /&gt;
&lt;br /&gt;
* Tracker Task MDL-8912: Progress in the Moodle Tracker about these unmerged files.&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer|Unmerged files]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Talk:Latest_release_notes&amp;diff=47396</id>
		<title>Talk:Latest release notes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Talk:Latest_release_notes&amp;diff=47396"/>
		<updated>2008-12-01T05:45:44Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
(I just deleted the old comments.)&lt;br /&gt;
&lt;br /&gt;
I think we should create a separate release notes page for each release, (Release Notes 1.9.4, Release notes 1.9.5, etc.). That would give the release notes for each release a permanent URL. Then we should use [http://en.wikipedia.org/wiki/Wikipedia:Transclusion transclusion] to make this page always include the latest release notes for each stable branch. This would also make it easier to start preparing release notes for future releases before the release actually happens.--[[User:Tim Hunt|Tim Hunt]] 23:45, 30 November 2008 (CST)&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Latest_release_notes&amp;diff=47395</id>
		<title>Latest release notes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Latest_release_notes&amp;diff=47395"/>
		<updated>2008-12-01T05:37:35Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: /* Highlights */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{About Moodle}}&lt;br /&gt;
==Table of Contents==&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9.4 (Not released yet)==&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* New options to allow Moodle to be configured to comply with European and US privacy regulations, like FERPA. Petr Skoda, moodle.com&lt;br /&gt;
* Fix bugs relating to creating and editing course categories. Previously, giving admin permissions in a category and its subcategories did not work reliably. In the process, the separate create, update and delete category capabilities were replaced with [[Capabilities/moodle/category:manage|moodle/category:manage]], and moodle/category:visibility was renamed to [[Capabilities/moodle/category:viewhiddencategories|moodle/category:viewhiddencategories]]. Tim Hunt, moodle.com&lt;br /&gt;
* Essay questions can now be randomised by random questions. This must be enabled under Administration ► Miscellaneous ► Experimental. (MDL-8648) Tim Hunt, moodle.com.&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9.3==&lt;br /&gt;
&lt;br /&gt;
Released: 15th October 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/BrowseVersion.jspa?id=10011&amp;amp;versionId=10290&amp;amp;showOpenIssuesOnly=false the full list of fixed issues in 1.9.3].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* Major [[SCORM module]] improvements&lt;br /&gt;
** Passes all SCORM 1.2 Conformance tests&lt;br /&gt;
** Improved Visualisation of SCORM objects&lt;br /&gt;
** New Debug tool&lt;br /&gt;
** Improved handling of AICC objects&lt;br /&gt;
** Better cross-platform compatible javascript&lt;br /&gt;
** Improved the interaction of SCO completion and Gradebook interaction&lt;br /&gt;
** TOC fixes - structure, expand/collapse, and prerequisites&lt;br /&gt;
** Corrected element behaviour for cmi.objectives, cmi.comments_from_learner, cmi.interactions,  cmi.launch_data&lt;br /&gt;
* New capabilities: [[Capabilities/moodle/role:safeoverride|moodle/role:safeoverride]], [[Capabilities/moodle/course:changefullname|moodle/course:changefullname]], [[Capabilities/moodle/course:changeidnumber|moodle/course:changeidnumber]] and [[Capabilities/moodle/course:changeshortname|moodle/course:changeshortname]]&lt;br /&gt;
* New option in [[HTML settings]] to allow HTML tags in activity and resource names&lt;br /&gt;
* Improved detection of misconfigured dataroot directory&lt;br /&gt;
* New [[Manage authentication]] setting for relaxing email domain restrictions when changing email&lt;br /&gt;
* New [[Enrolment plugins|Enrolments]] setting for disabling the email welcome message which users receive when they self-enrol in a course&lt;br /&gt;
* New [[Internal enrolment]] setting for disabling the [[Enrolment key|enrolment key]] hint&lt;br /&gt;
* New [[Gradebook report settings|Gradebook report setting]] to show/hide percentages in the [[User report|user report]]&lt;br /&gt;
* New [[Statistics|statistics setting]] for specifying the maximum number of days processed in each stats execution&lt;br /&gt;
* Checkbox [[User profile fields|user profile field]]&lt;br /&gt;
* Indication for administrators when a site is in [[Maintenance mode]]&lt;br /&gt;
* Fix for major [[Groups|groups]] upgrade problem&lt;br /&gt;
* Fix for Firefox password manager problem&lt;br /&gt;
* Fixes for course category edit and add capabilities problems&lt;br /&gt;
* Multiple choice questions in quizzes. Following feedback, we have reversed the change in Moodle 1.9 that showed students feedback to all option, not just the ones they had selected. (MDL-14643)&lt;br /&gt;
* The regression in 1.9.2 that broke images in quiz questions has been fixed.&lt;br /&gt;
* Starting in October 2008, authorize.net codes need true 10cc integers. (MDL-16715)&lt;br /&gt;
&lt;br /&gt;
===Security issues===&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108587 MSA-08-0019]: customised PhpMyAdmin package upgraded to 2.11.9.2&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108588 MSA-08-0020]: quiz/questions capabilities lack some risk flags in access.php files&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108589 MSA-08-0021]: design deficiency combined with incorrect use of format_string() allowing XSS&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108590 MSA-08-0022]: XSS through Wiki page titles&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108591 MSA-08-0023]: CSRF in messaging setting&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108592 MSA-08-0024]: Overriding of frozen values in Moodle forms&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108593 MSA-08-0025]: SQL injection in tags code&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108594 MSA-08-0026]: customised HTML Purifier upgraded to 2.1.5&lt;br /&gt;
&lt;br /&gt;
===New language pack===&lt;br /&gt;
&lt;br /&gt;
* Bangla - Razib Mustafiz&lt;br /&gt;
&lt;br /&gt;
(See [[Translation credits]] for additional details.)&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9.2==&lt;br /&gt;
&lt;br /&gt;
Released: 11th July 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/BrowseVersion.jspa?id=10011&amp;amp;versionId=10280&amp;amp;showOpenIssuesOnly=false the full list of fixed issues in 1.9.2].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* Compatibility fixes for MSSQL, Oracle and PostgreSQL&lt;br /&gt;
* Improved triggering of core events (though contributed code needs to be updated - see MDL-9983)&lt;br /&gt;
* Email change confirmation and other improvements relating to reducing the risk of spam&lt;br /&gt;
* [[Forum subscription]] improvements&lt;br /&gt;
* Setting for deleting not-fully-set-up accounts&lt;br /&gt;
* Quiz report enhancements and bug fixes (see [[Development:Quiz report enhancements|Quiz report enhancements]] for full list, though most are planned for Moodle 2.0)&lt;br /&gt;
&lt;br /&gt;
===Security issues===&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=101402 MSA-08-0010]: sql injection in HotPot module&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=101404 MSA-08-0012]: Potential non-persistent XSS when searching for group members (MSSQL and Oracle only)&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=101406 MSA-08-0014]: potential sql injection in events handling code &lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=101407 MSA-08-0015]: accessible profiles of deleted users &lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=101409 MSA-08-0016]: Email could be changed in profile without confirmation&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9.1==&lt;br /&gt;
&lt;br /&gt;
Released: 15th May 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10240&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.9.1].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* [[Grades|Gradebook]] - bug fixing and performance problems solved&lt;br /&gt;
* Captcha support added to [[Email-based self-registration]]&lt;br /&gt;
* Backup/restore bug fixing, improvements and performance&lt;br /&gt;
* Numerous PostgreSQL compatibility fixes&lt;br /&gt;
* Many critical problems fixed in [[Language packs|language packs]]&lt;br /&gt;
* Front page participants list improved&lt;br /&gt;
* [[Database module]] - bug fixing and improvements, including additional [[Database templates|database template tags]]&lt;br /&gt;
* [[Forum module]] - fixed unread tracking, performance improvements, group modes fixed&lt;br /&gt;
* [[Resources|Resource module]] - fixed problems with PDF files in IE&lt;br /&gt;
* [[Quiz module]] - Improvements to robustness when moving multi-answer and calculated questions between categories, and when backing up and restoring in obscure cases. Some details here: [[Development:Question bank consistency check]].&lt;br /&gt;
&lt;br /&gt;
===New language packs===&lt;br /&gt;
&lt;br /&gt;
* Uzbek - Orif N. Ruzimurodov&lt;br /&gt;
* Welsh - Karen Coyle&lt;br /&gt;
&lt;br /&gt;
(See [[Translation credits]] for additional details.)&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9==&lt;br /&gt;
&lt;br /&gt;
Released: 3rd March 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?projectId=10011&amp;amp;styleName=Html&amp;amp;version=10190 the full list of fixed issues in 1.9].&lt;br /&gt;
&lt;br /&gt;
===Headline features===&lt;br /&gt;
&lt;br /&gt;
* [[Gradebook]] - Moodle.com  (funded by Open University)&lt;br /&gt;
:: Completely rewritten from scratch for speed and flexibility. The new gradebook consists of plugins for reports, imports and exports. There are a number of standard reports which are useful for graders, students etc. The grader report allows you to treat the gradebook much more like a spreadsheet with manual editing, calculations, aggregations, weighting, locking, hiding, textual notes and so on.&lt;br /&gt;
* [[Outcomes]] - Moodle.com&lt;br /&gt;
:: You can also now develop a list of expected outcomes (competencies) and connect these to courses and activities. You can even grade against multiple outcomes at once (ie Rubrics).&lt;br /&gt;
* [[Development:Events|Events API]] - Moodle.com&lt;br /&gt;
::The new Events API provides a way for any code to &amp;quot;hook&amp;quot; into events in a clean, loosely coupled way. A lot of events in Moodle (such as adding a user or a course) now trigger events that developers can hook into.&lt;br /&gt;
* [[Development:Scalability|Scalability and performance improvements]] - Catalyst IT Ltd and Moodle.com&lt;br /&gt;
::A complete overhaul of the [[Roles]] implementation for correctness and scalability. Large sites with thousands of courses and users now load quickly and behave well under heavy traffic, thanks to reworked code for Roles. Additional boost for sites using PHP pre-compilers and significant improvements in the database access code for all databases.  Many other parts of Moodle have been optimised to cope better with large numbers of courses and students.  Overall performance is very noticeably increased.&lt;br /&gt;
* [[Mahoodle|Moodle Network - Mahara Interoperability]] - Catalyst IT Ltd&lt;br /&gt;
::Moodle 1.9 and [http://www.mahara.org/ Mahara E-porfolio v0.9] now do transparent Single Sign On - one to one, one to many, many to many. Students can maintain their personal [[E-portfolio|E-portfolios]] in Mahara.&lt;br /&gt;
* [[Tags]] - Luiz Cruz ([[Student_projects/Social_Networking_features|GSOC Social Networking project]]) and Mathieu Petit-Clair (Moodle.com)&lt;br /&gt;
:: Allows users to describe their own interests in terms of tags, which creates interest pages around those tags, bringing information together from a variety of sources (Blogs, Flickr, Youtube etc)&lt;br /&gt;
* [[Question_Engine_Changes_in_Moodle_1.9|Improved question bank]] - Jamie Pratt funded by [http://www.fun.ac.jp/en/ Future University Hakodate].&lt;br /&gt;
::Allows questions to be shared by the whole site, a course category, a single course, or be kept private to a single module. More control over who can do what to each question. Improved file management for files linked to by questions.&lt;br /&gt;
* [[Notes]] - Andrei Bautu ([[Student projects/User Management Improvements|GSOC User Management Improvements project]])&lt;br /&gt;
:: Detailed notes can be kept about individual users (for example teachers might want to keep and share notes about students in their class).&lt;br /&gt;
* [[Bulk user actions]] - Andrei Bautu ([[Student projects/User Management Improvements|GSOC User Management Improvements project]]), Moodle.com&lt;br /&gt;
::Administrators can perform bulk user actions, such as the mass deletion of user accounts. Extended features in the bulk user upload script to allow generation of user fields based on templates. &lt;br /&gt;
* [[Custom corners theme]] - Urs Hunkler&lt;br /&gt;
:: Beautiful and curvy (in all browsers).&lt;br /&gt;
* KSES related XSS security vulnerability fixed&lt;br /&gt;
&lt;br /&gt;
===Other major improvements===&lt;br /&gt;
&lt;br /&gt;
* [[Groups]] and [[Groupings]] - UPLGC, Catalyst Ltd, Moodle.com&lt;br /&gt;
:: New support for groupings (groups of groups) which was added briefly and then removed from 1.8.x. Activities and resources may be assigned to particular groupings.&lt;br /&gt;
* [[NTLM authentication|Active Directory NTLM Single Sign On]] - Catalyst Ltd&lt;br /&gt;
:: Integrated a reworked version of the NTLM Single Sign On, originally by Dan Marsden.&lt;br /&gt;
* New theme settings&lt;br /&gt;
** Category themes - can now set the theme for a category which will apply to all sub-categories and courses&lt;br /&gt;
** Theme order - new setting &#039;&#039;$CFG-&amp;gt;themeorder&#039;&#039; which sets the priority of the themes from highest to lowest.&lt;br /&gt;
* Ability to control block visibility with roles&lt;br /&gt;
** A new [[Capabilities/moodle/block:view|moodle/block:view]] capability has been added which allows control of who can view blocks from the roles system. This allows certain blocks to be hidden from the guest user, for example. See [[Block_permissions|Hiding blocks from certain users]].&lt;br /&gt;
* Oracle Support - Catalyst Ltd, USQ&lt;br /&gt;
:: Significant enhancements in Oracle support, scalability and performance&lt;br /&gt;
* Numerous admin settings fixes and improvements - Moodle.com&lt;br /&gt;
** Ability to [[Upload user pictures|mass import/upload user profile images]]. See MDL-11752 for details.&lt;br /&gt;
* More robust block and module uninstalling - Moodle.com&lt;br /&gt;
* cURL is used for component downloading, SOCKS5 proxies and user/password proxy authentication supported, fopen() not used anymore&lt;br /&gt;
* Completed course reset implementation - Shamim Rezaei, Moodle.com&lt;br /&gt;
* Rewritten IP lookup - for lookup used either NetGeo server or local GeoIP database, visualized with static world image or Google Maps - Moodle.com&lt;br /&gt;
* Terms used for each role can be redefined in each course (like before Moodle 1.7)&lt;br /&gt;
* Installer improvement - when upgrading Moodle, a page is displayed showing all modules installed on the site and highlighting any non-compatible contrib modules - Moodle.com&lt;br /&gt;
* Statistics performance improvements and bugfixing - Moodle.com&lt;br /&gt;
* [[Translation|Language translation tool]] improvements - ability to translate non-standard modules, GUI changes, capabilities support&lt;br /&gt;
&lt;br /&gt;
===Module improvements===&lt;br /&gt;
&lt;br /&gt;
* Quiz/Question improvements:&lt;br /&gt;
** Improved question bank, as above.&lt;br /&gt;
** Quizzes now listed on the MyMoodle page. (Implemented by Stephen Bourget and Tim Hunt.)&lt;br /&gt;
** A quiz can now [[Quiz submission email notification|send emails when an attempt is finished]] - a confirmation to the student, a notification to all teachers, or both. (Implemented by Graham Miller of [http://www.webenhanced.com.au/ Web Enhanced Solutions] and Tim Hunt.)&lt;br /&gt;
** Third party question types can now implement Moodle XML and other import and export format. (Implemented by Howard Miller.)&lt;br /&gt;
** Gift Import/Export format can now handle Essay and Description question types.&lt;br /&gt;
** Some slight improvements to quiz layout. See MDL-10374 for details. Theme designers please note.&lt;br /&gt;
** Multiple choice questions now show the feedback for all the options to students on the review page after the attempt is over.&lt;br /&gt;
* Forum improvements:&lt;br /&gt;
** Major performance improvements in cron and user interface - Moodle.com&lt;br /&gt;
** Ability to select aggregation type (i.e. sum, max, min, average, or count) for forum ratings. See MDL-3942 for details.&lt;br /&gt;
&lt;br /&gt;
===New language packs===&lt;br /&gt;
&lt;br /&gt;
Five new language packs (see [[Translation credits]] for additional details) and improvements in many other languages.&lt;br /&gt;
* Armenian - Andranik Markosyan&lt;br /&gt;
* Latin - Nicholas Sinnott-Armstrong (GHOP project)&lt;br /&gt;
* Macedonian - Dimitar Talevsk and his team&lt;br /&gt;
* Mongolian - B.Batpurev, I.Mendbayar, G.Khadbaatar, Munkhzul, O.Amartuvshin, Batbayar, B.Uugangerel&lt;br /&gt;
* Tamil Sri Lanka - M A Kaleelur Rahuma&lt;br /&gt;
&lt;br /&gt;
===Upgrading issues===&lt;br /&gt;
&lt;br /&gt;
If upgrading from 1.6 or later, you must have converted your site to Unicode. See [[Upgrading to Moodle 1.9]] for further information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Developers please add news here!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Release_Notes#Table_of_Contents|Table of Contents]]&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8.7==&lt;br /&gt;
&lt;br /&gt;
Released: 15th October 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/browse/MDL/fixforversion/10291 the full list of fixed issues in 1.8.7].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
===Security issues===&lt;br /&gt;
* Watch the [http://moodle.org/security Moodle security page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8.6==&lt;br /&gt;
&lt;br /&gt;
Released: 11th July 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10270&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.8.6].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
===Security issues===&lt;br /&gt;
* Watch the [http://moodle.org/security Moodle security page]&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8.5==&lt;br /&gt;
&lt;br /&gt;
Released: 8 April 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10252&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.8.5].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* KSES related XSS security vulnerability fixed&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8.4==&lt;br /&gt;
&lt;br /&gt;
Released: 11 January 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10242&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.8.4].&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8.3==&lt;br /&gt;
&lt;br /&gt;
Released: 11th October 2007&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10230&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.8.3].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* Some crucial performance fixes&lt;br /&gt;
* Many little annoying bugs squashed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8.2==&lt;br /&gt;
&lt;br /&gt;
Released: 8th July 2007&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10220&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.8.2].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* Two XSS security vulnerabilities (one reported in the wild) were fixed.&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8.1==&lt;br /&gt;
&lt;br /&gt;
Released: 14th June 2007&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10213&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.8.1].&lt;br /&gt;
&lt;br /&gt;
===Highlights===&lt;br /&gt;
* The groups implementation has been cleaned up somewhat from the 1.8 release.  The &#039;&#039;&#039;groupings&#039;&#039;&#039; GUI that appeared in 1.8 has been removed, because groupings are not complete and should not be used yet.  Moodle 1.8 sites that have created groupings should upgrade to 1.8.1 to have groupings reset ... otherwise there could be problem when upgrading to the real groupings in 1.9 or later.&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8==&lt;br /&gt;
&lt;br /&gt;
Released: 31st March 2007&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?projectId=10011&amp;amp;styleName=Html&amp;amp;version=10130 the full list of fixed issues in 1.8].&lt;br /&gt;
&lt;br /&gt;
===Headline features===&lt;br /&gt;
&lt;br /&gt;
* [[Accessibility]] - Moodle.com &lt;br /&gt;
:: The Moodle interface is now compliant with XHTML Strict 1.0 and major accessibility standards.&lt;br /&gt;
* [[Moodle Network]] - Catalyst, Richard Wyles&lt;br /&gt;
:: We can now set up peer Moodle installations allowing users to roam from one site to another, using comprehensive SSO and transparent remote enrolments.  Administrators at the originating Moodle install can see logs of remote activity. You can also run your Moodle in &amp;quot;Hub&amp;quot; mode where any Moodle install can connect and users roam across.&lt;br /&gt;
* [[Web Services API]] - Catalyst, Richard Wyles&lt;br /&gt;
:: The Moodle Network code includes an XML-RPC call dispatcher that can expose the WHOLE Moodle API to trusted hosts.  We will building on this in further versions but you can start using it now if you need to.&lt;br /&gt;
* [[Development:lib/formslib.php|Moodle forms library]] - Moodle.com &lt;br /&gt;
:: Majority of forms now use a single API for defining forms consistently and collecting data safely without using any HTML at all.&lt;br /&gt;
* [[Multi Authentication]] - Iñaki Arenaza / Catalyst / Moodle.com&lt;br /&gt;
:: It is now easier to configure multiple sources of authentication at once.  WARNING: the format for authentication plugins has changed, so custom plugins may be broken, however it&#039;s very easy to convert old code to the new format. More details can be found in /auth/README.txt.&lt;br /&gt;
* [[Development:Customisable user profiles|Customisable User Profiles]] - Pukunui Technology&lt;br /&gt;
::Allow new arbitrary fields to be added to the user profile, with more control over what fields appear on what signup and profile editing screens.&lt;br /&gt;
* Groups refactor - OU / Moodle.com&lt;br /&gt;
::Groups code has been reorganised to make it more flexible for the future (see 1.9).  &lt;br /&gt;
* [http://tracker.moodle.org/secure/IssueNavigator.jspa?mode=hide&amp;amp;requestId=10221 Roles improvements] - Moodle.com&lt;br /&gt;
:: In addition to many Roles fixes and refinements, Moodle 1.8 has separated the SYSTEM context from the SITE context (which makes it more like 1.6 used to work).  The SITE context is the &amp;quot;front page course&amp;quot; and its activities.  This should make it easier for admins to set up permissions. Login as and switching of roles was rewritten. Administrators can view recommended permission settings of legacy roles and may reset legacy roles to defaults.&lt;br /&gt;
* [http://tracker.moodle.org/browse/MDL-7993 Support for ODS export] - Moodle.com&lt;br /&gt;
::Open Document Format should solve majority of current problems with exports into proprietary Excel format. You may need to install special import plugin if you are using MS Office.&lt;br /&gt;
&lt;br /&gt;
===Known problems===&lt;br /&gt;
* CAS auth not working&lt;br /&gt;
&lt;br /&gt;
===Module improvements===&lt;br /&gt;
* [[Authorize.net Payment Gateway]] enrolment plugin &lt;br /&gt;
:: Payment managers can obtain an authorization code over phone from customer&#039;s bank if the credit card of the user cannot be captured on the internet directly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Developers please add news here!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
*[[Upgrading to Moodle 1.8]]&lt;br /&gt;
&lt;br /&gt;
[[Release_Notes#Table_of_Contents|Table of Contents]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7.5==&lt;br /&gt;
&lt;br /&gt;
Released: 11th July 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10251&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.7.5].&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7.4==&lt;br /&gt;
&lt;br /&gt;
Released: 11 January 2008&lt;br /&gt;
&lt;br /&gt;
Here is [http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10243&amp;amp;styleName=Html&amp;amp;projectId=10011 the full list of fixed issues in 1.7.4].&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7.3==&lt;br /&gt;
&lt;br /&gt;
11th October, 2007&lt;br /&gt;
&lt;br /&gt;
[http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10212&amp;amp;styleName=Html&amp;amp;projectId=10011 This page shows issues resolved in this version]&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7.2==&lt;br /&gt;
&lt;br /&gt;
30th March, 2007&lt;br /&gt;
&lt;br /&gt;
[http://tracker.moodle.org/secure/ReleaseNote.jspa?projectId=10011&amp;amp;styleName=Html&amp;amp;version=10174 This page shows issues resolved in this version]&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
* Unintended logouts are now prevented - sesskey added to logout.php script&lt;br /&gt;
* Fixed problem with visible posts in user profile when &amp;quot;forceloginforprofiles&amp;quot; disabled&lt;br /&gt;
* Fixed visibility of site blog entries&lt;br /&gt;
* Corrected wrong includes in lams&lt;br /&gt;
* XSS injection in SCORM 1.2 reports&lt;br /&gt;
* Fixed old problem with approvals in Data module, edited entries were approved automatically&lt;br /&gt;
* Fixed escaping in shell commands (Win32 platform only)&lt;br /&gt;
* Fixed visibility of blog drafts&lt;br /&gt;
* Rewritten parameter handling in repository plugin&lt;br /&gt;
* Fixed XSS in login block&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7.1==&lt;br /&gt;
&lt;br /&gt;
17th January, 2007&lt;br /&gt;
&lt;br /&gt;
[http://tracker.moodle.org/secure/ReleaseNote.jspa?projectId=10011&amp;amp;styleName=Html&amp;amp;version=10151 This page shows details about issues resolved in this version]&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7==&lt;br /&gt;
&lt;br /&gt;
7th November, 2006&lt;br /&gt;
&lt;br /&gt;
[http://tracker.moodle.org/secure/ReleaseNote.jspa?version=10120&amp;amp;styleName=Html&amp;amp;projectId=10011&amp;amp;Create=Create This page shows details about issues resolved in this version]	 &lt;br /&gt;
 &lt;br /&gt;
===Headline features===	 &lt;br /&gt;
 &lt;br /&gt;
* [[Roles]]	 &lt;br /&gt;
:: Permissions based on fine-grained capabilities allow all kinds of roles to be created and assigned in all contexts around Moodle. This creates a great deal more flexibility in the permissions that you can grant to people.	 &lt;br /&gt;
* [[Development:XMLDB Documentation|XML Database Schema]]	 &lt;br /&gt;
:: added support for MS-SQL and Oracle with more databases to come. Developers now have just one XML file to edit when changing the database structure, and there is even a very funky editor for this file built-in to Moodle	 &lt;br /&gt;
* New Admin interface	 &lt;br /&gt;
:: Completely new admin interface, with accessible design and cool features to make access to settings fast and easy.	 &lt;br /&gt;
* [[Development:Unit tests|Unit testing framework]]	 &lt;br /&gt;
:: Making it easier for developers to write test code, which should ultimately lead to a more reliable Moodle.	 &lt;br /&gt;
* [[AJAX]] Course editing (STILL UNSTABLE IN 1.7 RELEASE AND OFF BY DEFAULT, USE WITH CAUTION!)	 &lt;br /&gt;
:: The Topics and Weekly course formats now feature AJAX editing which means you can drag drop blocks, activities and sections (weeks/topics) and it all happens instantly. No more page reloading!&lt;br /&gt;
&lt;br /&gt;
===Module improvements===	 &lt;br /&gt;
 &lt;br /&gt;
* Improvements to the [[Assignment module]]	 &lt;br /&gt;
**New type Advanced uploading of files	 &lt;br /&gt;
 &lt;br /&gt;
* Improvements to the [[Database module]]	 &lt;br /&gt;
**Template/Field settings can now be saved as Presets and shared across a site.	 &lt;br /&gt;
**Presets are just zip files, and can also be shared between sites.	 &lt;br /&gt;
**Moodle 1.7 comes with one sample preset (an Image Gallery) with more to come.	 &lt;br /&gt;
**New latitude/longitude data type	 &lt;br /&gt;
 &lt;br /&gt;
* Improvements to the [[Lesson module]]	 &lt;br /&gt;
**Now has a more unified view of lesson screens.	 &lt;br /&gt;
**Teacher editing:	 &lt;br /&gt;
***Collapsed view has a nicer format, displays more information regarding each page and allows the creation of new pages.	 &lt;br /&gt;
***Editing is now speedier by replacing 3 second redirect delays with a notification system.	 &lt;br /&gt;
**New feature: display default feedback.	 &lt;br /&gt;
***Default is &#039;&#039;&#039;On&#039;&#039;&#039; so previous lessons behave as before.	 &lt;br /&gt;
***Description: if no &#039;&#039;response&#039;&#039; is entered for a question answer and this setting is turned &#039;&#039;&#039;Off&#039;&#039;&#039;, then the user skips the feedback page.	 &lt;br /&gt;
**Graceful degrade of JavaScript.	 &lt;br /&gt;
**Several bug fixes.	 &lt;br /&gt;
 &lt;br /&gt;
* Improvements to the [[Quiz module]]	 &lt;br /&gt;
:* The teacher can configure comments that are displayed to the student at the end of their attempt, with the comment displayed depending on the student&#039;s score.	 &lt;br /&gt;
 &lt;br /&gt;
* Improvements to some core question types	 &lt;br /&gt;
:* All question types can now have some general feedback. This is displayed to all students after they have finished the question (depending on the quiz settings) and does not depend on what response the student gave. Use this to tell the student what the question was about, or link them to more information about the topic it covers.	 &lt;br /&gt;
:* [[Matching question type|Matching]] questions can have extra wrong answers, and work when two questions have the same answer.	 &lt;br /&gt;
:* [[Multiple Choice question type|Multiple Choice]] questions can have feedback for the whole question, as well as specific answers. This is particularly useful for multiple-response questions.	 &lt;br /&gt;
:* [[Numerical question type|Numerical]] questions can have different answers with different precisions and scores. (Previously this was only supported via GIFT import. Now you can edit questions like this.)	 &lt;br /&gt;
 &lt;br /&gt;
* Improvements to the [[Wiki module]]	 &lt;br /&gt;
:* While editing a wiki page it is now locked so that others cannot try to change it at the same time. Teachers can override the lock.	 &lt;br /&gt;
:* Minor bugfixes (mostly to fix problems that occured when using Postgres database).	 &lt;br /&gt;
 &lt;br /&gt;
===Enrolment plugin improvements===	 &lt;br /&gt;
 &lt;br /&gt;
* [[Authorize.net Payment Gateway]] enrolment plugin 	 &lt;br /&gt;
:*Accepts &#039;Electronic Checks (ACH)&#039;. After a user approving echeck, an admin who has upload csv capacity must import a CSV file to get the user enrolled in the Payment Management page.	 &lt;br /&gt;
:*Autoconfigures credit card and echeck types if the merchant does not accept some types of them.&lt;br /&gt;
&lt;br /&gt;
[[Release_Notes#Table_of_Contents|Table of Contents]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[Release]]&lt;br /&gt;
*[[Old releases|Old release notes]]&lt;br /&gt;
&lt;br /&gt;
[[es:Notas de versiones]]&lt;br /&gt;
[[fr:Notes de mise à jour]]&lt;br /&gt;
[[pt:Versões do Moodle]]&lt;br /&gt;
[[ru:Примечания к версиям]]&lt;br /&gt;
[[de:Versionen]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:manage&amp;diff=47394</id>
		<title>Capabilities/moodle/category:manage</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:manage&amp;diff=47394"/>
		<updated>2008-12-01T05:32:36Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This capability was introduced in Moodle 1.9.4 to replace the separate capabilities moodle/category:create, moodle/category:update and moodle/category:delete.&lt;br /&gt;
&lt;br /&gt;
*This allows a user to create, update and delete course categories.&lt;br /&gt;
*This capability may only be applied in the system context, or in category context, to allow management of subcategories.&lt;br /&gt;
&lt;br /&gt;
The exact rules enforced for various actions are: (Remember that the parent of a given category may be either the system context, or another category.)&lt;br /&gt;
&lt;br /&gt;
# To add a new category, you need moodle/category:manage in the parent of the category you are adding to.&lt;br /&gt;
# To browse a category and the courses it contains, you don&#039;t normally need any special capabilities, except that&lt;br /&gt;
#* to view hidden courses, you need [[Capabilities/moodle/course:viewhiddencourses|moodle/course:viewhiddencourses]], and&lt;br /&gt;
#* to see hidden categories you need [[Capabilities/moodle/category:viewhiddencategories|moodle/category:viewhiddencategories]]&lt;br /&gt;
# To update a category&#039;s name, description, and/or visiblility, you need moodle/category:manage in the category itself.&lt;br /&gt;
# To move a category from one place in the tree to another, you need moodle/category:manage in both the old and new parent categories (and you are not allowed to move a category to be a descendant of itself!)&lt;br /&gt;
# To delete a category, you need moodle/category:manage in the parent category and the category itself. In addition, if the category or any of its subcategories contains any courses you need either:&lt;br /&gt;
#* [[Capabilities/moodle/course:delete|moodle/course:delete]] in all of those courses, and moodle/category:manage in all of the child categories, or&lt;br /&gt;
#* [[Capabilities/moodle/course:create|moodle/course:create]] and moodle/category:manage in some other category that is not a child of this one. (Except that, if this category contains no sub-categories, we don&#039;t check moodle/category:manage in the other category.)&lt;br /&gt;
&lt;br /&gt;
====Legacy Role Default Settings====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Legacy Role !! Inherit !! Allow !! Prevent !! Prohibit&lt;br /&gt;
|-&lt;br /&gt;
| Administrator || - || X || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Course Creator || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Non-editing Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Student || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Guest || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Authenticated User || X || - || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Add/edit course categories]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Capabilities|Category]]&lt;br /&gt;
[[Category:Course]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[eu:Capabilities/moodle/category:create]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:create&amp;diff=47393</id>
		<title>Capabilities/moodle/category:create</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:create&amp;diff=47393"/>
		<updated>2008-12-01T05:31:39Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*This allows a user to create course categories.&lt;br /&gt;
*This capability may only be applied in the system context i.e. as a global role.&lt;br /&gt;
&lt;br /&gt;
In Moodle 1.9.4 this capability was replaced with [[Capabilities/moodle/category:manage|moodle/category:manage]].&lt;br /&gt;
&lt;br /&gt;
====Legacy Role Default Settings====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Legacy Role !! Inherit !! Allow !! Prevent !! Prohibit&lt;br /&gt;
|-&lt;br /&gt;
| Administrator || - || X || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Course Creator || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Non-editing Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Student || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Guest || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Authenticated User || X || - || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Add/edit course categories]]&lt;br /&gt;
 &lt;br /&gt;
[[Category:Capabilities|Category]]&lt;br /&gt;
[[Category:Course]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[eu:Capabilities/moodle/category:create]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:delete&amp;diff=47392</id>
		<title>Capabilities/moodle/category:delete</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:delete&amp;diff=47392"/>
		<updated>2008-12-01T05:31:37Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*This allows a user to delete course categories.&lt;br /&gt;
*This capability may only be applied in the system context i.e. as a global role.&lt;br /&gt;
&lt;br /&gt;
In Moodle 1.9.4 this capability was replaced with [[Capabilities/moodle/category:manage|moodle/category:manage]].&lt;br /&gt;
&lt;br /&gt;
====Legacy Role Default Settings====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Legacy Role !! Inherit !! Allow !! Prevent !! Prohibit&lt;br /&gt;
|-&lt;br /&gt;
| Administrator || - || X || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Course Creator || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Non-editing Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Student || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Guest || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Authenticated User || X || - || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Add/edit course categories]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Capabilities|Category]]&lt;br /&gt;
[[Category:Course]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:update&amp;diff=47391</id>
		<title>Capabilities/moodle/category:update</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:update&amp;diff=47391"/>
		<updated>2008-12-01T05:31:34Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*This allows a user to update a course category.&lt;br /&gt;
*This capability may only be applied in the system context i.e. as a global role.&lt;br /&gt;
&lt;br /&gt;
In Moodle 1.9.4 this capability was replaced with [[Capabilities/moodle/category:manage|moodle/category:manage]].&lt;br /&gt;
&lt;br /&gt;
====Legacy Role Default Settings====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Legacy Role !! Inherit !! Allow !! Prevent !! Prohibit&lt;br /&gt;
|-&lt;br /&gt;
| Administrator || - || X || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Course Creator || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Non-editing Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Student || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Guest || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Authenticated User || X || - || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Add/edit course categories]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Capabilities|Category]]&lt;br /&gt;
[[Category:Course]]&lt;br /&gt;
&lt;br /&gt;
[[eu:Gaitasunak/moodle/category:update]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:viewhiddencategories&amp;diff=47390</id>
		<title>Capabilities/moodle/category:viewhiddencategories</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:viewhiddencategories&amp;diff=47390"/>
		<updated>2008-12-01T05:30:46Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before Moodle 1.9.4, this capability was called moodle/category:visibility.&lt;br /&gt;
&lt;br /&gt;
* This allows a user to see hidden course categories.&lt;br /&gt;
* This capability may be applied in either the system context, or in a particular course category.&lt;br /&gt;
&lt;br /&gt;
====Legacy Role Default Settings====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Legacy Role !! Inherit !! Allow !! Prevent !! Prohibit&lt;br /&gt;
|-&lt;br /&gt;
| Administrator || - || X || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Course Creator || - || X || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Non-editing Teacher || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Student || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Guest || X || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Authenticated User || X || - || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Capabilities|Category]]&lt;br /&gt;
[[Category:Course]]&lt;br /&gt;
&lt;br /&gt;
[[eu:Gaitasunak/moodle/category:visibility]]&lt;br /&gt;
[[fr:Capabilities/moodle/category:visibility]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:visibility&amp;diff=47389</id>
		<title>Capabilities/moodle/category:visibility</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/test/index.php?title=Capabilities/moodle/category:visibility&amp;diff=47389"/>
		<updated>2008-12-01T05:29:28Z</updated>

		<summary type="html">&lt;p&gt;TimHunt: Capabilities/moodle/category:visibility moved to Capabilities/moodle/category:viewhiddencategories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Capabilities/moodle/category:viewhiddencategories]]&lt;/div&gt;</summary>
		<author><name>TimHunt</name></author>
	</entry>
</feed>