<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/310/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Markstevens</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/310/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Markstevens"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/Special:Contributions/Markstevens"/>
	<updated>2026-04-13T15:43:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Update_profile&amp;diff=66666</id>
		<title>Update profile</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Update_profile&amp;diff=66666"/>
		<updated>2009-12-29T02:23:15Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: &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 crop the image 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;
===Custom Profile Categories===&lt;br /&gt;
If any custom user profile categories and fields have been created on your Moodle site, they will be listed at the bottom of the [[User profile fields|Admin &amp;gt;Accounts&amp;gt;User profile fields]]&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, the 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>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Development:Editor_file_management&amp;diff=60871</id>
		<title>Development:Editor file management</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Development:Editor_file_management&amp;diff=60871"/>
		<updated>2009-08-04T03:09:52Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is to start a usability discussion about the best way to implement a particular new feature in Moodle 2.0. &lt;br /&gt;
&lt;br /&gt;
HTML texts may have associated embedded media, such as images, videos and sounds.   These are added to the HTML file using the HTML editor (which in Moodle 2.0 is a modified version of TinyMCE) and stored in the &amp;quot;file area&amp;quot; associated with the text.  This applies to all texts in Moodle 2.0, ranging from simple forum posts to full-blown mini-web sites in the Resource module.&lt;br /&gt;
&lt;br /&gt;
There may be more than one file, and files may change or require deletion, so they need to be managed.&lt;br /&gt;
&lt;br /&gt;
The question we need to solve is: &amp;quot;What is the best interface to manage and browse these files?&amp;quot; &lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
[[Image:wordpress2.8-upload-a.png|thumb|Wordpress 2.8]][[Image:wordpress2.8-upload-b.png|thumb|Wordpress 2.8]]&lt;br /&gt;
Example 1: Office document (Word, OpenOffice, Google Docs).  Once the &amp;quot;Open&amp;quot; dialog is used to bring the media into the page, the only way it can be removed from the document is by deleting it from the document directly.  Office applications do not have a way of managing media separately from the document view.&lt;br /&gt;
&lt;br /&gt;
Example 2: Dreamweaver. &lt;br /&gt;
&lt;br /&gt;
Example 3: Box net.  Documents can be made and images added, but there is no interface in the document to manage media.  However, when looking at the filesystem view one can see the media in a folder and can edit it.   Obviously changing names and deleting things will break the links in the HTML.&lt;br /&gt;
&lt;br /&gt;
Example 4: Wordpress: Separate tabs for Uploading from PC, uploading from URL, and selecting an image from Media Library (files already on server). When image is uploaded in first two, there is a list of the files already uploaded. In any of the three tabs, when an image is selected, options for its display are shown, along with an option to delete. See: http://demo.opensourcecms.com/wordpress/wp-admin/page-new.php (user:admin, password:demo123 or see http://php.opensourcecms.com/scripts/details.php?scriptid=88&amp;amp;name=WordPress)&lt;br /&gt;
&lt;br /&gt;
(TODO: more examples)&lt;br /&gt;
&lt;br /&gt;
== Related Moodle 2 features == &lt;br /&gt;
&lt;br /&gt;
===File picker ===&lt;br /&gt;
&lt;br /&gt;
The file picker is designed to mimic the file open dialog.  &lt;br /&gt;
&lt;br /&gt;
As usual, the button/link/menu that initiates the file picker can specify what mime types are being looked for, and the resulting display is limited to those repositories that support those mime types, and only files matching the mime types are shown. &lt;br /&gt;
&lt;br /&gt;
===File manager form element ===&lt;br /&gt;
&lt;br /&gt;
The file manager form element allows any form to have a managed set of files, such as a set of attachments to a forum post.  Files can be added (by calling the file picker) or deleted (by pressing a little X next to any file).&lt;br /&gt;
&lt;br /&gt;
 [[Image:Filemanagerform.png]]&lt;br /&gt;
&lt;br /&gt;
==Mockups==&lt;br /&gt;
&lt;br /&gt;
Click on this diagram to see the full-sized version:&lt;br /&gt;
&lt;br /&gt;
[[Image:Editor_file_management.png]]&lt;br /&gt;
&lt;br /&gt;
=== Mockup A ===&lt;br /&gt;
&lt;br /&gt;
File manager in the Insert/Edit dialog.  &lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* Management is kept separate from the file picker &lt;br /&gt;
* Interface is similar to file manager forms element &lt;br /&gt;
* No extra icon needed in editor toolbar&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* Insert/Edit image dialog needs to be modified, and maintained &lt;br /&gt;
* harder to deal with many files &lt;br /&gt;
* Interface clutter for people who won&#039;t use this feature&lt;br /&gt;
* Files can be deleted here resulting in missing media from the HTML.&lt;br /&gt;
&lt;br /&gt;
=== Mockup B ===&lt;br /&gt;
&lt;br /&gt;
File manager is implemented as a separate repository inside the filepicker eg &amp;quot;Current files&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* Very easy to implement across Moodle, no changes to editors are needed.&lt;br /&gt;
* Makes sense when re-choosing images already chosen (eg. to add another copy of the same image).&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* Breaks the paradigm of the &amp;quot;file picker&amp;quot; because files can be deleted, zips uploaded etc. &lt;br /&gt;
* &amp;quot;Current files&amp;quot; difficult to separate logically from the &amp;quot;Local files&amp;quot;. &lt;br /&gt;
* Files can be deleted here resulting in missing media from the HTML.&lt;br /&gt;
* Constantly clutters repository list with an item that many will not use.&lt;br /&gt;
* Inconsistent with the filemanager form element (used for attachments etc)&lt;br /&gt;
* Either we show all files (ignore mimetype) or only show files matching mimetype (incomplete management)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mockup C ===&lt;br /&gt;
&lt;br /&gt;
File manager is implemented separately from file picking, as a new tinymce plugin. &lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* Functionality is separate from the file picker so file picker paradigm preserved &lt;br /&gt;
* People who don&#039;t need it don&#039;t have to see it (unclutters interface)&lt;br /&gt;
* Interface is very similar to the file manager form element &lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* Requires a new tinymce plugin that needs maintenance &lt;br /&gt;
* Requires a whole new icon in the editor toolbar.&lt;br /&gt;
* Files can be deleted here resulting in missing media from the HTML.&lt;br /&gt;
&lt;br /&gt;
==Some use cases in more detail==&lt;br /&gt;
&lt;br /&gt;
(In progress)&lt;br /&gt;
&lt;br /&gt;
===Add a new image to a post somewhere in Moodle===&lt;br /&gt;
&lt;br /&gt;
* Click on the image button &lt;br /&gt;
* Click on the search button &lt;br /&gt;
* Select a file from a repository (or upload) &lt;br /&gt;
* Add metadata and preferences. &lt;br /&gt;
* Insert the image &lt;br /&gt;
&lt;br /&gt;
===Add an image AGAIN to a post somewhere in Moodle=== &lt;br /&gt;
* Click on the image button &lt;br /&gt;
* Click on the search button &lt;br /&gt;
* Select the image from the &amp;quot;Recent files&amp;quot; repository &lt;br /&gt;
* Add metadata and preferences again&lt;br /&gt;
* Insert the image &lt;br /&gt;
&lt;br /&gt;
===Add an attachment to anything===&lt;br /&gt;
* Click on &amp;quot;Add&amp;quot; in the file manager form element&lt;br /&gt;
* Select a file from a repository (or upload)&lt;br /&gt;
* File is added &lt;br /&gt;
&lt;br /&gt;
==Discussion==&lt;br /&gt;
&lt;br /&gt;
So, what is best?&lt;br /&gt;
&lt;br /&gt;
Discussion is here:  [http://moodle.org/mod/forum/discuss.php?d=127238 RFC: Editor file management in Moodle 2.0]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Random_Short-Answer_Matching_question_type&amp;diff=60870</id>
		<title>Random Short-Answer Matching question type</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Random_Short-Answer_Matching_question_type&amp;diff=60870"/>
		<updated>2009-08-04T02:55:11Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Questions}}&lt;br /&gt;
