<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jenny-gray</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jenny-gray"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/Special:Contributions/Jenny-gray"/>
	<updated>2026-06-06T07:01:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Integration_Review&amp;diff=42772</id>
		<title>Integration Review</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Integration_Review&amp;diff=42772"/>
		<updated>2013-10-28T12:25:38Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Purpose==&lt;br /&gt;
&lt;br /&gt;
The purpose of the integration review is to:&lt;br /&gt;
* Ensure consistent quality across the codebase&lt;br /&gt;
* Ensure that pedagogical aims of Moodle are at the forefront of any change&lt;br /&gt;
* Take into consideration the holistic view of moodle, looking at the impact beyond where the original developer was focused&lt;br /&gt;
* Provide guidance and feedback to developers, helping them learn and improve &lt;br /&gt;
* Consider &#039;&#039;&#039;other perspectives&#039;&#039;&#039; of other users perhaps not considered by original developers e.g.&lt;br /&gt;
** Teachers&lt;br /&gt;
** Students&lt;br /&gt;
** Administrators&lt;br /&gt;
**Third-party developers&lt;br /&gt;
&lt;br /&gt;
==Integration Review Process==&lt;br /&gt;
&lt;br /&gt;
# Run automated pre-checks against the continuous integration server. (In future this can be automated and also moved into publicly accessible domain.)&lt;br /&gt;
# Final code review, much like the peer review, except this is the final check. To include&lt;br /&gt;
##Takes place in-situ (integrated) to examine the impact against other integrated issues&lt;br /&gt;
##Checking against the coding guidelines - syntax/whitespace&lt;br /&gt;
##Moodleisms - using the built-in api functions where appropiate&lt;br /&gt;
##Cross-DB compatibility &lt;br /&gt;
##Security&lt;br /&gt;
# Check purpose - the bug needs to fix the issue reported. &lt;br /&gt;
# Ensure backwards compatibility is is maintained. As a starting point backwards compatibility must always be maintained. Where backwards compatibility is affected it should be:&lt;br /&gt;
## Well discussed with evidence of justification&lt;br /&gt;
## Documented and communicated to the community &lt;br /&gt;
# Check the right people have been involved (e.g. component maintainers)&lt;br /&gt;
# For fundamental changes, check that a thread has been started in an appropriate forum, and other Moodlers given enough time to comment.&lt;br /&gt;
# Tests - must be written to guide tester to verify the fix is working.&lt;br /&gt;
## Unit test - very much preferred if applicable&lt;br /&gt;
## at end of wednesday, ensure testing is going to complete as expected. else take other actions (speak to test manager)&lt;br /&gt;
# Performance - we have to look at maintaining optimum code here, as far as simple patches that can affect performance. (simple optimisations)&lt;br /&gt;
# Scalability - if master only - we&#039;re looking far future , stable branches may not be lucky to get such improvements..&lt;br /&gt;
# git authorship is correct vs committer + credits due are mentioned + email addresses&lt;br /&gt;
# Documentation / phpdoc / readability&lt;br /&gt;
# [[Tracker_issue_labels]] which might need adding. Particularly:&lt;br /&gt;
## docs_required &lt;br /&gt;
## ui_change&lt;br /&gt;
## api_change&lt;br /&gt;
## qa_test_required&lt;br /&gt;
# Fixed Version after integration - is the versions that the issue is patched for. (A rule here : mention master if its the only branched fixed, if not don&#039;t mention master)&lt;br /&gt;
# Update the workflow counters&lt;br /&gt;
## If an issue is in need of a second review +1 to errors column in integration workflow counters&lt;br /&gt;
&lt;br /&gt;
== Integration Principles ==&lt;br /&gt;
&lt;br /&gt;
Integration (non-technical but philosophical) principles (4-5 words determining if something has to be integrated/backported or no):&lt;br /&gt;
&lt;br /&gt;
# safety: if something does not look safe, stable, it won&#039;t land. Be conservative.&lt;br /&gt;
# security: all security issues, if not breaking principle (1) will be integrated/backported to all security-supported versions.&lt;br /&gt;
# community: Anything not useful for the community (or against it) won&#039;t be integrated/backported. We can measure the community as 10%HQ, 10%Partners, 10%Core developers, 20%Admins, 20%Teachers, 30%Students - not exact science, just one approximation, you know). Question yourself how the change will affect those groups and ensure positives are bigger always (only affected groups count). All community issues, if not breaking principles (1) and (2) will be integrated.&lt;br /&gt;
# typology:  bug fixes will be always integrated/backported to all the supported braches if none of the principles (1), (2) and (3) are violated. Also, partially-unsupported branches can receive some if they are important enough. Improvements and new features go, exclusively, to master only, that&#039;s the main reason for short release periods. We *must* not make exceptions to this.&lt;br /&gt;
# priority: issues will be &amp;quot;ordered down&amp;quot; by priority down (where priority is a mix of various factors, dynamic). And will be integrated in that order. If something has to be delayed, better if it is low priority. Once again, nothing here can break any of the previous principles.&lt;br /&gt;
# tests: unit tests and acceptance tests will backported as far as possible without breaking (1) and (2). New features required to implement tests will be backported if the API is 100% backwards compatible. &lt;br /&gt;
If all the principles are fulfilled, the answer for &amp;quot;should I integrate this?&amp;quot; is, &amp;quot;yes, please!&amp;quot;&lt;br /&gt;
(apart from technical findings, of course, that can lead to the issue being not integrated/reopened at last, these principles are 100% philosophical)&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
In normal periods, the integrators adhere to the following schedule:&lt;br /&gt;
&lt;br /&gt;
* Sunday 22:00 UTC: Issues waiting for integration brought into current integration.&lt;br /&gt;
* Monday: Integration&lt;br /&gt;
* Tuesday:  Integration&lt;br /&gt;
* Wednesday: Testing. Integrators duties during this time are to monitor, facilitate and &#039;problem solve&#039; the testing process.&lt;br /&gt;
* Thursday: Testing should be completed by 07:00 UTC, at which time remaining testing failures will be reverted and reopened. The release process follows.&lt;br /&gt;
  * With issues which have had the commits reverted in integration.git, developers should rebase their branch on top of the the new moodle.git release. Minor fixes should be logically chunked in the commits if possible.&lt;br /&gt;
  * If there are commits that don&#039;t change but were reverted, these can be cherry-picked to avoid rebasing issues.&lt;br /&gt;
* Friday: Should be kept free from integration. Integration systems are maintained during this time.&lt;br /&gt;
&lt;br /&gt;
== Backporting ==&lt;br /&gt;
&lt;br /&gt;
Whilst we&#039;d all like all Moodle users to be using our latest and greatest code, there is a balance to strike between improving our software and maintaining stability (both in terms of regressions, but also training and documentation materials). Large amounts of change on the stable branches make the lives difficult for institutions to manage upgrades between point releases.&lt;br /&gt;
&lt;br /&gt;
==== General policy ====&lt;br /&gt;
Our general policy is as follows:&lt;br /&gt;
&lt;br /&gt;
* Bug fixes will be backported to all supported stable branches. &lt;br /&gt;
** When fixing a bug, please provide a fix for all supported stable branches. &lt;br /&gt;
** If a fix doesn&#039;t make sense to be backported to every branch, please make it clear in the issue.&lt;br /&gt;
* Improvements or new features will only land in master.&lt;br /&gt;
&lt;br /&gt;
==== Process for requesting a non bug-fix backport ====&lt;br /&gt;
Improvements or new features can be requested to be backported to the stable branches. We urge developers to consider this request carefully. In recent years, Moodle has moved to a short and predicatable time based release schedule and we use a very effective distributed source control system. Both of these process changes should ensure that a change not being backported to the stable branches is not as problematic as it may have used to be. &lt;br /&gt;
&lt;br /&gt;
Should you feel that a new feature or improvement needs backporting, please follow this process:&lt;br /&gt;
&lt;br /&gt;
# File a new issue.&lt;br /&gt;
# Set the issue title using our backport template guide.  (i.e. &amp;quot;Fix forum alignment (backport of MDL-99999)&amp;quot;) - see [https://docs.moodle.org/dev/Tracker_guide#Tracker_fields Tracker_guide]&lt;br /&gt;
# You should include clear rationale for the request to backport&lt;br /&gt;
&lt;br /&gt;
The integration team will process backport requests, with the following guidelines:&lt;br /&gt;
# The integration team will together consider each request individually considering the needs of the community (influenced by forum posts, moodle partners, nagging developers etc).&lt;br /&gt;
# Backports will happen not earlier than 1 month and not later than 2 months after the issue has landed in master.&lt;br /&gt;
# Rationale will be given for rejection&lt;br /&gt;
&lt;br /&gt;
If the backport request is approved, please follow the usual development process to submit the feature or improvement on earlier branches.&lt;br /&gt;
&lt;br /&gt;
==== Polite note about bug classification ====&lt;br /&gt;
Many issues can be appropiately classified as borderline bugfix/improvements. We politely request that developers do not try and &#039;game the system&#039; by clasifying their improvements as bugs intentionally. If your fix is in a grey area, please state your case for it being a bug fix clearly. The integration team will use their discretion where necessary.&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=36047</id>
		<title>Survey 2 module</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=36047"/>
		<updated>2012-11-06T09:31:04Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Survey module&lt;br /&gt;
