<?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=Johnok</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=Johnok"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/Special:Contributions/Johnok"/>
	<updated>2026-07-18T21:06:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Progress_Bar&amp;diff=52864</id>
		<title>Progress Bar</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Progress_Bar&amp;diff=52864"/>
		<updated>2017-08-29T08:51:21Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Update usage of update function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Progress Bar Lib =&lt;br /&gt;
There are two Progress Bar libs avaiable in Moodle, the old one and a OOP one.&lt;br /&gt;
&lt;br /&gt;
== Old Progress Bar ==&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
function print_progress($done, $total, $updatetime=5, $sleeptime=1, $donetext=&#039;&#039;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
== OOP Progress Bar ==&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
set_time_limit(0);&lt;br /&gt;
$pb = new progressbar(&#039;bar&#039;, 500);&lt;br /&gt;
$pb-&amp;gt;create();&lt;br /&gt;
$num_tasks = 200; // the number of tasks to be completed.&lt;br /&gt;
for($cur_task = 0; $cur_task &amp;lt;= $num_tasks; $cur_task++)&lt;br /&gt;
{&lt;br /&gt;
    for ($i=0; $i&amp;lt;100000; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        ;;;&lt;br /&gt;
    }&lt;br /&gt;
    $pb-&amp;gt;update($cur_task, $num_tasks, &#039;this is&#039;. $cur_task . &#039;h&#039;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$pt = new progressbar(&#039;zbar&#039;, 900);&lt;br /&gt;
$pt-&amp;gt;create();&lt;br /&gt;
$num_tasks = 200; // the number of tasks to be completed.&lt;br /&gt;
for($cur_task = 0; $cur_task &amp;lt;= $num_tasks; $cur_task++)&lt;br /&gt;
{&lt;br /&gt;
    for ($i=0; $i&amp;lt;100000; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        ;;;&lt;br /&gt;
    }&lt;br /&gt;
    $pt-&amp;gt;update($cur_task, $num_tasks, &#039;this is&#039;. $cur_task . &#039;h&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:LTI_ContentItem_Enhancements&amp;diff=52752</id>
		<title>Talk:LTI ContentItem Enhancements</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:LTI_ContentItem_Enhancements&amp;diff=52752"/>
		<updated>2017-07-25T00:21:29Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Initial thoughts about the proposal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thanks! These proposals make sense and will be great improvements. I wish we could avoid another checkbox for the content item flow. I wonder if it&#039;s too bad to just always skip the edit page for anything that supports it? But yeah I suppose the setting is the safer choice. I&#039;d like more info and maybe mockups for how the adding multiple links at once will work. --[[User:John Okely|John Okely]] ([[User talk:John Okely|talk]]) 08:21, 25 July 2017 (AWST)&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Peer_reviewing&amp;diff=52552</id>
		<title>Peer reviewing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Peer_reviewing&amp;diff=52552"/>
		<updated>2017-06-02T01:37:27Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Ask for more detail about why certain performance decisions were made&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Process=&lt;br /&gt;
&lt;br /&gt;
Peer review process helps to prepare the issue for integration. The peer reviewer is another developer who was not involved in the development process on the issue and therefore can take a fresh look and notice something that original developer might have forgotten during development. It is important to check that the bug actually is present and the code fixes it without creating new regressions. &lt;br /&gt;
&lt;br /&gt;
==Completing Peer review as a community member==&lt;br /&gt;
&lt;br /&gt;
Any other developer can review any change. That is why it is called &#039;peer&#039; review. However, not everyone has the necessary permissions in the tracker to click the buttons &#039;Start peer review&#039;, &#039;Finish peer review&#039; etc. This should not discourage you from looking at other contributors code and providing comments and feedback. The issue will still need to wait for someone with the right permissions to come along and click the buttons, but they can read your review and then need do no more than double-check some points, which will save a lot of time.&lt;br /&gt;
&lt;br /&gt;
To provide feedback to the developer, leave the issue in &amp;quot;Waiting for Peer Review&amp;quot; (since you don&#039;t have permission to do anything else, and also that makes it easy for someone with sufficient permissions to find the issue and move it forwards). Review the code using the checklist below, including any appropriate comments.  Once finished, please post a comment clearly stating the outcome of your review.  If you think it needs more work then indicate what needs to be changes.  If you are happy with the patch, leave a clear comment that you believe this is ready to be made part of Moodle.  This can then easily be seen by a HQ developer or component lead and they can quickly take appropriate action.&lt;br /&gt;
&lt;br /&gt;
If a followup review happens to identify something you did not find, you have an opportunity to expand your knowledge and provide better reviews in the future as well as having saved everybody else some time.&lt;br /&gt;
&lt;br /&gt;
Feedback to indicate the issue is ready to progress might look like the following;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks again for your contribution. I have reviewed the patch:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[Copy and paste the checklist here, and complete it]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
I don&#039;t have permission to use the peer review buttons on this issue. I hope that someone with sufficient permissions will move the issue forwards soon.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feedback to indicate the issue requires further work might look like the following;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks for providing a patch. I think the following points require further work&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[Copy and paste the checklist here, and complete it]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please indicate If you are willing to continue working on this issue and complete the solution.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Peer review for development by HQ or a known common contributor==&lt;br /&gt;
&lt;br /&gt;
When code comes from a HQ developer or external developer who has been contributing significantly to Moodle and is well acquainted with Moodle standards, peer review is limited to checking the code according to the Checklist below. &lt;br /&gt;
&lt;br /&gt;
If everything is fine, the peer reviewer submits the issue for integration. &lt;br /&gt;
&lt;br /&gt;
If some additional work is needed or the author specifically asked not to submit for integration yet, the peer reviewer clicks on “Finish peer review” and the issue state returns to “Development in progress”. Usually the name of the peer reviewer stays on the issue and if a second peer review is requested it is expected that the same Peer reviewer picks it up. If the peer reviewer is not able to do the second review, they should remove their name and comment about it. Otherwise the issue does not appear on “waiting for peer review” dashboard. Please remember that not all jira users have permission to submit for integration.&lt;br /&gt;
&lt;br /&gt;
==Peer review for external developers==&lt;br /&gt;
&lt;br /&gt;
When the code has come from an external developer, the peer reviewer will also help the developer to lead the issue to integration. In this case the peer reviewer should not use “Finish peer review” button. &lt;br /&gt;
&lt;br /&gt;
If the issue needs additional work, the peer reviewer comments about the suggested changes but does not change the status of the issue and it remains as “Peer review in progress”. If the author of the patch does not reply in 4 days, the peer reviewer may select either to complete the patch themselves or reopen the issue. The decision should be based on the amount of work required to complete the solution, for example, changing coding style or commit message, rebasing, backporting, adding testing instructions, etc. should be performed by the peer reviewer. This may require picking the commits into reviewer’s git branch. &lt;br /&gt;
&lt;br /&gt;
It is very important to give the credit to the author of the code by either keeping their authorship on the commit or adding “Thanks to XXXX for providing the patch” to the commit message. If the author of the patch is not in jira-developers group the special user &#039;moodle.com&#039; should be entered in Assignee field.&lt;br /&gt;
&lt;br /&gt;
There could be situations when the patch is incomplete, does not fix the original issue, creates regressions or otherwise is not correct. As stated above, the peer reviewer should comment about it and wait for the feedback from the author. If there is no feedback, or the author can not work on this issue any more, and the peer reviewer also does not find it easy and important enough to complete, the issue needs to be reopened. Button “Fail peer review” (available to HQ developers only) will reset the issue status to “Reopened”. On this screen peer reviewer should remove assignee, peer reviewer and “patch” label from the issue. This way issue will become available again for anybody who want to work on it. All communication will remain in comments and issue history.&lt;br /&gt;
&lt;br /&gt;
If the issue has passed peer review but the integrator or tester has raised some questions about it, then normally the developer who created the patch would be expected to respond. If they do no respond quickly enough, then the peer reviewer is expected to step in and take responsibility for the change they reviewed.&lt;br /&gt;
&lt;br /&gt;
Once the issue is ready for integration, you can submit it to integration on behalf of the developer. Most external developers (those who are not in the jira-developers group) do not have permission to submit their own issues to integration so cannot do it themselves.&lt;br /&gt;
&lt;br /&gt;
==Replies templates==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks for providing a patch.&amp;lt;br/&amp;gt;&lt;br /&gt;
I have reviewed your code and can confirm that it addresses the reported issue. We would like to include it in core. Moodle values its contributors and tries to give them credit when possible. If you are interested in your name appearing on the https://moodle.org/dev/contributions.php page you can create a git commit that we will then pull into Moodle. You can learn more about Git and how Moodle uses it at &amp;lt;nowiki&amp;gt;[Git for developers|https://docs.moodle.org/dev/Git_for_developers]&amp;lt;/nowiki&amp;gt; page. Please let me know if you want to prepare a git branch. Or if you don’t have time to go through the whole process at the moment I can pick your patch myself.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks for providing a patch.&amp;lt;br/&amp;gt;&lt;br /&gt;
Your code looks almost ready for integration into Moodle. There are just some little things that need to be changed to comply with Moodle standards. Can you please take a look at the review results below and tell me if you are able to modify your branch to address them.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
I have reviewed your patch, it addresses the problem and complies with Moodle standards. I&#039;m pushing this issue for integration. Following Moodle &amp;lt;nowiki&amp;gt;[Process|https://docs.moodle.org/dev/Process]&amp;lt;/nowiki&amp;gt; it will go through integration review and testing before being included in the product. There might be additional questions from an integrator and/or a tester at those stages. It would be appreciated if you read tracker emails and can reply to questions if needed. If everything goes well during the next two stages your issue will be included in the next weekly release and your count on https://moodle.org/dev/contributions.php page will increase.&amp;lt;br/&amp;gt;&lt;br /&gt;
Thanks again for your contribution.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks for providing a patch.&amp;lt;br/&amp;gt;&lt;br /&gt;
Unfortunately this patch does not fully address the reported issue. ... DETAILS...&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Even though the code does solve the issue in the short-term it is very likely to create regressions ..... &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
I have spent some time reviewing the patch and I would recommend that you ..... &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Please let me know If you are willing to continue working on this issue and complete the solution.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Checklist=&lt;br /&gt;
&lt;br /&gt;
These are points to consider while peer-reviewing issues. Further explanation below.&lt;br /&gt;
&lt;br /&gt;
 [] Syntax&lt;br /&gt;
 [] Whitespace&lt;br /&gt;
 [] Output&lt;br /&gt;
 [] Language&lt;br /&gt;
 [] Databases&lt;br /&gt;
 [] Testing (instructions and automated tests)&lt;br /&gt;
 [] Security&lt;br /&gt;
 [] Performance and Clustering&lt;br /&gt;
 [] Documentation&lt;br /&gt;
 [] Git&lt;br /&gt;
 [] Third party code&lt;br /&gt;
 [] Sanity check&lt;br /&gt;
 [] Icons&lt;br /&gt;
&lt;br /&gt;
Acceptable check-marks are Y (for yes), N (for no) or - (for not applicable). All N check-marks should be accompanied by an explanation of the problem that still needs to be addressed.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
To allow the community of Moodle developers to work together, conventions should be followed.&lt;br /&gt;
&lt;br /&gt;
* The code is easy to understand and, where it isn&#039;t, comments have been provided.&lt;br /&gt;
* Variables are named correctly (all lower case, no camel-case, no underscores).&lt;br /&gt;
* Functions are named correctly (all lower case, no camel-case, underscores allowed).&lt;br /&gt;
* PHP DocBlocks have been updated and adhere to [[Coding_style#Documentation_and_comments|coding style guide]].&lt;br /&gt;
* Where functions are being removed, the [[Deprecation]] process is followed.&lt;br /&gt;
* The code doesn&#039;t use [[Deprecated_functions_in_2.0|deprecated functions]].&lt;br /&gt;
* $_GET, $_POST, $_REQUEST, $_COOKIE, and $_SESSION are never used.&lt;br /&gt;
&lt;br /&gt;
See the [[Coding style]] guide for details.&lt;br /&gt;
&lt;br /&gt;
==Whitespace==&lt;br /&gt;
Unnecessary whitespace changes can cause conflicts when committing code.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are no unnecessary blank lines in the new code;&lt;br /&gt;
* blank lines do not contain spaces;&lt;br /&gt;
* there are no unnecessary changes to whitespace in other areas on the file;&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
Output needs to be controlled by renderers to achieve consistency and correct application of themes.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* output renders are used to generate output strings, including HTML tags;&lt;br /&gt;
* HTML output is valid XHTML;&lt;br /&gt;
* no inline styles have been used in HTML output (everything has to be in CSS);&lt;br /&gt;
* CSS has been added to the appropriate CSS files (base, specific area, sometimes canvas); and&lt;br /&gt;
* the code doesn&#039;t use buffered output unless absolutely necessary.&lt;br /&gt;
* all visual output has a RTL alternative included&lt;br /&gt;
&lt;br /&gt;
feedback any notices (E_STRICT, etc) seen into the MDL.&lt;br /&gt;
&lt;br /&gt;
==Language==&lt;br /&gt;
To achieve appropriate internationalisation of Moodle, language strings must be managed correctly.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* new language strings are named correctly (all lower case, no camel-case, underscores are permissible in some cases);&lt;br /&gt;
* help strings are named and formatted as described in [[Help strings]];&lt;br /&gt;
* language strings are used instead of hard-coded strings for text output;&lt;br /&gt;
* language strings have not been removed or renamed, had their meaning changed or had their parameters changed in stable branches (permitted only in master); and&lt;br /&gt;
* [https://docs.moodle.org/dev/Commit_cheat_sheet#Include_AMOS_script_in_the_commit_if_needed AMOS commands]  have been specified when moving or copying language strings.&lt;br /&gt;
&lt;br /&gt;
==Databases==&lt;br /&gt;
DB calls are the greatest performance bottleneck in Moodle.&lt;br /&gt;
&lt;br /&gt;
If there is SQL code you can test quickly then do so. &lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are minimal DB calls (no excessive use of the DB); and&lt;br /&gt;
* the code uses SQL compatible with all the supported DB engines (check all selected fields appear in an &#039;order by&#039; clause).&lt;br /&gt;
&lt;br /&gt;
==Testing instructions and automated tests==&lt;br /&gt;
It is the developer&#039;s responsibility to test code before integration. Issues should not be sent for peer review without tests so that the peer reviewer can assess their quality and use them to consider the scope of the issue.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are specific testing instructions that state how, as well as what, to test. Please ensure that the testing instructions are in the correct format: [https://docs.moodle.org/dev/Behat Behat gherkin];&lt;br /&gt;
* new unit tests have been added when there is a change in functionality; and&lt;br /&gt;
* &#039;&#039;&#039;unit tests pass&#039;&#039;&#039; for related areas where changes have been made.&lt;br /&gt;
* &#039;&#039;&#039;Behat tests pass&#039;&#039;&#039; for related areas where changes have been made, especially when it involved UI changes.&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
The user community relies on Moodle being responsibly secure.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* user login is checked where an identity is needed;&lt;br /&gt;
* sesskey values are checked before all write actions where appropriate (some read actions as well);&lt;br /&gt;
* capabilities are checked where roles differ; and&lt;br /&gt;
* if the issue itself is a [[Security|security]] issue, the [[Process#Security_issues|security process]] is being followed.&lt;br /&gt;
** Ensure that the fix is &#039;&#039;&#039;not&#039;&#039;&#039; available in a public repository (ie. a personal Github account); stand-alone patches should be provided instead.&lt;br /&gt;
** The issue will not be integrated until just before the next minor version release.&lt;br /&gt;
&lt;br /&gt;
==Performance and clustering==&lt;br /&gt;
It is easy to write code that works sufficiently well when you are working on either small sets of data or with a small number of active users.  Picking performance issues can be quite difficult and can required a complex level of understanding of both the section of code being reviewed, but also other parts that interact with it.&lt;br /&gt;
&lt;br /&gt;
Clustering is when the same code is run on different computers and an end user could send each request to a different computer.  This can produce a number of concurrency issues if not thought through.  One example is;  If you complete an opcache_reset(), no other server except the one you ran it on knows that it happened.  So data can get out of sync.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* Any filesystem, database or cache accesses are done in the most efficient way.&lt;br /&gt;
* That any code or function that appear expensive are not in critical paths.  eg; They don&#039;t load on every page.&lt;br /&gt;
* The least possible code is running to complete the task, especially looking for hidden loops.  They can appear from calling functions.&lt;br /&gt;
* Any code that runs is not specific to a single node. (eg opcache_reset())  The ensures clusters will run correctly.&lt;br /&gt;
* If the code could affect performance at all, make sure there is a comment noting what was considered.&lt;br /&gt;
** What they did to mitigate performance impact, or why they thought it wasn&#039;t an issue.&lt;br /&gt;
** Why they made certain trade-offs.&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
Work does not stop when code is integrated.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* Appropriate [[Tracker_issue_labels|labels]] have been added when there has been a function change, particularly&lt;br /&gt;
** docs_required (any functional change, usually paired with ui_change),&lt;br /&gt;
** dev_docs_required (any change to APIs, usually paired with api_change),&lt;br /&gt;
** ui_change (any functional change, usually paired with docs_required, except ui_change remains permanetly),&lt;br /&gt;
** api_change (any change to APIs that devs will need to know about, usually paired with dev_docs_required, except api_change remains permanetly),&lt;br /&gt;
** unit_test_required and acceptance_test_required, when there are api or ui changes needing improved coverage, and&lt;br /&gt;
** qa_test_required (significant functional change, not covered by unit/acceptance ones).&lt;br /&gt;
* Also, verify that the components for the issue are correctly set, so maintainers (subscribed by default) will be mailed about issues early in the process.&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
Ensure that:&lt;br /&gt;
* the commit matches the [[Coding style#Git_commits|Coding style]]&lt;br /&gt;
* the Git history is clean and the work has been rebased to logical commits; and&lt;br /&gt;
* the original author of the work provided as a patch has been given credit within the commit (as author of in the commit message if changes were made).&lt;br /&gt;
&lt;br /&gt;
==Third party code==&lt;br /&gt;
Does the change contain third party code? If so, ensure that:&lt;br /&gt;
&lt;br /&gt;
* The code is licensed under a [http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses| GPL compatible license].&lt;br /&gt;
* The instructions for upgrading/importing the library and contained within a readme_moodle.txt file.&lt;br /&gt;
* The library is recorded in a thirdparty.xml file, including licensing information.&lt;br /&gt;
* Third party code has been scanned to check for url accessible entry points that could be exploited. These should either be disabled, or if required functionality they should be checked for security weaknesses.&lt;br /&gt;
* Does not duplicate the functionality of any existing api or third party library in core.&lt;br /&gt;
* Any modifications to third party code are recorded in readme_moodle.txt&lt;br /&gt;
&lt;br /&gt;
==Sanity check==&lt;br /&gt;
Ensure that:&lt;br /&gt;
* the code seems to solve the described problem completely within its reported scope (and further issues have been created to resolve remaining parts or further refactoring);&lt;br /&gt;
* the code makes sense in relation to the broader codebase (look at the whole function, not just the altered code); and&lt;br /&gt;
* the developer has searched for and fixed other areas that may also have been affected by the same problem.&lt;br /&gt;
* if any version numbers have been changed in [[version.php]] files, then the changes follow [[Moodle_versions#How_to_increment_version_numbers_in_core|the rule for updating version numbers in core]].&lt;br /&gt;
* there are comments on tracker explaining why current approach was taken and why other options (especially large issues). If not comment asking them to explain&lt;br /&gt;
&lt;br /&gt;
==Icons==&lt;br /&gt;
Are new icons being introduced? If so, ensure that:&lt;br /&gt;
* the icons abide by our [https://docs.moodle.org/dev/Moodle_icons icon guidelines] with regards to size, design and format&lt;br /&gt;
* the icons are do not unnecessarily add new ways of expressing existing concepts&lt;br /&gt;
* the icons are in a pix folder that makes sense&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [http://moodle.org/plugins/view.php?plugin=local_codechecker Code checker plugin]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Peer_reviewing&amp;diff=52551</id>
		<title>Peer reviewing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Peer_reviewing&amp;diff=52551"/>
		<updated>2017-06-02T01:35:16Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add note about decision explanations to sanity check&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Process=&lt;br /&gt;
&lt;br /&gt;
Peer review process helps to prepare the issue for integration. The peer reviewer is another developer who was not involved in the development process on the issue and therefore can take a fresh look and notice something that original developer might have forgotten during development. It is important to check that the bug actually is present and the code fixes it without creating new regressions. &lt;br /&gt;
&lt;br /&gt;
==Completing Peer review as a community member==&lt;br /&gt;
&lt;br /&gt;
Any other developer can review any change. That is why it is called &#039;peer&#039; review. However, not everyone has the necessary permissions in the tracker to click the buttons &#039;Start peer review&#039;, &#039;Finish peer review&#039; etc. This should not discourage you from looking at other contributors code and providing comments and feedback. The issue will still need to wait for someone with the right permissions to come along and click the buttons, but they can read your review and then need do no more than double-check some points, which will save a lot of time.&lt;br /&gt;
&lt;br /&gt;
To provide feedback to the developer, leave the issue in &amp;quot;Waiting for Peer Review&amp;quot; (since you don&#039;t have permission to do anything else, and also that makes it easy for someone with sufficient permissions to find the issue and move it forwards). Review the code using the checklist below, including any appropriate comments.  Once finished, please post a comment clearly stating the outcome of your review.  If you think it needs more work then indicate what needs to be changes.  If you are happy with the patch, leave a clear comment that you believe this is ready to be made part of Moodle.  This can then easily be seen by a HQ developer or component lead and they can quickly take appropriate action.&lt;br /&gt;
&lt;br /&gt;
If a followup review happens to identify something you did not find, you have an opportunity to expand your knowledge and provide better reviews in the future as well as having saved everybody else some time.&lt;br /&gt;
&lt;br /&gt;
Feedback to indicate the issue is ready to progress might look like the following;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks again for your contribution. I have reviewed the patch:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[Copy and paste the checklist here, and complete it]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
I don&#039;t have permission to use the peer review buttons on this issue. I hope that someone with sufficient permissions will move the issue forwards soon.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feedback to indicate the issue requires further work might look like the following;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks for providing a patch. I think the following points require further work&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[Copy and paste the checklist here, and complete it]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please indicate If you are willing to continue working on this issue and complete the solution.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Peer review for development by HQ or a known common contributor==&lt;br /&gt;
&lt;br /&gt;
When code comes from a HQ developer or external developer who has been contributing significantly to Moodle and is well acquainted with Moodle standards, peer review is limited to checking the code according to the Checklist below. &lt;br /&gt;
&lt;br /&gt;
If everything is fine, the peer reviewer submits the issue for integration. &lt;br /&gt;
&lt;br /&gt;
If some additional work is needed or the author specifically asked not to submit for integration yet, the peer reviewer clicks on “Finish peer review” and the issue state returns to “Development in progress”. Usually the name of the peer reviewer stays on the issue and if a second peer review is requested it is expected that the same Peer reviewer picks it up. If the peer reviewer is not able to do the second review, they should remove their name and comment about it. Otherwise the issue does not appear on “waiting for peer review” dashboard. Please remember that not all jira users have permission to submit for integration.&lt;br /&gt;
&lt;br /&gt;
==Peer review for external developers==&lt;br /&gt;
&lt;br /&gt;
When the code has come from an external developer, the peer reviewer will also help the developer to lead the issue to integration. In this case the peer reviewer should not use “Finish peer review” button. &lt;br /&gt;
&lt;br /&gt;
If the issue needs additional work, the peer reviewer comments about the suggested changes but does not change the status of the issue and it remains as “Peer review in progress”. If the author of the patch does not reply in 4 days, the peer reviewer may select either to complete the patch themselves or reopen the issue. The decision should be based on the amount of work required to complete the solution, for example, changing coding style or commit message, rebasing, backporting, adding testing instructions, etc. should be performed by the peer reviewer. This may require picking the commits into reviewer’s git branch. &lt;br /&gt;
&lt;br /&gt;
It is very important to give the credit to the author of the code by either keeping their authorship on the commit or adding “Thanks to XXXX for providing the patch” to the commit message. If the author of the patch is not in jira-developers group the special user &#039;moodle.com&#039; should be entered in Assignee field.&lt;br /&gt;
&lt;br /&gt;
There could be situations when the patch is incomplete, does not fix the original issue, creates regressions or otherwise is not correct. As stated above, the peer reviewer should comment about it and wait for the feedback from the author. If there is no feedback, or the author can not work on this issue any more, and the peer reviewer also does not find it easy and important enough to complete, the issue needs to be reopened. Button “Fail peer review” (available to HQ developers only) will reset the issue status to “Reopened”. On this screen peer reviewer should remove assignee, peer reviewer and “patch” label from the issue. This way issue will become available again for anybody who want to work on it. All communication will remain in comments and issue history.&lt;br /&gt;
&lt;br /&gt;
If the issue has passed peer review but the integrator or tester has raised some questions about it, then normally the developer who created the patch would be expected to respond. If they do no respond quickly enough, then the peer reviewer is expected to step in and take responsibility for the change they reviewed.&lt;br /&gt;
&lt;br /&gt;
Once the issue is ready for integration, you can submit it to integration on behalf of the developer. Most external developers (those who are not in the jira-developers group) do not have permission to submit their own issues to integration so cannot do it themselves.&lt;br /&gt;
&lt;br /&gt;
==Replies templates==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks for providing a patch.&amp;lt;br/&amp;gt;&lt;br /&gt;
I have reviewed your code and can confirm that it addresses the reported issue. We would like to include it in core. Moodle values its contributors and tries to give them credit when possible. If you are interested in your name appearing on the https://moodle.org/dev/contributions.php page you can create a git commit that we will then pull into Moodle. You can learn more about Git and how Moodle uses it at &amp;lt;nowiki&amp;gt;[Git for developers|https://docs.moodle.org/dev/Git_for_developers]&amp;lt;/nowiki&amp;gt; page. Please let me know if you want to prepare a git branch. Or if you don’t have time to go through the whole process at the moment I can pick your patch myself.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks for providing a patch.&amp;lt;br/&amp;gt;&lt;br /&gt;
Your code looks almost ready for integration into Moodle. There are just some little things that need to be changed to comply with Moodle standards. Can you please take a look at the review results below and tell me if you are able to modify your branch to address them.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
I have reviewed your patch, it addresses the problem and complies with Moodle standards. I&#039;m pushing this issue for integration. Following Moodle &amp;lt;nowiki&amp;gt;[Process|https://docs.moodle.org/dev/Process]&amp;lt;/nowiki&amp;gt; it will go through integration review and testing before being included in the product. There might be additional questions from an integrator and/or a tester at those stages. It would be appreciated if you read tracker emails and can reply to questions if needed. If everything goes well during the next two stages your issue will be included in the next weekly release and your count on https://moodle.org/dev/contributions.php page will increase.&amp;lt;br/&amp;gt;&lt;br /&gt;
Thanks again for your contribution.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
Thanks for providing a patch.&amp;lt;br/&amp;gt;&lt;br /&gt;
Unfortunately this patch does not fully address the reported issue. ... DETAILS...&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Even though the code does solve the issue in the short-term it is very likely to create regressions ..... &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
I have spent some time reviewing the patch and I would recommend that you ..... &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Please let me know If you are willing to continue working on this issue and complete the solution.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Checklist=&lt;br /&gt;
&lt;br /&gt;
These are points to consider while peer-reviewing issues. Further explanation below.&lt;br /&gt;
&lt;br /&gt;
 [] Syntax&lt;br /&gt;
 [] Whitespace&lt;br /&gt;
 [] Output&lt;br /&gt;
 [] Language&lt;br /&gt;
 [] Databases&lt;br /&gt;
 [] Testing (instructions and automated tests)&lt;br /&gt;
 [] Security&lt;br /&gt;
 [] Performance and Clustering&lt;br /&gt;
 [] Documentation&lt;br /&gt;
 [] Git&lt;br /&gt;
 [] Third party code&lt;br /&gt;
 [] Sanity check&lt;br /&gt;
 [] Icons&lt;br /&gt;
&lt;br /&gt;
Acceptable check-marks are Y (for yes), N (for no) or - (for not applicable). All N check-marks should be accompanied by an explanation of the problem that still needs to be addressed.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
To allow the community of Moodle developers to work together, conventions should be followed.&lt;br /&gt;
&lt;br /&gt;
* The code is easy to understand and, where it isn&#039;t, comments have been provided.&lt;br /&gt;
* Variables are named correctly (all lower case, no camel-case, no underscores).&lt;br /&gt;
* Functions are named correctly (all lower case, no camel-case, underscores allowed).&lt;br /&gt;
* PHP DocBlocks have been updated and adhere to [[Coding_style#Documentation_and_comments|coding style guide]].&lt;br /&gt;
* Where functions are being removed, the [[Deprecation]] process is followed.&lt;br /&gt;
* The code doesn&#039;t use [[Deprecated_functions_in_2.0|deprecated functions]].&lt;br /&gt;
* $_GET, $_POST, $_REQUEST, $_COOKIE, and $_SESSION are never used.&lt;br /&gt;
&lt;br /&gt;
See the [[Coding style]] guide for details.&lt;br /&gt;
&lt;br /&gt;
==Whitespace==&lt;br /&gt;
Unnecessary whitespace changes can cause conflicts when committing code.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are no unnecessary blank lines in the new code;&lt;br /&gt;
* blank lines do not contain spaces;&lt;br /&gt;
* there are no unnecessary changes to whitespace in other areas on the file;&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
Output needs to be controlled by renderers to achieve consistency and correct application of themes.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* output renders are used to generate output strings, including HTML tags;&lt;br /&gt;
* HTML output is valid XHTML;&lt;br /&gt;
* no inline styles have been used in HTML output (everything has to be in CSS);&lt;br /&gt;
* CSS has been added to the appropriate CSS files (base, specific area, sometimes canvas); and&lt;br /&gt;
* the code doesn&#039;t use buffered output unless absolutely necessary.&lt;br /&gt;
* all visual output has a RTL alternative included&lt;br /&gt;
&lt;br /&gt;
feedback any notices (E_STRICT, etc) seen into the MDL.&lt;br /&gt;
&lt;br /&gt;
==Language==&lt;br /&gt;
To achieve appropriate internationalisation of Moodle, language strings must be managed correctly.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* new language strings are named correctly (all lower case, no camel-case, underscores are permissible in some cases);&lt;br /&gt;
* help strings are named and formatted as described in [[Help strings]];&lt;br /&gt;
* language strings are used instead of hard-coded strings for text output;&lt;br /&gt;
* language strings have not been removed or renamed, had their meaning changed or had their parameters changed in stable branches (permitted only in master); and&lt;br /&gt;
* [https://docs.moodle.org/dev/Commit_cheat_sheet#Include_AMOS_script_in_the_commit_if_needed AMOS commands]  have been specified when moving or copying language strings.&lt;br /&gt;
&lt;br /&gt;
==Databases==&lt;br /&gt;
DB calls are the greatest performance bottleneck in Moodle.&lt;br /&gt;
&lt;br /&gt;
If there is SQL code you can test quickly then do so. &lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are minimal DB calls (no excessive use of the DB); and&lt;br /&gt;
* the code uses SQL compatible with all the supported DB engines (check all selected fields appear in an &#039;order by&#039; clause).&lt;br /&gt;
&lt;br /&gt;
==Testing instructions and automated tests==&lt;br /&gt;
It is the developer&#039;s responsibility to test code before integration. Issues should not be sent for peer review without tests so that the peer reviewer can assess their quality and use them to consider the scope of the issue.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are specific testing instructions that state how, as well as what, to test. Please ensure that the testing instructions are in the correct format: [https://docs.moodle.org/dev/Behat Behat gherkin];&lt;br /&gt;
* new unit tests have been added when there is a change in functionality; and&lt;br /&gt;
* &#039;&#039;&#039;unit tests pass&#039;&#039;&#039; for related areas where changes have been made.&lt;br /&gt;
* &#039;&#039;&#039;Behat tests pass&#039;&#039;&#039; for related areas where changes have been made, especially when it involved UI changes.&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
The user community relies on Moodle being responsibly secure.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* user login is checked where an identity is needed;&lt;br /&gt;
* sesskey values are checked before all write actions where appropriate (some read actions as well);&lt;br /&gt;
* capabilities are checked where roles differ; and&lt;br /&gt;
* if the issue itself is a [[Security|security]] issue, the [[Process#Security_issues|security process]] is being followed.&lt;br /&gt;
** Ensure that the fix is &#039;&#039;&#039;not&#039;&#039;&#039; available in a public repository (ie. a personal Github account); stand-alone patches should be provided instead.&lt;br /&gt;
** The issue will not be integrated until just before the next minor version release.&lt;br /&gt;
&lt;br /&gt;
==Performance and clustering==&lt;br /&gt;
It is easy to write code that works sufficiently well when you are working on either small sets of data or with a small number of active users.  Picking performance issues can be quite difficult and can required a complex level of understanding of both the section of code being reviewed, but also other parts that interact with it.&lt;br /&gt;
&lt;br /&gt;
Clustering is when the same code is run on different computers and an end user could send each request to a different computer.  This can produce a number of concurrency issues if not thought through.  One example is;  If you complete an opcache_reset(), no other server except the one you ran it on knows that it happened.  So data can get out of sync.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* Any filesystem, database or cache accesses are done in the most efficient way.&lt;br /&gt;
* That any code or function that appear expensive are not in critical paths.  eg; They don&#039;t load on every page.&lt;br /&gt;
* The least possible code is running to complete the task, especially looking for hidden loops.  They can appear from calling functions.&lt;br /&gt;
* Any code that runs is not specific to a single node. (eg opcache_reset())  The ensures clusters will run correctly.&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
Work does not stop when code is integrated.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* Appropriate [[Tracker_issue_labels|labels]] have been added when there has been a function change, particularly&lt;br /&gt;
** docs_required (any functional change, usually paired with ui_change),&lt;br /&gt;
** dev_docs_required (any change to APIs, usually paired with api_change),&lt;br /&gt;
** ui_change (any functional change, usually paired with docs_required, except ui_change remains permanetly),&lt;br /&gt;
** api_change (any change to APIs that devs will need to know about, usually paired with dev_docs_required, except api_change remains permanetly),&lt;br /&gt;
** unit_test_required and acceptance_test_required, when there are api or ui changes needing improved coverage, and&lt;br /&gt;
** qa_test_required (significant functional change, not covered by unit/acceptance ones).&lt;br /&gt;
* Also, verify that the components for the issue are correctly set, so maintainers (subscribed by default) will be mailed about issues early in the process.&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
Ensure that:&lt;br /&gt;
* the commit matches the [[Coding style#Git_commits|Coding style]]&lt;br /&gt;
* the Git history is clean and the work has been rebased to logical commits; and&lt;br /&gt;
* the original author of the work provided as a patch has been given credit within the commit (as author of in the commit message if changes were made).&lt;br /&gt;
&lt;br /&gt;
==Third party code==&lt;br /&gt;
Does the change contain third party code? If so, ensure that:&lt;br /&gt;
&lt;br /&gt;
* The code is licensed under a [http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses| GPL compatible license].&lt;br /&gt;
* The instructions for upgrading/importing the library and contained within a readme_moodle.txt file.&lt;br /&gt;
* The library is recorded in a thirdparty.xml file, including licensing information.&lt;br /&gt;
* Third party code has been scanned to check for url accessible entry points that could be exploited. These should either be disabled, or if required functionality they should be checked for security weaknesses.&lt;br /&gt;
* Does not duplicate the functionality of any existing api or third party library in core.&lt;br /&gt;
* Any modifications to third party code are recorded in readme_moodle.txt&lt;br /&gt;
&lt;br /&gt;
==Sanity check==&lt;br /&gt;
Ensure that:&lt;br /&gt;
* the code seems to solve the described problem completely within its reported scope (and further issues have been created to resolve remaining parts or further refactoring);&lt;br /&gt;
* the code makes sense in relation to the broader codebase (look at the whole function, not just the altered code); and&lt;br /&gt;
* the developer has searched for and fixed other areas that may also have been affected by the same problem.&lt;br /&gt;
* if any version numbers have been changed in [[version.php]] files, then the changes follow [[Moodle_versions#How_to_increment_version_numbers_in_core|the rule for updating version numbers in core]].&lt;br /&gt;
* there are comments on tracker explaining why current approach was taken and why other options (especially large issues). If not comment asking them to explain&lt;br /&gt;
&lt;br /&gt;
==Icons==&lt;br /&gt;
Are new icons being introduced? If so, ensure that:&lt;br /&gt;
* the icons abide by our [https://docs.moodle.org/dev/Moodle_icons icon guidelines] with regards to size, design and format&lt;br /&gt;
* the icons are do not unnecessarily add new ways of expressing existing concepts&lt;br /&gt;
* the icons are in a pix folder that makes sense&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [http://moodle.org/plugins/view.php?plugin=local_codechecker Code checker plugin]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=PHPUnit&amp;diff=52516</id>
		<title>PHPUnit</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=PHPUnit&amp;diff=52516"/>
		<updated>2017-05-24T06:32:02Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Document LDAPLIB constants&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.3}}&lt;br /&gt;
&lt;br /&gt;
=What is PHPUnit=&lt;br /&gt;
PHPUnit by Sebastian Bergmann is an advanced unit testing framework for PHP. It is installed as Composer dependency and is not part of Moodle installation. To run PHPUnit tests, you have to manually install it on your development computer or test server.&lt;br /&gt;
&lt;br /&gt;
Read the excellent guide at&lt;br /&gt;
* [http://phpunit.de/manual/current/en/index.html PHPUnit Manual]&lt;br /&gt;
&lt;br /&gt;
=Installation of PHPUnit via Composer=&lt;br /&gt;
&lt;br /&gt;
Windows may require additional installation steps.&lt;br /&gt;
On Windows go to https://getcomposer.org/download/ and download the Composer-Setup.exe file&lt;br /&gt;
&lt;br /&gt;
* Execute Composer installer&lt;br /&gt;
&lt;br /&gt;
 cd /your/moodle/dirroot&lt;br /&gt;
 php composer.phar install&lt;br /&gt;
&lt;br /&gt;
(If that gives you connection problems try...)&lt;br /&gt;
&lt;br /&gt;
 php composer.phar install --prefer-source&lt;br /&gt;
&lt;br /&gt;
Troubleshooting:&lt;br /&gt;
* On Windows if you are behind a proxy you will need to setup an environment variable called HTTP_PROXY with a value detailing your HTTP Proxy address and port before composer will correctly download files.&lt;br /&gt;
* You may be prompted for github credentials when installing composer dependencies.&lt;br /&gt;
** This is used to generate an personal access token to avoid being rate limited by github.&lt;br /&gt;
** If you have Two Factor Authentication enabled on your github account, or do not wish to supply your own credentials you will need to generate a token manually:&lt;br /&gt;
*** Visit https://github.com/settings/applications and request personal access token&lt;br /&gt;
*** Copy this token and add it to your [https://gist.github.com/andrewnicols/c5377ed25a9df1006ce1 ~/.composer/config.json]&lt;br /&gt;
** ( See [https://github.com/composer/composer/issues/2280 composer issue #2280] for further details of this bug.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detailed instructions:&lt;br /&gt;
* [http://getcomposer.org/doc/00-intro.md Composer documentation]&lt;br /&gt;
&lt;br /&gt;
Detailed instructions:&lt;br /&gt;
* [[PHPUnit installation in Windows]]&lt;br /&gt;
* [[PHPUnit installation in OS X]]&lt;br /&gt;
&lt;br /&gt;
== Uninstalling previous PEAR based version ==&lt;br /&gt;
&lt;br /&gt;
Before using composer, this page used to suggest to install phpunit via PEAR. If you did so, you may wish to uninstall that package now. This should work:&lt;br /&gt;
&lt;br /&gt;
   $ pear uninstall phpunit/DbUnit&lt;br /&gt;
   $ pear uninstall phpunit/PHPUnit&lt;br /&gt;
&lt;br /&gt;
=Initialisation of test environment=&lt;br /&gt;
&lt;br /&gt;
Our PHPUnit integration requires a dedicated database and dataroot.  First, add a new dataroot directory and prefix into your config.php, you can find examples in config-dist.php (scroll down to &#039;Section 9&#039;).&lt;br /&gt;
&lt;br /&gt;
 $CFG-&amp;gt;phpunit_prefix = &#039;phpu_&#039;;&lt;br /&gt;
 $CFG-&amp;gt;phpunit_dataroot = &#039;/home/example/phpu_moodledata&#039;;&lt;br /&gt;
&lt;br /&gt;
Some PHPUnit tests require a live internet connection. If your system does not have a direct connection to the Internet, you also need to specify your proxy in config.php - even though you normally specify it by using the admin settings user interface. (If you do not use a proxy, you can skip this step.) Check the settings on the relevant admin settings page, or from the mdl_config table in your database, if you are unsure of the correct values.&lt;br /&gt;
 &lt;br /&gt;
 // Normal proxy settings&lt;br /&gt;
 $CFG-&amp;gt;proxyhost = &#039;wwwcache.example.org&#039;;&lt;br /&gt;
 $CFG-&amp;gt;proxyport = 80;&lt;br /&gt;
 $CFG-&amp;gt;proxytype = &#039;HTTP&#039;;&lt;br /&gt;
 $CFG-&amp;gt;proxybypass = &#039;localhost, 127.0.0.1, .example.org&#039;;&lt;br /&gt;
 // Omit the next lines if your proxy doesn&#039;t need a username/password:&lt;br /&gt;
 $CFG-&amp;gt;proxyuser = &#039;systemusername&#039;;&lt;br /&gt;
 $CFG-&amp;gt;proxypassword = &#039;systempassword&#039;;&lt;br /&gt;
&lt;br /&gt;
From Moodle 2.8.5 onwards, you can also provide specific database settings for unit testing (if these are not provided, the standard database settings will be used):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$CFG-&amp;gt;phpunit_dbtype    = &#039;pgsql&#039;;      // &#039;pgsql&#039;, &#039;mariadb&#039;, &#039;mysqli&#039;, &#039;mssql&#039;, &#039;sqlsrv&#039; or &#039;oci&#039;&lt;br /&gt;
$CFG-&amp;gt;phpunit_dblibrary = &#039;native&#039;;     // &#039;native&#039; only at the moment&lt;br /&gt;
$CFG-&amp;gt;phpunit_dbhost    = &#039;127.0.0.1&#039;;  // eg &#039;localhost&#039; or &#039;db.isp.com&#039; or IP&lt;br /&gt;
$CFG-&amp;gt;phpunit_dbname    = &#039;mytestdb&#039;;     // database name, eg moodle&lt;br /&gt;
$CFG-&amp;gt;phpunit_dbuser    = &#039;postgres&#039;;   // your database username&lt;br /&gt;
$CFG-&amp;gt;phpunit_dbpass    = &#039;some_password&#039;;   // your database password&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you need to initialise the test environment using following command.&lt;br /&gt;
&lt;br /&gt;
 cd /home/example/moodle&lt;br /&gt;
 php admin/tool/phpunit/cli/init.php&lt;br /&gt;
&lt;br /&gt;
This command has to be repeated after any upgrade, plugin (un)installation or if you have added tests to a plugin you are developing:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; make sure that your php cli executable (or the one you want to use) is correctly on your path as the individual init scripts will call it repeatedly. Also, ensure en_AU locale is installed on your server.&lt;br /&gt;
&lt;br /&gt;
== LDAP ==&lt;br /&gt;
If you want to run LDAP unit tests you must have a working, configured LDAP environment on your test server. There must be a basic LDAP tree structure in place or tests will fail with &amp;quot;Search: No such object&amp;quot;. Build an LDAP tree structure in a new shell prompt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ldapadd -H ldap://127.0.0.1 -D &amp;quot;cn=admin,dc=yourcomputer,dc=local&amp;quot; -W&lt;br /&gt;
dn:dc=yourcomputer,dc=local&lt;br /&gt;
objectClass:dcObject&lt;br /&gt;
objectClass:organizationalUnit&lt;br /&gt;
dc:yourcomputer&lt;br /&gt;
ou:YOURCOMPUTER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In config.php tell Moodle where to look for your test LDAP environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define(&#039;TEST_AUTH_LDAP_HOST_URL&#039;, &#039;ldap://127.0.0.1&#039;);&lt;br /&gt;
define(&#039;TEST_AUTH_LDAP_BIND_DN&#039;, &#039;cn=admin,dc=yourcomputer,dc=local&#039;);&lt;br /&gt;
define(&#039;TEST_AUTH_LDAP_BIND_PW&#039;, &#039;*&#039;);&lt;br /&gt;
define(&#039;TEST_AUTH_LDAP_DOMAIN&#039;, &#039;dc=yourcomputer,dc=local&#039;);&lt;br /&gt;
define(&#039;TEST_LDAPLIB_HOST_URL&#039;, &#039;ldap://127.0.0.1&#039;);&lt;br /&gt;
define(&#039;TEST_LDAPLIB_BIND_DN&#039;, &#039;cn=admin,dc=yourcomputer,dc=local&#039;);&lt;br /&gt;
define(&#039;TEST_LDAPLIB_BIND_PW&#039;, &#039;*&#039;);&lt;br /&gt;
define(&#039;TEST_LDAPLIB_DOMAIN&#039;, &#039;dc=yourcomputer,dc=local&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Test execution=&lt;br /&gt;
&lt;br /&gt;
To execute all test suites from main configuration file execute the &amp;lt;code&amp;gt;vendor/bin/phpunit&amp;lt;/code&amp;gt; script from your &amp;lt;code&amp;gt;$CFG-&amp;gt;dirroot&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 cd /home/example/moodle&lt;br /&gt;
 vendor/bin/phpunit&lt;br /&gt;
&lt;br /&gt;
The rest of examples uses &amp;lt;code&amp;gt;phpunit&amp;lt;/code&amp;gt;, please substitute it with &amp;lt;code&amp;gt;vendor/bin/phpunit&amp;lt;/code&amp;gt; or create a shortcut in your dirroot.&lt;br /&gt;
&lt;br /&gt;
In IDEs, you may need to specify the path to the PHPUnit configuration file. Use the absolute path to &amp;lt;code&amp;gt;phpunit.xml&amp;lt;/code&amp;gt; from your &amp;lt;code&amp;gt;$CFG-&amp;gt;dirroot&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is an alternative script for running of tests via web interface: &amp;lt;code&amp;gt;admin/tool/phpunit/webrunner.php&amp;lt;/code&amp;gt;. Use this as the last resort only when you cannot use the command-line interface on your test server. It will most probably break due to permissions problems if you try to execute it both from command-line and from webrunner. This feature is not officially supported.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to run only some tests===&lt;br /&gt;
&lt;br /&gt;
==== Running a single test quickly ====&lt;br /&gt;
&lt;br /&gt;
The fastest way to run a single test is:&lt;br /&gt;
&lt;br /&gt;
 vendor/bin/phpunit my_test_class_name my/tests/filename.php&lt;br /&gt;
&lt;br /&gt;
This is faster than other methods because it avoids the need to search for the test file, but you should be careful because it may be possible to run tests this way which are not included in the normal run. If you use this method, do at least one full test run (or --group run, as below) to ensure the test can be found.&lt;br /&gt;
&lt;br /&gt;
Please note the path name is optional if the testcase class and file names are standardised as described in [[Writing PHPUnit tests]].&lt;br /&gt;
&lt;br /&gt;
==== Using the @group annotation ====&lt;br /&gt;
&lt;br /&gt;
If you add annotations like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Unit tests for {@link stack_cas_keyval}.&lt;br /&gt;
 * @group qtype_stack&lt;br /&gt;
 */&lt;br /&gt;
class qtype_stack_cas_keyval_exception_testcase extends basic_testcase {&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to all the classes in your plugin, then you can run just the tests for your plugin by doing&lt;br /&gt;
&lt;br /&gt;
 phpunit --group qtype_stack&lt;br /&gt;
&lt;br /&gt;
Therefore, it is suggested that you annotate all your tests with the Frankenstyle name of your plugin.&lt;br /&gt;
&lt;br /&gt;
==== Using multiple phpunit.xml files ====&lt;br /&gt;
&lt;br /&gt;
It&#039;s easy to create alternative phpunit.xml files defining which tests must be run together. For reference, take a look to the default /phpunit.xml available in your base directory once the testing environment has been initialised. After creating the custom file you will be able to run those tests with&lt;br /&gt;
&lt;br /&gt;
 vendor/bin/phpunit -c path/to/your/alternative/phpunit/file.xml&lt;br /&gt;
&lt;br /&gt;
Also, for commodity, you can use this command:&lt;br /&gt;
&lt;br /&gt;
 php admin/tool/phpunit/cli/util.php --buildcomponentconfigs&lt;br /&gt;
&lt;br /&gt;
It will, automatically, create one valid phpunit.xml file within each component (plugin or subsystem) and other important directories, so later you will be able to execute tests like&lt;br /&gt;
&lt;br /&gt;
 vendor/bin/phpunit -c mod/forum[/phpunit.xml]  // Note that it&#039;s not needed to specify the name of the file (if it is &#039;phpunit.xml&#039;).&lt;br /&gt;
 vendor/bin/phpunit -c question&lt;br /&gt;
 vendor/bin/phpunit -c question/type/calculated&lt;br /&gt;
 vendor/bin/phpunit -c backup&lt;br /&gt;
 vendor/bin/phpunit -c lib/dml&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
or, also&lt;br /&gt;
&lt;br /&gt;
 cd directory/with/phpunit.xml&lt;br /&gt;
 phpunit&lt;br /&gt;
&lt;br /&gt;
=External test resources=&lt;br /&gt;
{{Moodle 2.6}}&lt;br /&gt;
By default Moodle phpunit tests contact http://download.moodle.org server when testing curl related functionality. Optionally you may checkout a local copy of the test scripts and access it instead:&lt;br /&gt;
&lt;br /&gt;
# clone https://github.com/moodlehq/moodle-exttests to web directory&lt;br /&gt;
# add to your config.php or modify phpunit.xml file &amp;lt;code php&amp;gt;define(&#039;TEST_EXTERNAL_FILES_HTTP_URL&#039;, &#039;http://localhost/moodle-exttests&#039;);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Writing new tests=&lt;br /&gt;
* read [http://www.phpunit.de/manual/current/en/ official PHPUnit online documentation]&lt;br /&gt;
* see [[Writing PHPUnit tests]]&lt;br /&gt;
&lt;br /&gt;
=Conversion of existing SimpleTests=&lt;br /&gt;
* see [[SimpleTest conversion]]&lt;br /&gt;
&lt;br /&gt;
=PHPUnit support in IDEs=&lt;br /&gt;
&lt;br /&gt;
* [[Setting up Eclipse]]&lt;br /&gt;
* [[Setting up Netbeans]]&lt;br /&gt;
* [[Setting up PhpStorm]]&lt;br /&gt;
&lt;br /&gt;
=Common Unit Test Problems=&lt;br /&gt;
[[Common unit test problems]]&lt;br /&gt;
&lt;br /&gt;
=Performance=&lt;br /&gt;
&lt;br /&gt;
A typical run of full PHPUnit tests for Moodle 2.7 takes 10-20 minutes depending on the machine. If tests run slowly for you:&lt;br /&gt;
&lt;br /&gt;
* Ensure you are using a database and filesystem running on the same machine that is running the tests (not on a remote server).&lt;br /&gt;
* Apply developer-only performance settings to your database: [[Postgres Tuning For Developers]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Unit testing]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LDAP_API&amp;diff=52515</id>
		<title>LDAP API</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LDAP_API&amp;diff=52515"/>
		<updated>2017-05-24T06:30:17Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Begin a summary of LDAP API&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LDAP API enables it is used by [[LDAP authentication]] module and [https://docs.moodle.org/en/LDAP_enrolment LDAP enrolment]&lt;br /&gt;
&lt;br /&gt;
To use it, require lib/ldaplib.php&lt;br /&gt;
==Functions==&lt;br /&gt;
===ldap_supported_usertype===&lt;br /&gt;
Returns predefined user types&lt;br /&gt;
===ldap_getdefaults===&lt;br /&gt;
Initializes needed variables for ldap-module&lt;br /&gt;
===ldap_isgroupmember===&lt;br /&gt;
Checks if user belongs to specific group(s) or is in a subtree&lt;br /&gt;
===ldap_connect_moodle===&lt;br /&gt;
Tries connect to specified ldap servers&lt;br /&gt;
===ldap_find_userdn===&lt;br /&gt;
Search specified contexts for username and return the user dn&lt;br /&gt;
===ldap_normalise_objectclass===&lt;br /&gt;
Normalise the supplied objectclass filter. This normalisation is a rudimentary attempt to format the objectclass filter correctly.&lt;br /&gt;
===ldap_get_entries_moodle===&lt;br /&gt;
Returns values like ldap_get_entries but is binary compatible and returns all attributes as array. This will return lower case entries.&lt;br /&gt;
===ldap_filter_addslashes===&lt;br /&gt;
Quote control characters in texts used in LDAP filters - see RFC 4515/2254&lt;br /&gt;
===ldap_get_dn_special_chars===&lt;br /&gt;
Returns the special characters in order of replacement&lt;br /&gt;
===ldap_addslashes===&lt;br /&gt;
Quote control characters in AttributeValue parts of a RelativeDistinguishedName used in LDAP distinguished names - See RFC 4514/2253&lt;br /&gt;
===ldap_stripslashes===&lt;br /&gt;
Unquote control characters in AttributeValue parts of a RelativeDistinguishedName used in LDAP distinguished names - See RFC 4514/2253&lt;br /&gt;
===ldap_paged_results_supported===&lt;br /&gt;
Check if we can use paged results (see RFC 2696). We need to use LDAP version 3 (or later), otherwise the server cannot use them. If we also pass in a valid LDAP connection handle, we also check whether the server actually supports them.&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LDAP_authentication&amp;diff=52514</id>
		<title>LDAP authentication</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LDAP_authentication&amp;diff=52514"/>
		<updated>2017-05-24T06:23:17Z</updated>

		<summary type="html">&lt;p&gt;Johnok: More links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LDAP authentication module enables users to connect to an LDAP server for authentication. The module extends the [[Authentication API]] and is implemented using the [[LDAP API]]&lt;br /&gt;
&lt;br /&gt;
For more information on how to set up your LDAP test environment, go to [[LDAP development setup]].&lt;br /&gt;
&lt;br /&gt;
For more information on how to use the LDAP authentication module, go to [https://docs.moodle.org/en/LDAP_authentication the user docs page on LDAP authentication]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LDAP_authentication&amp;diff=52513</id>
		<title>LDAP authentication</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LDAP_authentication&amp;diff=52513"/>
		<updated>2017-05-24T06:19:41Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Intro on LDAP auth for devs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LDAP authentication module enables users to connect to an LDAP server for authentication. The module extends the [[Authentication API]] and is implemented using the [[LDAP API]]&lt;br /&gt;
&lt;br /&gt;
For more information on how to set up your LDAP test environment, go to [[LDAP development setup]].&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Callbacks&amp;diff=52466</id>
		<title>Talk:Callbacks</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Callbacks&amp;diff=52466"/>
		<updated>2017-05-22T01:03:00Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Simplify&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Calling these callbacks officially is confusing for any new developer coming into moodle. A callback is a function reference passed as a parameter in a function call. Or from wikipedia &amp;quot;a callback is any executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at a given time.&amp;quot; This is not what these are. Sure, we can make the argument that these are &amp;quot;moodle&amp;quot; callbacks. But these really are just API methods. As an open source project we have responsibility to the correct terms to refer to parts of our infrastructure to lower the barrier for entry and understanding of our code. --[[User:John Okely|John Okely]] ([[User talk:John Okely|talk]]) 09:00, 22 May 2017 (AWST)&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Callbacks&amp;diff=52465</id>
		<title>Talk:Callbacks</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Callbacks&amp;diff=52465"/>
		<updated>2017-05-22T01:00:38Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Initiate discussion on better name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Calling these callbacks officially is confusing for any new developer coming into moodle. A callback is a function reference passed as a parameter in a function call for the called function to call. Or from wikipedia &amp;quot;a callback is any executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at a given time.&amp;quot; This is not what these are. Sure, we can make the argument that these are &amp;quot;moodle&amp;quot; callbacks. But these really are just API methods. As an open source project we have responsibility to the correct terms to refer to parts of our infrastructure to lower the barrier for entry and understanding of our code. --[[User:John Okely|John Okely]] ([[User talk:John Okely|talk]]) 09:00, 22 May 2017 (AWST)&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Process&amp;diff=52277</id>
		<title>Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Process&amp;diff=52277"/>
		<updated>2017-05-09T02:43:40Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add step about UX&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document summarises the various development processes used in developing Moodle.  There are four main processes that overlap.&lt;br /&gt;
&lt;br /&gt;
==Integration workflow in the tracker==&lt;br /&gt;
&lt;br /&gt;
The Moodle tracker keeps track of the status of all bug fixes and new features. &lt;br /&gt;
&lt;br /&gt;
We use a workflow that ensures that new code receives multiple reviews by different people before it is included into the core Moodle code.&lt;br /&gt;
&lt;br /&gt;
[[Image:Workflow.jpg]]&lt;br /&gt;
&lt;br /&gt;
A number of roles make this work:&lt;br /&gt;
&lt;br /&gt;
===Users===&lt;br /&gt;
&lt;br /&gt;
Users report bugs and make feature requests directly in the tracker, by creating new issues with a summary and a description.&lt;br /&gt;
&lt;br /&gt;
===Developers===&lt;br /&gt;
&lt;br /&gt;
Developers work on the issues in the tracker to specify solutions and write code that implements these solutions.  They will often ask other developers to &amp;quot;peer review&amp;quot; their code in the early stages to avoid problems later on.&lt;br /&gt;
&lt;br /&gt;
While many of the developers work for Moodle.com, a large number are part of the global development community around Moodle. If you&#039;re interested in becoming a recognised developer, see [[Tracker_guide#Tracker_groups_and_permissions|Tracker groups and permissions]].&lt;br /&gt;
&lt;br /&gt;
===CiBoT===&lt;br /&gt;
&lt;br /&gt;
CiBoT is not a person but a bot who monitors the tracker and performs the [[Automated code review]] when issue is submitted for Peer review or when developer added &#039;&#039;cime&#039;&#039; label.&lt;br /&gt;
&lt;br /&gt;
===Component leads===&lt;br /&gt;
&lt;br /&gt;
[http://tracker.moodle.org/browse/MDL#selectedTab=com.atlassian.jira.plugin.system.project%3Acomponents-panel Component leads] are developers with some responsibility for particular components (plugins or modules) in Moodle.  They have authority to decide that a particular fix is suitable and complete enough to be considered for integration in Moodle core and should be called upon to complete peer reviews for code in their components.&lt;br /&gt;
&lt;br /&gt;
===Integrators===&lt;br /&gt;
&lt;br /&gt;
On Monday and Tuesday of each week, the integration team (a small team of senior developers employed by Moodle HQ) conducts a code-level review of all issues in the integration queue.  This is often called the &amp;quot;pull&amp;quot; process.  If the fix is judged appropriate they will integrate the code into our git integration repository for further testing and it gets added to the testing queue.&lt;br /&gt;
&lt;br /&gt;
If they find problems they reject the issue and send it back to the developer for further work.&lt;br /&gt;
&lt;br /&gt;
===Testers===&lt;br /&gt;
&lt;br /&gt;
On Wednesday each week, testers look at all the issues in the testing queue, trying each fix and feature to make sure that it does actually fix the problem it was supposed to, and that there are no regressions.&lt;br /&gt;
&lt;br /&gt;
If they find problems they reject the issue and integrators may remove it from the integration repository and push it back to the developer for further work.&lt;br /&gt;
&lt;br /&gt;
See [[Testing of integrated issues]] for more details.&lt;br /&gt;
&lt;br /&gt;
===Production maintainers===&lt;br /&gt;
&lt;br /&gt;
On Thursday each week, production maintainers merge all the issues that passed testing into the git production repository, and it becomes available for use on production systems via git and download packages.&lt;br /&gt;
&lt;br /&gt;
==Stable maintenance cycles==&lt;br /&gt;
&lt;br /&gt;
Moodle releases regular updates of the stable version of the software to fix bugs and other issues.  Releases like 2.2.1, 2.2.2, 2.2.3 etc only include fixes based on the latest major release (2.2) and never any significant new features or database changes.&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ there are teams of developers using the [http://www.scrum.org/ Scrum framework] to work on these issues (as well as new features for [[#Major_release_cycles|major releases]]). &lt;br /&gt;
&lt;br /&gt;
===Minor release (point release) timing===&lt;br /&gt;
&lt;br /&gt;
After [[#Major_release_cycles|major releases]] there will be minor releases.&lt;br /&gt;
* x.x.1 will occur approximately two months after each major release (eg. 2.x).&lt;br /&gt;
* There will then be another point release every two months after that.&lt;br /&gt;
&lt;br /&gt;
See the [[Releases#General_release_calendar|General release calendar]] for details.&lt;br /&gt;
&lt;br /&gt;
===Issue triage===&lt;br /&gt;
&lt;br /&gt;
[[Bug_triage|Issue triage]] involves evaluating new issues, making sure that they are recorded correctly.  One of the most important jobs triagers do is to identify issues that should be fixed in the stable branch. These are set with a priority ranging from &amp;quot;Trivial&amp;quot; up to &amp;quot;Blocker&amp;quot; and other features are checked.&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ there are currently teams working on stable issues (mostly bugs reported by users) and improvements and new features (Partners, Moodle Association, user suggestions and Martin Dougiamas).&lt;br /&gt;
&lt;br /&gt;
===Scrum===&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ, every three weeks, the stable team takes a number of the most urgent issues from the backlog to work on during a period known as a &#039;&#039;sprint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
At the start of a sprint there is a period of planning and estimation. All issues on the backlog are given a relative rank that is based on issue features including priority, security, Partner interest, patches and votes. Issues are given a relative size in Story Points and these points are summed to allow the teams to determine how many issues they can work on in the sprint.&lt;br /&gt;
&lt;br /&gt;
During the sprint, the team meets daily to discuss solutions and progress, as well as to organise testing and peer reviews of code.  The team has a &#039;&#039;Scrum master&#039;&#039; to help everyone stay organised, to &amp;quot;unblock&amp;quot; any barriers to progress and to protect the team from distracting influences (mostly people attempting to add to the developers&#039; workloads) during the sprint.  The teams&#039; work is documented publicly in the tracker.&lt;br /&gt;
&lt;br /&gt;
Whenever a solution for an issue is finished, it is submitted into to the standard integration workflow process described above.&lt;br /&gt;
&lt;br /&gt;
==Major release cycles==&lt;br /&gt;
&lt;br /&gt;
Since Moodle 2.0, we have a policy of release major versions (eg 2.1, 2.2) every six months in May and November. See the [[Releases#General_release_calendar|General release calendar]] for more details.&lt;br /&gt;
&lt;br /&gt;
Each release can be different, but generally the cycles work as follows.&lt;br /&gt;
&lt;br /&gt;
===Define roadmap===&lt;br /&gt;
&lt;br /&gt;
The product owner (Martin Dougiamas) defines the likely roadmap based on community wishes, third-party developments and important issues within the existing code. &lt;br /&gt;
&lt;br /&gt;
Sometimes new features might be based on earlier features, sometimes they may be something developed by a third party that needs to be evaluated and sometimes it might be something completely new.&lt;br /&gt;
&lt;br /&gt;
===Planning and development===&lt;br /&gt;
&lt;br /&gt;
The UX team, employed at Moodle HQ, work on specifications of major new features throughout the cycle, specifying project ahead of development time.&lt;br /&gt;
&lt;br /&gt;
New features are worked on by the &amp;quot;Dev&amp;quot; team. The process of [[#New_feature_development|new feature development]] is described below. When specifications are in place, new code is developed during sprints and goes through the standard weekly integration workflow described above.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
&lt;br /&gt;
During development, as new code is integrated, automated testing conducted at the [[PHPUnit|code]] and [[Acceptance_testing|interface]] levels, to make sure there are no regressions caused by new features.&lt;br /&gt;
&lt;br /&gt;
In the last month before the release, a feature freeze is called (no new features can be added) and our QA team performs manual functional testing of Moodle features. The current list of functional tests is listed in the tracker in the [http://tracker.moodle.org/browse/MDLQA-1 MDLQA project]. This list of tests is extended as new features are added, but it is also being reduced as more automated [[Acceptance_testing|acceptance tests]] are developed.&lt;br /&gt;
&lt;br /&gt;
For more details, see [[Testing]].&lt;br /&gt;
&lt;br /&gt;
===Sprints===&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ, development takes place in sprints. The sprints are three-week periods during which developers to focus on a fixed list of issues. Sprints are arranged within each release cycle as shown in the diagram below.&lt;br /&gt;
&lt;br /&gt;
===Events during cycle===&lt;br /&gt;
&lt;br /&gt;
During each cycle there are a periods and events that occur between and around sprints.&lt;br /&gt;
&lt;br /&gt;
[[Image:Dev sprint calendar.png|800px]]&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Planning and bug fixing&#039;&#039;&#039;&lt;br /&gt;
: A period during which the Roadmap is explored, specs are written and prototypes are created. Regressions in the recent release are fixed as they arise.&lt;br /&gt;
; &#039;&#039;&#039;End sync period&#039;&#039;&#039;&lt;br /&gt;
: During the [[Integration Review#On-sync period|on-sync period]], the recent release and master versions are kept synchronised. No new code is added during this period, which ensures regressions are fixed rapidly. This also allows for planning and provides relief for developers after a release.&lt;br /&gt;
; &#039;&#039;&#039;Personal projects&#039;&#039;&#039;&lt;br /&gt;
: Affecting full-time HQ developers only, this period allows for individual creations to be explored and provides a break from sprints.&lt;br /&gt;
; &#039;&#039;&#039;Code freeze&#039;&#039;&#039;&lt;br /&gt;
: A point after which no new code (only fixes to existing code) is accepted until beyond the release. This stabilisation allows for QA testing.&lt;br /&gt;
; &#039;&#039;&#039;QA, bug fixing, continuous integration&#039;&#039;&#039;&lt;br /&gt;
: A period after the code freeze where quality assurance testing takes place. No new code is added, which means developers are able to respond rapidly to bugs found. Integration becomes [[Integration Review#During continuous integration/Freeze/QA period|continuous]], meaning that failed QA tests can be re-run within days rather than having to wait for the weekly release.&lt;br /&gt;
; &#039;&#039;&#039;Release candidate&#039;&#039;&#039;&lt;br /&gt;
: A point prior to the full release where a candidate is made public for wider testing.&lt;br /&gt;
&lt;br /&gt;
==New feature development==&lt;br /&gt;
&lt;br /&gt;
Major new features in Moodle usually should go through the following process.&lt;br /&gt;
&lt;br /&gt;
===Specification===&lt;br /&gt;
&lt;br /&gt;
The User Experience (UX) team should create detailed wireframes and features and goals for the new feature. It should be agreed upon and as final as possible before development starts.&lt;br /&gt;
&lt;br /&gt;
Developers should create a detailed spec (here in the developer docs) outlining their goals for the development and their design for meeting those goals.  The more detail the better.&lt;br /&gt;
&lt;br /&gt;
Developers should also create an issue in the tracker (linking to your docs) to keep track of the project status.&lt;br /&gt;
&lt;br /&gt;
===Community consultation===&lt;br /&gt;
&lt;br /&gt;
Get the community involved in looking at the spec to see if it meets their needs and to get further feedback.  Please post in the [http://moodle.org/mod/forum/view.php?id=8052 Future major features forum] on moodle.org. You could also blog/tweet about it etc.&lt;br /&gt;
&lt;br /&gt;
Community developers proposing a new feature will want to talk with HQ core developers to make sure the ideas make sense, and possibly get some review on database design, architecture and so on.&lt;br /&gt;
&lt;br /&gt;
===Develop the code using Git===&lt;br /&gt;
&lt;br /&gt;
Develop your code on an open Git repository, like github.com.  That enables people to see your code and to help you as it develops.  Testers and early adopters also have the opportunity to try it early in the process and give you more valuable feedback.&lt;br /&gt;
&lt;br /&gt;
It is essential that your code follows the [[Coding|Moodle Coding Guide]].&lt;br /&gt;
&lt;br /&gt;
===Submit your code for peer review===&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Request peer review&amp;quot; button in the tracker.&lt;br /&gt;
&lt;br /&gt;
You need to fill in the information about your public git repository and which branches the fixes are on. Make sure you are listed as Assignee.&lt;br /&gt;
&lt;br /&gt;
This would be a good time to fill in the testing instructions for how to verify your fix is correct. You may also wish to add a comment in the bug.&lt;br /&gt;
&lt;br /&gt;
Component leads should put issues, which affect code in their components, up for peer review to allow interested parties to provide feedback. However, if it is not reviewed in a week, a component lead may send the issue to integration. If integrators consider that the issue has not been given proper chance for peer review (e.g. is extremely large or complex...) it can be decided to move the issue back in the process.&lt;br /&gt;
&lt;br /&gt;
All other developers, including people who are component leads but working outside their component, should have their issues peer reviewed before they are sent to integration.&lt;br /&gt;
&lt;br /&gt;
===Peer review===&lt;br /&gt;
&lt;br /&gt;
The [http://tracker.moodle.org/browse/MDL#selectedTab=com.atlassian.jira.plugin.system.project%3Acomponents-panel component lead] should peer-review the change. If there is no component lead for an affected component, any other recognised developer may complete the peer review. The peer reviewer will either give you comments on the code and if it needs more work.&lt;br /&gt;
&lt;br /&gt;
Process and the list of things to check are described in [[Peer reviewing]].&lt;br /&gt;
&lt;br /&gt;
===Submit the code for integration===&lt;br /&gt;
&lt;br /&gt;
The developer is responsible for acting on the feedback from the peer reviewer. If changes have been made and the developer is satisfied that this has accommodated the feedback from the peer reviewer, then the developer can submit the issue for integration. If there have been significant changes after the peer review, or if the peer reviewer has raised concerns about the approach taken, then the developer should offer the issue up for peer review again, most often to the same peer reviewer, but not necessarily.&lt;br /&gt;
&lt;br /&gt;
Submitting an issue to integration is much the same as for any Moodle code.  See the information about the integration workflow above.&lt;br /&gt;
&lt;br /&gt;
==Fixing a bug==&lt;br /&gt;
&lt;br /&gt;
Bug fixes, and minor features or enhancements should go through the following process. (The only exception is English language string typo fixes or suggested improvements, which may be contributed to the en_fix language pack on the [http://lang.moodle.org/ Moodle translation site].)&lt;br /&gt;
&lt;br /&gt;
===Make sure there is a tracker issue===&lt;br /&gt;
&lt;br /&gt;
Every change must have an issue in the tracker. If you are fixing a bug, there is probably one there already, but if not, create one. [[Tracker tips|Tips for searching tracker]].&lt;br /&gt;
&lt;br /&gt;
===Decide which branches the fix is required on===&lt;br /&gt;
&lt;br /&gt;
Bugs should normally be fixed on all the supported stable branches that are affected. New features should just go into master, but sometimes minor enhancements are made on the most recent stable branch.&lt;br /&gt;
&lt;br /&gt;
===Develop your change using git===&lt;br /&gt;
&lt;br /&gt;
Develop your fix and push the change to an open git repository, for example on github.com. See also [[Git for developers]]&lt;br /&gt;
&lt;br /&gt;
It is essential that your code follows the [[Coding|Moodle Coding Guide]].&lt;br /&gt;
&lt;br /&gt;
You will need to push one commit for each branch the fix needs to be applied to. Often people use branch names like wip_MDL-12345_31_brief_name so it is clear what each branch is. [http://kernel.org/pub/software/scm/git/docs/git-cherry-pick.html git cherry-pick] can help with replicating the fix onto different branches.&lt;br /&gt;
&lt;br /&gt;
===Submit your code for peer review===&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Request peer review&amp;quot; button in the tracker. &lt;br /&gt;
&lt;br /&gt;
You need to fill in the information about your public git repository and which branches the fixes are on. Make sure you are listed as Assignee.&lt;br /&gt;
&lt;br /&gt;
This would be a good time to fill in the testing instructions for how to verify your fix is correct. You may also wish to add a comment in the bug. (... or should you put that information in the commit comment?)&lt;br /&gt;
&lt;br /&gt;
If you &#039;&#039;&#039;don&#039;t see &amp;quot;Request peer review&amp;quot; button&#039;&#039;&#039;, just comment on the issue with the git repository URL, branch name, diff URL and testing instructions. Component lead or another user with sufficient privileges will send the issue up for peer for you. After your first fix is integrated you will be added to developers group and will be able to send issues for peer review.&lt;br /&gt;
&lt;br /&gt;
===Peer review===&lt;br /&gt;
&lt;br /&gt;
The [https://tracker.moodle.org/projects/MDL?selectedItem=com.atlassian.jira.jira-projects-plugin:components-page component lead] should peer-review the change. If there is no component lead for an affected component, any other recognised developer may complete the peer review. The peer reviewer will either give you comments on the code and if it needs more work.&lt;br /&gt;
&lt;br /&gt;
Process and the list of things to check are described in [[Peer reviewing]].&lt;br /&gt;
&lt;br /&gt;
===Submit your code for integration===&lt;br /&gt;
&lt;br /&gt;
It will then be reviewed the following week by one of the integration team and either integrated or rejected. Once integrated, the fix will be tested, and then included in the next weekly release.&lt;br /&gt;
&lt;br /&gt;
==Security issues==&lt;br /&gt;
&lt;br /&gt;
Issues identified as [[Security|security issues]] are resolved in a slightly different way, in order to achieve responsible disclosure as described in [[Moodle security procedures]].&lt;br /&gt;
&lt;br /&gt;
* Security issues should be labelled as &amp;quot;Minor&amp;quot; or &amp;quot;Serious&amp;quot; in order control visibility of the issue.&lt;br /&gt;
** An issue reported with a security level of &amp;quot;Could be a security issue&amp;quot; should be evaluated as soon as possible and either set as &amp;quot;Minor&amp;quot; or &amp;quot;Serious&amp;quot; or the security level should be set to &amp;quot;None&amp;quot;.&lt;br /&gt;
* Solutions to security issues should not:&lt;br /&gt;
** be made available in public repositories.&lt;br /&gt;
*** If a developer has shared a solution as Git branches via Github, they should be asked to provide the solutions as [[How_to_create_a_patch|stand-alone patches]] attached to the issue and to [[#How to remove a branch from Github|remove the solution from Github]].&lt;br /&gt;
** contain details about the security problem in the commit message.&lt;br /&gt;
*** Instead use generic terms like, &amp;quot;improve&amp;quot;, &amp;quot;better handling of&amp;quot; ..&lt;br /&gt;
* The solution will not be integrated until the week before a [[Process#Stable_maintenance_cycles|minor release]] following the normal [[Release process|Release process]]. In short, the issue will be incorporated into the integration version, rebased, tested and made ready for release as a normal issue would, but not until as late as possible.&lt;br /&gt;
* Details of security issues will be shared with registered admins with the minor release.&lt;br /&gt;
* Details of security issues will not be publicly announced until one week after a minor release to allow admins to update.&lt;br /&gt;
&lt;br /&gt;
Note that not all the labelled (minor) security issues are always handled following the procedure above. It&#039;s possible that, after discussion, it&#039;s decided a given issue is not a real Moodle security problem (say external disclosures/potential attacks using Moodle as vector, not as target, discussions revealing some private details...). Those issues will be processed as normal issues, generating the needed user documentation if necessary and will be part of the habitual weekly releases.&lt;br /&gt;
&lt;br /&gt;
====How to remove a branch from Github====&lt;br /&gt;
&lt;br /&gt;
To remove a branch from Github, you can use the following command.&lt;br /&gt;
&lt;br /&gt;
 git push github :remote_branch&lt;br /&gt;
&lt;br /&gt;
Where &#039;&#039;remote_branch&#039;&#039; is the name of your remote branch, for example &#039;wip-mdl-1234&#039;. This effectively replaces the remote branch with nothing, removing the remote branch, but leaving the branch intact in your local Git repository. Please note that its likely that your commit will still exist on github due to the nature of git, so its best to avoid doing this in the first place.&lt;br /&gt;
&lt;br /&gt;
==Policy issues==&lt;br /&gt;
&lt;br /&gt;
Occasionally within Moodle we run into policy issues where a high-level decision needs to be made about how things are to be done.&lt;br /&gt;
&lt;br /&gt;
In these cases the process is as follows:&lt;br /&gt;
* Create an issue in the tracker with a [https://tracker.moodle.org/browse/MDL/component/12733 Policy component] and put &amp;quot;POLICY:&amp;quot; as a prefix on the summary.&lt;br /&gt;
* In the description describe the problem clearly as well as all the options.  If it&#039;s long then make a page here in Moodle Dev Docs and link to it.&lt;br /&gt;
* Do not use this issue for code.  If there are issues that depend on this policy decision, then add tracker links to them as dependencies.&lt;br /&gt;
* Feel free to encourage people to come and talk about the policy to support various points of view.  The more evidence we have (from everyone in the community) the better.&lt;br /&gt;
&lt;br /&gt;
Some time has been scheduled in the weekly Moodle HQ meeting to look at Policy issues and try to make decisions on them.  We discuss all the evidence and try to achieve a high amount of consensus.  Deadlocked issues can be resolved by a decision from Martin Dougiamas (this is rarely needed).&lt;br /&gt;
&lt;br /&gt;
Decisions will be posted on the issue and that issue will be closed, allowing any dependent issues to continue to integration (or not).   Decisions are final and bribes hardly ever work.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Release process]]&lt;br /&gt;
* [[Deprecation]]&lt;br /&gt;
* [http://tracker.moodle.org/secure/Dashboard.jspa?selectPageId=11350 Integration dashboard]&lt;br /&gt;
&lt;br /&gt;
Walks-though of the process for contributors:&lt;br /&gt;
* By Dan Poltawski, Integrator: http://www.slideshare.net/poltawski/how-to-guarantee-your-change-is-integrated-to-moodle-core, https://www.youtube.com/watch?v=836WtnM2YpM&lt;br /&gt;
* By Tim Hunt, contributor: http://tjhunt.blogspot.co.uk/2012/03/fixing-bug-in-moodle-core-mechanics.html and https://www.youtube.com/watch?v=gPPA3h7OGQU&lt;br /&gt;
&lt;br /&gt;
[[Category:Processes]]&lt;br /&gt;
[[Category:Quality Assurance]]&lt;br /&gt;
[[Category:Git]]&lt;br /&gt;
[[Category:Core development]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Process&amp;diff=52276</id>
		<title>Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Process&amp;diff=52276"/>
		<updated>2017-05-09T02:41:47Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Update issue triage based on our new team and backlog&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document summarises the various development processes used in developing Moodle.  There are four main processes that overlap.&lt;br /&gt;
&lt;br /&gt;
==Integration workflow in the tracker==&lt;br /&gt;
&lt;br /&gt;
The Moodle tracker keeps track of the status of all bug fixes and new features. &lt;br /&gt;
&lt;br /&gt;
We use a workflow that ensures that new code receives multiple reviews by different people before it is included into the core Moodle code.&lt;br /&gt;
&lt;br /&gt;
[[Image:Workflow.jpg]]&lt;br /&gt;
&lt;br /&gt;
A number of roles make this work:&lt;br /&gt;
&lt;br /&gt;
===Users===&lt;br /&gt;
&lt;br /&gt;
Users report bugs and make feature requests directly in the tracker, by creating new issues with a summary and a description.&lt;br /&gt;
&lt;br /&gt;
===Developers===&lt;br /&gt;
&lt;br /&gt;
Developers work on the issues in the tracker to specify solutions and write code that implements these solutions.  They will often ask other developers to &amp;quot;peer review&amp;quot; their code in the early stages to avoid problems later on.&lt;br /&gt;
&lt;br /&gt;
While many of the developers work for Moodle.com, a large number are part of the global development community around Moodle. If you&#039;re interested in becoming a recognised developer, see [[Tracker_guide#Tracker_groups_and_permissions|Tracker groups and permissions]].&lt;br /&gt;
&lt;br /&gt;
===CiBoT===&lt;br /&gt;
&lt;br /&gt;
CiBoT is not a person but a bot who monitors the tracker and performs the [[Automated code review]] when issue is submitted for Peer review or when developer added &#039;&#039;cime&#039;&#039; label.&lt;br /&gt;
&lt;br /&gt;
===Component leads===&lt;br /&gt;
&lt;br /&gt;
[http://tracker.moodle.org/browse/MDL#selectedTab=com.atlassian.jira.plugin.system.project%3Acomponents-panel Component leads] are developers with some responsibility for particular components (plugins or modules) in Moodle.  They have authority to decide that a particular fix is suitable and complete enough to be considered for integration in Moodle core and should be called upon to complete peer reviews for code in their components.&lt;br /&gt;
&lt;br /&gt;
===Integrators===&lt;br /&gt;
&lt;br /&gt;
On Monday and Tuesday of each week, the integration team (a small team of senior developers employed by Moodle HQ) conducts a code-level review of all issues in the integration queue.  This is often called the &amp;quot;pull&amp;quot; process.  If the fix is judged appropriate they will integrate the code into our git integration repository for further testing and it gets added to the testing queue.&lt;br /&gt;
&lt;br /&gt;
If they find problems they reject the issue and send it back to the developer for further work.&lt;br /&gt;
&lt;br /&gt;
===Testers===&lt;br /&gt;
&lt;br /&gt;
On Wednesday each week, testers look at all the issues in the testing queue, trying each fix and feature to make sure that it does actually fix the problem it was supposed to, and that there are no regressions.&lt;br /&gt;
&lt;br /&gt;
If they find problems they reject the issue and integrators may remove it from the integration repository and push it back to the developer for further work.&lt;br /&gt;
&lt;br /&gt;
See [[Testing of integrated issues]] for more details.&lt;br /&gt;
&lt;br /&gt;
===Production maintainers===&lt;br /&gt;
&lt;br /&gt;
On Thursday each week, production maintainers merge all the issues that passed testing into the git production repository, and it becomes available for use on production systems via git and download packages.&lt;br /&gt;
&lt;br /&gt;
==Stable maintenance cycles==&lt;br /&gt;
&lt;br /&gt;
Moodle releases regular updates of the stable version of the software to fix bugs and other issues.  Releases like 2.2.1, 2.2.2, 2.2.3 etc only include fixes based on the latest major release (2.2) and never any significant new features or database changes.&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ there are teams of developers using the [http://www.scrum.org/ Scrum framework] to work on these issues (as well as new features for [[#Major_release_cycles|major releases]]). &lt;br /&gt;
&lt;br /&gt;
===Minor release (point release) timing===&lt;br /&gt;
&lt;br /&gt;
After [[#Major_release_cycles|major releases]] there will be minor releases.&lt;br /&gt;
* x.x.1 will occur approximately two months after each major release (eg. 2.x).&lt;br /&gt;
* There will then be another point release every two months after that.&lt;br /&gt;
&lt;br /&gt;
See the [[Releases#General_release_calendar|General release calendar]] for details.&lt;br /&gt;
&lt;br /&gt;
===Issue triage===&lt;br /&gt;
&lt;br /&gt;
[[Bug_triage|Issue triage]] involves evaluating new issues, making sure that they are recorded correctly.  One of the most important jobs triagers do is to identify issues that should be fixed in the stable branch. These are set with a priority ranging from &amp;quot;Trivial&amp;quot; up to &amp;quot;Blocker&amp;quot; and other features are checked.&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ there are currently teams working on stable issues (mostly bugs reported by users) and improvements and new features (Partners, Moodle Association, user suggestions and Martin Dougiamas).&lt;br /&gt;
&lt;br /&gt;
===Scrum===&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ, every three weeks, the stable team takes a number of the most urgent issues from the backlog to work on during a period known as a &#039;&#039;sprint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
At the start of a sprint there is a period of planning and estimation. All issues on the backlog are given a relative rank that is based on issue features including priority, security, Partner interest, patches and votes. Issues are given a relative size in Story Points and these points are summed to allow the teams to determine how many issues they can work on in the sprint.&lt;br /&gt;
&lt;br /&gt;
During the sprint, the team meets daily to discuss solutions and progress, as well as to organise testing and peer reviews of code.  The team has a &#039;&#039;Scrum master&#039;&#039; to help everyone stay organised, to &amp;quot;unblock&amp;quot; any barriers to progress and to protect the team from distracting influences (mostly people attempting to add to the developers&#039; workloads) during the sprint.  The teams&#039; work is documented publicly in the tracker.&lt;br /&gt;
&lt;br /&gt;
Whenever a solution for an issue is finished, it is submitted into to the standard integration workflow process described above.&lt;br /&gt;
&lt;br /&gt;
==Major release cycles==&lt;br /&gt;
&lt;br /&gt;
Since Moodle 2.0, we have a policy of release major versions (eg 2.1, 2.2) every six months in May and November. See the [[Releases#General_release_calendar|General release calendar]] for more details.&lt;br /&gt;
&lt;br /&gt;
Each release can be different, but generally the cycles work as follows.&lt;br /&gt;
&lt;br /&gt;
===Define roadmap===&lt;br /&gt;
&lt;br /&gt;
The product owner (Martin Dougiamas) defines the likely roadmap based on community wishes, third-party developments and important issues within the existing code. &lt;br /&gt;
&lt;br /&gt;
Sometimes new features might be based on earlier features, sometimes they may be something developed by a third party that needs to be evaluated and sometimes it might be something completely new.&lt;br /&gt;
&lt;br /&gt;
===Planning and development===&lt;br /&gt;
&lt;br /&gt;
The UX team, employed at Moodle HQ, work on specifications of major new features throughout the cycle, specifying project ahead of development time.&lt;br /&gt;
&lt;br /&gt;
New features are worked on by the &amp;quot;Dev&amp;quot; team. The process of [[#New_feature_development|new feature development]] is described below. When specifications are in place, new code is developed during sprints and goes through the standard weekly integration workflow described above.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
&lt;br /&gt;
During development, as new code is integrated, automated testing conducted at the [[PHPUnit|code]] and [[Acceptance_testing|interface]] levels, to make sure there are no regressions caused by new features.&lt;br /&gt;
&lt;br /&gt;
In the last month before the release, a feature freeze is called (no new features can be added) and our QA team performs manual functional testing of Moodle features. The current list of functional tests is listed in the tracker in the [http://tracker.moodle.org/browse/MDLQA-1 MDLQA project]. This list of tests is extended as new features are added, but it is also being reduced as more automated [[Acceptance_testing|acceptance tests]] are developed.&lt;br /&gt;
&lt;br /&gt;
For more details, see [[Testing]].&lt;br /&gt;
&lt;br /&gt;
===Sprints===&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ, development takes place in sprints. The sprints are three-week periods during which developers to focus on a fixed list of issues. Sprints are arranged within each release cycle as shown in the diagram below.&lt;br /&gt;
&lt;br /&gt;
===Events during cycle===&lt;br /&gt;
&lt;br /&gt;
During each cycle there are a periods and events that occur between and around sprints.&lt;br /&gt;
&lt;br /&gt;
[[Image:Dev sprint calendar.png|800px]]&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Planning and bug fixing&#039;&#039;&#039;&lt;br /&gt;
: A period during which the Roadmap is explored, specs are written and prototypes are created. Regressions in the recent release are fixed as they arise.&lt;br /&gt;
; &#039;&#039;&#039;End sync period&#039;&#039;&#039;&lt;br /&gt;
: During the [[Integration Review#On-sync period|on-sync period]], the recent release and master versions are kept synchronised. No new code is added during this period, which ensures regressions are fixed rapidly. This also allows for planning and provides relief for developers after a release.&lt;br /&gt;
; &#039;&#039;&#039;Personal projects&#039;&#039;&#039;&lt;br /&gt;
: Affecting full-time HQ developers only, this period allows for individual creations to be explored and provides a break from sprints.&lt;br /&gt;
; &#039;&#039;&#039;Code freeze&#039;&#039;&#039;&lt;br /&gt;
: A point after which no new code (only fixes to existing code) is accepted until beyond the release. This stabilisation allows for QA testing.&lt;br /&gt;
; &#039;&#039;&#039;QA, bug fixing, continuous integration&#039;&#039;&#039;&lt;br /&gt;
: A period after the code freeze where quality assurance testing takes place. No new code is added, which means developers are able to respond rapidly to bugs found. Integration becomes [[Integration Review#During continuous integration/Freeze/QA period|continuous]], meaning that failed QA tests can be re-run within days rather than having to wait for the weekly release.&lt;br /&gt;
; &#039;&#039;&#039;Release candidate&#039;&#039;&#039;&lt;br /&gt;
: A point prior to the full release where a candidate is made public for wider testing.&lt;br /&gt;
&lt;br /&gt;
==New feature development==&lt;br /&gt;
&lt;br /&gt;
Major new features in Moodle usually should go through the following process.&lt;br /&gt;
&lt;br /&gt;
===Specification===&lt;br /&gt;
&lt;br /&gt;
Developers should create a detailed spec (here in the developer docs) outlining their goals for the development and their design for meeting those goals.  The more detail the better.&lt;br /&gt;
&lt;br /&gt;
Developers should also create an issue in the tracker (linking to your docs) to keep track of the project status.&lt;br /&gt;
&lt;br /&gt;
===Community consultation===&lt;br /&gt;
&lt;br /&gt;
Get the community involved in looking at the spec to see if it meets their needs and to get further feedback.  Please post in the [http://moodle.org/mod/forum/view.php?id=8052 Future major features forum] on moodle.org. You could also blog/tweet about it etc.&lt;br /&gt;
&lt;br /&gt;
Community developers proposing a new feature will want to talk with HQ core developers to make sure the ideas make sense, and possibly get some review on database design, architecture and so on.&lt;br /&gt;
&lt;br /&gt;
===Develop the code using Git===&lt;br /&gt;
&lt;br /&gt;
Develop your code on an open Git repository, like github.com.  That enables people to see your code and to help you as it develops.  Testers and early adopters also have the opportunity to try it early in the process and give you more valuable feedback.&lt;br /&gt;
&lt;br /&gt;
It is essential that your code follows the [[Coding|Moodle Coding Guide]].&lt;br /&gt;
&lt;br /&gt;
===Submit your code for peer review===&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Request peer review&amp;quot; button in the tracker.&lt;br /&gt;
&lt;br /&gt;
You need to fill in the information about your public git repository and which branches the fixes are on. Make sure you are listed as Assignee.&lt;br /&gt;
&lt;br /&gt;
This would be a good time to fill in the testing instructions for how to verify your fix is correct. You may also wish to add a comment in the bug.&lt;br /&gt;
&lt;br /&gt;
Component leads should put issues, which affect code in their components, up for peer review to allow interested parties to provide feedback. However, if it is not reviewed in a week, a component lead may send the issue to integration. If integrators consider that the issue has not been given proper chance for peer review (e.g. is extremely large or complex...) it can be decided to move the issue back in the process.&lt;br /&gt;
&lt;br /&gt;
All other developers, including people who are component leads but working outside their component, should have their issues peer reviewed before they are sent to integration.&lt;br /&gt;
&lt;br /&gt;
===Peer review===&lt;br /&gt;
&lt;br /&gt;
The [http://tracker.moodle.org/browse/MDL#selectedTab=com.atlassian.jira.plugin.system.project%3Acomponents-panel component lead] should peer-review the change. If there is no component lead for an affected component, any other recognised developer may complete the peer review. The peer reviewer will either give you comments on the code and if it needs more work.&lt;br /&gt;
&lt;br /&gt;
Process and the list of things to check are described in [[Peer reviewing]].&lt;br /&gt;
&lt;br /&gt;
===Submit the code for integration===&lt;br /&gt;
&lt;br /&gt;
The developer is responsible for acting on the feedback from the peer reviewer. If changes have been made and the developer is satisfied that this has accommodated the feedback from the peer reviewer, then the developer can submit the issue for integration. If there have been significant changes after the peer review, or if the peer reviewer has raised concerns about the approach taken, then the developer should offer the issue up for peer review again, most often to the same peer reviewer, but not necessarily.&lt;br /&gt;
&lt;br /&gt;
Submitting an issue to integration is much the same as for any Moodle code.  See the information about the integration workflow above.&lt;br /&gt;
&lt;br /&gt;
==Fixing a bug==&lt;br /&gt;
&lt;br /&gt;
Bug fixes, and minor features or enhancements should go through the following process. (The only exception is English language string typo fixes or suggested improvements, which may be contributed to the en_fix language pack on the [http://lang.moodle.org/ Moodle translation site].)&lt;br /&gt;
&lt;br /&gt;
===Make sure there is a tracker issue===&lt;br /&gt;
&lt;br /&gt;
Every change must have an issue in the tracker. If you are fixing a bug, there is probably one there already, but if not, create one. [[Tracker tips|Tips for searching tracker]].&lt;br /&gt;
&lt;br /&gt;
===Decide which branches the fix is required on===&lt;br /&gt;
&lt;br /&gt;
Bugs should normally be fixed on all the supported stable branches that are affected. New features should just go into master, but sometimes minor enhancements are made on the most recent stable branch.&lt;br /&gt;
&lt;br /&gt;
===Develop your change using git===&lt;br /&gt;
&lt;br /&gt;
Develop your fix and push the change to an open git repository, for example on github.com. See also [[Git for developers]]&lt;br /&gt;
&lt;br /&gt;
It is essential that your code follows the [[Coding|Moodle Coding Guide]].&lt;br /&gt;
&lt;br /&gt;
You will need to push one commit for each branch the fix needs to be applied to. Often people use branch names like wip_MDL-12345_31_brief_name so it is clear what each branch is. [http://kernel.org/pub/software/scm/git/docs/git-cherry-pick.html git cherry-pick] can help with replicating the fix onto different branches.&lt;br /&gt;
&lt;br /&gt;
===Submit your code for peer review===&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Request peer review&amp;quot; button in the tracker. &lt;br /&gt;
&lt;br /&gt;
You need to fill in the information about your public git repository and which branches the fixes are on. Make sure you are listed as Assignee.&lt;br /&gt;
&lt;br /&gt;
This would be a good time to fill in the testing instructions for how to verify your fix is correct. You may also wish to add a comment in the bug. (... or should you put that information in the commit comment?)&lt;br /&gt;
&lt;br /&gt;
If you &#039;&#039;&#039;don&#039;t see &amp;quot;Request peer review&amp;quot; button&#039;&#039;&#039;, just comment on the issue with the git repository URL, branch name, diff URL and testing instructions. Component lead or another user with sufficient privileges will send the issue up for peer for you. After your first fix is integrated you will be added to developers group and will be able to send issues for peer review.&lt;br /&gt;
&lt;br /&gt;
===Peer review===&lt;br /&gt;
&lt;br /&gt;
The [https://tracker.moodle.org/projects/MDL?selectedItem=com.atlassian.jira.jira-projects-plugin:components-page component lead] should peer-review the change. If there is no component lead for an affected component, any other recognised developer may complete the peer review. The peer reviewer will either give you comments on the code and if it needs more work.&lt;br /&gt;
&lt;br /&gt;
Process and the list of things to check are described in [[Peer reviewing]].&lt;br /&gt;
&lt;br /&gt;
===Submit your code for integration===&lt;br /&gt;
&lt;br /&gt;
It will then be reviewed the following week by one of the integration team and either integrated or rejected. Once integrated, the fix will be tested, and then included in the next weekly release.&lt;br /&gt;
&lt;br /&gt;
==Security issues==&lt;br /&gt;
&lt;br /&gt;
Issues identified as [[Security|security issues]] are resolved in a slightly different way, in order to achieve responsible disclosure as described in [[Moodle security procedures]].&lt;br /&gt;
&lt;br /&gt;
* Security issues should be labelled as &amp;quot;Minor&amp;quot; or &amp;quot;Serious&amp;quot; in order control visibility of the issue.&lt;br /&gt;
** An issue reported with a security level of &amp;quot;Could be a security issue&amp;quot; should be evaluated as soon as possible and either set as &amp;quot;Minor&amp;quot; or &amp;quot;Serious&amp;quot; or the security level should be set to &amp;quot;None&amp;quot;.&lt;br /&gt;
* Solutions to security issues should not:&lt;br /&gt;
** be made available in public repositories.&lt;br /&gt;
*** If a developer has shared a solution as Git branches via Github, they should be asked to provide the solutions as [[How_to_create_a_patch|stand-alone patches]] attached to the issue and to [[#How to remove a branch from Github|remove the solution from Github]].&lt;br /&gt;
** contain details about the security problem in the commit message.&lt;br /&gt;
*** Instead use generic terms like, &amp;quot;improve&amp;quot;, &amp;quot;better handling of&amp;quot; ..&lt;br /&gt;
* The solution will not be integrated until the week before a [[Process#Stable_maintenance_cycles|minor release]] following the normal [[Release process|Release process]]. In short, the issue will be incorporated into the integration version, rebased, tested and made ready for release as a normal issue would, but not until as late as possible.&lt;br /&gt;
* Details of security issues will be shared with registered admins with the minor release.&lt;br /&gt;
* Details of security issues will not be publicly announced until one week after a minor release to allow admins to update.&lt;br /&gt;
&lt;br /&gt;
Note that not all the labelled (minor) security issues are always handled following the procedure above. It&#039;s possible that, after discussion, it&#039;s decided a given issue is not a real Moodle security problem (say external disclosures/potential attacks using Moodle as vector, not as target, discussions revealing some private details...). Those issues will be processed as normal issues, generating the needed user documentation if necessary and will be part of the habitual weekly releases.&lt;br /&gt;
&lt;br /&gt;
====How to remove a branch from Github====&lt;br /&gt;
&lt;br /&gt;
To remove a branch from Github, you can use the following command.&lt;br /&gt;
&lt;br /&gt;
 git push github :remote_branch&lt;br /&gt;
&lt;br /&gt;
Where &#039;&#039;remote_branch&#039;&#039; is the name of your remote branch, for example &#039;wip-mdl-1234&#039;. This effectively replaces the remote branch with nothing, removing the remote branch, but leaving the branch intact in your local Git repository. Please note that its likely that your commit will still exist on github due to the nature of git, so its best to avoid doing this in the first place.&lt;br /&gt;
&lt;br /&gt;
==Policy issues==&lt;br /&gt;
&lt;br /&gt;
Occasionally within Moodle we run into policy issues where a high-level decision needs to be made about how things are to be done.&lt;br /&gt;
&lt;br /&gt;
In these cases the process is as follows:&lt;br /&gt;
* Create an issue in the tracker with a [https://tracker.moodle.org/browse/MDL/component/12733 Policy component] and put &amp;quot;POLICY:&amp;quot; as a prefix on the summary.&lt;br /&gt;
* In the description describe the problem clearly as well as all the options.  If it&#039;s long then make a page here in Moodle Dev Docs and link to it.&lt;br /&gt;
* Do not use this issue for code.  If there are issues that depend on this policy decision, then add tracker links to them as dependencies.&lt;br /&gt;
* Feel free to encourage people to come and talk about the policy to support various points of view.  The more evidence we have (from everyone in the community) the better.&lt;br /&gt;
&lt;br /&gt;
Some time has been scheduled in the weekly Moodle HQ meeting to look at Policy issues and try to make decisions on them.  We discuss all the evidence and try to achieve a high amount of consensus.  Deadlocked issues can be resolved by a decision from Martin Dougiamas (this is rarely needed).&lt;br /&gt;
&lt;br /&gt;
Decisions will be posted on the issue and that issue will be closed, allowing any dependent issues to continue to integration (or not).   Decisions are final and bribes hardly ever work.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Release process]]&lt;br /&gt;
* [[Deprecation]]&lt;br /&gt;
* [http://tracker.moodle.org/secure/Dashboard.jspa?selectPageId=11350 Integration dashboard]&lt;br /&gt;
&lt;br /&gt;
Walks-though of the process for contributors:&lt;br /&gt;
* By Dan Poltawski, Integrator: http://www.slideshare.net/poltawski/how-to-guarantee-your-change-is-integrated-to-moodle-core, https://www.youtube.com/watch?v=836WtnM2YpM&lt;br /&gt;
* By Tim Hunt, contributor: http://tjhunt.blogspot.co.uk/2012/03/fixing-bug-in-moodle-core-mechanics.html and https://www.youtube.com/watch?v=gPPA3h7OGQU&lt;br /&gt;
&lt;br /&gt;
[[Category:Processes]]&lt;br /&gt;
[[Category:Quality Assurance]]&lt;br /&gt;
[[Category:Git]]&lt;br /&gt;
[[Category:Core development]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Process&amp;diff=52275</id>
		<title>Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Process&amp;diff=52275"/>
		<updated>2017-05-09T02:39:25Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Update planning and development now that we have new teams&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document summarises the various development processes used in developing Moodle.  There are four main processes that overlap.&lt;br /&gt;
&lt;br /&gt;
==Integration workflow in the tracker==&lt;br /&gt;
&lt;br /&gt;
The Moodle tracker keeps track of the status of all bug fixes and new features. &lt;br /&gt;
&lt;br /&gt;
We use a workflow that ensures that new code receives multiple reviews by different people before it is included into the core Moodle code.&lt;br /&gt;
&lt;br /&gt;
[[Image:Workflow.jpg]]&lt;br /&gt;
&lt;br /&gt;
A number of roles make this work:&lt;br /&gt;
&lt;br /&gt;
===Users===&lt;br /&gt;
&lt;br /&gt;
Users report bugs and make feature requests directly in the tracker, by creating new issues with a summary and a description.&lt;br /&gt;
&lt;br /&gt;
===Developers===&lt;br /&gt;
&lt;br /&gt;
Developers work on the issues in the tracker to specify solutions and write code that implements these solutions.  They will often ask other developers to &amp;quot;peer review&amp;quot; their code in the early stages to avoid problems later on.&lt;br /&gt;
&lt;br /&gt;
While many of the developers work for Moodle.com, a large number are part of the global development community around Moodle. If you&#039;re interested in becoming a recognised developer, see [[Tracker_guide#Tracker_groups_and_permissions|Tracker groups and permissions]].&lt;br /&gt;
&lt;br /&gt;
===CiBoT===&lt;br /&gt;
&lt;br /&gt;
CiBoT is not a person but a bot who monitors the tracker and performs the [[Automated code review]] when issue is submitted for Peer review or when developer added &#039;&#039;cime&#039;&#039; label.&lt;br /&gt;
&lt;br /&gt;
===Component leads===&lt;br /&gt;
&lt;br /&gt;
[http://tracker.moodle.org/browse/MDL#selectedTab=com.atlassian.jira.plugin.system.project%3Acomponents-panel Component leads] are developers with some responsibility for particular components (plugins or modules) in Moodle.  They have authority to decide that a particular fix is suitable and complete enough to be considered for integration in Moodle core and should be called upon to complete peer reviews for code in their components.&lt;br /&gt;
&lt;br /&gt;
===Integrators===&lt;br /&gt;
&lt;br /&gt;
On Monday and Tuesday of each week, the integration team (a small team of senior developers employed by Moodle HQ) conducts a code-level review of all issues in the integration queue.  This is often called the &amp;quot;pull&amp;quot; process.  If the fix is judged appropriate they will integrate the code into our git integration repository for further testing and it gets added to the testing queue.&lt;br /&gt;
&lt;br /&gt;
If they find problems they reject the issue and send it back to the developer for further work.&lt;br /&gt;
&lt;br /&gt;
===Testers===&lt;br /&gt;
&lt;br /&gt;
On Wednesday each week, testers look at all the issues in the testing queue, trying each fix and feature to make sure that it does actually fix the problem it was supposed to, and that there are no regressions.&lt;br /&gt;
&lt;br /&gt;
If they find problems they reject the issue and integrators may remove it from the integration repository and push it back to the developer for further work.&lt;br /&gt;
&lt;br /&gt;
See [[Testing of integrated issues]] for more details.&lt;br /&gt;
&lt;br /&gt;
===Production maintainers===&lt;br /&gt;
&lt;br /&gt;
On Thursday each week, production maintainers merge all the issues that passed testing into the git production repository, and it becomes available for use on production systems via git and download packages.&lt;br /&gt;
&lt;br /&gt;
==Stable maintenance cycles==&lt;br /&gt;
&lt;br /&gt;
Moodle releases regular updates of the stable version of the software to fix bugs and other issues.  Releases like 2.2.1, 2.2.2, 2.2.3 etc only include fixes based on the latest major release (2.2) and never any significant new features or database changes.&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ there are teams of developers using the [http://www.scrum.org/ Scrum framework] to work on these issues (as well as new features for [[#Major_release_cycles|major releases]]). &lt;br /&gt;
&lt;br /&gt;
===Minor release (point release) timing===&lt;br /&gt;
&lt;br /&gt;
After [[#Major_release_cycles|major releases]] there will be minor releases.&lt;br /&gt;
* x.x.1 will occur approximately two months after each major release (eg. 2.x).&lt;br /&gt;
* There will then be another point release every two months after that.&lt;br /&gt;
&lt;br /&gt;
See the [[Releases#General_release_calendar|General release calendar]] for details.&lt;br /&gt;
&lt;br /&gt;
===Issue triage===&lt;br /&gt;
&lt;br /&gt;
[[Bug_triage|Issue triage]] involves evaluating new issues, making sure that they are recorded correctly.  One of the most important jobs triagers do is to identify issues that should be fixed in the stable branch. These are set with a priority ranging from &amp;quot;Trivial&amp;quot; up to &amp;quot;Blocker&amp;quot; and other features are checked.&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ there are currently teams working on FRONTEND issues (mostly related to user interface) and BACKEND issues (mostly related to APIs) and Martin Dougiamas regularly puts issues on specific backlogs for these teams, as appropriate.&lt;br /&gt;
&lt;br /&gt;
===Scrum===&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ, every three weeks, the stable team takes a number of the most urgent issues from the backlog to work on during a period known as a &#039;&#039;sprint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
At the start of a sprint there is a period of planning and estimation. All issues on the backlog are given a relative rank that is based on issue features including priority, security, Partner interest, patches and votes. Issues are given a relative size in Story Points and these points are summed to allow the teams to determine how many issues they can work on in the sprint.&lt;br /&gt;
&lt;br /&gt;
During the sprint, the team meets daily to discuss solutions and progress, as well as to organise testing and peer reviews of code.  The team has a &#039;&#039;Scrum master&#039;&#039; to help everyone stay organised, to &amp;quot;unblock&amp;quot; any barriers to progress and to protect the team from distracting influences (mostly people attempting to add to the developers&#039; workloads) during the sprint.  The teams&#039; work is documented publicly in the tracker.&lt;br /&gt;
&lt;br /&gt;
Whenever a solution for an issue is finished, it is submitted into to the standard integration workflow process described above.&lt;br /&gt;
&lt;br /&gt;
==Major release cycles==&lt;br /&gt;
&lt;br /&gt;
Since Moodle 2.0, we have a policy of release major versions (eg 2.1, 2.2) every six months in May and November. See the [[Releases#General_release_calendar|General release calendar]] for more details.&lt;br /&gt;
&lt;br /&gt;
Each release can be different, but generally the cycles work as follows.&lt;br /&gt;
&lt;br /&gt;
===Define roadmap===&lt;br /&gt;
&lt;br /&gt;
The product owner (Martin Dougiamas) defines the likely roadmap based on community wishes, third-party developments and important issues within the existing code. &lt;br /&gt;
&lt;br /&gt;
Sometimes new features might be based on earlier features, sometimes they may be something developed by a third party that needs to be evaluated and sometimes it might be something completely new.&lt;br /&gt;
&lt;br /&gt;
===Planning and development===&lt;br /&gt;
&lt;br /&gt;
The UX team, employed at Moodle HQ, work on specifications of major new features throughout the cycle, specifying project ahead of development time.&lt;br /&gt;
&lt;br /&gt;
New features are worked on by the &amp;quot;Dev&amp;quot; team. The process of [[#New_feature_development|new feature development]] is described below. When specifications are in place, new code is developed during sprints and goes through the standard weekly integration workflow described above.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
&lt;br /&gt;
During development, as new code is integrated, automated testing conducted at the [[PHPUnit|code]] and [[Acceptance_testing|interface]] levels, to make sure there are no regressions caused by new features.&lt;br /&gt;
&lt;br /&gt;
In the last month before the release, a feature freeze is called (no new features can be added) and our QA team performs manual functional testing of Moodle features. The current list of functional tests is listed in the tracker in the [http://tracker.moodle.org/browse/MDLQA-1 MDLQA project]. This list of tests is extended as new features are added, but it is also being reduced as more automated [[Acceptance_testing|acceptance tests]] are developed.&lt;br /&gt;
&lt;br /&gt;
For more details, see [[Testing]].&lt;br /&gt;
&lt;br /&gt;
===Sprints===&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ, development takes place in sprints. The sprints are three-week periods during which developers to focus on a fixed list of issues. Sprints are arranged within each release cycle as shown in the diagram below.&lt;br /&gt;
&lt;br /&gt;
===Events during cycle===&lt;br /&gt;
&lt;br /&gt;
During each cycle there are a periods and events that occur between and around sprints.&lt;br /&gt;
&lt;br /&gt;
[[Image:Dev sprint calendar.png|800px]]&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Planning and bug fixing&#039;&#039;&#039;&lt;br /&gt;
: A period during which the Roadmap is explored, specs are written and prototypes are created. Regressions in the recent release are fixed as they arise.&lt;br /&gt;
; &#039;&#039;&#039;End sync period&#039;&#039;&#039;&lt;br /&gt;
: During the [[Integration Review#On-sync period|on-sync period]], the recent release and master versions are kept synchronised. No new code is added during this period, which ensures regressions are fixed rapidly. This also allows for planning and provides relief for developers after a release.&lt;br /&gt;
; &#039;&#039;&#039;Personal projects&#039;&#039;&#039;&lt;br /&gt;
: Affecting full-time HQ developers only, this period allows for individual creations to be explored and provides a break from sprints.&lt;br /&gt;
; &#039;&#039;&#039;Code freeze&#039;&#039;&#039;&lt;br /&gt;
: A point after which no new code (only fixes to existing code) is accepted until beyond the release. This stabilisation allows for QA testing.&lt;br /&gt;
; &#039;&#039;&#039;QA, bug fixing, continuous integration&#039;&#039;&#039;&lt;br /&gt;
: A period after the code freeze where quality assurance testing takes place. No new code is added, which means developers are able to respond rapidly to bugs found. Integration becomes [[Integration Review#During continuous integration/Freeze/QA period|continuous]], meaning that failed QA tests can be re-run within days rather than having to wait for the weekly release.&lt;br /&gt;
; &#039;&#039;&#039;Release candidate&#039;&#039;&#039;&lt;br /&gt;
: A point prior to the full release where a candidate is made public for wider testing.&lt;br /&gt;
&lt;br /&gt;
==New feature development==&lt;br /&gt;
&lt;br /&gt;
Major new features in Moodle usually should go through the following process.&lt;br /&gt;
&lt;br /&gt;
===Specification===&lt;br /&gt;
&lt;br /&gt;
Developers should create a detailed spec (here in the developer docs) outlining their goals for the development and their design for meeting those goals.  The more detail the better.&lt;br /&gt;
&lt;br /&gt;
Developers should also create an issue in the tracker (linking to your docs) to keep track of the project status.&lt;br /&gt;
&lt;br /&gt;
===Community consultation===&lt;br /&gt;
&lt;br /&gt;
Get the community involved in looking at the spec to see if it meets their needs and to get further feedback.  Please post in the [http://moodle.org/mod/forum/view.php?id=8052 Future major features forum] on moodle.org. You could also blog/tweet about it etc.&lt;br /&gt;
&lt;br /&gt;
Community developers proposing a new feature will want to talk with HQ core developers to make sure the ideas make sense, and possibly get some review on database design, architecture and so on.&lt;br /&gt;
&lt;br /&gt;
===Develop the code using Git===&lt;br /&gt;
&lt;br /&gt;
Develop your code on an open Git repository, like github.com.  That enables people to see your code and to help you as it develops.  Testers and early adopters also have the opportunity to try it early in the process and give you more valuable feedback.&lt;br /&gt;
&lt;br /&gt;
It is essential that your code follows the [[Coding|Moodle Coding Guide]].&lt;br /&gt;
&lt;br /&gt;
===Submit your code for peer review===&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Request peer review&amp;quot; button in the tracker.&lt;br /&gt;
&lt;br /&gt;
You need to fill in the information about your public git repository and which branches the fixes are on. Make sure you are listed as Assignee.&lt;br /&gt;
&lt;br /&gt;
This would be a good time to fill in the testing instructions for how to verify your fix is correct. You may also wish to add a comment in the bug.&lt;br /&gt;
&lt;br /&gt;
Component leads should put issues, which affect code in their components, up for peer review to allow interested parties to provide feedback. However, if it is not reviewed in a week, a component lead may send the issue to integration. If integrators consider that the issue has not been given proper chance for peer review (e.g. is extremely large or complex...) it can be decided to move the issue back in the process.&lt;br /&gt;
&lt;br /&gt;
All other developers, including people who are component leads but working outside their component, should have their issues peer reviewed before they are sent to integration.&lt;br /&gt;
&lt;br /&gt;
===Peer review===&lt;br /&gt;
&lt;br /&gt;
The [http://tracker.moodle.org/browse/MDL#selectedTab=com.atlassian.jira.plugin.system.project%3Acomponents-panel component lead] should peer-review the change. If there is no component lead for an affected component, any other recognised developer may complete the peer review. The peer reviewer will either give you comments on the code and if it needs more work.&lt;br /&gt;
&lt;br /&gt;
Process and the list of things to check are described in [[Peer reviewing]].&lt;br /&gt;
&lt;br /&gt;
===Submit the code for integration===&lt;br /&gt;
&lt;br /&gt;
The developer is responsible for acting on the feedback from the peer reviewer. If changes have been made and the developer is satisfied that this has accommodated the feedback from the peer reviewer, then the developer can submit the issue for integration. If there have been significant changes after the peer review, or if the peer reviewer has raised concerns about the approach taken, then the developer should offer the issue up for peer review again, most often to the same peer reviewer, but not necessarily.&lt;br /&gt;
&lt;br /&gt;
Submitting an issue to integration is much the same as for any Moodle code.  See the information about the integration workflow above.&lt;br /&gt;
&lt;br /&gt;
==Fixing a bug==&lt;br /&gt;
&lt;br /&gt;
Bug fixes, and minor features or enhancements should go through the following process. (The only exception is English language string typo fixes or suggested improvements, which may be contributed to the en_fix language pack on the [http://lang.moodle.org/ Moodle translation site].)&lt;br /&gt;
&lt;br /&gt;
===Make sure there is a tracker issue===&lt;br /&gt;
&lt;br /&gt;
Every change must have an issue in the tracker. If you are fixing a bug, there is probably one there already, but if not, create one. [[Tracker tips|Tips for searching tracker]].&lt;br /&gt;
&lt;br /&gt;
===Decide which branches the fix is required on===&lt;br /&gt;
&lt;br /&gt;
Bugs should normally be fixed on all the supported stable branches that are affected. New features should just go into master, but sometimes minor enhancements are made on the most recent stable branch.&lt;br /&gt;
&lt;br /&gt;
===Develop your change using git===&lt;br /&gt;
&lt;br /&gt;
Develop your fix and push the change to an open git repository, for example on github.com. See also [[Git for developers]]&lt;br /&gt;
&lt;br /&gt;
It is essential that your code follows the [[Coding|Moodle Coding Guide]].&lt;br /&gt;
&lt;br /&gt;
You will need to push one commit for each branch the fix needs to be applied to. Often people use branch names like wip_MDL-12345_31_brief_name so it is clear what each branch is. [http://kernel.org/pub/software/scm/git/docs/git-cherry-pick.html git cherry-pick] can help with replicating the fix onto different branches.&lt;br /&gt;
&lt;br /&gt;
===Submit your code for peer review===&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Request peer review&amp;quot; button in the tracker. &lt;br /&gt;
&lt;br /&gt;
You need to fill in the information about your public git repository and which branches the fixes are on. Make sure you are listed as Assignee.&lt;br /&gt;
&lt;br /&gt;
This would be a good time to fill in the testing instructions for how to verify your fix is correct. You may also wish to add a comment in the bug. (... or should you put that information in the commit comment?)&lt;br /&gt;
&lt;br /&gt;
If you &#039;&#039;&#039;don&#039;t see &amp;quot;Request peer review&amp;quot; button&#039;&#039;&#039;, just comment on the issue with the git repository URL, branch name, diff URL and testing instructions. Component lead or another user with sufficient privileges will send the issue up for peer for you. After your first fix is integrated you will be added to developers group and will be able to send issues for peer review.&lt;br /&gt;
&lt;br /&gt;
===Peer review===&lt;br /&gt;
&lt;br /&gt;
The [https://tracker.moodle.org/projects/MDL?selectedItem=com.atlassian.jira.jira-projects-plugin:components-page component lead] should peer-review the change. If there is no component lead for an affected component, any other recognised developer may complete the peer review. The peer reviewer will either give you comments on the code and if it needs more work.&lt;br /&gt;
&lt;br /&gt;
Process and the list of things to check are described in [[Peer reviewing]].&lt;br /&gt;
&lt;br /&gt;
===Submit your code for integration===&lt;br /&gt;
&lt;br /&gt;
It will then be reviewed the following week by one of the integration team and either integrated or rejected. Once integrated, the fix will be tested, and then included in the next weekly release.&lt;br /&gt;
&lt;br /&gt;
==Security issues==&lt;br /&gt;
&lt;br /&gt;
Issues identified as [[Security|security issues]] are resolved in a slightly different way, in order to achieve responsible disclosure as described in [[Moodle security procedures]].&lt;br /&gt;
&lt;br /&gt;
* Security issues should be labelled as &amp;quot;Minor&amp;quot; or &amp;quot;Serious&amp;quot; in order control visibility of the issue.&lt;br /&gt;
** An issue reported with a security level of &amp;quot;Could be a security issue&amp;quot; should be evaluated as soon as possible and either set as &amp;quot;Minor&amp;quot; or &amp;quot;Serious&amp;quot; or the security level should be set to &amp;quot;None&amp;quot;.&lt;br /&gt;
* Solutions to security issues should not:&lt;br /&gt;
** be made available in public repositories.&lt;br /&gt;
*** If a developer has shared a solution as Git branches via Github, they should be asked to provide the solutions as [[How_to_create_a_patch|stand-alone patches]] attached to the issue and to [[#How to remove a branch from Github|remove the solution from Github]].&lt;br /&gt;
** contain details about the security problem in the commit message.&lt;br /&gt;
*** Instead use generic terms like, &amp;quot;improve&amp;quot;, &amp;quot;better handling of&amp;quot; ..&lt;br /&gt;
* The solution will not be integrated until the week before a [[Process#Stable_maintenance_cycles|minor release]] following the normal [[Release process|Release process]]. In short, the issue will be incorporated into the integration version, rebased, tested and made ready for release as a normal issue would, but not until as late as possible.&lt;br /&gt;
* Details of security issues will be shared with registered admins with the minor release.&lt;br /&gt;
* Details of security issues will not be publicly announced until one week after a minor release to allow admins to update.&lt;br /&gt;
&lt;br /&gt;
Note that not all the labelled (minor) security issues are always handled following the procedure above. It&#039;s possible that, after discussion, it&#039;s decided a given issue is not a real Moodle security problem (say external disclosures/potential attacks using Moodle as vector, not as target, discussions revealing some private details...). Those issues will be processed as normal issues, generating the needed user documentation if necessary and will be part of the habitual weekly releases.&lt;br /&gt;
&lt;br /&gt;
====How to remove a branch from Github====&lt;br /&gt;
&lt;br /&gt;
To remove a branch from Github, you can use the following command.&lt;br /&gt;
&lt;br /&gt;
 git push github :remote_branch&lt;br /&gt;
&lt;br /&gt;
Where &#039;&#039;remote_branch&#039;&#039; is the name of your remote branch, for example &#039;wip-mdl-1234&#039;. This effectively replaces the remote branch with nothing, removing the remote branch, but leaving the branch intact in your local Git repository. Please note that its likely that your commit will still exist on github due to the nature of git, so its best to avoid doing this in the first place.&lt;br /&gt;
&lt;br /&gt;
==Policy issues==&lt;br /&gt;
&lt;br /&gt;
Occasionally within Moodle we run into policy issues where a high-level decision needs to be made about how things are to be done.&lt;br /&gt;
&lt;br /&gt;
In these cases the process is as follows:&lt;br /&gt;
* Create an issue in the tracker with a [https://tracker.moodle.org/browse/MDL/component/12733 Policy component] and put &amp;quot;POLICY:&amp;quot; as a prefix on the summary.&lt;br /&gt;
* In the description describe the problem clearly as well as all the options.  If it&#039;s long then make a page here in Moodle Dev Docs and link to it.&lt;br /&gt;
* Do not use this issue for code.  If there are issues that depend on this policy decision, then add tracker links to them as dependencies.&lt;br /&gt;
* Feel free to encourage people to come and talk about the policy to support various points of view.  The more evidence we have (from everyone in the community) the better.&lt;br /&gt;
&lt;br /&gt;
Some time has been scheduled in the weekly Moodle HQ meeting to look at Policy issues and try to make decisions on them.  We discuss all the evidence and try to achieve a high amount of consensus.  Deadlocked issues can be resolved by a decision from Martin Dougiamas (this is rarely needed).&lt;br /&gt;
&lt;br /&gt;
Decisions will be posted on the issue and that issue will be closed, allowing any dependent issues to continue to integration (or not).   Decisions are final and bribes hardly ever work.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Release process]]&lt;br /&gt;
* [[Deprecation]]&lt;br /&gt;
* [http://tracker.moodle.org/secure/Dashboard.jspa?selectPageId=11350 Integration dashboard]&lt;br /&gt;
&lt;br /&gt;
Walks-though of the process for contributors:&lt;br /&gt;
* By Dan Poltawski, Integrator: http://www.slideshare.net/poltawski/how-to-guarantee-your-change-is-integrated-to-moodle-core, https://www.youtube.com/watch?v=836WtnM2YpM&lt;br /&gt;
* By Tim Hunt, contributor: http://tjhunt.blogspot.co.uk/2012/03/fixing-bug-in-moodle-core-mechanics.html and https://www.youtube.com/watch?v=gPPA3h7OGQU&lt;br /&gt;
&lt;br /&gt;
[[Category:Processes]]&lt;br /&gt;
[[Category:Quality Assurance]]&lt;br /&gt;
[[Category:Git]]&lt;br /&gt;
[[Category:Core development]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Process&amp;diff=52274</id>
		<title>Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Process&amp;diff=52274"/>
		<updated>2017-05-09T02:36:31Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Update our team and scrum process summary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document summarises the various development processes used in developing Moodle.  There are four main processes that overlap.&lt;br /&gt;
&lt;br /&gt;
==Integration workflow in the tracker==&lt;br /&gt;
&lt;br /&gt;
The Moodle tracker keeps track of the status of all bug fixes and new features. &lt;br /&gt;
&lt;br /&gt;
We use a workflow that ensures that new code receives multiple reviews by different people before it is included into the core Moodle code.&lt;br /&gt;
&lt;br /&gt;
[[Image:Workflow.jpg]]&lt;br /&gt;
&lt;br /&gt;
A number of roles make this work:&lt;br /&gt;
&lt;br /&gt;
===Users===&lt;br /&gt;
&lt;br /&gt;
Users report bugs and make feature requests directly in the tracker, by creating new issues with a summary and a description.&lt;br /&gt;
&lt;br /&gt;
===Developers===&lt;br /&gt;
&lt;br /&gt;
Developers work on the issues in the tracker to specify solutions and write code that implements these solutions.  They will often ask other developers to &amp;quot;peer review&amp;quot; their code in the early stages to avoid problems later on.&lt;br /&gt;
&lt;br /&gt;
While many of the developers work for Moodle.com, a large number are part of the global development community around Moodle. If you&#039;re interested in becoming a recognised developer, see [[Tracker_guide#Tracker_groups_and_permissions|Tracker groups and permissions]].&lt;br /&gt;
&lt;br /&gt;
===CiBoT===&lt;br /&gt;
&lt;br /&gt;
CiBoT is not a person but a bot who monitors the tracker and performs the [[Automated code review]] when issue is submitted for Peer review or when developer added &#039;&#039;cime&#039;&#039; label.&lt;br /&gt;
&lt;br /&gt;
===Component leads===&lt;br /&gt;
&lt;br /&gt;
[http://tracker.moodle.org/browse/MDL#selectedTab=com.atlassian.jira.plugin.system.project%3Acomponents-panel Component leads] are developers with some responsibility for particular components (plugins or modules) in Moodle.  They have authority to decide that a particular fix is suitable and complete enough to be considered for integration in Moodle core and should be called upon to complete peer reviews for code in their components.&lt;br /&gt;
&lt;br /&gt;
===Integrators===&lt;br /&gt;
&lt;br /&gt;
On Monday and Tuesday of each week, the integration team (a small team of senior developers employed by Moodle HQ) conducts a code-level review of all issues in the integration queue.  This is often called the &amp;quot;pull&amp;quot; process.  If the fix is judged appropriate they will integrate the code into our git integration repository for further testing and it gets added to the testing queue.&lt;br /&gt;
&lt;br /&gt;
If they find problems they reject the issue and send it back to the developer for further work.&lt;br /&gt;
&lt;br /&gt;
===Testers===&lt;br /&gt;
&lt;br /&gt;
On Wednesday each week, testers look at all the issues in the testing queue, trying each fix and feature to make sure that it does actually fix the problem it was supposed to, and that there are no regressions.&lt;br /&gt;
&lt;br /&gt;
If they find problems they reject the issue and integrators may remove it from the integration repository and push it back to the developer for further work.&lt;br /&gt;
&lt;br /&gt;
See [[Testing of integrated issues]] for more details.&lt;br /&gt;
&lt;br /&gt;
===Production maintainers===&lt;br /&gt;
&lt;br /&gt;
On Thursday each week, production maintainers merge all the issues that passed testing into the git production repository, and it becomes available for use on production systems via git and download packages.&lt;br /&gt;
&lt;br /&gt;
==Stable maintenance cycles==&lt;br /&gt;
&lt;br /&gt;
Moodle releases regular updates of the stable version of the software to fix bugs and other issues.  Releases like 2.2.1, 2.2.2, 2.2.3 etc only include fixes based on the latest major release (2.2) and never any significant new features or database changes.&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ there are teams of developers using the [http://www.scrum.org/ Scrum framework] to work on these issues (as well as new features for [[#Major_release_cycles|major releases]]). &lt;br /&gt;
&lt;br /&gt;
===Minor release (point release) timing===&lt;br /&gt;
&lt;br /&gt;
After [[#Major_release_cycles|major releases]] there will be minor releases.&lt;br /&gt;
* x.x.1 will occur approximately two months after each major release (eg. 2.x).&lt;br /&gt;
* There will then be another point release every two months after that.&lt;br /&gt;
&lt;br /&gt;
See the [[Releases#General_release_calendar|General release calendar]] for details.&lt;br /&gt;
&lt;br /&gt;
===Issue triage===&lt;br /&gt;
&lt;br /&gt;
[[Bug_triage|Issue triage]] involves evaluating new issues, making sure that they are recorded correctly.  One of the most important jobs triagers do is to identify issues that should be fixed in the stable branch. These are set with a priority ranging from &amp;quot;Trivial&amp;quot; up to &amp;quot;Blocker&amp;quot; and other features are checked.&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ there are currently teams working on FRONTEND issues (mostly related to user interface) and BACKEND issues (mostly related to APIs) and Martin Dougiamas regularly puts issues on specific backlogs for these teams, as appropriate.&lt;br /&gt;
&lt;br /&gt;
===Scrum===&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ, every three weeks, the stable team takes a number of the most urgent issues from the backlog to work on during a period known as a &#039;&#039;sprint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
At the start of a sprint there is a period of planning and estimation. All issues on the backlog are given a relative rank that is based on issue features including priority, security, Partner interest, patches and votes. Issues are given a relative size in Story Points and these points are summed to allow the teams to determine how many issues they can work on in the sprint.&lt;br /&gt;
&lt;br /&gt;
During the sprint, the team meets daily to discuss solutions and progress, as well as to organise testing and peer reviews of code.  The team has a &#039;&#039;Scrum master&#039;&#039; to help everyone stay organised, to &amp;quot;unblock&amp;quot; any barriers to progress and to protect the team from distracting influences (mostly people attempting to add to the developers&#039; workloads) during the sprint.  The teams&#039; work is documented publicly in the tracker.&lt;br /&gt;
&lt;br /&gt;
Whenever a solution for an issue is finished, it is submitted into to the standard integration workflow process described above.&lt;br /&gt;
&lt;br /&gt;
==Major release cycles==&lt;br /&gt;
&lt;br /&gt;
Since Moodle 2.0, we have a policy of release major versions (eg 2.1, 2.2) every six months in May and November. See the [[Releases#General_release_calendar|General release calendar]] for more details.&lt;br /&gt;
&lt;br /&gt;
Each release can be different, but generally the cycles work as follows.&lt;br /&gt;
&lt;br /&gt;
===Define roadmap===&lt;br /&gt;
&lt;br /&gt;
The product owner (Martin Dougiamas) defines the likely roadmap based on community wishes, third-party developments and important issues within the existing code. &lt;br /&gt;
&lt;br /&gt;
Sometimes new features might be based on earlier features, sometimes they may be something developed by a third party that needs to be evaluated and sometimes it might be something completely new.&lt;br /&gt;
&lt;br /&gt;
===Planning and development===&lt;br /&gt;
&lt;br /&gt;
The FRONTEND and BACKEND teams, employed at Moodle HQ, work on specifications of major new features for approximately three to four weeks following a major release.&lt;br /&gt;
&lt;br /&gt;
The process of [[#New_feature_development|new feature development]] is described below. When specifications are in place, new code is developed during sprints and goes through the standard weekly integration workflow described above.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
&lt;br /&gt;
During development, as new code is integrated, automated testing conducted at the [[PHPUnit|code]] and [[Acceptance_testing|interface]] levels, to make sure there are no regressions caused by new features.&lt;br /&gt;
&lt;br /&gt;
In the last month before the release, a feature freeze is called (no new features can be added) and our QA team performs manual functional testing of Moodle features. The current list of functional tests is listed in the tracker in the [http://tracker.moodle.org/browse/MDLQA-1 MDLQA project]. This list of tests is extended as new features are added, but it is also being reduced as more automated [[Acceptance_testing|acceptance tests]] are developed.&lt;br /&gt;
&lt;br /&gt;
For more details, see [[Testing]].&lt;br /&gt;
&lt;br /&gt;
===Sprints===&lt;br /&gt;
&lt;br /&gt;
At Moodle HQ, development takes place in sprints. The sprints are three-week periods during which developers to focus on a fixed list of issues. Sprints are arranged within each release cycle as shown in the diagram below.&lt;br /&gt;
&lt;br /&gt;
===Events during cycle===&lt;br /&gt;
&lt;br /&gt;
During each cycle there are a periods and events that occur between and around sprints.&lt;br /&gt;
&lt;br /&gt;
[[Image:Dev sprint calendar.png|800px]]&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Planning and bug fixing&#039;&#039;&#039;&lt;br /&gt;
: A period during which the Roadmap is explored, specs are written and prototypes are created. Regressions in the recent release are fixed as they arise.&lt;br /&gt;
; &#039;&#039;&#039;End sync period&#039;&#039;&#039;&lt;br /&gt;
: During the [[Integration Review#On-sync period|on-sync period]], the recent release and master versions are kept synchronised. No new code is added during this period, which ensures regressions are fixed rapidly. This also allows for planning and provides relief for developers after a release.&lt;br /&gt;
; &#039;&#039;&#039;Personal projects&#039;&#039;&#039;&lt;br /&gt;
: Affecting full-time HQ developers only, this period allows for individual creations to be explored and provides a break from sprints.&lt;br /&gt;
; &#039;&#039;&#039;Code freeze&#039;&#039;&#039;&lt;br /&gt;
: A point after which no new code (only fixes to existing code) is accepted until beyond the release. This stabilisation allows for QA testing.&lt;br /&gt;
; &#039;&#039;&#039;QA, bug fixing, continuous integration&#039;&#039;&#039;&lt;br /&gt;
: A period after the code freeze where quality assurance testing takes place. No new code is added, which means developers are able to respond rapidly to bugs found. Integration becomes [[Integration Review#During continuous integration/Freeze/QA period|continuous]], meaning that failed QA tests can be re-run within days rather than having to wait for the weekly release.&lt;br /&gt;
; &#039;&#039;&#039;Release candidate&#039;&#039;&#039;&lt;br /&gt;
: A point prior to the full release where a candidate is made public for wider testing.&lt;br /&gt;
&lt;br /&gt;
==New feature development==&lt;br /&gt;
&lt;br /&gt;
Major new features in Moodle usually should go through the following process.&lt;br /&gt;
&lt;br /&gt;
===Specification===&lt;br /&gt;
&lt;br /&gt;
Developers should create a detailed spec (here in the developer docs) outlining their goals for the development and their design for meeting those goals.  The more detail the better.&lt;br /&gt;
&lt;br /&gt;
Developers should also create an issue in the tracker (linking to your docs) to keep track of the project status.&lt;br /&gt;
&lt;br /&gt;
===Community consultation===&lt;br /&gt;
&lt;br /&gt;
Get the community involved in looking at the spec to see if it meets their needs and to get further feedback.  Please post in the [http://moodle.org/mod/forum/view.php?id=8052 Future major features forum] on moodle.org. You could also blog/tweet about it etc.&lt;br /&gt;
&lt;br /&gt;
Community developers proposing a new feature will want to talk with HQ core developers to make sure the ideas make sense, and possibly get some review on database design, architecture and so on.&lt;br /&gt;
&lt;br /&gt;
===Develop the code using Git===&lt;br /&gt;
&lt;br /&gt;
Develop your code on an open Git repository, like github.com.  That enables people to see your code and to help you as it develops.  Testers and early adopters also have the opportunity to try it early in the process and give you more valuable feedback.&lt;br /&gt;
&lt;br /&gt;
It is essential that your code follows the [[Coding|Moodle Coding Guide]].&lt;br /&gt;
&lt;br /&gt;
===Submit your code for peer review===&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Request peer review&amp;quot; button in the tracker.&lt;br /&gt;
&lt;br /&gt;
You need to fill in the information about your public git repository and which branches the fixes are on. Make sure you are listed as Assignee.&lt;br /&gt;
&lt;br /&gt;
This would be a good time to fill in the testing instructions for how to verify your fix is correct. You may also wish to add a comment in the bug.&lt;br /&gt;
&lt;br /&gt;
Component leads should put issues, which affect code in their components, up for peer review to allow interested parties to provide feedback. However, if it is not reviewed in a week, a component lead may send the issue to integration. If integrators consider that the issue has not been given proper chance for peer review (e.g. is extremely large or complex...) it can be decided to move the issue back in the process.&lt;br /&gt;
&lt;br /&gt;
All other developers, including people who are component leads but working outside their component, should have their issues peer reviewed before they are sent to integration.&lt;br /&gt;
&lt;br /&gt;
===Peer review===&lt;br /&gt;
&lt;br /&gt;
The [http://tracker.moodle.org/browse/MDL#selectedTab=com.atlassian.jira.plugin.system.project%3Acomponents-panel component lead] should peer-review the change. If there is no component lead for an affected component, any other recognised developer may complete the peer review. The peer reviewer will either give you comments on the code and if it needs more work.&lt;br /&gt;
&lt;br /&gt;
Process and the list of things to check are described in [[Peer reviewing]].&lt;br /&gt;
&lt;br /&gt;
===Submit the code for integration===&lt;br /&gt;
&lt;br /&gt;
The developer is responsible for acting on the feedback from the peer reviewer. If changes have been made and the developer is satisfied that this has accommodated the feedback from the peer reviewer, then the developer can submit the issue for integration. If there have been significant changes after the peer review, or if the peer reviewer has raised concerns about the approach taken, then the developer should offer the issue up for peer review again, most often to the same peer reviewer, but not necessarily.&lt;br /&gt;
&lt;br /&gt;
Submitting an issue to integration is much the same as for any Moodle code.  See the information about the integration workflow above.&lt;br /&gt;
&lt;br /&gt;
==Fixing a bug==&lt;br /&gt;
&lt;br /&gt;
Bug fixes, and minor features or enhancements should go through the following process. (The only exception is English language string typo fixes or suggested improvements, which may be contributed to the en_fix language pack on the [http://lang.moodle.org/ Moodle translation site].)&lt;br /&gt;
&lt;br /&gt;
===Make sure there is a tracker issue===&lt;br /&gt;
&lt;br /&gt;
Every change must have an issue in the tracker. If you are fixing a bug, there is probably one there already, but if not, create one. [[Tracker tips|Tips for searching tracker]].&lt;br /&gt;
&lt;br /&gt;
===Decide which branches the fix is required on===&lt;br /&gt;
&lt;br /&gt;
Bugs should normally be fixed on all the supported stable branches that are affected. New features should just go into master, but sometimes minor enhancements are made on the most recent stable branch.&lt;br /&gt;
&lt;br /&gt;
===Develop your change using git===&lt;br /&gt;
&lt;br /&gt;
Develop your fix and push the change to an open git repository, for example on github.com. See also [[Git for developers]]&lt;br /&gt;
&lt;br /&gt;
It is essential that your code follows the [[Coding|Moodle Coding Guide]].&lt;br /&gt;
&lt;br /&gt;
You will need to push one commit for each branch the fix needs to be applied to. Often people use branch names like wip_MDL-12345_31_brief_name so it is clear what each branch is. [http://kernel.org/pub/software/scm/git/docs/git-cherry-pick.html git cherry-pick] can help with replicating the fix onto different branches.&lt;br /&gt;
&lt;br /&gt;
===Submit your code for peer review===&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Request peer review&amp;quot; button in the tracker. &lt;br /&gt;
&lt;br /&gt;
You need to fill in the information about your public git repository and which branches the fixes are on. Make sure you are listed as Assignee.&lt;br /&gt;
&lt;br /&gt;
This would be a good time to fill in the testing instructions for how to verify your fix is correct. You may also wish to add a comment in the bug. (... or should you put that information in the commit comment?)&lt;br /&gt;
&lt;br /&gt;
If you &#039;&#039;&#039;don&#039;t see &amp;quot;Request peer review&amp;quot; button&#039;&#039;&#039;, just comment on the issue with the git repository URL, branch name, diff URL and testing instructions. Component lead or another user with sufficient privileges will send the issue up for peer for you. After your first fix is integrated you will be added to developers group and will be able to send issues for peer review.&lt;br /&gt;
&lt;br /&gt;
===Peer review===&lt;br /&gt;
&lt;br /&gt;
The [https://tracker.moodle.org/projects/MDL?selectedItem=com.atlassian.jira.jira-projects-plugin:components-page component lead] should peer-review the change. If there is no component lead for an affected component, any other recognised developer may complete the peer review. The peer reviewer will either give you comments on the code and if it needs more work.&lt;br /&gt;
&lt;br /&gt;
Process and the list of things to check are described in [[Peer reviewing]].&lt;br /&gt;
&lt;br /&gt;
===Submit your code for integration===&lt;br /&gt;
&lt;br /&gt;
It will then be reviewed the following week by one of the integration team and either integrated or rejected. Once integrated, the fix will be tested, and then included in the next weekly release.&lt;br /&gt;
&lt;br /&gt;
==Security issues==&lt;br /&gt;
&lt;br /&gt;
Issues identified as [[Security|security issues]] are resolved in a slightly different way, in order to achieve responsible disclosure as described in [[Moodle security procedures]].&lt;br /&gt;
&lt;br /&gt;
* Security issues should be labelled as &amp;quot;Minor&amp;quot; or &amp;quot;Serious&amp;quot; in order control visibility of the issue.&lt;br /&gt;
** An issue reported with a security level of &amp;quot;Could be a security issue&amp;quot; should be evaluated as soon as possible and either set as &amp;quot;Minor&amp;quot; or &amp;quot;Serious&amp;quot; or the security level should be set to &amp;quot;None&amp;quot;.&lt;br /&gt;
* Solutions to security issues should not:&lt;br /&gt;
** be made available in public repositories.&lt;br /&gt;
*** If a developer has shared a solution as Git branches via Github, they should be asked to provide the solutions as [[How_to_create_a_patch|stand-alone patches]] attached to the issue and to [[#How to remove a branch from Github|remove the solution from Github]].&lt;br /&gt;
** contain details about the security problem in the commit message.&lt;br /&gt;
*** Instead use generic terms like, &amp;quot;improve&amp;quot;, &amp;quot;better handling of&amp;quot; ..&lt;br /&gt;
* The solution will not be integrated until the week before a [[Process#Stable_maintenance_cycles|minor release]] following the normal [[Release process|Release process]]. In short, the issue will be incorporated into the integration version, rebased, tested and made ready for release as a normal issue would, but not until as late as possible.&lt;br /&gt;
* Details of security issues will be shared with registered admins with the minor release.&lt;br /&gt;
* Details of security issues will not be publicly announced until one week after a minor release to allow admins to update.&lt;br /&gt;
&lt;br /&gt;
Note that not all the labelled (minor) security issues are always handled following the procedure above. It&#039;s possible that, after discussion, it&#039;s decided a given issue is not a real Moodle security problem (say external disclosures/potential attacks using Moodle as vector, not as target, discussions revealing some private details...). Those issues will be processed as normal issues, generating the needed user documentation if necessary and will be part of the habitual weekly releases.&lt;br /&gt;
&lt;br /&gt;
====How to remove a branch from Github====&lt;br /&gt;
&lt;br /&gt;
To remove a branch from Github, you can use the following command.&lt;br /&gt;
&lt;br /&gt;
 git push github :remote_branch&lt;br /&gt;
&lt;br /&gt;
Where &#039;&#039;remote_branch&#039;&#039; is the name of your remote branch, for example &#039;wip-mdl-1234&#039;. This effectively replaces the remote branch with nothing, removing the remote branch, but leaving the branch intact in your local Git repository. Please note that its likely that your commit will still exist on github due to the nature of git, so its best to avoid doing this in the first place.&lt;br /&gt;
&lt;br /&gt;
==Policy issues==&lt;br /&gt;
&lt;br /&gt;
Occasionally within Moodle we run into policy issues where a high-level decision needs to be made about how things are to be done.&lt;br /&gt;
&lt;br /&gt;
In these cases the process is as follows:&lt;br /&gt;
* Create an issue in the tracker with a [https://tracker.moodle.org/browse/MDL/component/12733 Policy component] and put &amp;quot;POLICY:&amp;quot; as a prefix on the summary.&lt;br /&gt;
* In the description describe the problem clearly as well as all the options.  If it&#039;s long then make a page here in Moodle Dev Docs and link to it.&lt;br /&gt;
* Do not use this issue for code.  If there are issues that depend on this policy decision, then add tracker links to them as dependencies.&lt;br /&gt;
* Feel free to encourage people to come and talk about the policy to support various points of view.  The more evidence we have (from everyone in the community) the better.&lt;br /&gt;
&lt;br /&gt;
Some time has been scheduled in the weekly Moodle HQ meeting to look at Policy issues and try to make decisions on them.  We discuss all the evidence and try to achieve a high amount of consensus.  Deadlocked issues can be resolved by a decision from Martin Dougiamas (this is rarely needed).&lt;br /&gt;
&lt;br /&gt;
Decisions will be posted on the issue and that issue will be closed, allowing any dependent issues to continue to integration (or not).   Decisions are final and bribes hardly ever work.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Release process]]&lt;br /&gt;
* [[Deprecation]]&lt;br /&gt;
* [http://tracker.moodle.org/secure/Dashboard.jspa?selectPageId=11350 Integration dashboard]&lt;br /&gt;
&lt;br /&gt;
Walks-though of the process for contributors:&lt;br /&gt;
* By Dan Poltawski, Integrator: http://www.slideshare.net/poltawski/how-to-guarantee-your-change-is-integrated-to-moodle-core, https://www.youtube.com/watch?v=836WtnM2YpM&lt;br /&gt;
* By Tim Hunt, contributor: http://tjhunt.blogspot.co.uk/2012/03/fixing-bug-in-moodle-core-mechanics.html and https://www.youtube.com/watch?v=gPPA3h7OGQU&lt;br /&gt;
&lt;br /&gt;
[[Category:Processes]]&lt;br /&gt;
[[Category:Quality Assurance]]&lt;br /&gt;
[[Category:Git]]&lt;br /&gt;
[[Category:Core development]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Running_acceptance_test&amp;diff=52196</id>
		<title>Running acceptance test</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Running_acceptance_test&amp;diff=52196"/>
		<updated>2017-04-27T07:05:55Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Explain -a a bit better&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Prerequisite ==&lt;br /&gt;
Before initializing acceptance test environment for running behat, you should ensure:&lt;br /&gt;
# [[Acceptance_testing#Requirements Meet min. system requirements for running tests]]&lt;br /&gt;
# [[Acceptance_testing#Installation Have set min. config variable in config.php for behat]]&lt;br /&gt;
# [[Acceptance_testing#Installation Downloaded composer dependencies]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Acceptance tests (also known as behat), use [http://www.seleniumhq.org/download/ Selenium server] and can be run as:&lt;br /&gt;
# &#039;&#039;&#039;Single run:&#039;&#039;&#039; In single run, only one behat run is executed. So all features are executed in this single run.&lt;br /&gt;
# &#039;&#039;&#039;Parallel runs:&#039;&#039;&#039; (Since Moodle 3.0) Parallel runs allow dev&#039;s to execute multiple behat runs together. This was introduced to get acceptance tests results faster. To achieve this:&lt;br /&gt;
#* Features are divided between multiple behat runs&lt;br /&gt;
#* Symlinks behatrun{x} (x being the run process number), are created pointing to moodle directory, so site for run 1 is accessible via https://localhost/moodle/behatrun1&lt;br /&gt;
#* Process number is included as suffix to $CFG-&amp;gt;behat_prefix.&lt;br /&gt;
#* Process number is suffixed to $CFG-&amp;gt;behat_dataroot.&lt;br /&gt;
&lt;br /&gt;
== Step 1: Initialise acceptance test environment ==&lt;br /&gt;
Before running acceptance tests, environment needs to be initialised for acceptance testing.&lt;br /&gt;
&lt;br /&gt;
=== Single run ===&lt;br /&gt;
For initialising acceptance tests for single run, above command is sufficient.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/init.php&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parallel runs ===&lt;br /&gt;
For initialising acceptance tests for parallel runs, you can use one of the following options&lt;br /&gt;
# &#039;&#039;&#039;-j or --parallel&#039;&#039;&#039; (required) Number of parallel behat run to initialise&lt;br /&gt;
# &#039;&#039;&#039;-m or --maxruns&#039;&#039;&#039;  (optional) Max parallel site which should be initialised at one time. If your system is slow, then you can initialise sites in chucks.&lt;br /&gt;
# &#039;&#039;&#039;--fromrun&#039;&#039;&#039; (optional) Initialise site to run specified run from. Used for running acceptance tests on different vms&lt;br /&gt;
# &#039;&#039;&#039;--torun&#039;&#039;&#039; (optional) Initialise site to run specified run till. Used for running acceptance tests on different vms&lt;br /&gt;
# &#039;&#039;&#039;-o or --optimize-runs&#039;&#039;&#039; (optional) This option will split features with specified tags in all parallel runs, so they are executed first when parallel run gets executed.&lt;br /&gt;
# &#039;&#039;&#039;-a or --add-core-features-to-theme&#039;&#039;&#039; (optional) Since Moodle 3.2. Use this option to add all core features to specified theme&#039;s (comma separated list of themes)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
// Below command will initialise moodle to run 2 parallel tests.&lt;br /&gt;
php admin/tool/behat/cli/init.php --parallel=2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 2: Running acceptance test environment ==&lt;br /&gt;
=== Single run ===&lt;br /&gt;
Run either of the following commands. For more options &#039;&#039;&#039;vendor/bin/behat --help&#039;&#039;&#039; or http://docs.behat.org/guides/6.cli.html&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vendor/bin/behat --config /path/to/your/CFG_behat_dataroot/behatrun/behat/behat.yml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/run.php&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parallel runs ===&lt;br /&gt;
For running parallel runs, use following command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/run.php&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Following optional options are available for custom run:&lt;br /&gt;
# &#039;&#039;&#039;--feature&#039;&#039;&#039; Only execute specified feature file (Absolute path of feature file).&lt;br /&gt;
# &#039;&#039;&#039;--suite&#039;&#039;&#039; Features for specified theme will be executed.&lt;br /&gt;
# &#039;&#039;&#039;--replace&#039;&#039;&#039; Replace args string with run process number, useful for output and reruns.&lt;br /&gt;
# &#039;&#039;&#039;--fromrun&#039;&#039;&#039; Execute run starting from (Used for parallel runs on different vms)&lt;br /&gt;
# &#039;&#039;&#039;--torun&#039;&#039;&#039; Execute run till (Used for parallel runs on different vms)&lt;br /&gt;
# &#039;&#039;&#039;-a or --add-core-features-to-theme&#039;&#039;&#039; (optional) Since Moodle 3.2. Use this option to add all core features to specified theme&#039;s (comma separated list)&lt;br /&gt;
# Behat options can be passed for filtering features/scenarios:&lt;br /&gt;
#* In case you don&#039;t want to run Javascript tests, use the Behat tags option to skip them, &#039;&#039;&#039;--tags=&amp;quot;~@javascript&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
#* In case you want to run specific scenario, use the Behat name option to run it, &#039;&#039;&#039;--name=&amp;quot;Filter user accounts by role and cohort&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
#* In case you want to run specific feature file, use the Behat feature option to run it, &#039;&#039;&#039;--feature=&amp;quot;/PATH/TO/MOODLE/admin/tests/behat/filter_users.feature&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Common options for running tests ===&lt;br /&gt;
==== Tests filters ====&lt;br /&gt;
With the &#039;&#039;&#039;--tags&#039;&#039;&#039; or the &#039;&#039;&#039;-name&#039;&#039;&#039; Behat options you can filter which tests are going to run or which ones are going to be skipped. There are a few tags that you might be interested in:&lt;br /&gt;
* &#039;&#039;&#039;@javascript&#039;&#039;&#039;: All the tests that runs in a browser using Javascript; they require Selenium to be running, otherwise an exception will be thrown.&lt;br /&gt;
* &#039;&#039;&#039;@_file_upload&#039;&#039;&#039;: All the tests that involves file uploading or any OS feature that is not 100% part of the browser. They should only be executed when Selenium is running in the same machine where the tests are running.&lt;br /&gt;
* &#039;&#039;&#039;@_alert&#039;&#039;&#039;: All the tests that involves Javascript dialogs (alerts, confirms...) are using a feature that is OS-dependant and out of the browser scope, so they should be tag appropriately as not all browsers manage them properly.&lt;br /&gt;
* &#039;&#039;&#039;@_switch_window&#039;&#039;&#039;: All the tests that are using the &#039;&#039;&#039;I switch to &amp;quot;NAME&amp;quot; window&#039;&#039;&#039; step should be tagged as not all browsers manage them properly.&lt;br /&gt;
* &#039;&#039;&#039;@_switch_iframe&#039;&#039;&#039;: All the tests that are using the &#039;&#039;&#039;I switch to &amp;quot;NAME&amp;quot; window&#039;&#039;&#039; steps should be tagged as it is an advanced feature and some browsers may have problems dealing with them&lt;br /&gt;
* &#039;&#039;&#039;@_cross_browser&#039;&#039;&#039;: All the tests that should run against multiple combinations of browsers + OS in a regular basis. The features that are sensitive to different combinations of OS and browsers should be tagges as @_cross_browser.&lt;br /&gt;
* &#039;&#039;&#039;@componentname&#039;&#039;&#039;: Moodle features uses the [https://docs.moodle.org/dev/Frankenstyle Frankenstyle] component name to tag the features according to the Moodle subsystem they belong to.&lt;br /&gt;
&lt;br /&gt;
==== Output formats ====&lt;br /&gt;
Since Moodle 3.1 option for output is:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--format=pretty --out=/path/to/pretty.txt --format=moodle_progress --out=std&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Before Moodle 3.1 option for output was:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--format=&#039;moodle_progress,pretty&#039; --out=&#039;,/path/to/pretty.txt&#039;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Following output formats are supported:&lt;br /&gt;
# &#039;&#039;&#039;progress&#039;&#039;&#039;: Prints one character per step.&lt;br /&gt;
# &#039;&#039;&#039;pretty&#039;&#039;&#039;: Prints the feature as is.&lt;br /&gt;
# &#039;&#039;&#039;junit&#039;&#039;&#039;: Outputs the failures in JUnit compatible files.&lt;br /&gt;
# &#039;&#039;&#039;moodle_progress&#039;&#039;&#039;: Prints Moodle branch information and dots for each step.&lt;br /&gt;
# &#039;&#039;&#039;moodle_list&#039;&#039;&#039;: List all scenarios.&lt;br /&gt;
# &#039;&#039;&#039;moodle_stepcount&#039;&#039;&#039;: List all features with total steps in each feature file. Used for parallel run.&lt;br /&gt;
# &#039;&#039;&#039;moodle_screenshot&#039;&#039;&#039;: (since Moodle 3.1) Take screenshot and core dump of each step. With following options you can dump either or both.&lt;br /&gt;
## --format-settings &#039;{&amp;quot;formats&amp;quot;: &amp;quot;image&amp;quot;}&#039;**: will dump image only&lt;br /&gt;
## --format-settings &#039;{&amp;quot;formats&amp;quot;: &amp;quot;html&amp;quot;}&#039;**: will dump html only.&lt;br /&gt;
## --format-settings &#039;{&amp;quot;formats&amp;quot;: &amp;quot;html,image&amp;quot;}&#039;**: will dump both.&lt;br /&gt;
## --format-settings &#039;{&amp;quot;formats&amp;quot;: &amp;quot;html&amp;quot;, &amp;quot;dir_permissions&amp;quot;: &amp;quot;0777&amp;quot;}&#039;**&lt;br /&gt;
If you want to see the failures immediately (rather than waiting ~3 hours for all the tests to finish) then either use the -v option to output a bit more information, or change the output format using --format. Format &#039;pretty&#039; (&#039;&#039;&#039;-f pretty&#039;&#039;&#039;) is sufficient for most cases, as it outputs each step outcomes in the command line making easier to see the progress.&lt;br /&gt;
&lt;br /&gt;
== Advance usage ==&lt;br /&gt;
=== Rerun failed scenarios ===&lt;br /&gt;
With slow systems or parallel run you might see some random failures, to rerun only failed scenarios (to eliminate random failures), use --rerun option&lt;br /&gt;
# &#039;&#039;&#039;Single run:&#039;&#039;&#039; --run=&amp;quot;absolute_path_to_empty_file&amp;quot; (Behat will record failed scenarios in this file, and when run again only failed scenarios will be run)&lt;br /&gt;
# &#039;&#039;&#039;Parallel run:&#039;&#039;&#039; --rerun=&amp;quot;absolute_path_to_empty_file_{runprocess}.txt --replace=&amp;quot;{runprocess}&amp;quot; ({runprocess} will be replaced with the process number for recording fails in the specific run process).&lt;br /&gt;
&#039;&#039;&#039;Since Moodle 3.1 --rerun option don&#039;t accept any value, as it is handled internally by behat&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Running behat with specified theme (Since Moodle 3.2) ===&lt;br /&gt;
You can run behat with any theme installed. To execute behat with specified theme use &#039;&#039;&#039;--suite={THEME_NAME}&#039;&#039;&#039; option, while running behat. By default the features in theme behat folder will be executed for the suite. But if you want to run all core features with the specific theme then initialise acceptance test with -a option. For example, &#039;&#039;&#039;-a {THEME_NAME}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Override behat core context for theme suite ====&lt;br /&gt;
To override behat step definitions so as to run behat with specified theme, you should create a contexts within &#039;&#039;&#039;/theme/{MYTHEME}/tests/behat/&#039;&#039;&#039; with prefix behat_theme_{MYTHEME}_ and suffixed with the context being overridden. For example, if you want to override behat_mod_forum context, then you should create a class /theme/{MYTHEME}/tests/behat/mod_forum/behat_theme_{MYTHEME}_behat_mod_forum.php&lt;br /&gt;
&lt;br /&gt;
==== Blacklist behat context or features to run in theme suite ====&lt;br /&gt;
To blacklist contexts/ features to be executed by theme suite you should create a /theme/{MYTHEME}/tests/behat/blacklist.json file with following format. Following will not use step_definitions from  behat_grade and behat_navigation while running theme suite. Also, scenarios in auth/tests/behat/login.feature and grade/tests/behat/grade_hidden_items.feature won&#039;t be executed with theme suite.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;contexts&amp;quot;: [&lt;br /&gt;
    &amp;quot;behat_grade&amp;quot;,&lt;br /&gt;
    &amp;quot;behat_navigation&amp;quot;,&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;features&amp;quot;: [&lt;br /&gt;
    &amp;quot;auth/tests/behat/login.feature&amp;quot;,&lt;br /&gt;
    &amp;quot;grade/tests/behat/grade_hidden_items.feature&amp;quot;,&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Override core behat selectors ====&lt;br /&gt;
To override behat selectors in specific theme, you should create a class behat_theme_{MYTHEME}_behat_selectors in /theme/{MYTHEME}/tests/behat/behat_theme_{MYTHEME}_behat_selectors.php extending behat_selectors.&lt;br /&gt;
&lt;br /&gt;
=== Use php built in web server ===&lt;br /&gt;
You can use php built-in-web server for executing behat runs. To do so:&lt;br /&gt;
# Open a command line interface and &#039;&#039;&#039;cd /to/your/moodle/dirroot&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;php -S localhost:8000&#039;&#039;&#039; (This is the test site URL that moodle uses by default, if you want to use another one you can override it in config.php with $CFG-&amp;gt;behat_wwwroot attribute; more info in https://docs.moodle.org/dev/Acceptance_testing#Advanced_usage or config-dist.php)&lt;br /&gt;
# Update $CFG-&amp;gt;behat_wwwroot = localhost:8000; in config.php&lt;br /&gt;
&lt;br /&gt;
=== Define custom options for parallel runs ===&lt;br /&gt;
You can set following custom config options for parallel runs via $CFG-&amp;gt;behat_parallel_run. It&#039;s an array of options where 1st array is for 1st run and so on.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
       array (&lt;br /&gt;
           &#039;dbtype&#039; =&amp;gt; &#039;mysqli&#039;,&lt;br /&gt;
           &#039;dblibrary&#039; =&amp;gt; &#039;native&#039;,&lt;br /&gt;
           &#039;dbhost&#039; =&amp;gt; &#039;localhost&#039;,&lt;br /&gt;
           &#039;dbname&#039; =&amp;gt; &#039;moodletest&#039;,&lt;br /&gt;
           &#039;dbuser&#039; =&amp;gt; &#039;moodle&#039;,&lt;br /&gt;
           &#039;dbpass&#039; =&amp;gt; &#039;moodle&#039;,&lt;br /&gt;
           &#039;behat_prefix&#039; =&amp;gt; &#039;mdl_&#039;,&lt;br /&gt;
           &#039;wd_host&#039; =&amp;gt; &#039;http://127.0.0.1:4444/wd/hub&#039;,&lt;br /&gt;
           &#039;behat_wwwroot&#039; =&amp;gt; &#039;http://127.0.0.1/moodle&#039;,&lt;br /&gt;
           &#039;behat_dataroot&#039; =&amp;gt; &#039;/home/example/bht_moodledata&#039;&lt;br /&gt;
       )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set different selenium servers for parallel runs, you can use following. NOTE: Running parallel (headless) runs on different selenium servers avoid random focus failures.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $CFG-&amp;gt;behat_parallel_run = array (&lt;br /&gt;
        array (&#039;wd_host&#039; =&amp;gt; &#039;http://127.0.0.1:4444/wd/hub&#039;),&lt;br /&gt;
        array (&#039;wd_host&#039; =&amp;gt; &#039;http://127.0.0.1:4445/wd/hub&#039;),&lt;br /&gt;
        array (&#039;wd_host&#039; =&amp;gt; &#039;http://127.0.0.1:4446/wd/hub&#039;),&lt;br /&gt;
    );&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running acceptance tests with different browser ===&lt;br /&gt;
By default behat will run with Firefox browser through Selenium. By adding the following code to your config.php you can change the selected browser that is run when behat is invoked.  You will need to run php admin/tool/behat/cli/init.php for changes to take effect. Then use --profile=&#039;chrome&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;behat_profiles = array(&lt;br /&gt;
   &#039;chrome&#039; =&amp;gt; array(&lt;br /&gt;
       &#039;browser&#039; =&amp;gt; &#039;chrome&#039;,&lt;br /&gt;
       &#039;tags&#039; =&amp;gt; &#039;@javascript&#039;,&lt;br /&gt;
   )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
[[Acceptance_testing/Browsers|More info about alternative browsers]]&lt;br /&gt;
&lt;br /&gt;
=== Start multiple selenium servers ===&lt;br /&gt;
From command line Start selenium servers at different ports (say 4444, 4445, 4446 for 3 parallel runs)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar -port 4444 &amp;amp;&lt;br /&gt;
java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar -port 4445 &amp;amp;&lt;br /&gt;
java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar -port 4446&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using Docker to start selenium server ===&lt;br /&gt;
==== What is Docker ====&lt;br /&gt;
Docker is a app container,  it&#039;s a kind of virtual machine, but only for one app, service,  so you can download&lt;br /&gt;
a docker image and run a selenium server without worry in how to configure selenium in your machine, one for chrome, others for firefox, you either don&#039;t need to install the browsers in your machine&lt;br /&gt;
To install docker follow this link; https://docs.docker.com/engine/installation/&lt;br /&gt;
&lt;br /&gt;
==== Selenium docker images ====&lt;br /&gt;
There is many docker images available,  for many browser, the complete list is in https://hub.docker.com/u/selenium/&lt;br /&gt;
for moodle you can use standalone version.&lt;br /&gt;
You can download  specific selenium version too,  for example,  for firefox,  moodle recommend selenium 2.53.1, see: [https://docs.moodle.org/dev/Acceptance_testing/Browsers/Working_combinations_of_OS%2BBrowser%2Bselenium What version do I need?]&lt;br /&gt;
&lt;br /&gt;
so  the command will be:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
docker run -d -p4444:4444 selenium/standalone-firefox:2.53.1-beryllium&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
to see all available version click in tags.   For firefox you can find at: https://hub.docker.com/r/selenium/standalone-firefox/tags/&lt;br /&gt;
&lt;br /&gt;
==== Change config.php file ====&lt;br /&gt;
In config.php file you must change the $CFG-&amp;gt;behat_wwwroot=   to your network card (NIC) ip address,  you can&#039;t use &lt;br /&gt;
localhost , 127.0.0.1, ...  or selenium docker server  will fail&lt;br /&gt;
&lt;br /&gt;
== NOTE ==&lt;br /&gt;
# Start the Selenium server (in case you want to run tests that involves Javascript)&lt;br /&gt;
#* (See http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/ for running &#039;headless&#039; Firefox and xvfm in a server environment)&lt;br /&gt;
#* Open another command line interface and &#039;&#039;&#039;java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Trouble shooting ===&lt;br /&gt;
=== New step definitions or features are not executed === &lt;br /&gt;
If you are adding new tests or steps definitions update the tests list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/util.php --enable&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; For parallel runs, all options for initialising parallel runs are valid &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Tests are failing ===&lt;br /&gt;
If you followed all the steps and you receive an unknown weird error probably your system&#039;s Firefox version is not compatible with the Selenium version you are running.  Please refer Working combinations to ensure you have correct [[Acceptance_testing/Browsers/Working_combinations_of_OS%2BBrowser%2Bselenium combination]] of them to run acceptance test.&lt;br /&gt;
&lt;br /&gt;
=== Disable acceptance test environment ===&lt;br /&gt;
if you want to prevent access to test environment&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/util.php --disable&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note that if you have the HTTP_PROXY environment variable set, which you may have had to do to run composer, then you also need to set NO_PROXY=localhost.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* Vagrant profile with Moodle and Behat preconfigured: https://github.com/mackensen/moodle-hat&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Core_filetypes&amp;diff=52194</id>
		<title>Core filetypes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Core_filetypes&amp;diff=52194"/>
		<updated>2017-04-26T02:12:02Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Example code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lib/classes/filetypes.php defines the filetypes included in core.&lt;br /&gt;
&lt;br /&gt;
get_default_types returns an associative array of extension keys to a value which is an array of type, icon, groups and string (which is a lang string which will be used when displaying the type. The lang string is passed $a-&amp;gt;EXT which is the actual extension.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&#039;php&#039; =&amp;gt; array(&#039;type&#039; =&amp;gt; &#039;text/plain&#039;, &#039;icon&#039; =&amp;gt; &#039;sourcecode&#039;),                                                                                                                                                                                                                                                                                           &lt;br /&gt;
&#039;pic&#039; =&amp;gt; array(&#039;type&#039; =&amp;gt; &#039;image/pict&#039;, &#039;icon&#039; =&amp;gt; &#039;image&#039;, &#039;groups&#039; =&amp;gt; array(&#039;image&#039;), &#039;string&#039; =&amp;gt; &#039;image&#039;),                                                                                                                                                                                                                                               &lt;br /&gt;
&#039;pict&#039; =&amp;gt; array(&#039;type&#039; =&amp;gt; &#039;image/pict&#039;, &#039;icon&#039; =&amp;gt; &#039;image&#039;, &#039;groups&#039; =&amp;gt; array(&#039;image&#039;), &#039;string&#039; =&amp;gt; &#039;image&#039;),                                                                                                                                                                                                                                              &lt;br /&gt;
&#039;png&#039; =&amp;gt; array(&#039;type&#039; =&amp;gt; &#039;image/png&#039;, &#039;icon&#039; =&amp;gt; &#039;png&#039;, &#039;groups&#039; =&amp;gt; array(&#039;image&#039;, &#039;web_image&#039;), &#039;string&#039; =&amp;gt; &#039;image&#039;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String example (in lang/en/mimetypes.php)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$string[&#039;image&#039;] = &#039;Image ({$a-&amp;gt;MIMETYPE2})&#039;;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any groups added should add a language string to lang/en/mimetypes.php with the formate group:&amp;lt;groupname&amp;gt;. This is so that the group can be displayed in a human readable formate in the user&#039;s native language.&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Core_filetypes&amp;diff=52193</id>
		<title>Core filetypes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Core_filetypes&amp;diff=52193"/>
		<updated>2017-04-26T02:10:19Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add core filetypes wiki page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lib/classes/filetypes.php defines the filetypes included in core.&lt;br /&gt;
&lt;br /&gt;
get_default_types returns an associative array of extension keys to a value which is an array of type, icon, groups and string (which is a lang string which will be used when displaying the type. The lang string is passed $a-&amp;gt;EXT which is the actual extension.&lt;br /&gt;
&lt;br /&gt;
Any groups added should add a language string to lang/en/mimetypes.php with the formate group:&amp;lt;groupname&amp;gt;. This is so that the group can be displayed in a human readable formate in the user&#039;s native language.&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Projects_for_new_developers&amp;diff=51761</id>
		<title>Projects for new developers</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Projects_for_new_developers&amp;diff=51761"/>
		<updated>2017-01-24T04:38:00Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add Mock DB dml implementation project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{GSOC}}&lt;br /&gt;
&lt;br /&gt;
==Getting started==&lt;br /&gt;
&lt;br /&gt;
Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.&lt;br /&gt;
&lt;br /&gt;
When you have some basic PHP programming skills, you may wish to start learning about how the Moodle code is organised. It is recommended that you complete the [http://dev.moodle.org/course/view.php?id=2 Introduction to Moodle Programming] course on [http://dev.moodle.org/ dev.moodle.org]. To access this you will need to have an account on moodle.org first.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are looking for projects suggested in the tracker, look for issues with the [https://tracker.moodle.org/issues/?jql=labels%20in%20%28addon_candidate%29 &#039;addon_candidate&#039; label].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are looking to make a quick contribution, look for tracker issues with marked as [https://tracker.moodle.org/issues/?jql=Difficulty%20%3D%20Easy easy].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please consider adopting a [https://moodle.org/plugins/browse.php?list=set&amp;amp;id=61 plugin seeking a new maintainer]&#039;&#039;. See the [https://moodle.org/mod/forum/discuss.php?d=260354 Plugins adoption programme].&lt;br /&gt;
&lt;br /&gt;
As you become more involved in Moodle development, you might like to learn more about the [[Coding|coding conventions]] used and how changes to Moodle core code are [[Process|processed]].&lt;br /&gt;
&lt;br /&gt;
==Potential projects==&lt;br /&gt;
&lt;br /&gt;
This evolving page lists possible Moodle projects for new developers derived from community suggestions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see [[New feature ideas]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Pusher integration for HTML5 push notifications ===&lt;br /&gt;
Moodle supports message output plugins. By adding a plugin for pusher.com and a Javascript service worker to listen for push notifications, we can have realtime HTML5 notifications on all platforms.&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: Javascript (JQuery, AMD), PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1337843 Damyon Wiese]&lt;br /&gt;
&lt;br /&gt;
=== Ability to crop/resize/rotate an image in atto ===&lt;br /&gt;
&lt;br /&gt;
Moodle comes with it&#039;s own HTML editor known as &#039;atto&#039; (see https://docs.moodle.org/dev/Atto). The editor functions similarly to other editors out there, like TinyMCE, but is tailored to Moodle. It comes with multiple plugins that allow users to perform tasks, such as changing the font size, the alignment, adding links etc. One of these plugins allows the user to add an image to the text editor with the ability to specify the size and alignment of the image via text input. The idea of this project is to extend and improve this current plugin so the user can crop/resize/rotate the image via JS - making the whole experience easier and more aesthetically pleasing.&lt;br /&gt;
&lt;br /&gt;
This project details/discussion can be located at MDL-52982.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: Javascript (YUI), PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/view.php?id=1057750 Mark Nelson]&lt;br /&gt;
&lt;br /&gt;
=== Improve Behat tests in SCORM plugin ===&lt;br /&gt;
The Moodle SCORM plugin does not contain very many behat tests and most tests are manual. The Claude Ostyn diagnostic SCO should be used to implement a range of new Behat tests to cover the functionality that the SCORM module provides.&lt;br /&gt;
&lt;br /&gt;
Deliverables:&lt;br /&gt;
* Behat tests for all existing SCORM QA tests (where possible)&lt;br /&gt;
* Behat tests for all SCORM settings (eg standards mode, mastery score settings etc) &lt;br /&gt;
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.&lt;br /&gt;
&lt;br /&gt;
Extra requirement for prospective students:&lt;br /&gt;
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=21591&amp;amp;course=5 Dan Marsden]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Grading in Forums ===&lt;br /&gt;
Finish the work required to add the advanced grading feature to the Moodle forum activity. This builds on some existing work available at MDL-31860&lt;br /&gt;
&lt;br /&gt;
Deliverables:&lt;br /&gt;
* Modify the forum grading so that it pushes 2 grade areas (or 3 including ratings) into the gradebook instead of a single grade.&lt;br /&gt;
* Improve interface that allows overall forum participation grading.&lt;br /&gt;
* Behat tests for all new functionality.&lt;br /&gt;
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.&lt;br /&gt;
&lt;br /&gt;
Extra requirement for prospective students:&lt;br /&gt;
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=21591&amp;amp;course=5 Dan Marsden]&lt;br /&gt;
&lt;br /&gt;
=== Add support to end-to-end testing in the Mobile app ===&lt;br /&gt;
&lt;br /&gt;
[https://angular.github.io/protractor/#/ Protractor] is an end-to-end test framework for AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.&lt;br /&gt;
&lt;br /&gt;
The basements for this project are done, see MOBILE-1179, the only remaining work is to add more tests to the app and document the set-up process in the Moodle developers wiki.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required: Javascript (AngularJS)&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor: [https://moodle.org/user/profile.php?id=49568 Juan Leyva]&lt;br /&gt;
&lt;br /&gt;
===Clef | Two-Factor Authentication===&lt;br /&gt;
Create [https://getclef.com Clef two factor authentication] plugin, so  a user can log in using their mobile to reduce login time. This will improve security and reduce  the login time for users.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, Javascript&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1328988 Rajesh Taneja]&lt;br /&gt;
&lt;br /&gt;
=== Multi-step login screen ===&lt;br /&gt;
Update the login screen to first ask for a username, and then the password as a two-step process.&lt;br /&gt;
See the login process for Google&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, JavaScript, Mustache&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1779959 John Okely]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2FA - Two Factor Authentication ===&lt;br /&gt;
Add support for Two-Factor Authentication. This would work well when combined with the Multi-step login screen.&lt;br /&gt;
Factors requiring consideration include the Mobile app integrations.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, JavaScript, Mustache&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols]&lt;br /&gt;
&lt;br /&gt;
=== CLI Helper for Moodle Developers ===&lt;br /&gt;
Possibly an addendum to MDK, a set of scripts to help facilitate various common tasks. In particular:&lt;br /&gt;
* creation of Persistent Objects including their Class files, the XMLDB code to create their tables, and the XMLDB upgrade scripts required to upgrade (including version bumps)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, Python?&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Hard&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols]&lt;br /&gt;
&lt;br /&gt;
=== Trait for Mock DB in unit tests ===&lt;br /&gt;
In moodle we run every unit test using a real database. This is extremely slow with little benefit. Granted it does catch some cross-database compatibility issues, but we don&#039;t need it for every test. We should add a trait that test classes can use that will automatically set up mock $DB to save processing power and unnecessary waiting for DB.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, PHPUnit&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Easy&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols] or [https://moodle.org/user/profile.php?id=1779959 John Okely]&lt;br /&gt;
&lt;br /&gt;
=== Mock implementation of DML ===&lt;br /&gt;
In moodle we run every unit test using a real database. This is extremely slow with little benefit. Granted it does catch some cross-database compatibility issues, but we don&#039;t need it for every test. It is possible to extend moodle_database and mock all the calls to use an in memory/mocked database. The easiest way to do this may be to use first make a Data Access Object implementation, and then use a mock DAO&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, PHPUnit&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Very Hard&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1779959 John Okely]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[GSOC]] - describing Moodle&#039;s involvement with Google in their Summer of Code program&lt;br /&gt;
* [https://tracker.moodle.org/issues/?jql=type%20in%20%28%22New%20Feature%22%2C%20Improvement%29%20AND%20resolution%20%3D%20unresolved%20and%20labels%20in%20%28addon_candidate%29%20ORDER%20BY%20votes%20DESC Popular new feature and improvement requests in Tracker that can be implemented as plugins]&lt;br /&gt;
* [[Projects for new developers/Archive|Archive]] of outdated and/or inactive calls for projects&lt;br /&gt;
* [https://docs.moodle.org/dev/Moodle_Wishlist a Wishlist] by some Moodle users. Some of the good ideas here may be adopted.&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Projects_for_new_developers&amp;diff=51760</id>
		<title>Projects for new developers</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Projects_for_new_developers&amp;diff=51760"/>
		<updated>2017-01-24T04:34:39Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Fix up trait db unit tests project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{GSOC}}&lt;br /&gt;
&lt;br /&gt;
==Getting started==&lt;br /&gt;
&lt;br /&gt;
Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.&lt;br /&gt;
&lt;br /&gt;
When you have some basic PHP programming skills, you may wish to start learning about how the Moodle code is organised. It is recommended that you complete the [http://dev.moodle.org/course/view.php?id=2 Introduction to Moodle Programming] course on [http://dev.moodle.org/ dev.moodle.org]. To access this you will need to have an account on moodle.org first.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are looking for projects suggested in the tracker, look for issues with the [https://tracker.moodle.org/issues/?jql=labels%20in%20%28addon_candidate%29 &#039;addon_candidate&#039; label].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are looking to make a quick contribution, look for tracker issues with marked as [https://tracker.moodle.org/issues/?jql=Difficulty%20%3D%20Easy easy].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please consider adopting a [https://moodle.org/plugins/browse.php?list=set&amp;amp;id=61 plugin seeking a new maintainer]&#039;&#039;. See the [https://moodle.org/mod/forum/discuss.php?d=260354 Plugins adoption programme].&lt;br /&gt;
&lt;br /&gt;
As you become more involved in Moodle development, you might like to learn more about the [[Coding|coding conventions]] used and how changes to Moodle core code are [[Process|processed]].&lt;br /&gt;
&lt;br /&gt;
==Potential projects==&lt;br /&gt;
&lt;br /&gt;
This evolving page lists possible Moodle projects for new developers derived from community suggestions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see [[New feature ideas]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Pusher integration for HTML5 push notifications ===&lt;br /&gt;
Moodle supports message output plugins. By adding a plugin for pusher.com and a Javascript service worker to listen for push notifications, we can have realtime HTML5 notifications on all platforms.&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: Javascript (JQuery, AMD), PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1337843 Damyon Wiese]&lt;br /&gt;
&lt;br /&gt;
=== Ability to crop/resize/rotate an image in atto ===&lt;br /&gt;
&lt;br /&gt;
Moodle comes with it&#039;s own HTML editor known as &#039;atto&#039; (see https://docs.moodle.org/dev/Atto). The editor functions similarly to other editors out there, like TinyMCE, but is tailored to Moodle. It comes with multiple plugins that allow users to perform tasks, such as changing the font size, the alignment, adding links etc. One of these plugins allows the user to add an image to the text editor with the ability to specify the size and alignment of the image via text input. The idea of this project is to extend and improve this current plugin so the user can crop/resize/rotate the image via JS - making the whole experience easier and more aesthetically pleasing.&lt;br /&gt;
&lt;br /&gt;
This project details/discussion can be located at MDL-52982.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: Javascript (YUI), PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/view.php?id=1057750 Mark Nelson]&lt;br /&gt;
&lt;br /&gt;
=== Improve Behat tests in SCORM plugin ===&lt;br /&gt;
The Moodle SCORM plugin does not contain very many behat tests and most tests are manual. The Claude Ostyn diagnostic SCO should be used to implement a range of new Behat tests to cover the functionality that the SCORM module provides.&lt;br /&gt;
&lt;br /&gt;
Deliverables:&lt;br /&gt;
* Behat tests for all existing SCORM QA tests (where possible)&lt;br /&gt;
* Behat tests for all SCORM settings (eg standards mode, mastery score settings etc) &lt;br /&gt;
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.&lt;br /&gt;
&lt;br /&gt;
Extra requirement for prospective students:&lt;br /&gt;
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=21591&amp;amp;course=5 Dan Marsden]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Grading in Forums ===&lt;br /&gt;
Finish the work required to add the advanced grading feature to the Moodle forum activity. This builds on some existing work available at MDL-31860&lt;br /&gt;
&lt;br /&gt;
Deliverables:&lt;br /&gt;
* Modify the forum grading so that it pushes 2 grade areas (or 3 including ratings) into the gradebook instead of a single grade.&lt;br /&gt;
* Improve interface that allows overall forum participation grading.&lt;br /&gt;
* Behat tests for all new functionality.&lt;br /&gt;
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.&lt;br /&gt;
&lt;br /&gt;
Extra requirement for prospective students:&lt;br /&gt;
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=21591&amp;amp;course=5 Dan Marsden]&lt;br /&gt;
&lt;br /&gt;
=== Add support to end-to-end testing in the Mobile app ===&lt;br /&gt;
&lt;br /&gt;
[https://angular.github.io/protractor/#/ Protractor] is an end-to-end test framework for AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.&lt;br /&gt;
&lt;br /&gt;
The basements for this project are done, see MOBILE-1179, the only remaining work is to add more tests to the app and document the set-up process in the Moodle developers wiki.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required: Javascript (AngularJS)&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor: [https://moodle.org/user/profile.php?id=49568 Juan Leyva]&lt;br /&gt;
&lt;br /&gt;
===Clef | Two-Factor Authentication===&lt;br /&gt;
Create [https://getclef.com Clef two factor authentication] plugin, so  a user can log in using their mobile to reduce login time. This will improve security and reduce  the login time for users.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, Javascript&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1328988 Rajesh Taneja]&lt;br /&gt;
&lt;br /&gt;
=== Multi-step login screen ===&lt;br /&gt;
Update the login screen to first ask for a username, and then the password as a two-step process.&lt;br /&gt;
See the login process for Google&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, JavaScript, Mustache&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1779959 John Okely]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2FA - Two Factor Authentication ===&lt;br /&gt;
Add support for Two-Factor Authentication. This would work well when combined with the Multi-step login screen.&lt;br /&gt;
Factors requiring consideration include the Mobile app integrations.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, JavaScript, Mustache&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols]&lt;br /&gt;
&lt;br /&gt;
=== CLI Helper for Moodle Developers ===&lt;br /&gt;
Possibly an addendum to MDK, a set of scripts to help facilitate various common tasks. In particular:&lt;br /&gt;
* creation of Persistent Objects including their Class files, the XMLDB code to create their tables, and the XMLDB upgrade scripts required to upgrade (including version bumps)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, Python?&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Hard&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols]&lt;br /&gt;
&lt;br /&gt;
=== Trait for Mock DB in unit tests ===&lt;br /&gt;
In moodle we run every unit test using a real database. This is extremely slow with little benefit. Granted it does catch some cross-database compatibility issues, but we don&#039;t need it for every test. We should add a trait that test classes can use that will automatically set up mock $DB to save processing power and unnecessary waiting for DB.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, PHPUnit&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Easy&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols] or [https://moodle.org/user/profile.php?id=1779959 John Okely]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[GSOC]] - describing Moodle&#039;s involvement with Google in their Summer of Code program&lt;br /&gt;
* [https://tracker.moodle.org/issues/?jql=type%20in%20%28%22New%20Feature%22%2C%20Improvement%29%20AND%20resolution%20%3D%20unresolved%20and%20labels%20in%20%28addon_candidate%29%20ORDER%20BY%20votes%20DESC Popular new feature and improvement requests in Tracker that can be implemented as plugins]&lt;br /&gt;
* [[Projects for new developers/Archive|Archive]] of outdated and/or inactive calls for projects&lt;br /&gt;
* [https://docs.moodle.org/dev/Moodle_Wishlist a Wishlist] by some Moodle users. Some of the good ideas here may be adopted.&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Projects_for_new_developers&amp;diff=51759</id>
		<title>Projects for new developers</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Projects_for_new_developers&amp;diff=51759"/>
		<updated>2017-01-24T04:34:12Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add Mock DB trait project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{GSOC}}&lt;br /&gt;
&lt;br /&gt;
==Getting started==&lt;br /&gt;
&lt;br /&gt;
Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.&lt;br /&gt;
&lt;br /&gt;
When you have some basic PHP programming skills, you may wish to start learning about how the Moodle code is organised. It is recommended that you complete the [http://dev.moodle.org/course/view.php?id=2 Introduction to Moodle Programming] course on [http://dev.moodle.org/ dev.moodle.org]. To access this you will need to have an account on moodle.org first.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are looking for projects suggested in the tracker, look for issues with the [https://tracker.moodle.org/issues/?jql=labels%20in%20%28addon_candidate%29 &#039;addon_candidate&#039; label].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are looking to make a quick contribution, look for tracker issues with marked as [https://tracker.moodle.org/issues/?jql=Difficulty%20%3D%20Easy easy].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please consider adopting a [https://moodle.org/plugins/browse.php?list=set&amp;amp;id=61 plugin seeking a new maintainer]&#039;&#039;. See the [https://moodle.org/mod/forum/discuss.php?d=260354 Plugins adoption programme].&lt;br /&gt;
&lt;br /&gt;
As you become more involved in Moodle development, you might like to learn more about the [[Coding|coding conventions]] used and how changes to Moodle core code are [[Process|processed]].&lt;br /&gt;
&lt;br /&gt;
==Potential projects==&lt;br /&gt;
&lt;br /&gt;
This evolving page lists possible Moodle projects for new developers derived from community suggestions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see [[New feature ideas]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Pusher integration for HTML5 push notifications ===&lt;br /&gt;
Moodle supports message output plugins. By adding a plugin for pusher.com and a Javascript service worker to listen for push notifications, we can have realtime HTML5 notifications on all platforms.&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: Javascript (JQuery, AMD), PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1337843 Damyon Wiese]&lt;br /&gt;
&lt;br /&gt;
=== Ability to crop/resize/rotate an image in atto ===&lt;br /&gt;
&lt;br /&gt;
Moodle comes with it&#039;s own HTML editor known as &#039;atto&#039; (see https://docs.moodle.org/dev/Atto). The editor functions similarly to other editors out there, like TinyMCE, but is tailored to Moodle. It comes with multiple plugins that allow users to perform tasks, such as changing the font size, the alignment, adding links etc. One of these plugins allows the user to add an image to the text editor with the ability to specify the size and alignment of the image via text input. The idea of this project is to extend and improve this current plugin so the user can crop/resize/rotate the image via JS - making the whole experience easier and more aesthetically pleasing.&lt;br /&gt;
&lt;br /&gt;
This project details/discussion can be located at MDL-52982.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: Javascript (YUI), PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/view.php?id=1057750 Mark Nelson]&lt;br /&gt;
&lt;br /&gt;
=== Improve Behat tests in SCORM plugin ===&lt;br /&gt;
The Moodle SCORM plugin does not contain very many behat tests and most tests are manual. The Claude Ostyn diagnostic SCO should be used to implement a range of new Behat tests to cover the functionality that the SCORM module provides.&lt;br /&gt;
&lt;br /&gt;
Deliverables:&lt;br /&gt;
* Behat tests for all existing SCORM QA tests (where possible)&lt;br /&gt;
* Behat tests for all SCORM settings (eg standards mode, mastery score settings etc) &lt;br /&gt;
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.&lt;br /&gt;
&lt;br /&gt;
Extra requirement for prospective students:&lt;br /&gt;
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=21591&amp;amp;course=5 Dan Marsden]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Grading in Forums ===&lt;br /&gt;
Finish the work required to add the advanced grading feature to the Moodle forum activity. This builds on some existing work available at MDL-31860&lt;br /&gt;
&lt;br /&gt;
Deliverables:&lt;br /&gt;
* Modify the forum grading so that it pushes 2 grade areas (or 3 including ratings) into the gradebook instead of a single grade.&lt;br /&gt;
* Improve interface that allows overall forum participation grading.&lt;br /&gt;
* Behat tests for all new functionality.&lt;br /&gt;
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.&lt;br /&gt;
&lt;br /&gt;
Extra requirement for prospective students:&lt;br /&gt;
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required&#039;&#039;&#039;: PHP&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [http://moodle.org/user/view.php?id=21591&amp;amp;course=5 Dan Marsden]&lt;br /&gt;
&lt;br /&gt;
=== Add support to end-to-end testing in the Mobile app ===&lt;br /&gt;
&lt;br /&gt;
[https://angular.github.io/protractor/#/ Protractor] is an end-to-end test framework for AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.&lt;br /&gt;
&lt;br /&gt;
The basements for this project are done, see MOBILE-1179, the only remaining work is to add more tests to the app and document the set-up process in the Moodle developers wiki.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required: Javascript (AngularJS)&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor: [https://moodle.org/user/profile.php?id=49568 Juan Leyva]&lt;br /&gt;
&lt;br /&gt;
===Clef | Two-Factor Authentication===&lt;br /&gt;
Create [https://getclef.com Clef two factor authentication] plugin, so  a user can log in using their mobile to reduce login time. This will improve security and reduce  the login time for users.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, Javascript&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1328988 Rajesh Taneja]&lt;br /&gt;
&lt;br /&gt;
=== Multi-step login screen ===&lt;br /&gt;
Update the login screen to first ask for a username, and then the password as a two-step process.&lt;br /&gt;
See the login process for Google&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, JavaScript, Mustache&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=1779959 John Okely]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2FA - Two Factor Authentication ===&lt;br /&gt;
Add support for Two-Factor Authentication. This would work well when combined with the Multi-step login screen.&lt;br /&gt;
Factors requiring consideration include the Mobile app integrations.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, JavaScript, Mustache&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Medium&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols]&lt;br /&gt;
&lt;br /&gt;
=== CLI Helper for Moodle Developers ===&lt;br /&gt;
Possibly an addendum to MDK, a set of scripts to help facilitate various common tasks. In particular:&lt;br /&gt;
* creation of Persistent Objects including their Class files, the XMLDB code to create their tables, and the XMLDB upgrade scripts required to upgrade (including version bumps)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, Python?&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Hard&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols]&lt;br /&gt;
&lt;br /&gt;
=== Trait for Mock DB in unit tests ===&lt;br /&gt;
In moodle we run every unit test using a real database. This is extremely slow with little benefit. Granted it does catch some cross-database compatibility issues, but we don&#039;t need it for every test. We should add a trait that test classes can use that will automatically set up mock $DB to save processing power and unnecessary waiting for DB.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Skills required:&#039;&#039;&#039; PHP, Python?&lt;br /&gt;
:&#039;&#039;&#039;Difficulty level&#039;&#039;&#039;: Hard&lt;br /&gt;
:&#039;&#039;&#039;Possible mentor&#039;&#039;&#039;: [https://moodle.org/user/profile.php?id=268794 Andrew Nicols] or [https://moodle.org/user/profile.php?id=1779959 John Okely]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[GSOC]] - describing Moodle&#039;s involvement with Google in their Summer of Code program&lt;br /&gt;
* [https://tracker.moodle.org/issues/?jql=type%20in%20%28%22New%20Feature%22%2C%20Improvement%29%20AND%20resolution%20%3D%20unresolved%20and%20labels%20in%20%28addon_candidate%29%20ORDER%20BY%20votes%20DESC Popular new feature and improvement requests in Tracker that can be implemented as plugins]&lt;br /&gt;
* [[Projects for new developers/Archive|Archive]] of outdated and/or inactive calls for projects&lt;br /&gt;
* [https://docs.moodle.org/dev/Moodle_Wishlist a Wishlist] by some Moodle users. Some of the good ideas here may be adopted.&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Content_Item&amp;diff=51241</id>
		<title>LTI Content Item</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Content_Item&amp;diff=51241"/>
		<updated>2016-11-30T02:07:12Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Completed project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = LTI Content-Item message&lt;br /&gt;
|state = Complete&lt;br /&gt;
|tracker = MDL-49609&lt;br /&gt;
|discussion = [https://moodle.org/mod/forum/discuss.php?d=293571 Support for LTI Content-Item message]&lt;br /&gt;
|assignee = [[User:Stephen Vickers|Stephen Vickers]], [[User:Jun Pataleta|Jun Pataleta]]&lt;br /&gt;
}}&lt;br /&gt;
==Project goal==&lt;br /&gt;
The goal of this project is to add support for the LTI Content-Item message as per the specification available from [http://www.imsglobal.org/lti/].&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This message type provides an improved workflow for teachers adding links to their courses, such that the configuration of the link by the tool provider can be included in the process.  This avoids the current two-step process of creating the link and then launching it to access any configuration options the tool provider has to offer.  It also means that students will not be presented with unconfigured links in their courses, because the link will not be created until after the configuration has occurred.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [http://www.imsglobal.org/specs/lticiv1p0-intro Introduction to LTI Content-Item Message 1.0 | IMS Global Learning Consortium]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Moodle_libraries_credits&amp;diff=51076</id>
		<title>Moodle libraries credits</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Moodle_libraries_credits&amp;diff=51076"/>
		<updated>2016-11-14T07:29:40Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add LTI Tool Provider Library for PHP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some of Moodle&#039;s libraries were written by other people, and are being redistributed as part of Moodle under their respective open source licenses that thankfully allow us to do so. Thanks to the authors of all these excellent products - without them Moodle would be missing important functionality. Copyright information for each package is included below:&lt;br /&gt;
&lt;br /&gt;
==ADOdb==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/adodb&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Database abstraction library for MySQL, PostgreSQL, MSSQL, Oracle, Interbase, Foxpro, Access, ADO, Sybase, DB2 and ODBC.&lt;br /&gt;
&lt;br /&gt;
Version: 5.19&lt;br /&gt;
&lt;br /&gt;
Copyright © 2000-2006 John Lim (&#039;&#039;jlim AT natsoft DOT com DOT my&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
License: Dual LGPL and BSD-style&lt;br /&gt;
&lt;br /&gt;
http://adodb.sourceforge.net&lt;br /&gt;
&lt;br /&gt;
==Amazon S3==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;repository/s3/S3.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A standalone Amazon S3 (REST) client for PHP 5.2.x using CURL that does not require PEAR. &lt;br /&gt;
&lt;br /&gt;
Version: 0.5.1&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2013, Donovan Schönknecht&lt;br /&gt;
&lt;br /&gt;
License: BSD 2-Clause&lt;br /&gt;
&lt;br /&gt;
https://github.com/tpyo/amazon-s3-php-class/releases&lt;br /&gt;
&lt;br /&gt;
==CAS==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;auth/cas/CAS&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
phpCAS library to support CAS authentication plugin&lt;br /&gt;
&lt;br /&gt;
Copyright Jasig&lt;br /&gt;
&lt;br /&gt;
License: Apache License 2.0&lt;br /&gt;
&lt;br /&gt;
https://wiki.jasig.org/display/CASC/phpCAS&lt;br /&gt;
&lt;br /&gt;
==EvalMath==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/evalmath&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to safely evaluate math expressions&lt;br /&gt;
&lt;br /&gt;
Copyright Miles Kaufmann&lt;br /&gt;
&lt;br /&gt;
License: BSD&lt;br /&gt;
&lt;br /&gt;
http://www.twmagic.com/&lt;br /&gt;
&lt;br /&gt;
==FLV player==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;filter/mediaplugin/flvplayer.swf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Flash movie to play FLV files&lt;br /&gt;
&lt;br /&gt;
Copyright Jeroen Wijering &lt;br /&gt;
&lt;br /&gt;
License: GNU GPL&lt;br /&gt;
&lt;br /&gt;
http://www.jeroenwijering.com&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==FPDF Class==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/fpdf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to generate PDF files&lt;br /&gt;
&lt;br /&gt;
Version: 1.54&lt;br /&gt;
&lt;br /&gt;
Copyright Olivier PLATHEY&lt;br /&gt;
&lt;br /&gt;
License: Freeware&lt;br /&gt;
&lt;br /&gt;
http://www.setasign.com/products/fpdi/downloads&lt;br /&gt;
&lt;br /&gt;
==GeoIP==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/geoip&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Library for precessing of GeoIP data files&lt;br /&gt;
&lt;br /&gt;
Version: 1.6&lt;br /&gt;
&lt;br /&gt;
Copyright MaxMind&lt;br /&gt;
&lt;br /&gt;
License: LGPL&lt;br /&gt;
&lt;br /&gt;
http://www.maxmind.com/app/php&lt;br /&gt;
&lt;br /&gt;
==Google APIs==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;lib/google&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Library Google APIs Client Library for PHP&lt;br /&gt;
&lt;br /&gt;
Version: 1.1.7&lt;br /&gt;
&lt;br /&gt;
License: Apache License Version 2.0&lt;br /&gt;
&lt;br /&gt;
https://github.com/google/google-api-php-client&lt;br /&gt;
&lt;br /&gt;
==Graph Class==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/graphlib.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to draw line, point, bar, and area graphs, including numeric x-axis and double y-axis.&lt;br /&gt;
&lt;br /&gt;
Version: 1.6.3 (with modifications)&lt;br /&gt;
&lt;br /&gt;
Copyright © 2000  Herman Veluwenkamp (&#039;&#039;hermanV AT mindless DOT com&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
License: LGPL&lt;br /&gt;
&lt;br /&gt;
==Horde==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/horde&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Library used by the inbound e-mail handling system.&lt;br /&gt;
&lt;br /&gt;
Version: 5.2.7&lt;br /&gt;
&lt;br /&gt;
Copyright © Horde LLC&lt;br /&gt;
&lt;br /&gt;
License: LGPL&lt;br /&gt;
&lt;br /&gt;
http://www.horde.org/&lt;br /&gt;
&lt;br /&gt;
==html2text==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/html2text&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PHP script to convert HTML into an approximate text equivalent&lt;br /&gt;
&lt;br /&gt;
Version: 4.0.1&lt;br /&gt;
&lt;br /&gt;
Copyright © 2005-7 Jon Abernathy&lt;br /&gt;
&lt;br /&gt;
License: GNU GPL&lt;br /&gt;
&lt;br /&gt;
https://github.com/mtibben/html2text.git&lt;br /&gt;
&lt;br /&gt;
==htmlArea==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/editor&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Javascript/HTML script to put a GUI editor in textareas on Internet Explorer and Mozilla&lt;br /&gt;
&lt;br /&gt;
Version: 3.0 beta (with modifications)&lt;br /&gt;
&lt;br /&gt;
Copyright © 2002  interactivetools.com, inc.&lt;br /&gt;
&lt;br /&gt;
License: htmlArea License (based on BSD license)&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==IP-Atlas==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/ipatlas&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PHP scripts to show the location of an IP address on a map.&lt;br /&gt;
&lt;br /&gt;
Version: 1.0 (with modifications)&lt;br /&gt;
&lt;br /&gt;
Copyright © 2002   Ivan Kozik&lt;br /&gt;
&lt;br /&gt;
License: GNU GPL&lt;br /&gt;
&lt;br /&gt;
http://www.xpenguin.com/ip-atlas.php&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==jQuery==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/jquery&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
jQuery is a fast, small, and feature-rich JavaScript library widely used on moodle.&lt;br /&gt;
&lt;br /&gt;
Version: 1.12.3&lt;br /&gt;
&lt;br /&gt;
Copyright: 2016 The jQuery Foundation&lt;br /&gt;
&lt;br /&gt;
License: MIT&lt;br /&gt;
&lt;br /&gt;
https://jquery.com&lt;br /&gt;
&lt;br /&gt;
==jQuery migrate==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/jquery/jquery-migrate-1.4.0.js&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Library used migrate older jQuery code to jQuery 3.0.&lt;br /&gt;
&lt;br /&gt;
Version: 1.4.0&lt;br /&gt;
&lt;br /&gt;
Copyright: 2016 The jQuery Foundation and other contributors&lt;br /&gt;
&lt;br /&gt;
License: MIT&lt;br /&gt;
&lt;br /&gt;
https://github.com/jquery/jquery-migrate&lt;br /&gt;
&lt;br /&gt;
==Services_JSON==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/json&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Allows PHP-&amp;gt;JS communication via JSON&lt;br /&gt;
&lt;br /&gt;
Version: 1.3.1&lt;br /&gt;
&lt;br /&gt;
Copyright © 2005 Michal Migurski&lt;br /&gt;
&lt;br /&gt;
License: Modified BSD (GPL-compatible)&lt;br /&gt;
&lt;br /&gt;
http://pear.php.net/pepr/pepr-proposal-show.php?id=198&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==kses==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/kses.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
HTML/XHTML filter that only allows some elements and attributes&lt;br /&gt;
&lt;br /&gt;
Version: 0.2.2&lt;br /&gt;
&lt;br /&gt;
Copyright © 2002, 2003, 2005   Ulf Harnhammar&lt;br /&gt;
&lt;br /&gt;
License: GNU GPL&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/kses&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==less.php==&lt;br /&gt;
&lt;br /&gt;
The less.php is a PHP port of the official LESS processor used by moodle themes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/lessphp&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Version: 1.7.0.10&lt;br /&gt;
&lt;br /&gt;
License: Apache 2.0&lt;br /&gt;
&lt;br /&gt;
http://lessphp.typesettercms.com/&lt;br /&gt;
&lt;br /&gt;
Copyright:  Matt Agar and Martin Jantošovič&lt;br /&gt;
==MathJax==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Not actually included in Moodle. Moodle instead has a setting where the mathjax library is located. It is currently pointing to CDN by default.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
JavaScript filter library for displaying LaTeX, AsciiMath notation, and MathML.&lt;br /&gt;
&lt;br /&gt;
Version 2.6&lt;br /&gt;
&lt;br /&gt;
© Copyright 2015 The MathJax Consortium.&lt;br /&gt;
&lt;br /&gt;
License: Apache V2.0&lt;br /&gt;
&lt;br /&gt;
https://github.com/mathjax/MathJax&lt;br /&gt;
&lt;br /&gt;
==mimeTeX==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;filter/tex&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Compiled C program to convert TeX into GIFs&lt;br /&gt;
&lt;br /&gt;
Version: 1.4&lt;br /&gt;
&lt;br /&gt;
Copyright © 2002-2004   John Forkosh Associates, Inc&lt;br /&gt;
&lt;br /&gt;
License: GNU GPL&lt;br /&gt;
&lt;br /&gt;
http://www.forkosh.com/mimetex.html&lt;br /&gt;
&lt;br /&gt;
==Mustache.js==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;lib/amd/src/mustache.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
JS library for displaying mustache templates.&lt;br /&gt;
&lt;br /&gt;
Version: 2.2.1&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2009 Chris Wanstrath (Ruby)&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2010-2014 Jan Lehnardt (JavaScript)&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2010-2015 The mustache.js community&lt;br /&gt;
&lt;br /&gt;
License: MIT&lt;br /&gt;
&lt;br /&gt;
https://github.com/janl/mustache.js/releases&lt;br /&gt;
&lt;br /&gt;
==Mustache==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;lib/mustache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
PHP library for displaying mustache templates.&lt;br /&gt;
&lt;br /&gt;
Version: 2.10.0&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2010-2015 Justin Hileman&lt;br /&gt;
&lt;br /&gt;
License: MIT&lt;br /&gt;
&lt;br /&gt;
https://github.com/bobthecow/mustache.php/releases&lt;br /&gt;
&lt;br /&gt;
==mp3player==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/mp3player&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Flash movie to play streaming MP3s&lt;br /&gt;
&lt;br /&gt;
Copyright © 2005   Andrew Walker&lt;br /&gt;
&lt;br /&gt;
License: GNU GPL&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==overlibmws==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/overlib.js&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Javascript library to enable DHTML popups, floating windows, events etc&lt;br /&gt;
&lt;br /&gt;
Version: July 2004&lt;br /&gt;
&lt;br /&gt;
Copyright © 2002-2004   Foteos Macrides&lt;br /&gt;
&lt;br /&gt;
Copyright © 1998-2004   Erik Bosrup&lt;br /&gt;
&lt;br /&gt;
License: Artistic Open Source License&lt;br /&gt;
&lt;br /&gt;
http://www.macridesweb.com/oltest/&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
== password_compat ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/password_compat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Provides forward compatibility with the password_* functions that ship with PHP 5.5.&lt;br /&gt;
&lt;br /&gt;
Copyright © 2012 Anthony Ferrara&lt;br /&gt;
&lt;br /&gt;
License: MIT License&lt;br /&gt;
&lt;br /&gt;
https://github.com/ircmaxell/password_compat&lt;br /&gt;
&lt;br /&gt;
==PclZip==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/pclzip&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to create, manage and unpack zip files.&lt;br /&gt;
&lt;br /&gt;
Version: 2.4 RC1&lt;br /&gt;
&lt;br /&gt;
Copyright © 2004  Vincent Blavet (&#039;&#039;vincent AT phpconcept DOT net&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
License: GNU GPL&lt;br /&gt;
&lt;br /&gt;
http://www.phpconcept.net&lt;br /&gt;
&lt;br /&gt;
==PEAR OLE Classes==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/pear&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to write Excel files&lt;br /&gt;
&lt;br /&gt;
Version: 0.5&lt;br /&gt;
&lt;br /&gt;
Copyright © 2004  Xavier Noguer&lt;br /&gt;
&lt;br /&gt;
License: PHP (plus special exemption for Moodle to make it compatible)&lt;br /&gt;
&lt;br /&gt;
http://pear.php.net/package/OLE&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==PEAR Spreadsheet_Excel_Writer==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/pear&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to write Excel files&lt;br /&gt;
&lt;br /&gt;
Version: 0.9.1&lt;br /&gt;
&lt;br /&gt;
Copyright © 2004  Xavier Noguer and Mika Tuupola&lt;br /&gt;
&lt;br /&gt;
License: LGPL&lt;br /&gt;
&lt;br /&gt;
http://pear.php.net/package/Spreadsheet_Excel_Writer&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==PEAR HTML_Quickform==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/pear&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to write forms&lt;br /&gt;
&lt;br /&gt;
Version: 3.2.6&lt;br /&gt;
&lt;br /&gt;
Copyright © 2004  Bertrand Mansion, Adam Daniel, Alexey Borzov&lt;br /&gt;
&lt;br /&gt;
License: PHP (plus special exemption for Moodle to make it compatible)&lt;br /&gt;
&lt;br /&gt;
http://pear.php.net/package/HTML_Quickform&lt;br /&gt;
&lt;br /&gt;
==PEAR HTML_Quickform_Renderer_Tableless==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/pear&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to render forms without tables&lt;br /&gt;
&lt;br /&gt;
Version: 0.3.4&lt;br /&gt;
&lt;br /&gt;
Copyright © 2005 Mark Wiesemann&lt;br /&gt;
&lt;br /&gt;
License: PHP (plus special exemption for Moodle to make it compatible)&lt;br /&gt;
&lt;br /&gt;
http://pear.php.net/package/HTML_Quickform_Renderer_Tableless&lt;br /&gt;
&lt;br /&gt;
==PEAR HTML_QuickForm_DHTMLRulesTableless==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/pear&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class to render validation notices with dhtml&lt;br /&gt;
&lt;br /&gt;
Version: 0.1.2&lt;br /&gt;
&lt;br /&gt;
Copyright © 2005 Alexey Borzov, Adam Daniel, Bertrand Mansion, Justin Patrin, Mark Wiesemann&lt;br /&gt;
&lt;br /&gt;
License: PHP (plus special exemption for Moodle to make it compatible)&lt;br /&gt;
&lt;br /&gt;
http://pear.php.net/package/HTML_QuickForm_DHTMLRulesTableless&lt;br /&gt;
&lt;br /&gt;
==PEAR HTML_Common==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/pear&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class with many common HTML functions (used by HTML Quickform)&lt;br /&gt;
&lt;br /&gt;
Version: 0.3.4&lt;br /&gt;
&lt;br /&gt;
Copyright © 2004  Adam Daniel, Bertrand Mansion, Klaus Guenther, Alexey Borzov&lt;br /&gt;
&lt;br /&gt;
License: PHP (plus special exemption for Moodle to make it compatible)&lt;br /&gt;
&lt;br /&gt;
http://pear.php.net/package/HTML_Common&lt;br /&gt;
&lt;br /&gt;
==PEAR XML_Parser==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/pear&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class implementing one handy (sax-expat) XML parser&lt;br /&gt;
&lt;br /&gt;
Version: 1.3.2&lt;br /&gt;
&lt;br /&gt;
Copyright © 2004-2008 The PHP Group &amp;amp; Stephan Schmidt&lt;br /&gt;
&lt;br /&gt;
License: New BSD License&lt;br /&gt;
&lt;br /&gt;
http://pear.php.net/package/XML_Parser&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==PHPExcel==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/phpexcel/PHPExcel.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Library to read, write and create spreadsheet documents in PHP.&lt;br /&gt;
&lt;br /&gt;
Version 1.8.1&lt;br /&gt;
&lt;br /&gt;
Copyright © 2006 - 2015 PHPExcel&lt;br /&gt;
License: LGPL&lt;br /&gt;
&lt;br /&gt;
https://github.com/PHPOffice/PHPExcel&lt;br /&gt;
&lt;br /&gt;
==PHP mailer==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/class.phpmailer.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class for sending email using either sendmail, PHP mail(), or SMTP.  Methods are based upon the standard AspEmail(tm) classes.&lt;br /&gt;
&lt;br /&gt;
Version 5.2.14&lt;br /&gt;
&lt;br /&gt;
Copyright © 2003 Brent R. Matzelle (&#039;&#039;bmatzelle AT yahoo DOT com&#039;&#039;)&lt;br /&gt;
License: LGPL&lt;br /&gt;
&lt;br /&gt;
http://phpmailer.sourceforge.net&lt;br /&gt;
https://github.com/PHPMailer/PHPMailer/releases&lt;br /&gt;
&lt;br /&gt;
==PHP Markdown==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/markdown.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Functions to convert from the Markdown text format into clean XHTML.&lt;br /&gt;
&lt;br /&gt;
Version: 1.6.0 (with modifications)&lt;br /&gt;
&lt;br /&gt;
PHP Markdown Lib Copyright © 2004-2015 Michel Fortin https://michelf.ca/&lt;br /&gt;
All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Based on Markdown&lt;br /&gt;
Copyright © 2003-2005 John Gruber https://daringfireball.net/&lt;br /&gt;
All rights reserved.&lt;br /&gt;
&lt;br /&gt;
License: BSD&lt;br /&gt;
&lt;br /&gt;
http://www.michelf.com/projects/php-markdown/&lt;br /&gt;
&lt;br /&gt;
==RequireJS==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;/lib/requirejs/&#039;&#039;	&lt;br /&gt;
&lt;br /&gt;
RequireJS is a JavaScript file and module loader.&lt;br /&gt;
&lt;br /&gt;
Version 2.1.22&lt;br /&gt;
&lt;br /&gt;
License: new BSD or MIT&lt;br /&gt;
&lt;br /&gt;
http://requirejs.org/&lt;br /&gt;
&lt;br /&gt;
==Snoopy==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/snoopy&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A PHP net client&lt;br /&gt;
&lt;br /&gt;
Version: 1.0&lt;br /&gt;
&lt;br /&gt;
Copyright © 1999-2000 Monte Ohrt (&#039;&#039;monte AT ispi DOT net&#039;&#039;)&lt;br /&gt;
License: GNU LGPL&lt;br /&gt;
&lt;br /&gt;
http://snoopy.sourceforge.com&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==SMTP class==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/class.smtp.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class that can be used to connect and communicate with any SMTP server. It implements all the SMTP functions defined in RFC821 except TURN.&lt;br /&gt;
&lt;br /&gt;
Version: 03/26/2001&lt;br /&gt;
&lt;br /&gt;
Copyright © 2001  Chris Ryan (&#039;&#039;chris AT greatbridge DOT com&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==Spike PHPCoverage==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/spikephpcoverage&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PHP code coverage reporting tool&lt;br /&gt;
&lt;br /&gt;
Version: 0.8.2 (with modifications)&lt;br /&gt;
&lt;br /&gt;
Copyright © 2004 SpikeSource Inc&lt;br /&gt;
&lt;br /&gt;
License: LGPL&lt;br /&gt;
&lt;br /&gt;
http://developer.spikesource.com/projects/phpcoverage&lt;br /&gt;
&lt;br /&gt;
(This library is not currently used in Moodle)&lt;br /&gt;
&lt;br /&gt;
==Typo3 Character Set Class==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/typo3&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class for conversion between charsets and multibyte-savy operations with strings.&lt;br /&gt;
&lt;br /&gt;
Version: 4.7.19&lt;br /&gt;
&lt;br /&gt;
Copyright © 2003-2005 Kasper Skaarhoj&lt;br /&gt;
&lt;br /&gt;
Licence: GNU GPL&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/&lt;br /&gt;
&lt;br /&gt;
==Yahoo User Interface==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;lib/yui&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Yahoo! User Interface Library is a set of utilities and controls, in JavaScript, for building richly interactive web applications using techniques such as DOM scripting, DHTML and AJAX. The YUI Library also includes several core CSS resources.Set of user-interface components using AJAX, DHTML etc.  We use it for all our AJAX-related stuff.&lt;br /&gt;
&lt;br /&gt;
CVS version: 2.3.0&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2006, Yahoo! Inc.&lt;br /&gt;
&lt;br /&gt;
Licence: BSD&lt;br /&gt;
&lt;br /&gt;
http://developer.yahoo.com/yui/&lt;br /&gt;
&lt;br /&gt;
==Mustache.js==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;lib/amd/src/mustache.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
JS library for displaying mustache templates.&lt;br /&gt;
&lt;br /&gt;
Version: 2.2.1&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2009 Chris Wanstrath (Ruby)&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2010-2014 Jan Lehnardt (JavaScript)&lt;br /&gt;
&lt;br /&gt;
Copyright (c) 2010-2015 The mustache.js community&lt;br /&gt;
&lt;br /&gt;
License: MIT&lt;br /&gt;
&lt;br /&gt;
https://github.com/janl/mustache.js/releases&lt;br /&gt;
&lt;br /&gt;
==LTI Tool Provider Library for PHP==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;lib/ltiprovider/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
PHP library for communicating with learning tools as per the LTI specification.&lt;br /&gt;
&lt;br /&gt;
Version: 3.0.2&lt;br /&gt;
&lt;br /&gt;
© 2016 IMS Global Learning Consortium Inc. All Rights Reserved. Trademark Policy - (www.imsglobal.org/trademarks)&lt;br /&gt;
&lt;br /&gt;
License: Apache 2&lt;br /&gt;
&lt;br /&gt;
https://github.com/IMSGlobal/LTI-Tool-Provider-Library-PHP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Credits]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Moodle_3.2_release_notes&amp;diff=51075</id>
		<title>Moodle 3.2 release notes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Moodle_3.2_release_notes&amp;diff=51075"/>
		<updated>2016-11-14T06:40:46Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add docs link for loginpage_idp_list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Releases]] &amp;gt; {{FULLPAGENAME}}&lt;br /&gt;
 &lt;br /&gt;
Release date: 28 November 2016 (not yet released)&lt;br /&gt;
&lt;br /&gt;
{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
Here is [https://tracker.moodle.org/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=project+%3D+mdl+AND+resolution+%3D+fixed+AND+fixVersion+in+%28%223.2%22%29+ORDER+BY+priority+DESC&amp;amp;runQuery=true&amp;amp;clear=true the full list of fixed issues in 3.2].&lt;br /&gt;
&lt;br /&gt;
==Server requirements==&lt;br /&gt;
&lt;br /&gt;
These are just the minimum supported versions. We recommend keeping all of your software up-to-date.&lt;br /&gt;
&lt;br /&gt;
* Moodle upgrade:  Moodle 2.7 or later (if upgrading from earlier versions, you must upgrade to 2.7.14 as a first step)&lt;br /&gt;
* PHP version: minimum PHP 5.6.5 (important! minimum PHP version has changed since Moodle 3.1). PHP 7.0 is supported but has some [https://docs.moodle.org/dev/Moodle_and_PHP7#Can_I_use_PHP7_yet.3F engine limitations]. PHP 7.1 will be supported when released.&lt;br /&gt;
&lt;br /&gt;
=== Database requirements ===&lt;br /&gt;
&lt;br /&gt;
Moodle supports the following database servers. Again, version numbers are just the minimum supported version. We recommend running the latest stable version of any software.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Database&lt;br /&gt;
! Minimum version&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]&lt;br /&gt;
| 9.1&lt;br /&gt;
| Latest&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mysql.com/ MySQL]&lt;br /&gt;
| 5.5.31&lt;br /&gt;
| Latest&lt;br /&gt;
|-&lt;br /&gt;
| [https://mariadb.org/ MariaDB]&lt;br /&gt;
| 5.5.31&lt;br /&gt;
| Latest&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.microsoft.com/en-us/server-cloud/products/sql-server/ Microsoft SQL Server]&lt;br /&gt;
| 2008&lt;br /&gt;
| Latest&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.oracle.com/us/products/database/overview/index.html Oracle Database]&lt;br /&gt;
| 10.2&lt;br /&gt;
| Latest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Client requirements==&lt;br /&gt;
&lt;br /&gt;
=== Browser support ===&lt;br /&gt;
Moodle is compatible with any standards compliant web browser. We regularly test Moodle with the following browsers:&lt;br /&gt;
&lt;br /&gt;
Desktop:&lt;br /&gt;
* Chrome&lt;br /&gt;
* Firefox&lt;br /&gt;
* Safari&lt;br /&gt;
* Edge&lt;br /&gt;
* Internet Explorer&lt;br /&gt;
&lt;br /&gt;
Mobile:&lt;br /&gt;
* MobileSafari&lt;br /&gt;
* Google Chrome&lt;br /&gt;
&lt;br /&gt;
For the best experience and optimum security, we recommend that you keep your browser up to date. https://whatbrowser.org&lt;br /&gt;
&lt;br /&gt;
Note: Legacy browsers with known compatibility issues with Moodle 3.2:&lt;br /&gt;
* Internet Explorer 10 and below&lt;br /&gt;
* Safari 7 and below&lt;br /&gt;
&lt;br /&gt;
==Major features==&lt;br /&gt;
&lt;br /&gt;
Coming soon.&lt;br /&gt;
&lt;br /&gt;
=== For developers ===&lt;br /&gt;
&lt;br /&gt;
* MDL-55071, MDL-55074 - New &amp;quot;Boost&amp;quot; Bootstrap 4 theme, block and navigation changes&lt;br /&gt;
* MDL-55727 - Create AMD modal module&lt;br /&gt;
* MDL-49599 - Deprecate old boxnet v1 API&lt;br /&gt;
* MDL-53306 - Add hook to be executed before user login in authentication plugins&lt;br /&gt;
* MDL-55048 - Upgrade grunt and npm dependencies (and add travis checks on node version variants)&lt;br /&gt;
* MDL-47162 - Add course id to message eventdata&lt;br /&gt;
* MDL-50937 - Update to JQuery 3.1&lt;br /&gt;
* MDL-48114 - Add Meta-Information to composer.json&lt;br /&gt;
* MDL-54987 - Introduce a new chart API and library ([https://docs.moodle.org/dev/Charts_API documentation])&lt;br /&gt;
* MDL-52127 - Linting for Javascript with ESLint&lt;br /&gt;
* MDL-55058 - Linting for CSS with stylelint&lt;br /&gt;
* MDL-55072 - Upgrades to Behat so it can work with different themes&lt;br /&gt;
* MDL-55141 - Add debugging option when running scheduled tasks from CLI&lt;br /&gt;
* MDL-31243 - Refactor similar SQL generation code from get_users_by_capability &amp;amp; get_enrolled_uses to make get_with_capability_sql&lt;br /&gt;
* MDL-54941 - Add filesize as a new field returned in all the Web Services returning file information&lt;br /&gt;
* MDL-55091 - Upgrade phpunit to 5.x&lt;br /&gt;
* MDL-56082 - Expose external authentication methods (loginpage_idp_list) in login block ([https://docs.moodle.org/dev/Authentication_plugins#loginpage_idp_list.28.29 documentation])&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Moodle 3.1 release notes]]&lt;br /&gt;
 &lt;br /&gt;
[[Category:Release notes]]&lt;br /&gt;
[[Category:Moodle 3.2]]&lt;br /&gt;
 &lt;br /&gt;
[[fr:Notes de mise à jour de Moodle 3.2]]&lt;br /&gt;
[[es:Notas de Moodle 3.2]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Authentication_plugins&amp;diff=51074</id>
		<title>Authentication plugins</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Authentication_plugins&amp;diff=51074"/>
		<updated>2016-11-14T06:39:37Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Document loginpage_idp_list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
This page first gives an &#039;&#039;&#039;overview&#039;&#039;&#039; of the &#039;&#039;authentication process&#039;&#039; and then explains how &#039;&#039;authentication modules&#039;&#039; can be &#039;&#039;&#039;created&#039;&#039;&#039; using hooks to take over from the native authentication in Moodle.&lt;br /&gt;
=== Overview of Moodle authentication process ===&lt;br /&gt;
[[File:1.9.11_login_element.png|203px||thumb|right|The login UI element in Moodle 1.9]]The authentication use case in Moodle starts when a user clicks on the Login link in the UI or if they try to access a protected page. There are two broad classes of authentication plugins, the regular type where moodle handles the password and ones where the password is handled by a 3rd party page eg SAML, OpenID etc.&lt;br /&gt;
&lt;br /&gt;
For the regular plugins the following happens (skipping some minor details and rarer scenarios):&lt;br /&gt;
&lt;br /&gt;
# The default login page (&amp;lt;tt&amp;gt;/login/index.php&amp;lt;/tt&amp;gt;) is displayed. OR, if a system administrator has set the Alternate Login URL on the &amp;quot;Manage authentication&amp;quot; page, that URL will be displayed.&lt;br /&gt;
# A user enters their credentials and submits the form.&lt;br /&gt;
# The handler code in &amp;lt;tt&amp;gt;/login/index.php&amp;lt;/tt&amp;gt; runs:&lt;br /&gt;
## Gets a list of enabled authentication plugins.&lt;br /&gt;
## Runs &amp;lt;tt&amp;gt;loginpage_hook()&amp;lt;/tt&amp;gt; for each plugin, in case any of them needs to intercept the login request.&lt;br /&gt;
## Checks to make sure that the username meets Moodle&#039;s criteria (alphanumeric, with periods and hyphens allowed).&lt;br /&gt;
## Calls &amp;lt;tt&amp;gt;authenticate_user_login()&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;/lib/moodlelib.php&amp;lt;/tt&amp;gt;, which returns a &amp;lt;code&amp;gt;$user&amp;lt;/code&amp;gt; object. (Details of this code follow this main outline.)&lt;br /&gt;
## Determines whether authentication was successful (by checking whether &amp;lt;code&amp;gt;$user&amp;lt;/code&amp;gt; is a valid object) and, if not, sends them back to the login page with an error message. Otherwise, it figures out where to send the user based on their original page request, whether their password is expired, etc., and redirects them there.&lt;br /&gt;
&lt;br /&gt;
For the 3rd party auth plugins the process could look like this (eg CAS, SAML, OpenID etc):&lt;br /&gt;
# Access a protected page but isn&#039;t logged in, so moodle calls &amp;lt;tt&amp;gt;pre_loginpage_hook()&amp;lt;/tt&amp;gt; on each enabled plugin, which may redirect to the 3rd party login page&lt;br /&gt;
# Or if they go directly to the login page moodle calls &amp;lt;tt&amp;gt;loginpage_hook()&amp;lt;/tt&amp;gt; on each enabled plugin, which may redirect to the 3rd party login page&lt;br /&gt;
# The user enters their credentials and authenticates on the 3rd party page&lt;br /&gt;
# The remote authentication service redirects back to moodle with an assertion, such as a single use token or encrypted response in a query param&lt;br /&gt;
# The auth plugin now validates the token or decrypts the assertion, does any other checking as required and then logs the user in using &amp;lt;tt&amp;gt;complete_user_login($user)&amp;lt;/tt&amp;gt;. If this happens inside &amp;lt;tt&amp;gt;pre_loginpage_hook()&amp;lt;/tt&amp;gt; then the user continues on their way, or if inside &amp;lt;tt&amp;gt;loginpage_hook()&amp;lt;/tt&amp;gt; or another custom page then the plugin should redirect to the wantsurl.&lt;br /&gt;
&lt;br /&gt;
Note that in this scenario above &amp;lt;tt&amp;gt;user_login($username, $password)&amp;lt;/tt&amp;gt; is never called and should probably return false.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
Authentication plugins exist from 1.9&lt;br /&gt;
==Example==&lt;br /&gt;
[http://moodle.org/plugins/view.php?plugin=auth_googleoauth2 Google / Facebook / Messenger Oauth2 Authentication plugin]&lt;br /&gt;
&lt;br /&gt;
==Template==&lt;br /&gt;
Please see Moodle &#039;&#039;&#039;none&#039;&#039;&#039; authentication plugin (auth/none), it&#039;s the perfect plugin template to start with.&lt;br /&gt;
&lt;br /&gt;
==Naming convention==&lt;br /&gt;
==File structure==&lt;br /&gt;
# Choose a name for your plugin.  We&#039;ll use &#039;sentry&#039; as an example below; change it to whatever name you have chosen.&lt;br /&gt;
# Under your Moodle installation root, create the directory &amp;lt;tt&amp;gt;/auth/sentry&amp;lt;/tt&amp;gt;.  It should be sibling to existing auth plugin directories: &#039;db&#039;, &#039;nologin&#039;, &#039;none&#039;, etc.&lt;br /&gt;
# Create the file &amp;lt;tt&amp;gt;/auth/sentry/auth.php&amp;lt;/tt&amp;gt;.  Within the file, create a class &amp;lt;tt&amp;gt;auth_plugin_sentry&amp;lt;/tt&amp;gt; that extends &amp;lt;tt&amp;gt;auth_plugin_base&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;/lib/authlib.php&amp;lt;/tt&amp;gt;.  (You will need to &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt; the authlib file.)&lt;br /&gt;
# Implement the &amp;lt;tt&amp;gt;user_login()&amp;lt;/tt&amp;gt; function in your &amp;lt;tt&amp;gt;auth.php&amp;lt;/tt&amp;gt; file, and create or override additional functions based on your plugin&#039;s requirements.&lt;br /&gt;
# Log in to your Moodle installation as a site administrator and find, in the site administrator block, the page &amp;quot;Users -&amp;gt; Authentication -&amp;gt; Manage authentication&amp;quot;.  You will see your plugin in the list, appearing as &amp;lt;nowiki&amp;gt;[[auth_sentrytitle]]&amp;lt;/nowiki&amp;gt;.  You can enable it and move it up and down in the order.  &#039;&#039;&#039;At this point, with the plugin enabled, your plugin is registered and will be used by Moodle in its authentication process.&#039;&#039;&#039;&lt;br /&gt;
# If you don&#039;t like seeing &amp;lt;nowiki&amp;gt;[[auth_sentrytitle]]&amp;lt;/nowiki&amp;gt; as the name of your plugin in the Moodle UI, you&#039;ll need to create language files for your plugin.  Do this by creating the directory &amp;lt;tt&amp;gt;/auth/sentry/lang&amp;lt;/tt&amp;gt;, and under it, a directory for each language that your installation needs to support.  (Example: &amp;lt;tt&amp;gt;/auth/sentry/lang/en&amp;lt;/tt&amp;gt;.)  Within each of these language directories, create a file called &amp;lt;tt&amp;gt;auth_sentry.php&amp;lt;/tt&amp;gt;.  That file should set the desired value for &amp;lt;code&amp;gt;$string[&#039;auth_sentrytitle&#039;] for that language (use $string[&#039;pluginname&#039;] for Moodle2)&amp;lt;/code&amp;gt;.  You can also set the plugin description by setting &amp;lt;code&amp;gt;$string[&#039;auth_sentrydescription&#039;]&amp;lt;/code&amp;gt;, and you can also assign other translatable strings that your plugin uses, in these files.  &#039;&#039;&#039;Note:&#039;&#039;&#039; A folder named like &#039;&#039;&#039;en&#039;&#039;&#039; may not work for everyone. Please refer to the lang folder under your moodle installation directory to get an idea about the language/locale codes used in your moodle installation. For example, the lang folder in own users system contained folders named &#039;&#039;&#039;en&#039;&#039;&#039; and &#039;&#039;&#039;zh-cn&#039;&#039;&#039;. He emulated the same in the lang folder of the auth plugin and the plugin picked up the title and description strings immediately. ([[Places_to_search_for_lang_strings|More info on how Moodle handles language]]).&lt;br /&gt;
# If you want to configure your plugin through the Moodle UI, implement &amp;lt;tt&amp;gt;config_form()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;process_config()&amp;lt;/tt&amp;gt; in the plugin class.  You might find it convenient to use the &#039;db&#039; plugin as a model for this.  The plugin&#039;s config settings can then be managed through the Manage authentication page by clicking on the Settings link for that plugin, and the values will be stored in the &amp;lt;tt&amp;gt;mdl_config_plugins&amp;lt;/tt&amp;gt; table in the database.&lt;br /&gt;
&lt;br /&gt;
==Interfacing to API&#039;s==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;authenticate_user_login()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
That&#039;s the main outline, but a lot of interesting stuff happens in &amp;lt;tt&amp;gt;authenticate_user_login()&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# It gets a list of enabled authentication plugins.&lt;br /&gt;
# It looks up the username in the mdl_user table to see if they are allowed to log in, and which authentication plugin handles their login requests. (This will be the plugin that handled their first-ever login request.)&lt;br /&gt;
# It creates a user object, which will contain the data from &amp;lt;tt&amp;gt;mdl_user&amp;lt;/tt&amp;gt; if the username is known; if not, it will be an empty object.&lt;br /&gt;
# It does the following with the authentication plugin (note that for a username unknown to Moodle, it will do these steps for each authenticated plugin until one succeeds or it has tried them all):&lt;br /&gt;
## Calls the &amp;lt;tt&amp;gt;user_login()&amp;lt;/tt&amp;gt; function provided by that plugin, which returns a boolean value based on whether the credentials authenticate or not. If the result is false (not authenticated), skips the rest of the steps below and continues to the next plugin.&lt;br /&gt;
## If the plugin authenticates against an external system (not Moodle&#039;s user database), its &amp;lt;tt&amp;gt;update_user_record()&amp;lt;/tt&amp;gt; function is called to get the user&#039;s name, contact info, etc.&lt;br /&gt;
## Creates the Moodle user record if it doesn&#039;t already exist.&lt;br /&gt;
## Calls the plugin&#039;s &amp;lt;tt&amp;gt;sync_roles()&amp;lt;/tt&amp;gt; function.&lt;br /&gt;
## Notifies each enabled authentication plugin that the user successfully authenticated, by calling each one&#039;s &amp;lt;tt&amp;gt;user_authenticated_hook()&amp;lt;/tt&amp;gt; function.&lt;br /&gt;
# It returns the user object if everything was successful, or false if no plugin was able to successfully authenticate the credentials.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;user_login($username, $password)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
This must be rewritten by plugin to return boolean value, returns true if the username and password work and false if they are wrong or don&#039;t exist.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;can_change_password()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns true if this authentication plugin can change users&#039; password.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Return type&#039;&#039;&#039; : boolean&lt;br /&gt;
; &#039;&#039;&#039;Default return value&#039;&#039;&#039; : false&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;change_password_url()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns the URL for changing the users&#039; passwords, or empty if the default URL can be used.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;can_edit_profile()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns true if this authentication plugin can edit the users&#039; profile.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Return type&#039;&#039;&#039; : boolean&lt;br /&gt;
; &#039;&#039;&#039;Default return value&#039;&#039;&#039; : true&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;edit_profile_url()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns the URL for editing users&#039; profile, or empty if the defaults URL can be used.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;is_internal()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns true if this authentication plugin is &amp;quot;internal&amp;quot;.  Internal plugins use password hashes from Moodle user table for authentication.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Return type&#039;&#039;&#039; : boolean&lt;br /&gt;
; &#039;&#039;&#039;Default return value&#039;&#039;&#039; : true&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;prevent_local_passwords()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Indicates if password hashes should be stored in local moodle database.  This function automatically returns the opposite boolean of what is_internal() returns.  Returning true means MD5 password hashes will be stored in the user table.  Returning false means flag &#039;not_cached&#039; will be stored there instead.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Return type&#039;&#039;&#039; : boolean&lt;br /&gt;
; &#039;&#039;&#039;Default return value&#039;&#039;&#039; : !$this-&amp;gt;is_internal()&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;is_synchronised_with_external()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Indicates if moodle should automatically update internal user records with data from external sources using the information from get_userinfo() method.  This function automatically returns the opposite boolean of what is_internal() returns.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Return type&#039;&#039;&#039; : boolean&lt;br /&gt;
; &#039;&#039;&#039;Default return value&#039;&#039;&#039; : !$this-&amp;gt;is_internal()&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;user_update_password($user, $newpassword)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Update the user&#039;s password.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;user_update($olduser, $newuser)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Called when the user record is updated. It will modify the user information in external database.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;user_delete($olduser)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
User delete requested. Internal user record had been deleted.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;can_reset_password()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns true if plugin allows resetting of internal password.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Return type&#039;&#039;&#039; : boolean&lt;br /&gt;
; &#039;&#039;&#039;Default return value&#039;&#039;&#039; : false&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;can_signup()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns true if plugin allows resetting of internal password.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Return type&#039;&#039;&#039; : boolean&lt;br /&gt;
; &#039;&#039;&#039;Default return value&#039;&#039;&#039; : false&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;user_signup($user, $notify=true)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Sign up a new user ready for confirmation, password is passed in plaintext.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;can_confirm()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns true if plugin allows confirming of new users.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;Return type&#039;&#039;&#039; : boolean&lt;br /&gt;
; &#039;&#039;&#039;Default return value&#039;&#039;&#039; : false&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;user_confirm($username, $confirmsecret)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Confirm the new user as registered.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;user_exists($username)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Checks if user exists in external db.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;password_expire($username)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Returns number of days to user password expires.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;sync_roles()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Sync roles for this user - usually creator&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;get_userinfo($username)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Read user information from external database and returns it as array.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;config_form($config, $err, $user_fields)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Prints a form for configuring this authentication plugin. It&#039;s called from admin/auth.php, and outputs a full page with a form for configuring this plugin.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;validate_form($form, $err)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Validate form data.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;process_config($config)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Processes and stores configuration data for this authentication plugin.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;loginpage_hook()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Hook for overriding behaviour of login page.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;pre_loginpage_hook()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Hook for overriding behaviour of prior to redirecting to the login page, eg redirecting to an external login url for SAML or OpenID authentication. If you implement this you should also implement loginpage_hook as the user may go directly to the login page.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;user_authenticated_hook($user, $username, $password)&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Post authentication hook. This method is called from authenticate_user_login() for all enabled auth plugins.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;prelogout_hook()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Pre logout hook.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;postlogout_hook()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
This method replace the prelogout_hook method to avoid authentication plugins redirects before the user logout event being triggered. &lt;br /&gt;
At the moment the only authentication plugin using this method is CAS (SSO).&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;logoutpage_hook()&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Hook for overriding behaviour of logout page.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;can_be_manually_set()&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
This function was introduced in the base class and returns false by default. If overriden by an authentication plugin to return true, the authentication plugin will be able to be manually set for users. For example, when bulk uploading users you will be able to select it as the authentication method they use.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt; loginpage_idp_list() &amp;lt;/tt&amp;gt; ===&lt;br /&gt;
Override this method and return a list of Identification Providers (IDPs) that your authentication plugin supports. An array of associative arrays containing url, icon and name for the IDP. These will be displayed on the login page and in the login block.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Authentication API]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=102070 Overview of entire authentication code flow] forum discussion&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=42 User authentication forum]&lt;br /&gt;
* Moodle Docs [[:en:Manage authentication|Manage authentication]]&lt;br /&gt;
* [[:en:Authentication FAQ|Authentication FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Authentication]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[fr:Méthodes_d&#039;authentification]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=51063</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=51063"/>
		<updated>2016-11-12T03:06:09Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress at end of project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Upgrade enrol_lti to support LTI v2.0&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Ensure enrol_lti member syncronisation task works as expected&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Content Item support (consumer)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* &amp;lt;strike&amp;gt;Run the LTI Test suite against Moodle (consumer + provider)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools (teacher&#039;s interface)&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item is released&lt;br /&gt;
* MDL-53832 Provider LTI 2 is released&lt;br /&gt;
* MDL-55825 Memberships is released&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=51062</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=51062"/>
		<updated>2016-11-12T02:42:09Z</updated>

		<summary type="html">&lt;p&gt;Johnok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Upgrade enrol_lti to support LTI v2.0&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Ensure enrol_lti member syncronisation task works as expected&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Content Item support (consumer)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* &amp;lt;strike&amp;gt;Run the LTI Test suite against Moodle (consumer + provider)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools (teacher&#039;s interface)&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item is released&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Patch completed. Currently in integration review.&lt;br /&gt;
* MDL-55825 Memberships patch has been created and will be reviewed&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=51061</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=51061"/>
		<updated>2016-11-12T02:31:55Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Update after end of project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Upgrade enrol_lti to support LTI v2.0&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Ensure enrol_lti member syncronisation task works as expected&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Content Item support (consumer)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* &amp;lt;strike&amp;gt;Run the LTI Test suite against Moodle (consumer + provider)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item is released&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Patch completed. Currently in integration review.&lt;br /&gt;
* MDL-55825 Memberships patch has been created and will be reviewed&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50977</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50977"/>
		<updated>2016-10-12T07:02:33Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 12/10/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* &amp;lt;strike&amp;gt;Content Item support (consumer)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item is released&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Patch completed. Currently in integration review.&lt;br /&gt;
* MDL-55825 Memberships patch has been created and will be reviewed&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50956</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50956"/>
		<updated>2016-09-30T05:55:39Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 30/09/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* &amp;lt;strike&amp;gt;Content Item support (consumer)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item is released&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Patch completed. Waiting for integration review.&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50955</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50955"/>
		<updated>2016-09-30T05:55:14Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Overview update 30/09/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* &amp;lt;strike&amp;gt;Content Item support (consumer)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. Addressing some integration review points&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Patch completed. Waiting for integration review.&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50945</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50945"/>
		<updated>2016-09-23T08:22:30Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 23/09/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. Addressing some integration review points&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Patch completed. Waiting for integration review.&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50899</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50899"/>
		<updated>2016-09-13T08:51:42Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 13/09/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. Addressing some integration review points&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Need to unit test and &lt;br /&gt;
** Proxies &amp;amp; Tool Profiles, launch requests (including LTI1 style) are working. Data persistence logic finished. Additional logic to cover multiple shared tools with library has been added&lt;br /&gt;
** All that remains is cross reviewing of some code and increasing unit test coverage.&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50848</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50848"/>
		<updated>2016-09-08T07:51:05Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 0809/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. Peer reviewed and addressing concerns.&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Need to unit test and &lt;br /&gt;
** Proxies &amp;amp; Tool Profiles, launch requests (including LTI1 style) are working. Data persistence logic finished.&lt;br /&gt;
** We are currently finishing implementing the library to achieve all LTI2 requirements and matching functionality from old library&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50838</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50838"/>
		<updated>2016-09-07T01:43:15Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 7/09/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. In peer review after UX review and new language strings&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2.&lt;br /&gt;
** Proxies &amp;amp; Tool Profiles, launch requests (including LTI1 style) are working. Data persistence logic finished.&lt;br /&gt;
** We are currently finishing implementing the library to achieve all LTI2 requirements and matching functionality from old library&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50832</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50832"/>
		<updated>2016-09-02T06:40:10Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Fix formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* &amp;lt;strike&amp;gt;Offer cartridges in LTI provider&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. In peer review. Just waiting for language string approval.&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2.&lt;br /&gt;
** Proxies are working.&lt;br /&gt;
** Launch requests are working.&lt;br /&gt;
** LTI1 launches are working&lt;br /&gt;
** Finishing implementing the library to achieve all LTI2 requirements&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50830</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50830"/>
		<updated>2016-09-01T09:30:53Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 01/09/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* -Offer cartridges in LTI provider-&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges is released&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. In peer review. Just waiting for language string approval.&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2.&lt;br /&gt;
** Proxies are working.&lt;br /&gt;
** Launch requests are working.&lt;br /&gt;
** LTI1 launches are working&lt;br /&gt;
** Finishing implementing the library to achieve all LTI2 requirements&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50829</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50829"/>
		<updated>2016-09-01T09:29:25Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Update improvements 1/09/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* -Offer cartridges in LTI provider-&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges patch is completed. Waiting for testing.&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. In peer review.&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2.&lt;br /&gt;
** Proxies are working.&lt;br /&gt;
** Launch requests are working.&lt;br /&gt;
** LTI1 launches are being added.&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50790</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50790"/>
		<updated>2016-08-16T08:15:07Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 16/08/2106&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges patch is completed. Waiting for testing.&lt;br /&gt;
* MDL-49609 Content-Item patch is completed. In peer review.&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2.&lt;br /&gt;
** Proxies are working.&lt;br /&gt;
** Launch requests are working.&lt;br /&gt;
** LTI1 launches are being added.&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch is being finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50775</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50775"/>
		<updated>2016-08-12T08:07:46Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 12/08/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges patch is completed, waiting for integration review&lt;br /&gt;
* MDL-49609 Content-Item patch finished. Waiting for peer review.&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Proxies are working. Launch requests are working. More LTI 2 features will be added next.&lt;br /&gt;
* MDL-54548 Membership synchronisation is being looked at in conjunction with LTI2&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch will be finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50758</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50758"/>
		<updated>2016-08-10T07:06:41Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update 10/08/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges patch is completed, waiting for integration review&lt;br /&gt;
* MDL-49609 Content-Item patch finished. Waiting for peer review.&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Proxies are working. More LTI 2 features will be added next.&lt;br /&gt;
* MDL-54548 Membership synchronisation is being looked at in conjunction with LTI2&lt;br /&gt;
* MDL-51480 Outcomes 2 patch for the provider has been created. The patch will be finished, with refactoring and testing added if needed.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50754</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50754"/>
		<updated>2016-08-08T03:21:13Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Update progress 08/08/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* MDL-54680 Cartridges patch is completed, waiting for integration review&lt;br /&gt;
* MDL-49609 A Content-Item patch was started by Stephen Vickers. The patch has been altered and refactored. Working on automated testing now&lt;br /&gt;
* MDL-53832 A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2. Proxies are working. More LTI 2 features will be added next.&lt;br /&gt;
* MDL-55457 A bug was found in moodle&#039;s consumer that means moodle will not work with the new LTI2 provider or similar tools. It will be fixed in stables ASAP so moodle 3.2 provided tools will work out of the box with older versions of moodle.&lt;br /&gt;
* MDL-54548 Membership synchronisation is being looked at in conjunction with LTI2&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50753</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50753"/>
		<updated>2016-08-08T03:17:39Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add Prototype info to table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
|prototype = http://prototype.moodle.net/lti/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* Cartridges patch is completed, waiting for integration review&lt;br /&gt;
* A Content-Item patch was started by Stephen Vickers. The patch has been altered and refactored. Working on automated testing now&lt;br /&gt;
* A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2.&lt;br /&gt;
* Membership synchronisation is being looked at in conjunction with LTI2&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50752</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50752"/>
		<updated>2016-08-08T03:14:59Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=335775&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The Learning Tools Interoperability (LTI) provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standards, and as such are missing important functionality, therefore they need usability improvements. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are a range of issues that have been identified and are being worked on for Moodle 3.2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* Cartridges patch is completed, waiting for integration review&lt;br /&gt;
* A Content-Item patch was started by Stephen Vickers. The patch has been altered and refactored. Working on automated testing now&lt;br /&gt;
* A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2.&lt;br /&gt;
* Membership synchronisation is being looked at in conjunction with LTI2&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50748</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50748"/>
		<updated>2016-08-04T05:27:58Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Progress update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=xxx&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The LTI provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standard, are missing important functionality and need usability improvements. A range of issues have been identified and are being worked on for Moodle 3.2.&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* Cartridges patch is completed, waiting for integration review&lt;br /&gt;
* A Content-Item patch was started by Stephen Vickers. The patch has been altered and refactored. Working on automated testing now&lt;br /&gt;
* A patch has been created using the new LTI library provided by IMS to bring the provider up to LTI 2.&lt;br /&gt;
* Membership synchronisation is being looked at in conjunction with LTI2&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Tree&amp;diff=50747</id>
		<title>Tree</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Tree&amp;diff=50747"/>
		<updated>2016-08-03T05:56:58Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Fix recommended CSS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 3.1}}The javascript Tree is designed to allow you to create an interactive tree that is accessible, intuitively usable, and consistent with the rest of Moodle&#039;s hierarchical interfaces. It is currently used in the Navigation block and Settings block.&lt;br /&gt;
&lt;br /&gt;
The tree is originally based off the [http://oaa-accessibility.org/examplep/treeview1/ tree view example] by the Open Ajax Alliance Accessibility Group. and is designed to comply as much as possible with the [http://www.w3.org/WAI/GL/wiki/Using_ARIA_trees ARIA specification for accessible trees]. For detailed additional information you can read those links.&lt;br /&gt;
&lt;br /&gt;
[[File:TreeExampleNavigation.png|thumb|center|450px|An example use of the tree module]]&lt;br /&gt;
&lt;br /&gt;
== Using the Tree module ==&lt;br /&gt;
&lt;br /&gt;
To create an aria accessible tree, you must instantiate a child AMD module of the core/tree using Require JS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
define([&#039;jquery&#039;, &#039;core/tree&#039;], function($, Tree) {&lt;br /&gt;
    return {&lt;br /&gt;
        init: function() {&lt;br /&gt;
            new Tree(&amp;quot;css/jquery selector of the tree container&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To define a node in your structure, add the &amp;quot;treeitem&amp;quot; role. If the node has children, it must have a child html element with the role &amp;quot;group&amp;quot; to contain it&#039;s children.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;div role=&amp;quot;treeitem&amp;quot;&amp;gt;This is an item which has children&lt;br /&gt;
    &amp;lt;div role=&amp;quot;group&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div role=&amp;quot;treeitem&amp;quot;&amp;gt;A child&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div role=&amp;quot;treeitem&amp;quot;&amp;gt;Another child&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the CSS for your page or module, you will need to target the aria-expanded attribute of group items to hide and show them as tree.js does not assume knowledge of how you want expanding and collapsing to work. For most cases, this will be sufficient:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
[aria-expanded=&amp;quot;false&amp;quot;] &amp;gt; [role=&amp;quot;group&amp;quot;] {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tree.js will handle the accessible controls for navigating the tree as well as expanding and collapsing nodes. The controls are as follows:&lt;br /&gt;
* Up: Select the previous visible tree item.&lt;br /&gt;
* Down: Select next visible tree item.&lt;br /&gt;
* Left: Collapse the currently selected parent node if it is expanded. Move to the previous parent node (if possible) when the current parent node is collapsed.&lt;br /&gt;
* Right: Expand the currently selected parent node and move to the first child list item.&lt;br /&gt;
* Enter: Toggle the expanded or collapsed state of the selected parent node. If it is a link, follow the link&lt;br /&gt;
* Home: Select the root parent node of the tree.&lt;br /&gt;
* End: Select the last visible node of the tree.&lt;br /&gt;
* Tab: Navigate away from tree.&lt;br /&gt;
* Space: Expand and collapse node&lt;br /&gt;
* * (asterisk on the numpad): Expand all group nodes.&lt;br /&gt;
* Clicking on a parent node will toggle its expanded or collapsed state.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
* Code location: lib/amd/src/tree.js&lt;br /&gt;
* Examples:&lt;br /&gt;
** blocks/navigation/amd/src/navblock.js&lt;br /&gt;
** blocks/settings/amd/src/settingsblock.js&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Javascript Modules]]&lt;br /&gt;
* [[Useful core Javascript modules]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Javascript]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50718</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50718"/>
		<updated>2016-07-29T08:43:02Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Content item is up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=xxx&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The LTI provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standard, are missing important functionality and need usability improvements. A range of issues have been identified and are being worked on for Moodle 3.2.&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* Cartridges patch is completed, waiting for peer review&lt;br /&gt;
* A Content-Item patch was started by Stephen Vickers. We are working on completing the patch.&lt;br /&gt;
* Upgrading enrol_lti to support LTI v2.0 has a proof of concept for offering proxies. We are currently looking into using a new library offered by IMS, seeing if it&#039;s appropriate for what we need.&lt;br /&gt;
* Membership synchronisation is being looked at in conjunction with LTI2&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. You can configure a tool type when you add it using Content-item&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50687</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50687"/>
		<updated>2016-07-28T04:05:13Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Add Prototype info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=xxx&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The LTI provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standard, are missing important functionality and need usability improvements. A range of issues have been identified and are being worked on for Moodle 3.2.&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* Cartridges patch is completed, waiting for peer review&lt;br /&gt;
* A Content-Item patch was started by Stephen Vickers. We are working on completing the patch.&lt;br /&gt;
* Upgrading enrol_lti to support LTI v2.0 has a proof of concept for offering proxies. We are currently looking into using a new library offered by IMS, seeing if it&#039;s appropriate for what we need.&lt;br /&gt;
* Membership synchronisation is being looked at in conjunction with LTI2&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
The [http://prototype.moodle.net/lti/ work in progress prototype] is available to view on the prototype site.&lt;br /&gt;
You can add tools via tool proxy, and via cartridge. Content-Item will be added soon.&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50677</id>
		<title>LTI Improvements 3.2 Project</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LTI_Improvements_3.2_Project&amp;diff=50677"/>
		<updated>2016-07-27T03:19:51Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Update progress 27/07/2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Project&lt;br /&gt;
|name = Improvements to LTI for 3.2&lt;br /&gt;
|state = Developing&lt;br /&gt;
|tracker = MDL-54679&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=xxx&lt;br /&gt;
|assignee = [[User:John Okely]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
The LTI provider was added to Moodle 3.1 - but unfortunately our LTI provider and consumer do not support the same standard, are missing important functionality and need usability improvements. A range of issues have been identified and are being worked on for Moodle 3.2.&lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
The targeted improvements for 3.2 are:&lt;br /&gt;
* Offer cartridges in LTI provider&lt;br /&gt;
* &amp;lt;strike&amp;gt;Support standard icon element when importing LTI cartridges&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Upgrade enrol_lti to support LTI v2.0&lt;br /&gt;
* Ensure enrol_lti member syncronisation task works as expected&lt;br /&gt;
* Content Item support&lt;br /&gt;
* Add support for LTI Outcomes Management 2 services&lt;br /&gt;
* Caliper Analytics&lt;br /&gt;
* Run the LTI Test suite against Moodle (consumer + provider) and create issues for any failures (in this Epic)&lt;br /&gt;
* Fix auto-closing LTI config window&lt;br /&gt;
* Improve interface for managing course tools&lt;br /&gt;
* Add support for services via LTI1 (LTI1.2 spec)&lt;br /&gt;
* Improve accessibility of new LTI admin screen&lt;br /&gt;
&lt;br /&gt;
To see the most recent set of issues and status of the project see https://tracker.moodle.org/browse/MDL-54679&lt;br /&gt;
&lt;br /&gt;
==Progress==&lt;br /&gt;
* Cartridges patch is completed, waiting for peer review&lt;br /&gt;
* A Content-Item patch was started by Stephen Vickers. We are working on completing the patch.&lt;br /&gt;
* Upgrading enrol_lti to support LTI v2.0 has a proof of concept for offering proxies. We are currently looking into using a new library offered by IMS, seeing if it&#039;s appropriate for what we need.&lt;br /&gt;
* Membership synchronisation is being looked at in conjunction with LTI2&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User:John_Okely&amp;diff=50619</id>
		<title>User:John Okely</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User:John_Okely&amp;diff=50619"/>
		<updated>2016-07-14T04:00:16Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Created page with &amp;quot;Developer at Moodle HQ&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Developer at Moodle HQ&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Tree&amp;diff=50131</id>
		<title>Tree</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Tree&amp;diff=50131"/>
		<updated>2016-05-19T05:58:31Z</updated>

		<summary type="html">&lt;p&gt;Johnok: Fix escaping&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 3.1}}The javascript Tree is designed to allow you to create an interactive tree that is accessible, intuitively usable, and consistent with the rest of Moodle&#039;s hierarchical interfaces. It is currently used in the Navigation block and Settings block.&lt;br /&gt;
&lt;br /&gt;
The tree is originally based off the [http://oaa-accessibility.org/examplep/treeview1/ tree view example] by the Open Ajax Alliance Accessibility Group. and is designed to comply as much as possible with the [http://www.w3.org/WAI/GL/wiki/Using_ARIA_trees ARIA specification for accessible trees]. For detailed additional information you can read those links.&lt;br /&gt;
&lt;br /&gt;
[[File:TreeExampleNavigation.png|thumb|center|450px|An example use of the tree module]]&lt;br /&gt;
&lt;br /&gt;
== Using the Tree module ==&lt;br /&gt;
&lt;br /&gt;
To create an aria accessible tree, you must instantiate a child AMD module of the core/tree using Require JS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
define([&#039;jquery&#039;, &#039;core/tree&#039;], function($, Tree) {&lt;br /&gt;
    return {&lt;br /&gt;
        init: function() {&lt;br /&gt;
            new Tree(&amp;quot;css/jquery selector of the tree container&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To define a node in your structure, add the &amp;quot;treeitem&amp;quot; role. If the node has children, it must have a child html element with the role &amp;quot;group&amp;quot; to contain it&#039;s children.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;div role=&amp;quot;treeitem&amp;quot;&amp;gt;This is an item which has children&lt;br /&gt;
    &amp;lt;div role=&amp;quot;group&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div role=&amp;quot;treeitem&amp;quot;&amp;gt;A child&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div role=&amp;quot;treeitem&amp;quot;&amp;gt;Another child&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the CSS for your page or module, you will need to target the aria-expanded attribute of group items to hide and show them as tree.js does not assume knowledge of how you want expanding and collapsing to work. For most cases, this will be sufficient:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
[role=&amp;quot;group&amp;quot;] {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
[role=&amp;quot;group&amp;quot;][aria-expanded=&amp;quot;true&amp;quot;] {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tree.js will handle the accessible controls for navigating the tree as well as expanding and collapsing nodes. The controls are as follows:&lt;br /&gt;
* Up: Select the previous visible tree item.&lt;br /&gt;
* Down: Select next visible tree item.&lt;br /&gt;
* Left: Collapse the currently selected parent node if it is expanded. Move to the previous parent node (if possible) when the current parent node is collapsed.&lt;br /&gt;
* Right: Expand the currently selected parent node and move to the first child list item.&lt;br /&gt;
* Enter: Toggle the expanded or collapsed state of the selected parent node. If it is a link, follow the link&lt;br /&gt;
* Home: Select the root parent node of the tree.&lt;br /&gt;
* End: Select the last visible node of the tree.&lt;br /&gt;
* Tab: Navigate away from tree.&lt;br /&gt;
* Space: Expand and collapse node&lt;br /&gt;
* * (asterisk on the numpad): Expand all group nodes.&lt;br /&gt;
* Clicking on a parent node will toggle its expanded or collapsed state.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
* Code location: lib/amd/src/tree.js&lt;br /&gt;
* Examples:&lt;br /&gt;
** blocks/navigation/amd/src/navblock.js&lt;br /&gt;
** blocks/settings/amd/src/settingsblock.js&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Javascript Modules]]&lt;br /&gt;
* [[Useful core Javascript modules]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Javascript]]&lt;/div&gt;</summary>
		<author><name>Johnok</name></author>
	</entry>
</feed>