&lt;br /&gt;
* From the student perspective, this looks just like a [[Matching question type|Matching question]]. The difference is that the sub-questions are drawn randomly from the [[Short-Answer question type|Short Answer questions]] in the current category.&lt;br /&gt;
* After an optional introduction, the respondent is presented with two or more sub-questions, each with a drop-down menu box opposite listing the same number of available answer options.&lt;br /&gt;
* The respondent must select an answer option to match each sub-question.&lt;br /&gt;
* Each sub-question is equally weighted to contribute towards the grade for the total question.&lt;br /&gt;
* The questions and answers are randomly drawn from the pool of short-answer questions in the current category. Each attempt on a quiz will have different questions and answers.&lt;br /&gt;
* You must make sure that the category contains enough unused short-answer questions, otherwise the student will get an error message. The more short-answer questions you add to the category, the more likely it is that students will see a new selection on each attempt.&lt;br /&gt;
* Note that the answer options are taken from the &#039;&#039;&#039;correct&#039;&#039;&#039; answers of each contributing short-answer question. Therefore, if the short-answer questions in this category are on different topics, this question type will not be useful, as the correct option will be obvious.&lt;br /&gt;
** An example that doesn&#039;t work - suppose the category contains 2 short-answer questions, as follows:&lt;br /&gt;
 1. What is the capital of France?&lt;br /&gt;
  Correct answer: Paris&lt;br /&gt;
  Other recognised answers: Lyon, Marseilles, *&lt;br /&gt;
 2. What vegetable is called &#039;løk&#039; in Norway?&lt;br /&gt;
  Correct answer: Onion&lt;br /&gt;
  Other recognised answers: Leek, *&lt;br /&gt;
&lt;br /&gt;
** The resulting Random Short-Answer Matching question will appear as follows:&lt;br /&gt;
 What is the capital of France?&lt;br /&gt;
  - Options: Paris, Onion.&lt;br /&gt;
 What vegetable is called &#039;løk&#039; in Norway?&lt;br /&gt;
  - Options: Paris, Onion.&lt;br /&gt;
&lt;br /&gt;
** An example that does work - the 2 short-answer questions in the category are as follows:&lt;br /&gt;
 1. What is the capital of France?&lt;br /&gt;
  Correct answer: Paris&lt;br /&gt;
  Other recognised answers: Lyon, Marseilles, *&lt;br /&gt;
 2. In what city is Le Corbusier&#039;s &amp;quot;Unite d&#039;Habitation&amp;quot;?&lt;br /&gt;
  Correct answer: Marseilles&lt;br /&gt;
  Other recognised answers: Paris, Lyon *&lt;br /&gt;
&lt;br /&gt;
** The resulting Random Short-Answer Matching question will appear as follows:&lt;br /&gt;
 What is the capital of France?&lt;br /&gt;
  - Options: Paris, Marseilles.&lt;br /&gt;
 In what city is Le Corbusier&#039;s &amp;quot;Unite d&#039;Habitation&amp;quot;?&lt;br /&gt;
  - Options: Paris, Marseilles.&lt;br /&gt;
&lt;br /&gt;
==Question set-up==&lt;br /&gt;
&lt;br /&gt;
# Select the question category.&lt;br /&gt;
# Give the question a descriptive name - this allows you to identify it in the question bank.&lt;br /&gt;
# Enter the question text to tell the students what they are matching, or use the default text.&lt;br /&gt;
&lt;br /&gt;
# Set the &#039;default question grade&#039; (i.e. the maximum number of marks for this question).&lt;br /&gt;
# Set the &#039;Penalty factor&#039; (see [[Random_Short-Answer_Matching_question_type#Penalty_factor|Penalty factor]] below).&lt;br /&gt;
# &#039;&#039;Moodle 1.7+:&#039;&#039; If you wish, add general feedback. This is text that appears to the student after he/she has answered the question.&lt;br /&gt;
# Select the number of questions you want to add to the matching question - make sure this is less than or equal to the number of short-answer questions available in this category.&lt;br /&gt;
# Click Save changes.&lt;br /&gt;
&lt;br /&gt;
=== Penalty factor ===&lt;br /&gt;
&lt;br /&gt;
The &#039;penalty factor&#039; only applies when the question is used in a quiz using adaptive mode - i.e. where the student is allowed multiple attempts at a question even within the same attempt at the quiz. If the penalty factor is more than 0, then the student will lose that proportion of the &#039;&#039;&#039;maximum&#039;&#039;&#039; grade upon each successive attempt. For example, if the default question grade is 10, and the penalty factor is 0.2, then each successive attempt after the first one will incur a penalty of 0.2 x 10 = 2 points.&lt;br /&gt;
&lt;br /&gt;
[[fr:Question à réponses aléatoires]]&lt;br /&gt;
[[ca:Tipus_de_pregunta_de_aparellaments_aleatoris_de_resposta_breu]]&lt;br /&gt;
[[ja:ランダム記述組み合わせ問題タイプ]]&lt;br /&gt;
[[de:Zufällige Kurzantwort-Zuordnung]]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Teaching_tips_and_tricks&amp;diff=60869</id>
		<title>Teaching tips and tricks</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Teaching_tips_and_tricks&amp;diff=60869"/>
		<updated>2009-08-04T02:50:41Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some frequently asked questions about courses by teachers with some tips and tricks. Don&#039;t forget there are other pages in MoodleDocs that deal with the details of a course. The teacher category at the bottom of this page has a nice index. Forums also have a wealth of tips and tricks.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How can I force automatic course enrollment?==&lt;br /&gt;