|state = Development in progress&lt;br /&gt;
|tracker = To be confirmed&lt;br /&gt;
|discussion = To be confirmed&lt;br /&gt;
|assignee = MediaTouch 2000 srl - Daniele Cordella&lt;br /&gt;
}}&lt;br /&gt;
{{Moodle 2.5}}This page is for collecting feature requests for a the new Survey module that replaces Survey, Questionnaire and Feedback.&lt;br /&gt;
&lt;br /&gt;
The module is currently under development, so the general features list will also include a completion status, if any. For those who like to test a prototype of the module a Github repo is available [https://docs.moodle.org/dev/Survey_2_module#Current_module_status]. &lt;br /&gt;
&lt;br /&gt;
==General features of the Module==&lt;br /&gt;
* translate previously built survey1, feedback and questionnaire at installation time. (The general idea for the module is currently translate at installation time all previous existing survey module instances. Questionnaire and feedback instances can be translated at will using an upgrade helper)&lt;br /&gt;
* upload exported feedback or questionnaires (survey1 doesn&#039;t export questionnaires templates)&lt;br /&gt;
* save instances of survey2 as a template to reuse it or export it&lt;br /&gt;
* import saved survey2 templates&lt;br /&gt;
* support for groups and groupings&lt;br /&gt;
* custom user survey2 page layout (custom html and css, as it already is in database module)&lt;br /&gt;
* download of submissions in txt, xls and ods&lt;br /&gt;
* conditional branching&lt;br /&gt;
* handle more than one input form layout (and find a way to allow this or that layout to this or that user).&lt;br /&gt;
* order survey fields in editing mode&lt;br /&gt;
* group fields in the page layout with fieldset&lt;br /&gt;
* relations between tables (Example: one record for the profile of my company one related record for each intervention request submitted by my company)&lt;br /&gt;
* email submissions to students/teachers/both/none&lt;br /&gt;
* email submissions to address specified in a designated question field (for surveys not requiring login)&lt;br /&gt;
* indication that students are currently taking (but haven&#039;t completed) the questionnaire&lt;br /&gt;
* for text fields, simple data checking (&#039;must be numeric&#039;, &#039;must contain X character&#039;, &#039;must have exact length n&#039;, etc.)&lt;br /&gt;
* full web accessibility features to the same level as elsewhere in Moodle e.g. labels on text fields, fieldsets on groups of radio buttons &amp;amp; checkboxes.&lt;br /&gt;
* gradebook integration (to allow simple polls to control conditional activities)&lt;br /&gt;
** assigning grades to specific answers to specific questions in a survey&lt;br /&gt;
** may only work for certain question types (e.g. radio buttons, rating)&lt;br /&gt;
** once a student has a grade for their survey completion, that grade can be used elsewhere in the system to control activity display.  usecase - simple poll with 1 question &amp;quot;what are you planning to study next&amp;quot;, 5 radio buttons, each answer a different course assigned grade 20%, 40%, 60%, 80%, 100%.  Then 5 conditional activities set up, for if grade &amp;lt;21%, &amp;lt;41% etc and each one has content specific to the course chosen in the radio button providing basic info on that subject.   Or similarly if you have different focus areas in your course that students can self-select into/swap between a more complex survey could be used with this to decide which focus area to put students into.&lt;br /&gt;
* improve templates (to allow impact views and impressions)&lt;br /&gt;
* enhance the editing&lt;br /&gt;
* ability to have public surveys that do not require users to be logged in&lt;br /&gt;
* would be great for learners to be able to export using Portfolio Export. This would enable things such as self-assessments in Mahara.&lt;br /&gt;
&lt;br /&gt;
==Instance settings page==&lt;br /&gt;
* Access section: 20 types of survey, distinguished by:&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/O,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/W,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to delete a record&lt;br /&gt;
The reationale is: once a record has been submitted by a user, who is allowed to see it (R/O access)?, who is allowed to edit it (R/W access)?, who is allowed to delete it?&lt;br /&gt;
&lt;br /&gt;
Combining all the options the come out 20 cases are defined as follows where:&lt;br /&gt;
:ALL means, all the people accessing the survey;&lt;br /&gt;
:GROUP means people belonging to the group of the user who submitted the record;&lt;br /&gt;
:OWNER is the user who submitted the record;&lt;br /&gt;
:NONE is none.&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! type&lt;br /&gt;
! R/O&lt;br /&gt;
! R/W&lt;br /&gt;
! delete&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* option: allow/deny save without submission (save and restart)&lt;br /&gt;
* option: anonymous survey or named responses&lt;br /&gt;
* option: allow access to records any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
* opening and closing submission dates&lt;br /&gt;
* number of maximun allowed submission&lt;br /&gt;
* option whether to show results immediately after submission, or a thank you message with link to results.&lt;br /&gt;
&lt;br /&gt;
==Field level settings==&lt;br /&gt;
* type of field (char(n), text, number, alphanumeric, boolean, date, picture, file, email, url...) with type check at submit time (and number of digit check for char(n) fields). This information may not be used at field definition time but is useful for data verification/check.&lt;br /&gt;
&lt;br /&gt;
(Example: Please, enter your card ID: _______ This field should be defined, for instance, as char(7))&lt;br /&gt;
* option: mandatory/non mandatory field&lt;br /&gt;
* free text description field for further description and advices to the completer&lt;br /&gt;
*define a range of valid answers for fields allowing this (see next examples)&lt;br /&gt;
(Example 1:&lt;br /&gt;
Please, enter your seniority. (limited between 0 and 50 years)&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
Date of birth: (limited between 18 and 100 years ago))&lt;br /&gt;
*define fields default to be loaded at &amp;quot;new record&amp;quot; display time&lt;br /&gt;
*optional &amp;quot;other&amp;quot; text field for drop down menu/radio button/check box. (see next example)&lt;br /&gt;
(Example for drop down:&lt;br /&gt;
&lt;br /&gt;
 Where were you born? &amp;lt;code&amp;gt;&amp;lt;select name=&amp;quot;dropdown_14&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;Spain&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;France&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;3&amp;quot; &amp;gt;other, please specify&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dropdown_14_other&amp;quot; size=&amp;quot;10&amp;quot; maxlength=&amp;quot;10&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you choose &amp;quot;other&amp;quot; in the drop down menu the field will be enabled and become mandatory, otherwise it will be disabled.&lt;br /&gt;
)&lt;br /&gt;
* custom question numbers&lt;br /&gt;
* question name to name columns header in the downloaded document&lt;br /&gt;
&lt;br /&gt;
==Question types==&lt;br /&gt;
&lt;br /&gt;
Question types should be plug-ins so that they can be extended locally if required.  The following list covers types which exist in at least one of the current survey modules.&lt;br /&gt;
&lt;br /&gt;
* radio buttons (horizontal &amp;amp; vertical display)&lt;br /&gt;
* short text entry&lt;br /&gt;
* long text entry&lt;br /&gt;
* checkbox&lt;br /&gt;
* drop down menu&lt;br /&gt;
* customisable likert scale for rating&lt;br /&gt;
* date (Example: When were you born?)&lt;br /&gt;
&lt;br /&gt;
===New question types===&lt;br /&gt;
* short date (with month and years only, to answer question like: When had you the first evidence of this disease?)&lt;br /&gt;
* time&lt;br /&gt;
(Example:&lt;br /&gt;
When do you usually take breakfast?&lt;br /&gt;
)&lt;br /&gt;
* &amp;quot;static text&amp;quot;/&amp;quot;read only&amp;quot; fields (auto filled by the software) like, current_date, user_name, record_ID, counter...&lt;br /&gt;
* allocation (Drag and drop)&lt;br /&gt;
* ranking&lt;br /&gt;
* conditional drop-down where the first list populates the second&lt;br /&gt;
* tabular question with multiple answers, of any depth.&lt;br /&gt;
                                    : Occurrence Quantity   Location&lt;br /&gt;
                                        Bluebird    2       Hobart  &lt;br /&gt;
                                        Jay         1       Kingston&lt;br /&gt;
                                        .&lt;br /&gt;
                                        .&lt;br /&gt;
                                        .&lt;br /&gt;
&lt;br /&gt;
==Result display==&lt;br /&gt;
&lt;br /&gt;
* report per survey, per user and per question&lt;br /&gt;
* report about non-respondent users&lt;br /&gt;
* choose for a question whether to display results as&lt;br /&gt;
** a table&lt;br /&gt;
** a bar chart&lt;br /&gt;
** a pie chart&lt;br /&gt;
&lt;br /&gt;
Would be great to be able to analyse the results according to a particular answer. eg: Show results for just one gender&lt;br /&gt;
&lt;br /&gt;
==Question management==&lt;br /&gt;
&lt;br /&gt;
* questions can be copied within an activity&lt;br /&gt;
* question sets can be created as templates for re-use [maybe later]&lt;br /&gt;
* question sets can be used across multiple courses [maybe later]&lt;br /&gt;
* questions can be re-ordered within an activity&lt;br /&gt;
* question sets can be combined to create a template&lt;br /&gt;
* questions can be deleted from an activity, but there should be an &amp;quot;are you sure&amp;quot; check first.&lt;br /&gt;
&lt;br /&gt;
==Answer Piping &amp;amp; Conditional Questions==&lt;br /&gt;
&lt;br /&gt;
*Allow follow on questions related to the previous.&lt;br /&gt;
*Do You Smoke? Yes/No If Yes is selected a conditional question appears, How Many per Day, if No is selected move on to question 6 appears&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Answer Piping such as:&lt;br /&gt;
*Q1 Which dog breed do you prefer?&lt;br /&gt;
*Labrador&lt;br /&gt;
*Spaniel&lt;br /&gt;
*Collie&lt;br /&gt;
*Other&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Q2 In question 1 you stated you prefer the (Q1 Answer) as a breed, what do you like about it. [Where (Q1 Answer) is replaced with the chosen answer such as &#039;Labrador&#039;&lt;br /&gt;
*Temperament&lt;br /&gt;
*Looks&lt;br /&gt;
*Colour&lt;br /&gt;
*Other&lt;br /&gt;
&lt;br /&gt;
==Current module status==&lt;br /&gt;
The module currently under development is named Collection, so it can be easily deployed over existing installations with almost no impact on current Surveys. For those interested in testing, Daniele Cordella, the main developer of the module, prepared a Github  repo from where you can download the module prototype in it&#039;s current status: https://github.com/kordan/moodle-mod_collection. Please note the module is aimed towards the development branch (master), using it on stable versions such as 2.2 or 2.3 is not supported.&lt;br /&gt;
&lt;br /&gt;
==Future plans==&lt;br /&gt;
* community sharing and code refinements&lt;br /&gt;
* add module to contrib plugin as &amp;quot;Survey&amp;quot; to allow extensive testing as well as AMOS translations&lt;br /&gt;
* complete Questionanire and Feedback migration helpers &lt;br /&gt;
* integrate module into core for 2.5 release&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=34502</id>
		<title>Survey 2 module</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=34502"/>
		<updated>2012-07-18T07:54:57Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* General features of the Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting feature requests for a new Survey module that replaces Survey, Questionnaire and Feedback.&lt;br /&gt;
&lt;br /&gt;
==General features of the Module==&lt;br /&gt;
* translate previously built survey1, feedback and questionnaire at installation time&lt;br /&gt;
* upload exported feedback or questionnaires (survey1 doesn&#039;t export questionnaires templates)&lt;br /&gt;
* save instances of survey2 as a template to reuse it or export it&lt;br /&gt;
* import saved survey2 templates&lt;br /&gt;
* support for groups and groupings&lt;br /&gt;
* custom user survey2 page layout (custom html and css, as it already is in database module)&lt;br /&gt;
* download of submissions in txt, xls and ods&lt;br /&gt;
* conditional branching&lt;br /&gt;
* handle more than one input form layout (and find a way to allow this or that layout to this or that user).&lt;br /&gt;
* order survey fields in editing mode&lt;br /&gt;
* group fields in the page layout with fieldset&lt;br /&gt;
* relations between tables (Example: one record for the profile of my company one related record for each intervention request submitted by my company)&lt;br /&gt;
* email submissions to students/teachers/both/none&lt;br /&gt;
* email submissions to address specified in a designated question field (for surveys not requiring login)&lt;br /&gt;
* indication that students are currently taking (but haven&#039;t completed) the questionnaire&lt;br /&gt;
* for text fields, simple data checking (&#039;must be numeric&#039;, &#039;must contain X character&#039;, &#039;must have exact length n&#039;, etc.)&lt;br /&gt;
* full web accessibility features to the same level as elsewhere in Moodle e.g. labels on text fields, fieldsets on groups of radio buttons &amp;amp; checkboxes.&lt;br /&gt;
* gradebook integration (to allow simple polls to control conditional activities)&lt;br /&gt;
* improve templates (to allow impact views and impressions)&lt;br /&gt;
* enhance the editing&lt;br /&gt;
* ability to have public surveys that do not require users to be logged in&lt;br /&gt;
&lt;br /&gt;
==Instance settings page==&lt;br /&gt;
* Access section: 20 types of survey, distinguished by:&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/O,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/W,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to delete a record&lt;br /&gt;
The reationale is: once a record has been submitted by a user, who is allowed to see it (R/O access)?, who is allowed to edit it (R/W access)?, who is allowed to delete it?&lt;br /&gt;
&lt;br /&gt;
Combining all the options the come out 20 cases are defined as follows where:&lt;br /&gt;
:ALL means, all the people accessing the survey;&lt;br /&gt;
:GROUP means people belonging to the group of the user who submitted the record;&lt;br /&gt;
:OWNER is the user who submitted the record;&lt;br /&gt;
:NONE is none.&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! type&lt;br /&gt;
! R/O&lt;br /&gt;
! R/W&lt;br /&gt;
! delete&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* option: allow/deny save without submission (save and restart)&lt;br /&gt;
* option: anonymous survey or named responses&lt;br /&gt;
* option: allow access to records any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
* opening and closing submission dates&lt;br /&gt;
* number of maximun allowed submission&lt;br /&gt;
* option whether to show results immediately after submission, or a thank you message with link to results.&lt;br /&gt;
&lt;br /&gt;
==Field level settings==&lt;br /&gt;
* type of field (char(n), text, number, alphanumeric, boolean, date, picture, file, email, url...) with type check at submit time (and number of digit check for char(n) fields). This information may not be used at field definition time but is useful for data verification/check.&lt;br /&gt;
&lt;br /&gt;
(Example: Please, enter your card ID: _______ This field should be defined, for instance, as char(7))&lt;br /&gt;
* option: mandatory/non mandatory field&lt;br /&gt;
* free text description field for further description and advices to the completer&lt;br /&gt;
*define a range of valid answers for fields allowing this (see next examples)&lt;br /&gt;
(Example 1:&lt;br /&gt;
Please, enter your seniority. (limited between 0 and 50 years)&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
Date of birth: (limited between 18 and 100 years ago))&lt;br /&gt;
*define fields default to be loaded at &amp;quot;new record&amp;quot; display time&lt;br /&gt;
*optional &amp;quot;other&amp;quot; text field for drop down menu/radio button/check box. (see next example)&lt;br /&gt;
(Example for drop down:&lt;br /&gt;
&lt;br /&gt;
 Where were you born? &amp;lt;code&amp;gt;&amp;lt;select name=&amp;quot;dropdown_14&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;Spain&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;France&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;3&amp;quot; &amp;gt;other, please specify&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dropdown_14_other&amp;quot; size=&amp;quot;10&amp;quot; maxlength=&amp;quot;10&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you choose &amp;quot;other&amp;quot; in the drop down menu the field will be enabled and become mandatory, otherwise it will be disabled.&lt;br /&gt;
)&lt;br /&gt;
* custom question numbers&lt;br /&gt;
* question name to name columns header in the downloaded document&lt;br /&gt;
&lt;br /&gt;
==Question types==&lt;br /&gt;
&lt;br /&gt;
Question types should be plug-ins so that they can be extended locally if required.  The following list covers types which exist in at least one of the current survey modules.&lt;br /&gt;
&lt;br /&gt;
* radio buttons (horizontal &amp;amp; vertical display)&lt;br /&gt;
* short text entry&lt;br /&gt;
* long text entry&lt;br /&gt;
* checkbox&lt;br /&gt;
* drop down menu&lt;br /&gt;
* customisable likert scale for rating&lt;br /&gt;
* date (Example: When were you born?)&lt;br /&gt;
&lt;br /&gt;
===New question types===&lt;br /&gt;
* short date (with month and years only, to answer question like: When had you the first evidence of this disease?)&lt;br /&gt;
* time&lt;br /&gt;
(Example:&lt;br /&gt;
When do you usually take breakfast?&lt;br /&gt;
)&lt;br /&gt;
* &amp;quot;static text&amp;quot;/&amp;quot;read only&amp;quot; fields (auto filled by the software) like, current_date, user_name, record_ID, counter...&lt;br /&gt;
* allocation (Drag and drop)&lt;br /&gt;
* ranking&lt;br /&gt;
* conditional drop-down where the first list populates the second&lt;br /&gt;
* tabular question with multiple answers, of any depth.&lt;br /&gt;
                                    : Occurrence Quantity   Location&lt;br /&gt;
                                        Bluebird    2       Hobart  &lt;br /&gt;
                                        Jay         1       Kingston&lt;br /&gt;
                                        .&lt;br /&gt;
                                        .&lt;br /&gt;
                                        .&lt;br /&gt;
&lt;br /&gt;
==Result display==&lt;br /&gt;
&lt;br /&gt;
* report per survey, per user and per question&lt;br /&gt;
* report about non-respondent users&lt;br /&gt;
* choose for a question whether to display results as&lt;br /&gt;
** a table&lt;br /&gt;
** a bar chart&lt;br /&gt;
** a pie chart&lt;br /&gt;
&lt;br /&gt;
Would be great to be able to analyse the results according to a particular answer. eg: Show results for just one gender&lt;br /&gt;
&lt;br /&gt;
==Question management==&lt;br /&gt;
&lt;br /&gt;
* questions can be copied within an activity&lt;br /&gt;
* question sets can be created as templates for re-use [maybe later]&lt;br /&gt;
* question sets can be used across multiple courses [maybe later]&lt;br /&gt;
* questions can be re-ordered within an activity&lt;br /&gt;
* question sets can be combined to create a template&lt;br /&gt;
* questions can be deleted from an activity, but there should be an &amp;quot;are you sure&amp;quot; check first.&lt;br /&gt;
&lt;br /&gt;
==Answer Piping &amp;amp; Conditional Questions==&lt;br /&gt;
&lt;br /&gt;
*Allow follow on questions related to the previous.&lt;br /&gt;
*Do You Smoke? Yes/No If Yes is selected a conditional question appears, How Many per Day, if No is selected move on to question 6 appears&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Answer Piping such as:&lt;br /&gt;
*Q1 Which dog breed do you prefer?&lt;br /&gt;
*Labrador&lt;br /&gt;
*Spaniel&lt;br /&gt;
*Collie&lt;br /&gt;
*Other&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Q2 In question 1 you stated you prefer the (Q1 Answer) as a breed, what do you like about it. [Where (Q1 Answer) is replaced with the chosen answer such as &#039;Labrador&#039;&lt;br /&gt;
*Temperament&lt;br /&gt;
*Looks&lt;br /&gt;
*Colour&lt;br /&gt;
*Other&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=26879</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=26879"/>
		<updated>2011-07-08T07:59:27Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
* Tracker: MDL-27209&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This can already be done with a custom profile field, but we&#039;d like to move the field up with the other IM fields.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, I am happy to code it. See Dan&#039;s concerns in tracker issue about adding more fields to the user table.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-17593&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;br /&gt;
&lt;br /&gt;
=== Implement JSON web service support ===&lt;br /&gt;
&lt;br /&gt;
Add JSON support to the web service types (/webservice/ currently rest, soap etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: Jason&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 04th July 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: This has been coded and has been [http://tracker.moodle.org/browse/MDL-21341?focusedCommentId=115079&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-115079 offered as a solution in the tracker issue]. Need agreement from Moodle HQ that they are happy with approach taken and so can be submitted for integration.&lt;br /&gt;
&lt;br /&gt;
* Tracker issue: MDL-21341&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=26873</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=26873"/>
		<updated>2011-07-07T13:30:42Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Thumbs up Scale (facebook style rating) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
* Tracker: MDL-27209&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This can already be done with a custom profile field, but we&#039;d like to move the field up with the other IM fields.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, I am happy to code it. See Dan&#039;s concerns in tracker issue about adding more fields to the user table.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-17593&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this - can be as trivial as a 1 character change to the validation on the new scale form, but would that break other stuff?&lt;br /&gt;
&lt;br /&gt;
* Forum: http://moodle.org/mod/forum/discuss.php?d=180769&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;br /&gt;
&lt;br /&gt;
=== Implement JSON web service support ===&lt;br /&gt;
&lt;br /&gt;
Add JSON support to the web service types (/webservice/ currently rest, soap etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: Jason&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 04th July 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: This has been coded and has been [http://tracker.moodle.org/browse/MDL-21341?focusedCommentId=115079&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-115079 offered as a solution in the tracker issue]. Need agreement from Moodle HQ that they are happy with approach taken and so can be submitted for integration.&lt;br /&gt;
&lt;br /&gt;
* Tracker issue: MDL-21341&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=26872</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=26872"/>
		<updated>2011-07-07T12:26:58Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Accessibility enhancements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
* Tracker: MDL-27209&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This can already be done with a custom profile field, but we&#039;d like to move the field up with the other IM fields.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, I am happy to code it. See Dan&#039;s concerns in tracker issue about adding more fields to the user table.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-17593&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;br /&gt;
&lt;br /&gt;
=== Implement JSON web service support ===&lt;br /&gt;
&lt;br /&gt;
Add JSON support to the web service types (/webservice/ currently rest, soap etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: Jason&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 04th July 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: This has been coded and has been [http://tracker.moodle.org/browse/MDL-21341?focusedCommentId=115079&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-115079 offered as a solution in the tracker issue]. Need agreement from Moodle HQ that they are happy with approach taken and so can be submitted for integration.&lt;br /&gt;
&lt;br /&gt;
* Tracker issue: MDL-21341&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19380</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19380"/>
		<updated>2011-05-17T08:19:50Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Twitter profile field */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Mobile Theme Selection and Device Type Detection ===&lt;br /&gt;
&lt;br /&gt;
Enable detection different device types, including mobile.  Revision of theme selector to allow specification of themes for each device type and the ability for admins to add custom regular expressions to define their own device types.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: anthony&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Spec reviewed by Moodle HQ and agreed.  Code amended to incorporate various small comments.  Bug has now been altered to match new pull workflow.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25394&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This can already be done with a custom profile field, but we&#039;d like to move the field up with the other IM fields.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, I am happy to code it. See Dan&#039;s concerns in tracker issue about adding more fields to the user table.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-17593&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19379</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19379"/>
		<updated>2011-05-16T14:46:50Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Twitter profile field */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Mobile Theme Selection and Device Type Detection ===&lt;br /&gt;
&lt;br /&gt;
Enable detection different device types, including mobile.  Revision of theme selector to allow specification of themes for each device type and the ability for admins to add custom regular expressions to define their own device types.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: anthony&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Spec reviewed by Moodle HQ and agreed.  Code amended to incorporate various small comments.  Bug has now been altered to match new pull workflow.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25394&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This can already be done with a custom profile field, but we&#039;d like to move the field up with the other IM fields.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, I am happy to code it. &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-17593&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19378</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19378"/>
		<updated>2011-05-16T14:31:37Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Twitter profile field */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Mobile Theme Selection and Device Type Detection ===&lt;br /&gt;
&lt;br /&gt;
Enable detection different device types, including mobile.  Revision of theme selector to allow specification of themes for each device type and the ability for admins to add custom regular expressions to define their own device types.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: anthony&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Spec reviewed by Moodle HQ and agreed.  Code amended to incorporate various small comments.  Bug has now been altered to match new pull workflow.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25394&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This can already be done with a custom profile field, but we&#039;d like to move the field up with the other IM fields.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, then I am happy to code it.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-17593&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19377</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19377"/>
		<updated>2011-05-16T14:31:00Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Twitter profile field */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Mobile Theme Selection and Device Type Detection ===&lt;br /&gt;
&lt;br /&gt;
Enable detection different device types, including mobile.  Revision of theme selector to allow specification of themes for each device type and the ability for admins to add custom regular expressions to define their own device types.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: anthony&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Spec reviewed by Moodle HQ and agreed.  Code amended to incorporate various small comments.  Bug has now been altered to match new pull workflow.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25394&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This already exists on moodle.org, and we&#039;d like to move that code into the core product!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, then I am happy to code it.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-17593&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19376</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19376"/>
		<updated>2011-05-16T14:18:53Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Accessibility enhancements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Mobile Theme Selection and Device Type Detection ===&lt;br /&gt;
&lt;br /&gt;
Enable detection different device types, including mobile.  Revision of theme selector to allow specification of themes for each device type and the ability for admins to add custom regular expressions to define their own device types.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: anthony&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Spec reviewed by Moodle HQ and agreed.  Code amended to incorporate various small comments.  Bug has now been altered to match new pull workflow.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25394&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This already exists on moodle.org, and we&#039;d like to move that code into the core product!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, then I am happy to code it/integrate existing code.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDLSITE-709&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19371</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19371"/>
		<updated>2011-05-16T12:43:25Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* User preferences for plug-ins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release and, if not, that OU should develop some of them.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This already exists on moodle.org, and we&#039;d like to move that code into the core product!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, then I am happy to code it/integrate existing code.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDLSITE-709&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
Allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19370</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19370"/>
		<updated>2011-05-16T12:42:53Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Twitter profile field */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: HQ have already implemented some work on this. We need confirmation as to whether HQ are intending to complete the changes by 2.1 release and, if not, that OU should develop some of them.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add username, idnumber into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; needs decision about way forward.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26647&lt;br /&gt;
* In my last comment in the bug, two possible approaches are suggested. I&#039;d like HQ to suggest one of these which would be acceptable, or else suggest an alternative approach that we could implement.&lt;br /&gt;
* I think HQ should also reconsider whether they really want to make it verboten to display username, even if there is a capability restricting that display; I&#039;m certain that lots of people will want to do this, and as mentioned in the bug there are at least a few people specifically asking for it in forums etc. They probably don&#039;t want to be told &#039;eh you can copy your username into the idnumber field&#039; even thought that is an acceptable solution for the OU.&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it is OK to implement this, then sam will code it.&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement that it&#039;s ok to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-10728 (Group support for glossary)&lt;br /&gt;
* Tracker: MDL-26501 (&#039;Full without author&#039; shouldn&#039;t show &#039;Browse by author&#039; tab)&lt;br /&gt;
* Tracker: MDL-27528 (Default view)&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
This already exists on moodle.org, and we&#039;d like to move that code into the core product!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this, then I am happy to code it/integrate existing code.  &lt;br /&gt;
&lt;br /&gt;
* Tracker: MDLSITE-709&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19362</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19362"/>
		<updated>2011-05-16T11:00:17Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* User preferences for plug-ins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on who is to lead on these improvements, and timescales&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add OUCU, PI into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; need answers on a suitable approach for this&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26501&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDLSITE-709&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Docs: https://docs.moodle.org/en/Development:User_preferences_for_plug-ins&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19361</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19361"/>
		<updated>2011-05-16T10:59:24Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* The list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Accessibility enhancements ===&lt;br /&gt;
&lt;br /&gt;
These relate to keyboard and screenreader access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam &amp;amp; jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on who is to lead on these improvements, and timescales&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-27197&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add OUCU, PI into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; need answers on a suitable approach for this&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDL-26501&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker: MDLSITE-709&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
Can we add a scale with only a single level in it, which displays in &amp;quot;x people like this&amp;quot; mode, like Facebook?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19360</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19360"/>
		<updated>2011-05-16T10:52:54Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Way to add OUCU, PI into lists of users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add OUCU, PI into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; need answers on a suitable approach for this&lt;br /&gt;
&lt;br /&gt;
* Tracker MDL-27001&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
 Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19359</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19359"/>
		<updated>2011-05-16T10:50:17Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* The list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add OUCU, PI into lists of users ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: Already implemented, rejected, some discussion; need answers on a suitable approach for this&lt;br /&gt;
&lt;br /&gt;
=== Description/intro display for modules ===&lt;br /&gt;
&lt;br /&gt;
Can we add a per-activity option that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Ability to turn off forum module through admin configuration ===&lt;br /&gt;
&lt;br /&gt;
 Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
=== User preferences for plug-ins===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: jenny&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19358</id>
		<title>OU discussion list</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=OU_discussion_list&amp;diff=19358"/>
		<updated>2011-05-16T10:47:39Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: Created page with &amp;quot;==Introduction==  In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ de...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
In relation to MOODLE #DSU-719107, the Open University (UK) agreed to create a prioritised list of developments which we would like to discuss with Moodle HQ developers.  Our aim is to seek agreement on a way forward for each of these developments and a decision on whether these can be coded by OU developers and integrated into core through the normal Moodle workflow, or whether they are best coded elsewhere.&lt;br /&gt;
&lt;br /&gt;
==Template list item==&lt;br /&gt;
&lt;br /&gt;
===Item title===&lt;br /&gt;
&lt;br /&gt;
Item summary&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: added to list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: what sort of discussion is needed&lt;br /&gt;
&lt;br /&gt;
* Wiki page spec&lt;br /&gt;
* Tracker issue&lt;br /&gt;
* Forum thread&lt;br /&gt;
* Other?&lt;br /&gt;
&lt;br /&gt;
== The list ==&lt;br /&gt;
&lt;br /&gt;
=== Fix the page name for user profile page within course ===&lt;br /&gt;
&lt;br /&gt;
Can we fix the page name for user profile page within course so that it is not the same as course view page, so we can have different blocks there. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lead OU developer&#039;&#039;&#039;: sam&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date&#039;&#039;&#039;: 16 May 2011&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status&#039;&#039;&#039;: We need agreement on how to implement this&lt;br /&gt;
&lt;br /&gt;
* Tracker MDL-25189&lt;br /&gt;
&lt;br /&gt;
=== Way to add OUCU, PI into lists of users ===&lt;br /&gt;
&lt;br /&gt;
(Already implemented, rejected, some discussion; need answers on a suitable approach for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Description/intro - Can we add a (per-activity) option ===&lt;br /&gt;
that controls whether the intro displays below the link on the course page.&lt;br /&gt;
&lt;br /&gt;
=== Glossary: can we add group support and a few other misc enhancements.===&lt;br /&gt;
=== Twitter profile field ===&lt;br /&gt;
=== Can we allow users to turn off the &#039;Forum&#039; module using the eye icon (it&#039;s greyed out) and make this take effect to hide the forum posts tab from user profile. ===&lt;br /&gt;
=== Thumbs up Scale (facebook style rating)===&lt;br /&gt;
=== User preferences for plug-ins===&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18305</id>
		<title>Survey 2 module</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18305"/>
		<updated>2011-04-21T15:58:08Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Question management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting feature requests for a new Survey module that replaces Survey, Questionnaire and Feedback.&lt;br /&gt;
&lt;br /&gt;
==General features of the Module==&lt;br /&gt;
* translate previously built survey1, feedback and questionnaire at installation time&lt;br /&gt;
* upload exported feedback or questionnaires (survey1 doesn&#039;t export questionnaires templates)&lt;br /&gt;
* save instances of survey2 as a template to reuse it or export it&lt;br /&gt;
* import saved survey2 templates&lt;br /&gt;
* support for groups and groupings&lt;br /&gt;
* custom user survey2 page layout (custom html and css, as it already is in database module)&lt;br /&gt;
* download of submissions in txt, xls and ods&lt;br /&gt;
* conditional branching&lt;br /&gt;
* handle more than one input form layout (and find a way to allow this or that layout to this or that user).&lt;br /&gt;
* order survey fields in editing mode&lt;br /&gt;
* group fields in the page layout with fieldset&lt;br /&gt;
* relations between tables (Example: one record for the profile of my company one related record for each intervention request submitted by my company)&lt;br /&gt;
* email submissions to students/teachers/both/none&lt;br /&gt;
* full web accessibility features to the same level as elsewhere in Moodle e.g. labels on text fields, fieldsets on groups of radio buttons &amp;amp; checkboxes.&lt;br /&gt;
* gradebook integration (to allow simple polls to control conditional activities)&lt;br /&gt;
&lt;br /&gt;
==Instance settings page==&lt;br /&gt;
* Access section: 20 types of survey, distinguished by:&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/O,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/W,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to delete a record&lt;br /&gt;
The reationale is: once a record has been submitted by a user, who is allowed to see it (R/O access)?, who is allowed to edit it (R/W access)?, who is allowed to delete it?&lt;br /&gt;
&lt;br /&gt;
Combining all the options the come out 20 cases are defined as follows where:&lt;br /&gt;
:ALL means, all the people accessing the survey;&lt;br /&gt;
:GROUP means people belonging to the group of the user who submitted the record;&lt;br /&gt;
:OWNER is the user who submitted the record;&lt;br /&gt;
:NONE is none.&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! type&lt;br /&gt;
! R/O&lt;br /&gt;
! R/W&lt;br /&gt;
! delete&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* option: allow/deny save without submission (save and restart)&lt;br /&gt;
* option: anonymous survey or named responses&lt;br /&gt;
* option: allow access to records any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
* opening and closing submission dates&lt;br /&gt;
* number of maximun allowed submission&lt;br /&gt;
* option whether to show results immediately after submission, or a thank you message with link to results.&lt;br /&gt;
&lt;br /&gt;
==Field level settings==&lt;br /&gt;
* type of field (char(n), text, number, alphanumeric, boolean, date, picture, file, email, url...) with type check at submit time (and number of digit check for char(n) fields). This information may not be used at field definition time but is useful for data verification/check.&lt;br /&gt;
&lt;br /&gt;
(Example: Please, enter your card ID: _______ This field should be defined, for instance, as char(7))&lt;br /&gt;
* option: mandatory/non mandatory field&lt;br /&gt;
* free text description field for further description and advices to the completer&lt;br /&gt;
*define a range of valid answers for fields allowing this (see next examples)&lt;br /&gt;
(Example 1:&lt;br /&gt;
Please, enter your seniority. (limited between 0 and 50 years)&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
Date of birth: (limited between 18 and 100 years ago))&lt;br /&gt;
*define fields default to be loaded at &amp;quot;new record&amp;quot; display time&lt;br /&gt;
*optional &amp;quot;other&amp;quot; text field for drop down menu/radio button/check box. (see next example)&lt;br /&gt;
(Example for drop down:&lt;br /&gt;
&lt;br /&gt;
 Where were you born? &amp;lt;code&amp;gt;&amp;lt;select name=&amp;quot;dropdown_14&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;Spain&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;France&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;3&amp;quot; &amp;gt;other, please specify&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dropdown_14_other&amp;quot; size=&amp;quot;10&amp;quot; maxlength=&amp;quot;10&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you choose &amp;quot;other&amp;quot; in the drop down menu the field will be enabled and become mandatory, otherwise it will be disabled.&lt;br /&gt;
)&lt;br /&gt;
* custom question numbers&lt;br /&gt;
* question name to name columns header in the downloaded document&lt;br /&gt;
&lt;br /&gt;
==Question types==&lt;br /&gt;
&lt;br /&gt;
Question types should be plug-ins so that they can be extended locally if required.  The following list covers types which exist in at least one of the current survey modules.&lt;br /&gt;
&lt;br /&gt;
* radio buttons (horizontal &amp;amp; vertical display)&lt;br /&gt;
* short text entry&lt;br /&gt;
* long text entry&lt;br /&gt;
* checkbox&lt;br /&gt;
* drop down menu&lt;br /&gt;
* customisable likert scale for rating&lt;br /&gt;
* date (Example: When were you born?)&lt;br /&gt;
&lt;br /&gt;
===New question types===&lt;br /&gt;
* short date (with month and years only, to answer question like: When had you the first evidence of this disease?)&lt;br /&gt;
* time&lt;br /&gt;
(Example:&lt;br /&gt;
When do you usually take breakfast?&lt;br /&gt;
)&lt;br /&gt;
* &amp;quot;static text&amp;quot;/&amp;quot;read only&amp;quot; fields (auto filled by the software) like, current_date, user_name, record_ID, counter...&lt;br /&gt;
* allocation (Drag and drop)&lt;br /&gt;
* ranking&lt;br /&gt;
&lt;br /&gt;
==Result display==&lt;br /&gt;
&lt;br /&gt;
* report per survey, per user and per question&lt;br /&gt;
* report about non-respondent users&lt;br /&gt;
* choose for a question whether to display results as&lt;br /&gt;
** a table&lt;br /&gt;
** a bar chart&lt;br /&gt;
** a pie chart&lt;br /&gt;
&lt;br /&gt;
==Question management==&lt;br /&gt;
&lt;br /&gt;
* questions can be copied within an activity&lt;br /&gt;
* question sets can be created as templates for re-use [maybe later]&lt;br /&gt;
* question sets can be used across multiple courses [maybe later]&lt;br /&gt;
* questions can be re-ordered within an activity&lt;br /&gt;
* question sets can be combined to create a template&lt;br /&gt;
* questions can be deleted from an activity, but there should be an &amp;quot;are you sure&amp;quot; check first.&lt;br /&gt;
&lt;br /&gt;
==Answer Piping &amp;amp; Conditional Questions==&lt;br /&gt;
&lt;br /&gt;
*Allow follow on questions related to the previous.&lt;br /&gt;
*Do You Smoke? Yes/No If Yes is selected a conditional question appears, How Many per Day, if No is selected move on to question 6 appears&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Answer Piping such as:&lt;br /&gt;
*Q1 Which dog breed do you prefer?&lt;br /&gt;
*Labrador&lt;br /&gt;
*Spaniel&lt;br /&gt;
*Collie&lt;br /&gt;
*Other&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Q2 In question 1 you stated you prefer the (Q1 Answer) as a breed, what do you like about it. [Where (Q1 Answer) is replaced with the chosen answer such as &#039;Labrador&#039;&lt;br /&gt;
*Temperament&lt;br /&gt;
*Looks&lt;br /&gt;
*Colour&lt;br /&gt;
*Other&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18304</id>
		<title>Survey 2 module</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18304"/>
		<updated>2011-04-08T13:39:56Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* General features of the Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting feature requests for a new Survey module that replaces Survey, Questionnaire and Feedback.&lt;br /&gt;
&lt;br /&gt;
==General features of the Module==&lt;br /&gt;
* translate previously built survey1, feedback and questionnaire at installation time&lt;br /&gt;
* upload exported feedback or questionnaires (survey1 doesn&#039;t export questionnaires templates)&lt;br /&gt;
* save instances of survey2 as a template to reuse it or export it&lt;br /&gt;
* import saved survey2 templates&lt;br /&gt;
* support for groups and groupings&lt;br /&gt;
* custom user survey2 page layout (custom html and css, as it already is in database module)&lt;br /&gt;
* download of submissions in txt, xls and ods&lt;br /&gt;
* conditional branching&lt;br /&gt;
* handle more than one input form layout (and find a way to allow this or that layout to this or that user).&lt;br /&gt;
* order survey fields in editing mode&lt;br /&gt;
* group fields in the page layout with fieldset&lt;br /&gt;
* relations between tables (Example: one record for the profile of my company one related record for each intervention request submitted by my company)&lt;br /&gt;
* email submissions to students/teachers/both/none&lt;br /&gt;
* full web accessibility features to the same level as elsewhere in Moodle e.g. labels on text fields, fieldsets on groups of radio buttons &amp;amp; checkboxes.&lt;br /&gt;
* gradebook integration (to allow simple polls to control conditional activities)&lt;br /&gt;
&lt;br /&gt;
==Instance settings page==&lt;br /&gt;
* Access section: 20 types of survey, distinguished by:&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/O,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/W,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to delete a record&lt;br /&gt;
The reationale is: once a record has been submitted by a user, who is allowed to see it (R/O access)?, who is allowed to edit it (R/W access)?, who is allowed to delete it?&lt;br /&gt;
&lt;br /&gt;
Combining all the options the come out 20 cases are defined as follows where:&lt;br /&gt;
:ALL means, all the people accessing the survey;&lt;br /&gt;
:GROUP means people belonging to the group of the user who submitted the record;&lt;br /&gt;
:OWNER is the user who submitted the record;&lt;br /&gt;
:NONE is none.&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! type&lt;br /&gt;
! R/O&lt;br /&gt;
! R/W&lt;br /&gt;
! delete&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* option: allow/deny save without submission (save and restart)&lt;br /&gt;
* option: anonymous survey or named responses&lt;br /&gt;
* option: allow access to records any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
* opening and closing submission dates&lt;br /&gt;
* number of maximun allowed submission&lt;br /&gt;
* option whether to show results immediately after submission, or a thank you message with link to results.&lt;br /&gt;
&lt;br /&gt;
==Field level settings==&lt;br /&gt;
* type of field (char(n), text, number, alphanumeric, boolean, date, picture, file, email, url...) with type check at submit time (and number of digit check for char(n) fields). This information may not be used at field definition time but is useful for data verification/check.&lt;br /&gt;
&lt;br /&gt;
(Example: Please, enter your card ID: _______ This field should be defined, for instance, as char(7))&lt;br /&gt;
* option: mandatory/non mandatory field&lt;br /&gt;
* free text description field for further description and advices to the completer&lt;br /&gt;
*define a range of valid answers for fields allowing this (see next examples)&lt;br /&gt;
(Example 1:&lt;br /&gt;
Please, enter your seniority. (limited between 0 and 50 years)&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
Date of birth: (limited between 18 and 100 years ago))&lt;br /&gt;
*define fields default to be loaded at &amp;quot;new record&amp;quot; display time&lt;br /&gt;
*optional &amp;quot;other&amp;quot; text field for drop down menu/radio button/check box. (see next example)&lt;br /&gt;
(Example for drop down:&lt;br /&gt;
&lt;br /&gt;
 Where were you born? &amp;lt;code&amp;gt;&amp;lt;select name=&amp;quot;dropdown_14&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;Spain&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;France&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;3&amp;quot; &amp;gt;other, please specify&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dropdown_14_other&amp;quot; size=&amp;quot;10&amp;quot; maxlength=&amp;quot;10&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you choose &amp;quot;other&amp;quot; in the drop down menu the field will be enabled and become mandatory, otherwise it will be disabled.&lt;br /&gt;
)&lt;br /&gt;
* custom question numbers&lt;br /&gt;
* question name to name columns header in the downloaded document&lt;br /&gt;
&lt;br /&gt;
==Question types==&lt;br /&gt;
&lt;br /&gt;
Question types should be plug-ins so that they can be extended locally if required.  The following list covers types which exist in at least one of the current survey modules.&lt;br /&gt;
&lt;br /&gt;
* radio buttons (horizontal &amp;amp; vertical display)&lt;br /&gt;
* short text entry&lt;br /&gt;
* long text entry&lt;br /&gt;
* checkbox&lt;br /&gt;
* drop down menu&lt;br /&gt;
* customisable likert scale for rating&lt;br /&gt;
* date (Example: When were you born?)&lt;br /&gt;
&lt;br /&gt;
===New question types===&lt;br /&gt;
* short date (with month and years only, to answer question like: When had you the first evidence of this disease?)&lt;br /&gt;
* time&lt;br /&gt;
(Example:&lt;br /&gt;
When do you usually take breakfast?&lt;br /&gt;
)&lt;br /&gt;
* &amp;quot;static text&amp;quot;/&amp;quot;read only&amp;quot; fields (auto filled by the software) like, current_date, user_name, record_ID, counter...&lt;br /&gt;
* allocation (Drag and drop)&lt;br /&gt;
* ranking&lt;br /&gt;
&lt;br /&gt;
==Result display==&lt;br /&gt;
&lt;br /&gt;
* report per survey, per user and per question&lt;br /&gt;
* report about non-respondent users&lt;br /&gt;
* choose for a question whether to display results as&lt;br /&gt;
** a table&lt;br /&gt;
** a bar chart&lt;br /&gt;
** a pie chart&lt;br /&gt;
&lt;br /&gt;
==Question management==&lt;br /&gt;
&lt;br /&gt;
* questions can be copied within an activity&lt;br /&gt;
* question sets can be created as templates for re-use [maybe later]&lt;br /&gt;
* question sets can be used across multiple courses [maybe later]&lt;br /&gt;
* questions can be re-ordered within an activity&lt;br /&gt;
* question sets can be combined to create a template&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Answer Piping &amp;amp; Conditional Questions==&lt;br /&gt;
&lt;br /&gt;
*Allow follow on questions related to the previous.&lt;br /&gt;
*Do You Smoke? Yes/No If Yes is selected a conditional question appears, How Many per Day, if No is selected move on to question 6 appears&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Answer Piping such as:&lt;br /&gt;
*Q1 Which dog breed do you prefer?&lt;br /&gt;
*Labrador&lt;br /&gt;
*Spaniel&lt;br /&gt;
*Collie&lt;br /&gt;
*Other&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Q2 In question 1 you stated you prefer the (Q1 Answer) as a breed, what do you like about it. [Where (Q1 Answer) is replaced with the chosen answer such as &#039;Labrador&#039;&lt;br /&gt;
*Temperament&lt;br /&gt;
*Looks&lt;br /&gt;
*Colour&lt;br /&gt;
*Other&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18303</id>
		<title>Survey 2 module</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18303"/>
		<updated>2011-04-06T12:38:26Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* General features of the Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting feature requests for a new Survey module that replaces Survey, Questionnaire and Feedback.&lt;br /&gt;
&lt;br /&gt;
==General features of the Module==&lt;br /&gt;
* translate previously built survey1, feedback and questionnaire at installation time&lt;br /&gt;
* upload exported feedback or questionnaires (survey1 doesn&#039;t export questionnaires templates)&lt;br /&gt;
* save instances of survey2 as a template to reuse it or export it&lt;br /&gt;
* import saved survey2 templates&lt;br /&gt;
* support for groups and groupings&lt;br /&gt;
* custom user survey2 page layout (custom html and css, as it already is in database module)&lt;br /&gt;
* download of submissions in txt, xls and ods&lt;br /&gt;
* conditional branching&lt;br /&gt;
* handle more than one input form layout (and find a way to allow this or that layout to this or that user).&lt;br /&gt;
* order survey fields in editing mode&lt;br /&gt;
* group fields in the page layout with fieldset&lt;br /&gt;
* relations between tables (Example: one record for the profile of my company one related record for each intervention request submitted by my company)&lt;br /&gt;
* email submissions to students/teachers/both/none&lt;br /&gt;
* full web accessibility features to the same level as elsewhere in Moodle e.g. labels on text fields, fieldsets on groups of radio buttons &amp;amp; checkboxes.&lt;br /&gt;
&lt;br /&gt;
==Instance settings page==&lt;br /&gt;
* Access section: 20 types of survey, distinguished by:&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/O,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to R/W,&lt;br /&gt;
:-&amp;gt; ppl who is allowed to delete a record&lt;br /&gt;
The reationale is: once a record has been submitted by a user, who is allowed to see it (R/O access)?, who is allowed to edit it (R/W access)?, who is allowed to delete it?&lt;br /&gt;
&lt;br /&gt;
Combining all the options the come out 20 cases are defined as follows where:&lt;br /&gt;
:ALL means, all the people accessing the survey;&lt;br /&gt;
:GROUP means people belonging to the group of the user who submitted the record;&lt;br /&gt;
:OWNER is the user who submitted the record;&lt;br /&gt;
:NONE is none.&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! type&lt;br /&gt;
! R/O&lt;br /&gt;
! R/W&lt;br /&gt;
! delete&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ALL&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ALL&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ALL&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| ALL&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| GROUP&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| GROUP&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| GROUP&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| OWNER&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| OWNER&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
| NONE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* option: allow/deny save without submission (save and restart)&lt;br /&gt;
* option: anonymous survey or named responses&lt;br /&gt;
* option: allow access to records any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
* opening and closing submission dates&lt;br /&gt;
* number of maximun allowed submission&lt;br /&gt;
* option whether to show results immediately after submission, or a thank you message with link to results.&lt;br /&gt;
&lt;br /&gt;
==Field level settings==&lt;br /&gt;
* type of field (char(n), text, number, alphanumeric, boolean, date, picture, file, email, url...) with type check at submit time (and number of digit check for char(n) fields). This information may not be used at field definition time but is useful for data verification/check.&lt;br /&gt;
&lt;br /&gt;
(Example: Please, enter your card ID: _______ This field should be defined, for instance, as char(7))&lt;br /&gt;
* option: mandatory/non mandatory field&lt;br /&gt;
* free text description field for further description and advices to the completer&lt;br /&gt;
*define a range of valid answers for fields allowing this (see next examples)&lt;br /&gt;
(Example 1:&lt;br /&gt;
Please, enter your seniority. (limited between 0 and 50 years)&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
Date of birth: (limited between 18 and 100 years ago))&lt;br /&gt;
*define fields default to be loaded at &amp;quot;new record&amp;quot; display time&lt;br /&gt;
*optional &amp;quot;other&amp;quot; text field for drop down menu/radio button/check box. (see next example)&lt;br /&gt;
(Example for drop down:&lt;br /&gt;
&lt;br /&gt;
 Where were you born? &amp;lt;code&amp;gt;&amp;lt;select name=&amp;quot;dropdown_14&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;Spain&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;France&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;3&amp;quot; &amp;gt;other, please specify&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dropdown_14_other&amp;quot; size=&amp;quot;10&amp;quot; maxlength=&amp;quot;10&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you choose &amp;quot;other&amp;quot; in the drop down menu the field will be enabled and become mandatory, otherwise it will be disabled.&lt;br /&gt;
)&lt;br /&gt;
* custom question numbers&lt;br /&gt;
* question name to name columns header in the downloaded document&lt;br /&gt;
&lt;br /&gt;
==Question types==&lt;br /&gt;
&lt;br /&gt;
Question types should be plug-ins so that they can be extended locally if required.  The following list covers types which exist in at least one of the current survey modules.&lt;br /&gt;
&lt;br /&gt;
* radio buttons (horizontal &amp;amp; vertical display)&lt;br /&gt;
* short text entry&lt;br /&gt;
* long text entry&lt;br /&gt;
* checkbox&lt;br /&gt;
* drop down menu&lt;br /&gt;
* customisable likert scale for rating&lt;br /&gt;
* date (Example: When were you born?)&lt;br /&gt;
&lt;br /&gt;
===New question types===&lt;br /&gt;
* short date (with month and years only, to answer question like: When had you the first evidence of this disease?)&lt;br /&gt;
* time&lt;br /&gt;
(Example:&lt;br /&gt;
When do you usually take breakfast?&lt;br /&gt;
)&lt;br /&gt;
* &amp;quot;static text&amp;quot;/&amp;quot;read only&amp;quot; fields (auto filled by the software) like, current_date, user_name, record_ID, counter...&lt;br /&gt;
* allocation (Drag and drop)&lt;br /&gt;
* ranking&lt;br /&gt;
&lt;br /&gt;
==Result display==&lt;br /&gt;
&lt;br /&gt;
* report per survey, per user and per question&lt;br /&gt;
* report about non-respondent users&lt;br /&gt;
* choose for a question whether to display results as&lt;br /&gt;
** a table&lt;br /&gt;
** a bar chart&lt;br /&gt;
** a pie chart&lt;br /&gt;
&lt;br /&gt;
==Question management==&lt;br /&gt;
&lt;br /&gt;
* questions can be copied within an activity&lt;br /&gt;
* question sets can be created as templates for re-use [maybe later]&lt;br /&gt;
* question sets can be used across multiple courses [maybe later]&lt;br /&gt;
* questions can be re-ordered within an activity&lt;br /&gt;
* question sets can be combined to create a template&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Answer Piping &amp;amp; Conditional Questions==&lt;br /&gt;
&lt;br /&gt;
*Allow follow on questions related to the previous.&lt;br /&gt;
*Do You Smoke? Yes/No If Yes is selected a conditional question appears, How Many per Day, if No is selected move on to question 6 appears&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Answer Piping such as:&lt;br /&gt;
*Q1 Which dog breed do you prefer?&lt;br /&gt;
*Labrador&lt;br /&gt;
*Spaniel&lt;br /&gt;
*Collie&lt;br /&gt;
*Other&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Q2 In question 1 you stated you prefer the (Q1 Answer) as a breed, what do you like about it. [Where (Q1 Answer) is replaced with the chosen answer such as &#039;Labrador&#039;&lt;br /&gt;
*Temperament&lt;br /&gt;
*Looks&lt;br /&gt;
*Colour&lt;br /&gt;
*Other&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18289</id>
		<title>Survey 2 module</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18289"/>
		<updated>2011-03-24T14:04:57Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Result display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting feature requests for a new Survey module that replaces Survey, Questionnaire and Feedback.&lt;br /&gt;
&lt;br /&gt;
==Module settings page==&lt;br /&gt;
*option: allow/deny save without submission&lt;br /&gt;
*option: anonymous survey or named responses&lt;br /&gt;
*option: allow/deny record modification after submission&lt;br /&gt;
*option: allow/deny the read only access to submitted records (see next example)&lt;br /&gt;
(Example: This option should appear like:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;Submitted answers are available/visible &amp;lt;select name=&amp;quot;dropdown_7&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;to all users&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;1&amp;quot; &amp;gt;to submitter only&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;to submitter group only&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
)&lt;br /&gt;
*option: allow/deny submitted record deletion&lt;br /&gt;
*custom form and css&lt;br /&gt;
*download of submitted records in some standard format&lt;br /&gt;
* option: allow access to results any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
** fine-grain control for result display at question level also&lt;br /&gt;
*type of field (char(n), text, number, alphanumeric, boolean, date, picture, file, email, url...) with type check at submit time (and number of digit check for char(n) fields).&lt;br /&gt;
&lt;br /&gt;
This information may not be used at field definition time but is useful for data verification/check. (see next example)&lt;br /&gt;
&lt;br /&gt;
(Example:&lt;br /&gt;
Please, enter your card ID: _______&lt;br /&gt;
This field should be defined, for instance, as char(7))&lt;br /&gt;
*opening and closing submission dates (displayed on calendar)&lt;br /&gt;
*relations between tables&lt;br /&gt;
(Example:&lt;br /&gt;
one record for the profile of my company&lt;br /&gt;
one related record for each intervention request submitted by my company)&lt;br /&gt;
&lt;br /&gt;
=== Standard module settings ===&lt;br /&gt;
&lt;br /&gt;
* support for groups and groupings&lt;br /&gt;
* permission control for which roles can create surveys&lt;br /&gt;
&lt;br /&gt;
==Field level settings==&lt;br /&gt;
*mandatory/non mandatory field option&lt;br /&gt;
*free text description field for further description and advice to the completer&lt;br /&gt;
*define a range of valid answers for fields allowing this (see next examples)&lt;br /&gt;
(Example 1:&lt;br /&gt;
Please, enter your seniority. (limited between 0 and 50 years)&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
Date of birth: (limited between 18 and 100 years ago))&lt;br /&gt;
*define fields default to be loaded at &amp;quot;new record&amp;quot; display time&lt;br /&gt;
*optional &amp;quot;other&amp;quot; text field for drop down menu/radio button/check box. (see next example)&lt;br /&gt;
(Example for drop down:&lt;br /&gt;
&lt;br /&gt;
 Where were you born? &amp;lt;code&amp;gt;&amp;lt;select name=&amp;quot;dropdown_14&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;Spain&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;France&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;3&amp;quot; &amp;gt;other, please specify&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dropdown_14_other&amp;quot; size=&amp;quot;10&amp;quot; maxlength=&amp;quot;10&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you choose &amp;quot;other&amp;quot; in the drop down menu the field will be enabled and become mandatory, otherwise it will be disabled.&lt;br /&gt;
)&lt;br /&gt;
*define read-only fields (auto filled by the software) like, current_date, user_name, record_ID...&lt;br /&gt;
* option: allow access to results any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
&lt;br /&gt;
==Question types==&lt;br /&gt;
&lt;br /&gt;
Question types should be plug-ins so that they can be extended locally if required.  The following list covers types which exist in at least one of the current survey modules.&lt;br /&gt;
&lt;br /&gt;
* radio buttons&lt;br /&gt;
** horizontal &amp;amp; vertical&lt;br /&gt;
* short text entry&lt;br /&gt;
* long text entry&lt;br /&gt;
* allocation&lt;br /&gt;
* checkbox&lt;br /&gt;
* customisable likert scale for rating&lt;br /&gt;
* ranking&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===New question types===&lt;br /&gt;
*short date (with month and years only, to answer question like: When had you the first evidence of this disease?)&lt;br /&gt;
*order list. A list of available items and the answer is supposed to order them.&lt;br /&gt;
*time (see next example)&lt;br /&gt;
&lt;br /&gt;
(Example:&lt;br /&gt;
When do you usually take breakfast?&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
==Result display==&lt;br /&gt;
&lt;br /&gt;
* choose for a question whether to display results as&lt;br /&gt;
** a table&lt;br /&gt;
** a bar chart&lt;br /&gt;
** a pie chart&lt;br /&gt;
* option whether to show results immediately after submission, or a thank you message with link to results.&lt;br /&gt;
&lt;br /&gt;
==Question management==&lt;br /&gt;
&lt;br /&gt;
* questions can be copied within an activity&lt;br /&gt;
* question sets can be created as templates for re-use&lt;br /&gt;
* question sets can be used across multiple courses&lt;br /&gt;
* questions can be re-ordered within an activity&lt;br /&gt;
* question sets can be combined to create a questionnaire&lt;br /&gt;
&lt;br /&gt;
==Uncategorised requested features==&lt;br /&gt;
*handle more than one view_single/view_list/find/input layout (and allow this or that layout to users on the basis of capabilities).&lt;br /&gt;
&lt;br /&gt;
The idea is: On the basis of capability you will access your specific layout with only a field subset.&lt;br /&gt;
If you have this capability, you will find all the fields of the survey, otherwise you will find only a subset of them.&lt;br /&gt;
&lt;br /&gt;
The same feature may be provided in the following way:&lt;br /&gt;
At fields level definition the course creator should be allowed to mark the field &amp;quot;field1&amp;quot; as&lt;br /&gt;
#visible and enabled to all&lt;br /&gt;
#visible to all but enabled to users with view_field1 capability only&lt;br /&gt;
#visible and enabled to users with view_field1 capability only&lt;br /&gt;
&lt;br /&gt;
*allow update of submitted questionnaire as an option (not just a clean slate on the next go-round)&lt;br /&gt;
*allow course creator to add custom number to question inside layouts (i.e.: 1, 2, 2a, 2b, 3...) to respect questions hierarchy&lt;br /&gt;
*allow course creator to indent questions inside layouts to respect questions hierarchy (as it is already possible the indent of resources inside courses)&lt;br /&gt;
*conditional branching (see next example)&lt;br /&gt;
(Example:&lt;br /&gt;
&lt;br /&gt;
 1. Gender: &amp;lt;code&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;gender&amp;quot; value=&amp;quot;0&amp;quot; checked=&amp;quot;checked&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;F  &amp;lt;code&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;gender&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;M&lt;br /&gt;
 1a. How many pregnancies have you had? &amp;lt;code&amp;gt;&amp;lt;select&amp;gt;&amp;lt;option value=&amp;quot;0&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;0&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;1&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;more&amp;quot;&amp;gt;more&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;/code&amp;gt; (should be disabled when answer 1 == F)&lt;br /&gt;
 1b. Question relevant only for males? &amp;lt;code&amp;gt;&amp;lt;select disabled=&amp;quot;disabled&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;aa&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;aa&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;bb&amp;quot;&amp;gt;bb&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;cc&amp;quot;&amp;gt;cc&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;more&amp;quot;&amp;gt;other&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;/code&amp;gt; (should be disabled when answer 1 == M)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
==Answer Piping &amp;amp; Conditional Questions==&lt;br /&gt;
&lt;br /&gt;
*Allow follow on questions related to the previous.&lt;br /&gt;
*Do You Smoke? Yes/No If Yes is selected a conditional question appears, How Many per Day, if No is selected move on to question 6 appears&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Answer Piping such as:&lt;br /&gt;
*Q1 Which dog breed do you prefer?&lt;br /&gt;
*Labrador&lt;br /&gt;
*Spaniel&lt;br /&gt;
*Collie&lt;br /&gt;
*Other&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Q2 In question 1 you stated you prefer the (Q1 Answer) as a breed, what do you like about it. [Where (Q1 Answer) is replaced with the chosen answer such as &#039;Labrador&#039;&lt;br /&gt;
*Temperament&lt;br /&gt;
*Looks&lt;br /&gt;
*Colour&lt;br /&gt;
*Other&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18282</id>
		<title>Survey 2 module</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Survey_2_module&amp;diff=18282"/>
		<updated>2011-03-14T13:59:08Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting feature requests for a new Survey module that replaces Survey, Questionnaire and Feedback.&lt;br /&gt;
&lt;br /&gt;
==Module settings page==&lt;br /&gt;
*option: allow/deny save without submission&lt;br /&gt;
*option: anonymous survey or named responses&lt;br /&gt;
*option: allow/deny record modification after submission&lt;br /&gt;
*option: allow/deny the read only access to submitted records (see next example)&lt;br /&gt;
(Example: This option should appear like:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;Submitted answers are available/visible &amp;lt;select name=&amp;quot;dropdown_7&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;to all users&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;1&amp;quot; &amp;gt;to submitter only&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;to submitter group only&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
)&lt;br /&gt;
*option: allow/deny submitted record deletion&lt;br /&gt;
*custom form and css&lt;br /&gt;
*download of submitted records in some standard format&lt;br /&gt;
* option: allow access to results any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
** fine-grain control for result display at question level also&lt;br /&gt;
*type of field (char(n), text, number, alphanumeric, boolean, date, picture, file, email, url...) with type check at submit time (and number of digit check for char(n) fields).&lt;br /&gt;
&lt;br /&gt;
This information may not be used at field definition time but is useful for data verification/check. (see next example)&lt;br /&gt;
&lt;br /&gt;
(Example:&lt;br /&gt;
Please, enter your card ID: _______&lt;br /&gt;
This field should be defined, for instance, as char(7))&lt;br /&gt;
*opening and closing submission dates (displayed on calendar)&lt;br /&gt;
*relations between tables&lt;br /&gt;
(Example:&lt;br /&gt;
one record for the profile of my company&lt;br /&gt;
one related record for each intervention request submitted by my company)&lt;br /&gt;
&lt;br /&gt;
=== Standard module settings ===&lt;br /&gt;
&lt;br /&gt;
* support for groups and groupings&lt;br /&gt;
* permission control for which roles can create surveys&lt;br /&gt;
&lt;br /&gt;
==Field level settings==&lt;br /&gt;
*mandatory/non mandatory field option&lt;br /&gt;
*free text description field for further description and advice to the completer&lt;br /&gt;
*define a range of valid answers for fields allowing this (see next examples)&lt;br /&gt;
(Example 1:&lt;br /&gt;
Please, enter your seniority. (limited between 0 and 50 years)&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
Date of birth: (limited between 18 and 100 years ago))&lt;br /&gt;
*define fields default to be loaded at &amp;quot;new record&amp;quot; display time&lt;br /&gt;
*optional &amp;quot;other&amp;quot; text field for drop down menu/radio button/check box. (see next example)&lt;br /&gt;
(Example for drop down:&lt;br /&gt;
&lt;br /&gt;
 Where were you born? &amp;lt;code&amp;gt;&amp;lt;select name=&amp;quot;dropdown_14&amp;quot; size=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;Spain&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot; &amp;gt;France&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;3&amp;quot; &amp;gt;other, please specify&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dropdown_14_other&amp;quot; size=&amp;quot;10&amp;quot; maxlength=&amp;quot;10&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you choose &amp;quot;other&amp;quot; in the drop down menu the field will be enabled and become mandatory, otherwise it will be disabled.&lt;br /&gt;
)&lt;br /&gt;
*define read-only fields (auto filled by the software) like, current_date, user_name, record_ID...&lt;br /&gt;
* option: allow access to results any time/after you&#039;ve submitted/after close date/never&lt;br /&gt;
&lt;br /&gt;
==Fields types==&lt;br /&gt;
&lt;br /&gt;
Field types should be plug-ins so that they can be extended locally if required.  The following list covers types which exist in at least one of the current survey modules.&lt;br /&gt;
&lt;br /&gt;
* radio buttons&lt;br /&gt;
** horizontal &amp;amp; vertical&lt;br /&gt;
* short text entry&lt;br /&gt;
* long text entry&lt;br /&gt;
* allocation&lt;br /&gt;
* checkbox&lt;br /&gt;
* customisable likert scale for rating&lt;br /&gt;
* ranking&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===New field types===&lt;br /&gt;
*short date (with month and years only, to answer question like: When had you the first evidence of this disease?)&lt;br /&gt;
*order list. A list of available items and the answer is supposed to order them.&lt;br /&gt;
*time (see next example)&lt;br /&gt;
&lt;br /&gt;
(Example:&lt;br /&gt;
When do you usually take breakfast?&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
==Result display==&lt;br /&gt;
&lt;br /&gt;
* choose for a question whether to display results as&lt;br /&gt;
** a table&lt;br /&gt;
** a bar chart&lt;br /&gt;
** a pie chart&lt;br /&gt;
&lt;br /&gt;
==Question management==&lt;br /&gt;
&lt;br /&gt;
* questions can be copied within an activity&lt;br /&gt;
* question sets can be created as templates for re-use&lt;br /&gt;
* question sets can be used across multiple courses&lt;br /&gt;
* questions can be re-ordered within an activity&lt;br /&gt;
&lt;br /&gt;
==Uncategorised requested features==&lt;br /&gt;
*handle more than one view_single/view_list/find/input layout (and allow this or that layout to users on the basis of capabilities).&lt;br /&gt;
&lt;br /&gt;
The idea is: On the basis of capability you will access your specific layout with only a field subset.&lt;br /&gt;
If you have this capability, you will find all the fields of the survey, otherwise you will find only a subset of them.&lt;br /&gt;
&lt;br /&gt;
The same feature may be provided in the following way:&lt;br /&gt;
At fields level definition the course creator should be allowed to mark the field &amp;quot;field1&amp;quot; as&lt;br /&gt;
#visible and enabled to all&lt;br /&gt;
#visible to all but enabled to users with view_field1 capability only&lt;br /&gt;
#visible and enabled to users with view_field1 capability only&lt;br /&gt;
&lt;br /&gt;
*allow course creator to add custom number to question inside layouts (i.e.: 1, 2, 2a, 2b, 3...) to respect questions hierarchy&lt;br /&gt;
*allow course creator to indent questions inside layouts to respect questions hierarchy (as it is already possible the indent of resources inside courses)&lt;br /&gt;
*conditional branching (see next example)&lt;br /&gt;
(Example:&lt;br /&gt;
&lt;br /&gt;
 1. Gender: &amp;lt;code&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;gender&amp;quot; value=&amp;quot;0&amp;quot; checked=&amp;quot;checked&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;F  &amp;lt;code&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;gender&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;M&lt;br /&gt;
 1a. How many pregnancies have you had? &amp;lt;code&amp;gt;&amp;lt;select&amp;gt;&amp;lt;option value=&amp;quot;0&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;0&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;1&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;more&amp;quot;&amp;gt;more&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;/code&amp;gt; (should be disabled when answer 1 == F)&lt;br /&gt;
 1b. Question relevant only for males? &amp;lt;code&amp;gt;&amp;lt;select disabled=&amp;quot;disabled&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;aa&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;aa&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;bb&amp;quot;&amp;gt;bb&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;cc&amp;quot;&amp;gt;cc&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;more&amp;quot;&amp;gt;other&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;/code&amp;gt; (should be disabled when answer 1 == M)&lt;br /&gt;
)&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19046</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19046"/>
		<updated>2011-03-14T13:29:34Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Defining the form */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in.  Each plug-in would offer its own settings screen, and would place links to that screen at suitable place(s) in their own user interface.   Additionally, a link to the settings screen would be  automatically added to the profile section of the settings block, wherever it appears.  This would gather together user preferences in a single location, making them easy to find.&lt;br /&gt;
&lt;br /&gt;
When the user views the settings screen, their current settings will be displayed.  An Edit button will allow them to make changes.  &lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
=== User interface mock-ups ===&lt;br /&gt;
&lt;br /&gt;
1.  a custom plug-in&#039;s main screen - showing its link to its settings screen&lt;br /&gt;
&lt;br /&gt;
[[Image:userprefs_pluginscreen.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
2.  a custom plug-in&#039;s setting screen in read mode - also showing the settings block with links to other settings&lt;br /&gt;
&lt;br /&gt;
[[Image:Userprefs_readscreen.png]]&lt;br /&gt;
&lt;br /&gt;
3.  a custom plug-in&#039;s setting screen in edit mode&lt;br /&gt;
&lt;br /&gt;
[[Image:Userprefs_edit.png]]&lt;br /&gt;
&lt;br /&gt;
4.  forum settings&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_forum.png]]&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_settingblock.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
Initially I thought that the user/edit.php pages should display the Settings block.  Given that the settings block and the &amp;quot;my profile&amp;quot; section is available all over the place, I&#039;m not sure this is strictly necessary.  When you&#039;re editing your profile, so you really need to jump to other places?  You don&#039;t have the block there already with your &amp;quot;change password&amp;quot; link.  &lt;br /&gt;
&lt;br /&gt;
If we do want the settings block on the edit profile screen, it&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189.  Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.&lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  &lt;br /&gt;
&lt;br /&gt;
A new class of user_settingpage will be set up, so that the userpreferences.php file will start with: &lt;br /&gt;
&lt;br /&gt;
    $settings = new user_settingpage(&#039;format_studyplan&#039;, get_string(&#039;pluginname&#039;,&#039;format_studyplan&#039;));&lt;br /&gt;
&lt;br /&gt;
Then each setting will be added like this:&lt;br /&gt;
&lt;br /&gt;
    $settings-&amp;gt;add(new user_setting_checkbox(&#039;format_studyplan_enablenotes&#039;, get_string(&#039;enablenotes_label&#039;, &#039;format_studyplan&#039;), get_string(&#039;enablenotes_prompt&#039;, &#039;format_studyplan&#039;), get_string(&#039;enablenotes_help&#039;, &#039;format_studyplan&#039;), true, PARAM_INT));&lt;br /&gt;
&lt;br /&gt;
To be completed - I&#039;m not sure yet what the user_setting classes would need to do (how much can they inherit from admin_setting), and what we&#039;d need to write so that when a user clicks on plugin/userpreferences.php link in the website they get the form rendered correctly.&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If the user visits their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
Example plug-in form:&lt;br /&gt;
&lt;br /&gt;
[[Image:userpref_Studyplansettings.gif]]&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor (possibly some new ones coming related to this too)&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19045</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19045"/>
		<updated>2011-03-14T13:20:37Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* User interface mock-ups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in.  Each plug-in would offer its own settings screen, and would place links to that screen at suitable place(s) in their own user interface.   Additionally, a link to the settings screen would be  automatically added to the profile section of the settings block, wherever it appears.  This would gather together user preferences in a single location, making them easy to find.&lt;br /&gt;
&lt;br /&gt;
When the user views the settings screen, their current settings will be displayed.  An Edit button will allow them to make changes.  &lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
=== User interface mock-ups ===&lt;br /&gt;
&lt;br /&gt;
1.  a custom plug-in&#039;s main screen - showing its link to its settings screen&lt;br /&gt;
&lt;br /&gt;
[[Image:userprefs_pluginscreen.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
2.  a custom plug-in&#039;s setting screen in read mode - also showing the settings block with links to other settings&lt;br /&gt;
&lt;br /&gt;
[[Image:Userprefs_readscreen.png]]&lt;br /&gt;
&lt;br /&gt;
3.  a custom plug-in&#039;s setting screen in edit mode&lt;br /&gt;
&lt;br /&gt;
[[Image:Userprefs_edit.png]]&lt;br /&gt;
&lt;br /&gt;
4.  forum settings&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_forum.png]]&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_settingblock.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
Initially I thought that the user/edit.php pages should display the Settings block.  Given that the settings block and the &amp;quot;my profile&amp;quot; section is available all over the place, I&#039;m not sure this is strictly necessary.  When you&#039;re editing your profile, so you really need to jump to other places?  You don&#039;t have the block there already with your &amp;quot;change password&amp;quot; link.  &lt;br /&gt;
&lt;br /&gt;
If we do want the settings block on the edit profile screen, it&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189.  Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.&lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If the user visits their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
Example plug-in form:&lt;br /&gt;
&lt;br /&gt;
[[Image:userpref_Studyplansettings.gif]]&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor (possibly some new ones coming related to this too)&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19044</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19044"/>
		<updated>2011-03-14T12:38:11Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* User interface mock-ups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in.  Each plug-in would offer its own settings screen, and would place links to that screen at suitable place(s) in their own user interface.   Additionally, a link to the settings screen would be  automatically added to the profile section of the settings block, wherever it appears.  This would gather together user preferences in a single location, making them easy to find.&lt;br /&gt;
&lt;br /&gt;
When the user views the settings screen, their current settings will be displayed.  An Edit button will allow them to make changes.  &lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
=== User interface mock-ups ===&lt;br /&gt;
&lt;br /&gt;
1.  a custom plug-in&#039;s main screen - showing its link to its settings screen&lt;br /&gt;
&lt;br /&gt;
[[Image:userprefs_pluginscreen.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
2.  a custom plug-in&#039;s setting screen in read mode&lt;br /&gt;
&lt;br /&gt;
[[Image:Userprefs_readscreen.png]]&lt;br /&gt;
&lt;br /&gt;
3.  a custom plug-in&#039;s setting screen in edit mode&lt;br /&gt;
&lt;br /&gt;
[[Image:Userprefs_edit.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4.  forum settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5.  the user profile page&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_settingblock.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
Initially I thought that the user/edit.php pages should display the Settings block.  Given that the settings block and the &amp;quot;my profile&amp;quot; section is available all over the place, I&#039;m not sure this is strictly necessary.  When you&#039;re editing your profile, so you really need to jump to other places?  You don&#039;t have the block there already with your &amp;quot;change password&amp;quot; link.  &lt;br /&gt;
&lt;br /&gt;
If we do want the settings block on the edit profile screen, it&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189.  Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.&lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If the user visits their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
Example plug-in form:&lt;br /&gt;
&lt;br /&gt;
[[Image:userpref_Studyplansettings.gif]]&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor (possibly some new ones coming related to this too)&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19043</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19043"/>
		<updated>2011-03-14T12:14:45Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* User interface mock-ups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in.  Each plug-in would offer its own settings screen, and would place links to that screen at suitable place(s) in their own user interface.   Additionally, a link to the settings screen would be  automatically added to the profile section of the settings block, wherever it appears.  This would gather together user preferences in a single location, making them easy to find.&lt;br /&gt;
&lt;br /&gt;
When the user views the settings screen, their current settings will be displayed.  An Edit button will allow them to make changes.  &lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
=== User interface mock-ups ===&lt;br /&gt;
&lt;br /&gt;
1.  a custom plug-in&#039;s main screen - showing its link to its settings screen&lt;br /&gt;
&lt;br /&gt;
[[Image:userprefs_pluginscreen.jpg]]&lt;br /&gt;
&lt;br /&gt;
2.  a custom plug-in&#039;s setting screen in read mode&lt;br /&gt;
&lt;br /&gt;
3.  a custom plug-in&#039;s setting screen in edit mode&lt;br /&gt;
&lt;br /&gt;
4.  forum settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5.  the user profile page&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.  the course home page&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_settingblock.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
Initially I thought that the user/edit.php pages should display the Settings block.  Given that the settings block and the &amp;quot;my profile&amp;quot; section is available all over the place, I&#039;m not sure this is strictly necessary.  When you&#039;re editing your profile, so you really need to jump to other places?  You don&#039;t have the block there already with your &amp;quot;change password&amp;quot; link.  &lt;br /&gt;
&lt;br /&gt;
If we do want the settings block on the edit profile screen, it&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189.  Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.&lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If the user visits their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
Example plug-in form:&lt;br /&gt;
&lt;br /&gt;
[[Image:userpref_Studyplansettings.gif]]&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor (possibly some new ones coming related to this too)&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19042</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19042"/>
		<updated>2011-03-14T10:44:51Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in.  Each plug-in would offer its own settings screen, and would place links to that screen at suitable place(s) in their own user interface.   Additionally, a link to the settings screen would be  automatically added to the profile section of the settings block, wherever it appears.  This would gather together user preferences in a single location, making them easy to find.&lt;br /&gt;
&lt;br /&gt;
When the user views the settings screen, their current settings will be displayed.  An Edit button will allow them to make changes.  &lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
=== User interface mock-ups ===&lt;br /&gt;
&lt;br /&gt;
1.  a custom plug-in&#039;s main screen - showing its link to its settings screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.  a custom plug-in&#039;s setting screen in read mode&lt;br /&gt;
&lt;br /&gt;
3.  a custom plug-in&#039;s setting screen in edit mode&lt;br /&gt;
&lt;br /&gt;
4.  forum settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5.  the user profile page&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.  the course home page&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_settingblock.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
Initially I thought that the user/edit.php pages should display the Settings block.  Given that the settings block and the &amp;quot;my profile&amp;quot; section is available all over the place, I&#039;m not sure this is strictly necessary.  When you&#039;re editing your profile, so you really need to jump to other places?  You don&#039;t have the block there already with your &amp;quot;change password&amp;quot; link.  &lt;br /&gt;
&lt;br /&gt;
If we do want the settings block on the edit profile screen, it&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189.  Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.&lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If the user visits their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
Example plug-in form:&lt;br /&gt;
&lt;br /&gt;
[[Image:userpref_Studyplansettings.gif]]&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor (possibly some new ones coming related to this too)&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19041</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19041"/>
		<updated>2011-03-14T10:03:03Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in.  Each plug-in would offer its own settings screen, and would place links to that screen at suitable place(s) in their own user interface.   Additionally, a link to the settings screen would be  automatically added to the profile section of the settings block.  This would gather together user preferences in a single location, making them easy to find.&lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_settingblock.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
The user/edit.php pages will need to display the Settings block.  It&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189. &lt;br /&gt;
&lt;br /&gt;
Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.&lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If they visit their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
Example plug-in form:&lt;br /&gt;
&lt;br /&gt;
[[Image:userpref_Studyplansettings.gif]]&lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19040</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19040"/>
		<updated>2011-03-11T09:44:26Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Generated settings form */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in and have that screen automatically added to the profile section of the settings block.&lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_settingblock.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
The user/edit.php pages will need to display the Settings block.  It&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189. &lt;br /&gt;
&lt;br /&gt;
Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.&lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If they visit their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
Example plug-in form:&lt;br /&gt;
&lt;br /&gt;
[[Image:userpref_Studyplansettings.gif]]&lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19039</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19039"/>
		<updated>2011-03-11T09:42:18Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Settings block */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in and have that screen automatically added to the profile section of the settings block.&lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Userpref_settingblock.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
The user/edit.php pages will need to display the Settings block.  It&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189. &lt;br /&gt;
&lt;br /&gt;
Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.&lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If they visit their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19038</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19038"/>
		<updated>2011-02-23T09:38:20Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* set_user_preferences */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in and have that screen automatically added to the profile section of the settings block.&lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update&#039;&#039; Tim points out that you&#039;d be unlikely to want to set multiple plug-ins at the same time, which is very true.  Its probably not something we should encourage either.  So maybe it would be better to simply add another parameter (optional, default null as with set_user_preference()) with the plugin name.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
The user/edit.php pages will need to display the Settings block.  It&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189. &lt;br /&gt;
&lt;br /&gt;
Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.  &lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If they visit their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19037</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19037"/>
		<updated>2011-02-23T09:36:25Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in and have that screen automatically added to the profile section of the settings block.&lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin (or maybe component if that&#039;s newer moodle style)&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
The user/edit.php pages will need to display the Settings block.  It&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189. &lt;br /&gt;
&lt;br /&gt;
Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.  &lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If they visit their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19036</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19036"/>
		<updated>2011-02-22T10:49:01Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in and have that screen automatically added to the profile section of the settings block.&lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
====Structure====&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The Settings block currently includes a Profile section, which expands to offer a link to edit profile.  Users with the right permissions also see change password, roles and security key links.  &lt;br /&gt;
&lt;br /&gt;
This profile section will be extended to add a link to each of the user preferences screens defined by plugins.  The link will be highlighted with CSS to indicate the currently open page.&lt;br /&gt;
&lt;br /&gt;
The links can be added in navigationlib.php by adding a loop through all enabled plugins (of all types) looking for an appropriately named file (see below) defining a user preferences form.  If found, a function call would check whether the link should be added (see below), and if returns true a link to the form will be included in the profile navigation.&lt;br /&gt;
&lt;br /&gt;
==== Block display ====&lt;br /&gt;
&lt;br /&gt;
The user/edit.php pages will need to display the Settings block.  It&#039;s pagelayout will need to be set to something that displays user blocks to match the profile page. The user/edit page already has user pagetype, but a course context.  This will cause difficulties with the block display and overlaps with issues Sam has reported in MDL-25189. &lt;br /&gt;
&lt;br /&gt;
Some core themes (e.g. boxxie - it may be the only one, I haven&#039;t checked) add blocks on the user/edit.php page.  These would need to be updated to remove that control, as being no longer necessary.  &lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
====Defining the form====&lt;br /&gt;
&lt;br /&gt;
An optional file (userpreferences.php) will be added to each plugin which wants to define a user preferences interface.  &lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file will create a new form.   This will not be a complete moodleform definition but a simpler definition similar to the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.  (??? because of that would it actually be simpler to add a proper moodleform ???)&lt;br /&gt;
&lt;br /&gt;
The exact definition of these files is the main part of this specification which requires further work - I thought it best to wait until the general principle could be agreed before spending too much time on that!&lt;br /&gt;
&lt;br /&gt;
====Admin override====&lt;br /&gt;
&lt;br /&gt;
It is possible that system administrators may want to hide the user preferences for simplicity.  The userpreferences.php file (or the plug-in class definition??) will include a function (plugin_userprefs_link maybe??) which indicates whether or not the settings block profile link should be included.  This will return true by default for all plugins.&lt;br /&gt;
&lt;br /&gt;
However, plug-in developers making use of this feature should include an admin settings screen with an on/off checkbox, and then their choice would be returned rather than the default true.&lt;br /&gt;
&lt;br /&gt;
As an extension of this, plug-in developers might give administrators the option to switch on and off individual settings within the plug-in&#039;s user preferences form.  If all individual settings were disabled, the plugin_userprefs_link function should check this situation and return false regardless of the general admin on/off setting. &lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If they visit their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19035</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19035"/>
		<updated>2011-02-22T10:19:28Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in and have that screen automatically added to the profile section of the settings block.&lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
This function takes an array of key/value pairs and saves all of them in the user_preferences table.  This would be extended to optionally take an array of arrays of key/value pairs.  &lt;br /&gt;
&lt;br /&gt;
The first array would be indexed with the plugin name, so $array[&#039;plugin1&#039;] contains all the key/value pairs for plugin1.  &lt;br /&gt;
&lt;br /&gt;
If an array of arrays is received, then each array&#039;s key/value pairs are inserted with the array&#039;s index inserted as the plugin value in the database row.  If a simple array of key/value pairs is received, these are inserted with a null plugin value.&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
Where these plugins are not enabled, the settings page would not be included in the profile settings navigation.&lt;br /&gt;
&lt;br /&gt;
The user/edit.php page will need to display the Settings block.  Therefore, its pagelayout would need to be set to something that displayed user blocks as they are displayed on the view profile page.  Core themes (like boxxie) which add blocks on the user/edit.php page would need to be updated to remove that control.  &lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The code within userpreferences.php would be an extension of the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.&lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file would create a new form, which would appear in the user profile section of the Settings block as an extra link below Edit profile.  The link will be highlighted with CSS to indicate the currently open page – in the same way as currently happens for edit profile.  &lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be moved and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
Here is a list of current user profile fields which fall into this situation - most would problably move to a &amp;quot;general&amp;quot; tab as they affect multiple plugins.  In particular, I&#039;m not sure what to do with the messaging ones, as they shouldn&#039;t be disabled if system private messaging is disabled, but they don&#039;t belong just with forum.&lt;br /&gt;
&lt;br /&gt;
*	General&lt;br /&gt;
**	Use HTML editor&lt;br /&gt;
**	Ajax and JavaScript&lt;br /&gt;
**	Screen reader&lt;br /&gt;
**	Preferred language&lt;br /&gt;
*	Messaging &lt;br /&gt;
**	Email format&lt;br /&gt;
**	Email display&lt;br /&gt;
**	Email digest type&lt;br /&gt;
*	Forum&lt;br /&gt;
**	Forum autosubscribe&lt;br /&gt;
**	Forum tracking&lt;br /&gt;
&lt;br /&gt;
=== Generated settings form ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If they visit their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures, so no further extension will be required.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19034</id>
		<title>User preferences for plug-ins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_preferences_for_plug-ins&amp;diff=19034"/>
		<updated>2011-02-22T10:10:18Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: New page: This page is associated with discussion about allowing plug-ins to declare their own user settings screens.  * Forum thread http://moodle.org/mod/forum/discuss.php?d=168322 * Tracker issue...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is associated with discussion about allowing plug-ins to declare their own user settings screens.&lt;br /&gt;
&lt;br /&gt;
* Forum thread http://moodle.org/mod/forum/discuss.php?d=168322&lt;br /&gt;
* Tracker issue http://tracker.moodle.org/browse/MDL-26347&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
One strand of development for the Open University UK&#039;s next generation VLE focusses on features which allow the student to be able to personalise their experience with various different parts of the system.  What it boils down to is them being able to switch bits on and off.&lt;br /&gt;
&lt;br /&gt;
What I&#039;d like is for a plug-in (module, block, course format, local plug-in...) to be able to define a user settings screen that relates to the plug-in and have that screen automatically added to the profile section of the settings block.&lt;br /&gt;
&lt;br /&gt;
=== Discarded thoughts ===&lt;br /&gt;
&lt;br /&gt;
Initially I thought this could be done through the custom user profile fields, where each plug-in would define a custom profile category (only editable through code) and each category would be displayed as a separate item in the profile settings navigation.  &lt;br /&gt;
&lt;br /&gt;
There was a lot of concern (see MDL-26347 comments) from Eloy and Petr about interdependence of functionality.  &lt;br /&gt;
&lt;br /&gt;
This new proposal builds on a suggestion from Tim in the forum thread to use user_preferences instead, since this does not have a UI for admins to interact with.  Tim, Sam and I have worked together to rough this outline for further discussion...&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
&lt;br /&gt;
User preferences will be stored in the existing core user_preferences table, rather than in tables associated with the plug-in.  &lt;br /&gt;
&lt;br /&gt;
The user_preferences table will be extended to add a plug-in column, for improved data integrity (optional - the rest of this design could work without this change, either in the short term to allow an early inclusion in 2.0.x or for ever).&lt;br /&gt;
&lt;br /&gt;
Current best practice is to include the plug-in name in the name of the user_preference, so this extension will simplify that.  The table will be populated as follows&lt;br /&gt;
&lt;br /&gt;
*	Userid&lt;br /&gt;
**      the id number for current $USER&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*       plugin&lt;br /&gt;
**      frankenstyle name&lt;br /&gt;
**      allowed null for backward compatibility&lt;br /&gt;
*	Name&lt;br /&gt;
**      the setting being stored&lt;br /&gt;
**      as currently defined&lt;br /&gt;
*	value&lt;br /&gt;
**      the user&#039;s choice&lt;br /&gt;
**      as currently defined&lt;br /&gt;
&lt;br /&gt;
====Get and Set functions====&lt;br /&gt;
&lt;br /&gt;
The data continues to be accessed through the existing functions which are extended to cope with the optional plugin parameter.&lt;br /&gt;
&lt;br /&gt;
===== get_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be checked when accessing the data.  Otherwise, just the name and user parameters, and a null plugin value will be checked.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preference =====&lt;br /&gt;
&lt;br /&gt;
An additional optional plugin parameter will be added.  This will default to null if no parameter is passed, for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
If the plugin parameter is received then this, as well as the name and user parameters will be inserted in the database.  Otherwise, just the name and user parameters, and a null plugin value will be inserted.&lt;br /&gt;
&lt;br /&gt;
===== set_user_preferences =====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Settings block ===&lt;br /&gt;
&lt;br /&gt;
The user/edit.php page will need to display the Settings block.  Therefore, its pagelayout would need to be set to something that displayed user blocks as they are displayed on the view profile page.  Core themes (like boxxie) which add blocks on the user/edit.php page would need to be updated to remove that control.  &lt;br /&gt;
&lt;br /&gt;
===Plug-in interface===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The code within userpreferences.php would be an extension of the way admin configuration settings.php files work.  However, since the forms will be aimed at users rather than admins, the form fields will optionally need additional help text.&lt;br /&gt;
&lt;br /&gt;
Each userpreferences.php file would create a new form, which would appear in the user profile section of the Settings block as an extra link below Edit profile.  The link will be highlighted with CSS to indicate the currently open page – in the same way as currently happens for edit profile.  &lt;br /&gt;
&lt;br /&gt;
=== Further tidying up possible ===&lt;br /&gt;
&lt;br /&gt;
A number of fields on the current user profile form could be removed and placed more appropriately with their plug-ins, or into a new form for general preferences.  This would leave the main profile form solely responsible for personal data about the user. &lt;br /&gt;
&lt;br /&gt;
•	General&lt;br /&gt;
o	Use HTML editor&lt;br /&gt;
o	Ajax and JavaScript&lt;br /&gt;
o	Screen reader&lt;br /&gt;
o	Preferred language&lt;br /&gt;
•	Messaging&lt;br /&gt;
o	Email format&lt;br /&gt;
o	Email display&lt;br /&gt;
o	Email digest type&lt;br /&gt;
•	Forum&lt;br /&gt;
o	Forum autosubscribe&lt;br /&gt;
o	Forum tracking&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generated settings form===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The save and cancel buttons should intuitively take you back to the course home page.  If they visit their profile from a course home or content page, the global $COURSE variable will be available and the id property can be used to define the redirect.  Alternatively, the lastcourseaccess property of the global $USER variable stores the last visit on all their available courses, and so can be used to identify the last course they looked at for the definition of the redirect.  If the lastcourseaccess property of the global $USER variable is empty, the user should be redirected to the latest course on which they were enrolled.&lt;br /&gt;
&lt;br /&gt;
===Backup and restore===&lt;br /&gt;
&lt;br /&gt;
User settings, because they are stored using the core user_preferences functionality are already catered for in backup and restore procedures.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CategoryDeveloper}}&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_to_2.0_checklist&amp;diff=19001</id>
		<title>Migrating to 2.0 checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_to_2.0_checklist&amp;diff=19001"/>
		<updated>2011-01-27T15:04:26Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* General */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are things that OU developers have found so far to check/do in code we&#039;re migrating from Moodle 1.9 to 2.0.  All information on the detail of this checklist can be found elsewhere in Moodle Docs, and particularly from the [[Migrating_contrib_code_to_2.0]]&lt;br /&gt;
&lt;br /&gt;
Not all these things are essential for a rush job, but if you did all of them, then that&#039;d be great.  We should really mark each one with a priority of some sort!&lt;br /&gt;
&lt;br /&gt;
Please add/edit this list!&lt;br /&gt;
&lt;br /&gt;
==Database==&lt;br /&gt;
&lt;br /&gt;
* 	Leave empty db/update.php file&lt;br /&gt;
* 	New $DB global objects with functions replace old db functions&lt;br /&gt;
* 	$DB parameters swapped to ? &lt;br /&gt;
* 	Add and strip slashes no longer required&lt;br /&gt;
* 	Remove use of ENUM and ENUMVALUES in install.xml file&lt;br /&gt;
* 	check use of sql_substr() &lt;br /&gt;
* 	Get_records() etc now always returning arrays, empty array in case of no records found. &lt;br /&gt;
* 	Db functions throw errors not return false on error&lt;br /&gt;
* 	DB functions offer strictness parameters e.g MUST_EXIST&lt;br /&gt;
* 	Update version.php numbers (esp required)&lt;br /&gt;
&lt;br /&gt;
==Page display==&lt;br /&gt;
&lt;br /&gt;
* 	New $OUTPUT header and footer functions&lt;br /&gt;
* Navigation links need to use $PAGE-&amp;gt;navbar&lt;br /&gt;
* 	Make sure that you instantiate the moodle form before any call to $OUTPUT-&amp;gt;header()&lt;br /&gt;
* 	Create a renderer&lt;br /&gt;
*       Change the way image urls are displayed (not $CFG-&amp;gt;pixpath any more)&lt;br /&gt;
*       CSS changes&lt;br /&gt;
**      Change styles.php to styles.css&lt;br /&gt;
**      Change page id to new structure e.g. course-format-studyplan to page-course-view-studyplan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Roles and Permissions:==&lt;br /&gt;
&lt;br /&gt;
* 	array name to $capabilities in access.php&lt;br /&gt;
* 	Remove references to admin in access.php&lt;br /&gt;
* 	Rename legacy to archetypes in access.php&lt;br /&gt;
* 	Add manager archetype in access.php&lt;br /&gt;
* 	Ensure require_login as well as require_capability checks&lt;br /&gt;
*       isguest() is depreicated, use !isloggedin() || isguestuser() instead&lt;br /&gt;
&lt;br /&gt;
==Language strings==&lt;br /&gt;
&lt;br /&gt;
* 	Rename language folder&lt;br /&gt;
* 	Change $a to {$a} in language files&lt;br /&gt;
* 	Change popup help files to _help lang strings and shorten&lt;br /&gt;
* 	Add $string[‘pluginname’] to lang file&lt;br /&gt;
* 	Add $string[‘pluginadministration’] to lang file&lt;br /&gt;
&lt;br /&gt;
==Forms==&lt;br /&gt;
&lt;br /&gt;
* 	Param_clean parameter type removed&lt;br /&gt;
* 	type required parameter for optional_and required_param&lt;br /&gt;
* 	Replace file form elements with new filepicker&lt;br /&gt;
* 	Replace htmleditor with editor form field type&lt;br /&gt;
*       Change setHelpButton to addHelpButton. (You need to change the arguments, but the new ones are simpler.)&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&lt;br /&gt;
* 	Swap config_ files to edit and settings php files&lt;br /&gt;
* 	Fix whitespace &amp;amp; coding style&lt;br /&gt;
* 	rs_fetch_next_record($rs) is deprecated, in favour of the simple foreach($rs as $var). Calls to rs_close() must be replaced by $rs-&amp;gt;close();&lt;br /&gt;
* 	Check functions deprecated list: https://docs.moodle.org/en/Development:Deprecated_functions_in_2.0&lt;br /&gt;
* 	Use print_error() or throw new moodle_exception not error()&lt;br /&gt;
* 	Replace all url strings e.g. in redirect() calls with moodle_url instances&lt;br /&gt;
* Move install/uninstall functions from lib to db/install.php, lib/uninstall.php&lt;br /&gt;
* Move images into pix folder (especially icon.gif), get path by calling $OUTPUT-&amp;gt;pix_url(&#039;icon&#039;, &#039;local_whatever&#039;);&lt;br /&gt;
* Add &#039;supports&#039; function in lib (modname_supports()) for modules (and blocks?).&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_to_2.0_checklist&amp;diff=19000</id>
		<title>Migrating to 2.0 checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_to_2.0_checklist&amp;diff=19000"/>
		<updated>2011-01-27T15:02:48Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are things that OU developers have found so far to check/do in code we&#039;re migrating from Moodle 1.9 to 2.0.  All information on the detail of this checklist can be found elsewhere in Moodle Docs, and particularly from the [[Migrating_contrib_code_to_2.0]]&lt;br /&gt;
&lt;br /&gt;
Not all these things are essential for a rush job, but if you did all of them, then that&#039;d be great.  We should really mark each one with a priority of some sort!&lt;br /&gt;
&lt;br /&gt;
Please add/edit this list!&lt;br /&gt;
&lt;br /&gt;
==Database==&lt;br /&gt;
&lt;br /&gt;
* 	Leave empty db/update.php file&lt;br /&gt;
* 	New $DB global objects with functions replace old db functions&lt;br /&gt;
* 	$DB parameters swapped to ? &lt;br /&gt;
* 	Add and strip slashes no longer required&lt;br /&gt;
* 	Remove use of ENUM and ENUMVALUES in install.xml file&lt;br /&gt;
* 	check use of sql_substr() &lt;br /&gt;
* 	Get_records() etc now always returning arrays, empty array in case of no records found. &lt;br /&gt;
* 	Db functions throw errors not return false on error&lt;br /&gt;
* 	DB functions offer strictness parameters e.g MUST_EXIST&lt;br /&gt;
* 	Update version.php numbers (esp required)&lt;br /&gt;
&lt;br /&gt;
==Page display==&lt;br /&gt;
&lt;br /&gt;
* 	New $OUTPUT header and footer functions&lt;br /&gt;
* Navigation links need to use $PAGE-&amp;gt;navbar&lt;br /&gt;
* 	Make sure that you instantiate the moodle form before any call to $OUTPUT-&amp;gt;header()&lt;br /&gt;
* 	Create a renderer&lt;br /&gt;
*       Change the way image urls are displayed (not $CFG-&amp;gt;pixpath any more)&lt;br /&gt;
*       CSS changes&lt;br /&gt;
**      Change styles.php to styles.css&lt;br /&gt;
**      Change page id to new structure e.g. course-format-studyplan to page-course-view-studyplan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Roles and Permissions:==&lt;br /&gt;
&lt;br /&gt;
* 	array name to $capabilities in access.php&lt;br /&gt;
* 	Remove references to admin in access.php&lt;br /&gt;
* 	Rename legacy to archetypes in access.php&lt;br /&gt;
* 	Add manager archetype in access.php&lt;br /&gt;
* 	Ensure require_login as well as require_capability checks&lt;br /&gt;
*       isguest() is depreicated, use !isloggedin() || isguestuser() instead&lt;br /&gt;
&lt;br /&gt;
==Language strings==&lt;br /&gt;
&lt;br /&gt;
* 	Rename language folder&lt;br /&gt;
* 	Change $a to {$a} in language files&lt;br /&gt;
* 	Change popup help files to _help lang strings and shorten&lt;br /&gt;
* 	Add $string[‘pluginname’] to lang file&lt;br /&gt;
* 	Add $string[‘pluginadministration’] to lang file&lt;br /&gt;
&lt;br /&gt;
==Forms==&lt;br /&gt;
&lt;br /&gt;
* 	Param_clean parameter type removed&lt;br /&gt;
* 	type required parameter for optional_and required_param&lt;br /&gt;
* 	Replace file form elements with new filepicker&lt;br /&gt;
* 	Replace htmleditor with editor form field type&lt;br /&gt;
*       Change setHelpButton to addHelpButton. (You need to change the arguments, but the new ones are simpler.)&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&lt;br /&gt;
* 	Swap config_ files to edit and settings php files&lt;br /&gt;
* 	Fix whitespace &amp;amp; coding style&lt;br /&gt;
* 	rs_fetch_next_record($rs) is deprecated, in favour of the simple foreach($rs as $var). Calls to rs_close() must be replaced by $rs-&amp;gt;close();&lt;br /&gt;
* 	Check functions deprecated list: https://docs.moodle.org/en/Development:Deprecated_functions_in_2.0&lt;br /&gt;
* 	Use print_error() or throw new moodle_exception not error()&lt;br /&gt;
* 	Replace all url strings e.g. in redirect() calls with moodle_url instances&lt;br /&gt;
* Move install/uninstall functions from lib to db/install.php, lib/uninstall.php&lt;br /&gt;
* Move images into pix folder (especially icon.gif), get path by calling $OUTPUT-&amp;gt;pix_url(&#039;icon&#039;, &#039;local_whatever&#039;);&lt;br /&gt;
* Update the code template at the top of each file (see [[Code template guidelines]] for details&lt;br /&gt;
* Add &#039;supports&#039; function in lib (modname_supports()) for modules (and blocks?).&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_to_2.0_checklist&amp;diff=18999</id>
		<title>Migrating to 2.0 checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_to_2.0_checklist&amp;diff=18999"/>
		<updated>2011-01-27T15:01:44Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: New page: h1. Plugin migration checklist  These are things that OU developers have found so far to check/do in code we&amp;#039;re migrating from Moodle 1.9 to 2.0.  All information on the detail of this che...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;h1. Plugin migration checklist&lt;br /&gt;
&lt;br /&gt;
These are things that OU developers have found so far to check/do in code we&#039;re migrating from Moodle 1.9 to 2.0.  All information on the detail of this checklist can be found elsewhere in Moodle Docs, and particularly from the [[]]&lt;br /&gt;
&lt;br /&gt;
Not all these things are essential for a rush job, but if you did all of them, then that&#039;d be great.  We should really mark each one with a priority of some sort!&lt;br /&gt;
&lt;br /&gt;
Please add/edit this list!&lt;br /&gt;
&lt;br /&gt;
h2.	Database&lt;br /&gt;
&lt;br /&gt;
* 	Leave empty db/update.php file&lt;br /&gt;
* 	New $DB global objects with functions replace old db functions&lt;br /&gt;
* 	$DB parameters swapped to ? &lt;br /&gt;
* 	Add and strip slashes no longer required&lt;br /&gt;
* 	Remove use of ENUM and ENUMVALUES in install.xml file&lt;br /&gt;
* 	check use of sql_substr() &lt;br /&gt;
* 	Get_records() etc now always returning arrays, empty array in case of no records found. &lt;br /&gt;
* 	Db functions throw errors not return false on error&lt;br /&gt;
* 	DB functions offer strictness parameters e.g MUST_EXIST&lt;br /&gt;
* 	Update version.php numbers (esp required)&lt;br /&gt;
&lt;br /&gt;
h2.	Page display&lt;br /&gt;
&lt;br /&gt;
* 	New $OUTPUT header and footer functions&lt;br /&gt;
* Navigation links need to use $PAGE-&amp;gt;navbar&lt;br /&gt;
* 	Make sure that you instantiate the moodle form before any call to $OUTPUT-&amp;gt;header()&lt;br /&gt;
* 	Create a renderer&lt;br /&gt;
*       Change the way image urls are displayed (not $CFG-&amp;gt;pixpath any more)&lt;br /&gt;
*       CSS changes&lt;br /&gt;
**      Change styles.php to styles.css&lt;br /&gt;
**      Change page id to new structure e.g. course-format-studyplan to page-course-view-studyplan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
h2.	Roles and Permissions:&lt;br /&gt;
&lt;br /&gt;
* 	array name to $capabilities in access.php&lt;br /&gt;
* 	Remove references to admin in access.php&lt;br /&gt;
* 	Rename legacy to archetypes in access.php&lt;br /&gt;
* 	Add manager archetype in access.php&lt;br /&gt;
* 	Ensure require_login as well as require_capability checks&lt;br /&gt;
*       isguest() is depreicated, use !isloggedin() || isguestuser() instead&lt;br /&gt;
&lt;br /&gt;
h2.	Language strings&lt;br /&gt;
&lt;br /&gt;
* 	Rename language folder&lt;br /&gt;
* 	Change $a to {$a} in language files&lt;br /&gt;
* 	Change popup help files to _help lang strings and shorten&lt;br /&gt;
* 	Add $string[‘pluginname’] to lang file&lt;br /&gt;
* 	Add $string[‘pluginadministration’] to lang file&lt;br /&gt;
&lt;br /&gt;
h2.	Forms&lt;br /&gt;
&lt;br /&gt;
* 	Param_clean parameter type removed&lt;br /&gt;
* 	type required parameter for optional_and required_param&lt;br /&gt;
* 	Replace file form elements with new filepicker&lt;br /&gt;
* 	Replace htmleditor with editor form field type&lt;br /&gt;
*       Change setHelpButton to addHelpButton. (You need to change the arguments, but the new ones are simpler.)&lt;br /&gt;
&lt;br /&gt;
h2.	General&lt;br /&gt;
&lt;br /&gt;
* 	Swap config_ files to edit and settings php files&lt;br /&gt;
* 	Fix whitespace &amp;amp; coding style&lt;br /&gt;
* 	rs_fetch_next_record($rs) is deprecated, in favour of the simple foreach($rs as $var). Calls to rs_close() must be replaced by $rs-&amp;gt;close();&lt;br /&gt;
* 	Check functions deprecated list: https://docs.moodle.org/en/Development:Deprecated_functions_in_2.0&lt;br /&gt;
* 	Use print_error() or throw new moodle_exception not error()&lt;br /&gt;
* 	Replace all url strings e.g. in redirect() calls with moodle_url instances&lt;br /&gt;
* Move install/uninstall functions from lib to db/install.php, lib/uninstall.php&lt;br /&gt;
* Move images into pix folder (especially icon.gif), get path by calling $OUTPUT-&amp;gt;pix_url(&#039;icon&#039;, &#039;local_whatever&#039;);&lt;br /&gt;
* Update the code template at the top of each file (see [[Code template guidelines]] for details&lt;br /&gt;
* Add &#039;supports&#039; function in lib (modname_supports()) for modules (and blocks?).&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17567</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17567"/>
		<updated>2011-01-27T15:00:01Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The &#039;requires&#039; version in the plugin&#039;s version.php is checked to make sure it looks like Moodle 2.0. You should change this value to &#039;2010112400&#039; or later otherwise plugin installation will abort.&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
* [[DB_layer_2.0_migration_docs]]&lt;br /&gt;
&lt;br /&gt;
== File system ==&lt;br /&gt;
&lt;br /&gt;
== Forms API ==&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
* [[Using_the_file_API]]&lt;br /&gt;
&lt;br /&gt;
== Themes ==&lt;br /&gt;
* [[Output_renderers]]&lt;br /&gt;
* [[Text formats 2.0|Text formats 2.0]] how user-entered content is handled.&lt;br /&gt;
* [[Migrating_your_code_to_the_2.0_rendering_API]] (n.b., some info outdated and may need updating)&lt;br /&gt;
* [[Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
Some details of how to re-design image CSS for plugin code are in the main themes documentation: [[Themes_2.0_creating_your_first_theme#Using_images_within_CSS]]&lt;br /&gt;
&lt;br /&gt;
Be aware that themes are now cached on the server and so emptying your browser cache will not refresh the CSS. This can only be done by going to the site administration-&amp;gt;appearance-&amp;gt;themes-&amp;gt;theme selector page and clicking the &#039;invalidate theme caches&#039; button.&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
JavaScript is included in different ways now and will need to be migrated, see the PHPDoc comments in /lib/outputrequirements.lib and some (slightly outdated) advice here: [[JavaScript_guidelines]]&lt;br /&gt;
&lt;br /&gt;
== Backup and Restore ==&lt;br /&gt;
&lt;br /&gt;
* [[Backup_2.0_for_developers]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
There are other coding changes such as:&lt;br /&gt;
* MDL-24063 which eliminates PARAM_CLEAN &lt;br /&gt;
* MDL-24058 about no longer using stripslashes or addslashes&lt;br /&gt;
* [[Deprecated_functions_in_2.0]]&lt;br /&gt;
&lt;br /&gt;
Please feel free to add others that come to mind. CONTRIB maintainers should check their 2.0 versions for these and make sure that they are appropriately handled. &lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Moodle_2.0_release_notes]]&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
* http://cvs.moodle.org/moodle/blocks/upgrade.txt?view=markup&lt;br /&gt;
* http://cvs.moodle.org/moodle/mod/upgrade.txt?view=markup&lt;br /&gt;
* [[User:Frank_Ralf/Experience_of_converting_a_module_to_Moodle_2|Experience of converting a module to Moodle 2]] by Sam Marshall (perhaps that documentation should better live here? --[[User:Frank Ralf|Frank Ralf]] 16:36, 15 November 2010 (UTC))&lt;br /&gt;
* [[Local_customisation]]&lt;br /&gt;
* [[Migrating to 2.0 checklist]] list of things to look out for when upgrading a plug-in&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17566</id>
		<title>Migrating contrib code to 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Migrating_contrib_code_to_2.0&amp;diff=17566"/>
		<updated>2011-01-21T11:53:58Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to provide a checklist of tasks to be considered to upgrade CONTRIB code to Moodle 2.0. Several significant changes have taken place including the File API, DB Layer, Navigation, Output renderer, etc. It would be good if we had a list that contributors could follow to help move them toward being able to migrate the code. Any help in building up this list is greatly appreciated. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please add useful links...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The &#039;requires&#039; version in the plugin&#039;s version.php is checked to make sure it looks like Moodle 2.0. You should change this value to &#039;2010112400&#039; or later otherwise plugin installation will abort.&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
* [[DB_layer_2.0_migration_docs]]&lt;br /&gt;
&lt;br /&gt;
== File system ==&lt;br /&gt;
&lt;br /&gt;
== Forms API ==&lt;br /&gt;
* [[Using the File API in Moodle forms]]&lt;br /&gt;
* [[Using_the_file_API]]&lt;br /&gt;
&lt;br /&gt;
== Themes ==&lt;br /&gt;
* [[Output_renderers]]&lt;br /&gt;
* [[Text formats 2.0|Text formats 2.0]] how user-entered content is handled.&lt;br /&gt;
* [[Migrating_your_code_to_the_2.0_rendering_API]] (n.b., some info outdated and may need updating)&lt;br /&gt;
* [[Themes_2.0]]&lt;br /&gt;
&lt;br /&gt;
Some details of how to re-design image CSS for plugin code are in the main themes documentation: [[Themes_2.0_creating_your_first_theme#Using_images_within_CSS]]&lt;br /&gt;
&lt;br /&gt;
Be aware that themes are now cached on the server and so emptying your browser cache will not refresh the CSS. This can only be done by going to the site administration-&amp;gt;appearance-&amp;gt;themes-&amp;gt;theme selector page and clicking the &#039;invalidate theme caches&#039; button.&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
JavaScript is included in different ways now and will need to be migrated, see the PHPDoc comments in /lib/outputrequirements.lib and some (slightly outdated) advice here: [[JavaScript_guidelines]]&lt;br /&gt;
&lt;br /&gt;
== Backup and Restore ==&lt;br /&gt;
&lt;br /&gt;
* [[Backup_2.0_for_developers]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
There are other coding changes such as:&lt;br /&gt;
* MDL-24063 which eliminates PARAM_CLEAN &lt;br /&gt;
* MDL-24058 about no longer using stripslashes or addslashes&lt;br /&gt;
* [[Deprecated_functions_in_2.0]]&lt;br /&gt;
&lt;br /&gt;
Please feel free to add others that come to mind. CONTRIB maintainers should check their 2.0 versions for these and make sure that they are appropriately handled. &lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Moodle_2.0_release_notes]]&lt;br /&gt;
* CONTRIB-1988&lt;br /&gt;
* http://cvs.moodle.org/moodle/blocks/upgrade.txt?view=markup&lt;br /&gt;
* http://cvs.moodle.org/moodle/mod/upgrade.txt?view=markup&lt;br /&gt;
* [[User:Frank_Ralf/Experience_of_converting_a_module_to_Moodle_2|Experience of converting a module to Moodle 2]] by Sam Marshall (perhaps that documentation should better live here? --[[User:Frank Ralf|Frank Ralf]] 16:36, 15 November 2010 (UTC))&lt;br /&gt;
* [[Local_customisation]]&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2473</id>
		<title>Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2473"/>
		<updated>2009-07-06T15:47:26Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Harvest courses */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT STATE: Proposal&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;MAIN TRACKER ISSUE&#039;&#039;&#039;: MDL-19309&lt;br /&gt;
* &#039;&#039;&#039;DISCUSSION AND COMMENTS&#039;&#039;&#039;: [http://moodle.org/mod/forum/view.php?id=7330 Hub servers] forum in Using Moodle&lt;br /&gt;
* &#039;&#039;&#039;MAIN AUTHORS&#039;&#039;&#039;: [[User:Martin_Dougiamas|Martin Dougiamas]] and [[User:jerome_mouneyrac|Jerome Mouneyrac]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page describes an overall functional specification for the &amp;quot;Moodle Community Hub&amp;quot; project, which consists of a new system (the Moodle Hub Server) and several new features in Moodle 2.0. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Goals and rationale =&lt;br /&gt;
&lt;br /&gt;
The main goals of the Community hub project are:&lt;br /&gt;
&lt;br /&gt;
# to allow people to easily find courses around the world that they want to enrol in:&lt;br /&gt;
#* educators want to find &#039;&#039;&#039;communities of practice&#039;&#039;&#039; that are subject or region-oriented, so that they can associate with their peers on a long-term basis.&lt;br /&gt;
#* other learners want to find and study courses on various other subjects&lt;br /&gt;
# to make it easy for educators to find and download &#039;&#039;&#039;course templates&#039;&#039;&#039; from other people.  This will help educators share and identify examples of &#039;&#039;&#039;best practice&#039;&#039;&#039; in online pedagogy and hopefully improve the average quality of online courses.&lt;br /&gt;
&lt;br /&gt;
Finally, we want to do all this in the simplest, safest way possible, while allowing a range of scenarios such as courses that are public or private, free or paid, so that the Moodle community can build solutions for themselves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the basic idea.  The systems in this diagram are:&lt;br /&gt;
&lt;br /&gt;
;Ordinary Moodle site: A typical Moodle site with teachers who want to download course templates and/or users who want to connect (enrol) with external communities &lt;br /&gt;
;Publishing site: A Moodle site that wants to make some of its courses available for download&lt;br /&gt;
;Community site: A Moodle site that provides courses that are enrollable&lt;br /&gt;
;Moodle Hub Server: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;.  The default hub will be installed at hub.moodle.org, but there can be many others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Community.png]]&lt;br /&gt;
&lt;br /&gt;
Downloadable courses&lt;br /&gt;
* (A) Sites that want to publish certain courses and make them downloadable can register them with one or more Hub Servers.&lt;br /&gt;
* (B) The Hub will check the data and make sure the course zip is downloadable, caching a copy locally.  The Hub may also have a security process to check the download for trojan horses, bad content, etc (automatic and/or manual).&lt;br /&gt;
* (C) The download process may trigger the backup process on the original server if it hasn&#039;t been done already.&lt;br /&gt;
* (D) Later, Moodle users (who have permissions to do so) can connect to a Hub (via the Repository file picker) to search for downloadable courses and choose one (receiving a download URL).&lt;br /&gt;
* (E) The repository API downloads the file and makes it available to the Moodle user so they can now continue to restore it normally.&lt;br /&gt;
&lt;br /&gt;
Enrollable courses&lt;br /&gt;
* (1) Sites that want to publish certain courses for the public to enrol in can register them with one or more CDS (including the main one at moodle.org)&lt;br /&gt;
* (2) Later, any Moodle user can connect to a CDS (via Community block in their site) to search and find courses they want to join&lt;br /&gt;
* (3) They click on a link to be sent to the other site so that they can enrol there (with or without Mnet).&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
== New teacher creating a course ==&lt;br /&gt;
&lt;br /&gt;
# New teacher needs some help with a new course for &amp;quot;Alligator farming 101&amp;quot;&lt;br /&gt;
# Teacher sees the &amp;quot;Import/Export&amp;quot; block into the &amp;quot;Alligator farming 101&amp;quot; course page and presses &amp;quot;Import course&amp;quot;&lt;br /&gt;
# Teacher browses a list of downloadable courses in the File picker (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches for &amp;quot;Alligator&amp;quot; &lt;br /&gt;
# Teacher finds 4 courses that look good, and after reading reviews and ratings, chooses one.&lt;br /&gt;
# The course is downloaded and unpacked in Moodle.&lt;br /&gt;
# The teacher now has a good starter course they can keep developing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New teacher needs help ==&lt;br /&gt;
&lt;br /&gt;
A teacher decides they need some help and wants to talk with others teaching Alligator farming.&lt;br /&gt;
&lt;br /&gt;
# Teacher goes to their &amp;quot;Community&amp;quot; block and clicks &amp;quot;Find community&amp;quot;.&lt;br /&gt;
# Moodle displays a page to search for courses (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches courses for &amp;quot;educator&amp;quot; courses on &amp;quot;Alligators&amp;quot; in their country/language.&lt;br /&gt;
# Teacher finds two, selects one, and is returned to the page where is was before clicking on &amp;quot;Find community&amp;quot;.  The selected course is now permanently listed in the Community block.&lt;br /&gt;
# Teacher clicks on the link and is taken to the course, where they can enrol and interact/learn with peers over time, subscribe to forums etc.&lt;br /&gt;
&lt;br /&gt;
== University consortium ==&lt;br /&gt;
&lt;br /&gt;
A group of five universites wants to share courses among themselves and not to the outside world.  They also want to prevent teachers from downloading courses from outside the consortium.&lt;br /&gt;
&lt;br /&gt;
# Someone downloads Moodle and installs it as a private Moodle Hub Server&lt;br /&gt;
# Admins of all five Moodle sites in the group add the URL of the private Hub to their settings and register their sites there&lt;br /&gt;
# The default Hub at hub.moodle.org is (optionally) disabled in the site-wide settings.&lt;br /&gt;
# Admins register their courses with the Hub.&lt;br /&gt;
# Teachers can now import, export or join courses via the private Hub.&lt;br /&gt;
&lt;br /&gt;
== Course creation business ==&lt;br /&gt;
&lt;br /&gt;
CoolCourses Inc have produced a set of 50 good Moodle courses which they wish to sell.&lt;br /&gt;
&lt;br /&gt;
# They set up a Moodle site with all their courses in them.&lt;br /&gt;
# They set up a Hub with a payment system, and register it with the Hub List at moodle.org so people can find it&lt;br /&gt;
# They register all their courses with their own Hub with appropriate metadata&lt;br /&gt;
# When looking for courses, users can either &lt;br /&gt;
#* find this Hub by browsing through the Hub List, or &lt;br /&gt;
#* type the URL of the Hub directly into their Moodle site&lt;br /&gt;
# When users try to download a course, they may see a payment button to download it (credit card, paypal etc)&lt;br /&gt;
# CoolCourses could provide limited access to the courses on their Moodle site using Roles, as a preview.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
There are several components:&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hub List&#039;&#039;&#039;: A list of known Hub Servers, kept on moodle.org &lt;br /&gt;
;&#039;&#039;&#039;Hub Server&#039;&#039;&#039;: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;&lt;br /&gt;
;&#039;&#039;&#039;Course registration&#039;&#039;&#039;: A new mechanism in every Moodle to register particular courses with one or more Hub Servers&lt;br /&gt;
;&#039;&#039;&#039;Community membership block&#039;&#039;&#039;: to search Hub Servers to find enrollable courses to join and bookmark&lt;br /&gt;
;&#039;&#039;&#039;Import/Export block&#039;&#039;&#039;: Makes it easy to find downloadable course templates in a Hub Server, then download them from the Hub Server and restore them locally&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub List==&lt;br /&gt;
&lt;br /&gt;
The Hub List is a list of known Hub Servers (see the next section).  This makes it easy for Moodle users to find the most appropriate Hub Servers for their needs.  To get on the Hub List, Hub Servers choose to register with moodle.org via their administration interface.&lt;br /&gt;
&lt;br /&gt;
Moodle.org will store the following information, and make it available via a browseable interface at [http://moodle.org/hubs http://moodle.org/hubs] as well as a simple XML format from [http://moodle.org/hubs/list.xml http://moodle.org/hubs/list.xml] suitable for consumption by Moodle sites.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|int&lt;br /&gt;
|Standard autoincrement&lt;br /&gt;
|-&lt;br /&gt;
|hubname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the Hub&lt;br /&gt;
|-&lt;br /&gt;
|hubdescription&lt;br /&gt;
|text&lt;br /&gt;
|Description of the hub, from the admin there&lt;br /&gt;
|-&lt;br /&gt;
|huburl&lt;br /&gt;
|varchar&lt;br /&gt;
|The full URL to the hub front page&lt;br /&gt;
|-&lt;br /&gt;
|hubsecret&lt;br /&gt;
|varchar&lt;br /&gt;
|The secret code from the hub (extra authentication)&lt;br /&gt;
|-&lt;br /&gt;
|trusted&lt;br /&gt;
|int&lt;br /&gt;
|Is the hub trusted?  Does it have good quality control?&lt;br /&gt;
|-&lt;br /&gt;
|language&lt;br /&gt;
|varchar&lt;br /&gt;
|What is the primary language of this hub?  (blank for multilanguage)&lt;br /&gt;
|-&lt;br /&gt;
|sites&lt;br /&gt;
|int&lt;br /&gt;
|Number of sites  registered on this hub&lt;br /&gt;
|-&lt;br /&gt;
|courses&lt;br /&gt;
|int&lt;br /&gt;
|Number of courses registered on this hub &lt;br /&gt;
|-&lt;br /&gt;
|timefirst&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was first registered&lt;br /&gt;
|-&lt;br /&gt;
|timelast&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was last registered/updated&lt;br /&gt;
|-&lt;br /&gt;
|contactname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|contactemail&lt;br /&gt;
|varchar&lt;br /&gt;
|Email of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|varchar&lt;br /&gt;
|hub logo url&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:Registerhub.png]]&lt;br /&gt;
&lt;br /&gt;
following a hub list table on Moodle.org:&lt;br /&gt;
[[Image:Hublist.png]]&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub Server==&lt;br /&gt;
&lt;br /&gt;
The Moodle Hub Server (aka Hub) is a separate system (based on Moodle technology) that allows Moodle sites to register their courses for listing there.&lt;br /&gt;
&lt;br /&gt;
A default installation of this software will be running at &#039;&#039;&#039;hub.moodle.org&#039;&#039;&#039;, but anyone else can download it and set up their own hub for private or public uses.   A default installation of Moodle can also be a Hub, or if the admin chooses, a site can be a dedicated Hub if they choose that option during install (in this case the front page of the site will be a dedicated site search for the public).&lt;br /&gt;
&lt;br /&gt;
Hubs can optionally register themselves in the Hub List so that they are easier to find and so they can become a &amp;quot;Trusted Hub&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A hub server has some config fields (saved into its database):&lt;br /&gt;
* name&lt;br /&gt;
* description&lt;br /&gt;
* language&lt;br /&gt;
* contact name&lt;br /&gt;
* contact email&lt;br /&gt;
* enable&lt;br /&gt;
* hub secret (generated the first time the hub is registered on Moodle.org, it will never change)&lt;br /&gt;
* logo url &lt;br /&gt;
* protected web search interface &#039;&#039;&#039;(TODO: the protection method needs to be defined)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data structure ===&lt;br /&gt;
&lt;br /&gt;
==== Sites ====&lt;br /&gt;
&lt;br /&gt;
Primarily this table will store information about the sites that have registered course information on that Hub.  On hub.moodle.org this information will also be used for [http://moodle.org/stats general statistics] and the listing of [http://moodle.org/sites registered sites].&lt;br /&gt;
&lt;br /&gt;
* Id&lt;br /&gt;
* Site name &lt;br /&gt;
* Site description&lt;br /&gt;
* URL&lt;br /&gt;
* Address&lt;br /&gt;
*# Country code (AU, FR etc) [http://cvs.moodle.org/moodle/lang/en_utf8/countries.php?view=markup lang/XX_utf8/countries.php]&lt;br /&gt;
*# Region/state (based on list) [http://www.commondatahub.com/live/geography/state_province_region/iso_3166_2_state_codes ISO 3166-2 (XX-XXX)]&lt;br /&gt;
*# Street address &lt;br /&gt;
*# Geolocation (for mapping)&lt;br /&gt;
* Site manager&lt;br /&gt;
*# Name&lt;br /&gt;
*# Email&lt;br /&gt;
*# Phone&lt;br /&gt;
* Contact form yes/no?&lt;br /&gt;
* Default site language&lt;br /&gt;
* Moodle version (eg 2009050502)&lt;br /&gt;
* Moodle release (eg 1.9.5+)&lt;br /&gt;
* Site ip address (updated at every update)&lt;br /&gt;
* Unique SiteID code generated by Moodle site&lt;br /&gt;
* Confirmed by admin&lt;br /&gt;
* Site is &amp;quot;trusted&amp;quot; - this means we don&#039;t manually check data in future from this site.&lt;br /&gt;
* Mnet/WS information, enough to let a teacher authenticate to the site using Mnet 2.0 (optional)&lt;br /&gt;
* Harvesting url&lt;br /&gt;
* Time updated&lt;br /&gt;
* Time created&lt;br /&gt;
* Currently unreachable&lt;br /&gt;
* Time link was last checked&lt;br /&gt;
&lt;br /&gt;
Extra information that will only be kept on hub.moodle.org (only published in aggregate form):&lt;br /&gt;
&lt;br /&gt;
* Tool usage stats &lt;br /&gt;
** number of courses&lt;br /&gt;
** number of users&lt;br /&gt;
** number of enrolments&lt;br /&gt;
** number of posts&lt;br /&gt;
** number of resources&lt;br /&gt;
** number of questions&lt;br /&gt;
** median course size&lt;br /&gt;
* Subscribed to securityalerts@lists.moodle.org&lt;br /&gt;
&lt;br /&gt;
==== Courses ====&lt;br /&gt;
&lt;br /&gt;
This table stores registered courses, one record per course.  Some courses will be &amp;quot;downloadable&amp;quot;, some will be enrollable, so different fields can be used.&lt;br /&gt;
&lt;br /&gt;
* Course ID&lt;br /&gt;
* Site ID (foreign key to sites table)&lt;br /&gt;
* Dublin Core Metadata Element Set, Version 1.1&lt;br /&gt;
*# Contributor - course manager names or whoever the publisher nominates&lt;br /&gt;
*# Coverage - User tags&lt;br /&gt;
*# Creator - main teacher name or copyright holder or whoever the publisher nominates&lt;br /&gt;
*# Date - date this was last published/updated&lt;br /&gt;
*# Description - course description&lt;br /&gt;
*# Format - zip / url&lt;br /&gt;
*# Identifier - course shortname (unique on the original site)&lt;br /&gt;
*# Language - based on lang.php&lt;br /&gt;
*# Publisher - the name of the person who caused this record to be entered here&lt;br /&gt;
*# Relation - the site id that it came from&lt;br /&gt;
*# Rights - one of a standard set of open source, creative commons and other licenses&lt;br /&gt;
*# Source - original URL of the course&lt;br /&gt;
*# Subject - The best-matching item from ([https://docs.moodle.org/en/Course_Standard_Tags  Course Standard Tags ])&lt;br /&gt;
*# Title - Course fullname&lt;br /&gt;
*# Type - &amp;quot;course&amp;quot; (later there might other types such as activities or SCORM packages etc)&lt;br /&gt;
* Audience:  Educators | Students | Admins&lt;br /&gt;
* Educational level being discussed (for educators audience only):  Tertiary | Secondary | Primary | Government | Corporate&lt;br /&gt;
* Is a course map supplied?   (Simple XML description of course structure, could be rendered graphically later [http://kn.open.ac.uk/public/workspace.cfm?wpid=8690 CompendiumLD] )&lt;br /&gt;
&lt;br /&gt;
* Availability (public/private)&lt;br /&gt;
* Download URL (usually a local cached zip but could be anything else, including empty for non-downloadable)&lt;br /&gt;
* Original Download URL (usually a download script on the original Moodle site, used by Hub to get cache)&lt;br /&gt;
* Is the course trusted?  (all downloadable courses from non-trusted sites start as &amp;quot;no&amp;quot;, then this gets changed by someone who checks it)&lt;br /&gt;
* Is the course enrollable anyone with an account?&lt;br /&gt;
* Is guest access allowed?&lt;br /&gt;
* Are screenshots supplied?   (stored on disk under id of this record)&lt;br /&gt;
* Enrol Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
* Download Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
&lt;br /&gt;
==== Course feedback ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id&lt;br /&gt;
* type (bug / comment)&lt;br /&gt;
* text &lt;br /&gt;
* rating&lt;br /&gt;
&lt;br /&gt;
==== Course content ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id &lt;br /&gt;
* module type (activity / block)&lt;br /&gt;
* module name (forum, resource etc)&lt;br /&gt;
* count&lt;br /&gt;
&lt;br /&gt;
==== Course outcomes ====&lt;br /&gt;
&lt;br /&gt;
* id&lt;br /&gt;
* course id &lt;br /&gt;
* outcome  (text)&lt;br /&gt;
&lt;br /&gt;
=== Web user interface ===&lt;br /&gt;
&lt;br /&gt;
If visiting the hub via the web, it will provide an interface for full searching and browsing.  &lt;br /&gt;
&lt;br /&gt;
The web interface can be protected from access.  The hub at moodle.org will of course be open to all.&lt;br /&gt;
&lt;br /&gt;
Here is a very rough mockup of how it could look:&lt;br /&gt;
&lt;br /&gt;
[[Image:Webinterface.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Search_hub_moodle.png]]&lt;br /&gt;
&lt;br /&gt;
The web interface allows users to:&lt;br /&gt;
&lt;br /&gt;
* search by keyword (descriptions, titles, tags, subject etc)&lt;br /&gt;
* browse a list of courses by subject&lt;br /&gt;
* go directly to a course (if marked for public use)&lt;br /&gt;
* preview a course (if screenshots have been provided, or the original URL location)&lt;br /&gt;
* download the course to desktop (only if an download url has been set)&lt;br /&gt;
* If logged in to the Hub, users can also:&lt;br /&gt;
** give a rating to the course&lt;br /&gt;
** write a comment for the course - &amp;lt;span style=color:blue&amp;gt;use comment 2.0 API&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When displaying courses, you can see and sort by:&lt;br /&gt;
&lt;br /&gt;
* Title - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Description&lt;br /&gt;
* Tags  - &#039;&#039;Sortable &amp;lt;span style=color:blue&amp;gt;(first tag retrieved by the request is considered)&amp;lt;/span&amp;gt;&#039;&#039;&lt;br /&gt;
* Screenshot(s)&lt;br /&gt;
* Cost (if any) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Rating (10-point scale displayed as 5 stars, and only if you are logged in to moodle.org) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Comments &lt;br /&gt;
* Moodle site name&lt;br /&gt;
* Date added to directory&lt;br /&gt;
* Date last updated in directory &lt;br /&gt;
* Date last checked (by a cron job)&lt;br /&gt;
* Audience (teachers, students, admins)&lt;br /&gt;
* Teacher name(s) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Web service user interface ===&lt;br /&gt;
&lt;br /&gt;
A REST-based web services interface will be provided for other systems (eg Moodle sites) to use directly.&lt;br /&gt;
&lt;br /&gt;
Web services can search on:&lt;br /&gt;
* string search&lt;br /&gt;
* array language&lt;br /&gt;
* array cost&lt;br /&gt;
* array Moodle url&lt;br /&gt;
* Others?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hub admin interface ===&lt;br /&gt;
&lt;br /&gt;
The hub will have a Hub admin interface (at http://hubsite.org/hub) where the hub is managed.  Admin processes include:&lt;br /&gt;
&lt;br /&gt;
* Listing, approving and editing the sites registered with the hub &lt;br /&gt;
* Listing, approving and editing the course descriptions, metadata etc.&lt;br /&gt;
* Registering/updating the Hub with the Hub List&lt;br /&gt;
* Configuring Hub behaviour and the appearance of the home page.&lt;br /&gt;
&lt;br /&gt;
== Site registration ==&lt;br /&gt;
&lt;br /&gt;
The existing site registration form in Moodle will be extended so that admins can:&lt;br /&gt;
&lt;br /&gt;
# choose one or more Hubs to register with (hub.moodle.org and/or others in the Hub List, or directly to a particular Hub specified by URL)&lt;br /&gt;
# choose to enable cron to re-send statistics to the hub on a periodic basis.&lt;br /&gt;
# choose to enable the hub to harvest courses on a periodic basis (TODO: not shown on image)&lt;br /&gt;
&lt;br /&gt;
Each Moodle.org Hub will perform a check every week to verify that each site is accessible and optionally to harvest the courses from that site.  Sites that fail two or three checks in a row will be disable in the Hub listing.&lt;br /&gt;
&lt;br /&gt;
[[Image:SiteRegistration.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Community membership ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Community&amp;quot; block allows people to find and subscribe to external courses that they want to be part of.&lt;br /&gt;
&lt;br /&gt;
Visibility of the block and the features within it are controlled by roles, and contains:&lt;br /&gt;
&lt;br /&gt;
# &#039;Bookmarks&#039; of previously-selected (subscribed) external courses (to make revisiting easy) grouped by site, which can be edited/deleted etc&lt;br /&gt;
# A link to a search script - &amp;quot;Add new courses...&amp;quot;&lt;br /&gt;
# A search script to browse/search one or more Hubs (via web services to get the data, with the interface rendered by the local script).  Users can select joinable courses from the list and they&#039;ll get added to the list in the block.&lt;br /&gt;
&lt;br /&gt;
Generally the links will be just be an ordinary URL and the remote site will be responsible for authentication.&lt;br /&gt;
&lt;br /&gt;
If the foreign site has an Mnet connection set up with the current site then login will be immediate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Addacourse.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Import/Export courses ==&lt;br /&gt;
&lt;br /&gt;
The Import/Export block will be available on course pages and contains buttons to:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Publish course&#039;&#039;&#039;: to publish or update the description of the current course in one or more Hubs (admins only)&lt;br /&gt;
* &#039;&#039;&#039;Export course&#039;&#039;&#039;: publish/upload entire course (as Moodle Backup minus userdata) somewhere (eg a Hub) (via Portfolio API plugins)&lt;br /&gt;
* &#039;&#039;&#039;Import course&#039;&#039;&#039;: find/download/install a course template from a Hub or from another course on same site  (Repository API plugins)&lt;br /&gt;
&lt;br /&gt;
=== Publish course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Publish&#039;&#039;&#039; button only exists if the current user has the appropriate capabilities and if the current Moodle site has been registered with a Hub.&lt;br /&gt;
&lt;br /&gt;
[[Image:Coursepublishing.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Choosing &amp;quot;Publish&amp;quot; goes to a script where you can chose from the registered Hubs and whether you want to publish the course as:&lt;br /&gt;
* enrollable, so that others can come here and use the course where it is, and/or &lt;br /&gt;
* downloadable, so that a Hub can offer this course for download to others&lt;br /&gt;
&lt;br /&gt;
If the user wants to offer this course for download, then they are directed to the standard backup process to create and define the backup file (without users!).  If the backup is successful the zip is stored in a standard place and then the user is returned to the publish script to continue.  (If downloads are not required then this whole step is skipped).&lt;br /&gt;
&lt;br /&gt;
It allows the user to set up full , and especially whether you want to advertise this course as being:&lt;br /&gt;
&lt;br /&gt;
Now the script presents a form with metadata that this course will be published with on the chosen Hub(s) (this is also available in the course settings page).  Metadata includes information such as description, licensing, categories, screenshots etc (see the [[#Courses|Courses]] section above for more info).&lt;br /&gt;
&lt;br /&gt;
After checking/updating the metadata, the script will push the data to the selected Hub.  The Hub will bounce back a confirmation which gets saved locally as the &amp;quot;Last publish date&amp;quot; for that course.&lt;br /&gt;
&lt;br /&gt;
If the checkbox to allow download was selected, then the URL to a course download script in the current Moodle is included with the metadata.  This URL contains a token (eg an MD5 stored in the course table) that only the Hub knows.&lt;br /&gt;
&lt;br /&gt;
The course download script (eg /course/download.php?id=55&amp;amp;secret=XXXXX) will send the cached .zip file for the given course.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Publish course settings ====&lt;br /&gt;
&lt;br /&gt;
Some publish settings and info will also be available anytime via the course settings page under a &amp;quot;Publish&amp;quot; tab:&lt;br /&gt;
&lt;br /&gt;
* Which hubs has this course been published on, and when&lt;br /&gt;
* Full metadata&lt;br /&gt;
* Screenshots&lt;br /&gt;
&lt;br /&gt;
=== Export course ===&lt;br /&gt;
&lt;br /&gt;
A standard export will do a normal backup (taking care to remove userdata by default), and at the end will call the portfolio API to push that file to a connected portfolio.  Portfolio (export) plugins could include:&lt;br /&gt;
&lt;br /&gt;
* downloading it to the local computer&lt;br /&gt;
* uploading it as a zip to any general purpose repository&lt;br /&gt;
* copy the course to another Moodle site set up with Mnet peering.&lt;br /&gt;
&lt;br /&gt;
Pushing it to another Moodle site would trigger extra behaviours:&lt;br /&gt;
&lt;br /&gt;
* Permissions would be checked on the destination Moodle&lt;br /&gt;
* The course can be immediately restored on the external Moodle in a special &amp;quot;New&amp;quot; category as a hidden course&lt;br /&gt;
* Someone on the external Moodle can be alerted to approve/unhide the new course&lt;br /&gt;
&lt;br /&gt;
=== Import course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Import course&#039;&#039;&#039; button will pull up a normal file picker to browse repositories for files with a mimetype matching .mbkup.zip.&lt;br /&gt;
&lt;br /&gt;
One special repository plugin called &amp;quot;Courses&amp;quot; allows the user to:&lt;br /&gt;
&lt;br /&gt;
* find Hubs by downloading the Hub List&lt;br /&gt;
* search particular Hubs for downloadable courses (only)&lt;br /&gt;
* search other courses on the same server (replacing the existing import function we have)&lt;br /&gt;
&lt;br /&gt;
Once the user has selected one of these courses and passed any challenge there might be (eg the Hub could potentially require a password or payment or a license agreement form), then the zip file is downloaded to the local Moodle, and then the user is passed to the standard restore process.&lt;br /&gt;
&lt;br /&gt;
[[Image:FilePicker_all_JS.png|900px]]&lt;br /&gt;
[[Image:FilePicker_JS_course_selector.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Harvest courses ==&lt;br /&gt;
&lt;br /&gt;
Each hub will use cron to call every site that has registered a harvesting url on a periodic basis.  This will be done at the same time as the link is checked to ensure the site is reachable, so the &amp;quot;time link was last checked&amp;quot; field in the site table also indicates when the site was last harvested.&lt;br /&gt;
&lt;br /&gt;
The harvesting url will be an RSS feed which will list all the courses to be included in the hub and their metadata.  This might be the feed of all visible courses on the site, or courses in a given category.  TODO: should we allow them to enter multiple category feeds so they can say &amp;quot;arts&amp;quot;, &amp;quot;business&amp;quot; and &amp;quot;languages&amp;quot; but not &amp;quot;science&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
Course list RSS feeds are an existing tracker item for Moodle 2.0  See http://tracker.moodle.org/browse/MDL-13248  This patch allows admins to pick which categories have individual feeds created and are included in the &amp;quot;all courses&amp;quot; feed.  Each course becomes an &amp;lt;item&amp;gt; in the RSS feed as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;category&amp;gt; the Moodle course category in which the course belongs&lt;br /&gt;
* &amp;lt;title&amp;gt; the course fullname&lt;br /&gt;
* &amp;lt;link&amp;gt; the course url&lt;br /&gt;
* &amp;lt;pubdate&amp;gt; the date the course (or any of its resources and activities) last updated&lt;br /&gt;
* &amp;lt;description&amp;gt; the course summary&lt;br /&gt;
&lt;br /&gt;
The current tracker item will need to be extended to include appropriate course metadata in the RSS feed.  There is a [http://purl.org/dc/elements/1.1/ Dublin Core extension to RSS 2.0] which can be implemented.  &lt;br /&gt;
&lt;br /&gt;
TODO: If we choose an alternative metadata format we will need to locate or create an alternative RSS extension.  There is a [http://www.downes.ca/xml/RSS_LOM.htm LOM extension] but not from an official IEEE namespace.  &lt;br /&gt;
&lt;br /&gt;
We will need to declare our own namespace RSS extension to identify whether a course should be listed in the hub as downloadable and/or enrollable.  This extension will add tags to the RSS feed as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;moodlehub:downloadable&amp;gt; &lt;br /&gt;
* &amp;lt;moodlehub:enrollable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both tags will take either &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot; values and will be set by course creators at the same time as they enter course metadata.&lt;br /&gt;
&lt;br /&gt;
The hub will check the published date for each item in the RSS feed to identify whether it needs to update its records.  TODO: if we use OAI-PMH for harvesting we can request courses updated since x see http://moodle.org/mod/forum/discuss.php?d=127488 &lt;br /&gt;
&lt;br /&gt;
If the course has been updated and is &amp;lt;moodlehub:downloadable&amp;gt; is yes, then the hub will request the site to create a new backup of the entire course (less user data).&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
Full schedule and progress is in the tracker: MDL-19309&lt;br /&gt;
&lt;br /&gt;
# Moodle.org Hub List&lt;br /&gt;
# Hub registration form&lt;br /&gt;
# Hub Web interface&lt;br /&gt;
# Hub web service interface &lt;br /&gt;
# Improve Site registration form&lt;br /&gt;
# Community block&lt;br /&gt;
# Publish courses&lt;br /&gt;
# Import courses &lt;br /&gt;
# Export courses&lt;br /&gt;
# Harvest courses&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Community hub technotes]] - relating to MNet developments in Moodle 1.8&lt;br /&gt;
* MDL-18580 - Community Hub tracker issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MNET]]&lt;br /&gt;
&lt;br /&gt;
[[ja:開発:コミュニティハブ]]&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2472</id>
		<title>Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2472"/>
		<updated>2009-07-06T15:46:50Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Import course */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT STATE: Proposal&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;MAIN TRACKER ISSUE&#039;&#039;&#039;: MDL-19309&lt;br /&gt;
* &#039;&#039;&#039;DISCUSSION AND COMMENTS&#039;&#039;&#039;: [http://moodle.org/mod/forum/view.php?id=7330 Hub servers] forum in Using Moodle&lt;br /&gt;
* &#039;&#039;&#039;MAIN AUTHORS&#039;&#039;&#039;: [[User:Martin_Dougiamas|Martin Dougiamas]] and [[User:jerome_mouneyrac|Jerome Mouneyrac]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page describes an overall functional specification for the &amp;quot;Moodle Community Hub&amp;quot; project, which consists of a new system (the Moodle Hub Server) and several new features in Moodle 2.0. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Goals and rationale =&lt;br /&gt;
&lt;br /&gt;
The main goals of the Community hub project are:&lt;br /&gt;
&lt;br /&gt;
# to allow people to easily find courses around the world that they want to enrol in:&lt;br /&gt;
#* educators want to find &#039;&#039;&#039;communities of practice&#039;&#039;&#039; that are subject or region-oriented, so that they can associate with their peers on a long-term basis.&lt;br /&gt;
#* other learners want to find and study courses on various other subjects&lt;br /&gt;
# to make it easy for educators to find and download &#039;&#039;&#039;course templates&#039;&#039;&#039; from other people.  This will help educators share and identify examples of &#039;&#039;&#039;best practice&#039;&#039;&#039; in online pedagogy and hopefully improve the average quality of online courses.&lt;br /&gt;
&lt;br /&gt;
Finally, we want to do all this in the simplest, safest way possible, while allowing a range of scenarios such as courses that are public or private, free or paid, so that the Moodle community can build solutions for themselves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the basic idea.  The systems in this diagram are:&lt;br /&gt;
&lt;br /&gt;
;Ordinary Moodle site: A typical Moodle site with teachers who want to download course templates and/or users who want to connect (enrol) with external communities &lt;br /&gt;
;Publishing site: A Moodle site that wants to make some of its courses available for download&lt;br /&gt;
;Community site: A Moodle site that provides courses that are enrollable&lt;br /&gt;
;Moodle Hub Server: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;.  The default hub will be installed at hub.moodle.org, but there can be many others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Community.png]]&lt;br /&gt;
&lt;br /&gt;
Downloadable courses&lt;br /&gt;
* (A) Sites that want to publish certain courses and make them downloadable can register them with one or more Hub Servers.&lt;br /&gt;
* (B) The Hub will check the data and make sure the course zip is downloadable, caching a copy locally.  The Hub may also have a security process to check the download for trojan horses, bad content, etc (automatic and/or manual).&lt;br /&gt;
* (C) The download process may trigger the backup process on the original server if it hasn&#039;t been done already.&lt;br /&gt;
* (D) Later, Moodle users (who have permissions to do so) can connect to a Hub (via the Repository file picker) to search for downloadable courses and choose one (receiving a download URL).&lt;br /&gt;
* (E) The repository API downloads the file and makes it available to the Moodle user so they can now continue to restore it normally.&lt;br /&gt;
&lt;br /&gt;
Enrollable courses&lt;br /&gt;
* (1) Sites that want to publish certain courses for the public to enrol in can register them with one or more CDS (including the main one at moodle.org)&lt;br /&gt;
* (2) Later, any Moodle user can connect to a CDS (via Community block in their site) to search and find courses they want to join&lt;br /&gt;
* (3) They click on a link to be sent to the other site so that they can enrol there (with or without Mnet).&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
== New teacher creating a course ==&lt;br /&gt;
&lt;br /&gt;
# New teacher needs some help with a new course for &amp;quot;Alligator farming 101&amp;quot;&lt;br /&gt;
# Teacher sees the &amp;quot;Import/Export&amp;quot; block into the &amp;quot;Alligator farming 101&amp;quot; course page and presses &amp;quot;Import course&amp;quot;&lt;br /&gt;
# Teacher browses a list of downloadable courses in the File picker (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches for &amp;quot;Alligator&amp;quot; &lt;br /&gt;
# Teacher finds 4 courses that look good, and after reading reviews and ratings, chooses one.&lt;br /&gt;
# The course is downloaded and unpacked in Moodle.&lt;br /&gt;
# The teacher now has a good starter course they can keep developing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New teacher needs help ==&lt;br /&gt;
&lt;br /&gt;
A teacher decides they need some help and wants to talk with others teaching Alligator farming.&lt;br /&gt;
&lt;br /&gt;
# Teacher goes to their &amp;quot;Community&amp;quot; block and clicks &amp;quot;Find community&amp;quot;.&lt;br /&gt;
# Moodle displays a page to search for courses (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches courses for &amp;quot;educator&amp;quot; courses on &amp;quot;Alligators&amp;quot; in their country/language.&lt;br /&gt;
# Teacher finds two, selects one, and is returned to the page where is was before clicking on &amp;quot;Find community&amp;quot;.  The selected course is now permanently listed in the Community block.&lt;br /&gt;
# Teacher clicks on the link and is taken to the course, where they can enrol and interact/learn with peers over time, subscribe to forums etc.&lt;br /&gt;
&lt;br /&gt;
== University consortium ==&lt;br /&gt;
&lt;br /&gt;
A group of five universites wants to share courses among themselves and not to the outside world.  They also want to prevent teachers from downloading courses from outside the consortium.&lt;br /&gt;
&lt;br /&gt;
# Someone downloads Moodle and installs it as a private Moodle Hub Server&lt;br /&gt;
# Admins of all five Moodle sites in the group add the URL of the private Hub to their settings and register their sites there&lt;br /&gt;
# The default Hub at hub.moodle.org is (optionally) disabled in the site-wide settings.&lt;br /&gt;
# Admins register their courses with the Hub.&lt;br /&gt;
# Teachers can now import, export or join courses via the private Hub.&lt;br /&gt;
&lt;br /&gt;
== Course creation business ==&lt;br /&gt;
&lt;br /&gt;
CoolCourses Inc have produced a set of 50 good Moodle courses which they wish to sell.&lt;br /&gt;
&lt;br /&gt;
# They set up a Moodle site with all their courses in them.&lt;br /&gt;
# They set up a Hub with a payment system, and register it with the Hub List at moodle.org so people can find it&lt;br /&gt;
# They register all their courses with their own Hub with appropriate metadata&lt;br /&gt;
# When looking for courses, users can either &lt;br /&gt;
#* find this Hub by browsing through the Hub List, or &lt;br /&gt;
#* type the URL of the Hub directly into their Moodle site&lt;br /&gt;
# When users try to download a course, they may see a payment button to download it (credit card, paypal etc)&lt;br /&gt;
# CoolCourses could provide limited access to the courses on their Moodle site using Roles, as a preview.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
There are several components:&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hub List&#039;&#039;&#039;: A list of known Hub Servers, kept on moodle.org &lt;br /&gt;
;&#039;&#039;&#039;Hub Server&#039;&#039;&#039;: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;&lt;br /&gt;
;&#039;&#039;&#039;Course registration&#039;&#039;&#039;: A new mechanism in every Moodle to register particular courses with one or more Hub Servers&lt;br /&gt;
;&#039;&#039;&#039;Community membership block&#039;&#039;&#039;: to search Hub Servers to find enrollable courses to join and bookmark&lt;br /&gt;
;&#039;&#039;&#039;Import/Export block&#039;&#039;&#039;: Makes it easy to find downloadable course templates in a Hub Server, then download them from the Hub Server and restore them locally&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub List==&lt;br /&gt;
&lt;br /&gt;
The Hub List is a list of known Hub Servers (see the next section).  This makes it easy for Moodle users to find the most appropriate Hub Servers for their needs.  To get on the Hub List, Hub Servers choose to register with moodle.org via their administration interface.&lt;br /&gt;
&lt;br /&gt;
Moodle.org will store the following information, and make it available via a browseable interface at [http://moodle.org/hubs http://moodle.org/hubs] as well as a simple XML format from [http://moodle.org/hubs/list.xml http://moodle.org/hubs/list.xml] suitable for consumption by Moodle sites.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|int&lt;br /&gt;
|Standard autoincrement&lt;br /&gt;
|-&lt;br /&gt;
|hubname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the Hub&lt;br /&gt;
|-&lt;br /&gt;
|hubdescription&lt;br /&gt;
|text&lt;br /&gt;
|Description of the hub, from the admin there&lt;br /&gt;
|-&lt;br /&gt;
|huburl&lt;br /&gt;
|varchar&lt;br /&gt;
|The full URL to the hub front page&lt;br /&gt;
|-&lt;br /&gt;
|hubsecret&lt;br /&gt;
|varchar&lt;br /&gt;
|The secret code from the hub (extra authentication)&lt;br /&gt;
|-&lt;br /&gt;
|trusted&lt;br /&gt;
|int&lt;br /&gt;
|Is the hub trusted?  Does it have good quality control?&lt;br /&gt;
|-&lt;br /&gt;
|language&lt;br /&gt;
|varchar&lt;br /&gt;
|What is the primary language of this hub?  (blank for multilanguage)&lt;br /&gt;
|-&lt;br /&gt;
|sites&lt;br /&gt;
|int&lt;br /&gt;
|Number of sites  registered on this hub&lt;br /&gt;
|-&lt;br /&gt;
|courses&lt;br /&gt;
|int&lt;br /&gt;
|Number of courses registered on this hub &lt;br /&gt;
|-&lt;br /&gt;
|timefirst&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was first registered&lt;br /&gt;
|-&lt;br /&gt;
|timelast&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was last registered/updated&lt;br /&gt;
|-&lt;br /&gt;
|contactname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|contactemail&lt;br /&gt;
|varchar&lt;br /&gt;
|Email of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|varchar&lt;br /&gt;
|hub logo url&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:Registerhub.png]]&lt;br /&gt;
&lt;br /&gt;
following a hub list table on Moodle.org:&lt;br /&gt;
[[Image:Hublist.png]]&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub Server==&lt;br /&gt;
&lt;br /&gt;
The Moodle Hub Server (aka Hub) is a separate system (based on Moodle technology) that allows Moodle sites to register their courses for listing there.&lt;br /&gt;
&lt;br /&gt;
A default installation of this software will be running at &#039;&#039;&#039;hub.moodle.org&#039;&#039;&#039;, but anyone else can download it and set up their own hub for private or public uses.   A default installation of Moodle can also be a Hub, or if the admin chooses, a site can be a dedicated Hub if they choose that option during install (in this case the front page of the site will be a dedicated site search for the public).&lt;br /&gt;
&lt;br /&gt;
Hubs can optionally register themselves in the Hub List so that they are easier to find and so they can become a &amp;quot;Trusted Hub&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A hub server has some config fields (saved into its database):&lt;br /&gt;
* name&lt;br /&gt;
* description&lt;br /&gt;
* language&lt;br /&gt;
* contact name&lt;br /&gt;
* contact email&lt;br /&gt;
* enable&lt;br /&gt;
* hub secret (generated the first time the hub is registered on Moodle.org, it will never change)&lt;br /&gt;
* logo url &lt;br /&gt;
* protected web search interface &#039;&#039;&#039;(TODO: the protection method needs to be defined)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data structure ===&lt;br /&gt;
&lt;br /&gt;
==== Sites ====&lt;br /&gt;
&lt;br /&gt;
Primarily this table will store information about the sites that have registered course information on that Hub.  On hub.moodle.org this information will also be used for [http://moodle.org/stats general statistics] and the listing of [http://moodle.org/sites registered sites].&lt;br /&gt;
&lt;br /&gt;
* Id&lt;br /&gt;
* Site name &lt;br /&gt;
* Site description&lt;br /&gt;
* URL&lt;br /&gt;
* Address&lt;br /&gt;
*# Country code (AU, FR etc) [http://cvs.moodle.org/moodle/lang/en_utf8/countries.php?view=markup lang/XX_utf8/countries.php]&lt;br /&gt;
*# Region/state (based on list) [http://www.commondatahub.com/live/geography/state_province_region/iso_3166_2_state_codes ISO 3166-2 (XX-XXX)]&lt;br /&gt;
*# Street address &lt;br /&gt;
*# Geolocation (for mapping)&lt;br /&gt;
* Site manager&lt;br /&gt;
*# Name&lt;br /&gt;
*# Email&lt;br /&gt;
*# Phone&lt;br /&gt;
* Contact form yes/no?&lt;br /&gt;
* Default site language&lt;br /&gt;
* Moodle version (eg 2009050502)&lt;br /&gt;
* Moodle release (eg 1.9.5+)&lt;br /&gt;
* Site ip address (updated at every update)&lt;br /&gt;
* Unique SiteID code generated by Moodle site&lt;br /&gt;
* Confirmed by admin&lt;br /&gt;
* Site is &amp;quot;trusted&amp;quot; - this means we don&#039;t manually check data in future from this site.&lt;br /&gt;
* Mnet/WS information, enough to let a teacher authenticate to the site using Mnet 2.0 (optional)&lt;br /&gt;
* Harvesting url&lt;br /&gt;
* Time updated&lt;br /&gt;
* Time created&lt;br /&gt;
* Currently unreachable&lt;br /&gt;
* Time link was last checked&lt;br /&gt;
&lt;br /&gt;
Extra information that will only be kept on hub.moodle.org (only published in aggregate form):&lt;br /&gt;
&lt;br /&gt;
* Tool usage stats &lt;br /&gt;
** number of courses&lt;br /&gt;
** number of users&lt;br /&gt;
** number of enrolments&lt;br /&gt;
** number of posts&lt;br /&gt;
** number of resources&lt;br /&gt;
** number of questions&lt;br /&gt;
** median course size&lt;br /&gt;
* Subscribed to securityalerts@lists.moodle.org&lt;br /&gt;
&lt;br /&gt;
==== Courses ====&lt;br /&gt;
&lt;br /&gt;
This table stores registered courses, one record per course.  Some courses will be &amp;quot;downloadable&amp;quot;, some will be enrollable, so different fields can be used.&lt;br /&gt;
&lt;br /&gt;
* Course ID&lt;br /&gt;
* Site ID (foreign key to sites table)&lt;br /&gt;
* Dublin Core Metadata Element Set, Version 1.1&lt;br /&gt;
*# Contributor - course manager names or whoever the publisher nominates&lt;br /&gt;
*# Coverage - User tags&lt;br /&gt;
*# Creator - main teacher name or copyright holder or whoever the publisher nominates&lt;br /&gt;
*# Date - date this was last published/updated&lt;br /&gt;
*# Description - course description&lt;br /&gt;
*# Format - zip / url&lt;br /&gt;
*# Identifier - course shortname (unique on the original site)&lt;br /&gt;
*# Language - based on lang.php&lt;br /&gt;
*# Publisher - the name of the person who caused this record to be entered here&lt;br /&gt;
*# Relation - the site id that it came from&lt;br /&gt;
*# Rights - one of a standard set of open source, creative commons and other licenses&lt;br /&gt;
*# Source - original URL of the course&lt;br /&gt;
*# Subject - The best-matching item from ([https://docs.moodle.org/en/Course_Standard_Tags  Course Standard Tags ])&lt;br /&gt;
*# Title - Course fullname&lt;br /&gt;
*# Type - &amp;quot;course&amp;quot; (later there might other types such as activities or SCORM packages etc)&lt;br /&gt;
* Audience:  Educators | Students | Admins&lt;br /&gt;
* Educational level being discussed (for educators audience only):  Tertiary | Secondary | Primary | Government | Corporate&lt;br /&gt;
* Is a course map supplied?   (Simple XML description of course structure, could be rendered graphically later [http://kn.open.ac.uk/public/workspace.cfm?wpid=8690 CompendiumLD] )&lt;br /&gt;
&lt;br /&gt;
* Availability (public/private)&lt;br /&gt;
* Download URL (usually a local cached zip but could be anything else, including empty for non-downloadable)&lt;br /&gt;
* Original Download URL (usually a download script on the original Moodle site, used by Hub to get cache)&lt;br /&gt;
* Is the course trusted?  (all downloadable courses from non-trusted sites start as &amp;quot;no&amp;quot;, then this gets changed by someone who checks it)&lt;br /&gt;
* Is the course enrollable anyone with an account?&lt;br /&gt;
* Is guest access allowed?&lt;br /&gt;
* Are screenshots supplied?   (stored on disk under id of this record)&lt;br /&gt;
* Enrol Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
* Download Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
&lt;br /&gt;
==== Course feedback ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id&lt;br /&gt;
* type (bug / comment)&lt;br /&gt;
* text &lt;br /&gt;
* rating&lt;br /&gt;
&lt;br /&gt;
==== Course content ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id &lt;br /&gt;
* module type (activity / block)&lt;br /&gt;
* module name (forum, resource etc)&lt;br /&gt;
* count&lt;br /&gt;
&lt;br /&gt;
==== Course outcomes ====&lt;br /&gt;
&lt;br /&gt;
* id&lt;br /&gt;
* course id &lt;br /&gt;
* outcome  (text)&lt;br /&gt;
&lt;br /&gt;
=== Web user interface ===&lt;br /&gt;
&lt;br /&gt;
If visiting the hub via the web, it will provide an interface for full searching and browsing.  &lt;br /&gt;
&lt;br /&gt;
The web interface can be protected from access.  The hub at moodle.org will of course be open to all.&lt;br /&gt;
&lt;br /&gt;
Here is a very rough mockup of how it could look:&lt;br /&gt;
&lt;br /&gt;
[[Image:Webinterface.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Search_hub_moodle.png]]&lt;br /&gt;
&lt;br /&gt;
The web interface allows users to:&lt;br /&gt;
&lt;br /&gt;
* search by keyword (descriptions, titles, tags, subject etc)&lt;br /&gt;
* browse a list of courses by subject&lt;br /&gt;
* go directly to a course (if marked for public use)&lt;br /&gt;
* preview a course (if screenshots have been provided, or the original URL location)&lt;br /&gt;
* download the course to desktop (only if an download url has been set)&lt;br /&gt;
* If logged in to the Hub, users can also:&lt;br /&gt;
** give a rating to the course&lt;br /&gt;
** write a comment for the course - &amp;lt;span style=color:blue&amp;gt;use comment 2.0 API&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When displaying courses, you can see and sort by:&lt;br /&gt;
&lt;br /&gt;
* Title - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Description&lt;br /&gt;
* Tags  - &#039;&#039;Sortable &amp;lt;span style=color:blue&amp;gt;(first tag retrieved by the request is considered)&amp;lt;/span&amp;gt;&#039;&#039;&lt;br /&gt;
* Screenshot(s)&lt;br /&gt;
* Cost (if any) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Rating (10-point scale displayed as 5 stars, and only if you are logged in to moodle.org) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Comments &lt;br /&gt;
* Moodle site name&lt;br /&gt;
* Date added to directory&lt;br /&gt;
* Date last updated in directory &lt;br /&gt;
* Date last checked (by a cron job)&lt;br /&gt;
* Audience (teachers, students, admins)&lt;br /&gt;
* Teacher name(s) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Web service user interface ===&lt;br /&gt;
&lt;br /&gt;
A REST-based web services interface will be provided for other systems (eg Moodle sites) to use directly.&lt;br /&gt;
&lt;br /&gt;
Web services can search on:&lt;br /&gt;
* string search&lt;br /&gt;
* array language&lt;br /&gt;
* array cost&lt;br /&gt;
* array Moodle url&lt;br /&gt;
* Others?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hub admin interface ===&lt;br /&gt;
&lt;br /&gt;
The hub will have a Hub admin interface (at http://hubsite.org/hub) where the hub is managed.  Admin processes include:&lt;br /&gt;
&lt;br /&gt;
* Listing, approving and editing the sites registered with the hub &lt;br /&gt;
* Listing, approving and editing the course descriptions, metadata etc.&lt;br /&gt;
* Registering/updating the Hub with the Hub List&lt;br /&gt;
* Configuring Hub behaviour and the appearance of the home page.&lt;br /&gt;
&lt;br /&gt;
== Site registration ==&lt;br /&gt;
&lt;br /&gt;
The existing site registration form in Moodle will be extended so that admins can:&lt;br /&gt;
&lt;br /&gt;
# choose one or more Hubs to register with (hub.moodle.org and/or others in the Hub List, or directly to a particular Hub specified by URL)&lt;br /&gt;
# choose to enable cron to re-send statistics to the hub on a periodic basis.&lt;br /&gt;
# choose to enable the hub to harvest courses on a periodic basis (TODO: not shown on image)&lt;br /&gt;
&lt;br /&gt;
Each Moodle.org Hub will perform a check every week to verify that each site is accessible and optionally to harvest the courses from that site.  Sites that fail two or three checks in a row will be disable in the Hub listing.&lt;br /&gt;
&lt;br /&gt;
[[Image:SiteRegistration.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Community membership ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Community&amp;quot; block allows people to find and subscribe to external courses that they want to be part of.&lt;br /&gt;
&lt;br /&gt;
Visibility of the block and the features within it are controlled by roles, and contains:&lt;br /&gt;
&lt;br /&gt;
# &#039;Bookmarks&#039; of previously-selected (subscribed) external courses (to make revisiting easy) grouped by site, which can be edited/deleted etc&lt;br /&gt;
# A link to a search script - &amp;quot;Add new courses...&amp;quot;&lt;br /&gt;
# A search script to browse/search one or more Hubs (via web services to get the data, with the interface rendered by the local script).  Users can select joinable courses from the list and they&#039;ll get added to the list in the block.&lt;br /&gt;
&lt;br /&gt;
Generally the links will be just be an ordinary URL and the remote site will be responsible for authentication.&lt;br /&gt;
&lt;br /&gt;
If the foreign site has an Mnet connection set up with the current site then login will be immediate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Addacourse.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Import/Export courses ==&lt;br /&gt;
&lt;br /&gt;
The Import/Export block will be available on course pages and contains buttons to:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Publish course&#039;&#039;&#039;: to publish or update the description of the current course in one or more Hubs (admins only)&lt;br /&gt;
* &#039;&#039;&#039;Export course&#039;&#039;&#039;: publish/upload entire course (as Moodle Backup minus userdata) somewhere (eg a Hub) (via Portfolio API plugins)&lt;br /&gt;
* &#039;&#039;&#039;Import course&#039;&#039;&#039;: find/download/install a course template from a Hub or from another course on same site  (Repository API plugins)&lt;br /&gt;
&lt;br /&gt;
=== Publish course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Publish&#039;&#039;&#039; button only exists if the current user has the appropriate capabilities and if the current Moodle site has been registered with a Hub.&lt;br /&gt;
&lt;br /&gt;
[[Image:Coursepublishing.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Choosing &amp;quot;Publish&amp;quot; goes to a script where you can chose from the registered Hubs and whether you want to publish the course as:&lt;br /&gt;
* enrollable, so that others can come here and use the course where it is, and/or &lt;br /&gt;
* downloadable, so that a Hub can offer this course for download to others&lt;br /&gt;
&lt;br /&gt;
If the user wants to offer this course for download, then they are directed to the standard backup process to create and define the backup file (without users!).  If the backup is successful the zip is stored in a standard place and then the user is returned to the publish script to continue.  (If downloads are not required then this whole step is skipped).&lt;br /&gt;
&lt;br /&gt;
It allows the user to set up full , and especially whether you want to advertise this course as being:&lt;br /&gt;
&lt;br /&gt;
Now the script presents a form with metadata that this course will be published with on the chosen Hub(s) (this is also available in the course settings page).  Metadata includes information such as description, licensing, categories, screenshots etc (see the [[#Courses|Courses]] section above for more info).&lt;br /&gt;
&lt;br /&gt;
After checking/updating the metadata, the script will push the data to the selected Hub.  The Hub will bounce back a confirmation which gets saved locally as the &amp;quot;Last publish date&amp;quot; for that course.&lt;br /&gt;
&lt;br /&gt;
If the checkbox to allow download was selected, then the URL to a course download script in the current Moodle is included with the metadata.  This URL contains a token (eg an MD5 stored in the course table) that only the Hub knows.&lt;br /&gt;
&lt;br /&gt;
The course download script (eg /course/download.php?id=55&amp;amp;secret=XXXXX) will send the cached .zip file for the given course.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Publish course settings ====&lt;br /&gt;
&lt;br /&gt;
Some publish settings and info will also be available anytime via the course settings page under a &amp;quot;Publish&amp;quot; tab:&lt;br /&gt;
&lt;br /&gt;
* Which hubs has this course been published on, and when&lt;br /&gt;
* Full metadata&lt;br /&gt;
* Screenshots&lt;br /&gt;
&lt;br /&gt;
=== Export course ===&lt;br /&gt;
&lt;br /&gt;
A standard export will do a normal backup (taking care to remove userdata by default), and at the end will call the portfolio API to push that file to a connected portfolio.  Portfolio (export) plugins could include:&lt;br /&gt;
&lt;br /&gt;
* downloading it to the local computer&lt;br /&gt;
* uploading it as a zip to any general purpose repository&lt;br /&gt;
* copy the course to another Moodle site set up with Mnet peering.&lt;br /&gt;
&lt;br /&gt;
Pushing it to another Moodle site would trigger extra behaviours:&lt;br /&gt;
&lt;br /&gt;
* Permissions would be checked on the destination Moodle&lt;br /&gt;
* The course can be immediately restored on the external Moodle in a special &amp;quot;New&amp;quot; category as a hidden course&lt;br /&gt;
* Someone on the external Moodle can be alerted to approve/unhide the new course&lt;br /&gt;
&lt;br /&gt;
=== Import course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Import course&#039;&#039;&#039; button will pull up a normal file picker to browse repositories for files with a mimetype matching .mbkup.zip.&lt;br /&gt;
&lt;br /&gt;
One special repository plugin called &amp;quot;Courses&amp;quot; allows the user to:&lt;br /&gt;
&lt;br /&gt;
* find Hubs by downloading the Hub List&lt;br /&gt;
* search particular Hubs for downloadable courses (only)&lt;br /&gt;
* search other courses on the same server (replacing the existing import function we have)&lt;br /&gt;
&lt;br /&gt;
Once the user has selected one of these courses and passed any challenge there might be (eg the Hub could potentially require a password or payment or a license agreement form), then the zip file is downloaded to the local Moodle, and then the user is passed to the standard restore process.&lt;br /&gt;
&lt;br /&gt;
[[Image:FilePicker_all_JS.png|900px]]&lt;br /&gt;
[[Image:FilePicker_JS_course_selector.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Harvest courses ===&lt;br /&gt;
&lt;br /&gt;
Each hub will use cron to call every site that has registered a harvesting url on a periodic basis.  This will be done at the same time as the link is checked to ensure the site is reachable, so the &amp;quot;time link was last checked&amp;quot; field in the site table also indicates when the site was last harvested.&lt;br /&gt;
&lt;br /&gt;
The harvesting url will be an RSS feed which will list all the courses to be included in the hub and their metadata.  This might be the feed of all visible courses on the site, or courses in a given category.  TODO: should we allow them to enter multiple category feeds so they can say &amp;quot;arts&amp;quot;, &amp;quot;business&amp;quot; and &amp;quot;languages&amp;quot; but not &amp;quot;science&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
Course list RSS feeds are an existing tracker item for Moodle 2.0  See http://tracker.moodle.org/browse/MDL-13248  This patch allows admins to pick which categories have individual feeds created and are included in the &amp;quot;all courses&amp;quot; feed.  Each course becomes an &amp;lt;item&amp;gt; in the RSS feed as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;category&amp;gt; the Moodle course category in which the course belongs&lt;br /&gt;
* &amp;lt;title&amp;gt; the course fullname&lt;br /&gt;
* &amp;lt;link&amp;gt; the course url&lt;br /&gt;
* &amp;lt;pubdate&amp;gt; the date the course (or any of its resources and activities) last updated&lt;br /&gt;
* &amp;lt;description&amp;gt; the course summary&lt;br /&gt;
&lt;br /&gt;
The current tracker item will need to be extended to include appropriate course metadata in the RSS feed.  There is a [http://purl.org/dc/elements/1.1/ Dublin Core extension to RSS 2.0] which can be implemented.  &lt;br /&gt;
&lt;br /&gt;
TODO: If we choose an alternative metadata format we will need to locate or create an alternative RSS extension.  There is a [http://www.downes.ca/xml/RSS_LOM.htm LOM extension] but not from an official IEEE namespace.  &lt;br /&gt;
&lt;br /&gt;
We will need to declare our own namespace RSS extension to identify whether a course should be listed in the hub as downloadable and/or enrollable.  This extension will add tags to the RSS feed as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;moodlehub:downloadable&amp;gt; &lt;br /&gt;
* &amp;lt;moodlehub:enrollable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both tags will take either &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot; values and will be set by course creators at the same time as they enter course metadata.&lt;br /&gt;
&lt;br /&gt;
The hub will check the published date for each item in the RSS feed to identify whether it needs to update its records.  TODO: if we use OAI-PMH for harvesting we can request courses updated since x see http://moodle.org/mod/forum/discuss.php?d=127488 &lt;br /&gt;
&lt;br /&gt;
If the course has been updated and is &amp;lt;moodlehub:downloadable&amp;gt; is yes, then the hub will request the site to create a new backup of the entire course (less user data).&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
Full schedule and progress is in the tracker: MDL-19309&lt;br /&gt;
&lt;br /&gt;
# Moodle.org Hub List&lt;br /&gt;
# Hub registration form&lt;br /&gt;
# Hub Web interface&lt;br /&gt;
# Hub web service interface &lt;br /&gt;
# Improve Site registration form&lt;br /&gt;
# Community block&lt;br /&gt;
# Publish courses&lt;br /&gt;
# Import courses &lt;br /&gt;
# Export courses&lt;br /&gt;
# Harvest courses&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Community hub technotes]] - relating to MNet developments in Moodle 1.8&lt;br /&gt;
* MDL-18580 - Community Hub tracker issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MNET]]&lt;br /&gt;
&lt;br /&gt;
[[ja:開発:コミュニティハブ]]&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2471</id>
		<title>Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2471"/>
		<updated>2009-07-06T14:48:34Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Schedule */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT STATE: Proposal&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;MAIN TRACKER ISSUE&#039;&#039;&#039;: MDL-19309&lt;br /&gt;
* &#039;&#039;&#039;DISCUSSION AND COMMENTS&#039;&#039;&#039;: [http://moodle.org/mod/forum/view.php?id=7330 Hub servers] forum in Using Moodle&lt;br /&gt;
* &#039;&#039;&#039;MAIN AUTHORS&#039;&#039;&#039;: [[User:Martin_Dougiamas|Martin Dougiamas]] and [[User:jerome_mouneyrac|Jerome Mouneyrac]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page describes an overall functional specification for the &amp;quot;Moodle Community Hub&amp;quot; project, which consists of a new system (the Moodle Hub Server) and several new features in Moodle 2.0. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Goals and rationale =&lt;br /&gt;
&lt;br /&gt;
The main goals of the Community hub project are:&lt;br /&gt;
&lt;br /&gt;
# to allow people to easily find courses around the world that they want to enrol in:&lt;br /&gt;
#* educators want to find &#039;&#039;&#039;communities of practice&#039;&#039;&#039; that are subject or region-oriented, so that they can associate with their peers on a long-term basis.&lt;br /&gt;
#* other learners want to find and study courses on various other subjects&lt;br /&gt;
# to make it easy for educators to find and download &#039;&#039;&#039;course templates&#039;&#039;&#039; from other people.  This will help educators share and identify examples of &#039;&#039;&#039;best practice&#039;&#039;&#039; in online pedagogy and hopefully improve the average quality of online courses.&lt;br /&gt;
&lt;br /&gt;
Finally, we want to do all this in the simplest, safest way possible, while allowing a range of scenarios such as courses that are public or private, free or paid, so that the Moodle community can build solutions for themselves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the basic idea.  The systems in this diagram are:&lt;br /&gt;
&lt;br /&gt;
;Ordinary Moodle site: A typical Moodle site with teachers who want to download course templates and/or users who want to connect (enrol) with external communities &lt;br /&gt;
;Publishing site: A Moodle site that wants to make some of its courses available for download&lt;br /&gt;
;Community site: A Moodle site that provides courses that are enrollable&lt;br /&gt;
;Moodle Hub Server: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;.  The default hub will be installed at hub.moodle.org, but there can be many others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Community.png]]&lt;br /&gt;
&lt;br /&gt;
Downloadable courses&lt;br /&gt;
* (A) Sites that want to publish certain courses and make them downloadable can register them with one or more Hub Servers.&lt;br /&gt;
* (B) The Hub will check the data and make sure the course zip is downloadable, caching a copy locally.  The Hub may also have a security process to check the download for trojan horses, bad content, etc (automatic and/or manual).&lt;br /&gt;
* (C) The download process may trigger the backup process on the original server if it hasn&#039;t been done already.&lt;br /&gt;
* (D) Later, Moodle users (who have permissions to do so) can connect to a Hub (via the Repository file picker) to search for downloadable courses and choose one (receiving a download URL).&lt;br /&gt;
* (E) The repository API downloads the file and makes it available to the Moodle user so they can now continue to restore it normally.&lt;br /&gt;
&lt;br /&gt;
Enrollable courses&lt;br /&gt;
* (1) Sites that want to publish certain courses for the public to enrol in can register them with one or more CDS (including the main one at moodle.org)&lt;br /&gt;
* (2) Later, any Moodle user can connect to a CDS (via Community block in their site) to search and find courses they want to join&lt;br /&gt;
* (3) They click on a link to be sent to the other site so that they can enrol there (with or without Mnet).&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
== New teacher creating a course ==&lt;br /&gt;
&lt;br /&gt;
# New teacher needs some help with a new course for &amp;quot;Alligator farming 101&amp;quot;&lt;br /&gt;
# Teacher sees the &amp;quot;Import/Export&amp;quot; block into the &amp;quot;Alligator farming 101&amp;quot; course page and presses &amp;quot;Import course&amp;quot;&lt;br /&gt;
# Teacher browses a list of downloadable courses in the File picker (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches for &amp;quot;Alligator&amp;quot; &lt;br /&gt;
# Teacher finds 4 courses that look good, and after reading reviews and ratings, chooses one.&lt;br /&gt;
# The course is downloaded and unpacked in Moodle.&lt;br /&gt;
# The teacher now has a good starter course they can keep developing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New teacher needs help ==&lt;br /&gt;
&lt;br /&gt;
A teacher decides they need some help and wants to talk with others teaching Alligator farming.&lt;br /&gt;
&lt;br /&gt;
# Teacher goes to their &amp;quot;Community&amp;quot; block and clicks &amp;quot;Find community&amp;quot;.&lt;br /&gt;
# Moodle displays a page to search for courses (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches courses for &amp;quot;educator&amp;quot; courses on &amp;quot;Alligators&amp;quot; in their country/language.&lt;br /&gt;
# Teacher finds two, selects one, and is returned to the page where is was before clicking on &amp;quot;Find community&amp;quot;.  The selected course is now permanently listed in the Community block.&lt;br /&gt;
# Teacher clicks on the link and is taken to the course, where they can enrol and interact/learn with peers over time, subscribe to forums etc.&lt;br /&gt;
&lt;br /&gt;
== University consortium ==&lt;br /&gt;
&lt;br /&gt;
A group of five universites wants to share courses among themselves and not to the outside world.  They also want to prevent teachers from downloading courses from outside the consortium.&lt;br /&gt;
&lt;br /&gt;
# Someone downloads Moodle and installs it as a private Moodle Hub Server&lt;br /&gt;
# Admins of all five Moodle sites in the group add the URL of the private Hub to their settings and register their sites there&lt;br /&gt;
# The default Hub at hub.moodle.org is (optionally) disabled in the site-wide settings.&lt;br /&gt;
# Admins register their courses with the Hub.&lt;br /&gt;
# Teachers can now import, export or join courses via the private Hub.&lt;br /&gt;
&lt;br /&gt;
== Course creation business ==&lt;br /&gt;
&lt;br /&gt;
CoolCourses Inc have produced a set of 50 good Moodle courses which they wish to sell.&lt;br /&gt;
&lt;br /&gt;
# They set up a Moodle site with all their courses in them.&lt;br /&gt;
# They set up a Hub with a payment system, and register it with the Hub List at moodle.org so people can find it&lt;br /&gt;
# They register all their courses with their own Hub with appropriate metadata&lt;br /&gt;
# When looking for courses, users can either &lt;br /&gt;
#* find this Hub by browsing through the Hub List, or &lt;br /&gt;
#* type the URL of the Hub directly into their Moodle site&lt;br /&gt;
# When users try to download a course, they may see a payment button to download it (credit card, paypal etc)&lt;br /&gt;
# CoolCourses could provide limited access to the courses on their Moodle site using Roles, as a preview.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
There are several components:&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hub List&#039;&#039;&#039;: A list of known Hub Servers, kept on moodle.org &lt;br /&gt;
;&#039;&#039;&#039;Hub Server&#039;&#039;&#039;: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;&lt;br /&gt;
;&#039;&#039;&#039;Course registration&#039;&#039;&#039;: A new mechanism in every Moodle to register particular courses with one or more Hub Servers&lt;br /&gt;
;&#039;&#039;&#039;Community membership block&#039;&#039;&#039;: to search Hub Servers to find enrollable courses to join and bookmark&lt;br /&gt;
;&#039;&#039;&#039;Import/Export block&#039;&#039;&#039;: Makes it easy to find downloadable course templates in a Hub Server, then download them from the Hub Server and restore them locally&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub List==&lt;br /&gt;
&lt;br /&gt;
The Hub List is a list of known Hub Servers (see the next section).  This makes it easy for Moodle users to find the most appropriate Hub Servers for their needs.  To get on the Hub List, Hub Servers choose to register with moodle.org via their administration interface.&lt;br /&gt;
&lt;br /&gt;
Moodle.org will store the following information, and make it available via a browseable interface at [http://moodle.org/hubs http://moodle.org/hubs] as well as a simple XML format from [http://moodle.org/hubs/list.xml http://moodle.org/hubs/list.xml] suitable for consumption by Moodle sites.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|int&lt;br /&gt;
|Standard autoincrement&lt;br /&gt;
|-&lt;br /&gt;
|hubname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the Hub&lt;br /&gt;
|-&lt;br /&gt;
|hubdescription&lt;br /&gt;
|text&lt;br /&gt;
|Description of the hub, from the admin there&lt;br /&gt;
|-&lt;br /&gt;
|huburl&lt;br /&gt;
|varchar&lt;br /&gt;
|The full URL to the hub front page&lt;br /&gt;
|-&lt;br /&gt;
|hubsecret&lt;br /&gt;
|varchar&lt;br /&gt;
|The secret code from the hub (extra authentication)&lt;br /&gt;
|-&lt;br /&gt;
|trusted&lt;br /&gt;
|int&lt;br /&gt;
|Is the hub trusted?  Does it have good quality control?&lt;br /&gt;
|-&lt;br /&gt;
|language&lt;br /&gt;
|varchar&lt;br /&gt;
|What is the primary language of this hub?  (blank for multilanguage)&lt;br /&gt;
|-&lt;br /&gt;
|sites&lt;br /&gt;
|int&lt;br /&gt;
|Number of sites  registered on this hub&lt;br /&gt;
|-&lt;br /&gt;
|courses&lt;br /&gt;
|int&lt;br /&gt;
|Number of courses registered on this hub &lt;br /&gt;
|-&lt;br /&gt;
|timefirst&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was first registered&lt;br /&gt;
|-&lt;br /&gt;
|timelast&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was last registered/updated&lt;br /&gt;
|-&lt;br /&gt;
|contactname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|contactemail&lt;br /&gt;
|varchar&lt;br /&gt;
|Email of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|varchar&lt;br /&gt;
|hub logo url&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:Registerhub.png]]&lt;br /&gt;
&lt;br /&gt;
following a hub list table on Moodle.org:&lt;br /&gt;
[[Image:Hublist.png]]&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub Server==&lt;br /&gt;
&lt;br /&gt;
The Moodle Hub Server (aka Hub) is a separate system (based on Moodle technology) that allows Moodle sites to register their courses for listing there.&lt;br /&gt;
&lt;br /&gt;
A default installation of this software will be running at &#039;&#039;&#039;hub.moodle.org&#039;&#039;&#039;, but anyone else can download it and set up their own hub for private or public uses.   A default installation of Moodle can also be a Hub, or if the admin chooses, a site can be a dedicated Hub if they choose that option during install (in this case the front page of the site will be a dedicated site search for the public).&lt;br /&gt;
&lt;br /&gt;
Hubs can optionally register themselves in the Hub List so that they are easier to find and so they can become a &amp;quot;Trusted Hub&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A hub server has some config fields (saved into its database):&lt;br /&gt;
* name&lt;br /&gt;
* description&lt;br /&gt;
* language&lt;br /&gt;
* contact name&lt;br /&gt;
* contact email&lt;br /&gt;
* enable&lt;br /&gt;
* hub secret (generated the first time the hub is registered on Moodle.org, it will never change)&lt;br /&gt;
* logo url &lt;br /&gt;
* protected web search interface &#039;&#039;&#039;(TODO: the protection method needs to be defined)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data structure ===&lt;br /&gt;
&lt;br /&gt;
==== Sites ====&lt;br /&gt;
&lt;br /&gt;
Primarily this table will store information about the sites that have registered course information on that Hub.  On hub.moodle.org this information will also be used for [http://moodle.org/stats general statistics] and the listing of [http://moodle.org/sites registered sites].&lt;br /&gt;
&lt;br /&gt;
* Id&lt;br /&gt;
* Site name &lt;br /&gt;
* Site description&lt;br /&gt;
* URL&lt;br /&gt;
* Address&lt;br /&gt;
*# Country code (AU, FR etc) [http://cvs.moodle.org/moodle/lang/en_utf8/countries.php?view=markup lang/XX_utf8/countries.php]&lt;br /&gt;
*# Region/state (based on list) [http://www.commondatahub.com/live/geography/state_province_region/iso_3166_2_state_codes ISO 3166-2 (XX-XXX)]&lt;br /&gt;
*# Street address &lt;br /&gt;
*# Geolocation (for mapping)&lt;br /&gt;
* Site manager&lt;br /&gt;
*# Name&lt;br /&gt;
*# Email&lt;br /&gt;
*# Phone&lt;br /&gt;
* Contact form yes/no?&lt;br /&gt;
* Default site language&lt;br /&gt;
* Moodle version (eg 2009050502)&lt;br /&gt;
* Moodle release (eg 1.9.5+)&lt;br /&gt;
* Site ip address (updated at every update)&lt;br /&gt;
* Unique SiteID code generated by Moodle site&lt;br /&gt;
* Confirmed by admin&lt;br /&gt;
* Site is &amp;quot;trusted&amp;quot; - this means we don&#039;t manually check data in future from this site.&lt;br /&gt;
* Mnet/WS information, enough to let a teacher authenticate to the site using Mnet 2.0 (optional)&lt;br /&gt;
* Harvesting url&lt;br /&gt;
* Time updated&lt;br /&gt;
* Time created&lt;br /&gt;
* Currently unreachable&lt;br /&gt;
* Time link was last checked&lt;br /&gt;
&lt;br /&gt;
Extra information that will only be kept on hub.moodle.org (only published in aggregate form):&lt;br /&gt;
&lt;br /&gt;
* Tool usage stats &lt;br /&gt;
** number of courses&lt;br /&gt;
** number of users&lt;br /&gt;
** number of enrolments&lt;br /&gt;
** number of posts&lt;br /&gt;
** number of resources&lt;br /&gt;
** number of questions&lt;br /&gt;
** median course size&lt;br /&gt;
* Subscribed to securityalerts@lists.moodle.org&lt;br /&gt;
&lt;br /&gt;
==== Courses ====&lt;br /&gt;
&lt;br /&gt;
This table stores registered courses, one record per course.  Some courses will be &amp;quot;downloadable&amp;quot;, some will be enrollable, so different fields can be used.&lt;br /&gt;
&lt;br /&gt;
* Course ID&lt;br /&gt;
* Site ID (foreign key to sites table)&lt;br /&gt;
* Dublin Core Metadata Element Set, Version 1.1&lt;br /&gt;
*# Contributor - course manager names or whoever the publisher nominates&lt;br /&gt;
*# Coverage - User tags&lt;br /&gt;
*# Creator - main teacher name or copyright holder or whoever the publisher nominates&lt;br /&gt;
*# Date - date this was last published/updated&lt;br /&gt;
*# Description - course description&lt;br /&gt;
*# Format - zip / url&lt;br /&gt;
*# Identifier - course shortname (unique on the original site)&lt;br /&gt;
*# Language - based on lang.php&lt;br /&gt;
*# Publisher - the name of the person who caused this record to be entered here&lt;br /&gt;
*# Relation - the site id that it came from&lt;br /&gt;
*# Rights - one of a standard set of open source, creative commons and other licenses&lt;br /&gt;
*# Source - original URL of the course&lt;br /&gt;
*# Subject - The best-matching item from ([https://docs.moodle.org/en/Course_Standard_Tags  Course Standard Tags ])&lt;br /&gt;
*# Title - Course fullname&lt;br /&gt;
*# Type - &amp;quot;course&amp;quot; (later there might other types such as activities or SCORM packages etc)&lt;br /&gt;
* Audience:  Educators | Students | Admins&lt;br /&gt;
* Educational level being discussed (for educators audience only):  Tertiary | Secondary | Primary | Government | Corporate&lt;br /&gt;
* Is a course map supplied?   (Simple XML description of course structure, could be rendered graphically later [http://kn.open.ac.uk/public/workspace.cfm?wpid=8690 CompendiumLD] )&lt;br /&gt;
&lt;br /&gt;
* Availability (public/private)&lt;br /&gt;
* Download URL (usually a local cached zip but could be anything else, including empty for non-downloadable)&lt;br /&gt;
* Original Download URL (usually a download script on the original Moodle site, used by Hub to get cache)&lt;br /&gt;
* Is the course trusted?  (all downloadable courses from non-trusted sites start as &amp;quot;no&amp;quot;, then this gets changed by someone who checks it)&lt;br /&gt;
* Is the course enrollable anyone with an account?&lt;br /&gt;
* Is guest access allowed?&lt;br /&gt;
* Are screenshots supplied?   (stored on disk under id of this record)&lt;br /&gt;
* Enrol Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
* Download Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
&lt;br /&gt;
==== Course feedback ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id&lt;br /&gt;
* type (bug / comment)&lt;br /&gt;
* text &lt;br /&gt;
* rating&lt;br /&gt;
&lt;br /&gt;
==== Course content ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id &lt;br /&gt;
* module type (activity / block)&lt;br /&gt;
* module name (forum, resource etc)&lt;br /&gt;
* count&lt;br /&gt;
&lt;br /&gt;
==== Course outcomes ====&lt;br /&gt;
&lt;br /&gt;
* id&lt;br /&gt;
* course id &lt;br /&gt;
* outcome  (text)&lt;br /&gt;
&lt;br /&gt;
=== Web user interface ===&lt;br /&gt;
&lt;br /&gt;
If visiting the hub via the web, it will provide an interface for full searching and browsing.  &lt;br /&gt;
&lt;br /&gt;
The web interface can be protected from access.  The hub at moodle.org will of course be open to all.&lt;br /&gt;
&lt;br /&gt;
Here is a very rough mockup of how it could look:&lt;br /&gt;
&lt;br /&gt;
[[Image:Webinterface.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Search_hub_moodle.png]]&lt;br /&gt;
&lt;br /&gt;
The web interface allows users to:&lt;br /&gt;
&lt;br /&gt;
* search by keyword (descriptions, titles, tags, subject etc)&lt;br /&gt;
* browse a list of courses by subject&lt;br /&gt;
* go directly to a course (if marked for public use)&lt;br /&gt;
* preview a course (if screenshots have been provided, or the original URL location)&lt;br /&gt;
* download the course to desktop (only if an download url has been set)&lt;br /&gt;
* If logged in to the Hub, users can also:&lt;br /&gt;
** give a rating to the course&lt;br /&gt;
** write a comment for the course - &amp;lt;span style=color:blue&amp;gt;use comment 2.0 API&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When displaying courses, you can see and sort by:&lt;br /&gt;
&lt;br /&gt;
* Title - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Description&lt;br /&gt;
* Tags  - &#039;&#039;Sortable &amp;lt;span style=color:blue&amp;gt;(first tag retrieved by the request is considered)&amp;lt;/span&amp;gt;&#039;&#039;&lt;br /&gt;
* Screenshot(s)&lt;br /&gt;
* Cost (if any) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Rating (10-point scale displayed as 5 stars, and only if you are logged in to moodle.org) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Comments &lt;br /&gt;
* Moodle site name&lt;br /&gt;
* Date added to directory&lt;br /&gt;
* Date last updated in directory &lt;br /&gt;
* Date last checked (by a cron job)&lt;br /&gt;
* Audience (teachers, students, admins)&lt;br /&gt;
* Teacher name(s) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Web service user interface ===&lt;br /&gt;
&lt;br /&gt;
A REST-based web services interface will be provided for other systems (eg Moodle sites) to use directly.&lt;br /&gt;
&lt;br /&gt;
Web services can search on:&lt;br /&gt;
* string search&lt;br /&gt;
* array language&lt;br /&gt;
* array cost&lt;br /&gt;
* array Moodle url&lt;br /&gt;
* Others?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hub admin interface ===&lt;br /&gt;
&lt;br /&gt;
The hub will have a Hub admin interface (at http://hubsite.org/hub) where the hub is managed.  Admin processes include:&lt;br /&gt;
&lt;br /&gt;
* Listing, approving and editing the sites registered with the hub &lt;br /&gt;
* Listing, approving and editing the course descriptions, metadata etc.&lt;br /&gt;
* Registering/updating the Hub with the Hub List&lt;br /&gt;
* Configuring Hub behaviour and the appearance of the home page.&lt;br /&gt;
&lt;br /&gt;
== Site registration ==&lt;br /&gt;
&lt;br /&gt;
The existing site registration form in Moodle will be extended so that admins can:&lt;br /&gt;
&lt;br /&gt;
# choose one or more Hubs to register with (hub.moodle.org and/or others in the Hub List, or directly to a particular Hub specified by URL)&lt;br /&gt;
# choose to enable cron to re-send statistics to the hub on a periodic basis.&lt;br /&gt;
# choose to enable the hub to harvest courses on a periodic basis (TODO: not shown on image)&lt;br /&gt;
&lt;br /&gt;
Each Moodle.org Hub will perform a check every week to verify that each site is accessible and optionally to harvest the courses from that site.  Sites that fail two or three checks in a row will be disable in the Hub listing.&lt;br /&gt;
&lt;br /&gt;
[[Image:SiteRegistration.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Community membership ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Community&amp;quot; block allows people to find and subscribe to external courses that they want to be part of.&lt;br /&gt;
&lt;br /&gt;
Visibility of the block and the features within it are controlled by roles, and contains:&lt;br /&gt;
&lt;br /&gt;
# &#039;Bookmarks&#039; of previously-selected (subscribed) external courses (to make revisiting easy) grouped by site, which can be edited/deleted etc&lt;br /&gt;
# A link to a search script - &amp;quot;Add new courses...&amp;quot;&lt;br /&gt;
# A search script to browse/search one or more Hubs (via web services to get the data, with the interface rendered by the local script).  Users can select joinable courses from the list and they&#039;ll get added to the list in the block.&lt;br /&gt;
&lt;br /&gt;
Generally the links will be just be an ordinary URL and the remote site will be responsible for authentication.&lt;br /&gt;
&lt;br /&gt;
If the foreign site has an Mnet connection set up with the current site then login will be immediate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Addacourse.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Import/Export courses ==&lt;br /&gt;
&lt;br /&gt;
The Import/Export block will be available on course pages and contains buttons to:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Publish course&#039;&#039;&#039;: to publish or update the description of the current course in one or more Hubs (admins only)&lt;br /&gt;
* &#039;&#039;&#039;Export course&#039;&#039;&#039;: publish/upload entire course (as Moodle Backup minus userdata) somewhere (eg a Hub) (via Portfolio API plugins)&lt;br /&gt;
* &#039;&#039;&#039;Import course&#039;&#039;&#039;: find/download/install a course template from a Hub or from another course on same site  (Repository API plugins)&lt;br /&gt;
&lt;br /&gt;
=== Publish course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Publish&#039;&#039;&#039; button only exists if the current user has the appropriate capabilities and if the current Moodle site has been registered with a Hub.&lt;br /&gt;
&lt;br /&gt;
[[Image:Coursepublishing.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Choosing &amp;quot;Publish&amp;quot; goes to a script where you can chose from the registered Hubs and whether you want to publish the course as:&lt;br /&gt;
* enrollable, so that others can come here and use the course where it is, and/or &lt;br /&gt;
* downloadable, so that a Hub can offer this course for download to others&lt;br /&gt;
&lt;br /&gt;
If the user wants to offer this course for download, then they are directed to the standard backup process to create and define the backup file (without users!).  If the backup is successful the zip is stored in a standard place and then the user is returned to the publish script to continue.  (If downloads are not required then this whole step is skipped).&lt;br /&gt;
&lt;br /&gt;
It allows the user to set up full , and especially whether you want to advertise this course as being:&lt;br /&gt;
&lt;br /&gt;
Now the script presents a form with metadata that this course will be published with on the chosen Hub(s) (this is also available in the course settings page).  Metadata includes information such as description, licensing, categories, screenshots etc (see the [[#Courses|Courses]] section above for more info).&lt;br /&gt;
&lt;br /&gt;
After checking/updating the metadata, the script will push the data to the selected Hub.  The Hub will bounce back a confirmation which gets saved locally as the &amp;quot;Last publish date&amp;quot; for that course.&lt;br /&gt;
&lt;br /&gt;
If the checkbox to allow download was selected, then the URL to a course download script in the current Moodle is included with the metadata.  This URL contains a token (eg an MD5 stored in the course table) that only the Hub knows.&lt;br /&gt;
&lt;br /&gt;
The course download script (eg /course/download.php?id=55&amp;amp;secret=XXXXX) will send the cached .zip file for the given course.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Publish course settings ====&lt;br /&gt;
&lt;br /&gt;
Some publish settings and info will also be available anytime via the course settings page under a &amp;quot;Publish&amp;quot; tab:&lt;br /&gt;
&lt;br /&gt;
* Which hubs has this course been published on, and when&lt;br /&gt;
* Full metadata&lt;br /&gt;
* Screenshots&lt;br /&gt;
&lt;br /&gt;
=== Export course ===&lt;br /&gt;
&lt;br /&gt;
A standard export will do a normal backup (taking care to remove userdata by default), and at the end will call the portfolio API to push that file to a connected portfolio.  Portfolio (export) plugins could include:&lt;br /&gt;
&lt;br /&gt;
* downloading it to the local computer&lt;br /&gt;
* uploading it as a zip to any general purpose repository&lt;br /&gt;
* copy the course to another Moodle site set up with Mnet peering.&lt;br /&gt;
&lt;br /&gt;
Pushing it to another Moodle site would trigger extra behaviours:&lt;br /&gt;
&lt;br /&gt;
* Permissions would be checked on the destination Moodle&lt;br /&gt;
* The course can be immediately restored on the external Moodle in a special &amp;quot;New&amp;quot; category as a hidden course&lt;br /&gt;
* Someone on the external Moodle can be alerted to approve/unhide the new course&lt;br /&gt;
&lt;br /&gt;
=== Import course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Import course&#039;&#039;&#039; button will pull up a normal file picker to browse repositories for files with a mimetype matching .mbkup.zip.&lt;br /&gt;
&lt;br /&gt;
One special repository plugin called &amp;quot;Courses&amp;quot; allows the user to:&lt;br /&gt;
&lt;br /&gt;
* find Hubs by downloading the Hub List&lt;br /&gt;
* search particular Hubs for downloadable courses (only)&lt;br /&gt;
* search other courses on the same server (replacing the existing import function we have)&lt;br /&gt;
&lt;br /&gt;
Once the user has selected one of these courses and passed any challenge there might be (eg the Hub could potentially require a password or payment or a license agreement form), then the zip file is downloaded to the local Moodle, and then the user is passed to the standard restore process.&lt;br /&gt;
&lt;br /&gt;
[[Image:FilePicker_all_JS.png|900px]]&lt;br /&gt;
[[Image:FilePicker_JS_course_selector.png|900px]]&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
Full schedule and progress is in the tracker: MDL-19309&lt;br /&gt;
&lt;br /&gt;
# Moodle.org Hub List&lt;br /&gt;
# Hub registration form&lt;br /&gt;
# Hub Web interface&lt;br /&gt;
# Hub web service interface &lt;br /&gt;
# Improve Site registration form&lt;br /&gt;
# Community block&lt;br /&gt;
# Publish courses&lt;br /&gt;
# Import courses &lt;br /&gt;
# Export courses&lt;br /&gt;
# Harvest courses&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Community hub technotes]] - relating to MNet developments in Moodle 1.8&lt;br /&gt;
* MDL-18580 - Community Hub tracker issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MNET]]&lt;br /&gt;
&lt;br /&gt;
[[ja:開発:コミュニティハブ]]&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2470</id>
		<title>Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2470"/>
		<updated>2009-07-06T14:47:55Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Site registration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT STATE: Proposal&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;MAIN TRACKER ISSUE&#039;&#039;&#039;: MDL-19309&lt;br /&gt;
* &#039;&#039;&#039;DISCUSSION AND COMMENTS&#039;&#039;&#039;: [http://moodle.org/mod/forum/view.php?id=7330 Hub servers] forum in Using Moodle&lt;br /&gt;
* &#039;&#039;&#039;MAIN AUTHORS&#039;&#039;&#039;: [[User:Martin_Dougiamas|Martin Dougiamas]] and [[User:jerome_mouneyrac|Jerome Mouneyrac]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page describes an overall functional specification for the &amp;quot;Moodle Community Hub&amp;quot; project, which consists of a new system (the Moodle Hub Server) and several new features in Moodle 2.0. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Goals and rationale =&lt;br /&gt;
&lt;br /&gt;
The main goals of the Community hub project are:&lt;br /&gt;
&lt;br /&gt;
# to allow people to easily find courses around the world that they want to enrol in:&lt;br /&gt;
#* educators want to find &#039;&#039;&#039;communities of practice&#039;&#039;&#039; that are subject or region-oriented, so that they can associate with their peers on a long-term basis.&lt;br /&gt;
#* other learners want to find and study courses on various other subjects&lt;br /&gt;
# to make it easy for educators to find and download &#039;&#039;&#039;course templates&#039;&#039;&#039; from other people.  This will help educators share and identify examples of &#039;&#039;&#039;best practice&#039;&#039;&#039; in online pedagogy and hopefully improve the average quality of online courses.&lt;br /&gt;
&lt;br /&gt;
Finally, we want to do all this in the simplest, safest way possible, while allowing a range of scenarios such as courses that are public or private, free or paid, so that the Moodle community can build solutions for themselves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the basic idea.  The systems in this diagram are:&lt;br /&gt;
&lt;br /&gt;
;Ordinary Moodle site: A typical Moodle site with teachers who want to download course templates and/or users who want to connect (enrol) with external communities &lt;br /&gt;
;Publishing site: A Moodle site that wants to make some of its courses available for download&lt;br /&gt;
;Community site: A Moodle site that provides courses that are enrollable&lt;br /&gt;
;Moodle Hub Server: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;.  The default hub will be installed at hub.moodle.org, but there can be many others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Community.png]]&lt;br /&gt;
&lt;br /&gt;
Downloadable courses&lt;br /&gt;
* (A) Sites that want to publish certain courses and make them downloadable can register them with one or more Hub Servers.&lt;br /&gt;
* (B) The Hub will check the data and make sure the course zip is downloadable, caching a copy locally.  The Hub may also have a security process to check the download for trojan horses, bad content, etc (automatic and/or manual).&lt;br /&gt;
* (C) The download process may trigger the backup process on the original server if it hasn&#039;t been done already.&lt;br /&gt;
* (D) Later, Moodle users (who have permissions to do so) can connect to a Hub (via the Repository file picker) to search for downloadable courses and choose one (receiving a download URL).&lt;br /&gt;
* (E) The repository API downloads the file and makes it available to the Moodle user so they can now continue to restore it normally.&lt;br /&gt;
&lt;br /&gt;
Enrollable courses&lt;br /&gt;
* (1) Sites that want to publish certain courses for the public to enrol in can register them with one or more CDS (including the main one at moodle.org)&lt;br /&gt;
* (2) Later, any Moodle user can connect to a CDS (via Community block in their site) to search and find courses they want to join&lt;br /&gt;
* (3) They click on a link to be sent to the other site so that they can enrol there (with or without Mnet).&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
== New teacher creating a course ==&lt;br /&gt;
&lt;br /&gt;
# New teacher needs some help with a new course for &amp;quot;Alligator farming 101&amp;quot;&lt;br /&gt;
# Teacher sees the &amp;quot;Import/Export&amp;quot; block into the &amp;quot;Alligator farming 101&amp;quot; course page and presses &amp;quot;Import course&amp;quot;&lt;br /&gt;
# Teacher browses a list of downloadable courses in the File picker (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches for &amp;quot;Alligator&amp;quot; &lt;br /&gt;
# Teacher finds 4 courses that look good, and after reading reviews and ratings, chooses one.&lt;br /&gt;
# The course is downloaded and unpacked in Moodle.&lt;br /&gt;
# The teacher now has a good starter course they can keep developing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New teacher needs help ==&lt;br /&gt;
&lt;br /&gt;
A teacher decides they need some help and wants to talk with others teaching Alligator farming.&lt;br /&gt;
&lt;br /&gt;
# Teacher goes to their &amp;quot;Community&amp;quot; block and clicks &amp;quot;Find community&amp;quot;.&lt;br /&gt;
# Moodle displays a page to search for courses (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches courses for &amp;quot;educator&amp;quot; courses on &amp;quot;Alligators&amp;quot; in their country/language.&lt;br /&gt;
# Teacher finds two, selects one, and is returned to the page where is was before clicking on &amp;quot;Find community&amp;quot;.  The selected course is now permanently listed in the Community block.&lt;br /&gt;
# Teacher clicks on the link and is taken to the course, where they can enrol and interact/learn with peers over time, subscribe to forums etc.&lt;br /&gt;
&lt;br /&gt;
== University consortium ==&lt;br /&gt;
&lt;br /&gt;
A group of five universites wants to share courses among themselves and not to the outside world.  They also want to prevent teachers from downloading courses from outside the consortium.&lt;br /&gt;
&lt;br /&gt;
# Someone downloads Moodle and installs it as a private Moodle Hub Server&lt;br /&gt;
# Admins of all five Moodle sites in the group add the URL of the private Hub to their settings and register their sites there&lt;br /&gt;
# The default Hub at hub.moodle.org is (optionally) disabled in the site-wide settings.&lt;br /&gt;
# Admins register their courses with the Hub.&lt;br /&gt;
# Teachers can now import, export or join courses via the private Hub.&lt;br /&gt;
&lt;br /&gt;
== Course creation business ==&lt;br /&gt;
&lt;br /&gt;
CoolCourses Inc have produced a set of 50 good Moodle courses which they wish to sell.&lt;br /&gt;
&lt;br /&gt;
# They set up a Moodle site with all their courses in them.&lt;br /&gt;
# They set up a Hub with a payment system, and register it with the Hub List at moodle.org so people can find it&lt;br /&gt;
# They register all their courses with their own Hub with appropriate metadata&lt;br /&gt;
# When looking for courses, users can either &lt;br /&gt;
#* find this Hub by browsing through the Hub List, or &lt;br /&gt;
#* type the URL of the Hub directly into their Moodle site&lt;br /&gt;
# When users try to download a course, they may see a payment button to download it (credit card, paypal etc)&lt;br /&gt;
# CoolCourses could provide limited access to the courses on their Moodle site using Roles, as a preview.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
There are several components:&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hub List&#039;&#039;&#039;: A list of known Hub Servers, kept on moodle.org &lt;br /&gt;
;&#039;&#039;&#039;Hub Server&#039;&#039;&#039;: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;&lt;br /&gt;
;&#039;&#039;&#039;Course registration&#039;&#039;&#039;: A new mechanism in every Moodle to register particular courses with one or more Hub Servers&lt;br /&gt;
;&#039;&#039;&#039;Community membership block&#039;&#039;&#039;: to search Hub Servers to find enrollable courses to join and bookmark&lt;br /&gt;
;&#039;&#039;&#039;Import/Export block&#039;&#039;&#039;: Makes it easy to find downloadable course templates in a Hub Server, then download them from the Hub Server and restore them locally&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub List==&lt;br /&gt;
&lt;br /&gt;
The Hub List is a list of known Hub Servers (see the next section).  This makes it easy for Moodle users to find the most appropriate Hub Servers for their needs.  To get on the Hub List, Hub Servers choose to register with moodle.org via their administration interface.&lt;br /&gt;
&lt;br /&gt;
Moodle.org will store the following information, and make it available via a browseable interface at [http://moodle.org/hubs http://moodle.org/hubs] as well as a simple XML format from [http://moodle.org/hubs/list.xml http://moodle.org/hubs/list.xml] suitable for consumption by Moodle sites.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|int&lt;br /&gt;
|Standard autoincrement&lt;br /&gt;
|-&lt;br /&gt;
|hubname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the Hub&lt;br /&gt;
|-&lt;br /&gt;
|hubdescription&lt;br /&gt;
|text&lt;br /&gt;
|Description of the hub, from the admin there&lt;br /&gt;
|-&lt;br /&gt;
|huburl&lt;br /&gt;
|varchar&lt;br /&gt;
|The full URL to the hub front page&lt;br /&gt;
|-&lt;br /&gt;
|hubsecret&lt;br /&gt;
|varchar&lt;br /&gt;
|The secret code from the hub (extra authentication)&lt;br /&gt;
|-&lt;br /&gt;
|trusted&lt;br /&gt;
|int&lt;br /&gt;
|Is the hub trusted?  Does it have good quality control?&lt;br /&gt;
|-&lt;br /&gt;
|language&lt;br /&gt;
|varchar&lt;br /&gt;
|What is the primary language of this hub?  (blank for multilanguage)&lt;br /&gt;
|-&lt;br /&gt;
|sites&lt;br /&gt;
|int&lt;br /&gt;
|Number of sites  registered on this hub&lt;br /&gt;
|-&lt;br /&gt;
|courses&lt;br /&gt;
|int&lt;br /&gt;
|Number of courses registered on this hub &lt;br /&gt;
|-&lt;br /&gt;
|timefirst&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was first registered&lt;br /&gt;
|-&lt;br /&gt;
|timelast&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was last registered/updated&lt;br /&gt;
|-&lt;br /&gt;
|contactname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|contactemail&lt;br /&gt;
|varchar&lt;br /&gt;
|Email of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|varchar&lt;br /&gt;
|hub logo url&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:Registerhub.png]]&lt;br /&gt;
&lt;br /&gt;
following a hub list table on Moodle.org:&lt;br /&gt;
[[Image:Hublist.png]]&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub Server==&lt;br /&gt;
&lt;br /&gt;
The Moodle Hub Server (aka Hub) is a separate system (based on Moodle technology) that allows Moodle sites to register their courses for listing there.&lt;br /&gt;
&lt;br /&gt;
A default installation of this software will be running at &#039;&#039;&#039;hub.moodle.org&#039;&#039;&#039;, but anyone else can download it and set up their own hub for private or public uses.   A default installation of Moodle can also be a Hub, or if the admin chooses, a site can be a dedicated Hub if they choose that option during install (in this case the front page of the site will be a dedicated site search for the public).&lt;br /&gt;
&lt;br /&gt;
Hubs can optionally register themselves in the Hub List so that they are easier to find and so they can become a &amp;quot;Trusted Hub&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A hub server has some config fields (saved into its database):&lt;br /&gt;
* name&lt;br /&gt;
* description&lt;br /&gt;
* language&lt;br /&gt;
* contact name&lt;br /&gt;
* contact email&lt;br /&gt;
* enable&lt;br /&gt;
* hub secret (generated the first time the hub is registered on Moodle.org, it will never change)&lt;br /&gt;
* logo url &lt;br /&gt;
* protected web search interface &#039;&#039;&#039;(TODO: the protection method needs to be defined)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data structure ===&lt;br /&gt;
&lt;br /&gt;
==== Sites ====&lt;br /&gt;
&lt;br /&gt;
Primarily this table will store information about the sites that have registered course information on that Hub.  On hub.moodle.org this information will also be used for [http://moodle.org/stats general statistics] and the listing of [http://moodle.org/sites registered sites].&lt;br /&gt;
&lt;br /&gt;
* Id&lt;br /&gt;
* Site name &lt;br /&gt;
* Site description&lt;br /&gt;
* URL&lt;br /&gt;
* Address&lt;br /&gt;
*# Country code (AU, FR etc) [http://cvs.moodle.org/moodle/lang/en_utf8/countries.php?view=markup lang/XX_utf8/countries.php]&lt;br /&gt;
*# Region/state (based on list) [http://www.commondatahub.com/live/geography/state_province_region/iso_3166_2_state_codes ISO 3166-2 (XX-XXX)]&lt;br /&gt;
*# Street address &lt;br /&gt;
*# Geolocation (for mapping)&lt;br /&gt;
* Site manager&lt;br /&gt;
*# Name&lt;br /&gt;
*# Email&lt;br /&gt;
*# Phone&lt;br /&gt;
* Contact form yes/no?&lt;br /&gt;
* Default site language&lt;br /&gt;
* Moodle version (eg 2009050502)&lt;br /&gt;
* Moodle release (eg 1.9.5+)&lt;br /&gt;
* Site ip address (updated at every update)&lt;br /&gt;
* Unique SiteID code generated by Moodle site&lt;br /&gt;
* Confirmed by admin&lt;br /&gt;
* Site is &amp;quot;trusted&amp;quot; - this means we don&#039;t manually check data in future from this site.&lt;br /&gt;
* Mnet/WS information, enough to let a teacher authenticate to the site using Mnet 2.0 (optional)&lt;br /&gt;
* Harvesting url&lt;br /&gt;
* Time updated&lt;br /&gt;
* Time created&lt;br /&gt;
* Currently unreachable&lt;br /&gt;
* Time link was last checked&lt;br /&gt;
&lt;br /&gt;
Extra information that will only be kept on hub.moodle.org (only published in aggregate form):&lt;br /&gt;
&lt;br /&gt;
* Tool usage stats &lt;br /&gt;
** number of courses&lt;br /&gt;
** number of users&lt;br /&gt;
** number of enrolments&lt;br /&gt;
** number of posts&lt;br /&gt;
** number of resources&lt;br /&gt;
** number of questions&lt;br /&gt;
** median course size&lt;br /&gt;
* Subscribed to securityalerts@lists.moodle.org&lt;br /&gt;
&lt;br /&gt;
==== Courses ====&lt;br /&gt;
&lt;br /&gt;
This table stores registered courses, one record per course.  Some courses will be &amp;quot;downloadable&amp;quot;, some will be enrollable, so different fields can be used.&lt;br /&gt;
&lt;br /&gt;
* Course ID&lt;br /&gt;
* Site ID (foreign key to sites table)&lt;br /&gt;
* Dublin Core Metadata Element Set, Version 1.1&lt;br /&gt;
*# Contributor - course manager names or whoever the publisher nominates&lt;br /&gt;
*# Coverage - User tags&lt;br /&gt;
*# Creator - main teacher name or copyright holder or whoever the publisher nominates&lt;br /&gt;
*# Date - date this was last published/updated&lt;br /&gt;
*# Description - course description&lt;br /&gt;
*# Format - zip / url&lt;br /&gt;
*# Identifier - course shortname (unique on the original site)&lt;br /&gt;
*# Language - based on lang.php&lt;br /&gt;
*# Publisher - the name of the person who caused this record to be entered here&lt;br /&gt;
*# Relation - the site id that it came from&lt;br /&gt;
*# Rights - one of a standard set of open source, creative commons and other licenses&lt;br /&gt;
*# Source - original URL of the course&lt;br /&gt;
*# Subject - The best-matching item from ([https://docs.moodle.org/en/Course_Standard_Tags  Course Standard Tags ])&lt;br /&gt;
*# Title - Course fullname&lt;br /&gt;
*# Type - &amp;quot;course&amp;quot; (later there might other types such as activities or SCORM packages etc)&lt;br /&gt;
* Audience:  Educators | Students | Admins&lt;br /&gt;
* Educational level being discussed (for educators audience only):  Tertiary | Secondary | Primary | Government | Corporate&lt;br /&gt;
* Is a course map supplied?   (Simple XML description of course structure, could be rendered graphically later [http://kn.open.ac.uk/public/workspace.cfm?wpid=8690 CompendiumLD] )&lt;br /&gt;
&lt;br /&gt;
* Availability (public/private)&lt;br /&gt;
* Download URL (usually a local cached zip but could be anything else, including empty for non-downloadable)&lt;br /&gt;
* Original Download URL (usually a download script on the original Moodle site, used by Hub to get cache)&lt;br /&gt;
* Is the course trusted?  (all downloadable courses from non-trusted sites start as &amp;quot;no&amp;quot;, then this gets changed by someone who checks it)&lt;br /&gt;
* Is the course enrollable anyone with an account?&lt;br /&gt;
* Is guest access allowed?&lt;br /&gt;
* Are screenshots supplied?   (stored on disk under id of this record)&lt;br /&gt;
* Enrol Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
* Download Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
&lt;br /&gt;
==== Course feedback ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id&lt;br /&gt;
* type (bug / comment)&lt;br /&gt;
* text &lt;br /&gt;
* rating&lt;br /&gt;
&lt;br /&gt;
==== Course content ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id &lt;br /&gt;
* module type (activity / block)&lt;br /&gt;
* module name (forum, resource etc)&lt;br /&gt;
* count&lt;br /&gt;
&lt;br /&gt;
==== Course outcomes ====&lt;br /&gt;
&lt;br /&gt;
* id&lt;br /&gt;
* course id &lt;br /&gt;
* outcome  (text)&lt;br /&gt;
&lt;br /&gt;
=== Web user interface ===&lt;br /&gt;
&lt;br /&gt;
If visiting the hub via the web, it will provide an interface for full searching and browsing.  &lt;br /&gt;
&lt;br /&gt;
The web interface can be protected from access.  The hub at moodle.org will of course be open to all.&lt;br /&gt;
&lt;br /&gt;
Here is a very rough mockup of how it could look:&lt;br /&gt;
&lt;br /&gt;
[[Image:Webinterface.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Search_hub_moodle.png]]&lt;br /&gt;
&lt;br /&gt;
The web interface allows users to:&lt;br /&gt;
&lt;br /&gt;
* search by keyword (descriptions, titles, tags, subject etc)&lt;br /&gt;
* browse a list of courses by subject&lt;br /&gt;
* go directly to a course (if marked for public use)&lt;br /&gt;
* preview a course (if screenshots have been provided, or the original URL location)&lt;br /&gt;
* download the course to desktop (only if an download url has been set)&lt;br /&gt;
* If logged in to the Hub, users can also:&lt;br /&gt;
** give a rating to the course&lt;br /&gt;
** write a comment for the course - &amp;lt;span style=color:blue&amp;gt;use comment 2.0 API&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When displaying courses, you can see and sort by:&lt;br /&gt;
&lt;br /&gt;
* Title - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Description&lt;br /&gt;
* Tags  - &#039;&#039;Sortable &amp;lt;span style=color:blue&amp;gt;(first tag retrieved by the request is considered)&amp;lt;/span&amp;gt;&#039;&#039;&lt;br /&gt;
* Screenshot(s)&lt;br /&gt;
* Cost (if any) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Rating (10-point scale displayed as 5 stars, and only if you are logged in to moodle.org) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Comments &lt;br /&gt;
* Moodle site name&lt;br /&gt;
* Date added to directory&lt;br /&gt;
* Date last updated in directory &lt;br /&gt;
* Date last checked (by a cron job)&lt;br /&gt;
* Audience (teachers, students, admins)&lt;br /&gt;
* Teacher name(s) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Web service user interface ===&lt;br /&gt;
&lt;br /&gt;
A REST-based web services interface will be provided for other systems (eg Moodle sites) to use directly.&lt;br /&gt;
&lt;br /&gt;
Web services can search on:&lt;br /&gt;
* string search&lt;br /&gt;
* array language&lt;br /&gt;
* array cost&lt;br /&gt;
* array Moodle url&lt;br /&gt;
* Others?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hub admin interface ===&lt;br /&gt;
&lt;br /&gt;
The hub will have a Hub admin interface (at http://hubsite.org/hub) where the hub is managed.  Admin processes include:&lt;br /&gt;
&lt;br /&gt;
* Listing, approving and editing the sites registered with the hub &lt;br /&gt;
* Listing, approving and editing the course descriptions, metadata etc.&lt;br /&gt;
* Registering/updating the Hub with the Hub List&lt;br /&gt;
* Configuring Hub behaviour and the appearance of the home page.&lt;br /&gt;
&lt;br /&gt;
== Site registration ==&lt;br /&gt;
&lt;br /&gt;
The existing site registration form in Moodle will be extended so that admins can:&lt;br /&gt;
&lt;br /&gt;
# choose one or more Hubs to register with (hub.moodle.org and/or others in the Hub List, or directly to a particular Hub specified by URL)&lt;br /&gt;
# choose to enable cron to re-send statistics to the hub on a periodic basis.&lt;br /&gt;
# choose to enable the hub to harvest courses on a periodic basis (TODO: not shown on image)&lt;br /&gt;
&lt;br /&gt;
Each Moodle.org Hub will perform a check every week to verify that each site is accessible and optionally to harvest the courses from that site.  Sites that fail two or three checks in a row will be disable in the Hub listing.&lt;br /&gt;
&lt;br /&gt;
[[Image:SiteRegistration.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Community membership ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Community&amp;quot; block allows people to find and subscribe to external courses that they want to be part of.&lt;br /&gt;
&lt;br /&gt;
Visibility of the block and the features within it are controlled by roles, and contains:&lt;br /&gt;
&lt;br /&gt;
# &#039;Bookmarks&#039; of previously-selected (subscribed) external courses (to make revisiting easy) grouped by site, which can be edited/deleted etc&lt;br /&gt;
# A link to a search script - &amp;quot;Add new courses...&amp;quot;&lt;br /&gt;
# A search script to browse/search one or more Hubs (via web services to get the data, with the interface rendered by the local script).  Users can select joinable courses from the list and they&#039;ll get added to the list in the block.&lt;br /&gt;
&lt;br /&gt;
Generally the links will be just be an ordinary URL and the remote site will be responsible for authentication.&lt;br /&gt;
&lt;br /&gt;
If the foreign site has an Mnet connection set up with the current site then login will be immediate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Addacourse.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Import/Export courses ==&lt;br /&gt;
&lt;br /&gt;
The Import/Export block will be available on course pages and contains buttons to:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Publish course&#039;&#039;&#039;: to publish or update the description of the current course in one or more Hubs (admins only)&lt;br /&gt;
* &#039;&#039;&#039;Export course&#039;&#039;&#039;: publish/upload entire course (as Moodle Backup minus userdata) somewhere (eg a Hub) (via Portfolio API plugins)&lt;br /&gt;
* &#039;&#039;&#039;Import course&#039;&#039;&#039;: find/download/install a course template from a Hub or from another course on same site  (Repository API plugins)&lt;br /&gt;
&lt;br /&gt;
=== Publish course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Publish&#039;&#039;&#039; button only exists if the current user has the appropriate capabilities and if the current Moodle site has been registered with a Hub.&lt;br /&gt;
&lt;br /&gt;
[[Image:Coursepublishing.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Choosing &amp;quot;Publish&amp;quot; goes to a script where you can chose from the registered Hubs and whether you want to publish the course as:&lt;br /&gt;
* enrollable, so that others can come here and use the course where it is, and/or &lt;br /&gt;
* downloadable, so that a Hub can offer this course for download to others&lt;br /&gt;
&lt;br /&gt;
If the user wants to offer this course for download, then they are directed to the standard backup process to create and define the backup file (without users!).  If the backup is successful the zip is stored in a standard place and then the user is returned to the publish script to continue.  (If downloads are not required then this whole step is skipped).&lt;br /&gt;
&lt;br /&gt;
It allows the user to set up full , and especially whether you want to advertise this course as being:&lt;br /&gt;
&lt;br /&gt;
Now the script presents a form with metadata that this course will be published with on the chosen Hub(s) (this is also available in the course settings page).  Metadata includes information such as description, licensing, categories, screenshots etc (see the [[#Courses|Courses]] section above for more info).&lt;br /&gt;
&lt;br /&gt;
After checking/updating the metadata, the script will push the data to the selected Hub.  The Hub will bounce back a confirmation which gets saved locally as the &amp;quot;Last publish date&amp;quot; for that course.&lt;br /&gt;
&lt;br /&gt;
If the checkbox to allow download was selected, then the URL to a course download script in the current Moodle is included with the metadata.  This URL contains a token (eg an MD5 stored in the course table) that only the Hub knows.&lt;br /&gt;
&lt;br /&gt;
The course download script (eg /course/download.php?id=55&amp;amp;secret=XXXXX) will send the cached .zip file for the given course.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Publish course settings ====&lt;br /&gt;
&lt;br /&gt;
Some publish settings and info will also be available anytime via the course settings page under a &amp;quot;Publish&amp;quot; tab:&lt;br /&gt;
&lt;br /&gt;
* Which hubs has this course been published on, and when&lt;br /&gt;
* Full metadata&lt;br /&gt;
* Screenshots&lt;br /&gt;
&lt;br /&gt;
=== Export course ===&lt;br /&gt;
&lt;br /&gt;
A standard export will do a normal backup (taking care to remove userdata by default), and at the end will call the portfolio API to push that file to a connected portfolio.  Portfolio (export) plugins could include:&lt;br /&gt;
&lt;br /&gt;
* downloading it to the local computer&lt;br /&gt;
* uploading it as a zip to any general purpose repository&lt;br /&gt;
* copy the course to another Moodle site set up with Mnet peering.&lt;br /&gt;
&lt;br /&gt;
Pushing it to another Moodle site would trigger extra behaviours:&lt;br /&gt;
&lt;br /&gt;
* Permissions would be checked on the destination Moodle&lt;br /&gt;
* The course can be immediately restored on the external Moodle in a special &amp;quot;New&amp;quot; category as a hidden course&lt;br /&gt;
* Someone on the external Moodle can be alerted to approve/unhide the new course&lt;br /&gt;
&lt;br /&gt;
=== Import course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Import course&#039;&#039;&#039; button will pull up a normal file picker to browse repositories for files with a mimetype matching .mbkup.zip.&lt;br /&gt;
&lt;br /&gt;
One special repository plugin called &amp;quot;Courses&amp;quot; allows the user to:&lt;br /&gt;
&lt;br /&gt;
* find Hubs by downloading the Hub List&lt;br /&gt;
* search particular Hubs for downloadable courses (only)&lt;br /&gt;
* search other courses on the same server (replacing the existing import function we have)&lt;br /&gt;
&lt;br /&gt;
Once the user has selected one of these courses and passed any challenge there might be (eg the Hub could potentially require a password or payment or a license agreement form), then the zip file is downloaded to the local Moodle, and then the user is passed to the standard restore process.&lt;br /&gt;
&lt;br /&gt;
[[Image:FilePicker_all_JS.png|900px]]&lt;br /&gt;
[[Image:FilePicker_JS_course_selector.png|900px]]&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
Full schedule and progress is in the tracker: MDL-19309&lt;br /&gt;
&lt;br /&gt;
# Moodle.org Hub List&lt;br /&gt;
# Hub registration form&lt;br /&gt;
# Hub Web interface&lt;br /&gt;
# Hub web service interface &lt;br /&gt;
# Improve Site registration form&lt;br /&gt;
# Community block&lt;br /&gt;
# Publish courses&lt;br /&gt;
# Import courses &lt;br /&gt;
# Export courses&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Community hub technotes]] - relating to MNet developments in Moodle 1.8&lt;br /&gt;
* MDL-18580 - Community Hub tracker issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MNET]]&lt;br /&gt;
&lt;br /&gt;
[[ja:開発:コミュニティハブ]]&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2469</id>
		<title>Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Community_hub&amp;diff=2469"/>
		<updated>2009-07-06T14:46:22Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Sites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT STATE: Proposal&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;MAIN TRACKER ISSUE&#039;&#039;&#039;: MDL-19309&lt;br /&gt;
* &#039;&#039;&#039;DISCUSSION AND COMMENTS&#039;&#039;&#039;: [http://moodle.org/mod/forum/view.php?id=7330 Hub servers] forum in Using Moodle&lt;br /&gt;
* &#039;&#039;&#039;MAIN AUTHORS&#039;&#039;&#039;: [[User:Martin_Dougiamas|Martin Dougiamas]] and [[User:jerome_mouneyrac|Jerome Mouneyrac]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page describes an overall functional specification for the &amp;quot;Moodle Community Hub&amp;quot; project, which consists of a new system (the Moodle Hub Server) and several new features in Moodle 2.0. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Goals and rationale =&lt;br /&gt;
&lt;br /&gt;
The main goals of the Community hub project are:&lt;br /&gt;
&lt;br /&gt;
# to allow people to easily find courses around the world that they want to enrol in:&lt;br /&gt;
#* educators want to find &#039;&#039;&#039;communities of practice&#039;&#039;&#039; that are subject or region-oriented, so that they can associate with their peers on a long-term basis.&lt;br /&gt;
#* other learners want to find and study courses on various other subjects&lt;br /&gt;
# to make it easy for educators to find and download &#039;&#039;&#039;course templates&#039;&#039;&#039; from other people.  This will help educators share and identify examples of &#039;&#039;&#039;best practice&#039;&#039;&#039; in online pedagogy and hopefully improve the average quality of online courses.&lt;br /&gt;
&lt;br /&gt;
Finally, we want to do all this in the simplest, safest way possible, while allowing a range of scenarios such as courses that are public or private, free or paid, so that the Moodle community can build solutions for themselves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the basic idea.  The systems in this diagram are:&lt;br /&gt;
&lt;br /&gt;
;Ordinary Moodle site: A typical Moodle site with teachers who want to download course templates and/or users who want to connect (enrol) with external communities &lt;br /&gt;
;Publishing site: A Moodle site that wants to make some of its courses available for download&lt;br /&gt;
;Community site: A Moodle site that provides courses that are enrollable&lt;br /&gt;
;Moodle Hub Server: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;.  The default hub will be installed at hub.moodle.org, but there can be many others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Community.png]]&lt;br /&gt;
&lt;br /&gt;
Downloadable courses&lt;br /&gt;
* (A) Sites that want to publish certain courses and make them downloadable can register them with one or more Hub Servers.&lt;br /&gt;
* (B) The Hub will check the data and make sure the course zip is downloadable, caching a copy locally.  The Hub may also have a security process to check the download for trojan horses, bad content, etc (automatic and/or manual).&lt;br /&gt;
* (C) The download process may trigger the backup process on the original server if it hasn&#039;t been done already.&lt;br /&gt;
* (D) Later, Moodle users (who have permissions to do so) can connect to a Hub (via the Repository file picker) to search for downloadable courses and choose one (receiving a download URL).&lt;br /&gt;
* (E) The repository API downloads the file and makes it available to the Moodle user so they can now continue to restore it normally.&lt;br /&gt;
&lt;br /&gt;
Enrollable courses&lt;br /&gt;
* (1) Sites that want to publish certain courses for the public to enrol in can register them with one or more CDS (including the main one at moodle.org)&lt;br /&gt;
* (2) Later, any Moodle user can connect to a CDS (via Community block in their site) to search and find courses they want to join&lt;br /&gt;
* (3) They click on a link to be sent to the other site so that they can enrol there (with or without Mnet).&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
== New teacher creating a course ==&lt;br /&gt;
&lt;br /&gt;
# New teacher needs some help with a new course for &amp;quot;Alligator farming 101&amp;quot;&lt;br /&gt;
# Teacher sees the &amp;quot;Import/Export&amp;quot; block into the &amp;quot;Alligator farming 101&amp;quot; course page and presses &amp;quot;Import course&amp;quot;&lt;br /&gt;
# Teacher browses a list of downloadable courses in the File picker (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches for &amp;quot;Alligator&amp;quot; &lt;br /&gt;
# Teacher finds 4 courses that look good, and after reading reviews and ratings, chooses one.&lt;br /&gt;
# The course is downloaded and unpacked in Moodle.&lt;br /&gt;
# The teacher now has a good starter course they can keep developing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New teacher needs help ==&lt;br /&gt;
&lt;br /&gt;
A teacher decides they need some help and wants to talk with others teaching Alligator farming.&lt;br /&gt;
&lt;br /&gt;
# Teacher goes to their &amp;quot;Community&amp;quot; block and clicks &amp;quot;Find community&amp;quot;.&lt;br /&gt;
# Moodle displays a page to search for courses (the data comes from one or more Hubs via web services)&lt;br /&gt;
# Teacher searches courses for &amp;quot;educator&amp;quot; courses on &amp;quot;Alligators&amp;quot; in their country/language.&lt;br /&gt;
# Teacher finds two, selects one, and is returned to the page where is was before clicking on &amp;quot;Find community&amp;quot;.  The selected course is now permanently listed in the Community block.&lt;br /&gt;
# Teacher clicks on the link and is taken to the course, where they can enrol and interact/learn with peers over time, subscribe to forums etc.&lt;br /&gt;
&lt;br /&gt;
== University consortium ==&lt;br /&gt;
&lt;br /&gt;
A group of five universites wants to share courses among themselves and not to the outside world.  They also want to prevent teachers from downloading courses from outside the consortium.&lt;br /&gt;
&lt;br /&gt;
# Someone downloads Moodle and installs it as a private Moodle Hub Server&lt;br /&gt;
# Admins of all five Moodle sites in the group add the URL of the private Hub to their settings and register their sites there&lt;br /&gt;
# The default Hub at hub.moodle.org is (optionally) disabled in the site-wide settings.&lt;br /&gt;
# Admins register their courses with the Hub.&lt;br /&gt;
# Teachers can now import, export or join courses via the private Hub.&lt;br /&gt;
&lt;br /&gt;
== Course creation business ==&lt;br /&gt;
&lt;br /&gt;
CoolCourses Inc have produced a set of 50 good Moodle courses which they wish to sell.&lt;br /&gt;
&lt;br /&gt;
# They set up a Moodle site with all their courses in them.&lt;br /&gt;
# They set up a Hub with a payment system, and register it with the Hub List at moodle.org so people can find it&lt;br /&gt;
# They register all their courses with their own Hub with appropriate metadata&lt;br /&gt;
# When looking for courses, users can either &lt;br /&gt;
#* find this Hub by browsing through the Hub List, or &lt;br /&gt;
#* type the URL of the Hub directly into their Moodle site&lt;br /&gt;
# When users try to download a course, they may see a payment button to download it (credit card, paypal etc)&lt;br /&gt;
# CoolCourses could provide limited access to the courses on their Moodle site using Roles, as a preview.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
There are several components:&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hub List&#039;&#039;&#039;: A list of known Hub Servers, kept on moodle.org &lt;br /&gt;
;&#039;&#039;&#039;Hub Server&#039;&#039;&#039;: A new open source web application for publishing a list of registered courses that are &#039;&#039;&#039;downloadable&#039;&#039;&#039; or &#039;&#039;&#039;enrollable&#039;&#039;&#039;&lt;br /&gt;
;&#039;&#039;&#039;Course registration&#039;&#039;&#039;: A new mechanism in every Moodle to register particular courses with one or more Hub Servers&lt;br /&gt;
;&#039;&#039;&#039;Community membership block&#039;&#039;&#039;: to search Hub Servers to find enrollable courses to join and bookmark&lt;br /&gt;
;&#039;&#039;&#039;Import/Export block&#039;&#039;&#039;: Makes it easy to find downloadable course templates in a Hub Server, then download them from the Hub Server and restore them locally&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub List==&lt;br /&gt;
&lt;br /&gt;
The Hub List is a list of known Hub Servers (see the next section).  This makes it easy for Moodle users to find the most appropriate Hub Servers for their needs.  To get on the Hub List, Hub Servers choose to register with moodle.org via their administration interface.&lt;br /&gt;
&lt;br /&gt;
Moodle.org will store the following information, and make it available via a browseable interface at [http://moodle.org/hubs http://moodle.org/hubs] as well as a simple XML format from [http://moodle.org/hubs/list.xml http://moodle.org/hubs/list.xml] suitable for consumption by Moodle sites.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|int&lt;br /&gt;
|Standard autoincrement&lt;br /&gt;
|-&lt;br /&gt;
|hubname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the Hub&lt;br /&gt;
|-&lt;br /&gt;
|hubdescription&lt;br /&gt;
|text&lt;br /&gt;
|Description of the hub, from the admin there&lt;br /&gt;
|-&lt;br /&gt;
|huburl&lt;br /&gt;
|varchar&lt;br /&gt;
|The full URL to the hub front page&lt;br /&gt;
|-&lt;br /&gt;
|hubsecret&lt;br /&gt;
|varchar&lt;br /&gt;
|The secret code from the hub (extra authentication)&lt;br /&gt;
|-&lt;br /&gt;
|trusted&lt;br /&gt;
|int&lt;br /&gt;
|Is the hub trusted?  Does it have good quality control?&lt;br /&gt;
|-&lt;br /&gt;
|language&lt;br /&gt;
|varchar&lt;br /&gt;
|What is the primary language of this hub?  (blank for multilanguage)&lt;br /&gt;
|-&lt;br /&gt;
|sites&lt;br /&gt;
|int&lt;br /&gt;
|Number of sites  registered on this hub&lt;br /&gt;
|-&lt;br /&gt;
|courses&lt;br /&gt;
|int&lt;br /&gt;
|Number of courses registered on this hub &lt;br /&gt;
|-&lt;br /&gt;
|timefirst&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was first registered&lt;br /&gt;
|-&lt;br /&gt;
|timelast&lt;br /&gt;
|int&lt;br /&gt;
|Time that the hub was last registered/updated&lt;br /&gt;
|-&lt;br /&gt;
|contactname&lt;br /&gt;
|varchar&lt;br /&gt;
|Name of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|contactemail&lt;br /&gt;
|varchar&lt;br /&gt;
|Email of the contact person&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|varchar&lt;br /&gt;
|hub logo url&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:Registerhub.png]]&lt;br /&gt;
&lt;br /&gt;
following a hub list table on Moodle.org:&lt;br /&gt;
[[Image:Hublist.png]]&lt;br /&gt;
&lt;br /&gt;
==Moodle Hub Server==&lt;br /&gt;
&lt;br /&gt;
The Moodle Hub Server (aka Hub) is a separate system (based on Moodle technology) that allows Moodle sites to register their courses for listing there.&lt;br /&gt;
&lt;br /&gt;
A default installation of this software will be running at &#039;&#039;&#039;hub.moodle.org&#039;&#039;&#039;, but anyone else can download it and set up their own hub for private or public uses.   A default installation of Moodle can also be a Hub, or if the admin chooses, a site can be a dedicated Hub if they choose that option during install (in this case the front page of the site will be a dedicated site search for the public).&lt;br /&gt;
&lt;br /&gt;
Hubs can optionally register themselves in the Hub List so that they are easier to find and so they can become a &amp;quot;Trusted Hub&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A hub server has some config fields (saved into its database):&lt;br /&gt;
* name&lt;br /&gt;
* description&lt;br /&gt;
* language&lt;br /&gt;
* contact name&lt;br /&gt;
* contact email&lt;br /&gt;
* enable&lt;br /&gt;
* hub secret (generated the first time the hub is registered on Moodle.org, it will never change)&lt;br /&gt;
* logo url &lt;br /&gt;
* protected web search interface &#039;&#039;&#039;(TODO: the protection method needs to be defined)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data structure ===&lt;br /&gt;
&lt;br /&gt;
==== Sites ====&lt;br /&gt;
&lt;br /&gt;
Primarily this table will store information about the sites that have registered course information on that Hub.  On hub.moodle.org this information will also be used for [http://moodle.org/stats general statistics] and the listing of [http://moodle.org/sites registered sites].&lt;br /&gt;
&lt;br /&gt;
* Id&lt;br /&gt;
* Site name &lt;br /&gt;
* Site description&lt;br /&gt;
* URL&lt;br /&gt;
* Address&lt;br /&gt;
*# Country code (AU, FR etc) [http://cvs.moodle.org/moodle/lang/en_utf8/countries.php?view=markup lang/XX_utf8/countries.php]&lt;br /&gt;
*# Region/state (based on list) [http://www.commondatahub.com/live/geography/state_province_region/iso_3166_2_state_codes ISO 3166-2 (XX-XXX)]&lt;br /&gt;
*# Street address &lt;br /&gt;
*# Geolocation (for mapping)&lt;br /&gt;
* Site manager&lt;br /&gt;
*# Name&lt;br /&gt;
*# Email&lt;br /&gt;
*# Phone&lt;br /&gt;
* Contact form yes/no?&lt;br /&gt;
* Default site language&lt;br /&gt;
* Moodle version (eg 2009050502)&lt;br /&gt;
* Moodle release (eg 1.9.5+)&lt;br /&gt;
* Site ip address (updated at every update)&lt;br /&gt;
* Unique SiteID code generated by Moodle site&lt;br /&gt;
* Confirmed by admin&lt;br /&gt;
* Site is &amp;quot;trusted&amp;quot; - this means we don&#039;t manually check data in future from this site.&lt;br /&gt;
* Mnet/WS information, enough to let a teacher authenticate to the site using Mnet 2.0 (optional)&lt;br /&gt;
* Harvesting url&lt;br /&gt;
* Time updated&lt;br /&gt;
* Time created&lt;br /&gt;
* Currently unreachable&lt;br /&gt;
* Time link was last checked&lt;br /&gt;
&lt;br /&gt;
Extra information that will only be kept on hub.moodle.org (only published in aggregate form):&lt;br /&gt;
&lt;br /&gt;
* Tool usage stats &lt;br /&gt;
** number of courses&lt;br /&gt;
** number of users&lt;br /&gt;
** number of enrolments&lt;br /&gt;
** number of posts&lt;br /&gt;
** number of resources&lt;br /&gt;
** number of questions&lt;br /&gt;
** median course size&lt;br /&gt;
* Subscribed to securityalerts@lists.moodle.org&lt;br /&gt;
&lt;br /&gt;
==== Courses ====&lt;br /&gt;
&lt;br /&gt;
This table stores registered courses, one record per course.  Some courses will be &amp;quot;downloadable&amp;quot;, some will be enrollable, so different fields can be used.&lt;br /&gt;
&lt;br /&gt;
* Course ID&lt;br /&gt;
* Site ID (foreign key to sites table)&lt;br /&gt;
* Dublin Core Metadata Element Set, Version 1.1&lt;br /&gt;
*# Contributor - course manager names or whoever the publisher nominates&lt;br /&gt;
*# Coverage - User tags&lt;br /&gt;
*# Creator - main teacher name or copyright holder or whoever the publisher nominates&lt;br /&gt;
*# Date - date this was last published/updated&lt;br /&gt;
*# Description - course description&lt;br /&gt;
*# Format - zip / url&lt;br /&gt;
*# Identifier - course shortname (unique on the original site)&lt;br /&gt;
*# Language - based on lang.php&lt;br /&gt;
*# Publisher - the name of the person who caused this record to be entered here&lt;br /&gt;
*# Relation - the site id that it came from&lt;br /&gt;
*# Rights - one of a standard set of open source, creative commons and other licenses&lt;br /&gt;
*# Source - original URL of the course&lt;br /&gt;
*# Subject - The best-matching item from ([https://docs.moodle.org/en/Course_Standard_Tags  Course Standard Tags ])&lt;br /&gt;
*# Title - Course fullname&lt;br /&gt;
*# Type - &amp;quot;course&amp;quot; (later there might other types such as activities or SCORM packages etc)&lt;br /&gt;
* Audience:  Educators | Students | Admins&lt;br /&gt;
* Educational level being discussed (for educators audience only):  Tertiary | Secondary | Primary | Government | Corporate&lt;br /&gt;
* Is a course map supplied?   (Simple XML description of course structure, could be rendered graphically later [http://kn.open.ac.uk/public/workspace.cfm?wpid=8690 CompendiumLD] )&lt;br /&gt;
&lt;br /&gt;
* Availability (public/private)&lt;br /&gt;
* Download URL (usually a local cached zip but could be anything else, including empty for non-downloadable)&lt;br /&gt;
* Original Download URL (usually a download script on the original Moodle site, used by Hub to get cache)&lt;br /&gt;
* Is the course trusted?  (all downloadable courses from non-trusted sites start as &amp;quot;no&amp;quot;, then this gets changed by someone who checks it)&lt;br /&gt;
* Is the course enrollable anyone with an account?&lt;br /&gt;
* Is guest access allowed?&lt;br /&gt;
* Are screenshots supplied?   (stored on disk under id of this record)&lt;br /&gt;
* Enrol Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
* Download Cost (and currency) [http://en.wikipedia.org/wiki/ISO_4217 ISO 4217]&lt;br /&gt;
&lt;br /&gt;
==== Course feedback ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id&lt;br /&gt;
* type (bug / comment)&lt;br /&gt;
* text &lt;br /&gt;
* rating&lt;br /&gt;
&lt;br /&gt;
==== Course content ====&lt;br /&gt;
&lt;br /&gt;
* id &lt;br /&gt;
* course id &lt;br /&gt;
* module type (activity / block)&lt;br /&gt;
* module name (forum, resource etc)&lt;br /&gt;
* count&lt;br /&gt;
&lt;br /&gt;
==== Course outcomes ====&lt;br /&gt;
&lt;br /&gt;
* id&lt;br /&gt;
* course id &lt;br /&gt;
* outcome  (text)&lt;br /&gt;
&lt;br /&gt;
=== Web user interface ===&lt;br /&gt;
&lt;br /&gt;
If visiting the hub via the web, it will provide an interface for full searching and browsing.  &lt;br /&gt;
&lt;br /&gt;
The web interface can be protected from access.  The hub at moodle.org will of course be open to all.&lt;br /&gt;
&lt;br /&gt;
Here is a very rough mockup of how it could look:&lt;br /&gt;
&lt;br /&gt;
[[Image:Webinterface.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Search_hub_moodle.png]]&lt;br /&gt;
&lt;br /&gt;
The web interface allows users to:&lt;br /&gt;
&lt;br /&gt;
* search by keyword (descriptions, titles, tags, subject etc)&lt;br /&gt;
* browse a list of courses by subject&lt;br /&gt;
* go directly to a course (if marked for public use)&lt;br /&gt;
* preview a course (if screenshots have been provided, or the original URL location)&lt;br /&gt;
* download the course to desktop (only if an download url has been set)&lt;br /&gt;
* If logged in to the Hub, users can also:&lt;br /&gt;
** give a rating to the course&lt;br /&gt;
** write a comment for the course - &amp;lt;span style=color:blue&amp;gt;use comment 2.0 API&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When displaying courses, you can see and sort by:&lt;br /&gt;
&lt;br /&gt;
* Title - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Description&lt;br /&gt;
* Tags  - &#039;&#039;Sortable &amp;lt;span style=color:blue&amp;gt;(first tag retrieved by the request is considered)&amp;lt;/span&amp;gt;&#039;&#039;&lt;br /&gt;
* Screenshot(s)&lt;br /&gt;
* Cost (if any) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Rating (10-point scale displayed as 5 stars, and only if you are logged in to moodle.org) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
* Comments &lt;br /&gt;
* Moodle site name&lt;br /&gt;
* Date added to directory&lt;br /&gt;
* Date last updated in directory &lt;br /&gt;
* Date last checked (by a cron job)&lt;br /&gt;
* Audience (teachers, students, admins)&lt;br /&gt;
* Teacher name(s) - &#039;&#039;Sortable&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Web service user interface ===&lt;br /&gt;
&lt;br /&gt;
A REST-based web services interface will be provided for other systems (eg Moodle sites) to use directly.&lt;br /&gt;
&lt;br /&gt;
Web services can search on:&lt;br /&gt;
* string search&lt;br /&gt;
* array language&lt;br /&gt;
* array cost&lt;br /&gt;
* array Moodle url&lt;br /&gt;
* Others?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hub admin interface ===&lt;br /&gt;
&lt;br /&gt;
The hub will have a Hub admin interface (at http://hubsite.org/hub) where the hub is managed.  Admin processes include:&lt;br /&gt;
&lt;br /&gt;
* Listing, approving and editing the sites registered with the hub &lt;br /&gt;
* Listing, approving and editing the course descriptions, metadata etc.&lt;br /&gt;
* Registering/updating the Hub with the Hub List&lt;br /&gt;
* Configuring Hub behaviour and the appearance of the home page.&lt;br /&gt;
&lt;br /&gt;
== Site registration ==&lt;br /&gt;
&lt;br /&gt;
The existing site registration form in Moodle will be extended so that admins can:&lt;br /&gt;
&lt;br /&gt;
# choose one or more Hubs to register with (hub.moodle.org and/or others in the Hub List, or directly to a particular Hub specified by URL)&lt;br /&gt;
# choose to enable cron to re-send statistics to the hub on a periodic basis.&lt;br /&gt;
&lt;br /&gt;
Each Moodle.org Hub will perform a check every week to verify that each site is accessible.  Sites that fail two or three checks in a row will be disable in the Hub listing.&lt;br /&gt;
&lt;br /&gt;
[[Image:SiteRegistration.png|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Community membership ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Community&amp;quot; block allows people to find and subscribe to external courses that they want to be part of.&lt;br /&gt;
&lt;br /&gt;
Visibility of the block and the features within it are controlled by roles, and contains:&lt;br /&gt;
&lt;br /&gt;
# &#039;Bookmarks&#039; of previously-selected (subscribed) external courses (to make revisiting easy) grouped by site, which can be edited/deleted etc&lt;br /&gt;
# A link to a search script - &amp;quot;Add new courses...&amp;quot;&lt;br /&gt;
# A search script to browse/search one or more Hubs (via web services to get the data, with the interface rendered by the local script).  Users can select joinable courses from the list and they&#039;ll get added to the list in the block.&lt;br /&gt;
&lt;br /&gt;
Generally the links will be just be an ordinary URL and the remote site will be responsible for authentication.&lt;br /&gt;
&lt;br /&gt;
If the foreign site has an Mnet connection set up with the current site then login will be immediate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Addacourse.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Import/Export courses ==&lt;br /&gt;
&lt;br /&gt;
The Import/Export block will be available on course pages and contains buttons to:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Publish course&#039;&#039;&#039;: to publish or update the description of the current course in one or more Hubs (admins only)&lt;br /&gt;
* &#039;&#039;&#039;Export course&#039;&#039;&#039;: publish/upload entire course (as Moodle Backup minus userdata) somewhere (eg a Hub) (via Portfolio API plugins)&lt;br /&gt;
* &#039;&#039;&#039;Import course&#039;&#039;&#039;: find/download/install a course template from a Hub or from another course on same site  (Repository API plugins)&lt;br /&gt;
&lt;br /&gt;
=== Publish course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Publish&#039;&#039;&#039; button only exists if the current user has the appropriate capabilities and if the current Moodle site has been registered with a Hub.&lt;br /&gt;
&lt;br /&gt;
[[Image:Coursepublishing.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Choosing &amp;quot;Publish&amp;quot; goes to a script where you can chose from the registered Hubs and whether you want to publish the course as:&lt;br /&gt;
* enrollable, so that others can come here and use the course where it is, and/or &lt;br /&gt;
* downloadable, so that a Hub can offer this course for download to others&lt;br /&gt;
&lt;br /&gt;
If the user wants to offer this course for download, then they are directed to the standard backup process to create and define the backup file (without users!).  If the backup is successful the zip is stored in a standard place and then the user is returned to the publish script to continue.  (If downloads are not required then this whole step is skipped).&lt;br /&gt;
&lt;br /&gt;
It allows the user to set up full , and especially whether you want to advertise this course as being:&lt;br /&gt;
&lt;br /&gt;
Now the script presents a form with metadata that this course will be published with on the chosen Hub(s) (this is also available in the course settings page).  Metadata includes information such as description, licensing, categories, screenshots etc (see the [[#Courses|Courses]] section above for more info).&lt;br /&gt;
&lt;br /&gt;
After checking/updating the metadata, the script will push the data to the selected Hub.  The Hub will bounce back a confirmation which gets saved locally as the &amp;quot;Last publish date&amp;quot; for that course.&lt;br /&gt;
&lt;br /&gt;
If the checkbox to allow download was selected, then the URL to a course download script in the current Moodle is included with the metadata.  This URL contains a token (eg an MD5 stored in the course table) that only the Hub knows.&lt;br /&gt;
&lt;br /&gt;
The course download script (eg /course/download.php?id=55&amp;amp;secret=XXXXX) will send the cached .zip file for the given course.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Publish course settings ====&lt;br /&gt;
&lt;br /&gt;
Some publish settings and info will also be available anytime via the course settings page under a &amp;quot;Publish&amp;quot; tab:&lt;br /&gt;
&lt;br /&gt;
* Which hubs has this course been published on, and when&lt;br /&gt;
* Full metadata&lt;br /&gt;
* Screenshots&lt;br /&gt;
&lt;br /&gt;
=== Export course ===&lt;br /&gt;
&lt;br /&gt;
A standard export will do a normal backup (taking care to remove userdata by default), and at the end will call the portfolio API to push that file to a connected portfolio.  Portfolio (export) plugins could include:&lt;br /&gt;
&lt;br /&gt;
* downloading it to the local computer&lt;br /&gt;
* uploading it as a zip to any general purpose repository&lt;br /&gt;
* copy the course to another Moodle site set up with Mnet peering.&lt;br /&gt;
&lt;br /&gt;
Pushing it to another Moodle site would trigger extra behaviours:&lt;br /&gt;
&lt;br /&gt;
* Permissions would be checked on the destination Moodle&lt;br /&gt;
* The course can be immediately restored on the external Moodle in a special &amp;quot;New&amp;quot; category as a hidden course&lt;br /&gt;
* Someone on the external Moodle can be alerted to approve/unhide the new course&lt;br /&gt;
&lt;br /&gt;
=== Import course ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Import course&#039;&#039;&#039; button will pull up a normal file picker to browse repositories for files with a mimetype matching .mbkup.zip.&lt;br /&gt;
&lt;br /&gt;
One special repository plugin called &amp;quot;Courses&amp;quot; allows the user to:&lt;br /&gt;
&lt;br /&gt;
* find Hubs by downloading the Hub List&lt;br /&gt;
* search particular Hubs for downloadable courses (only)&lt;br /&gt;
* search other courses on the same server (replacing the existing import function we have)&lt;br /&gt;
&lt;br /&gt;
Once the user has selected one of these courses and passed any challenge there might be (eg the Hub could potentially require a password or payment or a license agreement form), then the zip file is downloaded to the local Moodle, and then the user is passed to the standard restore process.&lt;br /&gt;
&lt;br /&gt;
[[Image:FilePicker_all_JS.png|900px]]&lt;br /&gt;
[[Image:FilePicker_JS_course_selector.png|900px]]&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
Full schedule and progress is in the tracker: MDL-19309&lt;br /&gt;
&lt;br /&gt;
# Moodle.org Hub List&lt;br /&gt;
# Hub registration form&lt;br /&gt;
# Hub Web interface&lt;br /&gt;
# Hub web service interface &lt;br /&gt;
# Improve Site registration form&lt;br /&gt;
# Community block&lt;br /&gt;
# Publish courses&lt;br /&gt;
# Import courses &lt;br /&gt;
# Export courses&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Community hub technotes]] - relating to MNet developments in Moodle 1.8&lt;br /&gt;
* MDL-18580 - Community Hub tracker issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MNET]]&lt;br /&gt;
&lt;br /&gt;
[[ja:開発:コミュニティハブ]]&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Community_hub&amp;diff=27025</id>
		<title>Talk:Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Community_hub&amp;diff=27025"/>
		<updated>2009-06-30T14:48:11Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Harvesting courses regularly and a few other  comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Regarding the course import for teachers to start from...&lt;br /&gt;
I can envisage a situation whereby the original course author finds new information/ideas and adds stuff to the master course after the teacher has downloaded it, which in the current model would not make it to the teacher as the download is a one off process which they will not repeat. I would prefer a model whereby a course can act as a master template which gets updated regularly so that new questions, resources, activities etc appear dynamically as hidden items within the teacher&#039;s downloaded course, ready to be reviewed and revealed if needed. This would be like maintaining your Moodle install using CVS - you get updates all the time as they are created. &lt;br /&gt;
&lt;br /&gt;
It would also be good to be able to track how many people are using a particular course and to have some sort of meta-forum for discussing changes and developemts. Many teachers will end up using the successful/well designed courses, so it would make a lot of sense to have a way of pooling their shared experience and getting that feedback back to the original creator. -- [[User:Matt Gibson|Matt Gibson]] 18:51, 25 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Harvesting courses regularly and a few other  comments ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve put this in the forum, but I&#039;ll say it here as well.  If a site has a lot of courses to share with a hub, perhaps because they are an OpenCourseWare provider, they might prefer to supply an RSS or OAI list rather than click &amp;quot;publish&amp;quot; on each individual course.  OCW Consortium members are already encouraged to offer an RSS feed (with DC metadata) of all their courses that is picked up by a number of OCW search tools.  I&#039;m sure Moodle users in that community would love the same approach to mean they could be included in the hubs as well.&lt;br /&gt;
&lt;br /&gt;
To aid course harvesting (but to make publishing easier anyway) I&#039;d like to see the DC metadata editing screen become part of the standard course settings screen, and the data pulled from here as part of the publish to hub functionality (and into any RSS or OAI service).&lt;br /&gt;
&lt;br /&gt;
Using LOM as well as (or instead of) DC would allow more flexible searching at the hub with relatively little extra cost of data inputting.  &lt;br /&gt;
&lt;br /&gt;
Finally, there is a great deal of discussion in the OCW community about asset-level re-use.  Anecdotal evidence from teachers suggests that the course-level is not fine-grained enough and they&#039;d prefer to pick a single resource/image/activity.  See http://opencontent.org/blog/archives/900 and related comments for example.  So I&#039;d like to see DC metadata added to resources and modules too, and the searching and import/export/enrol facility in the hub system work at this level also.&lt;br /&gt;
-- [[User:Jenny Gray|Jenny Gray]] 14:48, 30 June 2009 (GMT)&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Community_hub&amp;diff=27024</id>
		<title>Talk:Community hub</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Community_hub&amp;diff=27024"/>
		<updated>2009-06-30T14:47:25Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* Harvesting courses regularly and a few other  comments */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Regarding the course import for teachers to start from...&lt;br /&gt;
I can envisage a situation whereby the original course author finds new information/ideas and adds stuff to the master course after the teacher has downloaded it, which in the current model would not make it to the teacher as the download is a one off process which they will not repeat. I would prefer a model whereby a course can act as a master template which gets updated regularly so that new questions, resources, activities etc appear dynamically as hidden items within the teacher&#039;s downloaded course, ready to be reviewed and revealed if needed. This would be like maintaining your Moodle install using CVS - you get updates all the time as they are created. &lt;br /&gt;
&lt;br /&gt;
It would also be good to be able to track how many people are using a particular course and to have some sort of meta-forum for discussing changes and developemts. Many teachers will end up using the successful/well designed courses, so it would make a lot of sense to have a way of pooling their shared experience and getting that feedback back to the original creator. -- [[User:Matt Gibson|Matt Gibson]] 18:51, 25 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Harvesting courses regularly and a few other  comments ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve put this in the forum, but I&#039;ll say it here as well.  If a site has a lot of courses to share with a hub, perhaps because they are an OpenCourseWare provider, they might prefer to supply an RSS or OAI list rather than click &amp;quot;publish&amp;quot; on each individual course.  OCW Consortium members are already encouraged to offer an RSS feed (with DC metadata) of all their courses that is picked up by a number of OCW search tools.  I&#039;m sure Moodle users in that community would love the same approach to mean they could be included in the hubs as well.&lt;br /&gt;
&lt;br /&gt;
To aid course harvesting (but to make publishing easier anyway) I&#039;d like to see the DC metadata editing screen become part of the standard course settings screen, and the data pulled from here as part of the publish to hub functionality (and into any RSS or OAI service).&lt;br /&gt;
&lt;br /&gt;
Using LOM as well as (or instead of) DC would allow more flexible searching at the hub with relatively little extra cost of data inputting.  &lt;br /&gt;
&lt;br /&gt;
Finally, there is a great deal of discussion in the OCW community about asset-level re-use.  Anecdotal evidence from teachers suggests that the course-level is not fine-grained enough and they&#039;d prefer to pick a single resource/image/activity.  See http://opencontent.org/blog/archives/900 and related comments for example.  So I&#039;d like to see DC metadata added to resources and modules too, and the searching and import/export/enrol facility in the hub system work at this level also.&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_talk:Frank_Ralf&amp;diff=23814</id>
		<title>User talk:Frank Ralf</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_talk:Frank_Ralf&amp;diff=23814"/>
		<updated>2008-12-15T11:13:02Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* OpenLearn XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FAQ pages==&lt;br /&gt;
&lt;br /&gt;
Hi Frank, thanks for creating [[XML FAQ]]. I hope you don&#039;t mind that I made a start on [[Import and export FAQ]]. Your help in adding more content to these pages would be much appreciated. --[[User:Helen Foster|Helen Foster]] 04:21, 4 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
== OpenLearn XML ==&lt;br /&gt;
&lt;br /&gt;
Some useful resources on OpenLearn XML format:&lt;br /&gt;
* http://www.derby.ac.uk/pocket/cdk/xml&lt;br /&gt;
* http://labspace.open.ac.uk/mod/resource/view.php?id=343529&lt;br /&gt;
* http://labspace.open.ac.uk/mod/resource/view.php?id=343530&lt;br /&gt;
&lt;br /&gt;
--[[User:Frank Ralf|Frank Ralf]] 08:42, 11 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
Latest OpenLearn Schema is version 1.2 available from http://openlearn.open.ac.uk/local/sa/schemas/OUGeneric_v1.2.xsd  This is the Open University (UK)&#039;s xml schema used for all content production.  We then render this into HTML and use core Moodle functions to create content in the moodle database to display that HTML.&lt;br /&gt;
&lt;br /&gt;
== Moodle XML Schema roadmap ==&lt;br /&gt;
&lt;br /&gt;
Here are some unsorted first thoughts about the best way of creating a Moodle XML Schema:&lt;br /&gt;
&lt;br /&gt;
* Creating a XML Schema based on the Moodle XML documentation&lt;br /&gt;
* Modular schema, one for each question type: better extensibility&lt;br /&gt;
* Comparison with OpenLearn XML Schema&lt;br /&gt;
--[[User:Frank Ralf|Frank Ralf]] 08:19, 12 December 2008 (CST)&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_talk:Frank_Ralf&amp;diff=23813</id>
		<title>User talk:Frank Ralf</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_talk:Frank_Ralf&amp;diff=23813"/>
		<updated>2008-12-15T11:10:31Z</updated>

		<summary type="html">&lt;p&gt;Jenny-gray: /* OpenLearn XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FAQ pages==&lt;br /&gt;
&lt;br /&gt;
Hi Frank, thanks for creating [[XML FAQ]]. I hope you don&#039;t mind that I made a start on [[Import and export FAQ]]. Your help in adding more content to these pages would be much appreciated. --[[User:Helen Foster|Helen Foster]] 04:21, 4 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
== OpenLearn XML ==&lt;br /&gt;
&lt;br /&gt;
Some useful resources on OpenLearn XML format:&lt;br /&gt;
* http://www.derby.ac.uk/pocket/cdk/xml&lt;br /&gt;
* http://labspace.open.ac.uk/mod/resource/view.php?id=343529&lt;br /&gt;
* http://labspace.open.ac.uk/mod/resource/view.php?id=343530&lt;br /&gt;
&lt;br /&gt;
--[[User:Frank Ralf|Frank Ralf]] 08:42, 11 December 2008 (CST)&lt;br /&gt;
&lt;br /&gt;
Latest OpenLearn Schema is version 1.2 available from http://openlearn.open.ac.uk/local/sa/schemas/OUGeneric_v1.2.xsd&lt;br /&gt;
&lt;br /&gt;
== Moodle XML Schema roadmap ==&lt;br /&gt;
&lt;br /&gt;
Here are some unsorted first thoughts about the best way of creating a Moodle XML Schema:&lt;br /&gt;
&lt;br /&gt;
* Creating a XML Schema based on the Moodle XML documentation&lt;br /&gt;
* Modular schema, one for each question type: better extensibility&lt;br /&gt;
* Comparison with OpenLearn XML Schema&lt;br /&gt;
--[[User:Frank Ralf|Frank Ralf]] 08:19, 12 December 2008 (CST)&lt;/div&gt;</summary>
		<author><name>Jenny-gray</name></author>
	</entry>
</feed>