<?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=THE+AI</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=THE+AI"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/THE_AI"/>
	<updated>2026-10-24T00:24:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Testing_Joomla_Extensions_with_Codeception&amp;diff=250207</id>
		<title>Testing Joomla Extensions with Codeception</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Testing_Joomla_Extensions_with_Codeception&amp;diff=250207"/>
		<updated>2015-11-01T10:53:56Z</updated>

		<summary type="html">&lt;p&gt;THE AI: Selenium IDE and Codeception formatter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;Note: this page is under construction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is Codeception? ==&lt;br /&gt;
Codeception PHP Testing Framework is designed to work just out of the box. This means its installation requires minimal steps and no external dependencies preinstalled (except PHP, of course). Only one configuration step should be taken and you are ready to test your web application from an eye of actual user.&lt;br /&gt;
&lt;br /&gt;
See the following video of codeception in action testing Joomla: &lt;br /&gt;
&lt;br /&gt;
{{#widget:YouTube|id=Vc1BJNnhsFM}}&lt;br /&gt;
&lt;br /&gt;
=== Types of tests ===&lt;br /&gt;
Codeception provides possibilities to do Unit Testing or to Test APIs, however &#039;&#039;&#039;this page is focused in System Testing&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;System testing&#039;&#039;&#039; uses a production-like environment to verify the system as a whole, including user interfaces, databases, web servers, logging, etc. &lt;br /&gt;
&lt;br /&gt;
- A &#039;&#039;&#039;unit test&#039;&#039;&#039; verifies a single behavior of a single unit – this can be a function, a method, or a class. A logical unit is something that can be reasoned about in isolation. The unit must be completely under your control. The test should limit the number of other units it touches on, and should not touch any part outside of your own system. As such, the test should only fail for one reason.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;Integration testing&#039;&#039;&#039; means we’re verifying that that different units are working together. It focuses on the interfaces between components. Some of these components may be from third parties. When they break, they signal that, although individual units may behave correctly, something changed in the API that caused failure in another place. Often, integration tests are slower than unit tests.&lt;br /&gt;
&lt;br /&gt;
As mentioned at the beginning of this text, the current page is focused on &#039;&#039;&#039;System Tests&#039;&#039;&#039; and more specifically using Webdriver. The reason is that we came to the conclusion that this type of tests combined with the already existing Unit tests in Joomla are the most successful way to test our current code.&lt;br /&gt;
&lt;br /&gt;
== Why Use Codeception? ==&lt;br /&gt;
&#039;&#039;Why use Codeception when we already have Selenium IDE?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Codeception works great with Selenium. But with Codeception you can write your tests in PHP. The main reason is: Selenium IDE tests are tightly bound to XPath locators. If you ever change anything in layout tests will fall. Codeception locators are more stable. You can use names, labels, button names and CSS to match elements on page. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features&#039;&#039;&#039;&lt;br /&gt;
* Selenium WebDriver integration&lt;br /&gt;
* Elements matched by name, CSS, XPath&lt;br /&gt;
* PageObjects and StepObjects included&lt;br /&gt;
* Powered by PHPUnit&lt;br /&gt;
* Data Cleanup&lt;br /&gt;
* Parallel Execution of tests&lt;br /&gt;
* BDD-style readable tests&lt;br /&gt;
&lt;br /&gt;
== Architecture of a test ==&lt;br /&gt;
The testing framework is built on the three layered testing architecture&lt;br /&gt;
&lt;br /&gt;
=== Scenarios (Cept Class) ===&lt;br /&gt;
Cept or Test, it is the main class which contains steps of execution for the tests, Cept Class will call Step Class functions which will indirectly make use of page objects to perform operations&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I = new AcceptanceTester($scenario);&lt;br /&gt;
$I-&amp;gt;wantTo(&#039;Install Joomla CMS&#039;);&lt;br /&gt;
$I-&amp;gt;amOnPage(&#039;http://localhost/installation/index.php&#039;);&lt;br /&gt;
// I Wait for the text Main Configuration, meaning that the page is loaded&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;Main Configuration&#039;, 10, &#039;h3&#039;);&lt;br /&gt;
$I-&amp;gt;click(JoomlaInstallationConfigurationPage::$elements[&#039;Language Selector&#039;]);&lt;br /&gt;
$I-&amp;gt;click(JoomlaInstallationConfigurationPage::$elements[&#039;English (United Kingdom)&#039;]);&lt;br /&gt;
$I-&amp;gt;fillField(&#039;Site Name&#039;, &#039;weblinks&#039;);&lt;br /&gt;
$I-&amp;gt;fillField(&#039;Description&#039;, &#039;Site for testing Weblinks component&#039;);&lt;br /&gt;
$I-&amp;gt;fillField(&#039;Admin Email&#039;, $cfg[&#039;Admin email&#039;]);&lt;br /&gt;
$I-&amp;gt;fillField(&#039;Admin Username&#039;, $cfg[&#039;username&#039;]);&lt;br /&gt;
$I-&amp;gt;fillField(&#039;Admin Password&#039;, $cfg[&#039;password&#039;]);&lt;br /&gt;
$I-&amp;gt;fillField(&#039;Confirm Admin Password&#039;, $cfg[&#039;password&#039;]);&lt;br /&gt;
$I-&amp;gt;click(&#039;Next&#039;);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Page Objects ===&lt;br /&gt;
Each page on your application has a class which we call page objects, each page class will have information about the URL, fields, Text present on the page. We use the best possible selector for any field on the page.&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class JoomlaAdministratorLoginManagerPage&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * @var string Url of the page&lt;br /&gt;
	 */&lt;br /&gt;
	public static $URL = &#039;/administrator/index.php&#039;;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Array of Page elements indexed by descriptive name or label&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	public static $elements = array(&lt;br /&gt;
		&#039;username&#039; =&amp;gt; &amp;quot;#mod-login-username&amp;quot;,&lt;br /&gt;
		&#039;password&#039; =&amp;gt; &amp;quot;#mod-login-password&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Naming convention for Page Objects ====&lt;br /&gt;
When this document is created Codeception 2.0 was not having a PSR-4 compatible autoloader. Therefore we are creating a convention so with the future Codeception 2.1 with PSR-4 compatible autoloader (https://github.com/Codeception/Codeception/pull/1228) we are creating a naming convention for Pages so it will cost us a small effort to move to autoloaded classes in the future.&lt;br /&gt;
&lt;br /&gt;
The naming convention works as follows:&lt;br /&gt;
&lt;br /&gt;
 APPLICATION (for example Joomla, Patchtester, Weblinks or your Extension name)&lt;br /&gt;
 + CLIENT (in Joomla we use it for defining if is Installation, Administrator or Frontend&lt;br /&gt;
 + CLIENT PART (In Joomla we use it following the menu are were it belongs: Components, Menus, System,...)&lt;br /&gt;
 + PAGE NAME (The Page name) &lt;br /&gt;
 + Page&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 JoomlaAdministratorLoginPage&lt;br /&gt;
 JoomlaAdministratorSystemGlobalconfigurationPage&lt;br /&gt;
 JoomlaInstallationConfigurationPage&lt;br /&gt;
&lt;br /&gt;
And they are located with a folder estructure similar to:&lt;br /&gt;
&lt;br /&gt;
[[File:System_tests_pages_folder_structure.png|framed|center|Folder estructure for Pages in System Tests]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remind that in Codeception 2.0 you need to specify each folder in the acceptance/_bootstrap.php file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Here you can initialize variables that will be available to your tests&lt;br /&gt;
\Codeception\Util\Autoload::registerSuffix(&#039;Page&#039;, __DIR__.DIRECTORY_SEPARATOR.&#039;_pages/joomla/installation&#039;);&lt;br /&gt;
\Codeception\Util\Autoload::registerSuffix(&#039;Page&#039;, __DIR__.DIRECTORY_SEPARATOR.&#039;_pages/joomla/administrator&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
More info: http://codeception.com/docs/07-AdvancedUsage#PageObjects&lt;br /&gt;
&lt;br /&gt;
=== Step Objects ===&lt;br /&gt;
Step Objects are classes which contains steps which are to be executed on the application to perform certain operations, step objects make use of page objects to perform these actions.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class JoomlaAdministratorLoginSteps extends \AcceptanceTester&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Function to execute an Admin Login for Joomla 3&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return void&lt;br /&gt;
	 */&lt;br /&gt;
	public function doAdministratorLogin($user, $password)&lt;br /&gt;
	{&lt;br /&gt;
		$I = $this;&lt;br /&gt;
		$I-&amp;gt;amOnPage(\JoomlaAdministratorLoginPage::$URL);&lt;br /&gt;
		$I-&amp;gt;fillField(\JoomlaAdministratorLoginPage::$elements[&#039;username&#039;], $user);&lt;br /&gt;
		$I-&amp;gt;fillField(\JoomlaAdministratorLoginPage::$elements[&#039;password&#039;], $password);&lt;br /&gt;
		$I-&amp;gt;click(&#039;Log in&#039;);&lt;br /&gt;
		$I-&amp;gt;see(&#039;Category Manager&#039;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info: http://codeception.com/docs/07-AdvancedUsage#StepObjects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Joomla Browser Module ===&lt;br /&gt;
The Joomla Browser is a Codeception Module that incorporates general functions to your tests like:&lt;br /&gt;
- do administrator login&lt;br /&gt;
- install joomla&lt;br /&gt;
- install extension&lt;br /&gt;
- ...&lt;br /&gt;
&lt;br /&gt;
Find details about it at: https://github.com/joomla-projects/joomla-browser#table-of-contents&lt;br /&gt;
&lt;br /&gt;
== Getting started from scratch: what you need to download and install ==&lt;br /&gt;
To get the test environment running you need to have several components installed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note:&#039;&#039;&#039; no matter if you are executing [https://github.com/joomla/joomla-cms/tree/staging/tests/codeception#testing-joomla-cms Joomla CMS Tests], [https://github.com/joomla-extensions/weblinks#tests Weblinks], or tests in other Joomla extensions, in any case you are asked to fork the repository into your local machine under your htdocs folder of your local web-server. The reason is that, the automated scripts that launches the tests use the repository files for the tests.&lt;br /&gt;
&lt;br /&gt;
=== local webserver ===&lt;br /&gt;
If you do not already have a local test server running you may want to check out:&lt;br /&gt;
https://www.mamp.info/&lt;br /&gt;
https://www.apachefriends.org/&lt;br /&gt;
http://www.ampps.com/&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with setting up a local web-server, learn that first before you advance futher. &lt;br /&gt;
&lt;br /&gt;
=== Java Runtime Environment (JRE) ===&lt;br /&gt;
The JRE has to be installed, so the tests will be executable. You find the recent versions at the Oracle Website.&lt;br /&gt;
In end of May 2015 this is: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&lt;br /&gt;
later on that link could be obsolete and should be changed if there is a newer version out.&lt;br /&gt;
&lt;br /&gt;
Newer Mac OS Versions are not shipped any more with the JRE, so they have to download that too.&lt;br /&gt;
&lt;br /&gt;
=== Firefox ===&lt;br /&gt;
Selenium is testing in the browser Firefox. The selenium version is not that quick with the updates, as the Firefox browser, if the test is not executable, then it can be that you manually have to install an older version of Firefox.&lt;br /&gt;
Sadly that can be a try and error thing. To get older versions of Firefox: https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/ here you will find many folders. Just try the first one that came before the Firefox version that you have been using (and that did not work). In the version folders you will find folders for all the different operating systems.&lt;br /&gt;
&lt;br /&gt;
‎&lt;br /&gt;
&lt;br /&gt;
=== configure test system variables ===&lt;br /&gt;
&lt;br /&gt;
[[File:Acceptance.suite.dist.yml rename.png|thumbnail|left|Screenshot of file structure]]&lt;br /&gt;
&lt;br /&gt;
In your the folder that you installed, downloaded, pulled (git) the project, you have to rename the &amp;quot;&#039;&#039;acceptance.suite.dist.yml&#039;&#039;&amp;quot; file to &amp;quot;&#039;&#039;acceptance.suite.yml&#039;&#039;&amp;quot; and configure the parameters to your system variables.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
   config:&lt;br /&gt;
        JoomlaBrowser:&lt;br /&gt;
            url: &#039;http://localhost/tests/joomla-cms3&#039;&lt;br /&gt;
            # the url that points to the joomla installation at /tests/system/joomla-cms&lt;br /&gt;
            browser: &#039;firefox&#039;&lt;br /&gt;
            window_size: 1024x768&lt;br /&gt;
    [...]&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:Run Command vendor bin robo test-acceptance.png|thumbnail|test:acceptance]]&lt;br /&gt;
Once your machine is able to run tests (see &#039;&#039;The Joomla Browser Module&#039;&#039;), you are able to start working.&lt;br /&gt;
&lt;br /&gt;
Check the contents of the /tests/ folder in weblinks and try to understand the structure of the tests.&lt;br /&gt;
For each function you have a directory and sometimes a configuration file, both will have the corresponding name.&lt;br /&gt;
* FunctionName.yml - these files contain configurations for the function folders&lt;br /&gt;
* FunctionName - contains the &#039;&#039;FunctionName&#039;&#039; test&lt;br /&gt;
* joomla-cms3 - contains the latest Joomla! installation&lt;br /&gt;
&lt;br /&gt;
After that check the tasks are at: https://github.com/joomla-extensions/weblinks/issues/47&lt;br /&gt;
&lt;br /&gt;
== The principles for writing a test: Readability and Performance ==&lt;br /&gt;
In Joomla we give priority to Readability over Performance, even when performance is a must.&lt;br /&gt;
&lt;br /&gt;
To explain that let me show an example: Let&#039;s say that we want to fill a field Username in a login form. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;administrator/index.php&amp;quot; method=&amp;quot;post&amp;quot; id=&amp;quot;form-login&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label for=&amp;quot;username_field&amp;quot;&amp;gt;Username&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;input name=&amp;quot;username_field&amp;quot; tabindex=&amp;quot;1&amp;quot; id=&amp;quot;username_field&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;15&amp;quot; /&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the most performant way to fill that form field would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;fillField(&#039;#username_field&#039;, &#039;Mark&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And usually we would move that to a page object element ending in:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;fillField(\LoginPage::$username, &#039;Mark&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However Codeception is a smart framework and it adds some magic to it&#039;s methods (see: https://github.com/Codeception/Codeception/blob/2.0/src/Codeception/Module/WebDriver.php#L511-L513). It allows me to write more readable tests (keeping performance hight). &lt;br /&gt;
&lt;br /&gt;
If we do this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;fillField(&#039;Username&#039;, &#039;Mark&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Codeception will be smart and will search first in the page if there is any &amp;quot;LABEL&amp;quot; called Username. That is a fast operation, so performance will be affected just a little. And instead we have written less code than in previous examples.&lt;br /&gt;
&lt;br /&gt;
Note: sometimes this tricks are not always possible, labels are not always there or there are some elements hidden that shows and hides depending on a Javascript. All these special cases would require a Page element.&lt;br /&gt;
&lt;br /&gt;
Still there is a definitive method of using locators that made them readable and performant called: strict Locators see [[Testing_Joomla_Extensions_with_Codeception#Writting_reliable_locators]].&lt;br /&gt;
&lt;br /&gt;
With them we do: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;fillField([&#039;id&#039; =&amp;gt; &#039;username_field&#039;], &#039;Mark&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In conclusion we have more readable tests and less code to maintain while keeping performance. That is a win!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up Codeception ==&lt;br /&gt;
=== setting up the repository ===&lt;br /&gt;
&#039;&#039;&#039;clone the directory&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Fork [https://github.com/joomla-projects/com_localise com_localise]&lt;br /&gt;
# &lt;br /&gt;
# Git clone git@github.com:*your-github-profile-name*/com_localise.git&lt;br /&gt;
&lt;br /&gt;
=== Testing with Codeception ===&lt;br /&gt;
&lt;br /&gt;
There are two ways to get and run codeception, via PHAR or via Composer. Using &#039;&#039;&#039;Composer is recommended&#039;&#039;&#039; (because we are using in some tests the Codeception 2.1 development version not available in the composer.phar).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Using Composer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    You need to have Composer in your system, if not download it from here: https://getcomposer.org/&lt;br /&gt;
&lt;br /&gt;
    Step 1: composer update&lt;br /&gt;
&lt;br /&gt;
    Step 2: run Codeception by doing: php vendor/bin/codecept build&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Codeception.phar&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    Linux Machine  : wget http://codeception.com/codecept.phar&lt;br /&gt;
&lt;br /&gt;
    Windows Machine: Download from [http://codeception.com/install codecept.phar]&lt;br /&gt;
&lt;br /&gt;
    Step1 : php ./codecept.phar build&lt;br /&gt;
&lt;br /&gt;
=== Running the Test ===&lt;br /&gt;
Run Selenium server&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Download&lt;br /&gt;
curl -O http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar&lt;br /&gt;
&lt;br /&gt;
# And start the Selenium Server&lt;br /&gt;
java -Xms40m -Xmx256m -jar /Applications/XAMPP/xamppfiles/htdocs/selenium/selenium-server-standalone-2.45.0.jar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Rename tests/acceptance.suite.dist.yml to tests/acceptance.suite.yml&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Step 1: Modify the configuration at tests/acceptance.suite.yml to fit your server details.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Step 2: php codecept.phar run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
with --steps to see a step-by-step report on the performed actions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/codecept run --steps&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with --html. This command will run all tests for all suites, displaying the steps, and building HTML and XML reports. Reports will be store in tests/_output/ directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/codecept run --html&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To activate the debug mode in Codeception just add the parameter --debug when you run the tests:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/codecept run acceptance --debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Best Practices at Testing ==&lt;br /&gt;
=== Writting reliable locators ===&lt;br /&gt;
Writing good locators can be tricky. The Mozilla team has written an excellent guide titled [https://blog.mozilla.org/webqa/2013/09/26/writing-reliable-locators-for-selenium-and-webdriver-tests/ Writing reliable locators for Selenium and WebDriver tests].&lt;br /&gt;
&lt;br /&gt;
If the locator is an array, it should have a single element, with the key signifying the locator type (`id`, `name`, `css`, `xpath`, `link`, or `class`) and the value being the locator itself. This is called a &amp;quot;strict&amp;quot; locator. Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* [&#039;id&#039; =&amp;gt; &#039;foo&#039;] matches `&amp;lt;div id=&amp;quot;foo&amp;quot;&amp;gt;`&lt;br /&gt;
* [&#039;name&#039; =&amp;gt; &#039;foo&#039;] matches `&amp;lt;div name=&amp;quot;foo&amp;quot;&amp;gt;`&lt;br /&gt;
* [&#039;css&#039; =&amp;gt; &#039;input[type=input][value=foo]&#039;] matches `&amp;lt;input type=&amp;quot;input&amp;quot; value=&amp;quot;foo&amp;quot;&amp;gt;`&lt;br /&gt;
* [&#039;xpath&#039; =&amp;gt; &amp;quot;//input[@type=&#039;submit&#039;][contains(@value, &#039;foo&#039;)]&amp;quot;] matches `&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;foobar&amp;quot;&amp;gt;`&lt;br /&gt;
* [&#039;link&#039; =&amp;gt; &#039;Click here&#039;] matches `&amp;lt;a href=&amp;quot;google.com&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;`&lt;br /&gt;
* [&#039;class&#039; =&amp;gt; &#039;foo&#039;] matches `&amp;lt;div class=&amp;quot;foo&amp;quot;&amp;gt;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=== How to use URLs ===&lt;br /&gt;
Codeception documentation suggests to use URL&#039;s as properties of a Page Object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;amOnPage(JoomlaInstallationConfigurationPage::$URL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Instead of hardcoding the url in the test:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;amOnPage(&#039;/administrator/index.php?option=com_banners&amp;amp;view...&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The pros of this approach is:&lt;br /&gt;
- first way is more readable for non developers. &lt;br /&gt;
- it helps to make tests more maintenable in the case of a url change in the system&lt;br /&gt;
&lt;br /&gt;
However in joomla a change in an url is rare, and if it happens changing it will just be a Find&amp;amp;Replace task. I Joomla test we want to have the benefit of both, the url and a representative name that describes the page where we are going. That will make our tests more readable. Thus, we will write the urls the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;amGoingTo(&#039;go to Create New Banner page at Joomla Administrator&#039;);&lt;br /&gt;
$I-&amp;gt;amOnPage(&#039;/administrator/index.php?option=com_banners&amp;amp;view...&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Working with Hidden Elements ===&lt;br /&gt;
Selenium can&#039;t interact with elements that are not visible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://www.joomla.org&amp;quot; style=&amp;quot;display: none;&amp;quot; id=&amp;quot;joomla_site&amp;quot;&amp;gt;go to joomla&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can&#039;t do:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;click(&#039;go to joomla&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usually this happens when you need to wait for a Javascript animation that end up showing that element, so in this case you will need to do this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;waitForElementVisible(&#039;#joomla_site&#039;);&lt;br /&gt;
$I-&amp;gt;click(&#039;go to joomla&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== When do not use contains ===&lt;br /&gt;
We do not recommend to use the function contains on XPath because is not specific and can create false positives at tests.&lt;br /&gt;
See: https://github.com/joomla-projects/GSOC-Webdriver_system_tests_for_CMS/pull/99#issuecomment-69004191&lt;br /&gt;
=== Always add Strict Locators to your tests ===&lt;br /&gt;
Performance in tests is very important. You can reduce dramatically the time spent on a test with just adding a few extra locators. For example, the following code pertains to a test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// see($text, $selector = null)&lt;br /&gt;
$I-&amp;gt;see(&#039;Your article has been published&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the previous code we are not facilitating the &amp;quot;Selector&amp;quot; so Codeception will have to search for the element in all the HTML. Doing this instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;see(&#039;Your article has been published&#039;, [&#039;id&#039; =&amp;gt; &#039;messages&#039;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the tests went from: Time: 1.17 minutes&lt;br /&gt;
to: Time: 49.18 seconds&lt;br /&gt;
&lt;br /&gt;
You can see this video of a real example: http://www.youtube.com/watch?v=0JCv0BR2yZY&lt;br /&gt;
&lt;br /&gt;
Losing 30 seconds in every Assertion can delay your tests dramatically. Therefore, remind always to add xPath locators to all your Assertions.&lt;br /&gt;
&lt;br /&gt;
Allowed locator mechanisms are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
- [&#039;id&#039; =&amp;gt; &#039;xxx&#039;]&lt;br /&gt;
- [&#039;name&#039; =&amp;gt; &#039;xxx&#039;]&lt;br /&gt;
- [&#039;css&#039; =&amp;gt; &#039;xxx&#039;]&lt;br /&gt;
- [&#039;xpath&#039; =&amp;gt; &#039;xxx&#039;]&lt;br /&gt;
- [&#039;link&#039; =&amp;gt; &#039;xxx&#039;]&lt;br /&gt;
- [&#039;class&#039; =&amp;gt; &#039;xxx&#039;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Automated Testing]]&lt;br /&gt;
&lt;br /&gt;
==== Using locators in $I-&amp;gt;see ====&lt;br /&gt;
Do not use &#039;&#039;see&#039;&#039; without locator:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Wrong:&lt;br /&gt;
$I-&amp;gt;see(&#039;Your article has been published&#039;);&lt;br /&gt;
&lt;br /&gt;
// Right:&lt;br /&gt;
$I-&amp;gt;see(&#039;Your article has been published&#039;, [&#039;id&#039; =&amp;gt; &#039;messages&#039;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Using locators in $I-&amp;gt;waitForText ====&lt;br /&gt;
Do not use &#039;&#039;waitForText&#039;&#039; without locator:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Wrong:&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;Finalisation&#039;);&lt;br /&gt;
&lt;br /&gt;
// Right:&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;Finalisation&#039;, 10, [&#039;css&#039; =&amp;gt; &#039;h3&#039;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Incase of an element has multiple css classes, When Using CSS Locators make sure you use more specific class as locator:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Wrong:&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;Item Succesfully Created&#039;, 10, [&#039;class&#039; =&amp;gt; &#039;alert&#039;]);&lt;br /&gt;
&lt;br /&gt;
// Right:&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;Item Succesfully Created&#039;, 10, [&#039;class&#039; =&amp;gt; &#039;alert-success&#039;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A page could have mutiple elements which can have &#039;&#039;alert&#039;&#039; css class associated, hence being more specific helps.&lt;br /&gt;
&lt;br /&gt;
==== How much time should I wait for an Element or Text? ====&lt;br /&gt;
You may have noticed that the second parameter in the I waitForText is an integer that represents how much &amp;quot;time to wait&amp;quot; in seconds:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;a text to wait for&#039;,&#039;60&#039;,[&#039;...&#039; =&amp;gt; &#039;...&#039;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But, how much time is the right time to wait for a text?&lt;br /&gt;
&lt;br /&gt;
PHP maximum execution time before returning a Fatal Error for timeout is set by default to 30 seconds. &#039;&#039;&#039;We suggest to set it for 60 seconds&#039;&#039;&#039;, because running the tests in slow computers can easily get to that time in some tasks. &lt;br /&gt;
&lt;br /&gt;
If a waitForText command takes over 10 seconds, it will much probably mean that something is not performing well. Maybe a non [[Testing Joomla Extensions with Codeception#Always_add_Strict_Locators_to_your_tests|Strict Locator]] is being used and Selenium takes to much time to find the element. However we have even identified cases were some steps take longer than 30 seconds in very slow computers, specifically installing joomla, see https://github.com/joomla-projects/joomla-browser/commit/b70f195140e599649cf98f051d7a31388c4f1632. For this cases we can&#039;t do much, other than recommend to add more memory to the local web server.&lt;br /&gt;
&lt;br /&gt;
=== Quote and Double Quotes in Complex XPaths ===&lt;br /&gt;
Sometimes you will have to write XPaths that looks like:&lt;br /&gt;
&lt;br /&gt;
 //button[@onclick=&#039;Joomla.submitbutton(&amp;quot;config.save.application.apply&amp;quot;)&#039;]&lt;br /&gt;
&lt;br /&gt;
When moved to a Page Object you will probably will face this situation:&lt;br /&gt;
&lt;br /&gt;
[[File:System_tests_error_escaping_quotes_on_xpaths.png|framed|center|Typical issue when you write a long XPath in a Page object]]&lt;br /&gt;
&lt;br /&gt;
To avoid it remind to escape the quotes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Wrong&lt;br /&gt;
public static $elements = array(&lt;br /&gt;
   &#039;Save&#039; =&amp;gt; &amp;quot;//button[@onclick=&amp;quot;Joomla.submitbutton(&#039;config.save.application.apply&#039;)&amp;quot;]&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
// Right&lt;br /&gt;
public static $elements = array(&lt;br /&gt;
   &#039;Save&#039; =&amp;gt; &amp;quot;//button[@onclick=\&amp;quot;Joomla.submitbutton(&#039;config.save.application.apply&#039;)\&amp;quot;]&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Generating txt/html scenarios===&lt;br /&gt;
Codeception allows you to generate user-friendly text scenarios from scenario-driven from Cest and Cept php test (see http://codeception.com/docs/reference/Commands#GenerateScenarios).&lt;br /&gt;
&lt;br /&gt;
===Don&#039;t use double quotes, use single quotes instead===&lt;br /&gt;
Do not use double quotes (&amp;quot;) for surrounding strings:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;waitForText(&amp;quot;Congratulations! Joomla! is now installed.&amp;quot;, 30);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you do, when you [[Testing_Joomla_Extensions_with_Codeception#Generating_txt.2Fhtml_scenarios|generate the scenarios]] you will get this bad result:&lt;br /&gt;
&lt;br /&gt;
 I wait for text &amp;quot;&amp;quot;Congratulations! Joomla! is now installed.&amp;quot;&amp;quot;,&amp;quot; 30&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you use single quotes instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;Congratulations! Joomla! is now installed.&#039;, 30);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will get the right expected result:&lt;br /&gt;
&lt;br /&gt;
 I wait for text &#039;Congratulations! Joomla! is now installed.&#039;,&amp;quot; 30&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The reason of not being able to use double quotes is due to a bug in Codeception humanize funtions, see issue: https://github.com/Codeception/Codeception/issues/1847&lt;br /&gt;
&lt;br /&gt;
===Do not leave spaces between parameters in Cepts===&lt;br /&gt;
See the two lines:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Wrong&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;Main Configuration&#039;, 10, &#039;h3&#039;);&lt;br /&gt;
// Good&lt;br /&gt;
$I-&amp;gt;waitForText(&#039;Main Configuration&#039;,10,&#039;h3&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you do, when you [[Testing_Joomla_Extensions_with_Codeception#Generating_txt.2Fhtml_scenarios|generate the scenarios]] you will get this bad result:&lt;br /&gt;
&lt;br /&gt;
 I wait for text &#039;Main Configuration&#039;,&amp;quot; 10&amp;quot;,&amp;quot; &#039;h3&#039;&lt;br /&gt;
&lt;br /&gt;
The reason that you are asked to not add spaces between parameters is due to a bug in Codeception humanize funtions, see issue: https://github.com/Codeception/Codeception/issues/1847&lt;br /&gt;
&lt;br /&gt;
===Write complex locator VS. modifying the output of the tested website===&lt;br /&gt;
Sometimes we need to write a very complex xpath to locate a element in the page, for example: &lt;br /&gt;
&lt;br /&gt;
 $I-&amp;gt;click([&#039;xpath&#039; =&amp;gt;  &amp;quot;//*[@id=\&amp;quot;menuList\&amp;quot;]/tbody/tr/td[2]/a[contains(text(), &#039;weblink&#039;)&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
wouldn&#039;t be much better to write something like this instead?&lt;br /&gt;
&lt;br /&gt;
 $I-&amp;gt;click([&#039;class&#039; =&amp;gt;  &amp;quot;lc-menu_item_type_weblinks&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
When you find yourself writting a very complex locator in a test, is maybe because the markup of the Website is wrong. For this cases, is better to stop writing the test and reconsider the possibility of modifying the website that we are testing. There is nothing that prevents us to improve Joomla markup. Actually is the other way arround, with these fixes we are probably making Joomla more accessible.&lt;br /&gt;
We have had experiences in the past, see for example this issue: https://github.com/joomla/joomla-cms/issues/7207. &lt;br /&gt;
&lt;br /&gt;
In conclusion is much more convenient to add just a simple class to the element to easily locate it instead of becoming mad finding the right xPath. Remind that is important that our tests are readable, and that has to do with using readable locators. &lt;br /&gt;
&lt;br /&gt;
In order to simplify locators used in Acceptance tests we add special locator classes into HTML of web pages. So not to confuse them with classes needed by CSS or JavaScript we use &#039;&#039;&#039;lc-&#039;&#039;&#039; prefix. Thus, if you find locator to be to complex, it would be much easier to edit HTML and add a new class into it.&lt;br /&gt;
&lt;br /&gt;
 $I-&amp;gt;click(&#039;class&#039; =&amp;gt;  &amp;quot;lc-comment-delete&#039;);&lt;br /&gt;
&lt;br /&gt;
Where &#039;&#039;lc&#039;&#039; stands for &#039;&#039;locator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Is important that the rest of Joomla coders know that this &#039;&#039;&#039;lc-&#039;&#039;&#039; prefix is used by the tests to prevent anyone from removing it.&lt;br /&gt;
&lt;br /&gt;
This recommendation was originally suggested by Davert (the creator of Codeception) at http://phptest.club/t/codeception-tips-tricks/14/8.&lt;br /&gt;
&lt;br /&gt;
===Thoughts on Selenium IDE and the codeception Formatter===&lt;br /&gt;
One can use the [http://www.seleniumhq.org/projects/ide/ Selenium IDE] with the [https://addons.mozilla.org/en-US/firefox/addon/codeception-formatters/ codeception Formatter]. &lt;br /&gt;
Using the Selenium IDE to write the tests seems way easier than writing them in PHP (since you have immediate feedback on what&#039;s going on the page), but it also poses some issues. &lt;br /&gt;
For the most part the Joomla-Browser has functions that we can use to do standard stuff like login, logout etc. If we do our tests with the Selenium IDE we cannot use those and our tests get filled up with stuff that we have already abstracted.&lt;br /&gt;
&lt;br /&gt;
There is still use of the Selenium IDE though, we could use it to create the tests for specific functionality. Like just writing an article, setting publish_up and publish_down dates and then saving. When we export the result with the codeception formatter we would have the necessary PHP and we can add the rest of the stuff for the test to be fully automated (login, navigate to page etc, then execute the exported test). This could speed the creation of tests and we could use non-developers for this kind of work. However this is easier said than done. Due to the Javascript that we use in Joomla simple tests are not that simple. For example clicking in the texteditor and writing text in it is not registered by the IDE since the editor is created by TinyMCE... A way to add text to the editor is to use&lt;br /&gt;
&lt;br /&gt;
 Command | runScript&lt;br /&gt;
 Target | tinyMCE.get(&#039;text_area_id_not_iframe_id&#039;).setContent(&#039;Your text&#039;) &lt;br /&gt;
&lt;br /&gt;
That is again a technical solution to a test that should have been easy in the first place. &lt;br /&gt;
We get into the same trouble with selecting a date out of a Calendar field. So at the end it seems pretty difficult for non-developers to create tests that we could use, because most of the steps recorded by the Selenium IDE won&#039;t work a second time.&lt;br /&gt;
&lt;br /&gt;
If we find a way to make the work with Javascript elements on the page easier, then Selenium IDE could be a great tool that could help us write far more tests, than we currently have in a less time. &lt;br /&gt;
&lt;br /&gt;
As far the codeception Formatter is concerned - it hasn&#039;t been updated in 2 years, but if we find out how to use the Selenium IDE extending the formatter and building on top of it shouldn&#039;t be a show stopper. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Needs to be marked for translation]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_October_17,_2014&amp;diff=127808</id>
		<title>Pizza Bugs and Fun October 17, 2014</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_October_17,_2014&amp;diff=127808"/>
		<updated>2014-10-17T15:14:37Z</updated>

		<summary type="html">&lt;p&gt;THE AI: Explained what the user needs to do after he tests an issue.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:pbf.png|225px|left]]&lt;br /&gt;
&lt;br /&gt;
A Joomla! Pizza, Bugs and Fun event is scheduled for Friday, October 17, 2014. The event is global for virtual participants (both businesses and individuals), with local venues wherever they are organized. The key goal is to fix as many Joomla 3 and Joomla 2.5 bugs as possible.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See the section [http://docs.joomla.org/Pizza_Bugs_and_Fun_October_17,_2014#General_Instructions General Instructions] below for instructions.&#039;&#039;&#039;&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;
Follow [https://twitter.com/joomlabugsquad @JoomlaBugSquad] on Twitter for updates during PBF and some social fun.  The &#039;&#039;Twitter&#039;&#039;&#039; hash tag is #JoomlaPBF.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:left;&amp;quot; /&amp;gt;&lt;br /&gt;
== Goals ==&lt;br /&gt;
* &#039;&#039;&#039;Bugs&#039;&#039;&#039; : We will be working through the [http://issues.joomla.org/ CMS Issue Tracker] where there are bug reports needing patches and/or testing.&lt;br /&gt;
* &#039;&#039;&#039;Documentation&#039;&#039;&#039; : If you want to help out writing documentation, you&#039;re also more than welcome.  See the [http://docs.joomla.org/Pizza_Bugs_and_Fun_October_17,_2014#If_you_want_to_work_on_Documentation Documentation Details] below for suggestions.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
See the [[Pizza_Bugs_and_Fun_October_17,_2014#Chat|Chat section]].&lt;br /&gt;
&lt;br /&gt;
=== Training Sessions ===&lt;br /&gt;
There was an optional webinar training session on 16 October, 2014 at 15:15 UTC. Please use the chat and documentation below for additional resources.&lt;br /&gt;
&lt;br /&gt;
Also, on 16 &amp;amp; 17 October, 2014, [[Pizza_Bugs_and_Fun_October_17,_2014#Chat|the chat]] will be open for a Q&amp;amp;A and for help getting started.&lt;br /&gt;
&lt;br /&gt;
=== Recognition ===&lt;br /&gt;
We&#039;ve dubbed the event as a Business PBF, since it&#039;s the second PBF on a weekday (Friday) and we&#039;d like to get more business involved. We&#039;ve created badges that you can use on your sites to spread awareness of the event and get recognition for your participation: http://developer.joomla.org/pbf&lt;br /&gt;
&lt;br /&gt;
Furthermore, we&#039;d like to give you more recognition and highlight your pledge of participation by placing your logo and a link to your site on the landing page: http://developer.joomla.org/pbf&lt;br /&gt;
&lt;br /&gt;
There are four participations levels: Epic, Platinum, Gold, and Silver. Platinum is for 10 hours or more pledged to the event. Gold is four hours or more pledged. Silver is pledged to participate in the event. And Epic for 100+ hours pledged!&lt;br /&gt;
&lt;br /&gt;
So, for example, if Company ABC had five of their developers for two hours, then they could use the Platinum badge and have their logo (and link) in the platinum area on the landing page.&lt;br /&gt;
&lt;br /&gt;
The hours you choose to pledge towards the event is totally up to you as an individual or business. As a bonus, if you write a blog post about the event, you can count it as 30 minutes towards your pledge. So if you pledged 5 hours and write a blog post, you&#039;d be helping at the event for 4.5 hours.&lt;br /&gt;
&lt;br /&gt;
Finally, on the day of the event, come and go as you&#039;d like and fulfill your pledged hours. You can help with testing bug fixes, reporting bugs, coding bug fixes, etc. Most of all, enjoy every minute! Have fun, enjoy the fellowship, learn, and make Joomla better for you, your business, your clients, and your friends.&lt;br /&gt;
&lt;br /&gt;
=== General Instructions ===&lt;br /&gt;
&lt;br /&gt;
These instructions may change as we get closer to the event.&lt;br /&gt;
&lt;br /&gt;
==== Task List ====&lt;br /&gt;
We have a list of [http://issues.joomla.org/?label=38 suggested items] available to work on. They range from very easy to intermediate difficulty. However, you&#039;re not just limited to this list and using the below process you can test/code for any items:&lt;br /&gt;
&lt;br /&gt;
==== If you want to test bug fixes (i.e. patches) ====&lt;br /&gt;
* Look for issues with a status of Pending. We want at least 2 testers and more on complex issues, so you can test what others have tested already.&lt;br /&gt;
* Use the [http://issues.joomla.org/ CMS Issue Tracker] as usual, which means you can use the [[Component Patchtester for Testers|Joomla Patch Tester]].&lt;br /&gt;
* Most of the issues should have test instructions with them.&lt;br /&gt;
* [[File:Submit_test_result.png|thumb|Submit test result]] Once you have tested then please submit a result using the Submit test result button. What is good to do as well is to leave a comment with more details. For example the comment could look like this: &amp;lt;tt&amp;gt;I have looked at this issue. I was able to confirm the issue AND after applying the patch I can confirm the issue is resolved&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note: You don&#039;t have to delete the installation folder when you are using the development version of Joomla. This allows you to reinstall just by deleting the configuration.php file.&lt;br /&gt;
* Note: See the [http://docs.joomla.org/Pizza_Bugs_and_Fun_October_17,_2014#FAQ FAQ] on how to apply a Git pull request.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;h5&amp;gt;Helpful Documentation&amp;lt;/h5&amp;gt;&lt;br /&gt;
:* [[Component Patchtester for Testers]] - We&#039;d recommend beginners to use the [[Component Patchtester for Testers|Joomla Patch Tester]]&lt;br /&gt;
&lt;br /&gt;
==== If you want to code bug fixes ====&lt;br /&gt;
* Use the [http://issues.joomla.org/ CMS Issue Tracker] as usual, looking for the issues with a status of Confirmed.&lt;br /&gt;
* Send in a [[Git for Coders|pull request (PR)]]. Add testing instructions if they don&#039;t already exist.{{-}}&amp;lt;h5&amp;gt;Helpful documentation&amp;lt;/h5&amp;gt;&lt;br /&gt;
:* [[Component Patchtester for Testers]]&lt;br /&gt;
:* [[Git for Testers and Trackers]]&lt;br /&gt;
:* [[Using the Github UI to Make Pull Requests]] - this is the easiest way to submit simple pull requests&lt;br /&gt;
:* [[Git for Coders]]&lt;br /&gt;
:* [[Working with git and github/My first pull request]]&lt;br /&gt;
:* [[Secure coding guidelines]]&lt;br /&gt;
:* [[Development Best Practices]]&lt;br /&gt;
:* [http://www.slideshare.net/patelgunjan/joomla-pizza-bugs-and-fun-2014-preevent-seminar Joomla! Pizza Bugs and Fun 2014 pre-event Seminar]&lt;br /&gt;
&lt;br /&gt;
==== If you want to work on Documentation ====&lt;br /&gt;
[[File:Documentation all together tranparent bkgd.png|150px|right]]&lt;br /&gt;
* To edit this Documentation Wiki, you will need a user account on the wiki. If you don&#039;t already have one, you may register on [[Special:UserLogin]]. You only need a valid email address to register. After confirming your email address you will have immediate permission to edit any page except for a few that are protected because they are high profile spam targets.&lt;br /&gt;
* &#039;&#039;&#039;Important!&#039;&#039;&#039; - You should review the [[JDOC:Wiki policy|Wiki policy]] and our use of [[User:Abuse filter|Abuse filters]] for new users.&lt;br /&gt;
* Get your user account a few days before and make sure that you are able to sign in since the automatic authorization system can lock some people out.&lt;br /&gt;
* If you&#039;d like something to be edited, but you&#039;re not sure what to write exactly, use talk pages to add comments to pages.&lt;br /&gt;
* During the PBF, several experienced Wiki editors will be available in the chat to help you.&lt;br /&gt;
&lt;br /&gt;
{{:{{PAGENAME}}/Documentation needs}}&lt;br /&gt;
&lt;br /&gt;
=== Pizza ===&lt;br /&gt;
We are offering pizza (or any comparable locally popular main course) and soda for pre-registered groups. We are not setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Nick Savov (nick.savov[at]community.joomla[dot]org , replace [at] with @ and [dot] with .) before the event to register and get details.&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.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Nick Savov (nick.savov[at]community.joomla[dot]org , replace [at] with @ and [dot] with .). Feel free to contact him with any questions.&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
&lt;br /&gt;
The event is global and across all timezones on October 17th, 2014 (48 hours total). You can come and go as you&#039;d like and fulfill your pledged hours. You can help with testing bug fixes, reporting bugs, coding bug fixes, etc. Most of all, enjoy every minute! Have fun, enjoy the community, learn, and make Joomla better for you, your business, your clients, and your friends.&lt;br /&gt;
&lt;br /&gt;
There are also some physical venues... see below.&lt;br /&gt;
&lt;br /&gt;
====Twitter====&lt;br /&gt;
Follow [https://twitter.com/joomlabugsquad @JoomlaBugSquad] on Twitter for updates during PBF and some social fun.  The &#039;&#039;Twitter&#039;&#039;&#039; hash tag is #JoomlaPBF.&lt;br /&gt;
&lt;br /&gt;
====Chat====&lt;br /&gt;
We have a dedicated chat for the PBF event at https://joomla.slack.com/messages/pbf/&lt;br /&gt;
&lt;br /&gt;
All registrants manually get emailed an invite link soon after they complete the [https://docs.google.com/a/community.joomla.org/forms/d/1yQRmN9U3ob0iIsGWiemuwqU3Sp5twCS95P6vvI7BN8M/viewform pledge form]. If you have a team, please email nick.savov[.at.]community.joomla.org with a list of your team members emails, so that invites can be sent to them.&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
&lt;br /&gt;
==== Netherlands ====&lt;br /&gt;
 [http://www.joomlacommunity.eu/nieuws/joomla-in-nederland/976-joomla-pizza-bugs-en-fun-nederland.html Joomla Pizza, Bugs &amp;amp; Fun in Enschede, The Netherlands]&lt;br /&gt;
 Date: Friday, October 17, from 10:30 - 18:00&lt;br /&gt;
 Location: de Bibliotheek, Pijpenstraat 15, 7511 GM Enschede&lt;br /&gt;
 To attend, please add yourself to: http://www.joomlacommunity.eu/joomla-gebruikersgroepen/details/483.html&lt;br /&gt;
&lt;br /&gt;
==== France ====&lt;br /&gt;
 [http://joomla.fr/actualites-de-joomlaorg/joomla-pizza-bugs-and-fun-professionnel-automne-2014 Joomla Pizza, Bugs &amp;amp; Fun à Lyon, France]&lt;br /&gt;
 Date: Friday, October 17&lt;br /&gt;
 Time: We&#039;re open all day long so people can come and go&lt;br /&gt;
 Location: Acyba - Hikari Software, 110 Avenue Barthélémy Buyer, 69009 Lyon&lt;br /&gt;
 To attend or for more information, please email nicolas[.at.]hikashop.com&lt;br /&gt;
&lt;br /&gt;
 [http://joomla.fr/actualites-de-joomlaorg/joomla-pizza-bugs-and-fun-professionnel-automne-2014 Joomla Pizza, Bugs &amp;amp; Fun à Toulouse, France]&lt;br /&gt;
 Date: Friday, October 17&lt;br /&gt;
 Time: We&#039;re open all day long so people can come and go&lt;br /&gt;
 Location: Agence Com&#039;3elles, Immeuble Anadyr, 108 route d&#039;Espagne, 31100 Toulouse&lt;br /&gt;
 To attend or for more information, please email celine.robert[.at.]@com3elles.com&lt;br /&gt;
&lt;br /&gt;
==== Denmark ====&lt;br /&gt;
 Joomla Pizza, Bugs &amp;amp; Fun in Denmark&lt;br /&gt;
 Date: Friday, October 17&lt;br /&gt;
 Time: 10:00am-6:00pm&lt;br /&gt;
 Location: redWEB HQ, Blangstedgårdsvej 1, 5220 Odense SØ&lt;br /&gt;
 To attend, please write to: pbf[.at.]redweb.dk&lt;br /&gt;
&lt;br /&gt;
==== Bulgaria ====&lt;br /&gt;
 Joomla Pizza, Bugs &amp;amp; Fun in Bulgaria&lt;br /&gt;
 Date: Friday, October 17&lt;br /&gt;
 Time: 9:00-15:00&lt;br /&gt;
 Location: SiteGround at Racho Petkov Kazandjiata 8, Sofia&lt;br /&gt;
 To attend, please email: events[.at.]siteground.com&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&lt;br /&gt;
==== India ====&lt;br /&gt;
 [http://tasolglobal.com/ &#039;&#039;&#039;Tailored Solutions Pvt. Ltd.&#039;&#039;&#039;]&lt;br /&gt;
 Date: Friday, October 17, from 9:00 am to 6:30 pm.&lt;br /&gt;
 Location: 406, Arth Complex, &lt;br /&gt;
           Anand nagar Road, &lt;br /&gt;
           Satellite, &lt;br /&gt;
           Ahmedabad - 380015, &lt;br /&gt;
           Gujarat, India.&lt;br /&gt;
&lt;br /&gt;
 [http://www.meetup.com/Joomla-User-Group-Pune/events/211495652/ Joomla Pizza, Bugs &amp;amp; Fun in Pune, India]&lt;br /&gt;
 Date: Saturday, October 18, from 15:00 to 22:00&lt;br /&gt;
 Location: Techjoomla/ Tekdi Technologies Offices, Office No.6, Silver Fern Building. Karve Road. Opposite Kothrud Bus Stand &amp;amp; Above Canara Bank., Pune&lt;br /&gt;
&lt;br /&gt;
==== Thailand ====&lt;br /&gt;
 CMSPlugin.com&#039;s Team and Marvelic Engine&#039; Team&lt;br /&gt;
 Date: Friday, October 17, from 10:00 to 20:00 &lt;br /&gt;
 Localtion : Marvelic Engine Co.,Ltd., 719 KPN Tower, 10/F, Rama 9 Road. Huaykwang, Bangkok 10310.&lt;br /&gt;
 [http://www.marvelic.co.th/th/contact-us.html http://www.marvelic.co.th/th/contact-us.html]&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
&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. This is the same login for updating Joomla documentation.&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;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_October_17,_2014#Organization.2C_logistics_and_communications Organization, logistics and communications section] for details 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 [[Pizza Bugs and Fun October 17, 2014/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Q: Where is the code for Joomla?&lt;br /&gt;
&lt;br /&gt;
A: The current Joomla code can be found on GitHub.&lt;br /&gt;
&lt;br /&gt;
*GitHub - https://github.com/joomla/joomla-cms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: Which one is 3.3?&lt;br /&gt;
&lt;br /&gt;
A: On GitHub, it is the staging branch: [https://github.com/joomla/joomla-cms https://github.com/joomla/joomla-cms]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: Which one is 2.5?&lt;br /&gt;
&lt;br /&gt;
A: On GitHub, it is the 2.5.x branch: [https://github.com/joomla/joomla-cms/tree/2.5.x https://github.com/joomla/joomla-cms/tree/2.5.x]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: How do I apply a Git pull request?&lt;br /&gt;
&lt;br /&gt;
A: Use the [[Component Patchtester for Testers|Joomla Patch Tester]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
{{:Pizza Bugs and Fun October 17, 2014/Contributors List}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]][[Category:Events]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Submit_test_result.png&amp;diff=127789</id>
		<title>File:Submit test result.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Submit_test_result.png&amp;diff=127789"/>
		<updated>2014-10-17T15:10:58Z</updated>

		<summary type="html">&lt;p&gt;THE AI: Shows what the user has to submit once he checks an issue.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Shows what the user has to submit once he checks an issue.&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{JEDL}}&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=GSOC_2014_Project_Ideas&amp;diff=107826</id>
		<title>GSOC 2014 Project Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=GSOC_2014_Project_Ideas&amp;diff=107826"/>
		<updated>2014-02-23T19:53:46Z</updated>

		<summary type="html">&lt;p&gt;THE AI: /* Project: Component for managing predefined emails */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GSOC_2014.png|300px|left]]&lt;br /&gt;
&lt;br /&gt;
Welcome to the Joomla! Google Summer of Code (GSoC) 2014 project ideas page. As we move forward with the 2014 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. Please keep in mind that projects need to be realistically something that is able to be functionally completed by a student working full time for about eight weeks. Thanks!&lt;br /&gt;
&lt;br /&gt;
For students who want a general overview of Joomla&#039;s GSoc, project plans, proposals, and timelines, please [http://docs.joomla.org/GSOC_2014 refer to the GSoC 2014 page]. &lt;br /&gt;
&lt;br /&gt;
Discussion of ideas and other GSoC related items is welcome on our Google Group: https://groups.google.com/d/forum/joomla-gsoc-2014&lt;br /&gt;
&lt;br /&gt;
If you are interested in participating as a student please review the materials on applying that are available at [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google].  We strongly encourage you to ask questions about process and ideas on the mailing list.&lt;br /&gt;
&lt;br /&gt;
If you are interested in serving as a mentor, please fill out the [https://docs.google.com/a/community.joomla.org/spreadsheet/viewform?formkey=dHA2V1lJbThYQXpwMERiRG1FOTZlV3c6MA Mentor Application Form 2014].&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 Framework 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. You can also view the past lists for [[GSOC_2012_Project_Ideas|2013]], [[GSOC_2012_Project_Ideas|2012]], [[Summer_of_Code_2010_Project_Ideas|2010]] and [[Summer_of_Code_2009_Project_Ideas|2009]], which may be useful for reference. We ask that you keep ideas realistic for the time frame that students will have to complete their projects.&lt;br /&gt;
&lt;br /&gt;
Unless a mentor has proposed a specific project, mentors from the mentor pool will be matched with student projects. However members of the mentor pool are available to answer questions on the Joomla GSoC mailing list.&lt;br /&gt;
&lt;br /&gt;
== Important Guidelines on Submitting Ideas ==&lt;br /&gt;
&lt;br /&gt;
There are some important guidelines to submit ideas, please read these carefully before adding your ideas:&lt;br /&gt;
* Ensure your idea is able to be completed in a fixed period of time. GSoC runs officially between May 19th 2014 and August 18th 2014. This is a very short period of actual coding time. Ideas should respect the time that students have available for the program. &lt;br /&gt;
* Keep ideas realistic. The ideas on this list should maintain a realistic amount of work for a single student, junior level-developer, who is working with a compressed timeline and a fixed completion (&#039;pencils down&#039;) date. &lt;br /&gt;
* Keep ideas core. The purpose of GSoC is to improve Joomla itself. This is not the time to add ideas for new extensions or features that may not be included by the PLT. If the idea is related to the framework, please consult the framework team directly about new ideas to ensure there is interest in having the package included as an official Joomla Framework package. &lt;br /&gt;
* Respect Joomla&#039;s Release Cycle. Joomla&#039;s release cycle currently states that with Joomla 3.5, we will not add new features to the CMS. This means that most of the GSoC projects this year should ideally improve existing code in a backwards compatible way. &lt;br /&gt;
* Joomla 4. Currently there is not a baseline for what Joomla 4 is and what it could be. Ideas centered around Joomla 4 would not fit in well with the goal of GSoC 2014.&lt;br /&gt;
* When in doubt, reach out. If you&#039;re unsure if your idea belongs on this list, please post to the GSoC 2014 mailing list and ask about the community&#039;s interest. &lt;br /&gt;
* No documentation-focused projects. Google Summer of &#039;&#039;Code&#039;&#039; is a program about code. We expect our students to document their work, but writing documentation for Joomla as a project does not align with the goals of GSoC.&lt;br /&gt;
&lt;br /&gt;
== Joomla CMS Ideas ==&lt;br /&gt;
&lt;br /&gt;
* [http://github.com/joomla/joomla-cms Source Code]&lt;br /&gt;
* [http://groups.google.com/d/forum/joomla-dev-cms Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
{{tip|Please add your CMS project ideas below. You can use the &#039;&#039;&#039;[[GSOC 2014 Project Ideas/template|GSOC 2014 Project template]]&#039;&#039;&#039;.|title=Adding Project Ideas}}&lt;br /&gt;
&lt;br /&gt;
===Project: Refactor CMS to use Dependency Injection ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The CMS currently has many hard-coded JPATH constants and a JFactory for developers to get certain global objects from the application. This project would develop a way to depreciate the current system which is difficult to test and is tightly coupled. The project will replace the JPATH constants with the Joomla Framework Dependency Injection package, allowing for a looser coupling of the application&#039;s core components. &lt;br /&gt;
&lt;br /&gt;
For more info see: &lt;br /&gt;
* [https://github.com/joomla/joomla-framework/tree/staging/src/Joomla/DI Joomla Framework DI Package]&lt;br /&gt;
* [https://github.com/joomla/joomla-cms/blob/staging/includes/defines.php Joomla CMS Constants]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; &lt;br /&gt;
* Deprecate the current JPATH constants allowing for replacement with Joomla DI&lt;br /&gt;
* Refactor core components and to use new DI container&lt;br /&gt;
* Write documentation for developers to update their extensions to use Joomla DI&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, object-oriented programming, Joomla CMS (from a user point of view), Understanding of Dependency Injection and Dependency Injection Containers. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
===Project: Webdriver system tests for CMS===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Automated system tests allow us to test the CMS by automatically running Joomla from a browser, selecting menu options, and evaluating results. At present, several number of [https://github.com/joomla/joomla-cms/tree/staging/tests/system system tests] are currently completed using the Selenium Webdriver technology and using the Page Objects pattern to separate the page objects from the test objects. This project will build on the current base of Webdriver tests and expand the test coverage to include more of the CMS.&lt;br /&gt;
&lt;br /&gt;
For more info see: &lt;br /&gt;
* http://docs.joomla.org/System_Testing&lt;br /&gt;
* http://www.youtube.com/watch?v=8Mmg32lg4nA&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; &lt;br /&gt;
* finish the administrator parts not yet tested&lt;br /&gt;
* add front end testing:&lt;br /&gt;
** menu items&lt;br /&gt;
** modules&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, object-oriented programming, Joomla CMS (from a user point of view), HTML&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;Possible mentors:&#039;&#039;&#039; Puneet Kala, Mark Dexter and Javier Gómez&lt;br /&gt;
&lt;br /&gt;
=== Project: Collection of Mini Projects ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The CMS currently could due with several smaller tasks and projects to help move the software forward and improve its usability and feature set. This project is a *collection* of several smaller projects and improvements. The tasks involved are discrete but they must all be accomplished to a high degree of quality in detail to be considered successful. &lt;br /&gt;
&lt;br /&gt;
===== Decouple Core Extensions =====&lt;br /&gt;
:&#039;&#039;&#039; Description&#039;&#039;&#039; In the current version of the CMS, some extensions rely on one another for functionality. The ultimate goal is for each extension to be completely independent so that it could be removed without breaking the functionality of another.&lt;br /&gt;
&lt;br /&gt;
===== Add Menu Type ACL =====&lt;br /&gt;
:&#039;&#039;&#039; Description &#039;&#039;&#039; Currently in the CMS there is no way to have backend based ACL rules per menu-type. This project should add advanced ACL rules and configurability to Joomla&#039;s core menu types. Adding, deleting, and editing menus on a per-menu group basis should be available on a per-group basis.  &lt;br /&gt;
&lt;br /&gt;
===== JError to Exceptions =====&lt;br /&gt;
:&#039;&#039;&#039; Description &#039;&#039;&#039; Currently Joomla uses the JError class to handle error management - however there is a desire to move this across to use exceptions for Joomla 4.0 and remove the JError class. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; This project must address and complete each of the above described mini-projects. Proposals should detail each item in detail and outline a timeline for completing them. &lt;br /&gt;
&lt;br /&gt;
===== Implementing Frontend Menu Editing =====&lt;br /&gt;
:&#039;&#039;&#039; Description &#039;&#039;&#039; Currently frontend menu editing icon redirects user to backend. But actually frontend menu editing should be able to done at the frontend.Implementation would be much similar to the already implemented frontend configuration &amp;amp; frontend template style editing.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; Frontend logged authorized users should be able to edit menu items via frontend. Student should have to figure-out what should be in frontend editor and relevant access control levels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039;  General knowledge of Joomla 3&#039;s core feature set and functionality. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
=== Project: Develop dependency manager ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Distributions are one of the next possible evolutionary steps for the CMS. One key challenge to solve is the management of dependencies that extensions/packages may have.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A working proof of concept that manages the handling of dependencies as well as define requirements that extensions/packages must meet for their dependencies to be managed by this system.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Very challenging, but highly rewarding.&lt;br /&gt;
&lt;br /&gt;
=== Project: Update Core Extensions to use New MVC ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The Joomla Framework has brought us a new MVC architecture that we would like to start using for core components. This project will chose a few core components as a conversion goal to migrate them to run on the new MVC structure. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; Selected core components will run on the new MVC architecture. This will involve changing the component to run the new controller based architecture, and potentially develop a standardized set of methods that are used across multiple extensions. Reducing code repeats and encouraging reuse will be an important aspect of this project.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Challenging, high learning curve and will set precedent for other extensions. This is a opportunity for innovation, not a project to simply copy other parts code into a new feature.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Potential Mentors:&#039;&#039;&#039; Soren Beck Jensen as he runs the http://www.Component-Creator.com and Buddhima Wijeweera as he worked on a similar project for GSoC 2013 http://magazine.joomla.org/issues/issue-nov-2013/item/1580-new-mvc-for-joomla-cms&lt;br /&gt;
&lt;br /&gt;
===Project: SQL Optimization===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The goal of this project is to optimize site performances, between the potential areas where  performance bottleneck resides in a conventional n-tier website architecture, we&#039;ll focus our effort on database side, optimizing slow sql queries.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; After analyzing and measuring the site performance (on some test case ie small, medium, big) will be taken the necessary action using the proper techniques to improve measurably the slower queries.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; SQL, DBMS&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;Potential mentors:&#039;&#039;&#039; Nicola Galgano&lt;br /&gt;
&lt;br /&gt;
===Project: JIssues tracker===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The goal of this project is to finish the JIssues tracker so it is in a position to replace the current Joomla tracker.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The JIssues tracker will be at a place where a transition can take place from Joomla Code to the issues tracker. This will involve working with the JIssues (http://issues.joomla.org/) and working through the issue list (https://github.com/joomla/jissues) as well as contributing any relevant code back into the Framework Project&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Framework, JoomlaCode, Joomla Bug Tracking Process&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;Posible mentors:&#039;&#039;&#039; Michael Babker&lt;br /&gt;
&amp;lt;!-- copy everything above this line --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PASTE the copied code on the main Project Ideas Page under the appropriated project type. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Google Summer of Code 2014]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Project: Component for managing predefined emails ===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Many Joomla! extensions send confirmation mails to users. It will be great if Joomla! provides a powerful component, which will be used for creating predefined emails. The component has to provide classes, which will be used from developers for loading, parsing and sending those e-mails.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; &lt;br /&gt;
* Administration interface that will provide an easy way for creating and managing predefined emails.&lt;br /&gt;
* Classes that will be used for loading, parsing and sending those emails.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, object-oriented programming, Joomla CMS. &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;Possible mentors:&#039;&#039;&#039; Todor Iliev, Daniel Dimitrov&lt;br /&gt;
&lt;br /&gt;
== Joomla Framework ==&lt;br /&gt;
&lt;br /&gt;
The Joomla Framework project ideas allows for ideas that can work within the Joomla CMS, or could be completely separate applications that have no connection at all. The Joomla Framework allows for applications to be built for the command line, process daemons and the web. &lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
*[http://github.com/joomla/joomla-framework github Source Code]&lt;br /&gt;
*[http://developer.joomla.org/framework/roadmap.html Development Roadmap]&lt;br /&gt;
*[http://groups.google.com/d/forum/joomla-dev-framework Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
All code contributions must follow Joomla coding standards and include full unit test coverage.&lt;br /&gt;
&lt;br /&gt;
{{tip|Please add your Framework project ideas below. You can use the &#039;&#039;&#039;[[GSOC 2014 Project Ideas/template|GSOC 2014 Project template]]&#039;&#039;&#039;.|title=Adding Project Ideas}}&lt;br /&gt;
&lt;br /&gt;
===Project: Framework Unit Testing===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The Joomla Framework 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 Framework.&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/framework-coverage/ code coverage report] for the Joomla Framework 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;
===Project: Improve Filesystem classes===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Replace static methods with public ones of classes File, Folder, Path. Let these things to be used as object with theirs methods and properties. Develop classes, which will be used as adapters, for some fundamental actions performed on those file system elements. The adapters should be for uploading, deleting, reading,...&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; &lt;br /&gt;
* A set of well coded, fully unit tested and documented implementations for the file system classes.&lt;br /&gt;
* Adapters for managing files on some of the most popular cloud services - Amazon S3, Google App Engine,...&lt;br /&gt;
* Classes for validating files size, images,...&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; GitHub, PHPUnit, PHP, OOP, Design Patterns, familiarity with web services and Joomla! Framework.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
===Project: Improve Date classes===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Develop classes and methods that will give more power to developers working with dates.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; &lt;br /&gt;
* Methods that calculate dates for yesterday, begin of week, end of week, begin of month, end of month, begin of year, end of year,...&lt;br /&gt;
* Methods that calculate time for begin of day, end of day,...&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; GitHub, PHPUnit, PHP, OOP, Design Patterns, familiarity Joomla! Framework.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code 2014]]&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived_talk:Developing_a_MVC_Component/Adding_ACL&amp;diff=66175</id>
		<title>Archived talk:Developing a MVC Component/Adding ACL</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived_talk:Developing_a_MVC_Component/Adding_ACL&amp;diff=66175"/>
		<updated>2012-04-12T08:38:59Z</updated>

		<summary type="html">&lt;p&gt;THE AI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Somehow the ACL doesn&#039;t work on Edit permission for me. It shows both Save &amp;amp; New and Save as Copy buttons when it has no create rights. Gone through the code twice, but cannot see anything wrong with it... Anybody else have same problem? --[[User:A2Ggeir|A2Ggeir]] 10:19, 6 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Did a little debug and it seems the values from function canDo() in Helper does not return the right values when it is in edit view. &lt;br /&gt;
&lt;br /&gt;
Result when in listview:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
   &#039;core.admin&#039; =&amp;gt; NULL,&lt;br /&gt;
   &#039;core.manage&#039; =&amp;gt; true,&lt;br /&gt;
   &#039;core.create&#039; =&amp;gt; false,&lt;br /&gt;
   &#039;core.edit&#039; =&amp;gt; true,&lt;br /&gt;
   &#039;core.delete&#039; =&amp;gt; false,&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result when in editview:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
   &#039;core.admin&#039; =&amp;gt; NULL,&lt;br /&gt;
   &#039;core.manage&#039; =&amp;gt; NULL,&lt;br /&gt;
   &#039;core.create&#039; =&amp;gt; true,&lt;br /&gt;
   &#039;core.edit&#039; =&amp;gt; true,&lt;br /&gt;
   &#039;core.delete&#039; =&amp;gt; true,&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:A2Ggeir|A2Ggeir]] 12:02, 7 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Delet dosn&#039;t work ==&lt;br /&gt;
&lt;br /&gt;
when you want to delete a message it goes wrong and the message appears:&lt;br /&gt;
&lt;br /&gt;
500 - Es ist ein Fehler aufgetreten&lt;br /&gt;
&lt;br /&gt;
Layout „default“ nicht gefunden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
downt know why its not working... maybee some can check this out.&lt;br /&gt;
&lt;br /&gt;
Greetz&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ok, so I have carefully followed the tutorial to here. What I need to know now is HOW do I allow a user who only has edit.own rights to get to the admin edit for the component??&lt;br /&gt;
&lt;br /&gt;
I tried for a while to create an edit page on the front end, but no luck and no help. It occurred to me that perhaps if I could not bring the mountain to Mohammed, I could get Mohammed access to the mountain. But how to do it without making every user an administrator? Even a manager has too much other access.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[User:IslandBilly|&amp;amp;quot;In theory, there&amp;amp;#39;s no difference between theory and practice; in practice, there is&amp;amp;quot;  --Yogi Berra]] 10:14, 12 November 2011 (CST) Using v1.7&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
I think that this example is missing something in the bind method.&lt;br /&gt;
 &lt;br /&gt;
        // Bind the rules.&lt;br /&gt;
        if (isset($array[&#039;rules&#039;]) &amp;amp;&amp;amp; is_array($array[&#039;rules&#039;]))&lt;br /&gt;
        {&lt;br /&gt;
            $rules = new JAccessRules($array[&#039;rules&#039;]);&lt;br /&gt;
            $this-&amp;gt;setRules($rules);&lt;br /&gt;
        }&lt;br /&gt;
If we don&#039;t bind the rules then they are not saved in the asset table for the message/item...&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GSOC_2012_Project_Ideas&amp;diff=65811</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=65811"/>
		<updated>2012-03-22T13:26:05Z</updated>

		<summary type="html">&lt;p&gt;THE AI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&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. Please keep in mind that projects need to be realistically something that is able to be functionally completed by a student working full time for about eight weeks. 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;
If you are interested in serving as a mentor, please fill out the [https://docs.google.com/spreadsheet/viewform?formkey=dERlY0dxekFUWEg4ME1YZDhVMDhJMGc6MQ#gid=0 Mentor Application Form].&lt;br /&gt;
&lt;br /&gt;
If you are interested in applying as a student please see our [https://docs.google.com/document/d/1s5chDv-hekOXwgNAjjF-YMQKRaisigasPk-ZCW5KgNQ/edit application template]. You will need to register with Google and submit through their GSOC program.&lt;br /&gt;
&lt;br /&gt;
If you are interested in participating as a student please review the materials on applying that are available at [http://code.google.com/soc/ Google].  We strongly encourage you to ask questions about process and ideas on the mailing list.&lt;br /&gt;
&lt;br /&gt;
* [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2012/userguide#depth_mentor Guide for Mentors]&lt;br /&gt;
* [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs Google Summer of Code™ 2012 Frequently Asked Questions]&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. You can also view the past lists for [http://docs.joomla.org/Summer_of_Code_2010_Project_Ideas 2010] and [http://docs.joomla.org/Summer_of_Code_2009_Project_Ideas 2009], which may be useful for reference. We ask that you keep ideas realistic for the time frame that students will have to complete their projects.&lt;br /&gt;
&lt;br /&gt;
Unless a mentor has proposed a specific project, mentors from the mentor pool will be matched with student projects. However members of the mentor pool are available to answer questions on the Joomla GSoC mailing list.&lt;br /&gt;
&lt;br /&gt;
===Joomla CMS===&lt;br /&gt;
&lt;br /&gt;
* [http://github.com/joomla/joomla-cms Source Code]&lt;br /&gt;
* [http://groups.google.com/d/forum/joomla-dev-cms Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
====Project: Language Installation====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; 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 extension manager or the language manager.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* http://joomlacode.org/gf/project/jtranslation1_6/frs/&lt;br /&gt;
* https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/updater&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The goal is to have code implementing this functionally complete and in a format ready for testings by the Joomla Bug Squad as a new feature in the CMS using the normal new feature process.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, web services&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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;
====Project: Query optimization ====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Profile the queries in the CMS and optimize them, insuring that they remain database agnostic.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/database&lt;br /&gt;
* http://en.wikipedia.org/wiki/SQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; Measurable improvement in the performance of the CMS. The project will likely also result in contributions to JDatabaseQuery and other related classes in the Joomla Platform. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; SQL, Joomla Platform (JDatabase), ANSI standards.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Batch processing management/scheduler====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Brief explanation:Manage batch job’s processing, create, schedule  and run jobs, such as backup,virus scan, billing, reports, emailing and much more  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to build an O.S. independent solution that act as a wrapper to manage jobs, allowing to manage tasks from third party extensions too, in a easy way simplifying the Joomla webmaster life&lt;br /&gt;
See: http://en.wikipedia.org/wiki/Batch_processing&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039;: PHP, Joomla CMS, Joomla Platform, Mysql, Operating Systems.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;: Nicola Galgano&lt;br /&gt;
&lt;br /&gt;
====Project: Add Article Image support to Core Content Modules====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Joomla 2.5.x ships with several core content modules. These modules can display article lists or links. However they do not support bringing in article images. This project would be to make some minor code updates to all the core content modules to add article image support and parameters. Some basic parameters would be to show / hide the article image, specify a thumbnail size, enable or disable article links on the image, and whether or not to respect the image&#039;s proportion when resized as a thumbnail.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to modify and update Joomla&#039;s core content modules and make modifications to the multiple files in the MVC structure to add parameters, and add additional code to the module&#039;s HTML output. The module should interface with the Joomla core class JImage as well to create the thumbnail image. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, Joomla! Framework&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Easy&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Chad Windnagle&lt;br /&gt;
&lt;br /&gt;
====Project: Trash Manager====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; Create a component that functions similarly to com_checkin that allows you to manage trash items across all tables.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; It should be able to pull records in &#039;trashed&#039; status that have -2 as the value and allow selection of single deletion, mass deletion, deletion by table, etc. Include an integrated notification to users that they have trashed item.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Data Dictionary====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; Create a data dictionary that will expand on current core database tables to add support for more commonly used data and will be supported on newly created Joomla databases. Also create a process for updating and managing the data dictionary, and document the current data model. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read more about this idea:&#039;&#039;&#039;&lt;br /&gt;
*[https://docs.google.com/document/d/1_a08yMHnzGWDw2nsBlu5Ztxxketq9Q8jrkqf8C3iUEg/edit Shared Data Dictionary for Joomla]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A data dictionary will make it easier for different developers to standardize on where to create, read, update, and delete some commonly stored data (such as user profile information), instead of the current situation where multiple extensions may potentially duplicate the same data.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Refactor Media Manager====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; The current media manager is outdated and limited. Refactor the media manager to include a better user interface, more robust functionality, and seemless integration for extensions to use. The improvements could include providing a folder tree, file property information, upload capabilities, move/rename files and folders, use of JImage for image basic processing (resize, crop).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; Refactor the Media Manager to improve the usability, functionality, and reusability of the extension.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL, Javascript&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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 the web. 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. One emphasis on this year&#039;s list is on the incorporation of packages for accessing web services, however other ideas for libraries and packages are welcome. In some instances multiple students may work on different aspects of the project.  Two examples of this are unit testing and JStemmer.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
*[http://github.com/joomla/joomla-platform github Source Code]&lt;br /&gt;
*[http://developer.joomla.org/strategy.html Development Strategy]&lt;br /&gt;
*[http://groups.google.com/d/forum/joomla-dev-platform Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
All code contributions must follow Joomla coding standards and include full unit test coverage.&lt;br /&gt;
&lt;br /&gt;
====Project: Document Classes====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create JCard, JCalendar and other extensible classes that will read and produce standards compliant documents of specific types (e.g. vCard,iCal).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* http://en.wikipedia.org/wiki/ICalendar&lt;br /&gt;
* http://www.imc.org/pdi/&lt;br /&gt;
* http://tools.ietf.org/html/rfc5545&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;Expected Results:&#039;&#039;&#039; A fully developed, unit tested and documented set of classes (specific number and choices will be finalized in discussion with the mentor and platform maintainers) and a simple platform application illustrating use.&lt;br /&gt;
&lt;br /&gt;
====Project: Library to Compile and Compress Javascript and CSS Files====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Compiling and compressing javascript and CSS files can substantially the improve performance of a web site. Providing a package to do this will help the CMS and other web applications.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, javascript&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;Expected Results:&#039;&#039;&#039; A platform package with testing and documentation.&lt;br /&gt;
&lt;br /&gt;
====Project: JMailer====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Build out a JMailer class to replace PHPMailer in the platform. This should build upon preliminary work that has already been implemented and is available here.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, web standards, e-mail protocols.&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;Expected Results:&#039;&#039;&#039; A platform package for JMailer that provides the same functionality as PHPMailer, with testing and documentation.&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.  JGitHub and its sub-classes can be used as an example in building this package.&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;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A package of classes which can be used to interact with various social media APIs and can be further extended in the future for new APIs and endpoints.&lt;br /&gt;
&lt;br /&gt;
====Project: JStemmer====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Currently the Joomla CMS includes only a Joomla stemmer for English while the Snowball stemmer is wrapped. We would like to move the English stemmer to the Joomla platform and make the class useful by adding Joomla stemmers for other languages.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/joomla/joomla-cms/tree/master/administrator/components/com_finder/helpers/indexer&lt;br /&gt;
* http://snowball.tartarus.org/&lt;br /&gt;
* http://en.wikipedia.org/wiki/Stemming&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, language issues, 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;Expected Results:&#039;&#039;&#039; A platform class for stemming with subclasses for a number of specific languages (number and specific languages to be determined in discussion with mentor and the search and translation teams). The final product should be fully documented and unit tested.&lt;br /&gt;
&lt;br /&gt;
====Project: JCommerce====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a commerce class based on preliminary work that has been done.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/LouisLandry/joomla-platform/tree/commerce/libraries/joomla/commerce&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, web security, 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;Expected Results:&#039;&#039;&#039; A completed commerce class (including documentation and tests) for cart management and interaction with payment processors.&lt;br /&gt;
&lt;br /&gt;
====Project: JTranscode ====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a  class for transcoding video using ffmpeg.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://ffmpeg.org/&lt;br /&gt;
*http://en.wikipedia.org/wiki/Transcoding&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, standards, media handling &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;Expected Results:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Project: Extend JImage to work with IMagick ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; JImage is an important library added in late 2011. Extend it to work with Imagick.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://www.imagemagick.org/script/index.php&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/image&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform &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;Expected Results:&#039;&#039;&#039; Complete, documented and tested code to extend the JImage class to use Imagick&lt;br /&gt;
&lt;br /&gt;
====Project: JGoogle Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Google APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://code.google.com/more/&lt;br /&gt;
*http://code.google.com/more/table/&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039;  A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JFacebook Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Facebook APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://developers.facebook.com/docs/guides/web/&lt;br /&gt;
*http://www.pluralsight-training.net/microsoft/courses/TableOfContents?courseName=fb-platform&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JAmazonS3 Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating the Amazon S3 APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://aws.amazon.com/archives/Amazon-S3/123&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JRackspace Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Rackspace Cloud APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.rackspace.com/cloud/cloud_hosting_products/servers/api/&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JMediaWiki Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating MediaWiki APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.mediawiki.org/wiki/API:Main_page&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Project: JOpenStreetMap Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Implement a class for incorporating OpenStreetMap for both editing and using data.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.openstreetmap.org/&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/Databases_and_data_access_APIs&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/API&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/Databases_and_data_access_APIs&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs, databases, xml, geodata&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;Expected Results:&#039;&#039;&#039; A set of classes for interacting with Open Street Map.&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;
===Platform Applications===&lt;br /&gt;
&lt;br /&gt;
The creation of useful platform applications that can also serve as exemplars for other platform developers is a third type of project. These applications, whether web or command line based, are built on the Joomla! Platform.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
*https://github.com/joomla/joomla-platform-examples&lt;br /&gt;
*https://github.com/joomla/joomla-platform&lt;br /&gt;
&lt;br /&gt;
====Project: Platform Application to Create PHAR Packages====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a platform application that creates PHAR packages for each package in the Joomla Platform. The goal here is to make the platform accessible to developers in a modular fashion so that they can access only the packages they need for a given application.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://php.net/manual/en/intro.phar.php&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A working and documented application for creating PHAR packages.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
====Project: Platform Example or Building Block Applications====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The Platform Examples repository currently contains a number of very simple sample &amp;quot;Hello world!&amp;quot; applications. Create a number of example web and command line applications using the platform API that could be used as building blocks by developers building more complex applications. Examples would include authentication, cache, form, filesystem, http, and streams classes.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A set of fully implemented Joomla Platform applications that can be easily adapted by developers. Specific applications should be listed in your proposal and will be finalized in discussion with the mentor. Ideally every platform package would have an example application, so there is room for multiple projects.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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 platform application for management of the translation process, 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;References:&#039;&#039;&#039;&lt;br /&gt;
:*[http://www.facebook.com/translations/ Facebook Self-Translation]&lt;br /&gt;
:*[http://localize.drupal.org localize.drupal.org]&lt;br /&gt;
:*[http://weblate.org/ weblate]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The application 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;
:&#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: 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 its 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) [see https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content] 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;References:&#039;&#039;&#039; PHP, OOP&lt;br /&gt;
&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content&lt;br /&gt;
* http://extensions.joomla.org/&lt;br /&gt;
* http://resources.joomla.org/&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/docs/manual/en-US&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;
====Project: Joomla Extension Directory====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; In this project we would like to experiment with some radical ideas that could change from the ground up how directories such as the JED work (the [http://extensions.joomla.org JED]). Our intention is to try out the model of meritocracy and see if it is a valuable alternative to the current way directories operate. The goal of this project is to build a new Joomla Platform application (not a Joomla component but a full application) to serve as an example of such a model.&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) [see https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content] . This is expected to be a &amp;quot;phase 1&amp;quot; project where the features will include workflow, listing submit(that checks the code of the submitted extension for some security issues), listing reviews + implementing a good scoring algorithm.  The student is not expected to design the final website but should look to [http://twitter.github.com/bootstrap/ Bootstrap] for basic inspiration. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039; PHP, OOP&lt;br /&gt;
&lt;br /&gt;
* The idea in more details https://docs.google.com/document/d/1qa57rZcp0oMpA1mCr3mpletenwcDkx8wbI2vv6GCRsY/edit&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content&lt;br /&gt;
* http://extensions.joomla.org/&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/docs/manual/en-US&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;
[[Category:Google Summer of Code 2012]]&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GSOC_2012_Project_Ideas&amp;diff=65810</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=65810"/>
		<updated>2012-03-22T13:24:49Z</updated>

		<summary type="html">&lt;p&gt;THE AI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&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. Please keep in mind that projects need to be realistically something that is able to be functionally completed by a student working full time for about eight weeks. 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;
If you are interested in serving as a mentor, please fill out the [https://docs.google.com/spreadsheet/viewform?formkey=dERlY0dxekFUWEg4ME1YZDhVMDhJMGc6MQ#gid=0 Mentor Application Form].&lt;br /&gt;
&lt;br /&gt;
If you are interested in applying as a student please see our [https://docs.google.com/document/d/1s5chDv-hekOXwgNAjjF-YMQKRaisigasPk-ZCW5KgNQ/edit application template]. You will need to register with Google and submit through their GSOC program.&lt;br /&gt;
&lt;br /&gt;
If you are interested in participating as a student please review the materials on applying that are available at [http://code.google.com/soc/ Google].  We strongly encourage you to ask questions about process and ideas on the mailing list.&lt;br /&gt;
&lt;br /&gt;
* [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2012/userguide#depth_mentor Guide for Mentors]&lt;br /&gt;
* [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs Google Summer of Code™ 2012 Frequently Asked Questions]&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. You can also view the past lists for [http://docs.joomla.org/Summer_of_Code_2010_Project_Ideas 2010] and [http://docs.joomla.org/Summer_of_Code_2009_Project_Ideas 2009], which may be useful for reference. We ask that you keep ideas realistic for the time frame that students will have to complete their projects.&lt;br /&gt;
&lt;br /&gt;
Unless a mentor has proposed a specific project, mentors from the mentor pool will be matched with student projects. However members of the mentor pool are available to answer questions on the Joomla GSoC mailing list.&lt;br /&gt;
&lt;br /&gt;
===Joomla CMS===&lt;br /&gt;
&lt;br /&gt;
* [http://github.com/joomla/joomla-cms Source Code]&lt;br /&gt;
* [http://groups.google.com/d/forum/joomla-dev-cms Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
====Project: Language Installation====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; 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 extension manager or the language manager.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* http://joomlacode.org/gf/project/jtranslation1_6/frs/&lt;br /&gt;
* https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/updater&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The goal is to have code implementing this functionally complete and in a format ready for testings by the Joomla Bug Squad as a new feature in the CMS using the normal new feature process.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, web services&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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;
====Project: Query optimization ====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Profile the queries in the CMS and optimize them, insuring that they remain database agnostic.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/database&lt;br /&gt;
* http://en.wikipedia.org/wiki/SQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; Measurable improvement in the performance of the CMS. The project will likely also result in contributions to JDatabaseQuery and other related classes in the Joomla Platform. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; SQL, Joomla Platform (JDatabase), ANSI standards.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Batch processing management/scheduler====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Brief explanation:Manage batch job’s processing, create, schedule  and run jobs, such as backup,virus scan, billing, reports, emailing and much more  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to build an O.S. independent solution that act as a wrapper to manage jobs, allowing to manage tasks from third party extensions too, in a easy way simplifying the Joomla webmaster life&lt;br /&gt;
See: http://en.wikipedia.org/wiki/Batch_processing&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039;: PHP, Joomla CMS, Joomla Platform, Mysql, Operating Systems.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;: Nicola Galgano&lt;br /&gt;
&lt;br /&gt;
====Project: Add Article Image support to Core Content Modules====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Joomla 2.5.x ships with several core content modules. These modules can display article lists or links. However they do not support bringing in article images. This project would be to make some minor code updates to all the core content modules to add article image support and parameters. Some basic parameters would be to show / hide the article image, specify a thumbnail size, enable or disable article links on the image, and whether or not to respect the image&#039;s proportion when resized as a thumbnail.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to modify and update Joomla&#039;s core content modules and make modifications to the multiple files in the MVC structure to add parameters, and add additional code to the module&#039;s HTML output. The module should interface with the Joomla core class JImage as well to create the thumbnail image. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, Joomla! Framework&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Easy&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Chad Windnagle&lt;br /&gt;
&lt;br /&gt;
====Project: Trash Manager====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; Create a component that functions similarly to com_checkin that allows you to manage trash items across all tables.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; It should be able to pull records in &#039;trashed&#039; status that have -2 as the value and allow selection of single deletion, mass deletion, deletion by table, etc. Include an integrated notification to users that they have trashed item.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Data Dictionary====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; Create a data dictionary that will expand on current core database tables to add support for more commonly used data and will be supported on newly created Joomla databases. Also create a process for updating and managing the data dictionary, and document the current data model. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read more about this idea:&#039;&#039;&#039;&lt;br /&gt;
*[https://docs.google.com/document/d/1_a08yMHnzGWDw2nsBlu5Ztxxketq9Q8jrkqf8C3iUEg/edit Shared Data Dictionary for Joomla]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A data dictionary will make it easier for different developers to standardize on where to create, read, update, and delete some commonly stored data (such as user profile information), instead of the current situation where multiple extensions may potentially duplicate the same data.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Refactor Media Manager====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; The current media manager is outdated and limited. Refactor the media manager to include a better user interface, more robust functionality, and seemless integration for extensions to use. The improvements could include providing a folder tree, file property information, upload capabilities, move/rename files and folders, use of JImage for image basic processing (resize, crop).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; Refactor the Media Manager to improve the usability, functionality, and reusability of the extension.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL, Javascript&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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 the web. 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. One emphasis on this year&#039;s list is on the incorporation of packages for accessing web services, however other ideas for libraries and packages are welcome. In some instances multiple students may work on different aspects of the project.  Two examples of this are unit testing and JStemmer.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
*[http://github.com/joomla/joomla-platform github Source Code]&lt;br /&gt;
*[http://developer.joomla.org/strategy.html Development Strategy]&lt;br /&gt;
*[http://groups.google.com/d/forum/joomla-dev-platform Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
All code contributions must follow Joomla coding standards and include full unit test coverage.&lt;br /&gt;
&lt;br /&gt;
====Project: Document Classes====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create JCard, JCalendar and other extensible classes that will read and produce standards compliant documents of specific types (e.g. vCard,iCal).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* http://en.wikipedia.org/wiki/ICalendar&lt;br /&gt;
* http://www.imc.org/pdi/&lt;br /&gt;
* http://tools.ietf.org/html/rfc5545&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;Expected Results:&#039;&#039;&#039; A fully developed, unit tested and documented set of classes (specific number and choices will be finalized in discussion with the mentor and platform maintainers) and a simple platform application illustrating use.&lt;br /&gt;
&lt;br /&gt;
====Project: Library to Compile and Compress Javascript and CSS Files====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Compiling and compressing javascript and CSS files can substantially the improve performance of a web site. Providing a package to do this will help the CMS and other web applications.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, javascript&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;Expected Results:&#039;&#039;&#039; A platform package with testing and documentation.&lt;br /&gt;
&lt;br /&gt;
====Project: JMailer====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Build out a JMailer class to replace PHPMailer in the platform. This should build upon preliminary work that has already been implemented and is available here.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, web standards, e-mail protocols.&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;Expected Results:&#039;&#039;&#039; A platform package for JMailer that provides the same functionality as PHPMailer, with testing and documentation.&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.  JGitHub and its sub-classes can be used as an example in building this package.&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;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A package of classes which can be used to interact with various social media APIs and can be further extended in the future for new APIs and endpoints.&lt;br /&gt;
&lt;br /&gt;
====Project: JStemmer====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Currently the Joomla CMS includes only a Joomla stemmer for English while the Snowball stemmer is wrapped. We would like to move the English stemmer to the Joomla platform and make the class useful by adding Joomla stemmers for other languages.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/joomla/joomla-cms/tree/master/administrator/components/com_finder/helpers/indexer&lt;br /&gt;
* http://snowball.tartarus.org/&lt;br /&gt;
* http://en.wikipedia.org/wiki/Stemming&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, language issues, 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;Expected Results:&#039;&#039;&#039; A platform class for stemming with subclasses for a number of specific languages (number and specific languages to be determined in discussion with mentor and the search and translation teams). The final product should be fully documented and unit tested.&lt;br /&gt;
&lt;br /&gt;
====Project: JCommerce====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a commerce class based on preliminary work that has been done.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/LouisLandry/joomla-platform/tree/commerce/libraries/joomla/commerce&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, web security, 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;Expected Results:&#039;&#039;&#039; A completed commerce class (including documentation and tests) for cart management and interaction with payment processors.&lt;br /&gt;
&lt;br /&gt;
====Project: JTranscode ====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a  class for transcoding video using ffmpeg.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://ffmpeg.org/&lt;br /&gt;
*http://en.wikipedia.org/wiki/Transcoding&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, standards, media handling &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;Expected Results:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Project: Extend JImage to work with IMagick ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; JImage is an important library added in late 2011. Extend it to work with Imagick.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://www.imagemagick.org/script/index.php&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/image&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform &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;Expected Results:&#039;&#039;&#039; Complete, documented and tested code to extend the JImage class to use Imagick&lt;br /&gt;
&lt;br /&gt;
====Project: JGoogle Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Google APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://code.google.com/more/&lt;br /&gt;
*http://code.google.com/more/table/&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039;  A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JFacebook Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Facebook APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://developers.facebook.com/docs/guides/web/&lt;br /&gt;
*http://www.pluralsight-training.net/microsoft/courses/TableOfContents?courseName=fb-platform&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JAmazonS3 Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating the Amazon S3 APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://aws.amazon.com/archives/Amazon-S3/123&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JRackspace Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Rackspace Cloud APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.rackspace.com/cloud/cloud_hosting_products/servers/api/&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JMediaWiki Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating MediaWiki APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.mediawiki.org/wiki/API:Main_page&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Project: JOpenStreetMap Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Implement a class for incorporating OpenStreetMap for both editing and using data.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.openstreetmap.org/&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/Databases_and_data_access_APIs&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/API&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/Databases_and_data_access_APIs&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs, databases, xml, geodata&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;Expected Results:&#039;&#039;&#039; A set of classes for interacting with Open Street Map.&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;
===Platform Applications===&lt;br /&gt;
&lt;br /&gt;
The creation of useful platform applications that can also serve as exemplars for other platform developers is a third type of project. These applications, whether web or command line based, are built on the Joomla! Platform.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
*https://github.com/joomla/joomla-platform-examples&lt;br /&gt;
*https://github.com/joomla/joomla-platform&lt;br /&gt;
&lt;br /&gt;
====Project: Platform Application to Create PHAR Packages====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a platform application that creates PHAR packages for each package in the Joomla Platform. The goal here is to make the platform accessible to developers in a modular fashion so that they can access only the packages they need for a given application.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://php.net/manual/en/intro.phar.php&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A working and documented application for creating PHAR packages.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
====Project: Platform Example or Building Block Applications====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The Platform Examples repository currently contains a number of very simple sample &amp;quot;Hello world!&amp;quot; applications. Create a number of example web and command line applications using the platform API that could be used as building blocks by developers building more complex applications. Examples would include authentication, cache, form, filesystem, http, and streams classes.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A set of fully implemented Joomla Platform applications that can be easily adapted by developers. Specific applications should be listed in your proposal and will be finalized in discussion with the mentor. Ideally every platform package would have an example application, so there is room for multiple projects.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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 platform application for management of the translation process, 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;References:&#039;&#039;&#039;&lt;br /&gt;
:*[http://www.facebook.com/translations/ Facebook Self-Translation]&lt;br /&gt;
:*[http://localize.drupal.org localize.drupal.org]&lt;br /&gt;
:*[http://weblate.org/ weblate]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The application 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;
:&#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: 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 its 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) [see https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content] 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;References:&#039;&#039;&#039; PHP, OOP&lt;br /&gt;
&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content&lt;br /&gt;
* http://extensions.joomla.org/&lt;br /&gt;
* http://resources.joomla.org/&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/docs/manual/en-US&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;
====Project: Joomla Extension Directory====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; In this project we would like to experiment with some radical ideas that could from the ground up how the directories such as the JED works (the [http://extensions.joomla.org JED]). Our intention is to try out the model of meritocracy and see if it is a valuable alternative to the current way the directories work. 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) [see https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content] . This is expected to be a &amp;quot;phase 1&amp;quot; project where the features will include workflow, listing submit(that checks the code of the submitted extension for some security issues), listing reviews + implementing a good scoring algorithm.  The student is not expected to design the final website but should look to [http://twitter.github.com/bootstrap/ Bootstrap] for basic inspiration. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039; PHP, OOP&lt;br /&gt;
&lt;br /&gt;
* The idea in more details https://docs.google.com/document/d/1qa57rZcp0oMpA1mCr3mpletenwcDkx8wbI2vv6GCRsY/edit&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content&lt;br /&gt;
* http://extensions.joomla.org/&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/docs/manual/en-US&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;
[[Category:Google Summer of Code 2012]]&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:GSOC_2012_Project_Ideas&amp;diff=65793</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=65793"/>
		<updated>2012-03-21T12:24:41Z</updated>

		<summary type="html">&lt;p&gt;THE AI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&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. Please keep in mind that projects need to be realistically something that is able to be functionally completed by a student working full time for about eight weeks. 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;
If you are interested in serving as a mentor, please fill out the [https://docs.google.com/spreadsheet/viewform?formkey=dERlY0dxekFUWEg4ME1YZDhVMDhJMGc6MQ#gid=0 Mentor Application Form].&lt;br /&gt;
&lt;br /&gt;
If you are interested in applying as a student please see our [https://docs.google.com/document/d/1s5chDv-hekOXwgNAjjF-YMQKRaisigasPk-ZCW5KgNQ/edit application template]. You will need to register with Google and submit through their GSOC program.&lt;br /&gt;
&lt;br /&gt;
If you are interested in participating as a student please review the materials on applying that are available at [http://code.google.com/soc/ Google].  We strongly encourage you to ask questions about process and ideas on the mailing list.&lt;br /&gt;
&lt;br /&gt;
* [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2012/userguide#depth_mentor Guide for Mentors]&lt;br /&gt;
* [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs Google Summer of Code™ 2012 Frequently Asked Questions]&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. You can also view the past lists for [http://docs.joomla.org/Summer_of_Code_2010_Project_Ideas 2010] and [http://docs.joomla.org/Summer_of_Code_2009_Project_Ideas 2009], which may be useful for reference. We ask that you keep ideas realistic for the time frame that students will have to complete their projects.&lt;br /&gt;
&lt;br /&gt;
Unless a mentor has proposed a specific project, mentors from the mentor pool will be matched with student projects. However members of the mentor pool are available to answer questions on the Joomla GSoC mailing list.&lt;br /&gt;
&lt;br /&gt;
===Joomla CMS===&lt;br /&gt;
&lt;br /&gt;
* [http://github.com/joomla/joomla-cms Source Code]&lt;br /&gt;
* [http://groups.google.com/d/forum/joomla-dev-cms Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
====Project: Language Installation====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; 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 extension manager or the language manager.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* http://joomlacode.org/gf/project/jtranslation1_6/frs/&lt;br /&gt;
* https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/updater&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The goal is to have code implementing this functionally complete and in a format ready for testings by the Joomla Bug Squad as a new feature in the CMS using the normal new feature process.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, web services&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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;
====Project: Query optimization ====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Profile the queries in the CMS and optimize them, insuring that they remain database agnostic.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/database&lt;br /&gt;
* http://en.wikipedia.org/wiki/SQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; Measurable improvement in the performance of the CMS. The project will likely also result in contributions to JDatabaseQuery and other related classes in the Joomla Platform. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; SQL, Joomla Platform (JDatabase), ANSI standards.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Batch processing management/scheduler====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Brief explanation:Manage batch job’s processing, create, schedule  and run jobs, such as backup,virus scan, billing, reports, emailing and much more  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to build an O.S. independent solution that act as a wrapper to manage jobs, allowing to manage tasks from third party extensions too, in a easy way simplifying the Joomla webmaster life&lt;br /&gt;
See: http://en.wikipedia.org/wiki/Batch_processing&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039;: PHP, Joomla CMS, Joomla Platform, Mysql, Operating Systems.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039;: Nicola Galgano&lt;br /&gt;
&lt;br /&gt;
====Project: Add Article Image support to Core Content Modules====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Joomla 2.5.x ships with several core content modules. These modules can display article lists or links. However they do not support bringing in article images. This project would be to make some minor code updates to all the core content modules to add article image support and parameters. Some basic parameters would be to show / hide the article image, specify a thumbnail size, enable or disable article links on the image, and whether or not to respect the image&#039;s proportion when resized as a thumbnail.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The student will be expected to modify and update Joomla&#039;s core content modules and make modifications to the multiple files in the MVC structure to add parameters, and add additional code to the module&#039;s HTML output. The module should interface with the Joomla core class JImage as well to create the thumbnail image. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; PHP, Joomla! Framework&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Easy&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Chad Windnagle&lt;br /&gt;
&lt;br /&gt;
====Project: Trash Manager====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; Create a component that functions similarly to com_checkin that allows you to manage trash items across all tables.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; It should be able to pull records in &#039;trashed&#039; status that have -2 as the value and allow selection of single deletion, mass deletion, deletion by table, etc. Include an integrated notification to users that they have trashed item.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Data Dictionary====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; Create a data dictionary that will expand on current core database tables to add support for more commonly used data and will be supported on newly created Joomla databases. Also create a process for updating and managing the data dictionary, and document the current data model. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read more about this idea:&#039;&#039;&#039;&lt;br /&gt;
*[https://docs.google.com/document/d/1_a08yMHnzGWDw2nsBlu5Ztxxketq9Q8jrkqf8C3iUEg/edit Shared Data Dictionary for Joomla]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A data dictionary will make it easier for different developers to standardize on where to create, read, update, and delete some commonly stored data (such as user profile information), instead of the current situation where multiple extensions may potentially duplicate the same data.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium&lt;br /&gt;
&lt;br /&gt;
====Project: Refactor Media Manager====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief Explanation:&#039;&#039;&#039; The current media manager is outdated and limited. Refactor the media manager to include a better user interface, more robust functionality, and seemless integration for extensions to use. The improvements could include providing a folder tree, file property information, upload capabilities, move/rename files and folders, use of JImage for image basic processing (resize, crop).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; Refactor the Media Manager to improve the usability, functionality, and reusability of the extension.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, MySQL, Javascript&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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 the web. 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. One emphasis on this year&#039;s list is on the incorporation of packages for accessing web services, however other ideas for libraries and packages are welcome. In some instances multiple students may work on different aspects of the project.  Two examples of this are unit testing and JStemmer.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
*[http://github.com/joomla/joomla-platform github Source Code]&lt;br /&gt;
*[http://developer.joomla.org/strategy.html Development Strategy]&lt;br /&gt;
*[http://groups.google.com/d/forum/joomla-dev-platform Developer Mailing List]&lt;br /&gt;
&lt;br /&gt;
All code contributions must follow Joomla coding standards and include full unit test coverage.&lt;br /&gt;
&lt;br /&gt;
====Project: Document Classes====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create JCard, JCalendar and other extensible classes that will read and produce standards compliant documents of specific types (e.g. vCard,iCal).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* http://en.wikipedia.org/wiki/ICalendar&lt;br /&gt;
* http://www.imc.org/pdi/&lt;br /&gt;
* http://tools.ietf.org/html/rfc5545&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;Expected Results:&#039;&#039;&#039; A fully developed, unit tested and documented set of classes (specific number and choices will be finalized in discussion with the mentor and platform maintainers) and a simple platform application illustrating use.&lt;br /&gt;
&lt;br /&gt;
====Project: Library to Compile and Compress Javascript and CSS Files====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Compiling and compressing javascript and CSS files can substantially the improve performance of a web site. Providing a package to do this will help the CMS and other web applications.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP, javascript&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;Expected Results:&#039;&#039;&#039; A platform package with testing and documentation.&lt;br /&gt;
&lt;br /&gt;
====Project: JMailer====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Build out a JMailer class to replace PHPMailer in the platform. This should build upon preliminary work that has already been implemented and is available here.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, web standards, e-mail protocols.&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;Expected Results:&#039;&#039;&#039; A platform package for JMailer that provides the same functionality as PHPMailer, with testing and documentation.&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.  JGitHub and its sub-classes can be used as an example in building this package.&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;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A package of classes which can be used to interact with various social media APIs and can be further extended in the future for new APIs and endpoints.&lt;br /&gt;
&lt;br /&gt;
====Project: JStemmer====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Currently the Joomla CMS includes only a Joomla stemmer for English while the Snowball stemmer is wrapped. We would like to move the English stemmer to the Joomla platform and make the class useful by adding Joomla stemmers for other languages.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/joomla/joomla-cms/tree/master/administrator/components/com_finder/helpers/indexer&lt;br /&gt;
* http://snowball.tartarus.org/&lt;br /&gt;
* http://en.wikipedia.org/wiki/Stemming&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, language issues, 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;Expected Results:&#039;&#039;&#039; A platform class for stemming with subclasses for a number of specific languages (number and specific languages to be determined in discussion with mentor and the search and translation teams). The final product should be fully documented and unit tested.&lt;br /&gt;
&lt;br /&gt;
====Project: JCommerce====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a commerce class based on preliminary work that has been done.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/LouisLandry/joomla-platform/tree/commerce/libraries/joomla/commerce&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, web security, 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;Expected Results:&#039;&#039;&#039; A completed commerce class (including documentation and tests) for cart management and interaction with payment processors.&lt;br /&gt;
&lt;br /&gt;
====Project: JTranscode ====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a  class for transcoding video using ffmpeg.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://ffmpeg.org/&lt;br /&gt;
*http://en.wikipedia.org/wiki/Transcoding&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, JSON, standards, media handling &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;Expected Results:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Project: Extend JImage to work with IMagick ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; JImage is an important library added in late 2011. Extend it to work with Imagick.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://www.imagemagick.org/script/index.php&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/image&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform &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;Expected Results:&#039;&#039;&#039; Complete, documented and tested code to extend the JImage class to use Imagick&lt;br /&gt;
&lt;br /&gt;
====Project: JGoogle Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Google APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://code.google.com/more/&lt;br /&gt;
*http://code.google.com/more/table/&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039;  A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JFacebook Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Facebook APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://developers.facebook.com/docs/guides/web/&lt;br /&gt;
*http://www.pluralsight-training.net/microsoft/courses/TableOfContents?courseName=fb-platform&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JAmazonS3 Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating the Amazon S3 APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://aws.amazon.com/archives/Amazon-S3/123&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JRackspace Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating Rackspace Cloud APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.rackspace.com/cloud/cloud_hosting_products/servers/api/&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
====Project: JMediaWiki Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Working from the model of JGithub, implement a class for incorporating MediaWiki APIs.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.mediawiki.org/wiki/API:Main_page&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs&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;Expected Results:&#039;&#039;&#039; A set of classes and tests for API client code for web services.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Project: JOpenStreetMap Package ====&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Implement a class for incorporating OpenStreetMap for both editing and using data.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/joomla/joomla-platform/tree/staging/libraries/joomla/github&lt;br /&gt;
*http://www.openstreetmap.org/&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/Databases_and_data_access_APIs&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/API&lt;br /&gt;
*http://wiki.openstreetmap.org/wiki/Databases_and_data_access_APIs&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, familiarity with working with APIs, databases, xml, geodata&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;Expected Results:&#039;&#039;&#039; A set of classes for interacting with Open Street Map.&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;
===Platform Applications===&lt;br /&gt;
&lt;br /&gt;
The creation of useful platform applications that can also serve as exemplars for other platform developers is a third type of project. These applications, whether web or command line based, are built on the Joomla! Platform.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
*https://github.com/joomla/joomla-platform-examples&lt;br /&gt;
*https://github.com/joomla/joomla-platform&lt;br /&gt;
&lt;br /&gt;
====Project: Platform Application to Create PHAR Packages====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; Create a platform application that creates PHAR packages for each package in the Joomla Platform. The goal here is to make the platform accessible to developers in a modular fashion so that they can access only the packages they need for a given application.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039;&lt;br /&gt;
*http://php.net/manual/en/intro.phar.php&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A working and documented application for creating PHAR packages.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&lt;br /&gt;
&lt;br /&gt;
====Project: Platform Example or Building Block Applications====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; The Platform Examples repository currently contains a number of very simple sample &amp;quot;Hello world!&amp;quot; applications. Create a number of example web and command line applications using the platform API that could be used as building blocks by developers building more complex applications. Examples would include authentication, cache, form, filesystem, http, and streams classes.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; A set of fully implemented Joomla Platform applications that can be easily adapted by developers. Specific applications should be listed in your proposal and will be finalized in discussion with the mentor. Ideally every platform package would have an example application, so there is room for multiple projects.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Knowledge Prerequisite:&#039;&#039;&#039; Joomla Platform, PHP  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Difficulty:&#039;&#039;&#039; Medium to Hard&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 platform application for management of the translation process, 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;References:&#039;&#039;&#039;&lt;br /&gt;
:*[http://www.facebook.com/translations/ Facebook Self-Translation]&lt;br /&gt;
:*[http://localize.drupal.org localize.drupal.org]&lt;br /&gt;
:*[http://weblate.org/ weblate]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Expected Results:&#039;&#039;&#039; The application 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;
:&#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: 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 its 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) [see https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content] 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;References:&#039;&#039;&#039; PHP, OOP&lt;br /&gt;
&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content&lt;br /&gt;
* http://extensions.joomla.org/&lt;br /&gt;
* http://resources.joomla.org/&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/docs/manual/en-US&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;
====Project: Joomla Extension Directory====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Brief explanation:&#039;&#039;&#039; In this project we would like to experiment with some radical ideas and change from the ground up how the JED works (the [http://extensions.joomla.org JED]). Our intention is to experiment with the model of meritocracy and see if it is a valuable alternative to the current way the JED works. 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) [see https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content] . This is expected to be a &amp;quot;phase 1&amp;quot; project where the features will include workflow, listing submit(that checks the code of the submitted extension for some security issues), listing reviews + implementing a good scoring algorithm.  The student is not expected to design the final website but should look to [http://twitter.github.com/bootstrap/ Bootstrap] for basic inspiration. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;References:&#039;&#039;&#039; PHP, OOP&lt;br /&gt;
&lt;br /&gt;
* The idea in more details https://docs.google.com/document/d/1qa57rZcp0oMpA1mCr3mpletenwcDkx8wbI2vv6GCRsY/edit&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/libraries/joomla/content&lt;br /&gt;
* http://extensions.joomla.org/&lt;br /&gt;
* https://github.com/eBaySF/joomla-platform/tree/content/docs/manual/en-US&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;
[[Category:Google Summer of Code 2012]]&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Creating_clickable_background_images_using_CSS&amp;diff=13811</id>
		<title>Talk:Creating clickable background images using CSS</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Creating_clickable_background_images_using_CSS&amp;diff=13811"/>
		<updated>2009-04-02T10:49:01Z</updated>

		<summary type="html">&lt;p&gt;THE AI: New page: The second example seems not to work.  http://haacked.com/archive/2006/01/13/ClickableBackgroundImagesViaCSS.aspx  we have to remove the visibility:hidden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The second example seems not to work.&lt;br /&gt;
&lt;br /&gt;
http://haacked.com/archive/2006/01/13/ClickableBackgroundImagesViaCSS.aspx&lt;br /&gt;
&lt;br /&gt;
we have to remove the visibility:hidden&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_Extension_Directory_FAQs&amp;diff=13458</id>
		<title>Joomla! Extension Directory FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_Extension_Directory_FAQs&amp;diff=13458"/>
		<updated>2009-03-10T06:59:00Z</updated>

		<summary type="html">&lt;p&gt;THE AI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
&lt;br /&gt;
===How do I list my extension in the extensions site?===&lt;br /&gt;
Information on how to list extensions in the extensions site is available here:&lt;br /&gt;
http://extensions.joomla.org/content/view/15/63/&lt;br /&gt;
&lt;br /&gt;
===What extension is used to manage extensions.joomla.org?===&lt;br /&gt;
It is a customized version of Mosets Tree (a commercial component you can find in the Joomla! Extensions Directory ).&lt;br /&gt;
&lt;br /&gt;
===Why was my extension rejected from being listed?===&lt;br /&gt;
Some of the common reasons extensions are rejected are because of:&lt;br /&gt;
*logo violations&lt;br /&gt;
*extension cannot be downloaded or found on the site&lt;br /&gt;
*extension does not install&lt;br /&gt;
&lt;br /&gt;
===How can I help the extension submission process?===&lt;br /&gt;
There are several ways you can help the extension submission process go faster and smoother.&lt;br /&gt;
As you may know, the Joomla! Extension Directory is supported by volunteers and it takes time to go through all the extensions.&lt;br /&gt;
To make things easier:&lt;br /&gt;
*Make sure your download link leads directly to the download page. It makes downloading and testing the extension a whole lot easier.&lt;br /&gt;
*Make sure a front-end/public/guest user can actually download the extension.&lt;br /&gt;
*Test your extension to make sure the package can be installed.&lt;br /&gt;
*If you have use the Joomla! logo anywhere, make sure it follows the logo guidelines.&lt;br /&gt;
*If you need to make changes to your extension listing and it has not been published, do not submit another application. Removing duplicates takes up precious time. Instead, either email your changes to [mailto:team@extensions.joomla.org]team@extensions.joomla.org with detailed information about your extension or wait until your extension is published.&lt;br /&gt;
&lt;br /&gt;
===Why was my review of XYZ extension removed and/or edited?===&lt;br /&gt;
*Spam and/or self-promotion.&lt;br /&gt;
*Feature requests. Send feature requests to the developer.&lt;br /&gt;
*Support requests. Send support requests to the developer.&lt;br /&gt;
*You state that you haven&#039;t used the extension.&lt;br /&gt;
*Putting some type of code. The review section doesn&#039;t like code languages.&lt;br /&gt;
&lt;br /&gt;
===How do I contact the Joomla! Extension Directory editors?===&lt;br /&gt;
The editors can be contacted through the Extension Directory forum or by mail team@extensions.joomla.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:FAQ]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Accessing_the_database_using_JDatabase&amp;diff=13198</id>
		<title>Accessing the database using JDatabase</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Accessing_the_database_using_JDatabase&amp;diff=13198"/>
		<updated>2009-02-13T10:11:05Z</updated>

		<summary type="html">&lt;p&gt;THE AI: /* loadObject() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla provides a sopisticated database abstraction layer to simplify the usage for 3PD. This guide should help you using this layer.&lt;br /&gt;
&lt;br /&gt;
==Why should I use the Joomla database class?==&lt;br /&gt;
Joomla is build to be able to use several different kinds of SQL-database-systems and to run in a variety of environments with different table-prefixes. In addition to these functions, the class automatically creates the database connection. Besides instantiating the object, you only need 2 lines of code to get a result from the database and that in a variety of formats. Using the Joomla database layer ensures a maximum of compatibility and flexibility for your extension.&lt;br /&gt;
&lt;br /&gt;
==Preparing the query==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Get a database object&lt;br /&gt;
$db =&amp;amp; JFactory::getDBO();&lt;br /&gt;
&lt;br /&gt;
$query = &amp;quot;SELECT * FROM #__example_table WHERE id = 999999;&amp;quot;;&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First we instantiate the database object, then we prepare the query. You can use the normal SQL-syntax, the only thing you have to change is the table-prefix. To make this as flexible as possible, Joomla uses a placeholder for the prefix, the &amp;amp;ldquo;#__&amp;amp;rdquo;. In the next step, the $db-&amp;gt;setQuery(), this string is replaced with the correct prefix.&lt;br /&gt;
&lt;br /&gt;
Now, if we don&#039;t want to get information from the database, but insert a row into it, we need one more function. Every string-value in the SQL-syntax should be quoted. For example, MySQL uses backticks &amp;amp;#096;&amp;amp;#096; for names and single quotes &amp;amp;lsquo;&amp;amp;lsquo; for values. Joomla has some functions to do this for us and to ensure code compatibility between different databases. We can pass the names to the function $db-&amp;gt;nameQuote($name) and the values to the function $db-&amp;gt;Quote($value). &lt;br /&gt;
&lt;br /&gt;
A fully quoted query example is:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query = &amp;quot;&lt;br /&gt;
  SELECT * &lt;br /&gt;
    FROM &amp;quot;.$db-&amp;gt;nameQuote(&#039;#__example_table&#039;).&amp;quot;  &lt;br /&gt;
    WHERE &amp;quot;.$db-&amp;gt;nameQuote(&#039;id&#039;).&amp;quot; = &amp;quot;.$db-&amp;gt;quote(&#039;999999&#039;).&amp;quot;;&lt;br /&gt;
  &amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whatever we want to do, we have to set the query with the $db-&amp;gt;setQuery() function. Although you could write the query directly as a parameter for $db-&amp;gt;setQuery(), it&#039;s commonly done by first saving it in a variable, normally $query, and then handing this variable over. This helps writing clean, readable code.&lt;br /&gt;
&lt;br /&gt;
==== setQuery($query) ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;setQuery($query)&#039;&#039; method sets up a database query for later execution either by the query() method or one of the Load result methods.  &amp;lt;pre&amp;gt;$db =&amp;amp; JFactory::getDBO();&lt;br /&gt;
$query = &amp;quot;/* some valid sql string */&amp;quot;;&lt;br /&gt;
$db-&amp;gt;setQuery($query);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
The parameter $query must be a valid sql string, it can either be added as a string parameter or as a variable; generally a variable is preferred as it leads to more legible code and can help in debugging.&lt;br /&gt;
&lt;br /&gt;
setQuery() also takes three other parameters: $offset, $limit - both used in list pagination; and $prefix - an alternative table prefix. All three of these variables have default values set and can usually be ignored. &lt;br /&gt;
&lt;br /&gt;
==Executing the Query==&lt;br /&gt;
To execute the query, Joomla provides several functions, which differ in their return value.&lt;br /&gt;
&lt;br /&gt;
=== Basic Query Execution ===&lt;br /&gt;
&lt;br /&gt;
==== query() ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;query()&#039;&#039; method is the the basic tool for executing sql queries on a database. In Joomla it is most often used for updating or administering the database simple because the various load methods detail on this page have the query step built in to them.&lt;br /&gt;
&lt;br /&gt;
The syntax is very straightforward:&amp;lt;pre&amp;gt;$db =&amp;amp; JFactory::getDBO();&lt;br /&gt;
$query = &amp;quot;/* some valid sql string */&amp;quot;;&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$result = $db-&amp;gt;query();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: $query() returns an appropriate database resource if successful, or FALSE if not&lt;br /&gt;
&lt;br /&gt;
=== Query Execution Information ===&lt;br /&gt;
* getAffectedRows()&lt;br /&gt;
* explain()&lt;br /&gt;
* insertid()&lt;br /&gt;
&lt;br /&gt;
=== Insert Query Execution ===&lt;br /&gt;
* insertObject()&lt;br /&gt;
&lt;br /&gt;
==Query Results ==&lt;br /&gt;
The database class contains many methods for working with a query&#039;s result set.&lt;br /&gt;
&lt;br /&gt;
=== Single Value Result ===&lt;br /&gt;
&lt;br /&gt;
==== loadResult() ====&lt;br /&gt;
&lt;br /&gt;
Use &#039;&#039;&#039;loadResult()&#039;&#039;&#039; when you expect just a single value back from your database query. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! id !! name !! email !! username&lt;br /&gt;
|- &lt;br /&gt;
| 1 || style=&amp;quot;background:yellow&amp;quot; | John Smith || johnsmith@example.com || johnsmith&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Magda Hellman || magda_h@example.com || magdah&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Yvonne de Gaulle || ydg@example.com || ydegaulle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is often the result of a &#039;count&#039; query to get a number of records:&lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
$db =&amp;amp; JFactory::getDBO();&lt;br /&gt;
$query = &amp;quot;&lt;br /&gt;
  SELECT COUNT(*)&lt;br /&gt;
    FROM &amp;quot;.$db-&amp;gt;nameQuote(&#039;#__my_table&#039;).&amp;quot;&lt;br /&gt;
    WHERE &amp;quot;.$db-&amp;gt;nameQuote(&#039;name&#039;).&amp;quot; = &amp;quot;.$db-&amp;gt;quote($value).&amp;quot;;&lt;br /&gt;
  &amp;quot;;&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$count = $db-&amp;gt;loadResult();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or where you are just looking for a single field from a single row of the table (or possibly a single field from the first row returned).&lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
$db =&amp;amp; JFactory::getDBO();&lt;br /&gt;
$query = &amp;quot;&lt;br /&gt;
  SELECT &amp;quot;.$db-&amp;gt;nameQuote(&#039;field_name&#039;).&amp;quot;&lt;br /&gt;
    FROM &amp;quot;.$db-&amp;gt;nameQuote(&#039;#__my_table&#039;).&amp;quot;&lt;br /&gt;
    WHERE &amp;quot;.$db-&amp;gt;nameQuote(&#039;some_name&#039;).&amp;quot; = &amp;quot;.$db-&amp;gt;quote($some_value).&amp;quot;;&lt;br /&gt;
  &amp;quot;;&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$result = $db-&amp;gt;loadResult();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Single Row Results ===&lt;br /&gt;
&lt;br /&gt;
Each of these results functions will return a single record from the database even though there may be several records that meet the criteria that you have set. To get more records you need to call the function again.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! id !! name !! email !! username&lt;br /&gt;
|- style=&amp;quot;background:yellow&amp;quot;&lt;br /&gt;
| 1 || John Smith || johnsmith@example.com || johnsmith&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Magda Hellman || magda_h@example.com || magdah&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Yvonne de Gaulle || ydg@example.com || ydegaulle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== loadRow() ====&lt;br /&gt;
&lt;br /&gt;
loadRow() returns an indexed array from a single record in the table: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$row = $db-&amp;gt;loadRow();&lt;br /&gt;
print_r($row);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give:&lt;br /&gt;
&amp;lt;pre&amp;gt;Array ( [0] =&amp;gt; 1 [1] =&amp;gt; John Smith [2] =&amp;gt; johnsmith@example.com [3] =&amp;gt; johnsmith ) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual values by using:&amp;lt;pre&amp;gt;$row[&#039;index&#039;] // e.g. $row[&#039;2&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
# The array indices are numeric starting from zero.&lt;br /&gt;
# Whilst you can repeat the call to get further rows, one of the functions that returns multiple rows might be more useful&lt;br /&gt;
&lt;br /&gt;
==== loadAssoc() ====&lt;br /&gt;
&lt;br /&gt;
loadAssoc() returns an associated array from a single record in the table: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$row = $db-&amp;gt;loadRow();&lt;br /&gt;
print_r($row);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give:&lt;br /&gt;
&amp;lt;pre&amp;gt;Array ( [id] =&amp;gt; 1 [name] =&amp;gt; John Smith [email] =&amp;gt; johnsmith@example.com [username] =&amp;gt; johnsmith )&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual values by using:&amp;lt;pre&amp;gt;$row[&#039;name&#039;] // e.g. $row[&#039;name&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
# Whilst you can repeat the call to get further rows, one of the functions that returns multiple rows might be more useful&lt;br /&gt;
&lt;br /&gt;
==== loadObject() ====&lt;br /&gt;
&lt;br /&gt;
loadRow returns a PHP object from a single record in the table: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$result = $db-&amp;gt;loadObject();&lt;br /&gt;
print_r($result);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give:&lt;br /&gt;
&amp;lt;pre&amp;gt;stdClass Object ( [id] =&amp;gt; 1 [name] =&amp;gt; John Smith [email] =&amp;gt; johnsmith@example.com [username] =&amp;gt; johnsmith )&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual values by using:&amp;lt;pre&amp;gt;$row-&amp;gt;index // e.g. $row-&amp;gt;email&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
# Whilst you can repeat the call to get further rows, one of the functions that returns multiple rows might be more useful&lt;br /&gt;
&lt;br /&gt;
===Single Column Results ===&lt;br /&gt;
&lt;br /&gt;
Each of these results functions will return a single column from the database. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! id !! name !! email !! username&lt;br /&gt;
|- &lt;br /&gt;
| 1 || style=&amp;quot;background:yellow&amp;quot; | John Smith || johnsmith@example.com || johnsmith&lt;br /&gt;
|-&lt;br /&gt;
| 2 || style=&amp;quot;background:yellow&amp;quot; | Magda Hellman || magda_h@example.com || magdah&lt;br /&gt;
|-&lt;br /&gt;
| 3 || style=&amp;quot;background:yellow&amp;quot; | Yvonne de Gaulle || ydg@example.com || ydegaulle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== loadResultArray() ====&lt;br /&gt;
&lt;br /&gt;
loadResultArray() returns an indexed array from a single column in the table: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$column= $db-&amp;gt;loadResultArray();&lt;br /&gt;
print_r($column);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give:&lt;br /&gt;
&amp;lt;pre&amp;gt;Array ( [0] =&amp;gt; John Smith [1] =&amp;gt; Magda Hellman [2] =&amp;gt; Yvonne de Gaulle )&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual values by using:&amp;lt;pre&amp;gt;$column[&#039;index&#039;] // e.g. $column[&#039;2&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
# The array indices are numeric starting from zero.&lt;br /&gt;
# Whilst you can repeat the call to get further columns, a different query with one of the functions that returns multiple columns might be more useful&lt;br /&gt;
&lt;br /&gt;
=== Multi-Row Results ===&lt;br /&gt;
&lt;br /&gt;
Each of these results functions will return multiple records from the database. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! id !! name !! email !! username&lt;br /&gt;
|- style=&amp;quot;background:yellow&amp;quot;&lt;br /&gt;
| 1 || John Smith || johnsmith@example.com || johnsmith&lt;br /&gt;
|- style=&amp;quot;background:yellow&amp;quot;&lt;br /&gt;
| 2 || Magda Hellman || magda_h@example.com || magdah&lt;br /&gt;
|- style=&amp;quot;background:yellow&amp;quot;&lt;br /&gt;
| 3 || Yvonne de Gaulle || ydg@example.com || ydegaulle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== loadRowList() ====&lt;br /&gt;
&lt;br /&gt;
loadRowList() returns an indexed array of indexed arrays from the table records returned by the query: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$row = $db-&amp;gt;loadRowList();&lt;br /&gt;
print_r($row);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give (with line breaks added for clarity):&lt;br /&gt;
&amp;lt;pre&amp;gt;Array ( &lt;br /&gt;
[0] =&amp;gt; Array ( [0] =&amp;gt; 1 [1] =&amp;gt; John Smith [2] =&amp;gt; johnsmith@example.com [3] =&amp;gt; johnsmith ) &lt;br /&gt;
[1] =&amp;gt; Array ( [0] =&amp;gt; 2 [1] =&amp;gt; Magda Hellman [2] =&amp;gt; magda_h@example.com [3] =&amp;gt; magdah ) &lt;br /&gt;
[2] =&amp;gt; Array ( [0] =&amp;gt; 3 [1] =&amp;gt; Yvonne de Gaulle [2] =&amp;gt; ydg@example.com [3] =&amp;gt; ydegaulle ) &lt;br /&gt;
)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual rows by using:&amp;lt;pre&amp;gt;$row[&#039;index&#039;] // e.g. $row[&#039;2&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
and you can access the individual values by using:&amp;lt;pre&amp;gt;$row[&#039;index&#039;][&#039;index&#039;] // e.g. $row[&#039;2&#039;][&#039;3&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
# The array indices are numeric starting from zero.&lt;br /&gt;
&lt;br /&gt;
==== loadAssocList() ====&lt;br /&gt;
&lt;br /&gt;
loadAssocList() returns an indexed array of associated arrays from the table records returned by the query: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$row = $db-&amp;gt;loadAssocList();&lt;br /&gt;
print_r($row);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give (with line breaks added for clarity):&lt;br /&gt;
&amp;lt;pre&amp;gt;Array ( &lt;br /&gt;
[0] =&amp;gt; Array ( [id] =&amp;gt; 1 [name] =&amp;gt; John Smith [email] =&amp;gt; johnsmith@example.com [username] =&amp;gt; johnsmith ) &lt;br /&gt;
[1] =&amp;gt; Array ( [id] =&amp;gt; 2 [name] =&amp;gt; Magda Hellman [email] =&amp;gt; magda_h@example.com [username] =&amp;gt; magdah ) &lt;br /&gt;
[2] =&amp;gt; Array ( [id] =&amp;gt; 3 [name] =&amp;gt; Yvonne de Gaulle [email] =&amp;gt; ydg@example.com [username] =&amp;gt; ydegaulle ) &lt;br /&gt;
) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual rows by using:&amp;lt;pre&amp;gt;$row[&#039;index&#039;] // e.g. $row[&#039;2&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
and you can access the individual values by using:&amp;lt;pre&amp;gt;$row[&#039;index&#039;][&#039;column_name&#039;] // e.g. $row[&#039;2&#039;][&#039;email&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== loadAssocList($key) ====&lt;br /&gt;
&lt;br /&gt;
loadAssocList(&#039;key&#039;) returns an associated array - indexed on &#039;key&#039; - of associated arrays from the table records returned by the query: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$row = $db-&amp;gt;loadAssocList(&#039;username&#039;);&lt;br /&gt;
print_r($row);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give (with line breaks added for clarity):&lt;br /&gt;
&amp;lt;pre&amp;gt;Array ( &lt;br /&gt;
[johnsmith] =&amp;gt; Array ( [id] =&amp;gt; 1 [name] =&amp;gt; John Smith [email] =&amp;gt; johnsmith@example.com [username] =&amp;gt; johnsmith ) &lt;br /&gt;
[magdah] =&amp;gt; Array ( [id] =&amp;gt; 2 [name] =&amp;gt; Magda Hellman [email] =&amp;gt; magda_h@example.com [username] =&amp;gt; magdah ) &lt;br /&gt;
[ydegaulle] =&amp;gt; Array ( [id] =&amp;gt; 3 [name] =&amp;gt; Yvonne de Gaulle [email] =&amp;gt; ydg@example.com [username] =&amp;gt; ydegaulle ) &lt;br /&gt;
)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual rows by using:&amp;lt;pre&amp;gt;$row[&#039;key_value&#039;] // e.g. $row[&#039;johnsmith&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
and you can access the individual values by using:&amp;lt;pre&amp;gt;$row[&#039;key_value&#039;][&#039;column_name&#039;] // e.g. $row[&#039;johnsmith&#039;][&#039;email&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Key must be a valid column name from the table; it does not have to be an Index or a Primary Key. But if it does not have a unique value you may not be able to retrieve results reliably.&lt;br /&gt;
&lt;br /&gt;
==== loadObjectList() ====&lt;br /&gt;
&lt;br /&gt;
loadObjectList() returns an indexed array of PHP objects from the table records returned by the query: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$result = $db-&amp;gt;loadObjectList();&lt;br /&gt;
print_r($result);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give (with line breaks added for clarity):&lt;br /&gt;
&amp;lt;pre&amp;gt;Array ( &lt;br /&gt;
[0] =&amp;gt; stdClass Object ( [id] =&amp;gt; 1 [name] =&amp;gt; John Smith &lt;br /&gt;
    [email] =&amp;gt; johnsmith@example.com [username] =&amp;gt; johnsmith ) &lt;br /&gt;
[1] =&amp;gt; stdClass Object ( [id] =&amp;gt; 2 [name] =&amp;gt; Magda Hellman &lt;br /&gt;
    [email] =&amp;gt; magda_h@example.com [username] =&amp;gt; magdah ) &lt;br /&gt;
[2] =&amp;gt; stdClass Object ( [id] =&amp;gt; 3 [name] =&amp;gt; Yvonne de Gaulle &lt;br /&gt;
    [email] =&amp;gt; ydg@example.com [username] =&amp;gt; ydegaulle ) &lt;br /&gt;
)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual rows by using:&amp;lt;pre&amp;gt;$row[&#039;index&#039;] // e.g. $row[&#039;2&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
and you can access the individual values by using:&amp;lt;pre&amp;gt;$row[&#039;index&#039;]-&amp;gt;name // e.g. $row[&#039;2&#039;]-&amp;gt;email&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== loadObjectList(&#039;key&#039;) ====&lt;br /&gt;
&lt;br /&gt;
loadObjectList($key) returns an associated array - indexed on &#039;key&#039; - of objects from the table records returned by the query: &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$row = $db-&amp;gt;loadObjectList(&#039;username&#039;);&lt;br /&gt;
print_r($row);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will give (with line breaks added for clarity):&lt;br /&gt;
&amp;lt;pre&amp;gt;Array ( &lt;br /&gt;
[johnsmith] =&amp;gt; stdClass Object ( [id] =&amp;gt; 1 [name] =&amp;gt; John Smith &lt;br /&gt;
    [email] =&amp;gt; johnsmith@example.com [username] =&amp;gt; johnsmith ) &lt;br /&gt;
[magdah] =&amp;gt; stdClass Object ( [id] =&amp;gt; 2 [name] =&amp;gt; Magda Hellman &lt;br /&gt;
    [email] =&amp;gt; magda_h@example.com [username] =&amp;gt; magdah ) &lt;br /&gt;
[ydegaulle] =&amp;gt; stdClass Object ( [id] =&amp;gt; 3 [name] =&amp;gt; Yvonne de Gaulle &lt;br /&gt;
    [email] =&amp;gt; ydg@example.com [username] =&amp;gt; ydegaulle ) &lt;br /&gt;
)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access the individual rows by using:&amp;lt;pre&amp;gt;$row[&#039;key_value&#039;] // e.g. $row[&#039;johnsmith&#039;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
and you can access the individual values by using:&amp;lt;pre&amp;gt;$row[&#039;key_value&#039;]-&amp;gt;column_name // e.g. $row[&#039;johnsmith&#039;]-&amp;gt;email&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Key must be a valid column name from the table; it does not have to be an Index or a Primary Key. But if it does not have a unique value you may not be able to retrieve results reliably.&lt;br /&gt;
&lt;br /&gt;
=== Misc Result Set Methods ===&lt;br /&gt;
&lt;br /&gt;
==== getNumRows() ====&lt;br /&gt;
&lt;br /&gt;
getNumRows() will return the number of result rows found by the last query and waiting to be read. To get a result from getNumRows() you have to run it &#039;&#039;&#039;after&#039;&#039;&#039; the query and &#039;&#039;&#039;before&#039;&#039;&#039; you have retrieved any results.  &lt;br /&gt;
&amp;lt;source lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
$db-&amp;gt;setQuery($query);&lt;br /&gt;
$db-&amp;gt;query();&lt;br /&gt;
$num_rows = $db-&amp;gt;getNumRows();&lt;br /&gt;
print_r($rows);&lt;br /&gt;
$result = $db-&amp;gt;loadResultList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will return &amp;lt;pre&amp;gt;3&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: if you run getNumRows() after loadResultList() - or any other retrieval method - you may get a PHP Warning:&lt;br /&gt;
&amp;lt;pre&amp;gt;Warning: mysql_num_rows(): 80 is not a valid MySQL result resource &lt;br /&gt;
in D:\xampp\htdocs\joomla1.5a\libraries\joomla\database\database\mysql.php on line 344&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tips, Tricks &amp;amp; FAQ==&lt;br /&gt;
We had a few people lately using sub-queries like these:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM #__example WHERE id IN (SELECT * FROM #__example2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
These kind of queries are only possible in MySQL 4.1 and above. Another way to achieve this, is splitting the query into two:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query = &amp;quot;SELECT * FROM #__example2&amp;quot;;&lt;br /&gt;
$database-&amp;gt;setQuery($query);&lt;br /&gt;
$query = &amp;quot;SELECT * FROM #__example WHERE id IN (&amp;quot;. implode(&amp;quot;,&amp;quot;, $database-&amp;gt;loadArray()) .&amp;quot;)&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Latest_News_module_with_date&amp;diff=10984</id>
		<title>J1.5:Latest News module with date</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Latest_News_module_with_date&amp;diff=10984"/>
		<updated>2008-10-05T09:31:59Z</updated>

		<summary type="html">&lt;p&gt;THE AI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You need two files: /modules/mod_latesnews/helper.php and /modules/mod_latesnews/tmpl/default.php&lt;br /&gt;
&lt;br /&gt;
In the helper.php, add the&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$lists[$i]-&amp;gt;creationdate = JHTML::_(&#039;date&#039;, $row-&amp;gt;created, JText::_(&#039;DATE_FORMAT_LC4&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
line to the bottom, so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ( $rows as $row )&lt;br /&gt;
{&lt;br /&gt;
  $lists[$i]-&amp;gt;link = JRoute::_(ContentHelperRoute::getArticleRoute($row-&amp;gt;slug, $row-&amp;gt;catslug, $row-&amp;gt;sectionid));&lt;br /&gt;
  $lists[$i]-&amp;gt;text = htmlspecialchars( $row-&amp;gt;title );&lt;br /&gt;
  $lists[$i]-&amp;gt;creationdate = JHTML::_(&#039;date&#039;, $row-&amp;gt;created, JText::_(&#039;DATE_FORMAT_LC4&#039;);&lt;br /&gt;
  $i++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now when the dates are collected with the mysql query, you need to add them to the default.php. Change this code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $item-&amp;gt;link; ?&amp;gt;&amp;quot; class=&amp;quot;latestnews&amp;lt;?php echo $params-&amp;gt;get(&#039;moduleclass_sfx&#039;); ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;?php echo $item-&amp;gt;text .&#039;&amp;lt;br /&amp;gt;&#039;.$item-&amp;gt;creationdate; ?&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $item-&amp;gt;link; ?&amp;gt;&amp;quot; class=&amp;quot;latestnews&amp;lt;?php echo $params-&amp;gt;get(&#039;moduleclass_sfx&#039;); ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;?php echo $item-&amp;gt;text; ?&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tips and tricks 1.5]]&lt;br /&gt;
[[Category:Tips and tricks]]&lt;/div&gt;</summary>
		<author><name>THE AI</name></author>
	</entry>
</feed>