&lt;br /&gt;
You can link to a course in an HTML block, using the resources drop down or indeed any other method and then use the following URL (where 999 is your course ID):&lt;br /&gt;
&lt;br /&gt;
http://yourmoodlesite.com/moodle/course/enrol.php?id=999&amp;amp;confirm=1&lt;br /&gt;
&lt;br /&gt;
==How can I embed a web page in my course?==&lt;br /&gt;
&lt;br /&gt;
Using an iframe in a label allows external or internal web pages to be displayed in the middle of the Moodle screen (instead of just putting a link to them) &lt;br /&gt;
&lt;br /&gt;
How: &lt;br /&gt;
* Create a label &lt;br /&gt;
* Display raw HTML code (use the editor button &amp;lt;&amp;gt; &lt;br /&gt;
* Insert code like: &amp;lt;iframe width=&amp;quot;100%&amp;quot; height=&amp;quot;200&amp;quot; align=&amp;quot;middle&amp;quot; src=&amp;quot;http://www.google.com&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How can I copy my course or part of it?==&lt;br /&gt;
There are several ways.  These methods can be used to store any activity as a template.   For example, a teacher might want to duplicate an assignment for different groups that will appear under different weeks in the same course. Or take a Lesson in one course and use it in another course.&lt;br /&gt;
&lt;br /&gt;
===Import course data===&lt;br /&gt;
*[[Import_course_data]] is probably the most straightforward.  It brings in any other courses material by activity group.  For example, you can import all of the lessons from one course you have rights to into another, but not just a single lesson.&lt;br /&gt;
&lt;br /&gt;
===Use backup to duplicate or copy===&lt;br /&gt;
*Backing up a course.   Each version of Moodle has  different options for backing up.  The basic process in copying a course, is to create a backup and then select &amp;quot;new course&amp;quot; when restoring that backup. &lt;br /&gt;
**Understand what options you DO and DO NOT need to backup, so your copy has just what it needs.  For example, you may not want to see any student information or files in your new course, so don&#039;t back those up.&lt;br /&gt;
**Version 1.6 backup process has lots of boxes to check or uncheck next to every activity and resource that is in the course.  Version 1.5.3 has a list of activity types to select for inclusion in a backup.  &lt;br /&gt;
**One of the old tricks in 1.5.3 and earlier version, is to restore the old course to a new course. Then edit down the new course to just the activities you want.&lt;br /&gt;
**Want the same activity in 5 courses you already created?  Create a backup of a course that only contains the activity you want.  Now restore that course by selecting the option &amp;quot;add to existing course, keep data&amp;quot;, repeat it for every one of your 5 courses.&lt;br /&gt;
&lt;br /&gt;
Here is the MoodleDoc page [[Course_backup]] that will give you more details.&lt;br /&gt;
&lt;br /&gt;
===Use Import or Sharing Cart to duplicate a single item===&lt;br /&gt;
* See [[Duplicating_Activities_and_Resources|Duplicating Activities and Resources]]&lt;br /&gt;
&lt;br /&gt;
==Creating a course on our website takes too long==&lt;br /&gt;
Depending upon your connection speed, screen refresh rates can really slow the creation process.   As a teacher, you might consider [[Complete_install_packages|adding a complete install package of Moodle]] on your desktop as a localhost.  Be sure that you have a method of restoring your desktop localhost backup to your web based Moodle.  And of course, your localhost version should be the same version as your web based Moodle.&lt;br /&gt;
&lt;br /&gt;
== My course looked good then something happened==&lt;br /&gt;
With the best of software, sometimes strange things just happen.  For example, a list of activities does not look right. Or, you can not move things some places. All you really know is that things were working fine and then they only sort of work.  &lt;br /&gt;
:&#039;&#039;Tip:&#039;&#039; Try a [[backup]] of your course and [[restore]] it to a new course to see if that fixes things. If so you might consider restoring the backup to your existing course, deleting data from it first.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[Label]]&lt;br /&gt;
[[Category:Teacher]]&lt;br /&gt;
&lt;br /&gt;
[[es:Consejos y Trucos]]&lt;br /&gt;
[[eu:Aholkuak_eta_trikimailuak]]&lt;br /&gt;
[[fr:Trucs et astuces]]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Development:Unit_tests&amp;diff=60696</id>
		<title>Development:Unit tests</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Development:Unit_tests&amp;diff=60696"/>
		<updated>2009-07-29T08:46:15Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 1.7}}Location: &#039;&#039;Administration &amp;gt; Reports &amp;gt; Unit tests&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The purpose of Unit Tests is to evaluate the individual parts of a program (functions, and methods of classes) to make sure that each element individually does the right thing. Unit Tests can be one of the first steps in a quality control process for developing or tweaking Moodle code.  The next steps will involve other forms of testing to ensure that these different parts work together properly. &lt;br /&gt;
