<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Masterchief</id>
	<title>Joomla! Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Masterchief"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Masterchief"/>
	<updated>2026-05-17T22:48:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Joomla_CodeSniffer&amp;diff=78528</id>
		<title>Talk:Joomla CodeSniffer</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Joomla_CodeSniffer&amp;diff=78528"/>
		<updated>2012-12-09T12:32:41Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* PSR&amp;#039;s */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Installation ? ==&lt;br /&gt;
Is there any reason for not using the &amp;quot;Easy Install method&amp;quot; ? i mean &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pear install PHP_CodeSniffer-1.3.0RC1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
as described in [http://pear.php.net/package/PHP_CodeSniffer/download/ Installation] &lt;br /&gt;
&lt;br /&gt;
? &lt;br /&gt;
&lt;br /&gt;
--[[User:Elkuku|Elkuku]] 01:26, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== PSR&#039;s ==&lt;br /&gt;
&lt;br /&gt;
I have no idea why PSR-0, 1 and 2 are referenced on this page at all. The Platform doesn&#039;t meet PSR-0 nor PSR-1 and deliberately ignores many of the requirements in PSR-2.  People submitting code to the Platform or the CMS should be using https://github.com/joomla/coding-standards.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GSOC_2012_Project_Ideas&amp;diff=65410</id>
		<title>Archived:GSOC 2012 Project Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GSOC_2012_Project_Ideas&amp;diff=65410"/>
		<updated>2012-03-05T03:04:13Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: Reworked format in line with KDE&amp;#039;s page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Welcome!==&lt;br /&gt;
Welcome to the Joomla! Google Summer of Code (GSoC) 2012 project ideas page. As we move forward with the 2012 version of the Joomla! GSoC, we will use this page to develop possible project ideas. Please note that anyone who is interested can participate in this process. You do not have to be a GSoC student or mentor to suggest possible project ideas. Thanks!&lt;br /&gt;
&lt;br /&gt;
Discussion of ideas and other GSoC related items is welcome on our Google Group: https://groups.google.com/forum/?fromgroups#!forum/joomla-gsoc-2012&lt;br /&gt;
&lt;br /&gt;
==Ideas==&lt;br /&gt;
&lt;br /&gt;
Opportunities exist for students to work with projects from either the Joomla CMS, the Joomla Platform or in some cases a combination of both.&lt;br /&gt;
&lt;br /&gt;
In addition to this ideas list, the Joomla! Community is able to voice their opinion on features they would like to see via the [http://ideas.joomla.org/ Joomla! Idea Pool].  Those wishing to add ideas to this listing are encouraged to review the Idea Pool and base their idea on the input received there.&lt;br /&gt;
&lt;br /&gt;
===Joomla CMS===&lt;br /&gt;
&lt;br /&gt;
[http://github.com/joomla/joomla-cms Source Code] [http://groups.google.com/d/forum/joomla-dev-cms Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
====Project: Social Package====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Over the last several years, social media has become a dominant force in online media.  Based on the number of extensions interacting with various social media APIs, it would be logical to build a Social package for the Joomla! Platform that provides a common and simplified interface to post and retrieve data from various social media networks.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with social media APIs (Facebook, Twitter, Google+, etc.), OAuth&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Babker&lt;br /&gt;
&lt;br /&gt;
====Project: New document types====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create JCard, JCal, JCSV and other extensible classes that will produce standards compliant documents of specific types (e.g. vCard,iCal).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, XML, web standards, &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====Project: Language Installation====&lt;br /&gt;
&lt;br /&gt;
Create an interface to install language packs from a generated list of accredited language packs during Joomla installation and subsequently from the administrator interface, either the installer or the language manager.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====Project: Joomla Translations====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a centralized translation tool, which will be a kind of Facebook Self-Translation App for Joomla! communities to have better translation.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The centralized website will make better translations for Joomla! It will help non-English speaking translation teams to get feedback about translation quality from people, who speak the same language. So translation teams can involve more volunteers in translation process. It will help also extension developers to translate their software. It will enable ability to submit a new extension translation INI file in English and get the translated version from the translation teams.&lt;br /&gt;
&lt;br /&gt;
:See&lt;br /&gt;
:*[http://www.facebook.com/translations/ Facebook Self-Translation]&lt;br /&gt;
:*[http://localize.drupal.org]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, JavaScript, MySQL, Joomla! Framework&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Edvard Ananyan&lt;br /&gt;
&lt;br /&gt;
====Project: CMS Unit Testing====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The Joomla CMS has its own set of classes that augment the Joomla platform but these are not well tested. The goal of this project is to improve the code coverage by writing unit tests for library classes specific to the Joomla CMS.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to review the current code coverage for the Joomla CMS libraries (/libraries/cms) and write and agreed-upon number of unit tests with particular attention to packages and classes that are below 50% coverage.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, PHPUnit&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Joomla Platform===&lt;br /&gt;
&lt;br /&gt;
The Joomla Platform allows for ideas that can work within the Joomla CMS, or could be completely separate applications that have no connection at all. The Joomla Platform allows for applications to be built for the command line, process daemons and web services. The follow list outlines some ideas that will be immediately useful for the Joomla Platform project that a student may consider taking on. In addition to PHP libraries, the Joomla Platform also ships with Mootools and project ideas can be related to client-side operations as well as server-side.&lt;br /&gt;
&lt;br /&gt;
[http://github.com/joomla/joomla-platform github Source Code] [http://groups.google.com/d/forum/joomla-dev-platform Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
====Project: Platform Unit Testing====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The Joomla Platform has a good suite of automated Unit Tests, but code coverage is lacking in some areas. The goal of this project is to improve the code coverage by writing unit tests for the Joomla Platform.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to review the current [http://developer.joomla.org/coverage/ code coverage report] for the Joomla Platform and write and agreed-upon number of unit tests with particular attention to packages that are below 50% coverage. Preference should be given to non-deprecated classes but the student may choose from either the core tree (/libraries/joomla) or the legacy tree (/libraries/legacy).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, PHPUnit&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Project: Joomla Platform Application Directory====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The Joomla project has several directory sites dedicated to extensions for the Joomla CMS (the [http://extensions.joomla.org JED]) and free and commercial resources (the [http://resources.joomla.org JRD]). With the release of the Joomla Platform, and it&#039;s particular attention to allowing other types of applications (not just the CMS), there is a need for a new website to act as a directory for these applications. The goal of this project is to build a new Joomla Platform application (not a Joomla component but a full application) to serve as this directory.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to build a new web application based on JApplicationWeb and the new Universal Content Model (UCM) package loosely inline with the other Joomla directory sites (the JED and the JRD). This is expected to be a &amp;quot;phase 1&amp;quot; project where the features will include user registration (agreeing to terms) and login, simple information pages (like Joomla articles) and listing pages for Joomla Platform applications. Suitable fields will be required and should include such things as application type (command line application, daemon, web application, web service, etc), what the application does, how to get it and so forth. The student is not expected to design the final template but should look to [http://twitter.github.com/bootstrap/ Bootstrap] for basic inspiration. Simple categorization will also be required. Global search can be added if time permits.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, OOP&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Hard but very rewarding&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Andrew Eddie&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_1.7_and_Joomla_Platform_11.2&amp;diff=59206</id>
		<title>Potential backward compatibility issues in Joomla 1.7 and Joomla Platform 11.2</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_1.7_and_Joomla_Platform_11.2&amp;diff=59206"/>
		<updated>2011-06-03T01:49:38Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Platform = &lt;br /&gt;
*JPATH_PLATFORM is now used instead of JPATH_LIBRARIES&lt;br /&gt;
&lt;br /&gt;
== JDatabaseQuery ==&lt;br /&gt;
&lt;br /&gt;
JDatabaseQuery is now abstract due of the work done to support new database engines (Windows Azure and Microsoft SQL Server). This means you &#039;&#039;&#039;must&#039;&#039;&#039; use &amp;lt;code&amp;gt;$db-&amp;gt;getQuery(true);&amp;lt;/code&amp;gt; to instantiate a query as is the &#039;&#039;&#039;correct&#039;&#039;&#039; practice in Joomla 1.6.&lt;br /&gt;
&lt;br /&gt;
== JDocument ==&lt;br /&gt;
*getHeadData(), setHeadData() and mergeHeadData() are from now on only present in JDocumentHTML. They have been removed from JDocument and JDocumentXML.&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/2a72ba9e73dbd4ef1484ef0af29249aa3e0c6067 Remove getHeadData(), setHeadData() and mergeHeadData() from JDocument since it only applies to JDocumentHTML. (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JDocumentHTML ===&lt;br /&gt;
*JDocumentHTML::$_links has changed to a multidimensional array. Also the rendering of the link elements has been moved from JDocumentHTML to JDocumentRenderHead.&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/7884e7d9456afac17558f6e90a0e7e86be8b14f2 Move the rendering of HTML link elements to JDocumentRendererHead. (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JDocumentRendererMessage ===&lt;br /&gt;
*A div element with the ID &amp;quot;system-message-container&amp;quot; is always rendered, whether there are messages or not. This ID should not be used in any extension or template.&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/bade3acf0f5ea588be92cb24d4237228c043a3c7 Modify JDocumentRendererMessage to always render &amp;amp;lt;div id=&amp;quot;system-message-container&amp;quot;&amp;gt;&amp;amp;lt;/div&amp;gt;. This makes it possible to render messages via JavaScript. (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JURI ==&lt;br /&gt;
*The unused parameter $akey has been removed from JURI::buildQuery().&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/14ebbbd702c2d79098057647fcc4603157896509 Remove an unused paramet in JURI::buildQuery(). (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JLoader ==&lt;br /&gt;
*JLoader can&#039;t load files multiple times anymore.&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/bfef02de71db7aa5cb46ffdff92778fd6f14f621 Use include_once instead of include in JLoader (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= CMS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Coding Principles ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within the new Joomla release cycle, developers need to be conscious of more frequent changes to version numbers. If you are doing hard checks against, for example, a version number exactly equal to &amp;quot;1.6&amp;quot; then as we move to 1.7, those checks may fail with unexpected results.  You should ensure that version checks appropriately allow for future increments like 1.7, 1.8, 2.0, 3.0, and so on.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_1.7_and_Joomla_Platform_11.2&amp;diff=59205</id>
		<title>Potential backward compatibility issues in Joomla 1.7 and Joomla Platform 11.2</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_1.7_and_Joomla_Platform_11.2&amp;diff=59205"/>
		<updated>2011-06-03T01:39:09Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: Added note for JDatabaseQuery&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Platform = &lt;br /&gt;
*JPATH_PLATFORM is now used instead of JPATH_LIBRARIES&lt;br /&gt;
&lt;br /&gt;
== JDatabaseQuery ==&lt;br /&gt;
&lt;br /&gt;
JDatabaseQuery is now abstract due of the work done to support new database engines (Windows Azure and Microsoft SQL Server). This means you &#039;&#039;&#039;must&#039;&#039;&#039; use &amp;lt;code&amp;gt;$db-&amp;gt;getQuery(true);&amp;lt;/code&amp;gt; to instantiate a query as is the &#039;&#039;&#039;correct&#039;&#039;&#039; practice in Joomla 1.6.&lt;br /&gt;
&lt;br /&gt;
== JDocument ==&lt;br /&gt;
*getHeadData(), setHeadData() and mergeHeadData() are from now on only present in JDocumentHTML. They have been removed from JDocument and JDocumentXML.&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/2a72ba9e73dbd4ef1484ef0af29249aa3e0c6067 Remove getHeadData(), setHeadData() and mergeHeadData() from JDocument since it only applies to JDocumentHTML. (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JDocumentHTML ===&lt;br /&gt;
*JDocumentHTML::$_links has changed to a multidimensional array. Also the rendering of the link elements has been moved from JDocumentHTML to JDocumentRenderHead.&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/7884e7d9456afac17558f6e90a0e7e86be8b14f2 Move the rendering of HTML link elements to JDocumentRendererHead. (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JDocumentRendererMessage ===&lt;br /&gt;
*A div element with the ID &amp;quot;system-message-container&amp;quot; is always rendered, whether there are messages or not. This ID should not be used in any extension or template.&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/bade3acf0f5ea588be92cb24d4237228c043a3c7 Modify JDocumentRendererMessage to always render &amp;amp;lt;div id=&amp;quot;system-message-container&amp;quot;&amp;gt;&amp;amp;lt;/div&amp;gt;. This makes it possible to render messages via JavaScript. (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JURI ==&lt;br /&gt;
*The unused parameter $akey has been removed from JURI::buildQuery().&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/14ebbbd702c2d79098057647fcc4603157896509 Remove an unused paramet in JURI::buildQuery(). (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JLoader ==&lt;br /&gt;
*JLoader can&#039;t load files multiple times anymore.&amp;lt;ref&amp;gt;[https://github.com/joomla/joomla-platform/commit/bfef02de71db7aa5cb46ffdff92778fd6f14f621 Use include_once instead of include in JLoader (GitHub)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= CMS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Refernces =&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31675</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31675"/>
		<updated>2010-10-29T23:42:47Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Intermediate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/gci Google Code-in] (GCI) is a contest for pre-university (13-18 year old) students, that aims at helping students get involved in Open Source projects.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/opensource/gci/2010-11/faqs.html Google Code-in Frequently Asked Questions]&lt;br /&gt;
&lt;br /&gt;
This list is a work in progress. The final listing for each task that is offered to students must include:&lt;br /&gt;
&lt;br /&gt;
# A specific work product, whether a piece of code, a written report, a piece of writing, a website or an image.&lt;br /&gt;
# Evaluation criteria which will be used for determining whether the task has been successfully completed.&lt;br /&gt;
# A list of any resources that would be useful for the student doing the project. These will usually be links to information but could something else.&lt;br /&gt;
# A difficulty rating (we are using challenging, intermediate, basic).&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
# Add the ability for the Mass Mail feature in Joomla 1.6 to be able to send HTML messages.&lt;br /&gt;
# Add a batch update facility to the Joomla 1.6 user manager to be able to batch add, remove or set the user groups for users in a list.&lt;br /&gt;
# Create a bulk import utility for the Joomla! user manager to create from a csv file and optionally notify users of their account details via email.&lt;br /&gt;
# Create a plugin to allow users to delete their accounts.&lt;br /&gt;
# Create a new component syndicate a combined feed from two separate components.&lt;br /&gt;
# Create a new document type: vcalendar.&lt;br /&gt;
# Create a new document type: ical.&lt;br /&gt;
# Create a new document type: rdf.&lt;br /&gt;
# Create a new document type: hcard.&lt;br /&gt;
# Create a new document type: csv.&lt;br /&gt;
# Create a new document type: vcard.&lt;br /&gt;
# Implement frontend editing for com_contact.&lt;br /&gt;
# Implement frontend editing for com_newsfeeds.&lt;br /&gt;
# Implement a method for Apply in the front end for com_content or com_weblinks.&lt;br /&gt;
# Create a component that would allow a backend user to change his or her password and other account settings in the backend without having access to the com_users user interface. &lt;br /&gt;
# Create a Debian package for Joomla! 1.6. Document the process.&lt;br /&gt;
# Create a Debian package for the Joomla! Framework. Document the process.&lt;br /&gt;
# Create a RPM package for Joomla! 1.6. Document the process. &lt;br /&gt;
Resources: http://en.wikipedia.org/wiki/RPM_Package_Manager&lt;br /&gt;
http://www.rpm.org/&lt;br /&gt;
# Create a RPM package for Joomla! 1.6. Document the process.&lt;br /&gt;
Resources: http://en.wikipedia.org/wiki/RPM_Package_Manager&lt;br /&gt;
http://www.rpm.org/&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
&lt;br /&gt;
#Create a custom document type to download vcard information in RDF format.&lt;br /&gt;
#Create a Google Map user plugin for display based on address information in com_contact.&lt;br /&gt;
#Create a plugin that stores information from specific fields in a profile plugin in the jos_contact_details table&lt;br /&gt;
#Create a plugin that parses actions from Mosets Tree and stores them in Scout (directory monitoring)&lt;br /&gt;
#Create an administrator module for quick article create that could replace Quick Icons.&lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
#Create a module to display a list of contacts in a category&lt;br /&gt;
#Create a module to display a list of newsfeeds in a category.&lt;br /&gt;
#Create user plugin to display a Twitter feed.&lt;br /&gt;
#Create a user plugin to display a Facebook feed.&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
#Document a complete class of the Joomla! Framework including appropriate code examples from the Joomla! core or elsewhere. (This task can be repeated for each framework class).&lt;br /&gt;
#Create a document describing the observer design pattern and how it is implemented in Joomla! plugins.&lt;br /&gt;
#Consult with the Joomla! development community and draft proposed code style standards for XML.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
#Document the use of alternative component layouts and provide a detailed commented example for each of the core components.&lt;br /&gt;
#Document the use of alternative module layouts and provide detailed commented examples for at least 5 core modules.&lt;br /&gt;
#Document how to create a custom document type, using a core component as an example (document types might be rdf, csv, hcard, ical, hcal etc). &lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
&lt;br /&gt;
For each of these create a page in docs.joomla.org&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
# Describe how a template designer can create a template parameter to for the site owner to include their Google Analytics code in the template automatically.&lt;br /&gt;
# Describe how to restore the default ACL settings.&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
&lt;br /&gt;
# Do a presentation for a local club, school or group on how to create a Joomla! Website. Write a brief report about the experience. (Can be done by several people)&lt;br /&gt;
# Create a Joomla! website for a non profit organization. Write a report about the experience. (Can be done by several people)&lt;br /&gt;
# Create a survey of third party developers to learn how closely they follow Joomla! core development and what forms of communication about core development they would find most useful.&lt;br /&gt;
# Organize an Install Fest where a group of students in your school can install and start creating a Joomla! website.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
&lt;br /&gt;
# Translate the Evaluators Persona (http://docs.joomla.org/Evaluators) into a language other than English.&lt;br /&gt;
# Write an article for the Joomla! Community Magazine &lt;br /&gt;
# Write an article about Joomla! or the Joomla! Project for your school newspaper or a local newspaper. &lt;br /&gt;
# Meet with the team working on the redesign of joomla.org and write an article about the current status. (Can be repeated every 2 weeks)&lt;br /&gt;
# Staff or help staff a Joomla! table or booth at a local IT Expo or event (To do this you must submit information about the specific event before hand and write a short report about it afterwards.)&lt;br /&gt;
# Design and create a media resource pack (PSD&#039;s or similar, logo&#039;s, etc) that a Joomla! Day can use to promote their event on web sites or using printed material.&lt;br /&gt;
# Design and create a media resource pack (PSD&#039;s or similar, logo&#039;s, etc) that a Joomla User Group can use to promote their group on web sites or using printed material.&lt;br /&gt;
# Design a logo or badge for one of the official groups (Joomla Bug Squad, Joomla Extension Directory) on the people.joomla.org site. (Can be repeated)&lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
&lt;br /&gt;
# Create a standard &amp;quot;Download Joomla!&amp;quot; module that Joomla! fans can use on their sites.&lt;br /&gt;
# Create list of online media outlets for distribution of Joomla! announcements&lt;br /&gt;
# Create a document on ways to leverage participation in the Joomla! Project to promote your Joomla! Business (ideas like putting a link in your forum signature, listing on the Resources Directory and so on). &lt;br /&gt;
# Create contributing author badge for the Joomla! Community Magazine&lt;br /&gt;
# Update Author Resources content for the Joomla! Community Magazine&lt;br /&gt;
# Create a powerpoint presentation (or similar) on the new user features in Joomla 1.6 that could be used at conference presentations (including good slide notes).&lt;br /&gt;
# Create an information PDF about how to run a Joomla Day, how to register the event with Joomla, and include links to key and useful resources.&lt;br /&gt;
# Create an information PDF about how to set up a Joomla User Group in your area, how to register the group with Joomla, and include links to key and useful resources.&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
====== Challenging ====== &lt;br /&gt;
# Write a PHPUnit test for a package or sub-package in the Joomla Libraries.(multiple opportunities exist for this task).&lt;br /&gt;
# Write a Selenium System test to cover a unit of the CMS functionality.(multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ====== &lt;br /&gt;
# Take a package or sub-package from the Joomla Libraries and ensure that the code formatting complies with our standards, and make corrections as appropriate (multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
&lt;br /&gt;
#Review 24 hours of posts in the New to Joomla! forums and report on the most common problems reported.&lt;br /&gt;
#Review 24 hours of posts in the Administration forums and report on the most common problems reported.&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
&lt;br /&gt;
# Research how to read/write video metadata in MP4 and webm containers. Write a report summarizing what you learn for the development team.&lt;br /&gt;
# Research the  best server side tools/methods to transcode video from various formats to those MP4 and webm containers including various compression schemes and settings for different screen formats (for Example  transcoding to an iOS device like iPhone/Pod/Pad vs the full TV experience.  Write a report summarizing what you learn for the development team.&lt;br /&gt;
# Research various online resources for video metadata along with the strengths and weaknesses of their API&#039;s, access rules and licensing restrictions.  Write a report summarizing what you learn for the development team.&lt;br /&gt;
# Research what it would take to start using PHAR packages for distributing the framework&lt;br /&gt;
(See http://www.php.net/manual/en/intro.phar.php). Write a report for the development team.&lt;br /&gt;
&lt;br /&gt;
# Review the W3C Authoring Tool Accessibility Guidelines (ATAG) 1.0 checkpoints and document where Joomla! does and does not meet them. &lt;br /&gt;
# Review the W3C Authoring Tool Accessibility Guidelines 2.0 (http://www.w3.org/TR/ATAG20/) and write a report on what would be needed for Joomla! 1.7 to meet them.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ====== &lt;br /&gt;
&lt;br /&gt;
# With Joomla&#039;s Google Analytics data, analyse the data for the past six months and make comments about how people are using www.joomla.org (entry points, exist points, etc).&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Analyze usage statistics for Joomla! Community Magazine and recommend changes to increase traffic&lt;br /&gt;
# Write a report on how you would improve one of the www.joomla.org sites to make it easier for people who don&#039;t know anything about Joomla to find information.&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
====== Challenging ====== &lt;br /&gt;
&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to use Joomla! to make a website. Interview a teacher in your school about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to develop a simple Joomla! component. Interview a teacher in your school about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to create a Joomla! template. Interview a teacher in your school (this might be an art teacher) about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ====== &lt;br /&gt;
&lt;br /&gt;
# Create a guide to Joomla! resources, documents and  sites for someone who has &amp;quot;inherited&amp;quot; a Joomla! site from somebody else and has never used Joomla! before. Create a persona for this profile in docs.joomla.org and link all resources to the persona page.&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
# Create a &amp;quot;HTML Basics&amp;quot; document aimed at someone who has a Joomla! site but has only used a WYSIWYG editor.&lt;br /&gt;
# Create a &amp;quot;CSS Basics&amp;quot; document aimed at someone with no web background.&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
(Multiple opportunities exist for each of these but may be limited by the availability of mentors in a specific language. Limit of one instance of each task per distinct language.)&lt;br /&gt;
&lt;br /&gt;
====== Challenging ====== &lt;br /&gt;
# For a language that does not have an accredited translation team, begin the process of organizing a team. Completion of this task will involve contacting the translation coordinators, using resources such as local JUGs and the Joomla! Forums and People site to find collaborators, learning to use com_localise, and beginning the translation process. &lt;br /&gt;
# For a language that does not have an accredited translation team, provide a translation of core strings.&lt;br /&gt;
&lt;br /&gt;
======  Intermediate ====== &lt;br /&gt;
# Translate the Absolute Beginner&#039;s Guide (http://docs.joomla.org/Beginners) into a language besides English. &lt;br /&gt;
# Translate the documentation on creating translations and becoming an accredited translation team into a language besides English.&lt;br /&gt;
# Translate the security documentation into a language other than English. (http://docs.joomla.org/Security)&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
# Provide an accredited translation team with translation of sample data.&lt;br /&gt;
# Provide an accredited translation team with the translation of the help screens for one complete component.&lt;br /&gt;
# Provide an accredited translation team with translation of 100 strings.&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
====== Challenging ====== &lt;br /&gt;
&lt;br /&gt;
# Card sorting studies are a basic approach to usability testing (http://www.deyalexander.com.au/resources/uxd/card-sorting.html ). Research card sorting and design a set of cards that could be used for analyzing usability in the Joomla! Administrator. Have at least one user try the card sorting task. Document your work and the results of the test case so that others know how to use the cards to test usability.&lt;br /&gt;
# Card sorting studies are a basic approach to usability testing (http://www.deyalexander.com.au/resources/uxd/card-sorting.html). Research card sorting and design a set of cards that could be used for analyzing usability of the docs.joomla.org. Have at least one user try the card sorting task. Document your work and the results of the test case so that others know how to use the cards to test usability.&lt;br /&gt;
&lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks create and document a think out loud procedure and carry out a test with at least 3 users: Creating an article in the administrator. &lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks create and document a think out loud procedure and carry out a test with at least 3 users: Installing an extension.&lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks create and document a think out loud procedure and carry out a test with at least 3 users: Updating Joomla!.&lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks create and document a think out loud procedure and carry out a test with at least 3 users: Creating a menu item.   &lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks and document a think out loud procedure for it and carry out a test with at least 3 users: Configuring permissions to achieve a specific goal. &lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks and document a think out loud procedure for it and carry out a test with at least 3 users: Creating an new action permissions user group.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ====== &lt;br /&gt;
&lt;br /&gt;
# Create a document about techniques for usability testing for developers.&lt;br /&gt;
# Check a standard installation of Joomla with the default template against a colour-blind checking site, then install a freely available template and do the same. Report any interesting results.&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
&lt;br /&gt;
# Check a standard installation of Joomla 1.6 against a HTML and CSS validation site. Report back any errors that you find.&lt;br /&gt;
# Identify 10 common tasks in the Joomla! administrator and record step by step the number of clicks it takes to completion. &lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31673</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31673"/>
		<updated>2010-10-29T23:38:15Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Basic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/gci Google Code-in] (GCI) is a contest for pre-university (13-18 year old) students, that aims at helping students get involved in Open Source projects.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/opensource/gci/2010-11/faqs.html Google Code-in Frequently Asked Questions]&lt;br /&gt;
&lt;br /&gt;
This list is a work in progress. The final listing for each task that is offered to students must include:&lt;br /&gt;
&lt;br /&gt;
# A specific work product, whether a piece of code, a written report, a piece of writing, a website or an image.&lt;br /&gt;
# Evaluation criteria which will be used for determining whether the task has been successfully completed.&lt;br /&gt;
# A list of any resources that would be useful for the student doing the project. These will usually be links to information but could something else.&lt;br /&gt;
# A difficultly rating (we are using challenging, intermediate, basic).&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
# Add the ability for the Mass Mail feature in Joomla 1.6 to be able to send HTML messages.&lt;br /&gt;
# Add a batch update facility to the Joomla 1.6 user manager to be able to batch add, remove or set the user groups for users in a list.&lt;br /&gt;
# Create a bulk import utility for the Joomla! user manager to create from a csv file and optionally notify users of their account details via email.&lt;br /&gt;
# Create a plugin to allow users to delete their accounts.&lt;br /&gt;
# Create a new component syndicate a combined feed from two separate components.&lt;br /&gt;
# Create a new document type: vcalendar.&lt;br /&gt;
# Create a new document type: ical.&lt;br /&gt;
# Create a new document type: rdf.&lt;br /&gt;
# Create a new document type: hcard.&lt;br /&gt;
# Create a new document type: csv.&lt;br /&gt;
# Create a new document type: vcard.&lt;br /&gt;
# Implement frontend editing for com_contact.&lt;br /&gt;
# Implement frontend editing for com_newsfeeds.&lt;br /&gt;
# Implement a method for Apply in the front end for com_content or com_weblinks.&lt;br /&gt;
# Create a component that would allow a backend user to change his or her password and other account settings in the backend without having access to the com_users user interface. &lt;br /&gt;
# Create a Debian package for Joomla! 1.6. Document the process.&lt;br /&gt;
# Create a Debian package for the Joomla! Framework. Document the process.&lt;br /&gt;
# Create a RPM package for Joomla! 1.6. Document the process. &lt;br /&gt;
Resources: http://en.wikipedia.org/wiki/RPM_Package_Manager&lt;br /&gt;
http://www.rpm.org/&lt;br /&gt;
# Create a RPM package for Joomla! 1.6. Document the process.&lt;br /&gt;
Resources: http://en.wikipedia.org/wiki/RPM_Package_Manager&lt;br /&gt;
http://www.rpm.org/&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
&lt;br /&gt;
#Create a custom document type to download vcard information in RDF format.&lt;br /&gt;
#Create a Google Map user plugin for display based on address information in com_contact.&lt;br /&gt;
#Create a plugin that stores information from specific fields in a profile plugin in the jos_contact_details table&lt;br /&gt;
#Create a plugin that parses actions from Mosets Tree and stores them in Scout (directory monitoring)&lt;br /&gt;
#Create an administrator module for quick article create that could replace Quick Icons.&lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
#Create a module to display a list of contacts in a category&lt;br /&gt;
#Create a module to display a list of newsfeeds in a category.&lt;br /&gt;
#Create user plugin to display a Twitter feed.&lt;br /&gt;
#Create a user plugin to display a Facebook feed.&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
#Document a complete class of the Joomla! Framework including appropriate code examples from the Joomla! core or elsewhere. (This task can be repeated for each framework class).&lt;br /&gt;
#Create a document describing the observer design pattern and how it is implemented in Joomla! plugins.&lt;br /&gt;
#Consult with the Joomla! development community and draft proposed code style standards for XML.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
#Document the use of alternative component layouts and provide a detailed commented example for each of the core components.&lt;br /&gt;
#Document the use of alternative module layouts and provide detailed commented examples for at least 5 core modules.&lt;br /&gt;
#Document how to create a custom document type, using a core component as an example (document types might be rdf, csv, hcard, ical, hcal etc). &lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
&lt;br /&gt;
For each of these create a page in docs.joomla.org&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
# Describe how a template designer can create a template parameter to for the site owner to include their Google Analytics code in the template automatically.&lt;br /&gt;
# Describe how to restore the default ACL settings.&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
&lt;br /&gt;
# Do a presentation for a local club, school or group on how to create a Joomla! Website. Write a brief report about the experience. (Can be done by several people)&lt;br /&gt;
# Create a Joomla! website for a non profit organization. Write a report about the experience. (Can be done by several people)&lt;br /&gt;
# Create a survey of third party developers to learn how closely they follow Joomla! core development and what forms of communication about core development they would find most useful.&lt;br /&gt;
# Organize an Install Fest where a group of students in your school can install and start creating a Joomla! website.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
&lt;br /&gt;
# Translate the Evaluators Persona (http://docs.joomla.org/Evaluators) into a language other than English.&lt;br /&gt;
# Write an article for the Joomla! Community Magazine &lt;br /&gt;
# Write an article about Joomla! or the Joomla! Project for your school newspaper or a local newspaper. &lt;br /&gt;
# Meet with the team working on the redesign of joomla.org and write an article about the current status. (Can be repeated every 2 weeks)&lt;br /&gt;
# Staff or help staff a Joomla! table or booth at a local IT Expo or event (To do this you must submit information about the specific event before hand and write a short report about it afterwards.)&lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
&lt;br /&gt;
# Create a standard &amp;quot;Download Joomla!&amp;quot; module that Joomla! fans can use on their sites.&lt;br /&gt;
# Create list of online media outlets for distribution of Joomla! announcements&lt;br /&gt;
# Create a document on ways to leverage participation in the Joomla! Project to promote your Joomla! Business (ideas like putting a link in your forum signature, listing on the Resources Directory and so on). &lt;br /&gt;
# Create contributing author badge for the Joomla! Community Magazine&lt;br /&gt;
# Update Author Resources content for the Joomla! Community Magazine&lt;br /&gt;
# Create a powerpoint presentation (or similar) on the new user features in Joomla 1.6 that could be used at conference presentations (including good slide notes).&lt;br /&gt;
# Create an information PDF about how to run a Joomla Day, how to register the event with Joomla, and include links to key and useful resources.&lt;br /&gt;
# Create an information PDF about how to set up a Joomla User Group in your area, how to register the group with Joomla, and include links to key and useful resources.&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
====== Challenging ====== &lt;br /&gt;
# Write a PHPUnit test for a package or sub-package in the Joomla Libraries.(multiple opportunities exist for this task).&lt;br /&gt;
# Write a Selenium System test to cover a unit of the CMS functionality.(multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ====== &lt;br /&gt;
# Take a package or sub-package from the Joomla Libraries and ensure that the code formatting complies with our standards, and make corrections as appropriate (multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
&lt;br /&gt;
#Review 24 hours of posts in the New to Joomla! forums and report on the most common problems reported.&lt;br /&gt;
#Review 24 hours of posts in the Administration forums and report on the most common problems reported.&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
&lt;br /&gt;
# Research how to read/write video metadata in MP4 and webm containers. Write a report summarizing what you learn for the development team.&lt;br /&gt;
# Research the  best server side tools/methods to transcode video from various formats to those MP4 and webm containers including various compression schemes and settings for different screen formats (for Example  transcoding to an iOS device like iPhone/Pod/Pad vs the full TV experience.  Write a report summarizing what you learn for the development team.&lt;br /&gt;
# Research various online resources for video metadata along with the strengths and weaknesses of their API&#039;s, access rules and licensing restrictions.  Write a report summarizing what you learn for the development team.&lt;br /&gt;
# Research what it would take to start using PHAR packages for distributing the framework&lt;br /&gt;
(See http://www.php.net/manual/en/intro.phar.php). Write a report for the development team.&lt;br /&gt;
&lt;br /&gt;
# Review the W3C Authoring Tool Accessibility Guidelines (ATAG) 1.0 checkpoints and document where Joomla! does and does not meet them. &lt;br /&gt;
# Review the W3C Authoring Tool Accessibility Guidelines 2.0 (http://www.w3.org/TR/ATAG20/) and write a report on what would be needed for Joomla! 1.7 to meet them.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ====== &lt;br /&gt;
&lt;br /&gt;
# With Joomla&#039;s Google Analytics data, analyse the data for the past six months and make comments about how people are using www.joomla.org (entry points, exist points, etc).&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Analyze usage statistics for Joomla! Community Magazine and recommend changes to increase traffic&lt;br /&gt;
# Write a report on how you would improve one of the www.joomla.org sites to make it easier for people who don&#039;t know anything about Joomla to find information.&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
====== Challenging ====== &lt;br /&gt;
&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to use Joomla! to make a website. Interview a teacher in your school about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to develop a simple Joomla! component. Interview a teacher in your school about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to create a Joomla! template. Interview a teacher in your school (this might be an art teacher) about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ====== &lt;br /&gt;
&lt;br /&gt;
# Create a guide to Joomla! resources, documents and  sites for someone who has &amp;quot;inherited&amp;quot; a Joomla! site from somebody else and has never used Joomla! before. Create a persona for this profile in docs.joomla.org and link all resources to the persona page.&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
# Create a &amp;quot;HTML Basics&amp;quot; document aimed at someone who has a Joomla! site but has only used a WYSIWYG editor.&lt;br /&gt;
# Create a &amp;quot;CSS Basics&amp;quot; document aimed at someone with no web background.&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
(Multiple opportunities exist for each of these but may be limited by the availability of mentors in a specific language. Limit of one instance of each task per distinct language.)&lt;br /&gt;
&lt;br /&gt;
====== Challenging ====== &lt;br /&gt;
# For a language that does not have an accredited translation team, begin the process of organizing a team. Completion of this task will involve contacting the translation coordinators, using resources such as local JUGs and the Joomla! Forums and People site to find collaborators, learning to use com_localise, and beginning the translation process. &lt;br /&gt;
# For a language that does not have an accredited translation team, provide a translation of core strings.&lt;br /&gt;
&lt;br /&gt;
======  Intermediate ====== &lt;br /&gt;
# Translate the Absolute Beginner&#039;s Guide (http://docs.joomla.org/Beginners) into a language besides English. &lt;br /&gt;
# Translate the documentation on creating translations and becoming an accredited translation team into a language besides English.&lt;br /&gt;
# Translate the security documentation into a language other than English. (http://docs.joomla.org/Security)&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
# Provide an accredited translation team with translation of sample data.&lt;br /&gt;
# Provide an accredited translation team with the translation of the help screens for one complete component.&lt;br /&gt;
# Provide an accredited translation team with translation of 100 strings.&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
====== Challenging ====== &lt;br /&gt;
&lt;br /&gt;
# Card sorting studies are a basic approach to usability testing (http://www.deyalexander.com.au/resources/uxd/card-sorting.html ). Research card sorting and design a set of cards that could be used for analyzing usability in the Joomla! Administrator. Have at least one user try the card sorting task. Document your work and the results of the test case so that others know how to use the cards to test usability.&lt;br /&gt;
# Card sorting studies are a basic approach to usability testing (http://www.deyalexander.com.au/resources/uxd/card-sorting.html). Research card sorting and design a set of cards that could be used for analyzing usability of the docs.joomla.org. Have at least one user try the card sorting task. Document your work and the results of the test case so that others know how to use the cards to test usability.&lt;br /&gt;
&lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks create and document a think out loud procedure and carry out a test with at least 3 users: Creating an article in the administrator. &lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks create and document a think out loud procedure and carry out a test with at least 3 users: Installing an extension.&lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks create and document a think out loud procedure and carry out a test with at least 3 users: Updating Joomla!.&lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks create and document a think out loud procedure and carry out a test with at least 3 users: Creating a menu item.   &lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks and document a think out loud procedure for it and carry out a test with at least 3 users: Configuring permissions to achieve a specific goal. &lt;br /&gt;
# Think out loud studies are another basic type of usability research (http://en.wikipedia.org/wiki/Think_aloud_protocol). For the following tasks and document a think out loud procedure for it and carry out a test with at least 3 users: Creating an new action permissions user group.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ====== &lt;br /&gt;
&lt;br /&gt;
# Create a document about techniques for usability testing for developers.&lt;br /&gt;
# Check a standard installation of Joomla with the default template against a colour-blind checking site, then install a freely available template and do the same. Report any interesting results.&lt;br /&gt;
&lt;br /&gt;
====== Basic ====== &lt;br /&gt;
&lt;br /&gt;
# Check a standard installation of Joomla 1.6 against a HTML and CSS validation site. Report back any errors that you find.&lt;br /&gt;
# Identify 10 common tasks in the Joomla! administrator and record step by step the number of clicks it takes to completion. &lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31641</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31641"/>
		<updated>2010-10-29T04:44:41Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Research */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/gci Google Code-in] (GCI) is a contest for pre-university (13-18 year old) students, that aims at helping students get involved in Open Source projects.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/opensource/gci/2010-11/faqs.html Google Code-in Frequently Asked Questions]&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
# Add the ability for the Mass Mail feature in Joomla 1.6 to be able to send HTML messages.&lt;br /&gt;
# Add a batch update facility to the Joomla 1.6 user manager to be able to batch add, remove or set the user groups for users in a list.&lt;br /&gt;
# Create a bulk import utility for the Joomla! user manager to create from a csv file and optionally notify users of their account details via email.&lt;br /&gt;
# Create a plugin to allow users to delete their accounts.&lt;br /&gt;
# Create a new component syndicate a combined feed from two separate components.&lt;br /&gt;
# Create a new document type: vcalendar.&lt;br /&gt;
# Create a new document type: ical.&lt;br /&gt;
# Create a new document type: rdf.&lt;br /&gt;
# Create a new document type: hcard.&lt;br /&gt;
# Create a new document type: csv.&lt;br /&gt;
# Create a new document type: vcard.&lt;br /&gt;
# Implement frontend editing for com_contact.&lt;br /&gt;
# Implement frontend editing for com_newsfeeds.&lt;br /&gt;
# Implement a method for Apply in the front end for com_content or com_weblinks.&lt;br /&gt;
# Create a component that would allow a backend user to change his or her password and other account settings in the backend without having access to the com_users user interface. &lt;br /&gt;
# Create a Debian package for Joomla! 1.6.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
&lt;br /&gt;
#Create a custom document type to download vcard information in RDF format.&lt;br /&gt;
#Create a Google Map user plugin for display based on address information in com_contact.&lt;br /&gt;
#Create a plugin that stores information from specific fields in a profile plugin in the jos_contact_details table&lt;br /&gt;
#Create a plugin that parses actions from Mosets Tree and stores them in Scout (directory monitoring)&lt;br /&gt;
#Create an administrator module for quick article create that could replace Quick Icons.&lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
#Create a module to display a list of contacts in a category&lt;br /&gt;
#Create a module to display a list of newsfeeds in a category.&lt;br /&gt;
#Create user plugin to display a Twitter feed.&lt;br /&gt;
#Create a user plugin to display a Facebook feed.&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
#Document a complete class of the Joomla! Framework including appropriate code examples from the Joomla! core or elsewhere. (This task can be repeated for each framework class).&lt;br /&gt;
#Create a document describing the observer design pattern and how it is implemented in Joomla! plugins.&lt;br /&gt;
#Consult with the Joomla! development community and draft proposed code style standards for XML.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
#Document the use of alternative component layouts and provide a detailed commented example for each of the core components.&lt;br /&gt;
#Document the use of alternative module layouts and provide detailed commented examples for at least 5 core modules.&lt;br /&gt;
#Document how to create a custom document type, using a core component as an example (document types might be rdf, csv, hcard, ical, hcal etc). &lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
&lt;br /&gt;
For each of these create a page in docs.joomla.org&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
# Describe how a template designer can create a template parameter to for the site owner to include their Google Analytics code in the template automatically.&lt;br /&gt;
# Describe how to restore the default ACL settings.&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
&lt;br /&gt;
# Do a presentation for a local club, school or group on how to create a Joomla! Website. Write a brief report about the experience. (Can be done by several people)&lt;br /&gt;
# Create a Joomla! website for a non profit organization. Write a report about the experience. (Can be done by several people)&lt;br /&gt;
# Create a survey of third party developers to learn how closely they follow Joomla! core development and what forms of communication about core development they would find most useful.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
&lt;br /&gt;
# Translate the Evaluators Persona (http://docs.joomla.org/Evaluators) into a language other than English.&lt;br /&gt;
# Write an article for the Joomla! Community Magazine &lt;br /&gt;
# Write an article about Joomla! or the Joomla! Project for your school newspaper or a local newspaper. &lt;br /&gt;
# Assist with Joomla! community collaboration efforts to improve user interface on United Nations Conference on Sustained Development 2012 website&lt;br /&gt;
# Meet with the team working on the redesign of joomla.org and write an article about the current status. (Can be repeated every 2 weeks)&lt;br /&gt;
# Staff or help staff a Joomla! table or booth at a local IT Expo or event (To do this you must submit information about the specific event)&lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
&lt;br /&gt;
# Create contributing author badge for the Joomla! Community Magazine&lt;br /&gt;
# Create list of online media outlets for distribution of Joomla! announcements&lt;br /&gt;
# Update Author Resources content for the Joomla! Community Magazine&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
Challenging&lt;br /&gt;
# Write a PHPUnit test for a package or sub-package in the Joomla Libraries.(multiple opportunities exist for this task).&lt;br /&gt;
# Write a Selenium System test to cover a unit of the CMS functionality.(multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
Intermediate&lt;br /&gt;
# Take a package or sub-package from the Joomla Libraries and ensure that the code formatting complies with our standards, and make corrections as appropriate (multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
&lt;br /&gt;
#Review 24 hours of posts in the New to Joomla! forums and report on the most common problems reported.&lt;br /&gt;
#Review 24 hours of posts in the Administration forums and report on the most common problems reported.&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
Challenging&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate&lt;br /&gt;
&lt;br /&gt;
# With Joomla&#039;s Google Analytics data, analyse the data for the past six months and make comments about how people are using www.joomla.org (entry points, exist points, etc).&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Analyze usage of the Joomla! Developer site and recommend&lt;br /&gt;
# Analyze usage statistics for Joomla! Community Magazine and recommend changes to increase traffic&lt;br /&gt;
# Write a report on how you would improve one of the www.joomla.org sites to make it easier for people who don&#039;t know anything about Joomla to find information more easily.&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
Challenging&lt;br /&gt;
&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to use Joomla! to make a website. Interview a teacher in your school about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to develop a simple Joomla! component. Interview a teacher in your school about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to create a Joomla! template. Interview a teacher in your school (this might be an art teacher) about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
&lt;br /&gt;
Intermediate&lt;br /&gt;
&lt;br /&gt;
# Create a guide to Joomla! resources, documents and  sites for someone who has &amp;quot;inherited&amp;quot; a Joomla! site from somebody else and has never used Joomla! before. Create a persona for this profile in docs.joomla.org and link all resources to the persona page.&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
# Create a &amp;quot;HTML Basics&amp;quot; document aimed at someone who has a Joomla! site but has only used a WYSIWYG editor.&lt;br /&gt;
# Create a &amp;quot;CSS Basics&amp;quot; document aimed at someone with no web background.&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
(Multiple opportunities exist for each of these but may be limited by the availability of mentors in a specific language. Limit of one task per distinct language.)&lt;br /&gt;
Challenging&lt;br /&gt;
# For a language that does not have an accredited translation team, begin the process of organizing a team. Completion of this task will involve contacting the translation coordinators, using resources such as local JUGs and the Joomla! Forums and People site to find collaborators, learning to use com_localise, and beginning the translation process. &lt;br /&gt;
# For a language that does not have an accredited translation team, provide a translation of core strings.&lt;br /&gt;
&lt;br /&gt;
Intermediate&lt;br /&gt;
# Translate the Absolute Beginner&#039;s Guide (http://docs.joomla.org/Beginners) into a language besides English. &lt;br /&gt;
# Translate the documentation on creating translations and becoming an accredited translation team into a language besides English.&lt;br /&gt;
# Translate the security documentation into a language other than English. (http://docs.joomla.org/Security)&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
# Provide an accredited translation team with translation of sample data.&lt;br /&gt;
# Provide an accredited translation team with the translation of the help screens for one complete component.&lt;br /&gt;
# Provide an accredited translation team with translation of 100 strings.&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
Challenging&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
Intermediate &lt;br /&gt;
&lt;br /&gt;
# Check a standard installation of Joomla with the default template against a colour-blind checking site, then install a freely available template and do the same. Report any interesting results.&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
&lt;br /&gt;
# Check a standard installation of Joomla 1.6 against a HTML and CSS validation site. Report back any errors that you find.&lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31640</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31640"/>
		<updated>2010-10-29T04:39:56Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* User Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/gci Google Code-in] (GCI) is a contest for pre-university (13-18 year old) students, that aims at helping students get involved in Open Source projects.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/opensource/gci/2010-11/faqs.html Google Code-in Frequently Asked Questions]&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
# Add the ability for the Mass Mail feature in Joomla 1.6 to be able to send HTML messages.&lt;br /&gt;
# Add a batch update facility to the Joomla 1.6 user manager to be able to batch add, remove or set the user groups for users in a list.&lt;br /&gt;
# Create a bulk import utility for the Joomla! user manager to create from a csv file and optionally notify users of their account details via email.&lt;br /&gt;
# Create a plugin to allow users to delete their accounts.&lt;br /&gt;
# Create a new component syndicate a combined feed from two separate components.&lt;br /&gt;
# Create a new document type: vcalendar.&lt;br /&gt;
# Create a new document type: ical.&lt;br /&gt;
# Create a new document type: rdf.&lt;br /&gt;
# Create a new document type: hcard.&lt;br /&gt;
# Create a new document type: csv.&lt;br /&gt;
# Create a new document type: vcard.&lt;br /&gt;
# Implement frontend editing for com_contact.&lt;br /&gt;
# Implement frontend editing for com_newsfeeds.&lt;br /&gt;
# Implement a method for Apply in the front end for com_content or com_weblinks.&lt;br /&gt;
# Create a component that would allow a backend user to change his or her password and other account settings in the backend without having access to the com_users user interface. &lt;br /&gt;
# Create a Debian package for Joomla! 1.6.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
&lt;br /&gt;
#Create a custom document type to download vcard information in RDF format.&lt;br /&gt;
#Create a Google Map user plugin for display based on address information in com_contact.&lt;br /&gt;
#Create a plugin that stores information from specific fields in a profile plugin in the jos_contact_details table&lt;br /&gt;
#Create a plugin that parses actions from Mosets Tree and stores them in Scout (directory monitoring)&lt;br /&gt;
#Create an administrator module for quick article create that could replace Quick Icons.&lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
#Create a module to display a list of contacts in a category&lt;br /&gt;
#Create a module to display a list of newsfeeds in a category.&lt;br /&gt;
#Create user plugin to display a Twitter feed.&lt;br /&gt;
#Create a user plugin to display a Facebook feed.&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
#Document a complete class of the Joomla! Framework including appropriate code examples from the Joomla! core or elsewhere. (This task can be repeated for each framework class).&lt;br /&gt;
#Create a document describing the observer design pattern and how it is implemented in Joomla! plugins.&lt;br /&gt;
#Consult with the Joomla! development community and draft proposed code style standards for XML.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
#Document the use of alternative component layouts and provide a detailed commented example for each of the core components.&lt;br /&gt;
#Document the use of alternative module layouts and provide detailed commented examples for at least 5 core modules.&lt;br /&gt;
#Document how to create a custom document type, using a core component as an example (document types might be rdf, csv, hcard, ical, hcal etc). &lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
&lt;br /&gt;
For each of these create a page in docs.joomla.org&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
# Describe how a template designer can create a template parameter to for the site owner to include their Google Analytics code in the template automatically.&lt;br /&gt;
# Describe how to restore the default ACL settings.&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
====== Challenging ======&lt;br /&gt;
&lt;br /&gt;
# Do a presentation for a local club, school or group on how to create a Joomla! Website. Write a brief report about the experience. (Can be done by several people)&lt;br /&gt;
# Create a Joomla! website for a non profit organization. Write a report about the experience. (Can be done by several people)&lt;br /&gt;
# Create a survey of third party developers to learn how closely they follow Joomla! core development and what forms of communication about core development they would find most useful.&lt;br /&gt;
&lt;br /&gt;
====== Intermediate ======&lt;br /&gt;
&lt;br /&gt;
# Translate the Evaluators Persona (http://docs.joomla.org/Evaluators) into a language other than English.&lt;br /&gt;
# Write an article for the Joomla! Community Magazine &lt;br /&gt;
# Write an article about Joomla! or the Joomla! Project for your school newspaper or a local newspaper. &lt;br /&gt;
# Assist with Joomla! community collaboration efforts to improve user interface on United Nations Conference on Sustained Development 2012 website&lt;br /&gt;
# Meet with the team working on the redesign of joomla.org and write an article about the current status. (Can be repeated every 2 weeks)&lt;br /&gt;
# Staff or help staff a Joomla! table or booth at a local IT Expo or event (To do this you must submit information about the specific event)&lt;br /&gt;
&lt;br /&gt;
====== Basic ======&lt;br /&gt;
&lt;br /&gt;
# Create contributing author badge for the Joomla! Community Magazine&lt;br /&gt;
# Create list of online media outlets for distribution of Joomla! announcements&lt;br /&gt;
# Update Author Resources content for the Joomla! Community Magazine&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
Challenging&lt;br /&gt;
# Write a PHPUnit test for a package or sub-package in the Joomla Libraries.(multiple opportunities exist for this task).&lt;br /&gt;
# Write a Selenium System test to cover a unit of the CMS functionality.(multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
Intermediate&lt;br /&gt;
# Take a package or sub-package from the Joomla Libraries and ensure that the code formatting complies with our standards, and make corrections as appropriate (multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
&lt;br /&gt;
#Review 24 hours of posts in the New to Joomla! forums and report on the most common problems reported.&lt;br /&gt;
#Review 24 hours of posts in the Administration forums and report on the most common problems reported.&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
Challenging&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Analyze usage of the Joomla! Developer site and recommend&lt;br /&gt;
# Analyze usage statistics for Joomla! Community Magazine and recommend changes to increase traffic&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
Challenging&lt;br /&gt;
&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to use Joomla! to make a website. Interview a teacher in your school about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to develop a simple Joomla! component. Interview a teacher in your school about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
# Suppose a teacher in your school was going to spend a month teaching his or her students to create a Joomla! template. Interview a teacher in your school (this might be an art teacher) about what resources would be useful for that and create a resource portal of links and materials on docs.joomla.org.&lt;br /&gt;
&lt;br /&gt;
Intermediate&lt;br /&gt;
&lt;br /&gt;
# Create a guide to Joomla! resources, documents and  sites for someone who has &amp;quot;inherited&amp;quot; a Joomla! site from somebody else and has never used Joomla! before. Create a persona for this profile in docs.joomla.org and link all resources to the persona page.&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
# Create a &amp;quot;HTML Basics&amp;quot; document aimed at someone who has a Joomla! site but has only used a WYSIWYG editor.&lt;br /&gt;
# Create a &amp;quot;CSS Basics&amp;quot; document aimed at someone with no web background.&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
(Multiple opportunities exist for each of these but may be limited by the availability of mentors in a specific language. Limit of one task per distinct language.)&lt;br /&gt;
Challenging&lt;br /&gt;
# For a language that does not have an accredited translation team, begin the process of organizing a team. Completion of this task will involve contacting the translation coordinators, using resources such as local JUGs and the Joomla! Forums and People site to find collaborators, learning to use com_localise, and beginning the translation process. &lt;br /&gt;
# For a language that does not have an accredited translation team, provide a translation of core strings.&lt;br /&gt;
&lt;br /&gt;
Intermediate&lt;br /&gt;
# Translate the Absolute Beginner&#039;s Guide (http://docs.joomla.org/Beginners) into a language besides English. &lt;br /&gt;
# Translate the documentation on creating translations and becoming an accredited translation team into a language besides English.&lt;br /&gt;
# Translate the security documentation into a language other than English. (http://docs.joomla.org/Security)&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
# Provide an accredited translation team with translation of sample data.&lt;br /&gt;
# Provide an accredited translation team with the translation of the help screens for one complete component.&lt;br /&gt;
# Provide an accredited translation team with translation of 100 strings.&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
Challenging&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
Intermediate &lt;br /&gt;
&lt;br /&gt;
# Check a standard installation of Joomla with the default template against a colour-blind checking site, then install a freely available template and do the same. Report any interesting results.&lt;br /&gt;
&lt;br /&gt;
Basic&lt;br /&gt;
&lt;br /&gt;
# Check a standard installation of Joomla 1.6 against a HTML and CSS validation site. Report back any errors that you find.&lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31593</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31593"/>
		<updated>2010-10-29T00:23:40Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
# Add the ability for the Mass Mail feature in Joomla 1.6 to be able to send HTML messages.&lt;br /&gt;
# Add a batch update facility to the Joomla 1.6 user manager to be able to batch add, remove or set the user groups for users in a list.&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to creating/editing documents&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
# Describe how a template designer can create a template parameter to for the site owner to include their Google Analytics code in the template automatically.&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to community management and outreach/marketing&lt;br /&gt;
# Write an article for the Joomla! Community Magazine&lt;br /&gt;
# Recruit new authors for the Joomla! Community Magazine&lt;br /&gt;
# Create contributing author badge for the Joomla! Community Magazine&lt;br /&gt;
# Create list of online media outlets for distribution of Joomla! announcements&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
# Take a package or sub-package from the Joomla Libraries and ensure that the code formatting complies with our standards, and make corrections as appropriate (multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
# Create instructional videos for new Joomla! Community Magazine authors&lt;br /&gt;
# Update Author Resources content for the Joomla! Community Magazine&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
# Recruit new non-english language contributions to the Joomla! Community Magazine&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31586</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31586"/>
		<updated>2010-10-29T00:14:08Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Quality Assurance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
# Add the ability for the Mass Mail feature in Joomla 1.6 to be able to send HTML messages.&lt;br /&gt;
# Add a batch update facility to the Joomla 1.6 user manager to be able to batch add, remove or set the user groups for users in a list.&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to creating/editing documents&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to community management and outreach/marketing&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
# Take a package or sub-package from the Joomla Libraries and ensure that the code formatting complies with our standards, and make corrections as appropriate (multiple opportunities exist for this task).&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31585</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31585"/>
		<updated>2010-10-29T00:11:39Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
# Add the ability for the Mass Mail feature in Joomla 1.6 to be able to send HTML messages.&lt;br /&gt;
# Add a batch update facility to the Joomla 1.6 user manager to be able to batch add, remove or set the user groups for users in a list.&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to creating/editing documents&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to community management and outreach/marketing&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31584</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31584"/>
		<updated>2010-10-28T23:59:49Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to creating/editing documents&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to community management and outreach/marketing&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31583</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31583"/>
		<updated>2010-10-28T23:56:00Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to creating/editing documents&lt;br /&gt;
# Describe the way view access levels can be expanded in Joomla 1.6 and how a site owner would use them to control the visible access to site content.&lt;br /&gt;
&lt;br /&gt;
# Describe the meanings of the core permissions in Joomla 1.6 and the four levels over which they can be applied.&lt;br /&gt;
# Describe the Global Level of permissions in Joomla 1.6 and how a site owner might use them to broadly control site access.&lt;br /&gt;
# Describe the Component Level of permissions in Joomla 1.6 and how a site owner can restrict users in groups to certain components.&lt;br /&gt;
# Describe the Category Level permissions in Joomla 1.6 and how a site owner can restrict content providers to create, edit and delete content in those categories.&lt;br /&gt;
# Describe the Article Level permissions in Joomla 1.6 and how a site owner can restrict content providers to edit and delete their articles.&lt;br /&gt;
# Describe how site owners can use the Edit Own permission effectively in Joomla 1.6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to community management and outreach/marketing&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31580</id>
		<title>Archived:GCI 2010-11</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:GCI_2010-11&amp;diff=31580"/>
		<updated>2010-10-28T23:45:48Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: New page: == Google Code-in 2010-2011 ==   === Introduction ===   === Proposed Tasks ===  ==== Code ====  Tasks related to writing or refactoring code  ====  Documentation ====  Tasks related to cre...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Google Code-in 2010-2011 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proposed Tasks ===&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to writing or refactoring code&lt;br /&gt;
&lt;br /&gt;
====  Documentation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to creating/editing documents&lt;br /&gt;
&lt;br /&gt;
====  Outreach ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to community management and outreach/marketing&lt;br /&gt;
&lt;br /&gt;
====  Quality Assurance ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to testing and ensuring code is of high quality&lt;br /&gt;
&lt;br /&gt;
====  Research ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to studying a problem and recommending solutions&lt;br /&gt;
&lt;br /&gt;
====  Training ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to helping others learn more&lt;br /&gt;
&lt;br /&gt;
====  Translation ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to localization&lt;br /&gt;
&lt;br /&gt;
====  User Interface ====&lt;br /&gt;
&lt;br /&gt;
Tasks related to user experience research or user interface design and interaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GCI]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Bug_Squad&amp;diff=29751</id>
		<title>Bug Squad</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Bug_Squad&amp;diff=29751"/>
		<updated>2010-08-12T10:48:32Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:workgroups_bugsquad.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
The Joomla! Bug Squad (JBS) is a team within the production working group. Their job is to identify and fix bugs in Joomla. This includes the following:&lt;br /&gt;
&lt;br /&gt;
* Scan the [http://forum.joomla.org/viewforum.php?f=199 Joomla! Bug Reporting Forum] and [http://forum.joomla.org/viewforum.php?f=579 Joomla! 1.6 Beta Bug Reporting Forum] for reported issues and help community members with solving these issues.&lt;br /&gt;
* Maintaining the [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=32 Version 1.5 Bug Tracker]] and [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 Version 1.6 Issue Tracker]] .&lt;br /&gt;
* Fix reported bugs and resolve reported issues according to the [[Bug Tracking Process]].&lt;br /&gt;
&lt;br /&gt;
The Bug Squad is also supporting with testing and quality assurance when a new major or minor version is developed. Generally speaking the bug-squad is in the lead when a version switches from beta-stage to the stable-stage within the development cycle of Joomla!&lt;br /&gt;
&lt;br /&gt;
The Bug Squad was created in December 2007. As of May 2010, JBS has been organised into the following teams:&lt;br /&gt;
* Tracker Team - monitors the forums and trackers&lt;br /&gt;
* Coding Team - creates patches for Confirmed Issues&lt;br /&gt;
* Testing Team - tests Pending issues&lt;br /&gt;
* Automated Testing Team - creates automated system and unit tests for tracker issues&lt;br /&gt;
* Migration / Upgrade Team - responsible for supporting migration and upgrading from the prior version to the current version.&lt;br /&gt;
&lt;br /&gt;
These teams are not rigid, and JBS members can participate in whatever activities they wish. The purpose of the teams is to make it easier for JBS members to focus their efforts and learn the skills required to successfully contribute to the project.&lt;br /&gt;
&lt;br /&gt;
If you are a member of the JBS, you might also like to join the JBS group at [http://people.joomla.org/groups/viewgroup/95-Joomla+Bug+Squad.html people.joomla.org].&lt;br /&gt;
&lt;br /&gt;
===Tracker Team===&lt;br /&gt;
This team has the very important and sometimes difficult job of filtering all of the forum posts and bug reports and sorting out which ones are real bugs that are ready to be worked on. From the standpoint of the tracker, their job is to move issues from Open status to Confirmed status. Of course, many issues will also be put into other status codes, including Information Required, Needs Review, Duplicate, Not a Bug, and so on.&lt;br /&gt;
&lt;br /&gt;
Before an issue is marked Confirmed, it needs to be reproduced and documented so that others can reproduce the problem.&lt;br /&gt;
&lt;br /&gt;
The Tracker Team should also make sure the issue has the correct Type and Priority. Remember, many users reporting bugs are not familiar with all of the fields and terminology. In many cases, this could be the user&#039;s first contribution or interaction with the project.&lt;br /&gt;
&lt;br /&gt;
It is critically important that all JBS members follow the Code of Conduct and show courtesy and respect in all tracker comments. Remember, we are the ambassadors of the Joomla! project, and the way we behave reflects on the whole project. People will naturally be unhappy if an issue they report is not taken seriously or if they feel that it was closed improperly. So we need to be sensitive to that fact, while of course making the what we believe to be the correct decision. For example, if you close an issue as Not a Bug, please put a comment in telling the reporter why in a nice way.&lt;br /&gt;
&lt;br /&gt;
Also, if someone is not following the Code of Conduct in a tracker comment, please point this out in a respectful way and remind the person that we need to follow the CoC at all times. If there is a persistent problem, please let your Team Leader or a JBS Coordinator know so we can take action. We absolutely do not want to tolerate rude or disrespectful behavior in the tracker or forum.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Tracker Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Coding Team===&lt;br /&gt;
The coding team works with Confirmed issues and creates patches to correct these issues if they haven&#039;t already been provided. When a patch is completed, and when a test plan has been added that tells the testers how to test the patch, the issue is changed to Pending status.&lt;br /&gt;
&lt;br /&gt;
Many times the first patch submitted for an issue will not be the actual patch that is committed to the SVN. There are many reasons for this. Someone else may have a different approach to the solving the issue, a tester might find a problem, or the person who submitted the patch will think of a better way to do it.&lt;br /&gt;
&lt;br /&gt;
It is important to be positive and flexible and not expect that every patch you submit will go straight into the SVN. That does not mean the work is not helpful or valuable. In many cases, it is not possible to get to the end result without going through one or more tries.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Bug Squad Coding Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Testing Team===&lt;br /&gt;
This team tests Pending issues and, when tests are successful, documents this and moves the issue to Ready to Commit status. At this point, one of the JBS coordinators will commit the patch to the SVN.&lt;br /&gt;
&lt;br /&gt;
Over time, we plan to include more automated testing into the process. Eventually, we would like every Ready to Commit issue have both a code patch and an automated system or unit test. Accordingly, it will be important for members of the testing team to be learning how to write and use system tests.&lt;br /&gt;
&lt;br /&gt;
There are some tips for testing in the wiki in the [[Testing Checklists]] article.&lt;br /&gt;
&lt;br /&gt;
===Automated Testing Team===&lt;br /&gt;
Automated testing is a key technology that we will incorporate into the workings of JBS. At the present, this is a somewhat specialized skill, so we will start by developing a separate team of people who are familiar with this and can help write automated tests and train other JBS members on automated testing. Our aim is to eventually make automated testing a routine part of fixing issues.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Automated Testing Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Migration / Upgrade Team===&lt;br /&gt;
This team is responsible for coding and documenting the upgrade process for users migrating sites or extensions from one version to the next (for example, from version 1.5 to 1.6). They will be responsible for creating and fixing issues in this area of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development Working Group]][[Category:Bug Squad]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Bug_Tracking_Process&amp;diff=29750</id>
		<title>Bug Tracking Process</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Bug_Tracking_Process&amp;diff=29750"/>
		<updated>2010-08-12T10:45:40Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Issue Priorities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
The [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=32 Joomla! Bug Tracker] is the place where all Joomla! bugs are tracked. This article documents the current Joomla! bug tracking process from the time a new bug is reported to the time it is closed.&lt;br /&gt;
&lt;br /&gt;
=Reporting Issues=&lt;br /&gt;
&lt;br /&gt;
[[Image:ReportingIssues.jpg|1024 px]]&lt;br /&gt;
&lt;br /&gt;
The process is normally started in one of two ways: the bug is added to the tracker, or a user reports the bug in the [http://forum.joomla.org/viewforum.php?f=199 Joomla! Bug Forum] for the given maintenance release.&lt;br /&gt;
&lt;br /&gt;
== Issues reported on the forum ==&lt;br /&gt;
&lt;br /&gt;
JBS members scan the forums to determine when issues need to be put into the tracker. If the issue can be reproduced, is clearly a bug, and there are step-by-step instructions for how to reproduce it, it can be entered into the tracker with a status of Confirmed. If it is not as clear-cut, it can be entered with a status of Open, so that other JBS members will know it needs further investigation.&lt;br /&gt;
&lt;br /&gt;
== Issues directly reported to the tracker ==&lt;br /&gt;
&lt;br /&gt;
When an issue is added to the tracker, the status will be either &lt;br /&gt;
1. Open &lt;br /&gt;
2. Confirmed&lt;br /&gt;
3. or Pending &lt;br /&gt;
depending on the situation. If the issue needs more investigation, then it should be set to Open. If the issue (1) is a bug and (2) can be reproduced and (3) has good test instructions, it should be set to Confirmed. If it meets the three Confirmed criteria and also has a good patch attached, it should be set to Pending. See below for more information about the status codes.&lt;br /&gt;
&lt;br /&gt;
== Issue Priorities ==&lt;br /&gt;
&lt;br /&gt;
Most issues are priority 3, or Normal. The artifacts are prioritized according to the following characteristics:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Critical (1):&#039;&#039;&#039;&lt;br /&gt;
The trunk is not working at all. Significant parts of the source are broken preventing key operations.  Examples would be login, installation, extension installers, javascript errors that prevent you from moving a save or similar action, etc.  Also includes the generation of Fatal PHP errors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Major (2):&#039;&#039;&#039;&lt;br /&gt;
Parts of the source are obstructing operation in a serious way or causing a major loss in advertised function.  Examples would includes PHP notices and warnings and reported javascript errors.  Major issues will also typically prevent the release cycle from moving from Beta to Release Candidate (RC), or Release Candidate to General Availability (GA).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Normal: (3)&#039;&#039;&#039;&lt;br /&gt;
Issues that are hindering advertised behavior but the application is still workable.  Examples would include parameters not working as advertised, language files not loading as expected, etc.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Minor (4):&#039;&#039;&#039;&lt;br /&gt;
Minor loss of function and generally annoying behavior.  May include less common platform or browser specific problems that while they may be technically major in those environments, they represent a minority.  Also include missing translation strings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trivial (5):&#039;&#039;&#039;&lt;br /&gt;
Cosmetic problems, misspelled words, graphically misaligned object, less common issues with parameters, etc.&lt;br /&gt;
&lt;br /&gt;
= Resolving Issues =&lt;br /&gt;
&lt;br /&gt;
The bug squad takes care of the 1.5 release which is now in maintenance mode. That means getting the 1.5.1, 1.5.2, 1.5.3, 1.5.4  etc releases ready by fixing problems that come up. The idea is to make the release increasingly stable and take care of issues that come up. At the same time, it is vitally important not to break anything that is working. That&#039;s called software regression and it&#039;s not something you want at this stage.&lt;br /&gt;
&lt;br /&gt;
In the 1.5 tracker there are several common statuses, mainly: open, confirmed, pending, ready to commit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Open&#039;&#039;&#039; means it&#039;s reported, but it hasn&#039;t been determined for sure whether it is a real bug or not. Many Open issues are not actually bugs. If the issue fits into one of the categories below, then the status is changed as indicated and the bug is closed:&lt;br /&gt;
** Cannot be reproduced. We have tried the same thing the reported did but the software appears to work correctly. (In many cases, more information is needed to be able to reproduce a bug. See &amp;quot;Information Required&amp;quot; below.) Change status to &#039;&#039;&#039;Unable to confirm&#039;&#039;&#039;.&lt;br /&gt;
** Has already been reported in a different issue number. Change status to &#039;&#039;&#039;Duplicate report&#039;&#039;&#039; and add the number on the duplicates tab.&lt;br /&gt;
** Is a known limitation of the software. Change status to &#039;&#039;&#039;Known issue&#039;&#039;&#039;.&lt;br /&gt;
** Is a feature request, a mistake made by a user, or is the way the software is intended to work. Change status to &#039;&#039;&#039;Not a bug&#039;&#039;&#039;.&lt;br /&gt;
** Is a bug with an extension or some other external program. Change status to &#039;&#039;&#039;Not Joomla! core&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Information Required&#039;&#039;&#039; is used if we need more information &#039;&#039;from the person who reported the issue&#039;&#039; to decide about the issue. For example, there are questions about how to reproduce the problem or other questions about the issue. If we get the information we need, then we can continue processing the issue. If we don&#039;t get the information within two weeks, then we can change the status to Unable to confirm (or another of the closed status codes if that is more applicable).&lt;br /&gt;
* &#039;&#039;&#039;Needs Review&#039;&#039;&#039; is used if we need a JBS Coordinator, Development Coordinator, or other experienced developer to review the issue. This is different from Information Required, which means that we need more information from the person who reported the issue.&lt;br /&gt;
* &#039;&#039;&#039;Confirmed&#039;&#039;&#039; means that JBS has confirmed that this issue is a bug in Joomla! that should be fixed. That&#039;s when the JBS tries to solve it or consults with the development team about a solution. &#039;&#039;At this point there should be clear step-by-step test instructions that indicate how to reproduce the problem.&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;Pending&#039;&#039;&#039; means that a patch has been submitted that a JBS member or development coordinator or appropriate leadership team member believes fixes the bug. If needed, additional test instructions are entered for the issue. Every Pending issue should have instructions that tell the tester how to reproduce the problem and make sure the patch fixes the problem.&lt;br /&gt;
* &#039;&#039;&#039;Ready to commit&#039;&#039;&#039; means that two separate people have successfully tested the same patch file, and it works correctly with the patch. Note that, for some issues that are more complex or higher impact, we may need more than two people to test or may need to test on multiple platforms. &lt;br /&gt;
* &#039;&#039;&#039;Fixed in SVN&#039;&#039;&#039; means that, after reviewing the code, the JBS commit coordinators have determined that the patch is good and the change has been committed to the Joomla! codebase. At this point, it will be part of the next Joomla! maintenance release.&lt;br /&gt;
&lt;br /&gt;
The flowchart below provides a visual guide to how the process for resolving bugs works.&lt;br /&gt;
&lt;br /&gt;
[[Image:ResolvingIssues.jpg|1024 px]]&lt;br /&gt;
&lt;br /&gt;
You do &#039;&#039;not&#039;&#039; need to be a member of the JBS to help fix bugs in Joomla. Anyone can report bugs, test patches, or submit patches. If you want to help with resolving bugs, go to the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=32 Tracker]. You can help resolve Open issues as outlined above. You can create and submit patches for Confirmed issues. Or you can help test Pending issues. To report about what you have done, login to joomlacode and add a comment. You&#039;ll be amazed at how much impact you can have and how good it feels to contribute to the Joomla! project.&lt;br /&gt;
&lt;br /&gt;
If you have any questions, or are interested in joining the JBS, please contact the [http://community.joomla.org/magazine/author/75-mark-dexter.html JBS Coordinator]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development Working Group]][[Category:Bug Squad]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Bug_Squad&amp;diff=29749</id>
		<title>Bug Squad</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Bug_Squad&amp;diff=29749"/>
		<updated>2010-08-12T10:41:59Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Tracker Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:workgroups_bugsquad.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
The Joomla! Bug Squad (JBS) is a team within the production working group. Their job is to identify and fix bugs in Joomla. This includes the following:&lt;br /&gt;
&lt;br /&gt;
* Scan the [http://forum.joomla.org/viewforum.php?f=199 Joomla! Bug Reporting Forum] and [http://forum.joomla.org/viewforum.php?f=579 Joomla! 1.6 Beta Bug Reporting Forum] for reported issues and help community members with solving these issues.&lt;br /&gt;
* Maintaining the [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=32 Version 1.5 Bug Tracker]] and [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 Version 1.6 Issue Tracker]] .&lt;br /&gt;
* Fix reported bugs and resolve reported issues according to the [[Bug Tracking Process]].&lt;br /&gt;
&lt;br /&gt;
The Bug Squad is also supporting with testing and quality assurance when a new major or minor version is developed. Generally speaking the bug-squad is in the lead when a version switches from beta-stage to the stable-stage within the development cycle of Joomla!&lt;br /&gt;
&lt;br /&gt;
The Bug Squad was created in December 2007. As of May 2010, JBS has been organised into the following teams:&lt;br /&gt;
* Tracker Team - monitors the forums and trackers&lt;br /&gt;
* Coding Team - creates patches for Confirmed Issues&lt;br /&gt;
* Testing Team - tests Pending issues&lt;br /&gt;
* Automated Testing Team - creates automated system and unit tests for tracker issues&lt;br /&gt;
* Migration / Upgrade Team - responsible for supporting migration and upgrading from the prior version to the current version.&lt;br /&gt;
&lt;br /&gt;
These teams are not rigid, and JBS members can participate in whatever activities they wish. The purpose of the teams is to make it easier for JBS members to focus their efforts and learn the skills required to successfully contribute to the project.&lt;br /&gt;
&lt;br /&gt;
===Tracker Team===&lt;br /&gt;
This team has the very important and sometimes difficult job of filtering all of the forum posts and bug reports and sorting out which ones are real bugs that are ready to be worked on. From the standpoint of the tracker, their job is to move issues from Open status to Confirmed status. Of course, many issues will also be put into other status codes, including Information Required, Needs Review, Duplicate, Not a Bug, and so on.&lt;br /&gt;
&lt;br /&gt;
Before an issue is marked Confirmed, it needs to be reproduced and documented so that others can reproduce the problem.&lt;br /&gt;
&lt;br /&gt;
The Tracker Team should also make sure the issue has the correct Type and Priority. Remember, many users reporting bugs are not familiar with all of the fields and terminology. In many cases, this could be the user&#039;s first contribution or interaction with the project.&lt;br /&gt;
&lt;br /&gt;
It is critically important that all JBS members follow the Code of Conduct and show courtesy and respect in all tracker comments. Remember, we are the ambassadors of the Joomla! project, and the way we behave reflects on the whole project. People will naturally be unhappy if an issue they report is not taken seriously or if they feel that it was closed improperly. So we need to be sensitive to that fact, while of course making the what we believe to be the correct decision. For example, if you close an issue as Not a Bug, please put a comment in telling the reporter why in a nice way.&lt;br /&gt;
&lt;br /&gt;
Also, if someone is not following the Code of Conduct in a tracker comment, please point this out in a respectful way and remind the person that we need to follow the CoC at all times. If there is a persistent problem, please let your Team Leader or a JBS Coordinator know so we can take action. We absolutely do not want to tolerate rude or disrespectful behavior in the tracker or forum.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Tracker Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Coding Team===&lt;br /&gt;
The coding team works with Confirmed issues and creates patches to correct these issues if they haven&#039;t already been provided. When a patch is completed, and when a test plan has been added that tells the testers how to test the patch, the issue is changed to Pending status.&lt;br /&gt;
&lt;br /&gt;
Many times the first patch submitted for an issue will not be the actual patch that is committed to the SVN. There are many reasons for this. Someone else may have a different approach to the solving the issue, a tester might find a problem, or the person who submitted the patch will think of a better way to do it.&lt;br /&gt;
&lt;br /&gt;
It is important to be positive and flexible and not expect that every patch you submit will go straight into the SVN. That does not mean the work is not helpful or valuable. In many cases, it is not possible to get to the end result without going through one or more tries.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Bug Squad Coding Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Testing Team===&lt;br /&gt;
This team tests Pending issues and, when tests are successful, documents this and moves the issue to Ready to Commit status. At this point, one of the JBS coordinators will commit the patch to the SVN.&lt;br /&gt;
&lt;br /&gt;
Over time, we plan to include more automated testing into the process. Eventually, we would like every Ready to Commit issue have both a code patch and an automated system or unit test. Accordingly, it will be important for members of the testing team to be learning how to write and use system tests.&lt;br /&gt;
&lt;br /&gt;
There are some tips for testing in the wiki in the [[Testing Checklists]] article.&lt;br /&gt;
&lt;br /&gt;
===Automated Testing Team===&lt;br /&gt;
Automated testing is a key technology that we will incorporate into the workings of JBS. At the present, this is a somewhat specialized skill, so we will start by developing a separate team of people who are familiar with this and can help write automated tests and train other JBS members on automated testing. Our aim is to eventually make automated testing a routine part of fixing issues.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Automated Testing Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Migration / Upgrade Team===&lt;br /&gt;
This team is responsible for coding and documenting the upgrade process for users migrating sites or extensions from one version to the next (for example, from version 1.5 to 1.6). They will be responsible for creating and fixing issues in this area of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development Working Group]][[Category:Bug Squad]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Bug_Squad&amp;diff=29748</id>
		<title>Bug Squad</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Bug_Squad&amp;diff=29748"/>
		<updated>2010-08-12T10:35:41Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Automated Testing Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:workgroups_bugsquad.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
The Joomla! Bug Squad (JBS) is a team within the production working group. Their job is to identify and fix bugs in Joomla. This includes the following:&lt;br /&gt;
&lt;br /&gt;
* Scan the [http://forum.joomla.org/viewforum.php?f=199 Joomla! Bug Reporting Forum] and [http://forum.joomla.org/viewforum.php?f=579 Joomla! 1.6 Beta Bug Reporting Forum] for reported issues and help community members with solving these issues.&lt;br /&gt;
* Maintaining the [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=32 Version 1.5 Bug Tracker]] and [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 Version 1.6 Issue Tracker]] .&lt;br /&gt;
* Fix reported bugs and resolve reported issues according to the [[Bug Tracking Process]].&lt;br /&gt;
&lt;br /&gt;
The Bug Squad is also supporting with testing and quality assurance when a new major or minor version is developed. Generally speaking the bug-squad is in the lead when a version switches from beta-stage to the stable-stage within the development cycle of Joomla!&lt;br /&gt;
&lt;br /&gt;
The Bug Squad was created in December 2007. As of May 2010, JBS has been organised into the following teams:&lt;br /&gt;
* Tracker Team - monitors the forums and trackers&lt;br /&gt;
* Coding Team - creates patches for Confirmed Issues&lt;br /&gt;
* Testing Team - tests Pending issues&lt;br /&gt;
* Automated Testing Team - creates automated system and unit tests for tracker issues&lt;br /&gt;
* Migration / Upgrade Team - responsible for supporting migration and upgrading from the prior version to the current version.&lt;br /&gt;
&lt;br /&gt;
These teams are not rigid, and JBS members can participate in whatever activities they wish. The purpose of the teams is to make it easier for JBS members to focus their efforts and learn the skills required to successfully contribute to the project.&lt;br /&gt;
&lt;br /&gt;
===Tracker Team===&lt;br /&gt;
This team has the very important and difficult job of filtering all of the forum posts and bug reports and sorting out which ones are real bugs that are ready to be worked on. From the standpoint of the tracker, their job is to move issues from Open status to Confirmed status. Of course, many issues will also be put into other status codes, including Information Required, Needs Review, Duplicate, Not a Bug, and so on.&lt;br /&gt;
&lt;br /&gt;
Before an issue is marked Confirmed, it needs to be reproduced and documented so that others can reproduce the problem.&lt;br /&gt;
&lt;br /&gt;
The Tracker Team should also make sure the issue has the correct Type and Priority. Remember, many users reporting bugs are not familiar with all of the fields and terminology. In many cases, this could be the user&#039;s first contribution or interaction with the project.&lt;br /&gt;
&lt;br /&gt;
It is critically important that all JBS members follow the code of conduct and show courtesy and respect in all tracker comments. Remember, we are the ambassadors of the Joomla! project, and the way we behave reflects on the whole project. People will naturally be unhappy if an issue they report is not taken seriously or if they feel that it was closed improperly. So we need to be sensitive to that fact, while of course making the what we believe to be the correct decision. So, for example, if you close an issue as Not a Bug, please put a comment in telling the reporter why in a nice way.&lt;br /&gt;
&lt;br /&gt;
Also, if someone is not following the Code of Conduct in a tracker comment, please point this out in a respectful way and remind the person that we need to follow the CoC at all times. If there is a persistent problem, please let your Team Leader or a JBS Coordinator know so we can take action. We absolutely do not want to tolerate rude or disrespectful behavior in the tracker or forum.&lt;br /&gt;
&lt;br /&gt;
===Coding Team===&lt;br /&gt;
The coding team works with Confirmed issues and creates patches to correct these issues if they haven&#039;t already been provided. When a patch is completed, and when a test plan has been added that tells the testers how to test the patch, the issue is changed to Pending status.&lt;br /&gt;
&lt;br /&gt;
Many times the first patch submitted for an issue will not be the actual patch that is committed to the SVN. There are many reasons for this. Someone else may have a different approach to the solving the issue, a tester might find a problem, or the person who submitted the patch will think of a better way to do it.&lt;br /&gt;
&lt;br /&gt;
It is important to be positive and flexible and not expect that every patch you submit will go straight into the SVN. That does not mean the work is not helpful or valuable. In many cases, it is not possible to get to the end result without going through one or more tries.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Bug Squad Coding Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Testing Team===&lt;br /&gt;
This team tests Pending issues and, when tests are successful, documents this and moves the issue to Ready to Commit status. At this point, one of the JBS coordinators will commit the patch to the SVN.&lt;br /&gt;
&lt;br /&gt;
Over time, we plan to include more automated testing into the process. Eventually, we would like every Ready to Commit issue have both a code patch and an automated system or unit test. Accordingly, it will be important for members of the testing team to be learning how to write and use system tests.&lt;br /&gt;
&lt;br /&gt;
There are some tips for testing in the wiki in the [[Testing Checklists]] article.&lt;br /&gt;
&lt;br /&gt;
===Automated Testing Team===&lt;br /&gt;
Automated testing is a key technology that we will incorporate into the workings of JBS. At the present, this is a somewhat specialized skill, so we will start by developing a separate team of people who are familiar with this and can help write automated tests and train other JBS members on automated testing. Our aim is to eventually make automated testing a routine part of fixing issues.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Automated Testing Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Migration / Upgrade Team===&lt;br /&gt;
This team is responsible for coding and documenting the upgrade process for users migrating sites or extensions from one version to the next (for example, from version 1.5 to 1.6). They will be responsible for creating and fixing issues in this area of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development Working Group]][[Category:Bug Squad]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Bug_Squad&amp;diff=29747</id>
		<title>Bug Squad</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Bug_Squad&amp;diff=29747"/>
		<updated>2010-08-12T10:34:14Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Coding Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:workgroups_bugsquad.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
The Joomla! Bug Squad (JBS) is a team within the production working group. Their job is to identify and fix bugs in Joomla. This includes the following:&lt;br /&gt;
&lt;br /&gt;
* Scan the [http://forum.joomla.org/viewforum.php?f=199 Joomla! Bug Reporting Forum] and [http://forum.joomla.org/viewforum.php?f=579 Joomla! 1.6 Beta Bug Reporting Forum] for reported issues and help community members with solving these issues.&lt;br /&gt;
* Maintaining the [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=32 Version 1.5 Bug Tracker]] and [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 Version 1.6 Issue Tracker]] .&lt;br /&gt;
* Fix reported bugs and resolve reported issues according to the [[Bug Tracking Process]].&lt;br /&gt;
&lt;br /&gt;
The Bug Squad is also supporting with testing and quality assurance when a new major or minor version is developed. Generally speaking the bug-squad is in the lead when a version switches from beta-stage to the stable-stage within the development cycle of Joomla!&lt;br /&gt;
&lt;br /&gt;
The Bug Squad was created in December 2007. As of May 2010, JBS has been organised into the following teams:&lt;br /&gt;
* Tracker Team - monitors the forums and trackers&lt;br /&gt;
* Coding Team - creates patches for Confirmed Issues&lt;br /&gt;
* Testing Team - tests Pending issues&lt;br /&gt;
* Automated Testing Team - creates automated system and unit tests for tracker issues&lt;br /&gt;
* Migration / Upgrade Team - responsible for supporting migration and upgrading from the prior version to the current version.&lt;br /&gt;
&lt;br /&gt;
These teams are not rigid, and JBS members can participate in whatever activities they wish. The purpose of the teams is to make it easier for JBS members to focus their efforts and learn the skills required to successfully contribute to the project.&lt;br /&gt;
&lt;br /&gt;
===Tracker Team===&lt;br /&gt;
This team has the very important and difficult job of filtering all of the forum posts and bug reports and sorting out which ones are real bugs that are ready to be worked on. From the standpoint of the tracker, their job is to move issues from Open status to Confirmed status. Of course, many issues will also be put into other status codes, including Information Required, Needs Review, Duplicate, Not a Bug, and so on.&lt;br /&gt;
&lt;br /&gt;
Before an issue is marked Confirmed, it needs to be reproduced and documented so that others can reproduce the problem.&lt;br /&gt;
&lt;br /&gt;
The Tracker Team should also make sure the issue has the correct Type and Priority. Remember, many users reporting bugs are not familiar with all of the fields and terminology. In many cases, this could be the user&#039;s first contribution or interaction with the project.&lt;br /&gt;
&lt;br /&gt;
It is critically important that all JBS members follow the code of conduct and show courtesy and respect in all tracker comments. Remember, we are the ambassadors of the Joomla! project, and the way we behave reflects on the whole project. People will naturally be unhappy if an issue they report is not taken seriously or if they feel that it was closed improperly. So we need to be sensitive to that fact, while of course making the what we believe to be the correct decision. So, for example, if you close an issue as Not a Bug, please put a comment in telling the reporter why in a nice way.&lt;br /&gt;
&lt;br /&gt;
Also, if someone is not following the Code of Conduct in a tracker comment, please point this out in a respectful way and remind the person that we need to follow the CoC at all times. If there is a persistent problem, please let your Team Leader or a JBS Coordinator know so we can take action. We absolutely do not want to tolerate rude or disrespectful behavior in the tracker or forum.&lt;br /&gt;
&lt;br /&gt;
===Coding Team===&lt;br /&gt;
The coding team works with Confirmed issues and creates patches to correct these issues if they haven&#039;t already been provided. When a patch is completed, and when a test plan has been added that tells the testers how to test the patch, the issue is changed to Pending status.&lt;br /&gt;
&lt;br /&gt;
Many times the first patch submitted for an issue will not be the actual patch that is committed to the SVN. There are many reasons for this. Someone else may have a different approach to the solving the issue, a tester might find a problem, or the person who submitted the patch will think of a better way to do it.&lt;br /&gt;
&lt;br /&gt;
It is important to be positive and flexible and not expect that every patch you submit will go straight into the SVN. That does not mean the work is not helpful or valuable. In many cases, it is not possible to get to the end result without going through one or more tries.&lt;br /&gt;
&lt;br /&gt;
For more information see the [[Bug Squad Coding Team]] page.&lt;br /&gt;
&lt;br /&gt;
===Testing Team===&lt;br /&gt;
This team tests Pending issues and, when tests are successful, documents this and moves the issue to Ready to Commit status. At this point, one of the JBS coordinators will commit the patch to the SVN.&lt;br /&gt;
&lt;br /&gt;
Over time, we plan to include more automated testing into the process. Eventually, we would like every Ready to Commit issue have both a code patch and an automated system or unit test. Accordingly, it will be important for members of the testing team to be learning how to write and use system tests.&lt;br /&gt;
&lt;br /&gt;
There are some tips for testing in the wiki in the [[Testing Checklists]] article.&lt;br /&gt;
&lt;br /&gt;
===Automated Testing Team===&lt;br /&gt;
Automated testing is a key technology that we will incorporate into the workings of JBS. At the present, this is a somewhat specialized skill, so we will start by developing a separate team of people who are familiar with this and can help write automated tests and train other JBS members on automated testing. Our aim is to eventually make automated testing a routine part of fixing issues.&lt;br /&gt;
&lt;br /&gt;
===Migration / Upgrade Team===&lt;br /&gt;
This team is responsible for coding and documenting the upgrade process for users migrating sites or extensions from one version to the next (for example, from version 1.5 to 1.6). They will be responsible for creating and fixing issues in this area of the code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development Working Group]][[Category:Bug Squad]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Bug_Squad_Coding_Team&amp;diff=28174</id>
		<title>Bug Squad Coding Team</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Bug_Squad_Coding_Team&amp;diff=28174"/>
		<updated>2010-05-27T21:50:40Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;quot;Golden Path&amp;quot; for any issue (which are usually bugs but can sometimes be other things) in any Joomla release is that it moves through the following statii:&lt;br /&gt;
&lt;br /&gt;
Open &amp;amp;rarr; Confirmed &amp;amp;rarr; Pending &amp;amp;rarr; Ready to Commit &amp;amp;rarr; Fixed in SVN&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Coding Team&#039;&#039;&#039; is responsible for the part of the process that moves issues from &#039;&#039;&#039;Confirmed&#039;&#039;&#039; to &#039;&#039;&#039;Pending&#039;&#039;&#039;.  If the bug squad was run like a hospital, then the coding team is like the doctors and specialist that perform surgery on patients that have come up from the emergency room triage.&lt;br /&gt;
&lt;br /&gt;
To be involved in the Coding Team you should either know, or be prepared to learn, the following:&lt;br /&gt;
&lt;br /&gt;
* The PHP programming language;&lt;br /&gt;
* SQL syntax;&lt;br /&gt;
* How to checkout and update a Subversion (SVN) source code repository;&lt;br /&gt;
* How to create, apply and analyse a &amp;quot;patch file&amp;quot;; and&lt;br /&gt;
* The basic principles of Object Oriented Programming (OOP for short).&lt;br /&gt;
&lt;br /&gt;
Does that sound a bit scary? If it does, it basically boils down to if you want to be a part of the coding team, you need to have some programming skills.  If you are a beginner programmer, then the Coding Team is going to be like going to the gym regularly. You&#039;ll start out very sore and your brain will probably hurt, but after a while those bugs are going to be no match for you. Stick with it and you&#039;ll come out of your tour of duty with some pretty serious programming punch, not to mention a wealth of experience passed down from other Joomla Jedi masters.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Testing Team&#039;&#039;&#039; has gone before you ensuring that issues move to Confirmed are the real deal (as far as they can tell).  As a member of the Coding Team, 99% of your work will be to devise a code patch to rectify the issue that has been raised.  You also need to include a test plan so that the people that follow you actually know how to work out whether the issue has been fixed. Once you do this, you&#039;ll upload the patch to the issue and then set the status to &#039;&#039;&#039;Pending&#039;&#039;&#039;.  When this happens the &#039;&#039;&#039;Testing Team&#039;&#039;&#039; will pick up you patch and make sure that it applies without any conflicts, and then follow your test plan to verify the patch does the job.  All going well, the Testing Team will then promote the issuse to &#039;&#039;&#039;Ready to Commit&#039;&#039;&#039; and you can start to relax and think about shore leave ... after you&#039;ve finished all the other issues of course.&lt;br /&gt;
&lt;br /&gt;
It&#039;s entirely possible that things will go this smoothly, but just as often they don&#039;t. &lt;br /&gt;
&lt;br /&gt;
Sometimes you will need to ask for more information from the person that raised the issue if the root cause of the problem is not immediately obvious. This could be a very short conversation, or it could go on for quite some time depending on the complexity of the issue.  If you begin to enter into a long dialogue, it is advisable to change the status to &#039;&#039;&#039;In Progress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sometimes an issue just seems impossible to work out, or you might be concerned that your patch is going to have side effects on other parts of the framework.  In this case, change the status to &#039;&#039;&#039;Needs review&#039;&#039;&#039; and one of the Joomla Jedi&#039;s will take a look and see if they can assist with the problem.&lt;br /&gt;
&lt;br /&gt;
Whenever a problem is being solved in the framework (those are all the files under the &amp;lt;code&amp;gt;/libraries/&amp;lt;/code&amp;gt; folder), you are encouraged to write or update the Unit Tests for the part of the code you are fixing.  This is not always possible but should always be attempted as a general rule.&lt;br /&gt;
&lt;br /&gt;
When you are making changes to layouts, you need to be mindful that both frontend and backend templates use layout overrides. In Joomla 1.6, Beez2 on the frontend uses layout overrides to provide HTML5 support and Hathor in the backend uses layout overrides extensively to provide accessibility support.  When you make patches to layouts make sure that you do any related layouts in the core templates as well.&lt;br /&gt;
&lt;br /&gt;
Members of the Coding Team also need to be very disciplined and have good attention to detail. Joomla has a strong tradition of following a published coding style, and it is your job to ensure it is upheld at all times. Beautiful code is easier to read and easier to debug. Always be mindful that you are in a team, and that team involves the future generations of Joomla developers that you haven&#039;t even met yet (and sometimes even your future self).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development Working Group]][[Category:Bug Squad]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Bug_Squad_Coding_Team&amp;diff=28138</id>
		<title>Bug Squad Coding Team</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Bug_Squad_Coding_Team&amp;diff=28138"/>
		<updated>2010-05-27T08:19:22Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: New page: The &amp;quot;Gloden Path&amp;quot; for any issue (which are usually bugs but can sometimes be other things) in any Joomla release is that it moves through the following statii:  Open &amp;amp;rarr; Confirmed &amp;amp;rarr...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;quot;Gloden Path&amp;quot; for any issue (which are usually bugs but can sometimes be other things) in any Joomla release is that it moves through the following statii:&lt;br /&gt;
&lt;br /&gt;
Open &amp;amp;rarr; Confirmed &amp;amp;rarr; Pending &amp;amp;rarr; Ready to Commit &amp;amp;rarr; Fixed in SVN&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Coding Team&#039;&#039;&#039; is responsible for the part of the process that moves issues from &#039;&#039;&#039;Confirmed&#039;&#039;&#039; to &#039;&#039;&#039;Pending&#039;&#039;&#039;.  If the bug squad was run like a hospital, then the coding team is like the doctors and specialist that perform surgery on patients that have come up from the emergency room triage.&lt;br /&gt;
&lt;br /&gt;
To be involved in the Coding Team you should either know, or be prepared to learn, the following:&lt;br /&gt;
&lt;br /&gt;
* The PHP programming language;&lt;br /&gt;
* SQL syntax;&lt;br /&gt;
* How to checkout and update a Subversion (SVN) source code repository;&lt;br /&gt;
* How to create, apply and analyse a &amp;quot;patch file&amp;quot;; and&lt;br /&gt;
* The basic principles of Object Oriented Programming (OOP for short).&lt;br /&gt;
&lt;br /&gt;
Does that sound a bit scary? If it does, it basically boils down to if you want to be a part of the coding team, you need to have some programming skills.  If you are a beginner programmer, then the Coding Team is going to be like going to the gym regularly. You&#039;ll start out very sore and your brain will probably hurt, but after a while those bugs are going to be no match for you. Stick with it and you&#039;ll come out of your tour of duty with some pretty serious programming punch, not to mention a wealth of experience passed down from other Joomla Jedi masters.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Testing Team&#039;&#039;&#039; has gone before you ensuring that issues move to Confirmed are the real deal (as far as they can tell).  As a member of the Coding Team, 99% of your work will be to devise a code patch to rectify the issue that has been raised.  You also need to include a test plan so that the people that follow you actually know how to work out whether the issue has been fixed. Once you do this, you&#039;ll upload the patch to the issue and then set the status to &#039;&#039;&#039;Pending&#039;&#039;&#039;.  When this happens the &#039;&#039;&#039;Testing Team&#039;&#039;&#039; will pick up you patch and make sure that it applies without any conflicts, and then follow your test plan to verify the patch does the job.  All going well, the Testing Team will then promote the issuse to &#039;&#039;&#039;Ready to Commit&#039;&#039;&#039; and you can start to relax and think about shore leave ... after you&#039;ve finished all the other issues of course.&lt;br /&gt;
&lt;br /&gt;
It&#039;s entirely possible that things will go this smoothly, but just as often they don&#039;t. &lt;br /&gt;
&lt;br /&gt;
Sometimes you will need to ask for more information from the person that raised the issue if the root cause of the problem is not immediately obvious. This could be a very short conversation, or it could go on for quite some time depending on the complexity of the issue.  If you begin to enter into a long dialogue, it is advisable to change the status to &#039;&#039;&#039;In Progress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sometimes an issue just seems impossible to work out, or you might be concerned that your patch is going to have side effects on other parts of the framework.  In this case, change the status to &#039;&#039;&#039;Needs review&#039;&#039;&#039; and one of the Joomla Jedi&#039;s will take a look and see if they can assist with the problem.&lt;br /&gt;
&lt;br /&gt;
Whenever a problem is being solved in the framework (those are all the files under the &amp;lt;code&amp;gt;/libraries/&amp;lt;/code&amp;gt; folder), you are encouraged to write or update the Unit Tests for the part of the code you are fixing.  This is not always possible but should always be attempted as a general rule.&lt;br /&gt;
&lt;br /&gt;
When you are making changes to layouts, you need to be mindful that both frontend and backend templates use layout overrides. In Joomla 1.6, Beez2 on the frontend uses layout overrides to provide HTML5 support and Hathor in the backend uses layout overrides extensively to provide accessibility support.  When you make patches to layouts make sure that you do any related layouts in the core templates as well.&lt;br /&gt;
&lt;br /&gt;
Members of the Coding Team also need to be very disciplined and have good attention to detail. Joomla has a strong tradition of following a published coding style, and it is your job to ensure it is upheld at all times. Beautiful code is easier to read and easier to debug. Always be mindful that you are in a team, and that team involves the future generations of Joomla developers that you haven&#039;t even met yet (and sometimes even your future self).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development Working Group]][[Category:Bug Squad]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Filing_bugs_and_issues&amp;diff=27681</id>
		<title>Filing bugs and issues</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Filing_bugs_and_issues&amp;diff=27681"/>
		<updated>2010-05-18T04:06:42Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Access the Joomla! development bug tracker. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reporting bugs ==&lt;br /&gt;
&lt;br /&gt;
To report a bug in the Joomla! bug trackers, you need to create an &amp;quot;artefact&amp;quot; (&#039;&#039;Editor&#039;s note: joomlacode.org uses the American spelling &amp;quot;artifact&amp;quot;, but our policy is to use British/Australian spellings throughout the documentation.&#039;&#039;). Once the artefact is created, the developers will check the validity of it and act accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Register an Account at joomlacode.org ===&lt;br /&gt;
[http://joomlacode.org/gf/account/?action=UserAdd Register]&lt;br /&gt;
&lt;br /&gt;
=== Access the Joomla! development bug tracker. ===&lt;br /&gt;
&lt;br /&gt;
*[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 Joomla! 1.6 Issue Tracker] - Active&lt;br /&gt;
*[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=32 Joomla! 1.5 Bug Tracker] - Active&lt;br /&gt;
*[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=5782 Joomla! 1.0 Bug Tracker] - Closed&lt;br /&gt;
&lt;br /&gt;
=== Check to see if the bug you want to report is already reported. ===&lt;br /&gt;
&lt;br /&gt;
A series of filters display the artefacts. Make sure Priority is set to &amp;quot;Any&amp;quot;, Assignee to &amp;quot;Any&amp;quot; and Status to &amp;quot;Any&amp;quot;, other filters to nothing. Mouse over the title of the artefacts to check their contents. If the issue you are experiencing is not already reported, click on the bottom-right Button &amp;quot;Add new Tracker Item&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A new screen will display and there, the more information you give, the easier it is for the developers.&lt;br /&gt;
&lt;br /&gt;
Fill as many fields as you can.&lt;br /&gt;
&lt;br /&gt;
* [[Priority]] : Use the default &amp;quot;Medium&amp;quot; except if you know the code enough to make another choice.&lt;br /&gt;
* PHP : Choose the version you are testing on.  You can find this information by clicking the Menu &amp;quot;Help&amp;quot;-&amp;gt;&amp;quot;System Info&amp;quot; in the Administrator back-end of Joomla!.&lt;br /&gt;
* Estimated Time : Leave this blank.&lt;br /&gt;
* Build : Type here the #SVN number if you know it, or Nightly Build date, or Version used if using a Released version.&lt;br /&gt;
* Browser : Self-explanatory.&lt;br /&gt;
* Database : The version of MySQL is also available in &amp;quot;Help&amp;quot; -&amp;gt; &amp;quot;System Info&amp;quot;.&lt;br /&gt;
* Status : Leave this to &amp;quot;Open&amp;quot;.&lt;br /&gt;
* Percent Complete : Leave this blank.&lt;br /&gt;
* Category : This one is more tricky. Use &amp;quot;Administration&amp;quot; if you do not know better.&lt;br /&gt;
* Customer : Use &amp;quot;User&amp;quot; if the issue is in front-end, &amp;quot;Developer&amp;quot; if the issue concerns an extension you are developing, &amp;quot;Administrator&amp;quot; in other cases.&lt;br /&gt;
* Web Server : The version/server type is also available in &amp;quot;Help&amp;quot; -&amp;gt; &amp;quot;System Info&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Provide a summary ===&lt;br /&gt;
&lt;br /&gt;
Describe in a few words the issues you are having. It is generally a good idea to use existing artefacts as examples if this is your first time reporting a bug.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Front-end: Warning such and such.&lt;br /&gt;
* Back-end: Unable to save article when &amp;quot;nameofplugin&amp;quot; is published.&lt;br /&gt;
&lt;br /&gt;
Note: Take care to be descriptive in your summary as this is the first thing the developers will see when they are perusing the tracker for something to fix.&lt;br /&gt;
 &lt;br /&gt;
=== Provide details about the bug ===&lt;br /&gt;
&lt;br /&gt;
This is the most important part of reporting the bug. Describe here step by step how you got the error you are noticing. Include all of the information that someone will need to re-trace your steps and see the problem. Remember: Your bug will not be fixed unless others can see the problem, so you want to be as clear and detailed as possible. You do not need to know anything about programming to write a great bug report. But if you do understand the code and think you know how to fix the bug, please include this in the report.&lt;br /&gt;
&lt;br /&gt;
The general format should be something like:&lt;br /&gt;
# &amp;quot;Here is &#039;&#039;exactly&#039;&#039; what I did.&amp;quot;&lt;br /&gt;
# &amp;quot;This is what happened.&amp;quot;&lt;br /&gt;
# &amp;quot;This is what I think should have happened.&amp;quot; &lt;br /&gt;
# &amp;quot;Other information, possible solution, proposed code patch.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The more details, the better. Also, it is important to reproduce the bug using the sample Joomla! website or with easy, clear instructions for how to set it up. Remember that others will not have access to your site&#039;s database, so you will need to be able to tell someone how to see the bug with data that is readily available -- the sample site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; What I did : Started with sample website. Everything was ok. I enabled &amp;quot;nameofplugin&amp;quot;. Try to save any article from back end.&lt;br /&gt;
; What happened : I get a blank screen and article is not saved. &lt;br /&gt;
; What should have happened : Articles should save correctly.&lt;br /&gt;
; Other information : These are the plugins enabled at the same time. SEF is on (or Off). My site is in a sub-folder. I also remark that... etc. Files such and such are the issues IMHO (if you know what you are talking about).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example B&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
; What I did : Navigate to Back-end. Click on &amp;quot;menu_name&amp;quot; Menu. &lt;br /&gt;
; What happened: Page opened is blank. &lt;br /&gt;
; What should have happened : Menu should have opened correctly.&lt;br /&gt;
; Other information : Any other menu works OK. etc.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Real-Life Example&#039;&#039;&#039;&lt;br /&gt;
; What I did &lt;br /&gt;
: Started with the sample website. &lt;br /&gt;
: Added an unpublished article from the back end, with Section=FAQ, Category=General. &lt;br /&gt;
: In the advanced parameters for the article, set Show Title to &amp;quot;No&amp;quot; and Print, PDF, and Email Icons to &amp;quot;Hide&amp;quot;. &lt;br /&gt;
: Save the article and navigate to front end. Login to the front end as admin and navigate to the Example Pages -&amp;gt; Category Blog menu item. &lt;br /&gt;
; What happened : The newly added article shows but there is no edit icon for the front-end user to click on.&lt;br /&gt;
; What should have happened : The edit icon should show, allowing a front end user to edit this article.&lt;br /&gt;
; Other information : This only happens with the rhuk_milkyway template. By changing this code [code proposed] in file [name and hierarchy of file], line(s) #, the issue looks solved on my settings.&lt;br /&gt;
&lt;br /&gt;
=== Add an attachment to your report ===&lt;br /&gt;
&lt;br /&gt;
To better describe the issue or/and propose a fix, you can add attachments to the artefact you are creating by using the &amp;quot;Browse&amp;quot; buttons at the bottom of the screen.&lt;br /&gt;
A screen capture of the page(s) concerned helps a lot. If you can, try to optimise the size of the image through an image editor.&lt;br /&gt;
If you know what part(s) of the code base to change, a patch [patches] or a full file where your changes are WELL shown will help the developers to solve the problem quicker.&lt;br /&gt;
&lt;br /&gt;
=== Finish and send in the report ===&lt;br /&gt;
&lt;br /&gt;
You will receive an e-mail confirming that you posted the artefact. When someone comments or asks for supplementary details or solves the issue, you will receive a notification e-mail and may reply if needed.&lt;br /&gt;
&lt;br /&gt;
=== Extra tips and tricks ===&lt;br /&gt;
&lt;br /&gt;
Well-written bug reports are incredibly helpful. However, there&#039;s a certain amount of overhead involved in working with any bug tracking system, so your help in keeping our ticket tracker as useful as possible is appreciated. In particular:&lt;br /&gt;
&lt;br /&gt;
* Do read the [http://docs.joomla.org/FAQs FAQ] to see if your issue might be a well-known question.&lt;br /&gt;
* Do search [http://joomlacode.org/gf/project/joomla/tracker/ the tracker] to see if your issue has already been filed.&lt;br /&gt;
* Do ask on [http://forum.joomla.org/index.php/board,199.0.html testing forums] first if you&#039;re not sure if what you&#039;re seeing is a bug.&lt;br /&gt;
* Do write complete, reproducible, specific bug reports. Include as much information as you possibly can, complete with code snippets, test cases, etc. A minimal example that illustrates the bug in a nice small test case is the best possible bug report.&lt;br /&gt;
* Don&#039;t use the tracker system to ask support questions. Use the [http://forum.joomla.org/ Joomla! forums], or the [irc://irc.freenode.net/joomla #joomla] IRC channel on freenode for that.&lt;br /&gt;
* Don&#039;t use the trackers to make large-scale feature requests. We like to discuss any big changes to Joomla!&#039;s core on the [http://forum.joomla.org/index.php#6 developers forums] before actually working on them.&lt;br /&gt;
* Don&#039;t reopen issues that have been marked &amp;quot;not a bug&amp;quot;. This mark means that the decision has been made that we can&#039;t or won&#039;t fix this particular issue. If you&#039;re not sure why, please ask on developer forums.&lt;br /&gt;
* Don&#039;t use the tracker for lengthy discussions, because they&#039;re likely to get lost. If a particular artefact is controversial, please move discussion to [http://forum.joomla.org/index.php#6 developer forums].&lt;br /&gt;
&lt;br /&gt;
== Reporting security issues ==&lt;br /&gt;
&lt;br /&gt;
Report security issues to security [at] joomla [dot] org. This is a private list only open to long-time, highly trusted Joomla! developers, and its archives are not publicly readable.&lt;br /&gt;
&lt;br /&gt;
In the event of a confirmed vulnerability in Joomla! itself, we will take the following actions:&lt;br /&gt;
&lt;br /&gt;
* Acknowledge to the reporter that we&#039;ve received the report and that a fix is forthcoming. We&#039;ll give a rough timeline and ask the reporter to keep the issue confidential until we announce it.&lt;br /&gt;
* Halt all other development as long as is needed to develop a fix, including patches against the current and two previous releases.&lt;br /&gt;
* Determine a go-public date for announcing the vulnerability and the fix. To try to mitigate a possible &amp;quot;arms race&amp;quot; between those applying the patch and those trying to exploit the hole, we will not announce security problems immediately.&lt;br /&gt;
* Publicly announce the vulnerability and the fix on the pre-determined go-public date. This will probably mean a new release of Joomla! but in some cases it may simply be patches against current releases.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:What%27s_new_in_Joomla_2.5&amp;diff=27656</id>
		<title>J2.5:What&#039;s new in Joomla 2.5</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:What%27s_new_in_Joomla_2.5&amp;diff=27656"/>
		<updated>2010-05-17T23:03:52Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: New page: Lots of things.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lots of things.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Summer_of_Code_2010_Project_Ideas&amp;diff=21793</id>
		<title>Summer of Code 2010 Project Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Summer_of_Code_2010_Project_Ideas&amp;diff=21793"/>
		<updated>2010-02-18T23:44:40Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Welcome! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Welcome!===&lt;br /&gt;
Welcome to the Joomla! Google Summer of Code (GSoC) 2010 project ideas page. As we move forward with the 2010 version of the Joomla! GSoC, we will use this page to develop possible project ideas. Please note that anyone who is interested can participate in this process. You do not have to be a GSoC student or mentor to suggest possible project ideas. Thanks!&lt;br /&gt;
&lt;br /&gt;
===Ideas===&lt;br /&gt;
&lt;br /&gt;
=====Improve Image Presentation Capabilities=====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* Expand the JHtml modal behaviour to support groups of images (eg Litebox or similar).&lt;br /&gt;
* A content plugin to support modal gallery displays or inline image sliders.&lt;br /&gt;
* A module to support galleries of images.&lt;br /&gt;
&lt;br /&gt;
=====Audio/Video Support=====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* Sourcing or creating a FOSS flash audio (see http://flash-mp3-player.net/) and video player.&lt;br /&gt;
* A content plugin to support embedding different types of audio files easily in content.&lt;br /&gt;
* A content plugin to support embedding different types of video files (both local and hosted, eg vimeo) easily in content.&lt;br /&gt;
&lt;br /&gt;
=====Google Map Support=====&lt;br /&gt;
&lt;br /&gt;
This project could include:&lt;br /&gt;
&lt;br /&gt;
* An editor-xtd plugin that allows you to insert &amp;quot;map code&amp;quot; for a content plugin.&lt;br /&gt;
* A content plugin to display a map with content.&lt;br /&gt;
* A module to display a map.&lt;br /&gt;
* Support for finding directions.&lt;br /&gt;
&lt;br /&gt;
=====Simple User Subscription and User Utilities=====&lt;br /&gt;
&lt;br /&gt;
This project would be suite of extensions that would provide enhanced user features such as:&lt;br /&gt;
&lt;br /&gt;
* Allow you to manage user account expiry.&lt;br /&gt;
* Allow you to manage password expiry.&lt;br /&gt;
* Allow for configurable email messages.&lt;br /&gt;
* Allow for user registration approval.&lt;br /&gt;
* Clean up bad user records.&lt;br /&gt;
* Run simple reports on user registration data.&lt;br /&gt;
&lt;br /&gt;
=====Extension Builder=====&lt;br /&gt;
&lt;br /&gt;
This project would involve a component that builds other components, modules, plugins, languages and templates in skeletal form. It could also be used to create/edit new component and module layout overrides in templates.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Database_schema_standards&amp;diff=16285</id>
		<title>Archived:Database schema standards</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Database_schema_standards&amp;diff=16285"/>
		<updated>2009-11-02T01:22:21Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: New page: == Table Naming Conventions ==   == Field Naming Conventions ==   == Field Type Recommendations ==&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Table Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Field Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Field Type Recommendations ==&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11320</id>
		<title>Coding style and standards</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11320"/>
		<updated>2008-10-23T10:06:46Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Added condensed version for layout files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
remark: The following information has been copied from the old WIKI archive has not yet been reviewed.&lt;br /&gt;
See: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,standards:coding/&lt;br /&gt;
&lt;br /&gt;
Good coding standards are important in any development project, but particularly when multiple developers are working on the same project. Having coding standards helps ensure that the code is of high quality, has fewer bugs, and is easily maintained.&lt;br /&gt;
&lt;br /&gt;
First rule, if in doubt, ask.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
All files contributed to Joomla must:&lt;br /&gt;
&lt;br /&gt;
* Be stored as ASCII text&lt;br /&gt;
* Use UTF-8 character encoding&lt;br /&gt;
* Be Unix formatted&lt;br /&gt;
** Lines must end only with a line feed (LF). Line feeds are represented as ordinal 10, octal 012 and hex 0A. Do not use carriage returns (CR) like Macintosh computers do or the carriage return/line feed combination (CRLF) like Windows computers do.&lt;br /&gt;
&lt;br /&gt;
== Coding Standards ==&lt;br /&gt;
&lt;br /&gt;
=== Spelling ===&lt;br /&gt;
&lt;br /&gt;
Spelling of class, function, variable and constant names should generally be in accordance with British English rules (en_GB).  However, some exceptions are permitted, for example where common programming names are used that align with the PHP API such as &amp;lt;code&amp;gt;$color&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== E_STRICT-compatible code ===&lt;br /&gt;
&lt;br /&gt;
As of version 1.6, all new code that is suggested for inclusion into Joomla must be E_STRICT-compatible. This means that it must not produce any warnings or errors when PHP&#039;s error reporting level is set to E_ALL | E_STRICT.&lt;br /&gt;
&lt;br /&gt;
=== Indenting and Line Length ===&lt;br /&gt;
&lt;br /&gt;
Use tabs to indent, not spaces. Make sure that the tab-stops are set to only 4 spaces in length.&lt;br /&gt;
&lt;br /&gt;
There is no set limit for line length.  Use your judgement based on the nature of the line and readability.&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
These include if, for, while, switch, etc. Here is an example of an if statement, as it is the most complicated of the control structures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
} else if ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
} else&lt;br /&gt;
{&lt;br /&gt;
   // Use one true brace in control structures&lt;br /&gt;
   // when the block is longer than one line&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// optional formatting if it improves readability&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
}&lt;br /&gt;
else if ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control statements should have one space between the control keyword and opening parenthesis, to distinguish them from function calls.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;layouts&#039;&#039;&#039;, the alternative named notation should be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) OR (condition2)) :&lt;br /&gt;
    action1();&lt;br /&gt;
elseif ((condition3) AND (condition4)) :&lt;br /&gt;
    action2();&lt;br /&gt;
else :&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
endif;&lt;br /&gt;
&lt;br /&gt;
foreach ($array as $element) :&lt;br /&gt;
    echo $element;&lt;br /&gt;
endforeach;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logical operators in condition statements should use uppercase words (&amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt;, etc) rather than programmatic notation (&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt;, etc).&lt;br /&gt;
&lt;br /&gt;
With the exception of &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements, curly braces must always be included even though they are technically optional. Having them increases readability and decreases the likelihood of logic errors being introduced when new lines are added.&lt;br /&gt;
&lt;br /&gt;
For switch statements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition)&lt;br /&gt;
{&lt;br /&gt;
    case 1:&lt;br /&gt;
        doAction1();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    case 2:&lt;br /&gt;
        doAction2();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    default:&lt;br /&gt;
        doDefaultAction();&lt;br /&gt;
        break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use indenting and line-breaks rather than curly braces in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements to increase readability.  There should be no space between the condition and the colon in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
=== Function Calls ===&lt;br /&gt;
&lt;br /&gt;
Functions should be called with no spaces between the function name and the opening parenthesis, and no space between this and the first parameter; a space after the comma between each parameter (if they are present), and no space between the last parameter and the closing parenthesis, and the semicolon. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As displayed above, there should be space before and one space after the equals sign used to assign the return value of a function to a variable. In the case of a block of related assignments, tabs (not spaces) may be inserted to promote readability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short          = foo($bar);&lt;br /&gt;
$long_variable  = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Definitions ===&lt;br /&gt;
&lt;br /&gt;
Class and function declarations follow the &amp;quot;one true brace&amp;quot; convention:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction( $arg1, $arg2 = &#039;&#039; )&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class fooClass&lt;br /&gt;
{&lt;br /&gt;
    function fooMethod($arg1)&lt;br /&gt;
    {&lt;br /&gt;
        if ($arg) {&lt;br /&gt;
            $result = true;&lt;br /&gt;
        } else {&lt;br /&gt;
            $result = false;&lt;br /&gt;
        }&lt;br /&gt;
        return $result;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments with default values go at the end of the argument list. Always attempt to return a meaningful value from a function if one is appropriate. Here is a slightly longer example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo OR !$dsninfo[&#039;phptype&#039;]) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Inline documentation for classes should follow the PHPDoc convention, similar to Javadoc. More information about PHPDoc can be found here: http://www.phpdoc.org/&lt;br /&gt;
&lt;br /&gt;
See also [[Adding phpDocumentor comments]]&lt;br /&gt;
&lt;br /&gt;
Non-documentation comments are strongly encouraged. A general rule of thumb is that if you look at a section of code and think &amp;quot;Wow, I don&#039;t want to try and describe that&amp;quot;, you need to comment it before you forget how it works.&lt;br /&gt;
&lt;br /&gt;
C style comments (&amp;lt;tt&amp;gt;/* */&amp;lt;/tt&amp;gt;) and standard C++ comments (&amp;lt;tt&amp;gt;//&amp;lt;/tt&amp;gt;) are both satisfactory. Use of Perl/shell style comments (&amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt;) is not permitted.&lt;br /&gt;
&lt;br /&gt;
Please note - commented code is not to be committed to trunk or release repositories.&lt;br /&gt;
&lt;br /&gt;
=== Including Code ===&lt;br /&gt;
&lt;br /&gt;
Anywhere you are unconditionally including a class file, use &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt;. Anywhere you are conditionally including a class file (for example, factory methods), use &amp;lt;code&amp;gt;include_once&amp;lt;/code&amp;gt;. Either of these will ensure that class files are included only once. They share the same file list, so you don&#039;t need to worry about mixing them -- a file included with &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt; will not be included again by &amp;lt;/code&amp;gt;include_once&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Note: [[php:include_once|include_once]] and [[php:require_once|require_once]] are PHP &#039;&#039;language statements&#039;&#039;, not functions. You don&#039;t need parentheses around the filename to be included.&lt;br /&gt;
&lt;br /&gt;
=== PHP Code Tags ===&lt;br /&gt;
&lt;br /&gt;
Always use &amp;lt;tt&amp;gt;&amp;amp;lt;?php ?&amp;gt;&amp;lt;/tt&amp;gt; to delimit PHP code, not the &amp;lt;tt&amp;gt;&amp;amp;lt;? ?&amp;gt;&amp;lt;/tt&amp;gt; shorthand. This is the most portable way to include PHP code on differing operating systems and setups.&lt;br /&gt;
&lt;br /&gt;
For files that contain only PHP code, the closing tag (&amp;lt;tt&amp;gt;?&amp;gt;&amp;lt;/tt&amp;gt;) is never permitted. It is not required by PHP. Not including it prevents trailing whitespace from being accidentally injected into the output.&lt;br /&gt;
&lt;br /&gt;
=== SQL Queries ===&lt;br /&gt;
&lt;br /&gt;
SQL keywords are to be written in uppercase, while all other identifiers (which the exception of quoted text obviously) is to be in lowercase. Carriage returns should not be used as [[JDatabase]]::getQuery provides for formatted output.  However, indenting with spaces to improve readability is desireable.&lt;br /&gt;
&lt;br /&gt;
Queries should be wrapped in single quotes (as these text blocks are parsed faster by php).&lt;br /&gt;
&lt;br /&gt;
All quoted string must using the &#039;&#039;Quote&#039;&#039; method to facilitate future compatibility with other database engines.&lt;br /&gt;
&lt;br /&gt;
All table names should use the &#039;&#039;&#039;&amp;lt;tt&amp;gt;#_&amp;lt;/tt&amp;gt;&#039;&#039;&#039; prefix rather than &amp;lt;tt&amp;gt;jos_&amp;lt;/tt&amp;gt; to access Joomla! contents and allow for the [[screen.config.15#Database_Settings|user defined database prefix]] to be applied.&lt;br /&gt;
&lt;br /&gt;
All expected integer or floating-point variable must be [http://php.net/manual/language.types.type-juggling.php cast] with &amp;lt;tt&amp;gt;(int)&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;(float)&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;(double)&amp;lt;/tt&amp;gt; as appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$state = 1;&lt;br /&gt;
$name  = &#039;bill&#039;;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
$query = &#039;SELECT COUNT( c.id ) AS num_articles, u.id, u.username&#039;.&lt;br /&gt;
    &#039; FROM #__content AS c&#039;.&lt;br /&gt;
    &#039; LEFT JOIN #__users AS u ON u.id = c.created_by&#039;.&lt;br /&gt;
    &#039; WHERE c.state = &#039;.(int) $state&lt;br /&gt;
    &#039;  AND u.id IS NOT NULL&#039;.&lt;br /&gt;
    &#039;  AND u.username &amp;lt;&amp;gt; &#039;.$db-&amp;gt;Quote( $name ).&lt;br /&gt;
    &#039; GROUP BY u.id&#039;.&lt;br /&gt;
    &#039;  HAVING COUNT( c.id ) &amp;gt; 0&#039;;&lt;br /&gt;
$db-&amp;gt;setQuery();&lt;br /&gt;
// Output formated query:&lt;br /&gt;
if ($debug) {&lt;br /&gt;
    echo $db-&amp;gt;getQuery();&lt;br /&gt;
}&lt;br /&gt;
$stats = $db-&amp;gt;loadObjectList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Doc Blocks ===&lt;br /&gt;
&lt;br /&gt;
All source code files in the core Joomla distribution must contain the following comment block as the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @version	$Id$&lt;br /&gt;
 * @package	Joomla&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.&lt;br /&gt;
 * @license	GNU/GPL, see LICENSE.php&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;@package&amp;lt;/code&amp;gt; in the header is not required for class-only files.&lt;br /&gt;
&lt;br /&gt;
Classes, functions, constants, class properties and class methods should all be supplied with appropriate DocBlocks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for class&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for class (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @subpackage SubPackageName&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class JFooBar&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @var int $id Primary key&lt;br /&gt;
     */&lt;br /&gt;
    public $id = null;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following package names are to be used in the core stack:&lt;br /&gt;
&lt;br /&gt;
* Joomla.Administrator - all files that belong only to the administrator or backend application&lt;br /&gt;
* Joomla.Installation - all files that belong to the installation application&lt;br /&gt;
* Joomla.Plugin - all plugin files&lt;br /&gt;
* Joomla.Site - all files that pertain only to the site or frontend application&lt;br /&gt;
* Joomla.XML-RPC - all files that belong to the XML-RPC server application&lt;br /&gt;
&lt;br /&gt;
The sub-package name will vary according to the extension type:&lt;br /&gt;
&lt;br /&gt;
* Components - the component folder, eg &amp;lt;code&amp;gt;com_content&amp;lt;/code&amp;gt;&lt;br /&gt;
* Modules - the module folder, eg &amp;lt;code&amp;gt;mod_latest_news&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plugins - the folder.element, eg &amp;lt;code&amp;gt;content.pagebreak&amp;lt;/code&amp;gt;&lt;br /&gt;
* Templates - the template folder, eg &amp;lt;code&amp;gt;rhuk_milkyway&amp;lt;/code&amp;gt;&lt;br /&gt;
* Framework - nothing for top level files (such as &amp;lt;code&amp;gt;factory.php&amp;lt;/code&amp;gt;), the first level folder or the first.second level folders as appropriate, eg &amp;lt;code&amp;gt;utilities&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;joomla/utitilies/date.php&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;html.html&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;joomla/html/html/email.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that code contributed to the Joomla stack that will become the copyright of the project is not allowed to include &amp;lt;code&amp;gt;@author&amp;lt;/code&amp;gt; tags.  You should update the contribution log in &amp;lt;tt&amp;gt;CREDITS.php&amp;lt;/tt&amp;gt;.  Joomla&#039;s philosophy is that the code is written &amp;quot;all together&amp;quot; and there is no notion of any one person &#039;owning&#039; any sectino of code.&lt;br /&gt;
&lt;br /&gt;
Files included from third party sources must leave DocBlocks intact.&lt;br /&gt;
&lt;br /&gt;
Layout files do not need full DocBlocks.  However, they do require and Id tag and direct access block as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php /** $Id$ */ defined(&#039;_JEXEC&#039;) or die(&#039;Restricted access&#039;); ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Classes should be given descriptive names. Avoid using abbreviations where possible. Class names should always begin with an uppercase letter and be written in CamelCase even if using tradationally uppercase acryonyms (such as XML, HTML).  One exception is for Joomla framework classes which must begin with an uppercase &#039;J&#039; with the next letter also being uppercase.  For example:&lt;br /&gt;
&lt;br /&gt;
* JHtmlHelper&lt;br /&gt;
* JXmlParser&lt;br /&gt;
* JModel&lt;br /&gt;
&lt;br /&gt;
Third-party developers are advised to namespace their functions with a unique prefix.&lt;br /&gt;
&lt;br /&gt;
=== Functions and Methods ===&lt;br /&gt;
&lt;br /&gt;
Functions and methods should be named using the &amp;quot;studly caps&amp;quot; style (also referred to as &amp;quot;bumpy case&amp;quot; or &amp;quot;camel caps&amp;quot;). The initial letter of the name is lowercase, and each letter that starts a new &amp;quot;word&amp;quot; is capitalized. Function in the Joomla framework must begin with a lowercase &#039;j&#039;.  Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
connect();&lt;br /&gt;
getData();&lt;br /&gt;
buildSomeWidget();&lt;br /&gt;
jImport();&lt;br /&gt;
jDoSomething();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Private class members (meaning class members that are intended to be used only from within the same class in which they are declared; are preceded by a single underscore. Properties are to be written in underscore format (that is, logical words separated by underscores) and should be all lowercase.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class JFooBar&lt;br /&gt;
{&lt;br /&gt;
    // Joomla 1.5 and earlier format&lt;br /&gt;
    var $_status = null;&lt;br /&gt;
&lt;br /&gt;
    function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Joomla 1.6 format&lt;br /&gt;
    private $_status = null;&lt;br /&gt;
&lt;br /&gt;
    protected $field_name = null;&lt;br /&gt;
&lt;br /&gt;
    protected function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
&lt;br /&gt;
Constants should always be all-uppercase, with underscores to separate words. Prefix constant names with the uppercased name of the class/package they are used in. For example, the constants used by the [[JError]] class all begin with &amp;quot;JERROR_&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Global Variables ===&lt;br /&gt;
&lt;br /&gt;
If your package needs to define global variables, their name should start with a single underscore followed by the uppsercase class/package name and another underscore. For example, the JError class uses a global variable called $_JERROR_LEVELS.&lt;br /&gt;
&lt;br /&gt;
With PHP5 and later you may use static class properties or constants instead of globals.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class JWhatever&lt;br /&gt;
{&lt;br /&gt;
    public static $instance = null;&lt;br /&gt;
    const SUCCESS = 1;&lt;br /&gt;
    const FAILURE = 0;&lt;br /&gt;
    // Methods...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regular and Class Variables ===&lt;br /&gt;
&lt;br /&gt;
Regular variables, follow the same conventions as function.&lt;br /&gt;
&lt;br /&gt;
Class variables should be set to null or some other appropriate default value. Lining up the default values with tabs should only be used if particularly warranted for readability.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
When using references, there should be a space before the reference operator and no space between it and the function or variable name.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$ref1  = &amp;amp;$this-&amp;gt;_sql;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Language Keys ===&lt;br /&gt;
&lt;br /&gt;
Except for the most common of words, such as &amp;quot;Yes&amp;quot;, &amp;quot;No&amp;quot;, &amp;quot;Show&amp;quot;, &amp;quot;Hide&amp;quot; all language keys should be namespaced to reflect the type of string they represent.  Always consider that if two extensions use the same key, the one loaded last will be the one that displays.  Namespacing should generally relate to the extension displaying the text. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
echo JText::_(&#039;Weblink Link&#039;);&lt;br /&gt;
echo JText::_(&#039;Weblink Title&#039;);&lt;br /&gt;
echo JText::_(&#039;Weblink Description&#039;);&lt;br /&gt;
&lt;br /&gt;
echo JText::_(&#039;Exception An error occurred while saving&#039;);&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: Link to page with &amp;quot;common&amp;quot; strings that can be used for typical actions in components, such a &amp;quot;Save&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where the same English word is used in two different locations, two different language keys should be used to allow for cases where the translation results in different words or phrases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// A table column title&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;?php echo JText::_(&#039;Weblink Column Title&#039;);?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;?php echo JText::_(&#039;Weblink Column Link&#039;);?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// In the form&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Title&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;title&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Link&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;link&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Toolbar and Linkbar text should be prefixed Toolbar and Linkbar respectively.&lt;br /&gt;
&lt;br /&gt;
The language keys should be written as naturally as possible with spaces, not underscores separating words.  Long phrases can be condensed to reduce keys to a sensible length.  For example, tooltips for an edit field can be written like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Title&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;title&amp;quot; title=&amp;quot;&amp;lt;?php echo JText::_(&#039;Weblink Title Desc&#039;);?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The convention used should be governed by common sense, but must be consistent.  In general consider how the language file will look with all keys sorted alphabetically.  Prefixes should be used to group text within a common context (such as column headings).  Suffixes should be used to group elements that logically go together (such as a field name and its description).&lt;br /&gt;
&lt;br /&gt;
Phrases must never be assembled by string concatenation. Each phrase must be represented by a single language key, using sprintf as appropriate to replace dynamic words in the phrase.  Where replacements are made, the word used should be as descriptive as possible and all-uppercase.  This assists the translators to determine the context of the replacement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
// Not permitted&lt;br /&gt;
echo JText::_(&#039;Deleted &#039;).$n.JText::_(&#039; items&#039;);&lt;br /&gt;
&lt;br /&gt;
// Permitted&lt;br /&gt;
echo JText::sprintf(&#039;Message Deleted NUMBER items&#039;, $n);&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reference in the language file would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;MESSAGE DELETED NUMBER ITEMS=Deleted %d Item(s)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If more than one dynamic string is used in a phrase, the printf markers should employ order placement as other languages might change the position of the strings. This is done via %[number]$[printf_type] as follows:&lt;br /&gt;
&lt;br /&gt;
Left to right language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;PAGE X OF Y=Page %1$d of %2$d&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Right to left language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;PAGE X OF Y=%2$d of %1$d egaP&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controllers ===&lt;br /&gt;
&lt;br /&gt;
For single controller components, the naming convention is &#039;&#039;[Name]Controller&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentController extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The file name will generally be &#039;&#039;controller.php&#039;&#039; and is located in the component folder.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_content&lt;br /&gt;
 / controller.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a multi-controller components, such as the Banners in the Administrator, the convention is &#039;&#039;[Component]Controller[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerControllerClient extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/controllers/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the controller.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /controllers/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Models===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Component]Model[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Model&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerModelClient extends JModel&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/models/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /models/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
The naming convention is &#039;&#039;[Component]View[Name]&#039;&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Contact Category View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewCategory extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/view/&amp;lt;/tt&amp;gt; folder under the component folder. The subfolder names will reflect the name of a View.&lt;br /&gt;
&lt;br /&gt;
 com_contact&lt;br /&gt;
  /views/&lt;br /&gt;
    /&#039;&#039;view name 1&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
    /&#039;&#039;view name 2&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
&lt;br /&gt;
Multi-view components such as com_content may provide an optional &amp;quot;master&amp;quot; view class the specialised views extend from. It is located in the component folder and typically called &#039;&#039;view.php&#039;&#039;. The naming convention is &#039;&#039;[Component]View&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 com_content&lt;br /&gt;
  /views/&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/archive/&amp;lt;/span&amp;gt;&lt;br /&gt;
       / view.html.php&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/article/&amp;lt;/span&amp;gt;&lt;br /&gt;
  / view.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
view.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentView extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Helper Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/archive/view.html.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Archive View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewArchive extends ContentView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Folder]View[Element]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ContentPluginPagebreak extends JPlugin&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
Components may support different Layouts to render the data supplied by a [[#Views|View]] and its [[#Models|Models]]. A Layout file usually contains markup and some PHP code for &#039;&#039;display logic only&#039;&#039;: no functions, no classes.&lt;br /&gt;
&lt;br /&gt;
A Layout consists of at least one .php file and an equally named [[Creating a basic layout.xml file|.xml manifest file]] located in the &amp;lt;tt&amp;gt;/tmpl/&amp;lt;/tt&amp;gt; folder of a View, both reflect the internal name of the Layout. The standard Layout is called &#039;&#039;default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;com_content&lt;br /&gt;
   /views/&lt;br /&gt;
     /article/&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#000&amp;quot;&amp;gt;&lt;br /&gt;
       /tmpl/&lt;br /&gt;
         / default.php&lt;br /&gt;
         / default.xml&lt;br /&gt;
         / form.php&lt;br /&gt;
         / form.xml&lt;br /&gt;
         / pagebreak.php&lt;br /&gt;
         / pagebreak.xml &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Layout may use supplemental .php files to provide more granual control in order to render individual parts or repetitive items of the data.&lt;br /&gt;
&lt;br /&gt;
Users may customise the Layout output via [[#Template Layout Overrides|Template Layout Overrides]].&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
=== Template Layout Overrides ===&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11319</id>
		<title>Coding style and standards</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11319"/>
		<updated>2008-10-23T08:06:30Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: /* Language Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
remark: The following information has been copied from the old WIKI archive has not yet been reviewed.&lt;br /&gt;
See: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,standards:coding/&lt;br /&gt;
&lt;br /&gt;
Good coding standards are important in any development project, but particularly when multiple developers are working on the same project. Having coding standards helps ensure that the code is of high quality, has fewer bugs, and is easily maintained.&lt;br /&gt;
&lt;br /&gt;
First rule, if in doubt, ask.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
All files contributed to Joomla must:&lt;br /&gt;
&lt;br /&gt;
* Be stored as ASCII text&lt;br /&gt;
* Use UTF-8 character encoding&lt;br /&gt;
* Be Unix formatted&lt;br /&gt;
** Lines must end only with a line feed (LF). Line feeds are represented as ordinal 10, octal 012 and hex 0A. Do not use carriage returns (CR) like Macintosh computers do or the carriage return/line feed combination (CRLF) like Windows computers do.&lt;br /&gt;
&lt;br /&gt;
== Coding Standards ==&lt;br /&gt;
&lt;br /&gt;
=== Spelling ===&lt;br /&gt;
&lt;br /&gt;
Spelling of class, function, variable and constant names should generally be in accordance with British English rules (en_GB).  However, some exceptions are permitted, for example where common programming names are used that align with the PHP API such as &amp;lt;code&amp;gt;$color&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== E_STRICT-compatible code ===&lt;br /&gt;
&lt;br /&gt;
As of version 1.6, all new code that is suggested for inclusion into Joomla must be E_STRICT-compatible. This means that it must not produce any warnings or errors when PHP&#039;s error reporting level is set to E_ALL | E_STRICT.&lt;br /&gt;
&lt;br /&gt;
=== Indenting and Line Length ===&lt;br /&gt;
&lt;br /&gt;
Use tabs to indent, not spaces. Make sure that the tab-stops are set to only 4 spaces in length.&lt;br /&gt;
&lt;br /&gt;
There is no set limit for line length.  Use your judgement based on the nature of the line and readability.&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
These include if, for, while, switch, etc. Here is an example of an if statement, as it is the most complicated of the control structures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
} else if ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
} else&lt;br /&gt;
{&lt;br /&gt;
   // Use one true brace in control structures&lt;br /&gt;
   // when the block is longer than one line&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// optional formatting if it improves readability&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
}&lt;br /&gt;
else if ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control statements should have one space between the control keyword and opening parenthesis, to distinguish them from function calls.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;layouts&#039;&#039;&#039;, the alternative named notation should be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) OR (condition2)) :&lt;br /&gt;
    action1();&lt;br /&gt;
elseif ((condition3) AND (condition4)) :&lt;br /&gt;
    action2();&lt;br /&gt;
else :&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
endif;&lt;br /&gt;
&lt;br /&gt;
foreach ($array as $element) :&lt;br /&gt;
    echo $element;&lt;br /&gt;
endforeach;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logical operators in condition statements should use uppercase words (&amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt;, etc) rather than programmatic notation (&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt;, etc).&lt;br /&gt;
&lt;br /&gt;
With the exception of &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements, curly braces must always be included even though they are technically optional. Having them increases readability and decreases the likelihood of logic errors being introduced when new lines are added.&lt;br /&gt;
&lt;br /&gt;
For switch statements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition)&lt;br /&gt;
{&lt;br /&gt;
    case 1:&lt;br /&gt;
        doAction1();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    case 2:&lt;br /&gt;
        doAction2();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    default:&lt;br /&gt;
        doDefaultAction();&lt;br /&gt;
        break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use indenting and line-breaks rather than curly braces in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements to increase readability.  There should be no space between the condition and the colon in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
=== Function Calls ===&lt;br /&gt;
&lt;br /&gt;
Functions should be called with no spaces between the function name and the opening parenthesis, and no space between this and the first parameter; a space after the comma between each parameter (if they are present), and no space between the last parameter and the closing parenthesis, and the semicolon. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As displayed above, there should be space before and one space after the equals sign used to assign the return value of a function to a variable. In the case of a block of related assignments, tabs (not spaces) may be inserted to promote readability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short          = foo($bar);&lt;br /&gt;
$long_variable  = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Definitions ===&lt;br /&gt;
&lt;br /&gt;
Class and function declarations follow the &amp;quot;one true brace&amp;quot; convention:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction( $arg1, $arg2 = &#039;&#039; )&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class fooClass&lt;br /&gt;
{&lt;br /&gt;
    function fooMethod($arg1)&lt;br /&gt;
    {&lt;br /&gt;
        if ($arg) {&lt;br /&gt;
            $result = true;&lt;br /&gt;
        } else {&lt;br /&gt;
            $result = false;&lt;br /&gt;
        }&lt;br /&gt;
        return $result;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments with default values go at the end of the argument list. Always attempt to return a meaningful value from a function if one is appropriate. Here is a slightly longer example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo OR !$dsninfo[&#039;phptype&#039;]) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Inline documentation for classes should follow the PHPDoc convention, similar to Javadoc. More information about PHPDoc can be found here: http://www.phpdoc.org/&lt;br /&gt;
&lt;br /&gt;
See also [[Adding phpDocumentor comments]]&lt;br /&gt;
&lt;br /&gt;
Non-documentation comments are strongly encouraged. A general rule of thumb is that if you look at a section of code and think &amp;quot;Wow, I don&#039;t want to try and describe that&amp;quot;, you need to comment it before you forget how it works.&lt;br /&gt;
&lt;br /&gt;
C style comments (&amp;lt;tt&amp;gt;/* */&amp;lt;/tt&amp;gt;) and standard C++ comments (&amp;lt;tt&amp;gt;//&amp;lt;/tt&amp;gt;) are both satisfactory. Use of Perl/shell style comments (&amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt;) is not permitted.&lt;br /&gt;
&lt;br /&gt;
Please note - commented code is not to be committed to trunk or release repositories.&lt;br /&gt;
&lt;br /&gt;
=== Including Code ===&lt;br /&gt;
&lt;br /&gt;
Anywhere you are unconditionally including a class file, use &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt;. Anywhere you are conditionally including a class file (for example, factory methods), use &amp;lt;code&amp;gt;include_once&amp;lt;/code&amp;gt;. Either of these will ensure that class files are included only once. They share the same file list, so you don&#039;t need to worry about mixing them -- a file included with &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt; will not be included again by &amp;lt;/code&amp;gt;include_once&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Note: [[php:include_once|include_once]] and [[php:require_once|require_once]] are PHP &#039;&#039;language statements&#039;&#039;, not functions. You don&#039;t need parentheses around the filename to be included.&lt;br /&gt;
&lt;br /&gt;
=== PHP Code Tags ===&lt;br /&gt;
&lt;br /&gt;
Always use &amp;lt;tt&amp;gt;&amp;amp;lt;?php ?&amp;gt;&amp;lt;/tt&amp;gt; to delimit PHP code, not the &amp;lt;tt&amp;gt;&amp;amp;lt;? ?&amp;gt;&amp;lt;/tt&amp;gt; shorthand. This is the most portable way to include PHP code on differing operating systems and setups.&lt;br /&gt;
&lt;br /&gt;
For files that contain only PHP code, the closing tag (&amp;lt;tt&amp;gt;?&amp;gt;&amp;lt;/tt&amp;gt;) is never permitted. It is not required by PHP. Not including it prevents trailing whitespace from being accidentally injected into the output.&lt;br /&gt;
&lt;br /&gt;
=== SQL Queries ===&lt;br /&gt;
&lt;br /&gt;
SQL keywords are to be written in uppercase, while all other identifiers (which the exception of quoted text obviously) is to be in lowercase. Carriage returns should not be used as [[JDatabase]]::getQuery provides for formatted output.  However, indenting with spaces to improve readability is desireable.&lt;br /&gt;
&lt;br /&gt;
Queries should be wrapped in single quotes (as these text blocks are parsed faster by php).&lt;br /&gt;
&lt;br /&gt;
All quoted string must using the &#039;&#039;Quote&#039;&#039; method to facilitate future compatibility with other database engines.&lt;br /&gt;
&lt;br /&gt;
All table names should use the &#039;&#039;&#039;&amp;lt;tt&amp;gt;#_&amp;lt;/tt&amp;gt;&#039;&#039;&#039; prefix rather than &amp;lt;tt&amp;gt;jos_&amp;lt;/tt&amp;gt; to access Joomla! contents and allow for the [[screen.config.15#Database_Settings|user defined database prefix]] to be applied.&lt;br /&gt;
&lt;br /&gt;
All expected integer or floating-point variable must be [http://php.net/manual/language.types.type-juggling.php cast] with &amp;lt;tt&amp;gt;(int)&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;(float)&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;(double)&amp;lt;/tt&amp;gt; as appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$state = 1;&lt;br /&gt;
$name  = &#039;bill&#039;;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
$query = &#039;SELECT COUNT( c.id ) AS num_articles, u.id, u.username&#039;.&lt;br /&gt;
    &#039; FROM #__content AS c&#039;.&lt;br /&gt;
    &#039; LEFT JOIN #__users AS u ON u.id = c.created_by&#039;.&lt;br /&gt;
    &#039; WHERE c.state = &#039;.(int) $state&lt;br /&gt;
    &#039;  AND u.id IS NOT NULL&#039;.&lt;br /&gt;
    &#039;  AND u.username &amp;lt;&amp;gt; &#039;.$db-&amp;gt;Quote( $name ).&lt;br /&gt;
    &#039; GROUP BY u.id&#039;.&lt;br /&gt;
    &#039;  HAVING COUNT( c.id ) &amp;gt; 0&#039;;&lt;br /&gt;
$db-&amp;gt;setQuery();&lt;br /&gt;
// Output formated query:&lt;br /&gt;
if ($debug) {&lt;br /&gt;
    echo $db-&amp;gt;getQuery();&lt;br /&gt;
}&lt;br /&gt;
$stats = $db-&amp;gt;loadObjectList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Doc Blocks ===&lt;br /&gt;
&lt;br /&gt;
All source code files in the core Joomla distribution must contain the following comment block as the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @version	$Id$&lt;br /&gt;
 * @package	Joomla&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.&lt;br /&gt;
 * @license	GNU/GPL, see LICENSE.php&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;@package&amp;lt;/code&amp;gt; in the header is not required for class-only files.&lt;br /&gt;
&lt;br /&gt;
Classes, functions, constants, class properties and class methods should all be supplied with appropriate DocBlocks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for class&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for class (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @subpackage SubPackageName&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class JFooBar&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @var int $id Primary key&lt;br /&gt;
     */&lt;br /&gt;
    public $id = null;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following package names are to be used in the core stack:&lt;br /&gt;
&lt;br /&gt;
* Joomla.Administrator - all files that belong only to the administrator or backend application&lt;br /&gt;
* Joomla.Installation - all files that belong to the installation application&lt;br /&gt;
* Joomla.Plugin - all plugin files&lt;br /&gt;
* Joomla.Site - all files that pertain only to the site or frontend application&lt;br /&gt;
* Joomla.XML-RPC - all files that belong to the XML-RPC server application&lt;br /&gt;
&lt;br /&gt;
The sub-package name will vary according to the extension type:&lt;br /&gt;
&lt;br /&gt;
* Components - the component folder, eg &amp;lt;code&amp;gt;com_content&amp;lt;/code&amp;gt;&lt;br /&gt;
* Modules - the module folder, eg &amp;lt;code&amp;gt;mod_latest_news&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plugins - the folder.element, eg &amp;lt;code&amp;gt;content.pagebreak&amp;lt;/code&amp;gt;&lt;br /&gt;
* Templates - the template folder, eg &amp;lt;code&amp;gt;rhuk_milkyway&amp;lt;/code&amp;gt;&lt;br /&gt;
* Framework - nothing for top level files (such as &amp;lt;code&amp;gt;factory.php&amp;lt;/code&amp;gt;), the first level folder or the first.second level folders as appropriate, eg &amp;lt;code&amp;gt;utilities&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;joomla/utitilies/date.php&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;html.html&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;joomla/html/html/email.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that code contributed to the Joomla stack that will become the copyright of the project is not allowed to include &amp;lt;code&amp;gt;@author&amp;lt;/code&amp;gt; tags.  You should update the contribution log in &amp;lt;tt&amp;gt;CREDITS.php&amp;lt;/tt&amp;gt;.  Joomla&#039;s philosophy is that the code is written &amp;quot;all together&amp;quot; and there is no notion of any one person &#039;owning&#039; any sectino of code.&lt;br /&gt;
&lt;br /&gt;
Files included from third party sources must leave DocBlocks intact.&lt;br /&gt;
&lt;br /&gt;
Example URLs&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Classes should be given descriptive names. Avoid using abbreviations where possible. Class names should always begin with an uppercase letter and be written in CamelCase even if using tradationally uppercase acryonyms (such as XML, HTML).  One exception is for Joomla framework classes which must begin with an uppercase &#039;J&#039; with the next letter also being uppercase.  For example:&lt;br /&gt;
&lt;br /&gt;
* JHtmlHelper&lt;br /&gt;
* JXmlParser&lt;br /&gt;
* JModel&lt;br /&gt;
&lt;br /&gt;
Third-party developers are advised to namespace their functions with a unique prefix.&lt;br /&gt;
&lt;br /&gt;
=== Functions and Methods ===&lt;br /&gt;
&lt;br /&gt;
Functions and methods should be named using the &amp;quot;studly caps&amp;quot; style (also referred to as &amp;quot;bumpy case&amp;quot; or &amp;quot;camel caps&amp;quot;). The initial letter of the name is lowercase, and each letter that starts a new &amp;quot;word&amp;quot; is capitalized. Function in the Joomla framework must begin with a lowercase &#039;j&#039;.  Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
connect();&lt;br /&gt;
getData();&lt;br /&gt;
buildSomeWidget();&lt;br /&gt;
jImport();&lt;br /&gt;
jDoSomething();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Private class members (meaning class members that are intended to be used only from within the same class in which they are declared; are preceded by a single underscore. Properties are to be written in underscore format (that is, logical words separated by underscores) and should be all lowercase.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class JFooBar&lt;br /&gt;
{&lt;br /&gt;
    // Joomla 1.5 and earlier format&lt;br /&gt;
    var $_status = null;&lt;br /&gt;
&lt;br /&gt;
    function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Joomla 1.6 format&lt;br /&gt;
    private $_status = null;&lt;br /&gt;
&lt;br /&gt;
    protected $field_name = null;&lt;br /&gt;
&lt;br /&gt;
    protected function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
&lt;br /&gt;
Constants should always be all-uppercase, with underscores to separate words. Prefix constant names with the uppercased name of the class/package they are used in. For example, the constants used by the [[JError]] class all begin with &amp;quot;JERROR_&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Global Variables ===&lt;br /&gt;
&lt;br /&gt;
If your package needs to define global variables, their name should start with a single underscore followed by the uppsercase class/package name and another underscore. For example, the JError class uses a global variable called $_JERROR_LEVELS.&lt;br /&gt;
&lt;br /&gt;
With PHP5 and later you may use static class properties or constants instead of globals.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class JWhatever&lt;br /&gt;
{&lt;br /&gt;
    public static $instance = null;&lt;br /&gt;
    const SUCCESS = 1;&lt;br /&gt;
    const FAILURE = 0;&lt;br /&gt;
    // Methods...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regular and Class Variables ===&lt;br /&gt;
&lt;br /&gt;
Regular variables, follow the same conventions as function.&lt;br /&gt;
&lt;br /&gt;
Class variables should be set to null or some other appropriate default value. Lining up the default values with tabs should only be used if particularly warranted for readability.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
When using references, there should be a space before the reference operator and no space between it and the function or variable name.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$ref1  = &amp;amp;$this-&amp;gt;_sql;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Language Keys ===&lt;br /&gt;
&lt;br /&gt;
Except for the most common of words, such as &amp;quot;Yes&amp;quot;, &amp;quot;No&amp;quot;, &amp;quot;Show&amp;quot;, &amp;quot;Hide&amp;quot; all language keys should be namespaced to reflect the type of string they represent.  Always consider that if two extensions use the same key, the one loaded last will be the one that displays.  Namespacing should generally relate to the extension displaying the text. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
echo JText::_(&#039;Weblink Link&#039;);&lt;br /&gt;
echo JText::_(&#039;Weblink Title&#039;);&lt;br /&gt;
echo JText::_(&#039;Weblink Description&#039;);&lt;br /&gt;
&lt;br /&gt;
echo JText::_(&#039;Exception An error occurred while saving&#039;);&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: Link to page with &amp;quot;common&amp;quot; strings that can be used for typical actions in components, such a &amp;quot;Save&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where the same English word is used in two different locations, two different language keys should be used to allow for cases where the translation results in different words or phrases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// A table column title&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;?php echo JText::_(&#039;Weblink Column Title&#039;);?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;?php echo JText::_(&#039;Weblink Column Link&#039;);?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// In the form&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Title&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;title&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Link&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;link&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Toolbar and Linkbar text should be prefixed Toolbar and Linkbar respectively.&lt;br /&gt;
&lt;br /&gt;
The language keys should be written as naturally as possible with spaces, not underscores separating words.  Long phrases can be condensed to reduce keys to a sensible length.  For example, tooltips for an edit field can be written like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Title&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;title&amp;quot; title=&amp;quot;&amp;lt;?php echo JText::_(&#039;Weblink Title Desc&#039;);?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The convention used should be governed by common sense, but must be consistent.  In general consider how the language file will look with all keys sorted alphabetically.  Prefixes should be used to group text within a common context (such as column headings).  Suffixes should be used to group elements that logically go together (such as a field name and its description).&lt;br /&gt;
&lt;br /&gt;
Phrases must never be assembled by string concatenation. Each phrase must be represented by a single language key, using sprintf as appropriate to replace dynamic words in the phrase.  Where replacements are made, the word used should be as descriptive as possible and all-uppercase.  This assists the translators to determine the context of the replacement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
// Not permitted&lt;br /&gt;
echo JText::_(&#039;Deleted &#039;).$n.JText::_(&#039; items&#039;);&lt;br /&gt;
&lt;br /&gt;
// Permitted&lt;br /&gt;
echo JText::sprintf(&#039;Message Deleted NUMBER items&#039;, $n);&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reference in the language file would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;MESSAGE DELETED NUMBER ITEMS=Deleted %d Item(s)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If more than one dynamic string is used in a phrase, the printf markers should employ order placement as other languages might change the position of the strings. This is done via %[number]$[printf_type] as follows:&lt;br /&gt;
&lt;br /&gt;
Left to right language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;PAGE X OF Y=Page %1$d of %2$d&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Right to left language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;PAGE X OF Y=%2$d of %1$d egaP&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controllers ===&lt;br /&gt;
&lt;br /&gt;
For single controller components, the naming convention is &#039;&#039;[Name]Controller&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentController extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The file name will generally be &#039;&#039;controller.php&#039;&#039; and is located in the component folder.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_content&lt;br /&gt;
 / controller.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a multi-controller components, such as the Banners in the Administrator, the convention is &#039;&#039;[Component]Controller[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerControllerClient extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/controllers/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the controller.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /controllers/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Models===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Component]Model[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Model&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerModelClient extends JModel&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/models/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /models/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
The naming convention is &#039;&#039;[Component]View[Name]&#039;&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Contact Category View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewCategory extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/view/&amp;lt;/tt&amp;gt; folder under the component folder. The subfolder names will reflect the name of a View.&lt;br /&gt;
&lt;br /&gt;
 com_contact&lt;br /&gt;
  /views/&lt;br /&gt;
    /&#039;&#039;view name 1&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
    /&#039;&#039;view name 2&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
&lt;br /&gt;
Multi-view components such as com_content may provide an optional &amp;quot;master&amp;quot; view class the specialised views extend from. It is located in the component folder and typically called &#039;&#039;view.php&#039;&#039;. The naming convention is &#039;&#039;[Component]View&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 com_content&lt;br /&gt;
  /views/&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/archive/&amp;lt;/span&amp;gt;&lt;br /&gt;
       / view.html.php&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/article/&amp;lt;/span&amp;gt;&lt;br /&gt;
  / view.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
view.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentView extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Helper Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/archive/view.html.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Archive View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewArchive extends ContentView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Folder]View[Element]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ContentPluginPagebreak extends JPlugin&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
Components may support different Layouts to render the data supplied by a [[#Views|View]] and its [[#Models|Models]]. A Layout file usually contains markup and some PHP code for &#039;&#039;display logic only&#039;&#039;: no functions, no classes.&lt;br /&gt;
&lt;br /&gt;
A Layout consists of at least one .php file and an equally named [[Creating a basic layout.xml file|.xml manifest file]] located in the &amp;lt;tt&amp;gt;/tmpl/&amp;lt;/tt&amp;gt; folder of a View, both reflect the internal name of the Layout. The standard Layout is called &#039;&#039;default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;com_content&lt;br /&gt;
   /views/&lt;br /&gt;
     /article/&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#000&amp;quot;&amp;gt;&lt;br /&gt;
       /tmpl/&lt;br /&gt;
         / default.php&lt;br /&gt;
         / default.xml&lt;br /&gt;
         / form.php&lt;br /&gt;
         / form.xml&lt;br /&gt;
         / pagebreak.php&lt;br /&gt;
         / pagebreak.xml &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Layout may use supplemental .php files to provide more granual control in order to render individual parts or repetitive items of the data.&lt;br /&gt;
&lt;br /&gt;
Users may customise the Layout output via [[#Template Layout Overrides|Template Layout Overrides]].&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
=== Template Layout Overrides ===&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11224</id>
		<title>Coding style and standards</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11224"/>
		<updated>2008-10-21T09:31:13Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: Bug fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
remark: The following information has been copied from the old WIKI archive has not yet been reviewed.&lt;br /&gt;
See: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,standards:coding/&lt;br /&gt;
&lt;br /&gt;
Good coding standards are important in any development project, but particularly when multiple developers are working on the same project. Having coding standards helps ensure that the code is of high quality, has fewer bugs, and is easily maintained.&lt;br /&gt;
&lt;br /&gt;
First rule, if in doubt, ask.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
All files contributed to Joomla must:&lt;br /&gt;
&lt;br /&gt;
* Be stored as ASCII text&lt;br /&gt;
* Use UTF-8 character encoding&lt;br /&gt;
* Be Unix formatted&lt;br /&gt;
** Lines must end only with a line feed (LF). Line feeds are represented as ordinal 10, octal 012 and hex 0A. Do not use carriage returns (CR) like Macintosh computers do or the carriage return/line feed combination (CRLF) like Windows computers do.&lt;br /&gt;
&lt;br /&gt;
== Coding Standards ==&lt;br /&gt;
&lt;br /&gt;
=== Spelling ===&lt;br /&gt;
&lt;br /&gt;
Spelling of class, function, variable and constant names should generally be in accordance with British English rules (en_GB).  However, some exceptions are permitted, for example where common programming names are used that align with the PHP API such as &amp;lt;code&amp;gt;$color&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== E_STRICT-compatible code ===&lt;br /&gt;
&lt;br /&gt;
As of version 1.6, all new code that is suggested for inclusion into Joomla must be E_STRICT-compatible. This means that it must not produce any warnings or errors when PHP&#039;s error reporting level is set to E_ALL | E_STRICT.&lt;br /&gt;
&lt;br /&gt;
=== Indenting and Line Length ===&lt;br /&gt;
&lt;br /&gt;
Use tabs to indent, not spaces. Make sure that the tab-stops are set to only 4 spaces in length.&lt;br /&gt;
&lt;br /&gt;
There is no set limit for line length.  Use your judgement based on the nature of the line and readability.&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
These include if, for, while, switch, etc. Here is an example of an if statement, as it is the most complicated of the control structures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
} else if ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
} else&lt;br /&gt;
{&lt;br /&gt;
   // Use one true brace in control structures&lt;br /&gt;
   // when the block is longer than one line&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// optional formatting if it improves readability&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
}&lt;br /&gt;
else if ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control statements should have one space between the control keyword and opening parenthesis, to distinguish them from function calls.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;layouts&#039;&#039;&#039;, the alternative named notation should be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) OR (condition2)) :&lt;br /&gt;
    action1();&lt;br /&gt;
elseif ((condition3) AND (condition4)) :&lt;br /&gt;
    action2();&lt;br /&gt;
else :&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
endif;&lt;br /&gt;
&lt;br /&gt;
foreach ($array as $element) :&lt;br /&gt;
    echo $element;&lt;br /&gt;
endforeach;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logical operators in condition statements should use uppercase words (&amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt;, etc) rather than programmatic notation (&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt;, etc).&lt;br /&gt;
&lt;br /&gt;
With the exception of &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements, curly braces must always be included even though they are technically optional. Having them increases readability and decreases the likelihood of logic errors being introduced when new lines are added.&lt;br /&gt;
&lt;br /&gt;
For switch statements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition)&lt;br /&gt;
{&lt;br /&gt;
    case 1:&lt;br /&gt;
        doAction1();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    case 2:&lt;br /&gt;
        doAction2();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    default:&lt;br /&gt;
        doDefaultAction();&lt;br /&gt;
        break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use indenting and line-breaks rather than curly braces in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements to increase readability.  There should be no space between the condition and the colon in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
=== Function Calls ===&lt;br /&gt;
&lt;br /&gt;
Functions should be called with no spaces between the function name and the opening parenthesis, and no space between this and the first parameter; a space after the comma between each parameter (if they are present), and no space between the last parameter and the closing parenthesis, and the semicolon. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As displayed above, there should be space before and one space after the equals sign used to assign the return value of a function to a variable. In the case of a block of related assignments, tabs (not spaces) may be inserted to promote readability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short          = foo($bar);&lt;br /&gt;
$long_variable  = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Definitions ===&lt;br /&gt;
&lt;br /&gt;
Class and function declarations follow the &amp;quot;one true brace&amp;quot; convention:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction( $arg1, $arg2 = &#039;&#039; )&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class fooClass&lt;br /&gt;
{&lt;br /&gt;
    function fooMethod($arg1)&lt;br /&gt;
    {&lt;br /&gt;
        if ($arg) {&lt;br /&gt;
            $result = true;&lt;br /&gt;
        } else {&lt;br /&gt;
            $result = false;&lt;br /&gt;
        }&lt;br /&gt;
        return $result;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments with default values go at the end of the argument list. Always attempt to return a meaningful value from a function if one is appropriate. Here is a slightly longer example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo OR !$dsninfo[&#039;phptype&#039;]) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Inline documentation for classes should follow the PHPDoc convention, similar to Javadoc. More information about PHPDoc can be found here: http://www.phpdoc.org/&lt;br /&gt;
&lt;br /&gt;
See also [[Adding phpDocumentor comments]]&lt;br /&gt;
&lt;br /&gt;
Non-documentation comments are strongly encouraged. A general rule of thumb is that if you look at a section of code and think &amp;quot;Wow, I don&#039;t want to try and describe that&amp;quot;, you need to comment it before you forget how it works.&lt;br /&gt;
&lt;br /&gt;
C style comments (&amp;lt;tt&amp;gt;/* */&amp;lt;/tt&amp;gt;) and standard C++ comments (&amp;lt;tt&amp;gt;//&amp;lt;/tt&amp;gt;) are both satisfactory. Use of Perl/shell style comments (&amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt;) is not permitted.&lt;br /&gt;
&lt;br /&gt;
Please note - commented code is not to be committed to trunk or release repositories.&lt;br /&gt;
&lt;br /&gt;
=== Including Code ===&lt;br /&gt;
&lt;br /&gt;
Anywhere you are unconditionally including a class file, use &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt;. Anywhere you are conditionally including a class file (for example, factory methods), use &amp;lt;code&amp;gt;include_once&amp;lt;/code&amp;gt;. Either of these will ensure that class files are included only once. They share the same file list, so you don&#039;t need to worry about mixing them -- a file included with &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt; will not be included again by &amp;lt;/code&amp;gt;include_once&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Note: [[php:include_once|include_once]] and [[php:require_once|require_once]] are PHP &#039;&#039;language statements&#039;&#039;, not functions. You don&#039;t need parentheses around the filename to be included.&lt;br /&gt;
&lt;br /&gt;
=== PHP Code Tags ===&lt;br /&gt;
&lt;br /&gt;
Always use &amp;lt;tt&amp;gt;&amp;amp;lt;?php ?&amp;gt;&amp;lt;/tt&amp;gt; to delimit PHP code, not the &amp;lt;tt&amp;gt;&amp;amp;lt;? ?&amp;gt;&amp;lt;/tt&amp;gt; shorthand. This is the most portable way to include PHP code on differing operating systems and setups.&lt;br /&gt;
&lt;br /&gt;
For files that contain only PHP code, the closing tag (&amp;lt;tt&amp;gt;?&amp;gt;&amp;lt;/tt&amp;gt;) is never permitted. It is not required by PHP. Not including it prevents trailing whitespace from being accidentally injected into the output.&lt;br /&gt;
&lt;br /&gt;
=== SQL Queries ===&lt;br /&gt;
&lt;br /&gt;
SQL keywords are to be written in uppercase, while all other identifiers (which the exception of quoted text obviously) is to be in lowercase. Carriage returns should not be used as [[JDatabase]]::getQuery provides for formatted output.  However, indenting with spaces to improve readability is desireable.&lt;br /&gt;
&lt;br /&gt;
Queries should be wrapped in single quotes (as these text blocks are parsed faster by php).&lt;br /&gt;
&lt;br /&gt;
All quoted string must using the &#039;&#039;Quote&#039;&#039; method to facilitate future compatibility with other database engines.&lt;br /&gt;
&lt;br /&gt;
All table names should use the &#039;&#039;&#039;&amp;lt;tt&amp;gt;#_&amp;lt;/tt&amp;gt;&#039;&#039;&#039; prefix rather than &amp;lt;tt&amp;gt;jos_&amp;lt;/tt&amp;gt; to access Joomla! contents and allow for the [[screen.config.15#Database_Settings|user defined database prefix]] to be applied.&lt;br /&gt;
&lt;br /&gt;
All expected integer or floating-point variable must be [http://php.net/manual/language.types.type-juggling.php cast] with &amp;lt;tt&amp;gt;(int)&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;(float)&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;(double)&amp;lt;/tt&amp;gt; as appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$state = 1;&lt;br /&gt;
$name  = &#039;bill&#039;;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
$query = &#039;SELECT COUNT( c.id ) AS num_articles, u.id, u.username&#039;.&lt;br /&gt;
    &#039; FROM #__content AS c&#039;.&lt;br /&gt;
    &#039; LEFT JOIN #__users AS u ON u.id = c.created_by&#039;.&lt;br /&gt;
    &#039; WHERE c.state = &#039;.(int) $state&lt;br /&gt;
    &#039;  AND u.id IS NOT NULL&#039;.&lt;br /&gt;
    &#039;  AND u.username &amp;lt;&amp;gt; &#039;.$db-&amp;gt;Quote( $name ).&lt;br /&gt;
    &#039; GROUP BY u.id&#039;.&lt;br /&gt;
    &#039;  HAVING COUNT( c.id ) &amp;gt; 0&#039;;&lt;br /&gt;
$db-&amp;gt;setQuery();&lt;br /&gt;
// Output formated query:&lt;br /&gt;
if ($debug) {&lt;br /&gt;
    echo $db-&amp;gt;getQuery();&lt;br /&gt;
}&lt;br /&gt;
$stats = $db-&amp;gt;loadObjectList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Doc Blocks ===&lt;br /&gt;
&lt;br /&gt;
All source code files in the core Joomla distribution must contain the following comment block as the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @version	$Id$&lt;br /&gt;
 * @package	Joomla&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.&lt;br /&gt;
 * @license	GNU/GPL, see LICENSE.php&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;@package&amp;lt;/code&amp;gt; in the header is not required for class-only files.&lt;br /&gt;
&lt;br /&gt;
Classes, functions, constants, class properties and class methods should all be supplied with appropriate DocBlocks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for class&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for class (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @subpackage SubPackageName&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class JFooBar&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @var int $id Primary key&lt;br /&gt;
     */&lt;br /&gt;
    public $id = null;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following package names are to be used in the core stack:&lt;br /&gt;
&lt;br /&gt;
* Joomla.Administrator - all files that belong only to the administrator or backend application&lt;br /&gt;
* Joomla.Installation - all files that belong to the installation application&lt;br /&gt;
* Joomla.Plugin - all plugin files&lt;br /&gt;
* Joomla.Site - all files that pertain only to the site or frontend application&lt;br /&gt;
* Joomla.XML-RPC - all files that belong to the XML-RPC server application&lt;br /&gt;
&lt;br /&gt;
The sub-package name will vary according to the extension type:&lt;br /&gt;
&lt;br /&gt;
* Components - the component folder, eg &amp;lt;code&amp;gt;com_content&amp;lt;/code&amp;gt;&lt;br /&gt;
* Modules - the module folder, eg &amp;lt;code&amp;gt;mod_latest_news&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plugins - the folder.element, eg &amp;lt;code&amp;gt;content.pagebreak&amp;lt;/code&amp;gt;&lt;br /&gt;
* Templates - the template folder, eg &amp;lt;code&amp;gt;rhuk_milkyway&amp;lt;/code&amp;gt;&lt;br /&gt;
* Framework - nothing for top level files (such as &amp;lt;code&amp;gt;factory.php&amp;lt;/code&amp;gt;), the first level folder or the first.second level folders as appropriate, eg &amp;lt;code&amp;gt;utilities&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;joomla/utitilies/date.php&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;html.html&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;joomla/html/html/email.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that code contributed to the Joomla stack that will become the copyright of the project is not allowed to include &amp;lt;code&amp;gt;@author&amp;lt;/code&amp;gt; tags.  You should update the contribution log in &amp;lt;tt&amp;gt;CREDITS.php&amp;lt;/tt&amp;gt;.  Joomla&#039;s philosophy is that the code is written &amp;quot;all together&amp;quot; and there is no notion of any one person &#039;owning&#039; any sectino of code.&lt;br /&gt;
&lt;br /&gt;
Files included from third party sources must leave DocBlocks intact.&lt;br /&gt;
&lt;br /&gt;
Example URLs&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Classes should be given descriptive names. Avoid using abbreviations where possible. Class names should always begin with an uppercase letter and be written in CamelCase even if using tradationally uppercase acryonyms (such as XML, HTML).  One exception is for Joomla framework classes which must begin with an uppercase &#039;J&#039; with the next letter also being uppercase.  For example:&lt;br /&gt;
&lt;br /&gt;
* JHtmlHelper&lt;br /&gt;
* JXmlParser&lt;br /&gt;
* JModel&lt;br /&gt;
&lt;br /&gt;
Third-party developers are advised to namespace their functions with a unique prefix.&lt;br /&gt;
&lt;br /&gt;
=== Functions and Methods ===&lt;br /&gt;
&lt;br /&gt;
Functions and methods should be named using the &amp;quot;studly caps&amp;quot; style (also referred to as &amp;quot;bumpy case&amp;quot; or &amp;quot;camel caps&amp;quot;). The initial letter of the name is lowercase, and each letter that starts a new &amp;quot;word&amp;quot; is capitalized. Function in the Joomla framework must begin with a lowercase &#039;j&#039;.  Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
connect();&lt;br /&gt;
getData();&lt;br /&gt;
buildSomeWidget();&lt;br /&gt;
jImport();&lt;br /&gt;
jDoSomething();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Private class members (meaning class members that are intended to be used only from within the same class in which they are declared; are preceded by a single underscore. Properties are to be written in underscore format (that is, logical words separated by underscores) and should be all lowercase.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class JFooBar&lt;br /&gt;
{&lt;br /&gt;
    // Joomla 1.5 and earlier format&lt;br /&gt;
    var $_status = null;&lt;br /&gt;
&lt;br /&gt;
    function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Joomla 1.6 format&lt;br /&gt;
    private $_status = null;&lt;br /&gt;
&lt;br /&gt;
    protected $field_name = null;&lt;br /&gt;
&lt;br /&gt;
    protected function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
&lt;br /&gt;
Constants should always be all-uppercase, with underscores to separate words. Prefix constant names with the uppercased name of the class/package they are used in. For example, the constants used by the [[JError]] class all begin with &amp;quot;JERROR_&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Global Variables ===&lt;br /&gt;
&lt;br /&gt;
If your package needs to define global variables, their name should start with a single underscore followed by the uppsercase class/package name and another underscore. For example, the JError class uses a global variable called $_JERROR_LEVELS.&lt;br /&gt;
&lt;br /&gt;
With PHP5 and later you may use static class properties or constants instead of globals.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class JWhatever&lt;br /&gt;
{&lt;br /&gt;
    public static $instance = null;&lt;br /&gt;
    const SUCCESS = 1;&lt;br /&gt;
    const FAILURE = 0;&lt;br /&gt;
    // Methods...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regular and Class Variables ===&lt;br /&gt;
&lt;br /&gt;
Regular variables, follow the same conventions as function.&lt;br /&gt;
&lt;br /&gt;
Class variables should be set to null or some other appropriate default value. Lining up the default values with tabs should only be used if particularly warranted for readability.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
When using references, there should be a space before the reference operator and no space between it and the function or variable name.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$ref1  = &amp;amp;$this-&amp;gt;_sql;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Language Keys ===&lt;br /&gt;
&lt;br /&gt;
Except for the most common of words, such as &amp;quot;Yes&amp;quot;, &amp;quot;No&amp;quot;, &amp;quot;Show&amp;quot;, &amp;quot;Hide&amp;quot; all language keys should be namespaced to reflect the type of string they represent.  Always consider that if two extensions use the same key, the one loaded last will be the one that displays.  Namespacing should generally relate to the extension displaying the text. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
echo JText::_(&#039;Weblink Link&#039;);&lt;br /&gt;
echo JText::_(&#039;Weblink Title&#039;);&lt;br /&gt;
echo JText::_(&#039;Weblink Description&#039;);&lt;br /&gt;
&lt;br /&gt;
echo JText::_(&#039;Exception An error occurred while saving&#039;);&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: Link to page with &amp;quot;common&amp;quot; strings that can be used for typical actions in components, such a &amp;quot;Save&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where the same English word is used in two different locations, two different language keys should be used to allow for cases where the translation results in different words or phrases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// A table column title&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;?php echo JText::_(&#039;Weblink Column Title&#039;);?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;?php echo JText::_(&#039;Weblink Column Link&#039;);?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// In the form&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Title&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;title&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Link&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;link&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Toolbar and Linkbar text should be prefixed Toolbar and Linkbar respectively.&lt;br /&gt;
&lt;br /&gt;
The language keys should be written as naturally as possible with spaces, not underscores separating words.  Long phrases can be condensed to reduce keys to a sensible length.  For example, tooltips for an edit field can be written like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Title&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;title&amp;quot; title=&amp;quot;&amp;lt;?php echo JText::_(&#039;Weblink Title Desc&#039;);?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The convention used should be governed by common sense, but must be consistent.  In general consider how the language file will look with all keys sorted alphabetically.  Prefixes should be used to group text within a common context (such as column headings).  Suffixes should be used to group elements that logically go together (such as a field name and its description).&lt;br /&gt;
&lt;br /&gt;
Phrases must never be assembled by string concatenation. Each phrase must be represented by a single language key, using sprintf as appropriate to replace dynamic words in the phrase.  Where replacements are made, the word used should be as descriptive as possible and all-uppercase.  This assists the translators to determine the context of the replacement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
// Not permitted&lt;br /&gt;
echo JText::_(&#039;Deleted &#039;).$n.JText::_(&#039; items&#039;);&lt;br /&gt;
&lt;br /&gt;
// Permitted&lt;br /&gt;
echo JText::sprintf(&#039;Message Deleted NUMBER items&#039;, $n);&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reference in the language file would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;MESSAGE DELETED NUMBER ITEMS=Deleted %d Item(s)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controllers ===&lt;br /&gt;
&lt;br /&gt;
For single controller components, the naming convention is &#039;&#039;[Name]Controller&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentController extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The file name will generally be &#039;&#039;controller.php&#039;&#039; and is located in the component folder.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_content&lt;br /&gt;
 / controller.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a multi-controller components, such as the Banners in the Administrator, the convention is &#039;&#039;[Component]Controller[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerControllerClient extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/controllers/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the controller.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /controllers/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Models===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Component]Model[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Model&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerModelClient extends JModel&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/models/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /models/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
The naming convention is &#039;&#039;[Component]View[Name]&#039;&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Contact Category View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewCategory extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/view/&amp;lt;/tt&amp;gt; folder under the component folder. The subfolder names will reflect the name of a View.&lt;br /&gt;
&lt;br /&gt;
 com_contact&lt;br /&gt;
  /views/&lt;br /&gt;
    /&#039;&#039;view name 1&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
    /&#039;&#039;view name 2&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
&lt;br /&gt;
Multi-view components such as com_content may provide an optional &amp;quot;master&amp;quot; view class the specialised views extend from. It is located in the component folder and typically called &#039;&#039;view.php&#039;&#039;. The naming convention is &#039;&#039;[Component]View&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 com_content&lt;br /&gt;
  /views/&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/archive/&amp;lt;/span&amp;gt;&lt;br /&gt;
       / view.html.php&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/article/&amp;lt;/span&amp;gt;&lt;br /&gt;
  / view.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
view.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentView extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Helper Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/archive/view.html.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Archive View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewArchive extends ContentView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Folder]View[Element]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
class ContentPluginPagebreak extends JPlugin&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
Components may support different Layouts to render the data supplied by a [[#Views|View]] and its [[#Models|Models]]. A Layout file usually contains markup and some PHP code for &#039;&#039;display logic only&#039;&#039;: no functions, no classes.&lt;br /&gt;
&lt;br /&gt;
A Layout consists of at least one .php file and an equally named [[Creating a basic layout.xml file|.xml manifest file]] located in the &amp;lt;tt&amp;gt;/tmpl/&amp;lt;/tt&amp;gt; folder of a View, both reflect the internal name of the Layout. The standard Layout is called &#039;&#039;default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;com_content&lt;br /&gt;
   /views/&lt;br /&gt;
     /article/&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#000&amp;quot;&amp;gt;&lt;br /&gt;
       /tmpl/&lt;br /&gt;
         / default.php&lt;br /&gt;
         / default.xml&lt;br /&gt;
         / form.php&lt;br /&gt;
         / form.xml&lt;br /&gt;
         / pagebreak.php&lt;br /&gt;
         / pagebreak.xml &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Layout may use supplemental .php files to provide more granual control in order to render individual parts or repetitive items of the data.&lt;br /&gt;
&lt;br /&gt;
Users may customise the Layout output via [[#Template Layout Overrides|Template Layout Overrides]].&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
=== Template Layout Overrides ===&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11223</id>
		<title>Coding style and standards</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11223"/>
		<updated>2008-10-21T09:29:31Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: Language additions, merge changes and suggestions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
remark: The following information has been copied from the old WIKI archive has not yet been reviewed.&lt;br /&gt;
See: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,standards:coding/&lt;br /&gt;
&lt;br /&gt;
Good coding standards are important in any development project, but particularly when multiple developers are working on the same project. Having coding standards helps ensure that the code is of high quality, has fewer bugs, and is easily maintained.&lt;br /&gt;
&lt;br /&gt;
First rule, if in doubt, ask.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
All files contributed to Joomla must:&lt;br /&gt;
&lt;br /&gt;
* Be stored as ASCII text&lt;br /&gt;
* Use UTF-8 character encoding&lt;br /&gt;
* Be Unix formatted&lt;br /&gt;
** Lines must end only with a line feed (LF). Line feeds are represented as ordinal 10, octal 012 and hex 0A. Do not use carriage returns (CR) like Macintosh computers do or the carriage return/line feed combination (CRLF) like Windows computers do.&lt;br /&gt;
&lt;br /&gt;
== Coding Standards ==&lt;br /&gt;
&lt;br /&gt;
=== Spelling ===&lt;br /&gt;
&lt;br /&gt;
Spelling of class, function, variable and constant names should generally be in accordance with British English rules (en_GB).  However, some exceptions are permitted, for example where common programming names are used that align with the PHP API such as &amp;lt;code&amp;gt;$color&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== E_STRICT-compatible code ===&lt;br /&gt;
&lt;br /&gt;
As of version 1.6, all new code that is suggested for inclusion into Joomla must be E_STRICT-compatible. This means that it must not produce any warnings or errors when PHP&#039;s error reporting level is set to E_ALL | E_STRICT.&lt;br /&gt;
&lt;br /&gt;
=== Indenting and Line Length ===&lt;br /&gt;
&lt;br /&gt;
Use tabs to indent, not spaces. Make sure that the tab-stops are set to only 4 spaces in length.&lt;br /&gt;
&lt;br /&gt;
There is no set limit for line length.  Use your judgement based on the nature of the line and readability.&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
These include if, for, while, switch, etc. Here is an example of an if statement, as it is the most complicated of the control structures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
} else if ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
} else&lt;br /&gt;
{&lt;br /&gt;
   // Use one true brace in control structures&lt;br /&gt;
   // when the block is longer than one line&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// optional formatting if it improves readability&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
}&lt;br /&gt;
else if ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control statements should have one space between the control keyword and opening parenthesis, to distinguish them from function calls.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;layouts&#039;&#039;&#039;, the alternative named notation should be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) OR (condition2)) :&lt;br /&gt;
    action1();&lt;br /&gt;
elseif ((condition3) AND (condition4)) :&lt;br /&gt;
    action2();&lt;br /&gt;
else :&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
endif;&lt;br /&gt;
&lt;br /&gt;
foreach ($array as $element) :&lt;br /&gt;
    echo $element;&lt;br /&gt;
endforeach;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logical operators in condition statements should use uppercase words (&amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt;, etc) rather than programmatic notation (&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt;, etc).&lt;br /&gt;
&lt;br /&gt;
With the exception of &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements, curly braces must always be included even though they are technically optional. Having them increases readability and decreases the likelihood of logic errors being introduced when new lines are added.&lt;br /&gt;
&lt;br /&gt;
For switch statements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition)&lt;br /&gt;
{&lt;br /&gt;
    case 1:&lt;br /&gt;
        doAction1();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    case 2:&lt;br /&gt;
        doAction2();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    default:&lt;br /&gt;
        doDefaultAction();&lt;br /&gt;
        break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use indenting and line-breaks rather than curly braces in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements to increase readability.  There should be no space between the condition and the colon in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
=== Function Calls ===&lt;br /&gt;
&lt;br /&gt;
Functions should be called with no spaces between the function name and the opening parenthesis, and no space between this and the first parameter; a space after the comma between each parameter (if they are present), and no space between the last parameter and the closing parenthesis, and the semicolon. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As displayed above, there should be space before and one space after the equals sign used to assign the return value of a function to a variable. In the case of a block of related assignments, tabs (not spaces) may be inserted to promote readability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short          = foo($bar);&lt;br /&gt;
$long_variable  = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Definitions ===&lt;br /&gt;
&lt;br /&gt;
Class and function declarations follow the &amp;quot;one true brace&amp;quot; convention:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction( $arg1, $arg2 = &#039;&#039; )&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class fooClass&lt;br /&gt;
{&lt;br /&gt;
    function fooMethod($arg1)&lt;br /&gt;
    {&lt;br /&gt;
        if ($arg) {&lt;br /&gt;
            $result = true;&lt;br /&gt;
        } else {&lt;br /&gt;
            $result = false;&lt;br /&gt;
        }&lt;br /&gt;
        return $result;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments with default values go at the end of the argument list. Always attempt to return a meaningful value from a function if one is appropriate. Here is a slightly longer example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo OR !$dsninfo[&#039;phptype&#039;]) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Inline documentation for classes should follow the PHPDoc convention, similar to Javadoc. More information about PHPDoc can be found here: http://www.phpdoc.org/&lt;br /&gt;
&lt;br /&gt;
See also [[Adding phpDocumentor comments]]&lt;br /&gt;
&lt;br /&gt;
Non-documentation comments are strongly encouraged. A general rule of thumb is that if you look at a section of code and think &amp;quot;Wow, I don&#039;t want to try and describe that&amp;quot;, you need to comment it before you forget how it works.&lt;br /&gt;
&lt;br /&gt;
C style comments (&amp;lt;tt&amp;gt;/* */&amp;lt;/tt&amp;gt;) and standard C++ comments (&amp;lt;tt&amp;gt;//&amp;lt;/tt&amp;gt;) are both satisfactory. Use of Perl/shell style comments (&amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt;) is not permitted.&lt;br /&gt;
&lt;br /&gt;
Please note - commented code is not to be committed to trunk or release repositories.&lt;br /&gt;
&lt;br /&gt;
=== Including Code ===&lt;br /&gt;
&lt;br /&gt;
Anywhere you are unconditionally including a class file, use &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt;. Anywhere you are conditionally including a class file (for example, factory methods), use &amp;lt;code&amp;gt;include_once&amp;lt;/code&amp;gt;. Either of these will ensure that class files are included only once. They share the same file list, so you don&#039;t need to worry about mixing them -- a file included with &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt; will not be included again by &amp;lt;/code&amp;gt;include_once&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Note: [[php:include_once|include_once]] and [[php:require_once|require_once]] are PHP &#039;&#039;language statements&#039;&#039;, not functions. You don&#039;t need parentheses around the filename to be included.&lt;br /&gt;
&lt;br /&gt;
=== PHP Code Tags ===&lt;br /&gt;
&lt;br /&gt;
Always use &amp;lt;tt&amp;gt;&amp;amp;lt;?php ?&amp;gt;&amp;lt;/tt&amp;gt; to delimit PHP code, not the &amp;lt;tt&amp;gt;&amp;amp;lt;? ?&amp;gt;&amp;lt;/tt&amp;gt; shorthand. This is the most portable way to include PHP code on differing operating systems and setups.&lt;br /&gt;
&lt;br /&gt;
For files that contain only PHP code, the closing tag (&amp;lt;tt&amp;gt;?&amp;gt;&amp;lt;/tt&amp;gt;) is never permitted. It is not required by PHP. Not including it prevents trailing whitespace from being accidentally injected into the output.&lt;br /&gt;
&lt;br /&gt;
=== SQL Queries ===&lt;br /&gt;
&lt;br /&gt;
SQL keywords are to be written in uppercase, while all other identifiers (which the exception of quoted text obviously) is to be in lowercase. Carriage returns should not be used as [[JDatabase]]::getQuery provides for formatted output.  However, indenting with spaces to improve readability is desireable.&lt;br /&gt;
&lt;br /&gt;
Queries should be wrapped in single quotes (as these text blocks are parsed faster by php).&lt;br /&gt;
&lt;br /&gt;
All quoted string must using the &#039;&#039;Quote&#039;&#039; method to facilitate future compatibility with other database engines.&lt;br /&gt;
&lt;br /&gt;
All table names should use the &#039;&#039;&#039;&amp;lt;tt&amp;gt;#_&amp;lt;/tt&amp;gt;&#039;&#039;&#039; prefix rather than &amp;lt;tt&amp;gt;jos_&amp;lt;/tt&amp;gt; to access Joomla! contents and allow for the [[screen.config.15#Database_Settings|user defined database prefix]] to be applied.&lt;br /&gt;
&lt;br /&gt;
All expected integer or floating-point variable must be [http://php.net/manual/language.types.type-juggling.php cast] with &amp;lt;tt&amp;gt;(int)&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;(float)&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;(double)&amp;lt;/tt&amp;gt; as appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$state = 1;&lt;br /&gt;
$name  = &#039;bill&#039;;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
$query = &#039;SELECT COUNT( c.id ) AS num_articles, u.id, u.username&#039;.&lt;br /&gt;
    &#039; FROM #__content AS c&#039;.&lt;br /&gt;
    &#039; LEFT JOIN #__users AS u ON u.id = c.created_by&#039;.&lt;br /&gt;
    &#039; WHERE c.state = &#039;.(int) $state&lt;br /&gt;
    &#039;  AND u.id IS NOT NULL&#039;.&lt;br /&gt;
    &#039;  AND u.username &amp;lt;&amp;gt; &#039;.$db-&amp;gt;Quote( $name ).&lt;br /&gt;
    &#039; GROUP BY u.id&#039;.&lt;br /&gt;
    &#039;  HAVING COUNT( c.id ) &amp;gt; 0&#039;;&lt;br /&gt;
$db-&amp;gt;setQuery();&lt;br /&gt;
// Output formated query:&lt;br /&gt;
if ($debug) {&lt;br /&gt;
    echo $db-&amp;gt;getQuery();&lt;br /&gt;
}&lt;br /&gt;
$stats = $db-&amp;gt;loadObjectList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Doc Blocks ===&lt;br /&gt;
&lt;br /&gt;
All source code files in the core Joomla distribution must contain the following comment block as the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @version	$Id$&lt;br /&gt;
 * @package	Joomla&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.&lt;br /&gt;
 * @license	GNU/GPL, see LICENSE.php&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;@package&amp;lt;/code&amp;gt; in the header is not required for class-only files.&lt;br /&gt;
&lt;br /&gt;
Classes, functions, constants, class properties and class methods should all be supplied with appropriate DocBlocks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for class&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for class (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @subpackage SubPackageName&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class JFooBar&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @var int $id Primary key&lt;br /&gt;
     */&lt;br /&gt;
    public $id = null;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following package names are to be used in the core stack:&lt;br /&gt;
&lt;br /&gt;
* Joomla.Administrator - all files that belong only to the administrator or backend application&lt;br /&gt;
* Joomla.Installation - all files that belong to the installation application&lt;br /&gt;
* Joomla.Plugin - all plugin files&lt;br /&gt;
* Joomla.Site - all files that pertain only to the site or frontend application&lt;br /&gt;
* Joomla.XML-RPC - all files that belong to the XML-RPC server application&lt;br /&gt;
&lt;br /&gt;
The sub-package name will vary according to the extension type:&lt;br /&gt;
&lt;br /&gt;
* Components - the component folder, eg &amp;lt;code&amp;gt;com_content&amp;lt;/code&amp;gt;&lt;br /&gt;
* Modules - the module folder, eg &amp;lt;code&amp;gt;mod_latest_news&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plugins - the folder.element, eg &amp;lt;code&amp;gt;content.pagebreak&amp;lt;/code&amp;gt;&lt;br /&gt;
* Templates - the template folder, eg &amp;lt;code&amp;gt;rhuk_milkyway&amp;lt;/code&amp;gt;&lt;br /&gt;
* Framework - nothing for top level files (such as &amp;lt;code&amp;gt;factory.php&amp;lt;/code&amp;gt;), the first level folder or the first.second level folders as appropriate, eg &amp;lt;code&amp;gt;utilities&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;joomla/utitilies/date.php&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;html.html&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;joomla/html/html/email.php&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that code contributed to the Joomla stack that will become the copyright of the project is not allowed to include &amp;lt;code&amp;gt;@author&amp;lt;/code&amp;gt; tags.  You should update the contribution log in &amp;lt;tt&amp;gt;CREDITS.php&amp;lt;/tt&amp;gt;.  Joomla&#039;s philosophy is that the code is written &amp;quot;all together&amp;quot; and there is no notion of any one person &#039;owning&#039; any sectino of code.&lt;br /&gt;
&lt;br /&gt;
Files included from third party sources must leave DocBlocks intact.&lt;br /&gt;
&lt;br /&gt;
Example URLs&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Classes should be given descriptive names. Avoid using abbreviations where possible. Class names should always begin with an uppercase letter and be written in CamelCase even if using tradationally uppercase acryonyms (such as XML, HTML).  One exception is for Joomla framework classes which must begin with an uppercase &#039;J&#039; with the next letter also being uppercase.  For example:&lt;br /&gt;
&lt;br /&gt;
* JHtmlHelper&lt;br /&gt;
* JXmlParser&lt;br /&gt;
* JModel&lt;br /&gt;
&lt;br /&gt;
Third-party developers are advised to namespace their functions with a unique prefix.&lt;br /&gt;
&lt;br /&gt;
=== Functions and Methods ===&lt;br /&gt;
&lt;br /&gt;
Functions and methods should be named using the &amp;quot;studly caps&amp;quot; style (also referred to as &amp;quot;bumpy case&amp;quot; or &amp;quot;camel caps&amp;quot;). The initial letter of the name is lowercase, and each letter that starts a new &amp;quot;word&amp;quot; is capitalized. Function in the Joomla framework must begin with a lowercase &#039;j&#039;.  Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
connect();&lt;br /&gt;
getData();&lt;br /&gt;
buildSomeWidget();&lt;br /&gt;
jImport();&lt;br /&gt;
jDoSomething();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Private class members (meaning class members that are intended to be used only from within the same class in which they are declared; are preceded by a single underscore. Properties are to be written in underscore format (that is, logical words separated by underscores) and should be all lowercase.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class JFooBar&lt;br /&gt;
{&lt;br /&gt;
    // Joomla 1.5 and earlier format&lt;br /&gt;
    var $_status = null;&lt;br /&gt;
&lt;br /&gt;
    function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Joomla 1.6 format&lt;br /&gt;
    private $_status = null;&lt;br /&gt;
&lt;br /&gt;
    protected $field_name = null;&lt;br /&gt;
&lt;br /&gt;
    protected function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
&lt;br /&gt;
Constants should always be all-uppercase, with underscores to separate words. Prefix constant names with the uppercased name of the class/package they are used in. For example, the constants used by the [[JError]] class all begin with &amp;quot;JERROR_&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Global Variables ===&lt;br /&gt;
&lt;br /&gt;
If your package needs to define global variables, their name should start with a single underscore followed by the uppsercase class/package name and another underscore. For example, the JError class uses a global variable called $_JERROR_LEVELS.&lt;br /&gt;
&lt;br /&gt;
With PHP5 and later you may use static class properties or constants instead of globals.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class JWhatever&lt;br /&gt;
{&lt;br /&gt;
    public static $instance = null;&lt;br /&gt;
    const SUCCESS = 1;&lt;br /&gt;
    const FAILURE = 0;&lt;br /&gt;
    // Methods...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regular and Class Variables ===&lt;br /&gt;
&lt;br /&gt;
Regular variables, follow the same conventions as function.&lt;br /&gt;
&lt;br /&gt;
Class variables should be set to null or some other appropriate default value. Lining up the default values with tabs should only be used if particularly warranted for readability.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
When using references, there should be a space before the reference operator and no space between it and the function or variable name.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$ref1  = &amp;amp;$this-&amp;gt;_sql;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Language Keys ===&lt;br /&gt;
&lt;br /&gt;
Except for the most common of words, such as &amp;quot;Yes&amp;quot;, &amp;quot;No&amp;quot;, &amp;quot;Show&amp;quot;, &amp;quot;Hide&amp;quot; all language keys should be namespaced to reflect the type of string they represent.  Always consider that if two extensions use the same key, the one loaded last will be the one that displays.  Namespacing should generally relate to the extension displaying the text. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?php&lt;br /&gt;
echo JText::_(&#039;Weblink Link&#039;);&lt;br /&gt;
echo JText::_(&#039;Weblink Title&#039;);&lt;br /&gt;
echo JText::_(&#039;Weblink Description&#039;);&lt;br /&gt;
&lt;br /&gt;
echo JText::_(&#039;Exception An error occurred while saving&#039;);&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: Link to page with &amp;quot;common&amp;quot; strings that can be used for typical actions in components, such a &amp;quot;Save&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where the same English word is used in two different locations, two different language keys should be used to allow for cases where the translation results in different words or phrases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
// A table column title&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;?php echo JText::_(&#039;Weblink Column Title&#039;);?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;?php echo JText::_(&#039;Weblink Column Link&#039;);?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// In the form&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Title&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;title&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Link&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;link&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Toolbar and Linkbar text should be prefixed Toolbar and Linkbar respectively.&lt;br /&gt;
&lt;br /&gt;
The language keys should be written as naturally as possible with spaces, not underscores separating words.  Long phrases can be condensed to reduce keys to a sensible length.  For example, tooltips for an edit field can be written like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;Weblink Title&#039;);?&amp;gt;&amp;lt;input name=&amp;quot;title&amp;quot; title=&amp;quot;&amp;lt;?php echo JText::_(&#039;Weblink Title Desc&#039;);?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The convention used should be governed by common sense, but must be consistent.  In general consider how the language file will look with all keys sorted alphabetically.  Prefixes should be used to group text within a common context (such as column headings).  Suffixes should be used to group elements that logically go together (such as a field name and its description).&lt;br /&gt;
&lt;br /&gt;
Phrases must never be assembled by string concatenation. Each phrase must be represented by a single language key, using sprintf as appropriate to replace dynamic words in the phrase.  Where replacements are made, the word used should be as descriptive as possible and all-uppercase.  This assists the translators to determine the context of the replacement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?php&lt;br /&gt;
// Not permitted&lt;br /&gt;
echo JText::_(&#039;Deleted &#039;).$n.JText::_(&#039; items&#039;);&lt;br /&gt;
&lt;br /&gt;
// Permitted&lt;br /&gt;
echo JText::sprintf(&#039;Message Deleted NUMBER items&#039;, $n);&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reference in the language file would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;MESSAGE DELETED NUMBER ITEMS=Deleted %d Item(s)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controllers ===&lt;br /&gt;
&lt;br /&gt;
For single controller components, the naming convention is &#039;&#039;[Name]Controller&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentController extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The file name will generally be &#039;&#039;controller.php&#039;&#039; and is located in the component folder.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_content&lt;br /&gt;
 / controller.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a multi-controller components, such as the Banners in the Administrator, the convention is &#039;&#039;[Component]Controller[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerControllerClient extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/controllers/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the controller.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /controllers/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Models===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Component]Model[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Model&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerModelClient extends JModel&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/models/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /models/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
The naming convention is &#039;&#039;[Component]View[Name]&#039;&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Contact Category View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewCategory extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/view/&amp;lt;/tt&amp;gt; folder under the component folder. The subfolder names will reflect the name of a View.&lt;br /&gt;
&lt;br /&gt;
 com_contact&lt;br /&gt;
  /views/&lt;br /&gt;
    /&#039;&#039;view name 1&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
    /&#039;&#039;view name 2&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
&lt;br /&gt;
Multi-view components such as com_content may provide an optional &amp;quot;master&amp;quot; view class the specialised views extend from. It is located in the component folder and typically called &#039;&#039;view.php&#039;&#039;. The naming convention is &#039;&#039;[Component]View&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 com_content&lt;br /&gt;
  /views/&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/archive/&amp;lt;/span&amp;gt;&lt;br /&gt;
       / view.html.php&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/article/&amp;lt;/span&amp;gt;&lt;br /&gt;
  / view.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
view.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentView extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Helper Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/archive/view.html.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Archive View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewArchive extends ContentView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Folder]View[Element]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
class ContentPluginPagebreak extends JPlugin&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
Components may support different Layouts to render the data supplied by a [[#Views|View]] and its [[#Models|Models]]. A Layout file usually contains markup and some PHP code for &#039;&#039;display logic only&#039;&#039;: no functions, no classes.&lt;br /&gt;
&lt;br /&gt;
A Layout consists of at least one .php file and an equally named [[Creating a basic layout.xml file|.xml manifest file]] located in the &amp;lt;tt&amp;gt;/tmpl/&amp;lt;/tt&amp;gt; folder of a View, both reflect the internal name of the Layout. The standard Layout is called &#039;&#039;default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;com_content&lt;br /&gt;
   /views/&lt;br /&gt;
     /article/&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#000&amp;quot;&amp;gt;&lt;br /&gt;
       /tmpl/&lt;br /&gt;
         / default.php&lt;br /&gt;
         / default.xml&lt;br /&gt;
         / form.php&lt;br /&gt;
         / form.xml&lt;br /&gt;
         / pagebreak.php&lt;br /&gt;
         / pagebreak.xml &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Layout may use supplemental .php files to provide more granual control in order to render individual parts or repetitive items of the data.&lt;br /&gt;
&lt;br /&gt;
Users may customise the Layout output via [[#Template Layout Overrides|Template Layout Overrides]].&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
=== Template Layout Overrides ===&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11210</id>
		<title>Archived:Version 1.6 Developer Notes</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11210"/>
		<updated>2008-10-18T22:27:51Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
Compilation of developer notes on changes in 1.6.&lt;br /&gt;
&lt;br /&gt;
== Schema ==&lt;br /&gt;
&lt;br /&gt;
Added ACL tables (todo - list them)&lt;br /&gt;
Removed jos_groups table&lt;br /&gt;
&lt;br /&gt;
== Framework ==&lt;br /&gt;
&lt;br /&gt;
=== JAuthorization ===&lt;br /&gt;
&lt;br /&gt;
Remove &amp;lt;code&amp;gt;JAuthorization::_mos_add_acl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Added &amp;lt;code&amp;gt;JAuthorization::getUserAccessLevels( $section [, $action = &#039;view&#039;] )&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== JDatabase ===&lt;br /&gt;
&lt;br /&gt;
JDatabase::setQuery casts the sql variable to a string. This allows you to pass an object that implements the __toString magic method.&lt;br /&gt;
&lt;br /&gt;
=== JFile ===&lt;br /&gt;
&lt;br /&gt;
Both JFile::write and JFTP::write now use a reference for its second argument. Code like &#039;&#039;JFile::write($filename,&#039;string&#039;);&#039;&#039; will fail, however &#039;&#039;$data = &#039;string&#039;; JFile::write($filename, $data);&#039;&#039; will work for both 1.5 and 1.6&lt;br /&gt;
&lt;br /&gt;
=== JModel ===&lt;br /&gt;
&lt;br /&gt;
JModel::getState will now take an optional second argument to set the default.&lt;br /&gt;
$value = $model-&amp;gt;getState( &#039;foo&#039;, &#039;bar&#039; );&lt;br /&gt;
&lt;br /&gt;
JModel has an addition contruction option and internal variable &amp;lt;code&amp;gt;__state_set&amp;lt;/code&amp;gt;.  This is used to lazy-load model initialisation.&lt;br /&gt;
&lt;br /&gt;
=== New API ===&lt;br /&gt;
&lt;br /&gt;
Added &amp;lt;code&amp;gt;JTableTree&amp;lt;/code&amp;gt; as an abstract class for tree-based tables.&lt;br /&gt;
&lt;br /&gt;
Made JObject abstract.  It can no longer be directly instantiated.  Use JStdClass instead.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
=== Join for access level ===&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__groups AS g ON g.id = c.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__core_acl_axo_groups AS g ON g.value = a.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Administrator:Users ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy Mode ==&lt;br /&gt;
&lt;br /&gt;
Only available in legacy mode (to be dropped in future versions):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;global $mainframe&amp;lt;/code&amp;gt; - Use &amp;lt;code&amp;gt;$app = &amp;amp;JFactory::getApplication()&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
* JTemplate (patTemplate completely deprecated)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files/Features Dropped ==&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to do this:&lt;br /&gt;
&lt;br /&gt;
* Access Level links in backend lists need to be refactored to support the new levels available in the jos_core_acl_axo_groups table.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11164</id>
		<title>Coding style and standards</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11164"/>
		<updated>2008-10-16T21:30:50Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: Add spelling note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
remark: The following information has been copied from the old WIKI archive has not yet been reviewed.&lt;br /&gt;
See: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,standards:coding/&lt;br /&gt;
&lt;br /&gt;
Good coding standards are important in any development project, but particularly when multiple developers are working on the same project. Having coding standards helps ensure that the code is of high quality, has fewer bugs, and is easily maintained.&lt;br /&gt;
&lt;br /&gt;
First rule, if in doubt, ask.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
All files contributed to Joomla must:&lt;br /&gt;
&lt;br /&gt;
* Be stored as ASCII text&lt;br /&gt;
* Use UTF-8 character encoding&lt;br /&gt;
* Be Unix formatted&lt;br /&gt;
** Lines must end only with a line feed (LF). Line feeds are represented as ordinal 10, octal 012 and hex 0A. Do not use carriage returns (CR) like Macintosh computers do or the carriage return/line feed combination (CRLF) like Windows computers do.&lt;br /&gt;
&lt;br /&gt;
== Coding Standards ==&lt;br /&gt;
&lt;br /&gt;
=== Spelling ===&lt;br /&gt;
&lt;br /&gt;
Spelling of class, function, variable and constant names should generally be in accordance with British English rules (en_GB).  However, some exceptions to this are common programming names that align with the PHP API such as &amp;lt;code&amp;gt;$color&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== E_STRICT-compatible code ===&lt;br /&gt;
&lt;br /&gt;
As of version 1.6, all new code that is suggested for inclusion into Joomla must be E_STRICT-compatible. This means that it must not produce any warnings or errors when PHP&#039;s error reporting level is set to E_ALL | E_STRICT.&lt;br /&gt;
&lt;br /&gt;
=== Indenting and Line Length ===&lt;br /&gt;
&lt;br /&gt;
Use tabs to indent, not spaces. Make sure that the tab-stops are set to only 4 spaces in length.&lt;br /&gt;
&lt;br /&gt;
There is no set limit for line length 75-85 characters is a good target.  Use your judgement based on the nature of the line and readability.  Line lengths in mixed HTML+PHP code will often be blow out so that the generated source remains reabable.&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
These include if, for, while, switch, etc. Here is an example of an if statement, as it is the most complicated of the control structures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) OR (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
} else if ((condition3) AND (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
} else&lt;br /&gt;
{&lt;br /&gt;
   // Use one true brace in control structures&lt;br /&gt;
   // when the block is longer than one line&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// optional formatting if it improves readability&lt;br /&gt;
if ((condition1) OR (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
}&lt;br /&gt;
else if ((condition3) AND (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control statements should have one space between the control keyword and opening parenthesis, to distinguish them from function calls.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;layouts&#039;&#039;&#039;, the alternative named notation should be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) OR (condition2)) :&lt;br /&gt;
    action1();&lt;br /&gt;
elseif ((condition3) AND (condition4)) :&lt;br /&gt;
    action2();&lt;br /&gt;
else :&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
endif;&lt;br /&gt;
&lt;br /&gt;
foreach ($array as $element) :&lt;br /&gt;
    echo $element;&lt;br /&gt;
endforeach;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logical operators in condition statements should use uppercase words (&amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt;, etc) rather than programmatic notation (&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt;, etc).&lt;br /&gt;
&lt;br /&gt;
With the exception of &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements, curly braces must always be included even though they are technically optional. Having them increases readability and decreases the likelihood of logic errors being introduced when new lines are added.&lt;br /&gt;
&lt;br /&gt;
For switch statements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition)&lt;br /&gt;
{&lt;br /&gt;
    case 1:&lt;br /&gt;
        doAction1();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    case 2:&lt;br /&gt;
        doAction2();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    default:&lt;br /&gt;
        doDefaultAction();&lt;br /&gt;
        break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use indenting and line-breaks rather than curly braces in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements to increase readability.  There should be no space between the condition and the colon in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
=== Function Calls ===&lt;br /&gt;
&lt;br /&gt;
Functions should be called with no spaces between the function name and the opening parenthesis, and no space between this and the first parameter; a space after the comma between each parameter (if they are present), and no space between the last parameter and the closing parenthesis, and the semicolon. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As displayed above, there should be space before and one space after the equals sign used to assign the return value of a function to a variable. In the case of a block of related assignments, tabs (not spaces) may be inserted to promote readability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short          = foo($bar);&lt;br /&gt;
$long_variable  = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Definitions ===&lt;br /&gt;
&lt;br /&gt;
Class and function declarations follow the &amp;quot;one true brace&amp;quot; convention:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction( $arg1, $arg2 = &#039;&#039; )&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class fooClass&lt;br /&gt;
{&lt;br /&gt;
    function fooMethod($arg1)&lt;br /&gt;
    {&lt;br /&gt;
        if ($arg) {&lt;br /&gt;
            $result = true;&lt;br /&gt;
        } else {&lt;br /&gt;
            $result = false;&lt;br /&gt;
        }&lt;br /&gt;
        return $result;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments with default values go at the end of the argument list. Always attempt to return a meaningful value from a function if one is appropriate. Here is a slightly longer example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo OR !$dsninfo[&#039;phptype&#039;]) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Inline documentation for classes should follow the PHPDoc convention, similar to Javadoc. More information about PHPDoc can be found here: http://www.phpdoc.org/&lt;br /&gt;
&lt;br /&gt;
See also [[Adding phpDocumentor comments]]&lt;br /&gt;
&lt;br /&gt;
Non-documentation comments are strongly encouraged. A general rule of thumb is that if you look at a section of code and think &amp;quot;Wow, I don&#039;t want to try and describe that&amp;quot;, you need to comment it before you forget how it works.&lt;br /&gt;
&lt;br /&gt;
C style comments (&amp;lt;tt&amp;gt;/* */&amp;lt;/tt&amp;gt;) and standard C++ comments (&amp;lt;tt&amp;gt;//&amp;lt;/tt&amp;gt;) are both satisfactory. Use of Perl/shell style comments (&amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt;) is not permitted.&lt;br /&gt;
&lt;br /&gt;
=== Including Code ===&lt;br /&gt;
&lt;br /&gt;
Anywhere you are unconditionally including a class file, use &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt;. Anywhere you are conditionally including a class file (for example, factory methods), use &amp;lt;code&amp;gt;include_once&amp;lt;/code&amp;gt;. Either of these will ensure that class files are included only once. They share the same file list, so you don&#039;t need to worry about mixing them -- a file included with &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt; will not be included again by &amp;lt;/code&amp;gt;include_once&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Note: [[php:include_once|include_once]] and [[php:require_once|require_once]] are PHP &#039;&#039;language statements&#039;&#039;, not functions. You don&#039;t need parentheses around the filename to be included.&lt;br /&gt;
&lt;br /&gt;
=== PHP Code Tags ===&lt;br /&gt;
&lt;br /&gt;
Always use &amp;lt;tt&amp;gt;&amp;amp;lt;?php ?&amp;gt;&amp;lt;/tt&amp;gt; to delimit PHP code, not the &amp;lt;tt&amp;gt;&amp;amp;lt;? ?&amp;gt;&amp;lt;/tt&amp;gt; shorthand. This is the most portable way to include PHP code on differing operating systems and setups.&lt;br /&gt;
&lt;br /&gt;
For files that contain only PHP code, the closing tag (&amp;lt;tt&amp;gt;?&amp;gt;&amp;lt;/tt&amp;gt;) is never permitted. It is not required by PHP. Not including it prevents trailing whitespace from being accidentally injected into the output.&lt;br /&gt;
&lt;br /&gt;
=== SQL Queries ===&lt;br /&gt;
&lt;br /&gt;
SQL keywords are to be written in uppercase, while all other identifiers (which the exception of quoted text obviously) is to be in lowercase. Carriage returns should not be used as [[JDatabase]]::getQuery provides for formatted output.  However, indenting with spaces to improve readability is desireable.&lt;br /&gt;
&lt;br /&gt;
Queries should be wrapped in single quotes (as these text blocks are parsed faster by php).&lt;br /&gt;
&lt;br /&gt;
All quoted string must using the &#039;&#039;Quote&#039;&#039; method to facilitate future compatibility with other database engines.&lt;br /&gt;
&lt;br /&gt;
All table names should use the &#039;&#039;&#039;&amp;lt;tt&amp;gt;#_&amp;lt;/tt&amp;gt;&#039;&#039;&#039; prefix rather than &amp;lt;tt&amp;gt;jos_&amp;lt;/tt&amp;gt; to access Joomla! contents and allow for the [[screen.config.15#Database_Settings|user defined database prefix]] to be applied.&lt;br /&gt;
&lt;br /&gt;
All expected integer or floating-point variable must be [http://php.net/manual/language.types.type-juggling.php cast] with &amp;lt;tt&amp;gt;(int)&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;(float)&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;(double)&amp;lt;/tt&amp;gt; as appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$state = 1;&lt;br /&gt;
$name  = &#039;bill&#039;;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
$query = &#039;SELECT COUNT( c.id ) AS num_articles, u.id, u.username&#039;.&lt;br /&gt;
    &#039; FROM #__content AS c&#039;.&lt;br /&gt;
    &#039; LEFT JOIN #__users AS u ON u.id = c.created_by&#039;.&lt;br /&gt;
    &#039; WHERE c.state = &#039;.(int) $state&lt;br /&gt;
    &#039;  AND u.id IS NOT NULL&#039;.&lt;br /&gt;
    &#039;  AND u.username &amp;lt;&amp;gt; &#039;.$db-&amp;gt;Quote( $name ).&lt;br /&gt;
    &#039; GROUP BY u.id&#039;.&lt;br /&gt;
    &#039;  HAVING COUNT( c.id ) &amp;gt; 0&#039;;&lt;br /&gt;
$db-&amp;gt;setQuery();&lt;br /&gt;
// Output formated query:&lt;br /&gt;
if ($debug) {&lt;br /&gt;
    echo $db-&amp;gt;getQuery();&lt;br /&gt;
}&lt;br /&gt;
$stats = $db-&amp;gt;loadObjectList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comment Blocks ===&lt;br /&gt;
&lt;br /&gt;
All source code files in the core PEAR distribution should contain the following comment block as the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @version	$Id$&lt;br /&gt;
 * @package	Joomla&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.&lt;br /&gt;
 * @license	GNU/GPL, see LICENSE.php&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes, functions, constants, class properties and class methods should all be supplied with appropriate DocBlocks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for class&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for class (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class fooBar&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @var int $id Primary key&lt;br /&gt;
     */&lt;br /&gt;
    public $id = null;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that code contributed to the Joomla stack that will become the copyright of the project is not allowed to include &amp;lt;code&amp;gt;@author&amp;lt;/code&amp;gt; tags.  You should update the contribution log in &amp;lt;tt&amp;gt;CREDITS.php&amp;lt;/tt&amp;gt;.  Joomla&#039;s philosophy is that the code is written &amp;quot;all together&amp;quot; and there is no notion of any one person &#039;owning&#039; any sectino of code.&lt;br /&gt;
&lt;br /&gt;
Files included from third party sources must leave DocBlocks intact.&lt;br /&gt;
&lt;br /&gt;
Example URLs&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Classes should be given descriptive names. Avoid using abbreviations where possible. Class names should always begin with an uppercase letter and be written in CamelCase.&lt;br /&gt;
&lt;br /&gt;
Third-party developers are advised to namespace their functions with a unique prefix.&lt;br /&gt;
&lt;br /&gt;
=== Functions and Methods ===&lt;br /&gt;
&lt;br /&gt;
Functions and methods should be named using the &amp;quot;studly caps&amp;quot; style (also referred to as &amp;quot;bumpy case&amp;quot; or &amp;quot;camel caps&amp;quot;). The initial letter of the name is lowercase, and each letter that starts a new &amp;quot;word&amp;quot; is capitalized. Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
connect();&lt;br /&gt;
getData();&lt;br /&gt;
buildSomeWidget();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Private class members (meaning class members that are intented to be used only from within the same class in which they are declared; are preceded by a single underscore. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class fooBar&lt;br /&gt;
{&lt;br /&gt;
    // Joomla 1.5 and earlier format&lt;br /&gt;
    var $_status = null;&lt;br /&gt;
&lt;br /&gt;
    function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Joomla 1.6 format&lt;br /&gt;
    private $_status = null;&lt;br /&gt;
&lt;br /&gt;
    protected function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
&lt;br /&gt;
Constants should always be all-uppercase, with underscores to separate words. Prefix constant names with the uppercased name of the class/package they are used in. For example, the constants used by the [[JError]] class all begin with &amp;quot;JERROR_&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Global Variables ===&lt;br /&gt;
&lt;br /&gt;
If your package needs to define global variables, their name should start with a single underscore followed by the uppsercase class/package name and another underscore. For example, the JError class uses a global variable called $_JERROR_LEVELS.&lt;br /&gt;
&lt;br /&gt;
With PHP5 and later you may use static class properties or constants instead of globals.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class JWhatever&lt;br /&gt;
{&lt;br /&gt;
    public static $instance = null;&lt;br /&gt;
    const SUCCESS = 1;&lt;br /&gt;
    const FAILURE = 0;&lt;br /&gt;
    // Methods...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regular and Class Variables ===&lt;br /&gt;
&lt;br /&gt;
Regular variables, follow the same conventions as function.&lt;br /&gt;
&lt;br /&gt;
Class variables should be set to null or some other appropriate default value. Lining up the default values with tabs should only be used if particularly warranted for readability.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
When using references, there should be a space before the reference operator and no space between it and the function or variable name.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$ref1  = &amp;amp;$this-&amp;gt;_sql;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controllers ===&lt;br /&gt;
&lt;br /&gt;
For single controller components, the naming convention is &#039;&#039;[Name]Controller&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentController extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The file name will generally be &#039;&#039;controller.php&#039;&#039; and is located in the component folder.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_content&lt;br /&gt;
 / controller.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a multi-controller components, such as the Banners in the Administrator, the convention is &#039;&#039;[Component]Controller[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerControllerClient extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/controllers/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the controller.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /controllers/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Models===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Component]Model[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Model&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerModelClient extends JModel&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/models/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /models/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
The naming convention is &#039;&#039;[Component]View[Name]&#039;&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Contact Category View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewCategory extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/view/&amp;lt;/tt&amp;gt; folder under the component folder. The subfolder names will reflect the name of a View.&lt;br /&gt;
&lt;br /&gt;
 com_contact&lt;br /&gt;
  /views/&lt;br /&gt;
    /&#039;&#039;view name 1&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
    /&#039;&#039;view name 2&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
&lt;br /&gt;
Multi-view components such as com_content may provide an optional &amp;quot;master&amp;quot; view class the specialised views extend from. It is located in the component folder and typically called &#039;&#039;view.php&#039;&#039;. The naming convention is &#039;&#039;[Component]View&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 com_content&lt;br /&gt;
  /views/&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/archive/&amp;lt;/span&amp;gt;&lt;br /&gt;
       / view.html.php&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/article/&amp;lt;/span&amp;gt;&lt;br /&gt;
  / view.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
view.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentView extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Helper Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/archive/view.html.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Archive View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewArchive extends ContentView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
Components may support different Layouts to render the data supplied by a [[#Views|View]] and its [[#Models|Models]]. A Layout file usually contains markup and some PHP code for &#039;&#039;display logic only&#039;&#039;: no functions, no classes.&lt;br /&gt;
&lt;br /&gt;
A Layout consists of at least one .php file and an equally named [[Creating a basic layout.xml file|.xml manifest file]] located in the &amp;lt;tt&amp;gt;/tmpl/&amp;lt;/tt&amp;gt; folder of a View, both reflect the internal name of the Layout. The standard Layout is called &#039;&#039;default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;com_content&lt;br /&gt;
   /views/&lt;br /&gt;
     /article/&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#000&amp;quot;&amp;gt;&lt;br /&gt;
       /tmpl/&lt;br /&gt;
         / default.php&lt;br /&gt;
         / default.xml&lt;br /&gt;
         / form.php&lt;br /&gt;
         / form.xml&lt;br /&gt;
         / pagebreak.php&lt;br /&gt;
         / pagebreak.xml &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Layout may use supplemental .php files to provide more granual control in order to render individual parts or repetitive items of the data.&lt;br /&gt;
&lt;br /&gt;
Users may customise the Layout output via [[#Template Layout Overrides|Template Layout Overrides]].&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
=== Template Layout Overrides ===&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11158</id>
		<title>Coding style and standards</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Coding_style_and_standards&amp;diff=11158"/>
		<updated>2008-10-16T06:52:07Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: Major revision bringing in new standard for 1.6&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
remark: The following information has been copied from the old WIKI archive has not yet been reviewed.&lt;br /&gt;
See: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,standards:coding/&lt;br /&gt;
&lt;br /&gt;
Good coding standards are important in any development project, but particularly when multiple developers are working on the same project. Having coding standards helps ensure that the code is of high quality, has fewer bugs, and is easily maintained.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
All files contributed to Joomla must:&lt;br /&gt;
&lt;br /&gt;
* Be stored as ASCII text&lt;br /&gt;
* Use UTF-8 character encoding&lt;br /&gt;
* Be Unix formatted&lt;br /&gt;
** Lines must end only with a line feed (LF). Line feeds are represented as ordinal 10, octal 012 and hex 0A. Do not use carriage returns (CR) like Macintosh computers do or the carriage return/line feed combination (CRLF) like Windows computers do.&lt;br /&gt;
&lt;br /&gt;
== Coding Standards ==&lt;br /&gt;
&lt;br /&gt;
=== E_STRICT-compatible code ===&lt;br /&gt;
&lt;br /&gt;
As of version 1.6, all new code that is suggested for inclusion into Joomla must be E_STRICT-compatible. This means that it must not produce any warnings or errors when PHP&#039;s error reporting level is set to E_ALL | E_STRICT.&lt;br /&gt;
&lt;br /&gt;
=== Indenting and Line Length ===&lt;br /&gt;
&lt;br /&gt;
Use tabs to indent, not spaces. Make sure that the tab-stops are set to only 4 spaces in length.&lt;br /&gt;
&lt;br /&gt;
There is no set limit for line length 75-85 characters is a good target.  Use your judgement based on the nature of the line and readability.  Line lengths in mixed HTML+PHP code will often be blow out so that the generated source remains reabable.&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
These include if, for, while, switch, etc. Here is an example of an if statement, as it is the most complicated of the control structures:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) OR (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
} else if ((condition3) AND (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
} else&lt;br /&gt;
{&lt;br /&gt;
   // Use one true brace in control structures&lt;br /&gt;
   // when the block is longer than one line&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// optional formatting if it improves readability&lt;br /&gt;
if ((condition1) OR (condition2)) {&lt;br /&gt;
    action1();&lt;br /&gt;
}&lt;br /&gt;
else if ((condition3) AND (condition4)) {&lt;br /&gt;
    action2();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control statements should have one space between the control keyword and opening parenthesis, to distinguish them from function calls.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;layouts&#039;&#039;&#039;, the alternative named notation should be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) OR (condition2)) :&lt;br /&gt;
    action1();&lt;br /&gt;
elseif ((condition3) AND (condition4)) :&lt;br /&gt;
    action2();&lt;br /&gt;
else :&lt;br /&gt;
    defaultAction();&lt;br /&gt;
    anotherAction();&lt;br /&gt;
endif;&lt;br /&gt;
&lt;br /&gt;
foreach ($array as $element) :&lt;br /&gt;
    echo $element;&lt;br /&gt;
endforeach;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logical operators in condition statements should use uppercase words (&amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt;, etc) rather than programmatic notation (&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt;, etc).&lt;br /&gt;
&lt;br /&gt;
With the exception of &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements, curly braces must always be included even though they are technically optional. Having them increases readability and decreases the likelihood of logic errors being introduced when new lines are added.&lt;br /&gt;
&lt;br /&gt;
For switch statements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition)&lt;br /&gt;
{&lt;br /&gt;
    case 1:&lt;br /&gt;
        doAction1();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    case 2:&lt;br /&gt;
        doAction2();&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    default:&lt;br /&gt;
        doDefaultAction();&lt;br /&gt;
        break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use indenting and line-breaks rather than curly braces in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statements to increase readability.  There should be no space between the condition and the colon in the &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
=== Function Calls ===&lt;br /&gt;
&lt;br /&gt;
Functions should be called with no spaces between the function name and the opening parenthesis, and no space between this and the first parameter; a space after the comma between each parameter (if they are present), and no space between the last parameter and the closing parenthesis, and the semicolon. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As displayed above, there should be space before and one space after the equals sign used to assign the return value of a function to a variable. In the case of a block of related assignments, tabs (not spaces) may be inserted to promote readability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short          = foo($bar);&lt;br /&gt;
$long_variable  = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function Definitions ===&lt;br /&gt;
&lt;br /&gt;
Class and function declarations follow the &amp;quot;one true brace&amp;quot; convention:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction( $arg1, $arg2 = &#039;&#039; )&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class fooClass&lt;br /&gt;
{&lt;br /&gt;
    function fooMethod($arg1)&lt;br /&gt;
    {&lt;br /&gt;
        if ($arg) {&lt;br /&gt;
            $result = true;&lt;br /&gt;
        } else {&lt;br /&gt;
            $result = false;&lt;br /&gt;
        }&lt;br /&gt;
        return $result;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments with default values go at the end of the argument list. Always attempt to return a meaningful value from a function if one is appropriate. Here is a slightly longer example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo OR !$dsninfo[&#039;phptype&#039;]) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Inline documentation for classes should follow the PHPDoc convention, similar to Javadoc. More information about PHPDoc can be found here: http://www.phpdoc.org/&lt;br /&gt;
&lt;br /&gt;
See also [[Adding phpDocumentor comments]]&lt;br /&gt;
&lt;br /&gt;
Non-documentation comments are strongly encouraged. A general rule of thumb is that if you look at a section of code and think &amp;quot;Wow, I don&#039;t want to try and describe that&amp;quot;, you need to comment it before you forget how it works.&lt;br /&gt;
&lt;br /&gt;
C style comments (&amp;lt;tt&amp;gt;/* */&amp;lt;/tt&amp;gt;) and standard C++ comments (&amp;lt;tt&amp;gt;//&amp;lt;/tt&amp;gt;) are both satisfactory. Use of Perl/shell style comments (&amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt;) is not permitted.&lt;br /&gt;
&lt;br /&gt;
=== Including Code ===&lt;br /&gt;
&lt;br /&gt;
Anywhere you are unconditionally including a class file, use &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt;. Anywhere you are conditionally including a class file (for example, factory methods), use &amp;lt;code&amp;gt;include_once&amp;lt;/code&amp;gt;. Either of these will ensure that class files are included only once. They share the same file list, so you don&#039;t need to worry about mixing them -- a file included with &amp;lt;code&amp;gt;require_once&amp;lt;/code&amp;gt; will not be included again by &amp;lt;/code&amp;gt;include_once&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Note: [[php:include_once|include_once]] and [[php:require_once|require_once]] are PHP &#039;&#039;language statements&#039;&#039;, not functions. You don&#039;t need parentheses around the filename to be included.&lt;br /&gt;
&lt;br /&gt;
=== PHP Code Tags ===&lt;br /&gt;
&lt;br /&gt;
Always use &amp;lt;tt&amp;gt;&amp;amp;lt;?php ?&amp;gt;&amp;lt;/tt&amp;gt; to delimit PHP code, not the &amp;lt;tt&amp;gt;&amp;amp;lt;? ?&amp;gt;&amp;lt;/tt&amp;gt; shorthand. This is the most portable way to include PHP code on differing operating systems and setups.&lt;br /&gt;
&lt;br /&gt;
For files that contain only PHP code, the closing tag (&amp;lt;tt&amp;gt;?&amp;gt;&amp;lt;/tt&amp;gt;) is never permitted. It is not required by PHP. Not including it prevents trailing whitespace from being accidentally injected into the output.&lt;br /&gt;
&lt;br /&gt;
=== SQL Queries ===&lt;br /&gt;
&lt;br /&gt;
SQL keywords are to be written in uppercase, while all other identifiers (which the exception of quoted text obviously) is to be in lowercase. Carriage returns should not be used as [[JDatabase]]::getQuery provides for formatted output.  However, indenting with spaces to improve readability is desireable.&lt;br /&gt;
&lt;br /&gt;
Queries should be wrapped in single quotes (as these text blocks are parsed faster by php).&lt;br /&gt;
&lt;br /&gt;
All quoted string must using the &#039;&#039;Quote&#039;&#039; method to facilitate future compatibility with other database engines.&lt;br /&gt;
&lt;br /&gt;
All table names should use the &#039;&#039;&#039;&amp;lt;tt&amp;gt;#_&amp;lt;/tt&amp;gt;&#039;&#039;&#039; prefix rather than &amp;lt;tt&amp;gt;jos_&amp;lt;/tt&amp;gt; to access Joomla! contents and allow for the [[screen.config.15#Database_Settings|user defined database prefix]] to be applied.&lt;br /&gt;
&lt;br /&gt;
All expected integer or floating-point variable must be [http://php.net/manual/language.types.type-juggling.php cast] with &amp;lt;tt&amp;gt;(int)&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;(float)&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;(double)&amp;lt;/tt&amp;gt; as appropriate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$state = 1;&lt;br /&gt;
$name  = &#039;bill&#039;;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
$query = &#039;SELECT COUNT( c.id ) AS num_articles, u.id, u.username&#039;.&lt;br /&gt;
    &#039; FROM #__content AS c&#039;.&lt;br /&gt;
    &#039; LEFT JOIN #__users AS u ON u.id = c.created_by&#039;.&lt;br /&gt;
    &#039; WHERE c.state = &#039;.(int) $state&lt;br /&gt;
    &#039;  AND u.id IS NOT NULL&#039;.&lt;br /&gt;
    &#039;  AND u.username &amp;lt;&amp;gt; &#039;.$db-&amp;gt;Quote( $name ).&lt;br /&gt;
    &#039; GROUP BY u.id&#039;.&lt;br /&gt;
    &#039;  HAVING COUNT( c.id ) &amp;gt; 0&#039;;&lt;br /&gt;
$db-&amp;gt;setQuery();&lt;br /&gt;
// Output formated query:&lt;br /&gt;
if ($debug) {&lt;br /&gt;
    echo $db-&amp;gt;getQuery();&lt;br /&gt;
}&lt;br /&gt;
$stats = $db-&amp;gt;loadObjectList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comment Blocks ===&lt;br /&gt;
&lt;br /&gt;
All source code files in the core PEAR distribution should contain the following comment block as the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @version	$Id$&lt;br /&gt;
 * @package	Joomla&lt;br /&gt;
 * @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.&lt;br /&gt;
 * @license	GNU/GPL, see LICENSE.php&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classes, functions, constants, class properties and class methods should all be supplied with appropriate DocBlocks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for class&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for class (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class fooBar&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * @var int $id Primary key&lt;br /&gt;
     */&lt;br /&gt;
    public $id = null;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that code contributed to the Joomla stack that will become the copyright of the project is not allowed to include &amp;lt;code&amp;gt;@author&amp;lt;/code&amp;gt; tags.  You should update the contribution log in &amp;lt;tt&amp;gt;CREDITS.php&amp;lt;/tt&amp;gt;.  Joomla&#039;s philosophy is that the code is written &amp;quot;all together&amp;quot; and there is no notion of any one person &#039;owning&#039; any sectino of code.&lt;br /&gt;
&lt;br /&gt;
Files included from third party sources must leave DocBlocks intact.&lt;br /&gt;
&lt;br /&gt;
Example URLs&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Classes should be given descriptive names. Avoid using abbreviations where possible. Class names should always begin with an uppercase letter and be written in CamelCase.&lt;br /&gt;
&lt;br /&gt;
Third-party developers are advised to namespace their functions with a unique prefix.&lt;br /&gt;
&lt;br /&gt;
=== Functions and Methods ===&lt;br /&gt;
&lt;br /&gt;
Functions and methods should be named using the &amp;quot;studly caps&amp;quot; style (also referred to as &amp;quot;bumpy case&amp;quot; or &amp;quot;camel caps&amp;quot;). The initial letter of the name is lowercase, and each letter that starts a new &amp;quot;word&amp;quot; is capitalized. Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
connect();&lt;br /&gt;
getData();&lt;br /&gt;
buildSomeWidget();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Private class members (meaning class members that are intented to be used only from within the same class in which they are declared; are preceded by a single underscore. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class fooBar&lt;br /&gt;
{&lt;br /&gt;
    // Joomla 1.5 and earlier format&lt;br /&gt;
    var $_status = null;&lt;br /&gt;
&lt;br /&gt;
    function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Joomla 1.6 format&lt;br /&gt;
    private $_status = null;&lt;br /&gt;
&lt;br /&gt;
    protected function _sort()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
&lt;br /&gt;
Constants should always be all-uppercase, with underscores to separate words. Prefix constant names with the uppercased name of the class/package they are used in. For example, the constants used by the [[JError]] class all begin with &amp;quot;JERROR_&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Global Variables ===&lt;br /&gt;
&lt;br /&gt;
If your package needs to define global variables, their name should start with a single underscore followed by the uppsercase class/package name and another underscore. For example, the JError class uses a global variable called $_JERROR_LEVELS.&lt;br /&gt;
&lt;br /&gt;
With PHP5 and later you may use static class properties or constants instead of globals.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class JWhatever&lt;br /&gt;
{&lt;br /&gt;
    public static $instance = null;&lt;br /&gt;
    const SUCCESS = 1;&lt;br /&gt;
    const FAILURE = 0;&lt;br /&gt;
    // Methods...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regular and Class Variables ===&lt;br /&gt;
&lt;br /&gt;
Regular variables, follow the same conventions as function.&lt;br /&gt;
&lt;br /&gt;
Class variables should be set to null or some other appropriate default value. Lining up the default values with tabs should only be used if particularly warranted for readability.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
When using references, there should be a space before the reference operator and no space between it and the function or variable name.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$ref1  = &amp;amp;$this-&amp;gt;_sql;&lt;br /&gt;
$db    = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controllers ===&lt;br /&gt;
&lt;br /&gt;
For single controller components, the naming convention is &#039;&#039;[Name]Controller&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentController extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The file name will generally be &#039;&#039;controller.php&#039;&#039; and is located in the component folder.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_content&lt;br /&gt;
 / controller.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a multi-controller components, such as the Banners in the Administrator, the convention is &#039;&#039;[Component]Controller[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Controller&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerControllerClient extends JController&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/controllers/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the controller.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /controllers/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Models===&lt;br /&gt;
&lt;br /&gt;
The naming convention is &#039;&#039;[Component]Model[Name]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Banner Client Model&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class BannerModelClient extends JModel&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/models/&amp;lt;/tt&amp;gt; folder under the component folder.  The file names will reflect the name of the model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
com_banner&lt;br /&gt;
  /models/&lt;br /&gt;
    / banner.php&lt;br /&gt;
    / client.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
The naming convention is &#039;&#039;[Component]View[Name]&#039;&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Contact Category View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewCategory extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The files will be located in a &amp;lt;tt&amp;gt;/view/&amp;lt;/tt&amp;gt; folder under the component folder. The subfolder names will reflect the name of a View.&lt;br /&gt;
&lt;br /&gt;
 com_contact&lt;br /&gt;
  /views/&lt;br /&gt;
    /&#039;&#039;view name 1&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
    /&#039;&#039;view name 2&#039;&#039;/&lt;br /&gt;
      / view.html.php&lt;br /&gt;
&lt;br /&gt;
Multi-view components such as com_content may provide an optional &amp;quot;master&amp;quot; view class the specialised views extend from. It is located in the component folder and typically called &#039;&#039;view.php&#039;&#039;. The naming convention is &#039;&#039;[Component]View&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 com_content&lt;br /&gt;
  /views/&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/archive/&amp;lt;/span&amp;gt;&lt;br /&gt;
       / view.html.php&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;/article/&amp;lt;/span&amp;gt;&lt;br /&gt;
  / view.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
view.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContentView extends JView&lt;br /&gt;
{&lt;br /&gt;
    // Helper Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/archive/view.html.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Content Archive View&lt;br /&gt;
 * @package Joomla&lt;br /&gt;
 */&lt;br /&gt;
class ContactViewArchive extends ContentView&lt;br /&gt;
{&lt;br /&gt;
    // Methods&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
Components may support different Layouts to render the data supplied by a [[#Views|View]] and its [[#Models|Models]]. A Layout file usually contains markup and some PHP code for &#039;&#039;display logic only&#039;&#039;: no functions, no classes.&lt;br /&gt;
&lt;br /&gt;
A Layout consists of at least one .php file and an equally named [[Creating a basic layout.xml file|.xml manifest file]] located in the &amp;lt;tt&amp;gt;/tmpl/&amp;lt;/tt&amp;gt; folder of a View, both reflect the internal name of the Layout. The standard Layout is called &#039;&#039;default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;com_content&lt;br /&gt;
   /views/&lt;br /&gt;
     /article/&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#000&amp;quot;&amp;gt;&lt;br /&gt;
       /tmpl/&lt;br /&gt;
         / default.php&lt;br /&gt;
         / default.xml&lt;br /&gt;
         / form.php&lt;br /&gt;
         / form.xml&lt;br /&gt;
         / pagebreak.php&lt;br /&gt;
         / pagebreak.xml &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Layout may use supplemental .php files to provide more granual control in order to render individual parts or repetitive items of the data.&lt;br /&gt;
&lt;br /&gt;
Users may customise the Layout output via [[#Template Layout Overrides|Template Layout Overrides]].&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
=== Template Layout Overrides ===&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11034</id>
		<title>Archived:Version 1.6 Developer Notes</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11034"/>
		<updated>2008-10-11T11:45:33Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
Compilation of developer notes on changes in 1.6.&lt;br /&gt;
&lt;br /&gt;
== Schema ==&lt;br /&gt;
&lt;br /&gt;
Added ACL tables (todo - list them)&lt;br /&gt;
Removed jos_groups table&lt;br /&gt;
&lt;br /&gt;
== Framework ==&lt;br /&gt;
&lt;br /&gt;
JDatabase::setQuery casts the sql variable to a string. This allows you to pass an object that implements the __toString magic method.&lt;br /&gt;
&lt;br /&gt;
JModel::getState will now take an optional second argument to set the default.&lt;br /&gt;
$value = $model-&amp;gt;getState( &#039;foo&#039;, &#039;bar&#039; );&lt;br /&gt;
&lt;br /&gt;
Both JFile::write and JFTP::write now use a reference for its second argument. Code like &#039;&#039;JFile::write($filename,&#039;string&#039;);&#039;&#039; will fail, however &#039;&#039;$data = &#039;string&#039;; JFile::write($filename, $data);&#039;&#039; will work for both 1.5 and 1.6&lt;br /&gt;
&lt;br /&gt;
Remove &amp;lt;code&amp;gt;JAuthorization::_mos_add_acl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Added &amp;lt;code&amp;gt;JAuthorization::getUserAccessLevels( $section [, $action = &#039;view&#039;] )&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Added &amp;lt;code&amp;gt;JTableTree&amp;lt;/code&amp;gt; as an abstract class for tree-based tables.&lt;br /&gt;
&lt;br /&gt;
JModel has an addition contruction option and internal variable &amp;lt;code&amp;gt;__state_set&amp;lt;/code&amp;gt;.  This is used to lazy-load model initialisation.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
=== Join for access level ===&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__groups AS g ON g.id = c.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__core_acl_axo_groups AS g ON g.value = a.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Administrator:Users ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy Mode ==&lt;br /&gt;
&lt;br /&gt;
Only available in legacy mode (to be dropped in future versions):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;global $mainframe&amp;lt;/code&amp;gt; - Use &amp;lt;code&amp;gt;$app = &amp;amp;JFactory::getApplication()&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
* JTemplate (patTemplate completely deprecated)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files/Features Dropped ==&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to do this:&lt;br /&gt;
&lt;br /&gt;
* Access Level links in backend lists need to be refactored to support the new levels available in the jos_core_acl_axo_groups table.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11028</id>
		<title>Archived:Version 1.6 Developer Notes</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11028"/>
		<updated>2008-10-10T02:43:58Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
Compilation of developer notes on changes in 1.6.&lt;br /&gt;
&lt;br /&gt;
== Schema ==&lt;br /&gt;
&lt;br /&gt;
Added ACL tables (todo - list them)&lt;br /&gt;
Removed jos_groups table&lt;br /&gt;
&lt;br /&gt;
== Framework ==&lt;br /&gt;
&lt;br /&gt;
JDatabase::setQuery casts the sql variable to a string. This allows you to pass an object that implements the __toString magic method.&lt;br /&gt;
&lt;br /&gt;
JModel::getState will now take an optional second argument to set the default.&lt;br /&gt;
$value = $model-&amp;gt;getState( &#039;foo&#039;, &#039;bar&#039; );&lt;br /&gt;
&lt;br /&gt;
Both JFile::write and JFTP::write now use a reference for its second argument. Code like &#039;&#039;JFile::write($filename,&#039;string&#039;);&#039;&#039; will fail, however &#039;&#039;$data = &#039;string&#039;; JFile::write($filename, $data);&#039;&#039; will work for both 1.5 and 1.6&lt;br /&gt;
&lt;br /&gt;
Remove &amp;lt;code&amp;gt;JAuthorization::_mos_add_acl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Added &amp;lt;code&amp;gt;JAuthorization::getUserAccessLevels( $section [, $action = &#039;view&#039;] )&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
=== Join for access level ===&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__groups AS g ON g.id = c.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__core_acl_axo_groups AS g ON g.value = a.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Administrator:Users ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy Mode ==&lt;br /&gt;
&lt;br /&gt;
Only available in legacy mode (to be dropped in future versions):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;global $mainframe&amp;lt;/code&amp;gt; - Use &amp;lt;code&amp;gt;$app = &amp;amp;JFactory::getApplication()&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
* JTemplate (patTemplate completely deprecated)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files/Features Dropped ==&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to do this:&lt;br /&gt;
&lt;br /&gt;
* Access Level links in backend lists need to be refactored to support the new levels available in the jos_core_acl_axo_groups table.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11027</id>
		<title>Archived:Version 1.6 Developer Notes</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11027"/>
		<updated>2008-10-10T02:31:25Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
Compilation of developer notes on changes in 1.6.&lt;br /&gt;
&lt;br /&gt;
== Schema ==&lt;br /&gt;
&lt;br /&gt;
Added ACL tables (todo - list them)&lt;br /&gt;
Removed jos_groups table&lt;br /&gt;
&lt;br /&gt;
== Framework ==&lt;br /&gt;
&lt;br /&gt;
JDatabase::setQuery casts the sql variable to a string. This allows you to pass an object that implements the __toString magic method.&lt;br /&gt;
&lt;br /&gt;
JModel::getState will now take an optional second argument to set the default.&lt;br /&gt;
$value = $model-&amp;gt;getState( &#039;foo&#039;, &#039;bar&#039; );&lt;br /&gt;
&lt;br /&gt;
Both JFile::write and JFTP::write now use a reference for its second argument. Code like &#039;&#039;JFile::write($filename,&#039;string&#039;);&#039;&#039; will fail, however &#039;&#039;$data = &#039;string&#039;; JFile::write($filename, $data);&#039;&#039; will work for both 1.5 and 1.6&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
=== Join for access level ===&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__groups AS g ON g.id = c.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__core_acl_axo_groups AS g ON g.value = a.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Administrator:Users ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy Mode ==&lt;br /&gt;
&lt;br /&gt;
Only available in legacy mode (to be dropped in future versions):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;global $mainframe&amp;lt;/code&amp;gt; - Use &amp;lt;code&amp;gt;$app = &amp;amp;JFactory::getApplication()&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
* JTemplate (patTemplate completely deprecated)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files/Features Dropped ==&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to do this:&lt;br /&gt;
&lt;br /&gt;
* Access Level links in backend lists need to be refactored to support the new levels available in the jos_core_acl_axo_groups table.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11026</id>
		<title>Archived:Version 1.6 Developer Notes</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Version_1.6_Developer_Notes&amp;diff=11026"/>
		<updated>2008-10-10T02:21:16Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
Compilation of developer notes on changes in 1.6.&lt;br /&gt;
&lt;br /&gt;
== Schema ==&lt;br /&gt;
&lt;br /&gt;
Added ACL tables (todo - list them)&lt;br /&gt;
Removed jos_groups table&lt;br /&gt;
&lt;br /&gt;
== Framework ==&lt;br /&gt;
&lt;br /&gt;
JDatabase::setQuery casts the sql variable to a string. This allows you to pass an object that implements the __toString magic method.&lt;br /&gt;
&lt;br /&gt;
JModel::getState will now take an optional second argument to set the default.&lt;br /&gt;
$value = $model-&amp;gt;getState( &#039;foo&#039;, &#039;bar&#039; );&lt;br /&gt;
&lt;br /&gt;
Both JFile::write and JFTP::write now use a reference for its second argument. Code like &#039;&#039;JFile::write($filename,&#039;string&#039;);&#039;&#039; will fail, however &#039;&#039;$data = &#039;string&#039;; JFile::write($filename, $data);&#039;&#039; will work for both 1.5 and 1.6&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
=== Join for access level ===&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__groups AS g ON g.id = c.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&amp;lt;pre&amp;gt;LEFT JOIN #__core_acl_axo_groups AS g ON g.value = a.access&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Administrator:Users ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy Mode ==&lt;br /&gt;
&lt;br /&gt;
Only available in legacy mode (to be dropped in future versions):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;global $mainframe&amp;lt;/code&amp;gt; - Use &amp;lt;code&amp;gt;$app = &amp;amp;JFactory::getApplication()&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
* JTemplate (patTemplate completely deprecated)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Files/Features Dropped ==&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2&amp;diff=10512</id>
		<title>Pizza Bugs and Fun 2</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2&amp;diff=10512"/>
		<updated>2008-09-04T07:18:36Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We eagerly announce the second Joomla! Pizza Bug and Fun event scheduled for the weekends of &#039;&#039;&#039;June 21 and 22&#039;&#039;&#039; and &#039;&#039;&#039;June 28 and 29&#039;&#039;&#039;. It&#039;s hard to believe that six months have passed since the first Joomla! Pizza Bug and Fun event. The first PBF helped finalize Joomla! 1.5 and, if all goes as planned, this second event will help prepare Joomla! 1.5.4 for release early in July.&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event. &lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bugs&#039;&#039;&#039; : For our first PBF event, we targeted priority 1 and 2 bugs and tested the entire application. Since it&#039;s release, Joomla! 1.5 has been very stable and there are no serious bugs to fix. But, there are a number of medium priority items that require patches and testing. If we are able to empty the tracker during the weekend, it would be an important accomplishment for the community.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Documentation&#039;&#039;&#039; : since the last [[Doc Camp 1|Doc Camp]] a lot of documentation has been written, but we need more of it. If you want to help out writing documentation, you&#039;re also more than welcome.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Unit testing&#039;&#039;&#039; : we have started writing unit tests for Joomla! This is documented in the wiki, see [[Unit Testing]] for details. This is a very important part to improve the overall quality of Joomla! and increase development speed. If you have experience in this area, we challenge you to come help us.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Below you will find as much as possible information we can share on how this events is organized. If you don&#039;t find what you are looking for, you can check out the [[PBF FAQ]].&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
Managing this event will be a challenge. The team of [[Pizza couriers]] is working on the organization of this event, taking care of all logistics, infrastructure and communications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read this blog for information on how to get started when you arrive for the Pizza, Bugs and Fun event:&#039;&#039;&#039;&lt;br /&gt;
 see http://developer.joomla.org/home/26-coordinator-blog/147-the-best-ingredients-for-a-nice-pizza.html&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc. If you have any questions regarding this, feel free to contact Wilco Jansen (wilco.jansen@joomla.org).&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
 Hotel La Meridiana&lt;br /&gt;
 Viale Italia 198 - Marina Romea 48010 Ravenna (Ra) Italy &lt;br /&gt;
 28 June 2008&lt;br /&gt;
 Additional information [http://www.joomladay.it/ www.joomladay.it]  &lt;br /&gt;
 To register post [http://forum.joomla.it/index.php/topic,44604.0.html here]&lt;br /&gt;
 [http://www.joomladay.it/component/option,com_contact/task,view/contact_id,1/Itemid,2 Contacts] &lt;br /&gt;
&lt;br /&gt;
 JUG Catalan Countries&lt;br /&gt;
 June 21. Can Domenge Centre Tecnologic. Soldat Arrom quart, 1.  Palma de Mallorca   Spain&lt;br /&gt;
 [http://www.joomla.cat JUG Catalan Countries Website]&lt;br /&gt;
&lt;br /&gt;
 There will also be a location in the Netherlands (Amsterdam, Rotterdam or Eindhoven, most likely it will be Rotterdam)&lt;br /&gt;
 If you are interested please send a mail to wilco.jansen@joomla.org&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
 Webimagery, LLC&lt;br /&gt;
 843 Carondelet St. Suite 6&lt;br /&gt;
 New Orleans, LA 70130&lt;br /&gt;
 USA&lt;br /&gt;
 [http://jpbf2nola1.eventbrite.com June 21 Registration]&lt;br /&gt;
 [http://jpbf2nola2.eventbrite.com June 22 Registration]&lt;br /&gt;
&lt;br /&gt;
 PICnet, Inc. (DC)&lt;br /&gt;
 1341 G St, NW, Suite 1100&lt;br /&gt;
 Washington DC, 20005&lt;br /&gt;
 [http://www.joomladayusa.org/index.php?option=com_events&amp;amp;type=event&amp;amp;task=details&amp;amp;id=6&amp;amp;Itemid=11 Registration Page]&lt;br /&gt;
&lt;br /&gt;
 New York City JUG&lt;br /&gt;
 WinterGarden&lt;br /&gt;
 World Financial Center (By the Gap)&lt;br /&gt;
 [http://www.joomlanyc.org Joomla NYC Website]&lt;br /&gt;
&lt;br /&gt;
 Vancouver, BC, Canada&lt;br /&gt;
 822 Homer (at Robson) &lt;br /&gt;
 Across from where the JoomlaDay event was held.&lt;br /&gt;
 Call Mike Hamanaka or Amir Sharifnejad at +1-604-626-9225 and we will buzz you in.&lt;br /&gt;
 [website to be announced]&lt;br /&gt;
&lt;br /&gt;
 Georgia Institute of Technology&lt;br /&gt;
 Library, East Commons&lt;br /&gt;
 Performance Space ([http://librarycommons.gatech.edu/lec/index.php Zone 1])&lt;br /&gt;
 Atlanta, GA 30332&lt;br /&gt;
 [http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=georgia+tech+library&amp;amp;jsv=117&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=31.013085,70.576172&amp;amp;ie=UTF8&amp;amp;latlng=33784533,-84408802,8904700088832885237&amp;amp;ei=ZS5lSPWvGZ2WqgL5lqGLDg&amp;amp;cd=1 Map]&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
 No venue registered&lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&lt;br /&gt;
 Spike Systems Pty Ltd&lt;br /&gt;
 Level 6, 99 York Street&lt;br /&gt;
 Sydney.&lt;br /&gt;
 Map here: http://tinyurl.com/4gwatl&lt;br /&gt;
 URL with additional information will follow soon (including registration option).&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
 No venue registered&lt;br /&gt;
&lt;br /&gt;
===Cyberspace===&lt;br /&gt;
====Internet Relay Chat (IRC)====&lt;br /&gt;
Freenode channel [irc://irc.freenode.net/joomlapbf #joomlapbf] from 21 to 22 June 2008, all times, all timezones.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have an IRC client installed, use this link: [http://www.joomlanyc.org/index.php?option=com_wrapper&amp;amp;Itemid=23 #joomlapbf]. This is a web-based IRC client.&lt;br /&gt;
&lt;br /&gt;
This channel is available now and throughout the event. We might set up additional channels, if we do they will be listed above.&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]].  Please be aware that the registration process requires a valid email address.  If you are traveling to one of the physical locations you are advised to ensure that you have registered on this wiki and have a valid login before you travel. You don&#039;t need access to your email account after registration.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
Pizza can be ordered at a shop near by :-)&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_2#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else&#039;s.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[PBF Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British/Australian English.&lt;br /&gt;
{{:PBF_Contributors_List}}&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Learn_more_about_patch_files&amp;diff=10509</id>
		<title>Archived:Learn more about patch files</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Learn_more_about_patch_files&amp;diff=10509"/>
		<updated>2008-09-04T07:17:19Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
&lt;br /&gt;
Test this patch, make a patch, are things you hear when you report an issue or when you&#039;re working on bugs. What exactly is a patch?&lt;br /&gt;
&lt;br /&gt;
A patch is a file that indicates which exact lines in which exact files should be changed.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a recent patch from issue 11354 which corrected a simple typo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Index: plugins/authentication/gmail.php&lt;br /&gt;
 ===================================================================&lt;br /&gt;
 --- plugins/authentication/gmail.php (revision 10386)&lt;br /&gt;
 +++ plugins/authentication/gmail.php (working copy)&lt;br /&gt;
 @@ -87,7 +87,7 @@&lt;br /&gt;
  }&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
 - $message = &#039;curl isn\&#039;t insalled&#039;;&lt;br /&gt;
 + $message = &#039;curl isn\&#039;t installed&#039;;&lt;br /&gt;
  } &lt;br /&gt;
  if ($success)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Looking more closely, we see that the patch always starts with the name of the changed file relatiive to the Joomla! root. In this case it is the file gmail.php in the plugins/authenticaion folder.&lt;br /&gt;
&lt;br /&gt;
Next we see the file named again in two lines. The number in the first line represents the version of the code base or build on which the patch was created, The working copy is the copy that is changed. What do I mean by build? Every time a change is made to he codebase, that creates a new revision or build. You can find your build number in the changelog.php file in your joomla! root.&lt;br /&gt;
&lt;br /&gt;
Next comes @@ -87,7 +87,7 @@ which tells us that the change will starton line 87 of the file.&lt;br /&gt;
&lt;br /&gt;
Finally we see the code. The old line 87 has a – in front of it and the new line 87 has a +.&lt;br /&gt;
&lt;br /&gt;
The new version of the line will replace the old line in the file.&lt;br /&gt;
&lt;br /&gt;
Of course most patches are much more complex than this, but they really just are repeated instances of this structure.&lt;br /&gt;
&lt;br /&gt;
So if you saw this patch file and wanted to fix your version of Joomla! all you would need to do is find line 87 of gmail.php and make that change. So if someone tells you “There&#039;s a patch on the tracker” what they are saying is that you can go download the patch and apply it to your version of Joomla!. However one thing to keep in mind is that if your version does not match the version in the code repository it is possible that that patch will not work because it depends on or impacts other parts of the code.&lt;br /&gt;
&lt;br /&gt;
Now, if you&#039;re contributing a bug fix  as opposed to just reporting an issue, the ideal is to submit a patch file that you have tested. However, if you can&#039;t do that, at least give this information:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    * The complete names and paths of any files changed&lt;br /&gt;
    * The line numbers of the changes&lt;br /&gt;
    * The old and new versions of the changed lines&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, making a patch file is even better and  is not complicated if you install a subversion client such as Tortoise or the Subclipse plugin for Eclipse.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Filing_bugs_and_issues&amp;diff=10508</id>
		<title>Filing bugs and issues</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Filing_bugs_and_issues&amp;diff=10508"/>
		<updated>2008-09-04T07:16:18Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
{{review}}&lt;br /&gt;
&lt;br /&gt;
== Reporting bugs ==&lt;br /&gt;
&lt;br /&gt;
To report a bug in the Joomla! bug trackers, you need to create an &amp;quot;artefact&amp;quot; (&#039;&#039;Editor&#039;s note: joomlacode.org uses the American spelling &amp;quot;artifact&amp;quot;, but our policy is to use British/Australian spellings throughout the documentation.&#039;&#039;). Once the artefact is created, the developers will check the validity of it and act accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Register an Account at joomlacode.org ===&lt;br /&gt;
[http://joomlacode.org/gf/account/?action=UserAdd Register]&lt;br /&gt;
&lt;br /&gt;
=== Access the Joomla! development bug tracker. ===&lt;br /&gt;
&lt;br /&gt;
*[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=32 Joomla! 1.5 Bug Tracker]&lt;br /&gt;
*[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=5782 Joomla! 1.0 Bug Tracker]&lt;br /&gt;
 &lt;br /&gt;
=== Check to see if the bug you want to report is already reported. ===&lt;br /&gt;
&lt;br /&gt;
A series of filters display the artefacts. Make sure Priority is set to &amp;quot;Any&amp;quot;, Assignee to &amp;quot;Any&amp;quot; and Status to &amp;quot;Any&amp;quot;, other filters to nothing. Mouse over the title of the artefacts to check their contents. If the issue you are experiencing is not already reported, click on the bottom-right Button &amp;quot;Add new Tracker Item&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A new screen will display and there, the more information you give, the easier it is for the developers.&lt;br /&gt;
&lt;br /&gt;
Fill as many fields as you can.&lt;br /&gt;
&lt;br /&gt;
* [[Priority]] : Use the default &amp;quot;Medium&amp;quot; except if you know the code enough to make another choice.&lt;br /&gt;
* PHP : Choose the version you are testing on.  You can find this information by clicking the Menu &amp;quot;Help&amp;quot;-&amp;gt;&amp;quot;System Info&amp;quot; in the Administrator back-end of Joomla!.&lt;br /&gt;
* Estimated Time : Leave this blank.&lt;br /&gt;
* Build : Type here the #SVN number if you know it, or Nightly Build date, or Version used if using a Released version.&lt;br /&gt;
* Browser : Self-explanatory.&lt;br /&gt;
* Database : The version of MySQL is also available in &amp;quot;Help&amp;quot; -&amp;gt; &amp;quot;System Info&amp;quot;.&lt;br /&gt;
* Status : Leave this to &amp;quot;Open&amp;quot;.&lt;br /&gt;
* Percent Complete : Leave this blank.&lt;br /&gt;
* Category : This one is more tricky. Use &amp;quot;Administration&amp;quot; if you do not know better.&lt;br /&gt;
* Customer : Use &amp;quot;User&amp;quot; if the issue is in front-end, &amp;quot;Developer&amp;quot; if the issue concerns an extension you are developing, &amp;quot;Administrator&amp;quot; in other cases.&lt;br /&gt;
* Web Server : The version/server type is also available in &amp;quot;Help&amp;quot; -&amp;gt; &amp;quot;System Info&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Provide a summary ===&lt;br /&gt;
&lt;br /&gt;
Describe in a few words the issues you are having. It is generally a good idea to use existing artefacts as examples if this is your first time reporting a bug.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Front-end: Warning such and such.&lt;br /&gt;
* Back-end: Unable to save article when &amp;quot;nameofplugin&amp;quot; is published.&lt;br /&gt;
&lt;br /&gt;
Note: Take care to be descriptive in your summary as this is the first thing the developers will see when they are perusing the tracker for something to fix.&lt;br /&gt;
 &lt;br /&gt;
=== Provide details about the bug ===&lt;br /&gt;
&lt;br /&gt;
This is the most important part of reporting the bug. Describe here step by step how you got the error you are noticing.&lt;br /&gt;
&lt;br /&gt;
The more details, the better.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
A. When I enabled &amp;quot;nameofplugin&amp;quot;, no article can be saved. These are the plugins enabled at the same time. SEF is on (or Off). My site is in a sub-folder. I also remark that... etc. Files such and such are the issues IMHO (if you know what you are talking about).&lt;br /&gt;
&lt;br /&gt;
B. Back-end. Clicking on &amp;quot;menu_name&amp;quot; Menu. Page opened is blank. Any other menu works OK. etc.&lt;br /&gt;
&lt;br /&gt;
C. Back-end. Content -&amp;gt; Article Manager (The -&amp;gt; means you click on a submenu). Editing a non-categorized Article. Section dropdown does not display the sections available (or Editor is going over the right column for parameters, or Can&#039;t save article after changing a parameter [describe parameter], etc.&lt;br /&gt;
&lt;br /&gt;
D. I have such an such issue when doing this and that. By changing this code [code proposed] in file [name and hierarchy of file], line(s) #, the issue looks solved on my settings.&lt;br /&gt;
&lt;br /&gt;
=== Add an attachment to your report ===&lt;br /&gt;
&lt;br /&gt;
To better describe the issue or/and propose a fix, you can add attachments to the artefact you are creating by using the &amp;quot;Browse&amp;quot; buttons at the bottom of the screen.&lt;br /&gt;
A screen capture of the page(s) concerned helps a lot. If you can, try to optimise the size of the image through an image editor.&lt;br /&gt;
If you know what part(s) of the code base to change, a patch [patches] or a full file where your changes are WELL shown will help the developers to solve the problem quicker.&lt;br /&gt;
&lt;br /&gt;
=== Finish and send in the report ===&lt;br /&gt;
&lt;br /&gt;
You will receive an e-mail confirming that you posted the artefact. When someone comments or asks for supplementary details or solves the issue, you will receive a notification e-mail and may reply if needed.&lt;br /&gt;
&lt;br /&gt;
=== Extra tips and tricks ===&lt;br /&gt;
&lt;br /&gt;
Well-written bug reports are incredibly helpful. However, there&#039;s a certain amount of overhead involved in working with any bug tracking system, so your help in keeping our ticket tracker as useful as possible is appreciated. In particular:&lt;br /&gt;
&lt;br /&gt;
* Do read the [http://docs.joomla.org/FAQs FAQ] to see if your issue might be a well-known question.&lt;br /&gt;
* Do search [http://joomlacode.org/gf/project/joomla/tracker/ the tracker] to see if your issue has already been filed.&lt;br /&gt;
* Do ask on [http://forum.joomla.org/index.php/board,199.0.html testing forums] first if you&#039;re not sure if what you&#039;re seeing is a bug.&lt;br /&gt;
* Do write complete, reproducible, specific bug reports. Include as much information as you possibly can, complete with code snippets, test cases, etc. A minimal example that illustrates the bug in a nice small test case is the best possible bug report.&lt;br /&gt;
* Don&#039;t use the tracker system to ask support questions. Use the [http://forum.joomla.org/ Joomla! forums], or the [irc://irc.freenode.net/joomla #joomla] IRC channel on freenode for that.&lt;br /&gt;
* Don&#039;t use the trackers to make large-scale feature requests. We like to discuss any big changes to Joomla!&#039;s core on the [http://forum.joomla.org/index.php#6 developers forums] before actually working on them.&lt;br /&gt;
* Don&#039;t reopen issues that have been marked &amp;quot;not a bug&amp;quot;. This mark means that the decision has been made that we can&#039;t or won&#039;t fix this particular issue. If you&#039;re not sure why, please ask on developer forums.&lt;br /&gt;
* Don&#039;t use the tracker for lengthy discussions, because they&#039;re likely to get lost. If a particular artefact is controversial, please move discussion to [http://forum.joomla.org/index.php#6 developer forums].&lt;br /&gt;
&lt;br /&gt;
== Reporting security issues ==&lt;br /&gt;
&lt;br /&gt;
Report security issues to security [at] joomla [dot] org. This is a private list only open to long-time, highly trusted Joomla! developers, and its archives are not publicly readable.&lt;br /&gt;
&lt;br /&gt;
In the event of a confirmed vulnerability in Joomla! itself, we will take the following actions:&lt;br /&gt;
&lt;br /&gt;
* Acknowledge to the reporter that we&#039;ve received the report and that a fix is forthcoming. We&#039;ll give a rough timeline and ask the reporter to keep the issue confidential until we announce it.&lt;br /&gt;
* Halt all other development as long as is needed to develop a fix, including patches against the current and two previous releases.&lt;br /&gt;
* Determine a go-public date for announcing the vulnerability and the fix. To try to mitigate a possible &amp;quot;arms race&amp;quot; between those applying the patch and those trying to exploit the hole, we will not announce security problems immediately.&lt;br /&gt;
* Publicly announce the vulnerability and the fix on the pre-determined go-public date. This will probably mean a new release of Joomla! but in some cases it may simply be patches against current releases.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Testers&amp;diff=10507</id>
		<title>Testers</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Testers&amp;diff=10507"/>
		<updated>2008-09-04T07:15:20Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
{{Tester profile}}&lt;br /&gt;
&lt;br /&gt;
* [[Patch submission guidelines]]&lt;br /&gt;
* [[Filing bugs and issues]]&lt;br /&gt;
* [[Testing Checklists]]&lt;br /&gt;
* [[Automated testing]]&lt;br /&gt;
&lt;br /&gt;
== Reference Pages ==&lt;br /&gt;
&lt;br /&gt;
Peruse all pages in the [[:Category:Bug Squad]] category.&lt;br /&gt;
&lt;br /&gt;
When creating a new page, ensure you place the following marker at the top of the page so it is included in the category list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Bug Squad]]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you locate other articles you thing that are relevant to developer, please add this marker to those pages.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Coordinators&amp;diff=10506</id>
		<title>Category:Coordinators</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Coordinators&amp;diff=10506"/>
		<updated>2008-09-04T07:13:49Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: New page: Pages that are useful for coordinators, team leaders, global moderators and the like (anyone in a leadership or supervisory role).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pages that are useful for coordinators, team leaders, global moderators and the like (anyone in a leadership or supervisory role).&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=10505</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=10505"/>
		<updated>2008-09-04T07:12:05Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
There is a general checklist when a version of Joomla! is released. Keep in mind that a major release differs a lot from a [[Minor Release]] or even a [[Maintenance Release]]. The checklist here describes the steps that need to be done for (at least) [[Maintenance Release]] and [[Minor Release]].&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
It depends on the [[Development Cycle]] when the checklist is triggered. A release can be done during every stage of the [[Development Cycle]], it does not matter if you release a beta or a stable version, this is a general checklist that can be used when releasing a new version of Joomla! The checklist starts when it&#039;s decided to release a version:&lt;br /&gt;
&lt;br /&gt;
=== Preparation phase ===&lt;br /&gt;
# Communication pre-release: check with all Working Group Coordinators for status&lt;br /&gt;
# Communication pre-release: check with Lead Developers for status&lt;br /&gt;
# Communication pre-release: inform Bug Squad and Development Team of upcoming release&lt;br /&gt;
# Decision: when the above has positive result, set a date and time for release&lt;br /&gt;
# Communication pre-release: inform Global Moderators about upcoming release&lt;br /&gt;
# Communication pre-release: check availability and assign release tasks to Core and work-group members.&lt;br /&gt;
# Close trunk on predefined date and time (Development Coordinator, also sends an e-mail to development list).&lt;br /&gt;
# Image for front page download module, has to be modified for the release.&lt;br /&gt;
# Contact foundation work group for creation of Front page announcement.&lt;br /&gt;
# Determine release name&lt;br /&gt;
&lt;br /&gt;
=== Pre-execution phase ===&lt;br /&gt;
# Apply latest translations (need to be delivered by translation work group).&lt;br /&gt;
# Create test package.&lt;br /&gt;
# Offer test package to testers: [[Bug Squad]] members, [[Development Team ]] members, translation members&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
&lt;br /&gt;
=== Execution phase ===&lt;br /&gt;
# Change version information.&lt;br /&gt;
# Enable install check.&lt;br /&gt;
# Add entry in CHANGELOG.php file&lt;br /&gt;
# Package build.&lt;br /&gt;
# Offer test package to testers: [[Bug Squad]] members, [[Development Team ]] members, translation members&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Add package to joomlacode.org&lt;br /&gt;
# Publish announcement on joomla.org and the forum, change download module image and link&lt;br /&gt;
# Make static copy of front page with announcement to be used if server load becomes critical.&lt;br /&gt;
&lt;br /&gt;
=== Finalization phase ===&lt;br /&gt;
# Tag SVN.&lt;br /&gt;
# Un-freeze the trunk, send e-mail to work groups and mailing lists ([[Development Team]] and [[Bug Squad]]).&lt;br /&gt;
# Undo install check.&lt;br /&gt;
# Change content on joomla.org and dev.joomla.org (see pages to update)&lt;br /&gt;
# Update MD5 checksum information&lt;br /&gt;
# Update nightly builds to reflect new release&lt;br /&gt;
&lt;br /&gt;
=== Pages to update ===&lt;br /&gt;
&lt;br /&gt;
#Global:&lt;br /&gt;
#* [http://developer.joomla.org/code.html Developer Code] (Nightly links)&lt;br /&gt;
#1.5:&lt;br /&gt;
#* [http://www.joomla.org/content/blogcategory/57/111/ Latest Release] (Administrator Latest Version Check)&lt;br /&gt;
#* [http://docs.joomla.org/Joomla_1.5_version_history Version History]&lt;br /&gt;
# 1.0:&lt;br /&gt;
#* [http://dev.joomla.org/content/blogcategory/21/86/ Current Status]&lt;br /&gt;
#* [http://www.joomla.org/content/blogcategory/32/66/ Latest Release]&lt;br /&gt;
#* [http://www.joomla.org/content/category/5/34/78/ Changelog]&lt;br /&gt;
#* [http://www.joomla.org/content/category/5/39/95/ MD5 Sums]&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
For boiler-plate communication messages, see [[Release Communication Templates]].&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Testers&amp;diff=10502</id>
		<title>Testers</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Testers&amp;diff=10502"/>
		<updated>2008-09-04T07:07:44Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tester profile}}&lt;br /&gt;
&lt;br /&gt;
* [[Patch submission guidelines]]&lt;br /&gt;
* [[Filing bugs and issues]]&lt;br /&gt;
* [[Testing Checklists]]&lt;br /&gt;
* [[Automated testing]]&lt;br /&gt;
&lt;br /&gt;
== Reference Pages ==&lt;br /&gt;
&lt;br /&gt;
Peruse all pages in the [[:Category:Bug Squad]] category.&lt;br /&gt;
&lt;br /&gt;
When creating a new page, ensure you place the following marker at the top of the page so it is included in the category list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Bug Squad]]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you locate other articles you thing that are relevant to developer, please add this marker to those pages.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_Maintenance_Procedures&amp;diff=10501</id>
		<title>Joomla! Maintenance Procedures</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_Maintenance_Procedures&amp;diff=10501"/>
		<updated>2008-09-04T07:06:05Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
&lt;br /&gt;
Once a major/minor release has reached the Stable phase in the [[Development Cycle]] the processes and procedures for development change. The most immediate thing to notice is that the development is no longer driven by the [[Development Team]] when the Stable phase is reached. As soon as the major/minor release is declared stable all future development on that release is driven by the [[Bug Squad]]. It is important to understand the way we think about a [[Maintenance Release]] because one of the things that our community depends upon is stability. Stability is born of a rigorous testing process and accountability. This document will outline the procedures and processes for maintaining a Joomla! major/minor release.&lt;br /&gt;
&lt;br /&gt;
Once a release has been declared stable ([[Maintenance Release]]), all bugs and artifacts are to be tracked in our official [[Tracker]] on the Joomla! GForge site: [http://www.joomlacode.org]. Having a single place for confirmed issue tracking provides us all with a simple system of accountability. &lt;br /&gt;
&lt;br /&gt;
The maintenance procedures have the following stages :&lt;br /&gt;
* [[Reporting issues]]; We keep track on the open issues in our [[Tracker]] but issues can be reported in two ways: from the forum or directly into the tracker. A description of the process of [[Reporting issues]] is available (click the link).&lt;br /&gt;
* [[Resolving issues]]; Once an issue is confirmed, there are several ways it can get solved. First members from the [[Development Team]] can work on solving the issue, but also community members can send in patches. The general way of working is: create patch, test patch, commit patch. A description of the [[Resolving issues]] process is available (click the link).&lt;br /&gt;
&lt;br /&gt;
The maintenance procedures implement the Quality processes for Joomla!. This process differs only during the development stage of a major release or a minor release in the [[resolving issues]] process. In maintenance releases we work with patches, and within the [[Development Cycle]] of a major release or a minor release developers will fix issues directly in the trunk until the codebase reaches a stage of [[Development Cycle|Release Candidate]].&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Minor_Release&amp;diff=10498</id>
		<title>Minor Release</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Minor_Release&amp;diff=10498"/>
		<updated>2008-09-04T07:04:29Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
Minor Release Number (X.&#039;&#039;&#039;Y&#039;&#039;&#039;.Z) - An increment of the minor number usually indicates a significant change in functionality. Moderate to high level of backward compatibility with previous minor increments.&lt;br /&gt;
&lt;br /&gt;
In minor releases we try not to alter the API, only additions to the API can be implemented when new logic is incorporated within the code base.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Major_Release&amp;diff=10497</id>
		<title>Major Release</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Major_Release&amp;diff=10497"/>
		<updated>2008-09-04T07:04:17Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
Major Release Number (&#039;&#039;&#039;X&#039;&#039;&#039;.Y.Z) - An increment of the major number generally indicates a major rework or rewrite of the code base (framework level). Is most likely incompatible with prior major releases.&lt;br /&gt;
&lt;br /&gt;
Currently Joomla! has released the following major releases:&lt;br /&gt;
&lt;br /&gt;
* 1.0.x - code base derived from Mambo 4.5.3&lt;br /&gt;
* 1.5.x - major rewrite of the codebase, parts of Joomla! 1.0.x still reside in the codebase&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Version_Strategy&amp;diff=10496</id>
		<title>Version Strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Version_Strategy&amp;diff=10496"/>
		<updated>2008-09-04T07:03:56Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
Joomla! release versioning follows a numerical convention comprised of three numbers: Major, Minor and Maintenance. The version is presented in the major.minor[.maintenance] format.&lt;br /&gt;
&lt;br /&gt;
* [[Major Release]] Number (X.Y.Z) - An increment of the major number generally indicates a major rework or rewrite of the code base (framework level). Can be incompatible with prior major releases.&lt;br /&gt;
&lt;br /&gt;
* [[Minor Release]] Number (X.Y.Z) - An increment of the minor number usually indicates a significant change in functionality. Moderate to high level of backward compatibility with previous minor increments.&lt;br /&gt;
&lt;br /&gt;
* [[Maintenance Release]] Number (X.Y.Z) - An increment of the maintenance number usually indicates bug fixing within the minor release and possibly small enhancements and limited new features. Fully backward compatible with previous maintenance increments.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Maintenance_Release&amp;diff=10495</id>
		<title>Maintenance Release</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Maintenance_Release&amp;diff=10495"/>
		<updated>2008-09-04T07:03:37Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
Maintenance Release Number (X.Y.&#039;&#039;&#039;Z&#039;&#039;&#039;) - An increment of the maintenance number usually indicates bug fixing within the minor release and possibly small enhancements and limited new features. Fully backward compatible with previous maintenance increments. Maintenance releases strive to stability and bug fixes.&lt;br /&gt;
&lt;br /&gt;
A full description of the [[Version Strategy]] and the release versioning is available.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Development_Cycle&amp;diff=10492</id>
		<title>Development Cycle</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Development_Cycle&amp;diff=10492"/>
		<updated>2008-09-04T07:02:13Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Image:montano_wheel.png|right]]We have adopted a three phase development cycle. The three phases are: &lt;br /&gt;
&lt;br /&gt;
* Alpha Phase; refactoring and Development.&lt;br /&gt;
&lt;br /&gt;
* Beta Phase; Testing, Documenting and Fine Tuning.&lt;br /&gt;
&lt;br /&gt;
* Stable Phase; Stabilization, Public Information, etc. &lt;br /&gt;
&lt;br /&gt;
These three phases are also known as the Opening, Mid-Game and End Game among project managers. As you can see each phase has a different main focus, focus in the Alpha phase is on Development but shifts to Documentation and Testing for the Beta phase and finally to Public Information in the Stable phase. &lt;br /&gt;
&lt;br /&gt;
== Alpha Phase ==&lt;br /&gt;
The Alpha phase of the development cycle is when we decide on what the goals are for the next release.  This is by far the most important part of the process and is done in complete consultation with the community through the submission of public [[White Papers]].  The acceptance of papers sets the functional requirements for all the goals in the release.&lt;br /&gt;
&lt;br /&gt;
This is a time for fixing more complex issues that have arisen from the previous version, for implementing new features and functionality, and for dropping parts of the code that have been previously earmarked for removal, or deemed to be no longer necessary.&lt;br /&gt;
&lt;br /&gt;
During this time the development trunk will be in a state of flux and break from time to time.  Several Alpha releases may be made to allow the user and third-party developer community to comment on the progress of the work in terms of the goals set.&lt;br /&gt;
&lt;br /&gt;
By working closely with third party developers as we transition from the Alpha to the Beta phase we hope to be able to provide all necessary information and support to ensure that their extensions are compatible with future versions of Joomla!&lt;br /&gt;
&lt;br /&gt;
== Beta Phase ==&lt;br /&gt;
The Beta phase of development indicates a major milestone in the development cycle. At this phase we move from pure development towards testing and documentation. From a development standpoint, focus shifts from implementation to stabilization. At this point community input is extremely important and we increase our outwards communication towards third party developers. Together we analyze and solve breakages, improve performance and finetune the API where necessary. &lt;br /&gt;
&lt;br /&gt;
This stage of the process signifies several things: &lt;br /&gt;
We are now framework feature complete. &lt;br /&gt;
Documentation effort on the API begins. &lt;br /&gt;
Third party backwards compatibility testing on the framework begins. &lt;br /&gt;
Core extension refactoring and user interface changes begins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stable Phase ==&lt;br /&gt;
During the stable phase we release one or more release candidates. At this phase code base is considered stable and secure and any final bugs are taken care of as they come to our attention. It is during this phase of the development cycle that the software is packaged and released. Most attention goes into promotion and public information.&lt;br /&gt;
&lt;br /&gt;
Control over the code base from the release is delegated from the [[Development Team]] to the [[Bug Squad]]. During this stage the [[Joomla! Maintenance Procedures]] are in place.&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_Maintenance_Procedures&amp;diff=10491</id>
		<title>Joomla! Maintenance Procedures</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_Maintenance_Procedures&amp;diff=10491"/>
		<updated>2008-09-04T07:01:46Z</updated>

		<summary type="html">&lt;p&gt;Masterchief: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
&lt;br /&gt;
Once a major/minor release has reached the Stable phase in the [[Development Cycle]] the processes and procedures for development change. The most immediate thing to notice is that the development is no longer driven by the [[Development Team]] when the Stable phase is reached. As soon as the major/minor release is declared stable all future development on that release is driven by the [[Bug Squad]]. It is important to understand the way we think about a [[Maintenance Release]] because one of the things that our community depends upon is stability. Stability is born of a rigorous testing process and accountability. This document will outline the procedures and processes for maintaining a Joomla! major/minor release.&lt;br /&gt;
&lt;br /&gt;
Once a release has been declared stable ([[Maintenance Release]]), all bugs and artifacts are to be tracked in our official [[Tracker]] on the Joomla! GForge site: [http://www.joomlacode.org]. Having a single place for confirmed issue tracking provides us all with a simple system of accountability. &lt;br /&gt;
&lt;br /&gt;
The maintenance procedures have the following stages :&lt;br /&gt;
* [[Reporting issues]]; We keep track on the open issues in our [[Tracker]] but issues can be reported in two ways: from the forum or directly into the tracker. A description of the process of [[Reporting issues]] is available (click the link).&lt;br /&gt;
* [[Resolving issues]]; Once an issue is confirmed, there are several ways it can get solved. First members from the [[Development team]] can work on solving the issue, but also community members can send in patches. The general way of working is: create patch, test patch, commit patch. A description of the [[Resolving issues]] process is available (click the link).&lt;br /&gt;
&lt;br /&gt;
The maintenance procedures implement the Quality processes for Joomla!. This process differs only during the development stage of a major release or a minor release in the [[resolving issues]] process. In maintenance releases we work with patches, and within the [[Development Cycle]] of a major release or a minor release developers will fix issues directly in the trunk until the codebase reaches a stage of [[Development Cycle|Release Candidate]].&lt;/div&gt;</summary>
		<author><name>Masterchief</name></author>
	</entry>
</feed>