<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/310/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jwc</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/310/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jwc"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/Special:Contributions/Jwc"/>
	<updated>2026-04-22T07:27:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Development:Navigation_2.0&amp;diff=53643</id>
		<title>Development:Navigation 2.0</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Development:Navigation_2.0&amp;diff=53643"/>
		<updated>2009-04-01T06:21:58Z</updated>

		<summary type="html">&lt;p&gt;Jwc: /* Other */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFAA;border:1px solid #FFFF00;color:#444444;padding:0.5em 1em;&amp;quot;&amp;gt;&lt;br /&gt;
===State of play end March 2009===&lt;br /&gt;
&lt;br /&gt;
A consensus seems to be emerging. Martin will be summarasing what we thing that is, and Tim will be working out a plan for implementing it all. Until we have a clearer summary, I am leaving the following reading list:&lt;br /&gt;
* Start by reading this page. It is Martin&#039;s summary of what we are hoping to achieve.&lt;br /&gt;
Then we get to the various forum threads and proposals:&lt;br /&gt;
* [[Development:Navigation/Pagelib/Blocks_2.0_design|This proposal]] is Tim&#039;s first attempt to work out how to achieve some of the goals outlined on this page.&lt;br /&gt;
* There is a [http://moodle.org/mod/forum/discuss.php?d=95882 thread about blocks] in the general developer forum. Related to that is Tim&#039;s [[Development:Very_flexible_block_system_proposal|proposal about how blocks might work in future]].&lt;br /&gt;
* The other hot topic is templates, and whether they are the right way for Moodle to output HTML. There is [http://moodle.org/mod/forum/discuss.php?d=108993 one thread in the General Developer Forum] and another in the [http://moodle.org/mod/forum/discuss.php?d=116398 Themes forum]. There might now be an answer to this: [[Development:Theme engines for Moodle?]]&lt;br /&gt;
* Probably the least clear aspect at the moment is Navigation. This [http://moodle.org/mod/forum/discuss.php?d=115620 GDF thread is the place to discuss navigation].&lt;br /&gt;
I hope I have not forgotten anything. Naturally, once our plans are clearer, they need to be reduced to a single, comprehensible proposal.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
Improving navigation in a complex web application like Moodle touches on a lot of areas, but in particular we must aim to hit these goals:&lt;br /&gt;
&lt;br /&gt;
===Clarity===&lt;br /&gt;
&lt;br /&gt;
It should be clearer what settings affect only yourself, and what settings affect what others see.&lt;br /&gt;
&lt;br /&gt;
It should be clear what is global navigation (whole site), and what is local navigation (within a course or module).&lt;br /&gt;
&lt;br /&gt;
===Consistency===&lt;br /&gt;
&lt;br /&gt;
All parts of the interface should be consistent.  We need to have a set of guidelines and core frameworks to better restrict what developers are allowed to do, while also reworking the core code to implement things like blocks and tabs in consistent ways.&lt;br /&gt;
&lt;br /&gt;
===Usability===&lt;br /&gt;
&lt;br /&gt;
Users should be able to easily learn what is there for them.&lt;br /&gt;
&lt;br /&gt;
Users should be able to move around &amp;quot;their world&amp;quot; within Moodle with a minimum of effort.&lt;br /&gt;
&lt;br /&gt;
===Performance===&lt;br /&gt;
&lt;br /&gt;
Processing blocks and building up a page with navigation must be very efficient. &lt;br /&gt;
&lt;br /&gt;
===Backward compatibility===&lt;br /&gt;
&lt;br /&gt;
If possible, plugins should not have to change.&lt;br /&gt;
&lt;br /&gt;
Users should also not find the new interface too different (just better!)&lt;br /&gt;
&lt;br /&gt;
==Scope== &lt;br /&gt;
&lt;br /&gt;
What parts of Moodle might be affected by this work?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Navigation bar===&lt;br /&gt;
&lt;br /&gt;
Since Moodle 1.9, we construct the navigation bar from an array using the build_navigation function. However, that converts all the data to a string, which is then passed to the theme. Instead, we should keep the information about the navigation bar links as structured data, and let the theme choose how to render it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Local navigation===&lt;br /&gt;
&lt;br /&gt;
In different places we have the global administration tree, the Course admin block, the Jump to menu, tabs like in the user profile, various activities, in the roles UI, and the &#039;Update this forum&#039; button. These are all ways of getting around nearby, related pages. It would be good to make these concepts more consistent. (There is also $homelink in the footer. Currently the HTML for this is generated in print_header.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This is an area we need to think about a lot more&#039;&#039;&#039;&lt;br /&gt;
:Please discuss here: http://moodle.org/mod/forum/discuss.php?d=115620&lt;br /&gt;
&lt;br /&gt;
===Blocks/pagelib===&lt;br /&gt;
&lt;br /&gt;
Blocks themselves should not change. What is currently inconsistent is how blocks get associated with particular pages. At the moment this is done through the (pageid, pagetype) columns of block_instance, and the pagetype column of block_pinned. Does it work if we change this to (contextid, pagetype)?&lt;br /&gt;
&lt;br /&gt;
The other thought is, can we make sticky blocks more flexible? What if we let them be configured in any context, not just globally? This would let people do things like add a block to every course in a particular category.&lt;br /&gt;
&lt;br /&gt;
Perhaps let themes control where on the page blocks can appear.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some more thought required here&#039;&#039;&#039;.&lt;br /&gt;
:Please discuss here: http://moodle.org/mod/forum/discuss.php?d=95882&lt;br /&gt;
&lt;br /&gt;
===Course view===&lt;br /&gt;
&lt;br /&gt;
What do we need on top of the existing course formats?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Themability===&lt;br /&gt;
&lt;br /&gt;
Give themers as much flexibility as possible, without having to do major changes throughout Moodle.&lt;br /&gt;
&lt;br /&gt;
Let them change the HTML output by the print_XXX functions in weblib.php.&lt;br /&gt;
&lt;br /&gt;
Should we allow themes to have their own lang files and settings.php page in the admin tree?&lt;br /&gt;
&lt;br /&gt;
[[Development:Theme engines for Moodle?]]&lt;br /&gt;
&lt;br /&gt;
==Solution 1==&lt;br /&gt;
&lt;br /&gt;
This section is intended to be a short summary of a possible solution for Moodle 2.0.  It&#039;s heavily based on Tim Hunt&#039;s ideas and discussions I&#039;ve had with him, but I wanted to paraphrase it to help me think about it.   [[User:Martin Dougiamas|Martin Dougiamas]] 06:52, 13 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
The one-line summary is: make blocks more consistent and themes more powerful, and then let people build their &amp;quot;perfect&amp;quot; interfaces from those.&lt;br /&gt;
&lt;br /&gt;
A key point to all this is backward compatibility.  All of this will only affect pages that are coded for it.  Older code will work as before, using deprecated functions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===1. Improve HTML generation===&lt;br /&gt;
&lt;br /&gt;
Our aim is to give interface designers ultimate control over the presentation of Moodle.&lt;br /&gt;
&lt;br /&gt;
Key points:&lt;br /&gt;
* refactor all weblib-type functions into a class of renderers&lt;br /&gt;
* implement similar renderers for all modules&lt;br /&gt;
* allow any current theme to subclass and override these renderers&lt;br /&gt;
* allow themes to define named regions on the page where blocks will go (eg left, right, top, bottom, center)&lt;br /&gt;
&lt;br /&gt;
This gives us great flexibility within a common and easy to understand framework.  For example, it allows templates, but doesn&#039;t depend on them.&lt;br /&gt;
&lt;br /&gt;
See Tim&#039;s [[Development:Theme_engines_for_Moodle%3F|explanation of theme engines]] for a lot more details.&lt;br /&gt;
&lt;br /&gt;
===2. Improve Blocks and Pages===&lt;br /&gt;
&lt;br /&gt;
Our aim is to make blocks work everywhere with a lot of control where they go.&lt;br /&gt;
&lt;br /&gt;
Key points:&lt;br /&gt;
* change the implementation of &amp;quot;pages&amp;quot; to be based on contexts&lt;br /&gt;
* develop the idea of sticky blocks to support inheritance in the tree of contexts (eg sticky block at course level would appear in all subcontexts unless they chose to &amp;quot;override&amp;quot; this block).&lt;br /&gt;
* add more controls to blocks to hide/show them in certain types of pages&lt;br /&gt;
* use the theme regions when placing blocks&lt;br /&gt;
&lt;br /&gt;
See Tim&#039;s [[Development:Very_flexible_block_system_proposal|very flexible block system proposal]] for details.&lt;br /&gt;
&lt;br /&gt;
===3. Use blocks for most navigation===&lt;br /&gt;
&lt;br /&gt;
Even though we plan the default configuration to provide the best navigation we can, by having most navigation in blocks we give admins and teachers the most flexibility to customise their navigation.&lt;br /&gt;
&lt;br /&gt;
Key points:&lt;br /&gt;
*&#039;&#039;&#039;Navigation block&#039;&#039;&#039;: with a hierarchical tree that adapts to show &amp;quot;things around you&amp;quot; within Moodle.  eg at site level it could show courses, at course level it could show the same thing as well as activities within the current course.  Such a block would normally be made sticky so that it appears in the same place on all pages.  Depending on the theme it could be a block on the side or a drop-down menu in the header!&lt;br /&gt;
*&#039;&#039;&#039;Settings block&#039;&#039;&#039;: would contain all the settings for the current thing you are looking at.  Forum settings in the forum, Course settings in the course.&lt;br /&gt;
*&#039;&#039;&#039;CMS block&#039;&#039;&#039;: would allow the custom definition of top-level pages and links to other systems (eg like the menus on moodle.org).&lt;br /&gt;
&lt;br /&gt;
==Implementation plan==&lt;br /&gt;
&lt;br /&gt;
Please see [[Development:Navigation 2.0 implementation plan]].&lt;br /&gt;
&lt;br /&gt;
==Relevant tracker issues==&lt;br /&gt;
&lt;br /&gt;
===Tracking bugs===&lt;br /&gt;
&lt;br /&gt;
* MDL-12212 META: Complete review and rewrite of Pagelib (and blocks)&lt;br /&gt;
&lt;br /&gt;
===Theme related===&lt;br /&gt;
&lt;br /&gt;
These come from a review of all the [http://tracker.moodle.org/secure/IssueNavigator.jspa?reset=true&amp;amp;pid=10011&amp;amp;resolution=-1&amp;amp;component=10088&amp;amp;sorter/field=issuekey&amp;amp;sorter/order=ASC&amp;amp;sorter/field=priority&amp;amp;sorter/order=DESC &#039;Theme&#039; tracker issues]. &lt;br /&gt;
&lt;br /&gt;
* MDL-3625 $menu in header does too many things&lt;br /&gt;
* MDL-3626 header.html and footer.html $variable inconsistency&lt;br /&gt;
* MDL-8369 Folder-like presentation of the courses at the main page&lt;br /&gt;
* MDL-9306 Main course formats need to have tables removed but keep AJAX working - &#039;&#039;there seem to be some regressions from this work ;-)&#039;&#039;&lt;br /&gt;
** MDL-12164 Hiding Course Topics and Switching Roles creates Problem in other Topics&lt;br /&gt;
** MDL-13410 Course view misaligned&lt;br /&gt;
** MDL-17450 Display of blocks and topic section not correct in 2.0&lt;br /&gt;
* MDL-10522 Hard-coded &amp;amp;lt;br /&amp;gt; used for spacing.&lt;br /&gt;
** MDL-14058 Code includes &amp;lt;br /&amp;gt; tags in many places, which breaks theming, or makes it more difficult&lt;br /&gt;
* MDL-10681 Popup windows need uniform body class&lt;br /&gt;
* MDL-12093 It is not possible to change the page layout in popup windows&lt;br /&gt;
* MDL-12183 Improve block HTML structure&lt;br /&gt;
* MDL-12191 Let themes know whether this page has blocks.&lt;br /&gt;
* MDL-14061 Add category short names, and an option for categories in the navigation bar.&lt;br /&gt;
* MDL-14305 Class on body to identify the page as Moodle, and a specific site. (Enables sharing of stylesheets, but with a few specific customisations.)&lt;br /&gt;
* MDL-14306 The course category hierarchy should be reflected in CSS classes on the body tag (actually, contextids would let this be done more efficiently).&lt;br /&gt;
* MDL-14539 Replace table layout with div - &#039;&#039;parhaps a duplicate of MDL-9306.&#039;&#039;&lt;br /&gt;
* MDL-14632 Increase use of tabs on all mod activities.&lt;br /&gt;
* MDL-14901 Themes can no longer control the separater used in the nav bar.&lt;br /&gt;
* MDL-15400 Sideblocks on &amp;quot;My Moodle&amp;quot; page not conforming to global width&lt;br /&gt;
* MDL-15817 Part course them and part site theme is used when displayng Outline and Complete reports&lt;br /&gt;
* MDL-15959 patch any theme to have a personal visual style (CSS file) for each course - &#039;&#039;not sure this is a good solution, but it is an interesting requirement.&#039;&#039;&lt;br /&gt;
* MDL-16244 Support for a drop-down menu bar - &#039;&#039;Like on moodle.org now&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Block related===&lt;br /&gt;
&lt;br /&gt;
And the following are the relevant [http://tracker.moodle.org/secure/IssueNavigator.jspa?reset=true&amp;amp;pid=10011&amp;amp;resolution=-1&amp;amp;component=10076&amp;amp;sorter/field=summary&amp;amp;sorter/order=ASC&amp;amp;sorter/field=resolution&amp;amp;sorter/order=ASC&amp;amp;sorter/field=status&amp;amp;sorter/order=ASC&amp;amp;sorter/field=priority&amp;amp;sorter/order=DESC &#039;Blocks&#039; issues].&lt;br /&gt;
&lt;br /&gt;
* MDL-12240 Add the $CFG-&amp;gt;defaultblocks functions to adminmenu&lt;br /&gt;
* MDL-15946 Add ability to add blocks to Category page&lt;br /&gt;
* MDL-11960 Cannot configure rss block on tag page&lt;br /&gt;
* MDL-11131 Moving blocks causes some blocks to disappear (pinned blocks trouble)&lt;br /&gt;
* MDL-14542 Modification to improve javascript and css header insertion for blocks, modules and filters&lt;br /&gt;
* MDL-5320 Under some circumstances some block_instances aren&#039;t deleted...&lt;br /&gt;
* MDL-6692 blocks on forum pages&lt;br /&gt;
* MDL-13582 &amp;quot;Course Sticky Blocks&amp;quot; don&#039;t get displayed when the &amp;quot;Show the course blocks&amp;quot; option is chosen when using &amp;quot;Add a resource&amp;quot; &amp;gt; &amp;quot;Compose a web page&amp;quot;&lt;br /&gt;
* MDL-13606 Sticky blocks on tag pages&lt;br /&gt;
* MDL-13627 Blocks - Default Closed View&lt;br /&gt;
* MDL-13708 The instances column, in the blocks management screen, links only to courses, but counts everything&lt;br /&gt;
* MDL-13888 Allow RSS block on MyMoodle pages only for users who can configure it&lt;br /&gt;
* MDL-13891 admin tree block disply in myMoodle controlled by capabilities&lt;br /&gt;
* MDL-15379 No way to exclude core blocks from specific modules if Blocks in Modules is enabled without changing core block code&lt;br /&gt;
* MDL-17447 LOCAL: stickyblocks targets&lt;br /&gt;
* MDL-6024 make hidden blocks visible to teacher&lt;br /&gt;
* MDL-6748 Patch to allow a center position for Moodle blocks&lt;br /&gt;
* MDL-5898 customizable blogs blocks&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
&lt;br /&gt;
* MDL-17730 More flexibility when creating skip links.&lt;br /&gt;
* MDL-7336 Allow filters to be enabled/disabled per course or activity&lt;br /&gt;
* MDL-6981 Allow text filters to add stuff to page footer&lt;br /&gt;
* MDL-18765 Maximum and minimum block widths are currently hard-coded in some view pages&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Roadmap]]&lt;br /&gt;
* [[Development:Navigation/Pagelib/Blocks 2.0 design|a possible (partial) design from Tim]]&lt;br /&gt;
* [[Development:Filter enable/disable by context]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using Moodle forum discussions:&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=115620 What is the structure of a Moodle site?]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=108993 The Future of Moodle Templates?]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=95882 Proposed format plugin changes] (about blocks/pagelib)&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=115389 Can create but not see a block on the Course categories page]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=116398 How hard is it to theme for Moodle?]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Jwc</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/310/en/index.php?title=Development:Developer_documentation&amp;diff=53081</id>
		<title>Development:Developer documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/310/en/index.php?title=Development:Developer_documentation&amp;diff=53081"/>
		<updated>2009-03-23T15:30:47Z</updated>

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

		<summary type="html">&lt;p&gt;Jwc: /* Standard filters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Location: &#039;&#039;Administration &amp;gt; Modules &amp;gt; Manage filters&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Filters allow for the automatic transformation of entered text into different, often more complex forms. For example the titles of [[Resources|resources]] can automatically become hyperlinks that take you to the relevant resource, URLs pointing to [[mp3]] files can become [[Flash]] controls embedded in the web page that let you pause and rewind the audio. The possibilities are endless and there are a number of standard filters included with Moodle and many more specialized filters available from the Moodle.org [http://moodle.org/mod/data/view.php?id=6009 Modules and plugins database].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Enabling filters==&lt;br /&gt;
[[Image:filters admin.png|thumb|Filters administration in Moodle 1.8]]&lt;br /&gt;
To enable a filter:&lt;br /&gt;
#Access Administration &amp;gt; Modules &amp;gt; Filters.&lt;br /&gt;
#On the filters administration page, click the eye icon opposite the filter you want to enable, so that it changes to an open eye.&lt;br /&gt;
#Use the up/down arrow icons to arrange the filters in the order in which they should be applied.&lt;br /&gt;
&lt;br /&gt;
Certain filters have additional settings, which can be accessed via the links in the settings column.&lt;br /&gt;
&lt;br /&gt;
==Common settings==&lt;br /&gt;
&lt;br /&gt;
Note: Prior to Moodle 1.9, common filter settings can be found in &#039;&#039;Administration &amp;gt; Appearance &amp;gt; Filter settings&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Text cache lifetime===&lt;br /&gt;
&lt;br /&gt;
Text filters can take a lot of processor power to analyze. If you have a large number of courses, the filters may slow your system. The text cache lifetime determines how often the filters run. If you set them to run too frequently, your system may&lt;br /&gt;
slow down. If you set them to run too infrequently, analyzing new content will take too long and users will notice. You should experiment to find the correct amount of time for your server.&lt;br /&gt;
&lt;br /&gt;
===Filter uploaded files===&lt;br /&gt;
&lt;br /&gt;
This setting enables uploaded files (HTML and text only) to be processed by the filters system. You can choose to have none, only HTML or all files filtered.&lt;br /&gt;
&lt;br /&gt;
===Filter match once per page===&lt;br /&gt;
&lt;br /&gt;
This setting effects the glossary, activity and resource linking filters. If set to yes, only the first match on the complete page will be converted to a link. All others will be ignored.&lt;br /&gt;
&lt;br /&gt;
===Filter match once per text===&lt;br /&gt;
&lt;br /&gt;
This setting effects the glossary, activity and resource linking filters. If set to yes, only the first match in a discrete block of text will be converted to a link. All others in that text block will be ignored.&lt;br /&gt;
&lt;br /&gt;
===Filter all strings===&lt;br /&gt;
&lt;br /&gt;
If checked, headings and titles can be displayed in different languages using the [[Multi language content|multi-language filter]].&lt;br /&gt;
&lt;br /&gt;
==Standard filters==&lt;br /&gt;
&lt;br /&gt;
Filters included in the standard download are:&lt;br /&gt;
&lt;br /&gt;
*Activity Names Auto-linking - This scans text for activity titles that exist in the same course and creates a link.&lt;br /&gt;
*[[Algebra filter|Algebra]] - This filter will convert algebra code into GIF images. It requires the tex filter to be installed ([[#TeX notation|see below]]). Note also that your system must also include the following Perl module: HTML::Entities.pm&lt;br /&gt;
*Database auto-linking - As the name suggests, this filter enables automatic linking of [[Database module]] entries.&lt;br /&gt;
*Email Protection - This filter scans the text for any email addresses. Where found they are changed (obfuscated) to reduce the chance of being added to a spammers list. However, as this filter may be switched off by default, the site administrator may wish to enable this filter before importing user&#039;s email addresses.&lt;br /&gt;
*Glossary auto-linking - As the name suggests, this filter enables automatic linking of [[Glossary module]] entries. In addition to this filter, individual glossary entries should have the &amp;quot;This entry should be automatically linked&amp;quot; box checked.&lt;br /&gt;
*[[Multi language content]] - This filter enables resources to be created in multiple languages. It looks for &amp;amp;lt;span&amp;amp;nbsp;lang=&amp;quot;xx&amp;quot; class=&amp;quot;multilang&amp;quot;&amp;amp;gt;...&amp;amp;lt;/span&amp;amp;gt; tags which indicate that a text contains multiple languages. Then it selects and outputs the best language for the current user. The language of the resource will change when the user changes their selected Moodle language. Please note: going to the past, the multilang filter supported the &amp;amp;lt;lang&amp;amp;gt; tag. Then, officially, we changed it to the standard HTML &amp;amp;lt;span&amp;amp;gt; tag and the &amp;amp;lt;lang&amp;amp;gt; solution is now deprecated.&lt;br /&gt;
*[[Multimedia plugins]]&lt;br /&gt;
*Resource Names Auto-linking - The titles of [[Resources]] can automatically become hyperlinks that take you to the relevant resource within the same course.&lt;br /&gt;
*[[TeX filter|TeX notation]]&lt;br /&gt;
*Tidy - This filter checks whether HTML code is XHTML compliant, tidying where necessary. To make this filter work you need to have PHP compiled with the libtidy option; see http://www.php.net/tidy. The Using Moodle discussion [http://moodle.org/mod/forum/discuss.php?d=28418 Tidy Filter for Moodle 1.5] contains more details.&lt;br /&gt;
*Wiki Page Auto-linking&lt;br /&gt;
*[[Word censorship]] - This filter &amp;quot;blacks out&amp;quot; words found on a list.&lt;br /&gt;
&lt;br /&gt;
==Non-standard filters==&lt;br /&gt;
&lt;br /&gt;
Filters are one of Moodle&#039;s pluggable resources and may be added or removed simply by using a file manager to add or remove them from the &#039;&#039;/filters&#039;&#039; directory.  Moodle detects those that are present and makes them available to use.  &lt;br /&gt;
&lt;br /&gt;
* [[Jmol filter|Jmol]] - for interactive 3D viewing of molecular structures&lt;br /&gt;
* [[Code Syntax Highlighting]] - for more readable excerpts of programming languages including [[PHP]], [[HTML]], [[CSS]], and XML amongst many others&lt;br /&gt;
* [[HiddenText filter|HiddenText]] - for teachers who want to provide &amp;quot;hints&amp;quot; to students where the information is initially hidden but can easily be revealed by student in any time when he need.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Filters used on the Moodle.org forums]]&lt;br /&gt;
*[[Development:Filters]]&lt;br /&gt;
*[http://youtube.com/watch?v=rL1FVNewG7I Video demonstrating the set-up and use of filters in Moodle]&lt;br /&gt;
*Using Moodle [http://moodle.org/mod/forum/discuss.php?d=76206 Filter Demo&#039;s now online] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:Filter]]&lt;br /&gt;
&lt;br /&gt;
[[es:Filtros (Administrador)]]&lt;br /&gt;
[[fr:Filtres (administrateur)]]&lt;br /&gt;
[[ja:フィルタ (管理者)]]&lt;/div&gt;</summary>
		<author><name>Jwc</name></author>
	</entry>
</feed>