&lt;br /&gt;
The unit testing framework is based on the [http://www.simpletest.org/ SimpleTest] framework.&lt;br /&gt;
&lt;br /&gt;
== Running the unit tests in Moodle ==&lt;br /&gt;
&lt;br /&gt;
=== Running the basic tests ===&lt;br /&gt;
&lt;br /&gt;
# Log in with an admin account. &lt;br /&gt;
# Administration ► Development ► Unit tests (moodle &amp;gt;= 2.0, Administration ► Reports ► Unit tests Moodle &amp;lt;= 1.9)&lt;br /&gt;
# Click on the &#039;&#039;&#039;Reports&#039;&#039;&#039; link near the bottom of the page.&lt;br /&gt;
# Click the &#039;&#039;&#039;Run tests&#039;&#039;&#039; button and wait.&lt;br /&gt;
&lt;br /&gt;
This finds all the tests in Moodle and runs them. You can run a subset of the tests by entering a path (for example question/type) in the &#039;Only run tests in&#039; box. Similarly, if a test fails, you get some links in the failure message to make it easy to re-run just those tests.&lt;br /&gt;
&lt;br /&gt;
== Writing new tests ==&lt;br /&gt;
&lt;br /&gt;
As an example, suppose we wanted to write some tests for the string_manager class in mod/quiz/editlib.php.&lt;br /&gt;
&lt;br /&gt;
=== Where to put the tests ===&lt;br /&gt;
&lt;br /&gt;
The unit test report finds tests by looking for files called &#039;test....php&#039; inside folders called &#039;simpletest&#039;.&lt;br /&gt;
&lt;br /&gt;
So, for our example, we want to create called something like &#039;&#039;&#039;mod/quiz/simpletest/testeditlib.php&#039;&#039;&#039;. The skeleton of this file should look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Unit tests for (some of) mod/quiz/editlib.php.&lt;br /&gt;
 *&lt;br /&gt;
 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License&lt;br /&gt;
 * @package question&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
if (!defined(&#039;MOODLE_INTERNAL&#039;)) {&lt;br /&gt;
    die(&#039;Direct access to this script is forbidden.&#039;); //  It must be included from a Moodle page&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Make sure the code being tested is accessible.&lt;br /&gt;
require_once($CFG-&amp;gt;dirroot . &#039;/mod/quiz/editlib.php&#039;); // Include the code to test&lt;br /&gt;
&lt;br /&gt;
/** This class contains the test cases for the functions in editlib.php. */&lt;br /&gt;
class quiz_editlib_test extends UnitTestCase {&lt;br /&gt;
    function test_something() {&lt;br /&gt;
        // Do the test here.&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ... more test methods.&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is, you have a class called something_test, and in that class you have lots of methods called test_something. Normally, you have one test method for each particular thing you want to test, and you should try to name the function to describe what is being tested - without making the name too ridiculously long!&lt;br /&gt;
&lt;br /&gt;
=== A test function ===&lt;br /&gt;
&lt;br /&gt;
The a test function typically looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
function test_move_question_up() {&lt;br /&gt;
    // Setup fixture&lt;br /&gt;
&lt;br /&gt;
    // Exercise SUT&lt;br /&gt;
    $newlayout = quiz_move_question_up(&#039;1,2,0&#039;, 2);&lt;br /&gt;
&lt;br /&gt;
    // Validate outcome&lt;br /&gt;
    $this-&amp;gt;assertEqual($newlayout, &#039;2,1,0&#039;);&lt;br /&gt;
&lt;br /&gt;
    // Teardown fixture&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the [http://xunitpatterns.com/Four%20Phase%20Test.html four phase test pattern]. Those comments use a lot of testing jargon. The fixture is the background situation that needs to be set up before the test runs. SUT is short for &#039;situation under test&#039;. This is where you call the function or method that you want to test. Then you check to see if the function did the right thing. Finally, you have to clean up the fixture you created. With luck there is nothing to do here&lt;br /&gt;
&lt;br /&gt;
In this simple example, there is no setup or teardown to do. We just call the function we are testing with some sample input, and check that the return value is what we expect.&lt;br /&gt;
&lt;br /&gt;
=== Shared setUp and tearDown methods ===&lt;br /&gt;
&lt;br /&gt;
If all your test cases relate to the same area of code, then they may all need to same bit of fixture set up. For example, all the tests in lib/simpletest/teststringmanager.php need an instance of the string_manager class to test.&lt;br /&gt;
&lt;br /&gt;
To avoid duplicating code, you can override a method called &amp;lt;code&amp;gt;setUp()&amp;lt;/code&amp;gt; that sets up the test data. If present, this method will be called before each test method. You can write a matching &amp;lt;code&amp;gt;tearDown()&amp;lt;/code&amp;gt; method if there is any clean-up that needs to be done after each test case has run. For example, in lib/simpletest/teststringmanager.php there are setUp and tearDown methods that do something like:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
public function setUp() {&lt;br /&gt;
    // ...&lt;br /&gt;
    $this-&amp;gt;stringmanager = new string_manager(...);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function tearDown() {&lt;br /&gt;
    $this-&amp;gt;stringmanager = null;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Then, each test can use $this-&amp;gt;stringmanager without having to worry about the details of how it is set up.&lt;br /&gt;
&lt;br /&gt;
=== Further information ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;SimpleTest&#039;&#039; documentation is at: http://www.simpletest.org/.&lt;br /&gt;
&lt;br /&gt;
== Changes to your existing code to make it work with unit testing ==&lt;br /&gt;
&lt;br /&gt;
The whole point of unit testing is to test each piece of functionality separately. You can only do this is only possible to isolate that function and call it individually, perhaps after setting up a few other things.&lt;br /&gt;
&lt;br /&gt;
Therefore, it is good if you can write your code to depend on as few other things as possible. &lt;br /&gt;
&lt;br /&gt;
=== Include paths ===&lt;br /&gt;
&lt;br /&gt;
Includes like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
require_once(&#039;../../config.php&#039;); // Won&#039;t work.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
won&#039;t work. Instead, the more robust option is &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
require_once(dirname(__FILE__) . &#039;/../../config.php&#039;); // Do this.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access to global variables ===&lt;br /&gt;
&lt;br /&gt;
Because your code was included from within a function, you can&#039;t access global variables until you have done a global statement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
require_once(dirname(__FILE__) . &#039;/../../config.php&#039;);&lt;br /&gt;
require_once($CFG-&amp;gt;libdir . &#039;/moodlelib.php&#039;); // Won&#039;t work.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
require_once(dirname(__FILE__) . &#039;/../../config.php&#039;);&lt;br /&gt;
&lt;br /&gt;
global $CFG; // You need this.&lt;br /&gt;
require_once($CFG-&amp;gt;libdir . &#039;/moodlelib.php&#039;); // Will work now.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calls to global functions ===&lt;br /&gt;
Testing a class method that calls global functions can be problematic. At least, it&#039;s always complex, because we can&#039;t control what goes on in the global functions. We can&#039;t override the global functions or mock them in our unit tests. If the global functions themselves are well tested, this may not be a big problem, but most global functions are not well tested.&lt;br /&gt;
&lt;br /&gt;
==== Bridge Pattern ====&lt;br /&gt;
If your code needs to rely extensively on some public API, you could use the [http://en.wikipedia.org/wiki/Bridge_pattern bridge pattern] to decouple your code from that API. This way, when you write unit tests, you can override the bridging class or mock it, and control its outputs while you focus exclusively on testing your code.&lt;br /&gt;
&lt;br /&gt;
An basic example follows: Imagine that I do not trust the &#039;&#039;get_string()&#039;&#039; global function, but my code needs to use it. Initially my code has strong coupling with &#039;&#039;get_string()&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
class myclass {&lt;br /&gt;
    public function print_stuff($stuff) {&lt;br /&gt;
        echo get_string($stuff);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s write a bridging class to solve this coupling issue and use it instead of &#039;&#039;get_string()&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
class languageBridge {&lt;br /&gt;
    public function get_string($stuff,$module=&#039;moodle&#039;) {&lt;br /&gt;
        echo get_string($stuff, $module);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class myclass {&lt;br /&gt;
    public $lang_bridge;&lt;br /&gt;
    public function __construct() {&lt;br /&gt;
        $this-&amp;gt;lang_bridge = new languageBridge();&lt;br /&gt;
    }&lt;br /&gt;
    public function print_stuff($stuff) {&lt;br /&gt;
        echo $this-&amp;gt;lang_bridge-&amp;gt;get_string($stuff);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following is yet another example using a bridging method to decouple from the Moodle core API.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
class workshop_api {&lt;br /&gt;
    /**&lt;br /&gt;
     * This is a method we want to unittest&lt;br /&gt;
     */&lt;br /&gt;
    public function get_peer_reviewers($context) {&lt;br /&gt;
        static $users=null;&lt;br /&gt;
        if (is_null($users)) {&lt;br /&gt;
            $users = $this-&amp;gt;get_users_by_capability($context, &#039;mod/workshop:peerassess&#039;, &lt;br /&gt;
                        &#039;u.id, u.lastname, u.firstname&#039;, &#039;u.lastname,u.firstname&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, false, false, true);&lt;br /&gt;
        }&lt;br /&gt;
        return $users;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**  &lt;br /&gt;
     * Bridging method to decouple from Moodle core API&lt;br /&gt;
     */&lt;br /&gt;
    protected function get_users_by_capability() {&lt;br /&gt;
        $args = func_get_args();&lt;br /&gt;
        return call_user_func_array(&#039;get_users_by_capability&#039;, $args);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; Here are some comments on the examples above expressing that the bridge pattern should be used very carefully.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;I think that is a case of unit tests leading to worse software design, in that you are not using the standard API for something. But if you really want to unit test, I can&#039;t think of a better solution.&amp;quot;&lt;br /&gt;
* &amp;quot;I think this can be OK if used very selectively. Unfortunately I don&#039;t think it&#039;s the solution if you want to decouple the very complex and deeply nested Moodle functions from each other&amp;quot;&lt;br /&gt;
* &amp;quot;...your code is designed to be part of Moodle, so decoupling from a standard Moodle API is perverse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Unit testing in 2.0 ==&lt;br /&gt;
&lt;br /&gt;
{{Moodle 2.0}}&lt;br /&gt;
With the Objectification of the Database libraries in Moodle 2.0, new and better approaches to Unit testing can be used. Here is a sample of a simple test case: (in course/simpletest)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
 require_once($CFG-&amp;gt;dirroot . &#039;/course/lib.php&#039;);&lt;br /&gt;
 &lt;br /&gt;
 global $DB;&lt;br /&gt;
 Mock::generate(get_class($DB), &#039;mockDB&#039;);&lt;br /&gt;
 &lt;br /&gt;
 class courselib_test extends UnitTestCase {&lt;br /&gt;
     var $realDB;&lt;br /&gt;
 &lt;br /&gt;
     function setUp() {&lt;br /&gt;
         global $DB;&lt;br /&gt;
         $this-&amp;gt;realDB = $DB;&lt;br /&gt;
         $DB           = new mockDB();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     function tearDown() {&lt;br /&gt;
         global $DB;&lt;br /&gt;
         $DB = $this-&amp;gt;realDB;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     function testMoveSection() {&lt;br /&gt;
         global $DB;&lt;br /&gt;
         $course = new stdClass();&lt;br /&gt;
         $course-&amp;gt;id = 1;&lt;br /&gt;
 &lt;br /&gt;
         $sections = array();&lt;br /&gt;
         for ($i = 1; $i &amp;lt; 11; $i++) {&lt;br /&gt;
             $sections[$i]          = new stdClass();&lt;br /&gt;
             $sections[$i]-&amp;gt;id      = $i;&lt;br /&gt;
             $sections[$i]-&amp;gt;section = $i - 1;&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         $DB-&amp;gt;expectOnce(&#039;get_records&#039;, array(&#039;course_sections&#039;, array(&#039;course&#039; =&amp;gt; $course-&amp;gt;id)));&lt;br /&gt;
         $DB-&amp;gt;setReturnValue(&#039;get_records&#039;, $sections);&lt;br /&gt;
         $this-&amp;gt;assertFalse(move_section($course, 2, 3));&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also &#039;&#039;&#039;UnitTestCaseUsingDatabase&#039;&#039;&#039; in lib/simpletestlib.php.&lt;br /&gt;
&lt;br /&gt;
=== Testing HTML output ===&lt;br /&gt;
&lt;br /&gt;
(work in progress - to be documented properly once the API stabilizes)&lt;br /&gt;
&lt;br /&gt;
* ContainsTagWithAttribute($tag, $attribute, $value)&lt;br /&gt;
* ContainsTagWithAttributes($tag, $attributes)&lt;br /&gt;
* ContainsTagWithContents($tag, $content)&lt;br /&gt;
* ContainsEmptyTag($tag)&lt;br /&gt;
&lt;br /&gt;
The syntax is &lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$this-&amp;gt;assert(new ContainsTagWithAttribute($tag, $attribute, $value), $html);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code coverage analysis==&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; This section is a work in progress. Please use the [[{{TALKPAGENAME}}|page comments]] or an appropriate [http://moodle.org/course/view.php?id=5 moodle.org forum] for any recommendations/suggestions for improvement.{{{info|}}}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Wikipedia:Code_coverage|Code coverage]]&#039;&#039;&#039; is a technique, strongly tied with software testing, that allows to &#039;&#039;&#039;check and improve the quality of the tests&#039;&#039;&#039; by measuring the degree of source code that is being covered by them. With Moodle supporting more and more tests each day (slowly towards a &#039;&#039;&#039;Test Driven Development&#039;&#039;&#039; model) we need to integrate some tool into our development process helping to analyse the quality of ours tests.&lt;br /&gt;
&lt;br /&gt;
Right now (in Moodle 2.0) we are using [http://www.simpletest.org/ SimpleTest], one simple and great tool to perform all the tests. Unluckily, it doesn&#039;t support code coverage analysis at all. In the other hand, other PHP unit testing products like [http://www.phpunit.de/ PHPUnit], more complex and powerful, have built-in support for that technique, but switching to a new product is out from our current [[Roadmap]] plans.&lt;br /&gt;
&lt;br /&gt;
So, after some readings and comparisons, Moodle will implement its own extensions to SimpleTest, in order to fulfil the main goal of having statement/line code coverage analysis working under Moodle 2.0 onwards. To achieve this, also [http://developer.spikesource.com/projects/phpcoverage Spike PHPCoverage], a basic code-coverage tool, will be used and extended. You can find the details of the implementation of this tool at MDL-19579.&lt;br /&gt;
&lt;br /&gt;
=== Changes ===&lt;br /&gt;
&lt;br /&gt;
To enable code coverage in your tests, only a few modifications need to be performed to your current code:&lt;br /&gt;
&lt;br /&gt;
# Change your test classes by adding two (public static) attributes: &#039;&#039;&#039;$includecoverage&#039;&#039;&#039; and &#039;&#039;&#039;$excludecoverage&#039;&#039;&#039;, both arrays, being used to inform to the code coverage tool (via reflection) about which source code files and dirs must be covered/skipped by the analysis.&lt;br /&gt;
# Use &#039;&#039;&#039;[http://cvs.moodle.org/moodle/lib/simpletestcoveragelib.php?view=markup simpletestcoveragelib.php]&#039;&#039;&#039; instead of simpletestlib.php in your caller scripts.&lt;br /&gt;
# Use the &#039;&#039;&#039;autogroup_test_coverage&#039;&#039;&#039; class instead of the AutoGroupTest one (see below for details) in your caller scripts.&lt;br /&gt;
&lt;br /&gt;
(note that only the 1st point above is needed for new unit tests being created because both 2 and 3 (changes in caller scripts) are already implemented in Moodle and awaiting your cool unit tests.&lt;br /&gt;
&lt;br /&gt;
That&#039;s all! With those 3 basic changes, you will end with a complete code coverage report available for further analysis.&lt;br /&gt;
&lt;br /&gt;
=== API ===&lt;br /&gt;
&lt;br /&gt;
When using code coverage within Moodle there are two alternative APIs available, both providing the same code coverage reports at the end, but doing that in a different way. Here they are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal (hidden) coverage API&#039;&#039;&#039;: This API is completely hidden beyond the Unit testing API and you won&#039;t need to know the details about it. Just perform the 1-2-3 changes described above and, after running the tests you&#039;ll get the final report available for being used immediately, without needing to perform anything in your code. His major drawback: it only can perform &#039;&#039;&#039;one&#039;&#039;&#039; &amp;quot;code coverage session&amp;quot; (a.k.a. instrumentation), so it&#039;s only suitable for testing scripts using only one unit test execution. One example of this type of unit testing is  [http://cvs.moodle.org/moodle/admin/report/unittest/index.php?view=markup admin/report/unittest/index.php] where only one (big) test-group is executed.&lt;br /&gt;
* &#039;&#039;&#039;External (explicit) coverage API&#039;&#039;&#039;: This API needs extra coding as long as coverage instantiating, configuration and report generation happens in the main script. It&#039;s a bit more complex but, in the other hand, it support &#039;&#039;&#039;multiple&#039;&#039;&#039; instrumentations to be performed, and gives you more control about the code coverage process.  One example of this type of unit testing is  [http://cvs.moodle.org/moodle/admin/report/unittest/dbtest.php?view=markup admin/report/unittest/dbtest.php] where multiple (one for each DB being tested) test-group are executed.&lt;br /&gt;
&lt;br /&gt;
So, first of all (point 1 in prev section - usage), we need to define, for each unit test, which files / directories (relative to dirroot) we want to analyse with the tool. Here it&#039;s one example, for the &#039;&#039;&#039;dml_test&#039;&#039;&#039; unit test ([http://cvs.moodle.org/moodle/lib/dml/simpletest/testdml.php?view=markup /lib/dml/simpletest/testdml.php]), all we need to add to these lines to the class declaration :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
public  static $includecoverage = array(&#039;lib/dml&#039;);&lt;br /&gt;
public  static $excludecoverage = array(&#039;lib/dml/somedir&#039;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By doing so, the code coverage tool will know which are the target files to perform coverage analysis/reporting and will do that for all the files (recursively) in the &#039;&#039;lib/dml&#039;&#039;&#039; dir but excluding the &#039;&#039;lib/dml/somedir&#039;&#039; directory (recursively too). Note that both attributes are arrays so multiple paths can be specified in any of them. Also note that the dir where the UnitTest is stored is automatically excluded (usually &#039;&#039;simpletest&#039;&#039; dirs).&lt;br /&gt;
&lt;br /&gt;
And, as said, that&#039;s all you need to fulfil in order to get current/new unit tests being analysed by the code coverage tool by current Moodle scripts. The documentation below is only interesting for developers wanting to create new scripts able to perform unit testing with code coverage (points 2 and 3 in prev section - usage).&lt;br /&gt;
&lt;br /&gt;
==== Internal coverage API ====&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$test = new autogroup_test_coverage($showsearch, $test_name, $performcoverage, $coveragename, $coveragedir);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Create one new autogroup test object with code coverage support, there you can specify if you want to perform coverage (true/false), the name of the report (title) and the directory where the final report will be created (under moodledata/codecoverage). &lt;br /&gt;
Optionally you can add more files and directories (relative to dirroot) to the list of files to be covered / ignored by using these functions (in case the defined in point 1 aren&#039;t enough).&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$test-&amp;gt;add_coverage_include_path($path);&lt;br /&gt;
$test-&amp;gt;add_coverage_exclude_path($path);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
And then, affter adding a bunch of unit tests to the group, you simply invoke the test execution with code coverage support to end with a nice code coverage report under &#039;&#039;dataroot/codecoverage/$coveragedir&#039;&#039;:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$test-&amp;gt;run($unit_test_reporter);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
(don&#039;t forget that this API supports only &#039;&#039;&#039;one&#039;&#039;&#039; instrumentation to be performed)&lt;br /&gt;
&lt;br /&gt;
And that&#039;s all!&lt;br /&gt;
&lt;br /&gt;
==== External coverage API ====&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$covreporter = new moodle_coverage_reporter($coveragename, $coveragedir);&lt;br /&gt;
$covrecorder = new moodle_coverage_recorder($covreporter);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Create one coverage reporter, by passing its title and output directory as parameters.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$test = new autogroup_test_coverage($showsearch, $test_name, $performcoverage);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Create one new autogroup test object with code coverage support, you don&#039;t need to specify the title and dir here (as already have been defined by the moodle_coverage_reporter object).&lt;br /&gt;
Optionally you can add more files and directories (relative to dirroot) to the list of files to be covered / ignored by using these functions (in case the defined in point 1 aren&#039;t enough).&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$test-&amp;gt;add_coverage_include_path($path);&lt;br /&gt;
$test-&amp;gt;add_coverage_exclude_path($path);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Then, after adding a bunch of unit tests to the group, you simply invoke the test execution with code coverage support with:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$test-&amp;gt;run_with_external_coverage($unit_test_reporter, $covrecorder);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
(don&#039;t forget that this API supports &#039;&#039;&#039;multiple&#039;&#039;&#039; instrumentations to be performed)&lt;br /&gt;
&lt;br /&gt;
And finally, you generate the code coverage report (under &#039;&#039;dataroot/codecoverage/$coveragedir&#039;&#039;) using:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$covrecorder-&amp;gt;generate_report();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Once more, that&#039;s all!&lt;br /&gt;
&lt;br /&gt;
==== Final notes ====&lt;br /&gt;
* Note that there are some more methods available in the moodle_coverage_recorder class. They will allow to control starting/stopping instrumentations by hand and other minor things but they shouldn&#039;t really be used. The run() and run_with_external_coverage() methods should be enough in 99% of cases.&lt;br /&gt;
* Not being part of the API, but used by it, there is one &#039;&#039;&#039;[http://cvs.moodle.org/moodle/admin/report/unittest/coveragefile.php?view=markup overagefile.php]&#039;&#039;&#039; script under &#039;&#039;admin/report/unittest&#039;&#039; responsible for serving the coverage report files from within Moodle. See current scripts in that dir to see how can be used.&lt;br /&gt;
* All the test execution / reporting / coverage utilities must be protected with the &#039;moodle/site:config&#039; permission.&lt;br /&gt;
&lt;br /&gt;
== A warning ==&lt;br /&gt;
&lt;br /&gt;
In &#039;xUnit Test Patterns&#039; there is a [http://xunitpatterns.com/TestAutomationRoadmap.html scale of testing difficulty] that goes from 1. to 6. Moodle is definitely at number 6. on that scale &#039;Non-object-oriented legacy software&#039;. It then goes recommend that you don&#039;t start to learn about unit testing with that sort of software :-(&lt;br /&gt;
&lt;br /&gt;
== Further reading about unit testing ==&lt;br /&gt;
&lt;br /&gt;
[http://manning.com/reiersol/ PHP in Action] has an excellent chapter explaining unit testing in PHP with &#039;&#039;simpletest&#039;&#039;. (Although the rest of that book advocates a style of programming that is very different from the style used in Moodle.)&lt;br /&gt;
&lt;br /&gt;
[http://www.pragprog.com/titles/utj/pragmatic-unit-testing-in-java-with-junit Pragmatic Unit Testing in Java with JUnit] is also a very good introduction, despite being in the wrong programming language. JUnit and Simpletest are very similar.&lt;br /&gt;
&lt;br /&gt;
[http://xunitpatterns.com/ xUnit Test Patterns] is the ultimate unit test book. I think it teaches you everything you could learn about unit testing by reading a book. The only way to learn more would be years of experience. It has really great advice for dealing with the kind of messy problems you get in a big, real project like Moodle. &lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;br /&gt;
[[Category:Quality Assurance]]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=mod/techproject/view&amp;diff=60689</id>
		<title>mod/techproject/view</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=mod/techproject/view&amp;diff=60689"/>
		<updated>2009-07-29T02:34:58Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 1.7}}{{Moodle 1.8}}&lt;br /&gt;
&lt;br /&gt;
== Main Documentation Page For The &amp;quot;Techproject&amp;quot; Activity Module ==&lt;br /&gt;
&lt;br /&gt;
You may come to this documentation through the automatically generated link at the bottom of some screen of the &amp;quot;techproject&amp;quot; module. This module was developed and is maintained by Valery Fremaux at http://www.ethnoinformatique.fr (Moodle site)&lt;br /&gt;
&lt;br /&gt;
== The Technical Project Manager Module (Overview) ==&lt;br /&gt;
&lt;br /&gt;
This Activity Module is a collaborative constructivist workplace for elaborating in a pedagogic context a project-driven learning activity using the standard IEEE specified &amp;quot;successive refinement&amp;quot;. It provides tree-shaped friendly editors (5 actually) allowing writing and constructing the several descriptions that are produced and will document all steps of a project activity. Although its description model is mainly oriented towards &amp;quot;software development&amp;quot; project types, its information structure could be exploited each time a &amp;quot;Requirements&amp;quot; -&amp;gt; &amp;quot;Deliverable&amp;quot; process is consistent.&lt;br /&gt;
&lt;br /&gt;
[[image:techproject_project_paradigm.gif|frame|center]]&lt;br /&gt;
&lt;br /&gt;
The Techproject module is suitable for iterative project cycles, where a work is performed step by step, defining scheduled milestones :&lt;br /&gt;
&lt;br /&gt;
[[image:techproject_project_cyclic_paradigm.gif|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Some concepts ==&lt;br /&gt;
&lt;br /&gt;
* [[mod/techproject/view/concepts/entitiesandunits|Project Entities and Project Units]]&lt;br /&gt;
* [[mod/techproject/view/concepts/treeeditors|Tree-shaped Entity Editor]]&lt;br /&gt;
* [[mod/techproject/view/concepts/associations|Cross-entity Associations]]&lt;br /&gt;
* [[mod/techproject/view/concepts/propagation|Indicators Propagation]]&lt;br /&gt;
* [[mod/techproject/view/concepts/grouping|Groups and project workspaces]]&lt;br /&gt;
&lt;br /&gt;
== Screens of the Technical Project Manager ==&lt;br /&gt;
&lt;br /&gt;
Several screens will allow manipulating the distinct descriptions that will be produced while a technical project is being processed. the whole information set might be collected and layout for outputting e.g. a &amp;quot;printable&amp;quot; document, using any appropriate XSL transform.&lt;br /&gt;
&lt;br /&gt;
=== Screens for editing Entity Units ===&lt;br /&gt;
&lt;br /&gt;
* [[mod/techproject/view/screens/description|The description screen]]&lt;br /&gt;
* [[mod/techproject/view/screens/requirements|The requirement screen]]&lt;br /&gt;
* [[mod/techproject/view/screens/specifications|The specification screen]]&lt;br /&gt;
* [[mod/techproject/view/screens/tasks|The task screen]]&lt;br /&gt;
* [[mod/techproject/view/screens/milestones|The milestone screen]]&lt;br /&gt;
* [[mod/techproject/view/screens/deliverables|The deliverable screen]]&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
&lt;br /&gt;
Views are screens that allow several displaying and sorting strategies, for project monitoring.&lt;br /&gt;
&lt;br /&gt;
* [[mod/techproject/view/screens/summary|Summary]]&lt;br /&gt;
* [[mod/techproject/view/screens/byassignee|By assignee tasklist]]&lt;br /&gt;
* [[mod/techproject/view/screens/bypriority|By priority tasklist]]&lt;br /&gt;
* [[mod/techproject/view/screens/byworktype|By worktype tasklist]]&lt;br /&gt;
* [[mod/techproject/view/screens/detail|Entity Unit Browser]]&lt;br /&gt;
* [[mod/techproject/view/screens/gantt|Gantt view]]&lt;br /&gt;
&lt;br /&gt;
=== Teacher&#039;s tools ===&lt;br /&gt;
&lt;br /&gt;
* [[mod/techproject/view/screens/assessment|The assessment screen]]&lt;br /&gt;
* [[mod/techproject/view/screens/criteria|The criteria edition screen]]&lt;br /&gt;
* [[mod/techproject/view/screens/copy|The project copy screen]]&lt;br /&gt;
* [[mod/techproject/view/screens/cvsdrive|The CVS pilot]]&lt;br /&gt;
* [[mod/techproject/view/screens/importexport|The Import/Export screen]]&lt;br /&gt;
&lt;br /&gt;
== Other information ==&lt;br /&gt;
&lt;br /&gt;
*[[mod/techproject/view/configuration|Instance Settings]]&lt;br /&gt;
*[[mod/techproject/view/missingfeatures|What Is Missing ?]]&lt;br /&gt;
*[[mod/techproject/view/capabilities|Capabilities (&amp;gt;1.8+)]]&lt;br /&gt;
&lt;br /&gt;
=== Reference, information, development and support ===&lt;br /&gt;
&lt;br /&gt;
valery.fremaux-AT-club-internet.fr&lt;br /&gt;
[[Category:Teacher]]&lt;br /&gt;
[[fr:mod/techproject/view]]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=mod/techproject/view/screens/deliverables&amp;diff=60688</id>
		<title>mod/techproject/view/screens/deliverables</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=mod/techproject/view/screens/deliverables&amp;diff=60688"/>
		<updated>2009-07-29T02:30:57Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[mod/techproject/view|Index]]&lt;br /&gt;
&lt;br /&gt;
[[image:deliverables_overall_ne.gif|center]]&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
&lt;br /&gt;
Deliverables are resources that are the physical production of a project. These products may be goods, documents, software in files, contracts, agreements in documents, but qhould have a physical representation that is holdable, transferable, copiable, storable, etc. Within the techproject module, deliverables are descriptions of such resources. Thus it is important to distinguish between &amp;quot;requirements&amp;quot; that describes what &amp;quot;functional effets&amp;quot; the systems produces, and deliverables that represents concrete and physical objects that do produce these effects on some conditions (good use). &lt;br /&gt;
&lt;br /&gt;
Managing deliverables has two major epochs : &lt;br /&gt;
&lt;br /&gt;
A preliminary epoch, known as deliverable plan specification, in which we should design and choose how much and which deliverables should be presented within the complete project. The second epoch, known as &amp;quot;effective production&amp;quot;, runs when implementation is done and deliverable map is charged with real productions.&lt;br /&gt;
&lt;br /&gt;
Deliverables, as the majority of project entities (excepting milestones), can be organised in a way. Deliverables that are in leaf position in the tree denotes physical objects to be produced. Higher level nodes in the tree might be used for grouping and packing physical entries oin categories or any kind of organizing principle. As an example, we could use the highest level of deliverable description for splitting a content in :&lt;br /&gt;
&lt;br /&gt;
* Source code package&lt;br /&gt;
* Compiled packages&lt;br /&gt;
* Technical documentation packs&lt;br /&gt;
* Document and user guides&lt;br /&gt;
* Marketing and sales support documents&lt;br /&gt;
* Tools&lt;br /&gt;
* Demos&lt;br /&gt;
* Tutorials and examples&lt;br /&gt;
&lt;br /&gt;
Each one of these &amp;quot;packs&amp;quot; or content &amp;quot;categories&amp;quot; could thus be refined in description until reaching a &amp;quot;unity&amp;quot; desription that may be a single file or object.&lt;br /&gt;
&lt;br /&gt;
Usually, deliverable description refinement goals the definition of physical arrangements so that each concerned user may find the system parts he needs in its own situation.&lt;br /&gt;
&lt;br /&gt;
== Viewing Deliverables ==&lt;br /&gt;
&lt;br /&gt;
Deliverables are viewed as a content-collapsed heading tree. Any sublevel can be collapsed if needed.&lt;br /&gt;
&lt;br /&gt;
[[image:techproject_deliverables_heading.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Each heading provides synthesis information, obtained by propagating indicators, or through associated tasks: &lt;br /&gt;
&lt;br /&gt;
* Numbering (autonumbering)&lt;br /&gt;
* Caption, that may be changed into an hyperlink if a resource is available for that deliverable &lt;br /&gt;
* The number of associated tasks (direct binding/through sub-deliverables)&lt;br /&gt;
* The completion level for that deliverable, as a graphical bar-graph&lt;br /&gt;
&lt;br /&gt;
Completion level is propagated from binded tasks.&lt;br /&gt;
&lt;br /&gt;
Each heading can be expanded so a complete qualifier report and a content abstract can be viewed.&lt;br /&gt;
&lt;br /&gt;
== Attaching Resources to Deliverables ==&lt;br /&gt;
&lt;br /&gt;
Deliverables are descriptions that may have resources attached to. These resources may be attached as an external URL, or as an uploaded file within Moodle moodledata repository. &lt;br /&gt;
&lt;br /&gt;
Uploaded resources are stored within shadowed directories (crypted subdirs names) in the course file space, so that file robbery may be avoided. Resources can be freely updated by students (may change in further versions).&lt;br /&gt;
&lt;br /&gt;
A single deliverable entry can be attached ONLY ONE Url OR uploaded resource.&lt;br /&gt;
&lt;br /&gt;
[[fr:mod/techproject/view/screens/deliverables]]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=User:Mark_Stevens&amp;diff=60487</id>
		<title>User:Mark Stevens</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=User:Mark_Stevens&amp;diff=60487"/>
		<updated>2009-07-24T03:29:19Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: New page: Moodle advocate since 2004.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Moodle advocate since 2004.&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Grade_export&amp;diff=60430</id>
		<title>Grade export</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Grade_export&amp;diff=60430"/>
		<updated>2009-07-23T04:52:24Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Grades}}Grades can be exported to Excel spreadsheet, OpenDocument spreadsheet, plain text file or XML file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Grade export is NOT intended for students.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==How to export grades==&lt;br /&gt;
[[Image:Grade export.png|thumb|left|Grade export]]To export grades from the gradebook:&lt;br /&gt;
# Choose an export format from the gradebook dropdown menu.&lt;br /&gt;
# Set options as required.&lt;br /&gt;
# If the course uses groups, select whether to export grades for all participants or for a particular group.&lt;br /&gt;
# Select the grade items to be included. Note that ID numbers are required for all activities for XML file export. An ID number field can be found in the common module settings for each activity.&lt;br /&gt;
# Click the submit button.&lt;br /&gt;
# After previewing the data on the following page, click the download button.&lt;br /&gt;
&lt;br /&gt;
==XML file export==&lt;br /&gt;
&lt;br /&gt;
To export grades to XML file, you need to ensure that:&lt;br /&gt;
* Users have ID numbers (an optional field in the user profile)&lt;br /&gt;
* Activities have ID numbers (an optional field in the common module settings)&lt;br /&gt;
&lt;br /&gt;
==Default grade export settings==&lt;br /&gt;
&lt;br /&gt;
The grade export display type and grade export decimal points site-wide defaults may be set by an administrator in &#039;&#039;Administration &amp;gt; Grades &amp;gt; [[General grade settings|Grade settings]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Grade publishing==&lt;br /&gt;
[[Image:Grade publishing settings.png|thumb|left|Grade publishing settings]]&lt;br /&gt;
Grade publishing is a way of importing and exporting grades via a URL without being logged in to Moodle. Grade publishing is intended for administrators only, due to the security implications.&lt;br /&gt;
&lt;br /&gt;
Grade publishing is disabled by default. It can be enabled by an administrator by checking the gradepublishing box in &#039;&#039;Administration &amp;gt; Grades &amp;gt; [[General grade settings|Grade settings]]&#039;&#039;. Users with grade publishing capabilities (normally administrators only) are then provided with grade export publishing settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tips and tricks==&lt;br /&gt;
*Export grades in a spreadsheet format.  Then copy and paste that information into another file that has  worksheet (&amp;quot;raw grades&amp;quot;). Create other worksheets which are custom reports which take their data from &amp;quot;raw grades&amp;quot;. This works if graded activities are &#039;&#039;&#039;not&#039;&#039;&#039; moved around to different positions in the course. This allows you to create a standard printed report(s). For example a compact landscape report of all students and all grades for each activity, a report of just quizes, another of lessons, another of assignments. A pivot table of students by scores, generated from a report worksheet, which gets its data from the raw data.&lt;br /&gt;
*Mailmerge exported grades into custom documents.  For example, a document that is given to a department to file as a proof of training, with scores for every subject quiz.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[http://www.youtube.com/watch?v=yZcbN_7p2zI Video showing how to export grades in Moodle 1.9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ca:grade/export/xml/index]]&lt;br /&gt;
[[es:Exportar_calificaciones]]&lt;br /&gt;
[[fr:Exportation des notes]]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=SCORM_activity&amp;diff=53315</id>
		<title>SCORM activity</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=SCORM_activity&amp;diff=53315"/>
		<updated>2009-03-26T03:12:10Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Scorm}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORM/AICC&#039;&#039;&#039; module is a course [[Teacher_documentation#Activity_modules|activity]] which allows you (the teacher) to upload any SCORM or AICC package to include in your course.&lt;br /&gt;
&lt;br /&gt;
SCORM (Sharable Content Object Reference Model) is a collection of specifications that enable interoperability, accessibility and reusability of web-based learning content. SCORM content can be delivered to learners via any SCORM-compliant Learning Management System (LMS) using the same version of SCORM.&lt;br /&gt;
&lt;br /&gt;
==What is SCORM==&lt;br /&gt;
SCORM was developed as a result of collaboration in the public and private sectors. The President of the United States, Bill Clinton issued an Executive Order that created an agency (ADL) to oversee the standard for developing and distributing online learning.  All Federal agencies are mandated to use programs that meet those standards.  SCORM is one result of that order.  &lt;br /&gt;
&lt;br /&gt;
There&#039;s a really simple &amp;quot;What is SCORM&amp;quot; introduction here: http://moodle.org/mod/forum/discuss.php?d=3757#p18828&lt;br /&gt;
&lt;br /&gt;
A slightly more detailed introduction here: http://www.rusticisoftware.com/resources/whatisscorm/What%20Is%20SCORM.htm&lt;br /&gt;
&lt;br /&gt;
==Compatibility with Moodle==&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. &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. &lt;br /&gt;
&lt;br /&gt;
[[Image:SCORM_activity_homepage_student_19.png|thumb|center|300px|Student view of SCORM activity 1.9]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [http://moodle.org/mod/data/view.php?id=7198 SCORM Repository] - allows uploading/downloading shared Objects&lt;br /&gt;
* The official standard: [http://www.adlnet.gov/scorm/ Advanced Distributed Learning - SCORM]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using Moodle forum discussions:&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=3757 Simple introduction to SCORM] &lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=57059 Are there any sugestions for scorm authoring with Microsoft word / or any other easy (maybe free) scorm authoring tool?]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=95946 Is SCORM worth it?]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
&lt;br /&gt;
[[es:SCORM]]&lt;br /&gt;
[[fr:SCORM]]&lt;br /&gt;
[[ja:SCORM]]&lt;br /&gt;
[[de:Lernpaket (SCORM)]]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Development_talk:Site_registration&amp;diff=51143</id>
		<title>Development talk:Site registration</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Development_talk:Site_registration&amp;diff=51143"/>
		<updated>2009-02-18T09:07:32Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: New section: Editing registered sites&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Michael, thanks for writing up the guidelines for reviewing new Moodle sites :-) I just came across [[Verification of sites on moodle.org]] and wondered whether the information could be added to [[Development:Site registration]] and then the page deleted. What do you think? --[[User:Helen Foster|Helen Foster]] 06:48, 25 September 2008 (CDT)&lt;br /&gt;
&lt;br /&gt;
Helen, I&#039;ve updated/merged the instructions that appear on the &amp;quot;check new registrations page&amp;quot; so [[Verification of sites on moodle.org]] can be deleted.&lt;br /&gt;
&lt;br /&gt;
== Editing registered sites ==&lt;br /&gt;
&lt;br /&gt;
Hi All,&lt;br /&gt;
&lt;br /&gt;
As we all know, the registered sites lists contain many duplicate and/or no longer existent sites.  It&#039;s been suggested that the lists be divided regionally/alphabetically for maintenance.  For example, I used to check middle east sites, but the list has grown so much I can barely keep up with one country now.  Countries with thousands of sites could be divided alphabetically.&lt;br /&gt;
&lt;br /&gt;
Any takers?&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Case_for_Moodle&amp;diff=2936</id>
		<title>Case for Moodle</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Case_for_Moodle&amp;diff=2936"/>
		<updated>2005-12-08T06:13:28Z</updated>

		<summary type="html">&lt;p&gt;Markstevens: /* Scalability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== High availability ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The LMS must be robust enough to serve the diverse needs of thousands of learners, administrators, content builders and instructors simultaneously.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moodle and availability - [answer here]&lt;br /&gt;
&lt;br /&gt;
== Scalability ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The infrastructure should be able to expand or scale to meet future growth, both in terms of the volume of instruction and the size of the student body.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moodle runs on a wide variety of webservers/database technologies. As with any installation of a server-based software system, it is crucial to refine carefully the choice of hardware, operating system, and database system, to ensure that the system can cope with a high throughput. The largest live Moodle installation at time of writing (Open Polytechnic of New Zeland) handles 45,000+ students and 6,500+ courses registered.&lt;br /&gt;
&lt;br /&gt;
The consensus in the Moodle community seems to be that a Linux-based webserver running Apache, with PHP installed as well as a PHP accelerator, is commonly the best choice, and that the webserver and database server should sit on separate machines.&lt;br /&gt;
&lt;br /&gt;
It should be possible to load-balance a Moodle installation, for example by using more than one webserver if necessary. The separate webservers should query the same database and refer to the same filestore area, but otherwise the separation of the application layers is complete enough to make this kind of clustering feasible. Similarly, the database could be a cluster of servers (e.g. a MySQL cluster).&lt;br /&gt;
&lt;br /&gt;
All this implies that Moodle&#039;s architecture makes it easy to respond to future demand, by adapting the technologies upon which it runs. This should be possible even in a live setting, to improve the service without major disruption.&lt;br /&gt;
&lt;br /&gt;
== Usability ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;To support a host of automated and personalized services, such as self-paced and role-specific learning, the access, delivery and presentation of material must be easy-to-use and highly intuitive — like surfing on the Web or shopping on Amazon.com.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moodle and usability - [answer here]&lt;br /&gt;
&lt;br /&gt;
== Interoperability ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;To support content from different sources and multiple vendors&#039; hardware/software solutions, the LMS should exchange data using open industry standards for Web deployments (XML, SOAP or AQ).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moodle and interoperability - [answer here]&lt;br /&gt;
&lt;br /&gt;
== Stability ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The LMS infrastructure can reliably and effectively manage a large enterprise implementation running 24x7.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moodle and stablility - [answer here]&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;As with any outward-facing collaborative solution, the LMS can selectively limit and control access to online content, resources and back-end functions, both internally and externally, for its diverse user community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moodle and security - [answer here]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=33200 Building the case for Moodle Document] forum discussion&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=35845 Why switch to Moodle when the university already supports BlackCT] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Moodle]]&lt;br /&gt;
[[Category:Administrator]]&lt;/div&gt;</summary>
		<author><name>Markstevens</name></author>
	</entry>
</feed>