<?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=Littlejohn</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=Littlejohn"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Littlejohn"/>
	<updated>2026-05-16T06:31:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2011&amp;diff=63584</id>
		<title>Pizza Bugs and Fun 2011</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2011&amp;diff=63584"/>
		<updated>2011-12-10T12:48:13Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We are announcing a Joomla! Pizza, Bugs and Fun 2011 event scheduled for Saturday, December 10, 2011. The event is global for virtual participants with local venues where ever they are organized. The official start time is 9am in each time zone. Help us prepare Joomla! 2.5 for release early in January 2012!&lt;br /&gt;
&lt;br /&gt;
See the section [http://docs.joomla.org/Pizza_Bugs_and_Fun_2011#General_Instructions General Instructions] below for instructions.&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;twitter&#039;&#039;&#039; hash tag is #jpbf11 and there is a Facebook page at http://www.facebook.com/events/208015399276419/&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Google+&#039;&#039;&#039; posts you can also use #JPBF11 in your posts. https://plus.google.com/u/0/s/%23JPBF11&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bugs&#039;&#039;&#039; : We will be working through the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] where there are bug reports needing patches and/or testing.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Features&#039;&#039;&#039; : There are features that need some coding and/or testing before they will be ready for 2.5. Finder and the multi-database are two such features. The [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8549 CMS Feature Tracker] has feature requests that need testing and coding that needs to be done.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Documentation&#039;&#039;&#039; : We still have documentation that needs to be done. If you want to help out writing documentation, you&#039;re also more than welcome.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only and you are all invited. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF. For languages other than English, some of the organizations listed below have set up chats in their language.&lt;br /&gt;
&lt;br /&gt;
=== General Instructions ===&lt;br /&gt;
==== If you want to code bug fixes ====&lt;br /&gt;
* Look for issues with a status of Confirmed&lt;br /&gt;
* Before you start coding, find the issue in the [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdGtOU0lqSThaLXB4NDJCUTBMNkxzcXc#gid=0 CMS Issues Google doc] or [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdEdoVUUwV1hpa1ZaN0pYVG1wWkRoSGc&amp;amp;authkey=CPKJ6cUD  CMS Features Google doc] and put your name on the issue so people know someone is working on it. You can sign things out to a group if a group is working on any issue. Remember that everyone is seeing the same document, so please don&#039;t hide rows.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] and [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8549 CMS Feature Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* When you have a patch, add it to the tracker and change the status to Pending if you are able to.&lt;br /&gt;
* Go back into the Google doc and change the status there to Pending as well and remove your name and add a comment with your name that you added a patch. If the tracker still needs to be changed to pending, you can mention it there.&lt;br /&gt;
* In addition to the two trackers, special coding projects can be found here: [https://docs.google.com/document/d/1D2Ui-93a9Rvm16a_pNeWwJrKydX9CoEZfWx0CGLtBH4/edit?hl=en_US special items]. These include both challenging projects and easy ones.&lt;br /&gt;
Helpful documentation:&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
* [[Tortoise SVN]]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
* [[Development Best Practices]]&lt;br /&gt;
&lt;br /&gt;
==== If you want to test and you have or can set up SVN and XAMPP/MAMP ====&lt;br /&gt;
* Look for issues with a status of Pending. We want at least 2 testers and more on complex issues, so you can test what others have tested already.&lt;br /&gt;
* Before you start testing, find the issue in the [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdGtOU0lqSThaLXB4NDJCUTBMNkxzcXc#gid=0 CMS Issues Google doc] or [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdEdoVUUwV1hpa1ZaN0pYVG1wWkRoSGc&amp;amp;authkey=CPKJ6cUD  CMS Features Google doc] and put your name on the issue so people know someone is testing it. You can sign things out to a group if a group is working on any issue. Remember that everyone is seeing the same document, so please don&#039;t hide rows.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] and [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8549 CMS Feature Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* Most of the issues should have test instructions with them.&lt;br /&gt;
* Once you have tested, add comments to the tracker on your results. Start your comment with @test so you will get counted in the stats as a tester.&lt;br /&gt;
* Go back into the Google doc and remove your name and add a comment with your name that you tested. If you weren’t able to put a comment in the tracker, add your results there.&lt;br /&gt;
* In addition to the two trackers, special testing projects can be found here: [https://docs.google.com/document/d/1D2Ui-93a9Rvm16a_pNeWwJrKydX9CoEZfWx0CGLtBH4/edit?hl=en_US special items].&lt;br /&gt;
Helpful Documentation:&lt;br /&gt;
*  [[Tortoise SVN]] Freestanding Windows based SVN. This may be all you need, if you have a Windows PC&lt;br /&gt;
* [http://www.adobe.com/devnet/dreamweaver/articles/using_subversion_pt1.html Dreamweaver CS5 with SVN] Start of tutorials on how to use SVN in Dreamweaver&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]]. A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development. This also guides you through installing XAMPP/MAMP on your computer.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
&lt;br /&gt;
==== If you want to test but don’t have SVN ====&lt;br /&gt;
* Download the pre-patched copy (testing build) of Joomla at https://github.com/elinw/joomla-cms/tree/pbf2011. This copy has a number of patches applied to it and can be used to test those trackers.  You can install it either locally (if you have XAMPP/MAMP) or online. It may be updated throughout the day.&lt;br /&gt;
* Look for issues with a status of Pending and are in the Pre-patched Joomla. The Google docs have a column that says which are in this download. Most of them are in the Feature tracker. We want at least 2 testers and more on complex issues, so you can test what others have tested already.&lt;br /&gt;
* You’ll find the issues in the [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdGtOU0lqSThaLXB4NDJCUTBMNkxzcXc#gid=0 CMS Issues Google doc] or [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdEdoVUUwV1hpa1ZaN0pYVG1wWkRoSGc&amp;amp;authkey=CPKJ6cUD  CMS Features Google doc]. Remember that everyone is seeing the same document, so please don&#039;t hide rows.&lt;br /&gt;
* Put your name on the issue so people know someone is testing it. You can sign things out to a group if a group is working on an issue.&lt;br /&gt;
* Most of the issues should have test instructions with them.&lt;br /&gt;
* Once you have tested, go back into the Google doc and remove your name and add a comment with your name that you tested and your results.&lt;br /&gt;
&lt;br /&gt;
==== Special Coding or Testing Projects ====&lt;br /&gt;
&lt;br /&gt;
* There is a sheet outlining [https://docs.google.com/document/d/1D2Ui-93a9Rvm16a_pNeWwJrKydX9CoEZfWx0CGLtBH4/edit?hl=en_US special items] at various skill levels that are not normal bugs or features.&lt;br /&gt;
&lt;br /&gt;
==== If you want to work on Documentation ====&lt;br /&gt;
* To edit this Documentation Wiki, you will need a user accunt. If you don&#039;t already have one, you may register on [[Special:UserLogin]]. While a brand new user account won&#039;t give you all the permissions you&#039;d get with a confirmed and &amp;quot;elevated&amp;quot; account, you will be able to edit most pages.&lt;br /&gt;
* If you&#039;d like something to be edited, but you&#039;re not sure what to write exactly, use talk pages to add comments to pages.&lt;br /&gt;
* During the PBF, several experienced Wiki editors will be available in the Skype chat to help you.&lt;br /&gt;
{{:Documentation wiki}}&lt;br /&gt;
&lt;br /&gt;
===== Help Screens =====&lt;br /&gt;
* There are help screens that still need to be made for 1.7 [[Help17:Help screens]]&lt;br /&gt;
&lt;br /&gt;
=== Pizza ===&lt;br /&gt;
OSM is offering pizza and soda for pre-registered groups. We aren’t setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Andrea Tarr (andrea.tarr@joomla.org) before the event to register and get details.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Andy Tarr (andrea.tarr@joomla.org). Feel free to contact her with any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
 Lancaster UK&lt;br /&gt;
 Hosted by Dean Marshall Consultancy Ltd&lt;br /&gt;
 CityLab, Dalton Square, Lancaster, Lancashire, LA1 1PP&lt;br /&gt;
 Tel: 01524 63492  or use our [http://www.deanmarshall.co.uk/contact-us.html | Online contact form]&lt;br /&gt;
 RSVP: [http://www.meetup.com/LancasterJUG/  Lancaster JUG Meetup page]&lt;br /&gt;
&lt;br /&gt;
 Ringsted, Denmark&lt;br /&gt;
 Hosted by Janich Rasmussen&lt;br /&gt;
 Egevej 8, 4100 Ringsted&lt;br /&gt;
 Tel: +45 3113 6101 or use our [http://dkjug.dk/details/23-Joomla-Pizza-Bugs-and-Fun-2011/Ringsted/2011-12-10/09-00.html | Online contact form]&lt;br /&gt;
 RSVP: [http://dkjug.dk/userlist/JUG-Ringsted.html DKJUG Ringsted]&lt;br /&gt;
&lt;br /&gt;
 France&lt;br /&gt;
 Hosted by Marc STUDER (AFUJ Member, French JUG)&lt;br /&gt;
 Online contact form http://www.afuj.fr/Nous-contacter/Marc-Studer.html&lt;br /&gt;
 Event RSVP: http://tinyurl.com/bujotbk&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Charlotte, NC&lt;br /&gt;
 [http://joomlacharlotte.org/index.php/events/pizza-bugs-fun-2011 Charlotte Joomla! User Group]&lt;br /&gt;
 Meetup Information posted shortly on event page&lt;br /&gt;
&lt;br /&gt;
 New England JUG&lt;br /&gt;
 Marlboro College Graduate Center&lt;br /&gt;
 28 Vernon Street&lt;br /&gt;
 Brattleboro, VT 05301  &lt;br /&gt;
 http://www.joomlanewengland.org&lt;br /&gt;
 Contact: Andy Tarr (andrea.tarr@joomla.org)&lt;br /&gt;
&lt;br /&gt;
 Portland, OR&lt;br /&gt;
 [http://joomlapdx.com/events/pizza-bugs-and-fun-2011.html Portland Joomla! User Group]&lt;br /&gt;
 Location to be posted on the page after Thursday meeting&lt;br /&gt;
&lt;br /&gt;
 Texas&lt;br /&gt;
 HubAustin&lt;br /&gt;
 4930 S. Congress Ave, Ste 307&lt;br /&gt;
 Austin, TX 78745&lt;br /&gt;
 http://www.meetup.com/joomlaaustin/events/41979952/&lt;br /&gt;
&lt;br /&gt;
 Washington, DC&lt;br /&gt;
 PICnet&lt;br /&gt;
 1605 Connecticut Ave, NW 3FL&lt;br /&gt;
 Washington, DC 20009&lt;br /&gt;
 Signup at http://www.picnet.net/about-us/upcoming-events/event/80&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
 Porto Alegre, Rio Grande do Sul, Brasil&lt;br /&gt;
 Av. José Bonifácio 731, CEP 90040-130&lt;br /&gt;
 Coletânea Ciber Café&lt;br /&gt;
 [http://www.joomlatche.com.br/pizza-bugs-and-fun-2011.html JUGRS - Joomla User Group Rio Grande do Sul]&lt;br /&gt;
&lt;br /&gt;
 Iquique, Chile&lt;br /&gt;
 Anibal Pinto 770, CP 1100744&lt;br /&gt;
 [http://www.joomla.cl JUG Iquique]&lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sydney, Australia 6pm-9pm&lt;br /&gt;
Hosted by Tim Plummer&lt;br /&gt;
InterfaceFLOR (usual Sydney JUG venue)&lt;br /&gt;
101 Chalmers Street, Surry Hills, NSW&lt;br /&gt;
http://www.meetup.com/Joomla-User-Group-Sydney/events/42114152/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 1-7, Signature Office,&lt;br /&gt;
 The Boulevard Mid Valley City,&lt;br /&gt;
 Lingkaran Syed Putra,&lt;br /&gt;
 59200 Kuala Lumpur, Malaysia.&lt;br /&gt;
 Event RSPV: https://www.facebook.com/events/309178112434616/&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
 Algeria&lt;br /&gt;
 Cyber Park Algérie&lt;br /&gt;
 Sidi Abdellah, Rahmania zeralda,&lt;br /&gt;
 http://community.joomla.org/user-groups/africa/algeria.html&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
 Tel Aviv, Israel&lt;br /&gt;
 Hosted by Agron BC&amp;amp;C Ltd&lt;br /&gt;
 Ramat Hayal, Ha&#039;Barzel 31&lt;br /&gt;
 [http://www.joomla.org.il Joomla! Israel]&lt;br /&gt;
 Start at 18:00. Please contact via skype oc4666 or email info-at-joomla-dot-org-dot-il&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
====Skype Chat====&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t already have Skype, you can download it for free from [http://skype.com Skype].&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]]. Please be aware that the registration process requires a valid email address. This is the same login for updating Joomla documentation.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_2011#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else&#039;s.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[Pizza Bugs and Fun 2011/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Q: Where is the SVN for Joomla?&lt;br /&gt;
&lt;br /&gt;
A: http://joomlacode.org/svn/joomla/development/trunk&lt;br /&gt;
&lt;br /&gt;
Q: Which one is 2.5?&lt;br /&gt;
&lt;br /&gt;
A: It is the main trunk&lt;br /&gt;
&lt;br /&gt;
Q: Why does it still say 1.7.3?&lt;br /&gt;
&lt;br /&gt;
A: The version number hasn&#039;t been changed yet.&lt;br /&gt;
&lt;br /&gt;
Q: Any known issues with JForge and Chrome on Windows?&lt;br /&gt;
&lt;br /&gt;
A: It have been seen that browsing the JForge tracker, Chrome may ask for a missing plugin (windows media player). No workaround for this is yet known.&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2011&amp;diff=63533</id>
		<title>Pizza Bugs and Fun 2011</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2011&amp;diff=63533"/>
		<updated>2011-12-09T08:53:36Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* Europe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We are announcing a Joomla! Pizza Bug and Fun 2011 event scheduled for Saturday, December 10, 2011. The event is global for virtual participants with local venues where ever they are organized. The official start time is 9am in each time zone. Help us prepare Joomla! 2.5 for release early in January 2012!&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event.&lt;br /&gt;
&lt;br /&gt;
The twitter hash tag is #jpbf11 and there is a Facebook page at http://www.facebook.com/events/208015399276419/&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bugs&#039;&#039;&#039; : We will be working through the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] where there are trackers needing patches and/or testing.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Features&#039;&#039;&#039; : There are features that need some coding and/or testing before they will be ready for 2.5. Finder and the multi-database are two such features. The [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8549 CMS Feature Tracker] has trackers of testing and coding that needs to be done.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Documentation&#039;&#039;&#039; : We still have documentation that needs to be done. If you want to help out writing documentation, you&#039;re also more than welcome.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
Pizza: OSM is offering pizza and soda for pre-registered groups. We aren’t setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Andrea Tarr (andrea.tarr@joomla.org) before the event to register and get details.&lt;br /&gt;
&lt;br /&gt;
Communication: We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
More information will be available here shortly. The main contact is Andy Tarr at andrea.tarr@joomla.org.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Andy Tarr (andrea.tarr@joomla.org). Feel free to contact her with any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
 Lancaster UK&lt;br /&gt;
 Hosted by Dean Marshall Consultancy Ltd&lt;br /&gt;
 CityLab, Dalton Square, Lancaster, Lancashire, LA1 1PP&lt;br /&gt;
 Tel: 01524 63492  or use our [http://www.deanmarshall.co.uk/contact-us.html | Online contact form]&lt;br /&gt;
 RSVP: [http://www.meetup.com/LancasterJUG/  Lancaster JUG Meetup page]&lt;br /&gt;
&lt;br /&gt;
 Ringsted, Denmark&lt;br /&gt;
 Hosted by Janich Rasmussen&lt;br /&gt;
 Egevej 8, 4100 Ringsted&lt;br /&gt;
 Tel: +45 3113 6101 or use our [http://dkjug.dk/details/23-Joomla-Pizza-Bugs-and-Fun-2011/Ringsted/2011-12-10/09-00.html | Online contact form]&lt;br /&gt;
 RSVP: [http://dkjug.dk/userlist/JUG-Ringsted.html DKJUG Ringsted]&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Charlotte, NC&lt;br /&gt;
 [http://joomlacharlotte.org/index.php/events/pizza-bugs-fun-2011 Charlotte Joomla! User Group]&lt;br /&gt;
 Meetup Information posted shortly on event page&lt;br /&gt;
&lt;br /&gt;
 New England JUG&lt;br /&gt;
 Marlboro College Graduate Center&lt;br /&gt;
 28 Vernon Street&lt;br /&gt;
 Brattleboro, VT 05301  &lt;br /&gt;
 http://www.joomlanewengland.org&lt;br /&gt;
 Contact: Andy Tarr (andrea.tarr@joomla.org)&lt;br /&gt;
&lt;br /&gt;
 Portland, OR&lt;br /&gt;
 [http://joomlapdx.com/events/pizza-bugs-and-fun-2011.html Portland Joomla! User Group]&lt;br /&gt;
 Location to be posted on the page after Thursday meeting&lt;br /&gt;
&lt;br /&gt;
 Texas&lt;br /&gt;
 HubAustin&lt;br /&gt;
 4930 S. Congress Ave, Ste 307&lt;br /&gt;
 Austin, TX 78745&lt;br /&gt;
 http://www.meetup.com/joomlaaustin/events/41979952/&lt;br /&gt;
&lt;br /&gt;
 Washington, DC&lt;br /&gt;
 PICnet&lt;br /&gt;
 1605 Connecticut Ave, NW 3FL&lt;br /&gt;
 Washington, DC 20009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
 Porto Alegre, Rio Grande do Sul, Brasil&lt;br /&gt;
 Av. José Bonifácio 731, CEP 90040-130&lt;br /&gt;
 Coletânea Ciber Café&lt;br /&gt;
 [http://www.joomlatche.com.br/pizza-bugs-and-fun-2011.html JUGRS - Joomla User Group Rio Grande do Sul] &lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sydney, Australia 6pm-9pm&lt;br /&gt;
Hosted by Tim Plummer&lt;br /&gt;
InterfaceFLOR (usual Sydney JUG venue)&lt;br /&gt;
101 Chalmers Street, Surry Hills, NSW&lt;br /&gt;
http://www.meetup.com/Joomla-User-Group-Sydney/events/42114152/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 1-7, Signature Office,&lt;br /&gt;
 The Boulevard Mid Valley City,&lt;br /&gt;
 Lingkaran Syed Putra,&lt;br /&gt;
 59200 Kuala Lumpur, Malaysia.&lt;br /&gt;
 Event RSPV: https://www.facebook.com/events/309178112434616/&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
 Algeria&lt;br /&gt;
 Cyber Park Algérie&lt;br /&gt;
 Sidi Abdellah, Rahmania zeralda,&lt;br /&gt;
 http://community.joomla.org/user-groups/africa/algeria.html&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
 Tel Aviv, Israel&lt;br /&gt;
 Hosted by Agron BC&amp;amp;C Ltd&lt;br /&gt;
 Ramat Hayal, Ha&#039;Barzel 31&lt;br /&gt;
 [http://www.joomla.org.il Joomla! Israel]&lt;br /&gt;
 More details to follow.&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
====Skype Chat====&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t already have Skype, you can download it for free from [http://skype.com Skype].&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]]. Please be aware that the registration process requires a valid email address. This is the same login for updating Joomla documentation.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_2011#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else&#039;s.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[Pizza Bugs and Fun 2011/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2011&amp;diff=63532</id>
		<title>Pizza Bugs and Fun 2011</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2011&amp;diff=63532"/>
		<updated>2011-12-09T08:53:15Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* Europe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We are announcing a Joomla! Pizza Bug and Fun 2011 event scheduled for Saturday, December 10, 2011. The event is global for virtual participants with local venues where ever they are organized. The official start time is 9am in each time zone. Help us prepare Joomla! 2.5 for release early in January 2012!&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event.&lt;br /&gt;
&lt;br /&gt;
The twitter hash tag is #jpbf11 and there is a Facebook page at http://www.facebook.com/events/208015399276419/&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bugs&#039;&#039;&#039; : We will be working through the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] where there are trackers needing patches and/or testing.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Features&#039;&#039;&#039; : There are features that need some coding and/or testing before they will be ready for 2.5. Finder and the multi-database are two such features. The [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8549 CMS Feature Tracker] has trackers of testing and coding that needs to be done.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Documentation&#039;&#039;&#039; : We still have documentation that needs to be done. If you want to help out writing documentation, you&#039;re also more than welcome.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
Pizza: OSM is offering pizza and soda for pre-registered groups. We aren’t setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Andrea Tarr (andrea.tarr@joomla.org) before the event to register and get details.&lt;br /&gt;
&lt;br /&gt;
Communication: We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
More information will be available here shortly. The main contact is Andy Tarr at andrea.tarr@joomla.org.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Andy Tarr (andrea.tarr@joomla.org). Feel free to contact her with any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
 Lancaster UK&lt;br /&gt;
 Hosted by Dean Marshall Consultancy Ltd&lt;br /&gt;
 CityLab, Dalton Square, Lancaster, Lancashire, LA1 1PP&lt;br /&gt;
 Tel: 01524 63492  or use our [http://www.deanmarshall.co.uk/contact-us.html | Online contact form]&lt;br /&gt;
 RSVP: [http://www.meetup.com/LancasterJUG/  Lancaster JUG Meetup page]&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Charlotte, NC&lt;br /&gt;
 [http://joomlacharlotte.org/index.php/events/pizza-bugs-fun-2011 Charlotte Joomla! User Group]&lt;br /&gt;
 Meetup Information posted shortly on event page&lt;br /&gt;
&lt;br /&gt;
 New England JUG&lt;br /&gt;
 Marlboro College Graduate Center&lt;br /&gt;
 28 Vernon Street&lt;br /&gt;
 Brattleboro, VT 05301  &lt;br /&gt;
 http://www.joomlanewengland.org&lt;br /&gt;
 Contact: Andy Tarr (andrea.tarr@joomla.org)&lt;br /&gt;
&lt;br /&gt;
 Portland, OR&lt;br /&gt;
 [http://joomlapdx.com/events/pizza-bugs-and-fun-2011.html Portland Joomla! User Group]&lt;br /&gt;
 Location to be posted on the page after Thursday meeting&lt;br /&gt;
&lt;br /&gt;
 Texas&lt;br /&gt;
 HubAustin&lt;br /&gt;
 4930 S. Congress Ave, Ste 307&lt;br /&gt;
 Austin, TX 78745&lt;br /&gt;
 http://www.meetup.com/joomlaaustin/events/41979952/&lt;br /&gt;
&lt;br /&gt;
 Washington, DC&lt;br /&gt;
 PICnet&lt;br /&gt;
 1605 Connecticut Ave, NW 3FL&lt;br /&gt;
 Washington, DC 20009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
 Porto Alegre, Rio Grande do Sul, Brasil&lt;br /&gt;
 Av. José Bonifácio 731, CEP 90040-130&lt;br /&gt;
 Coletânea Ciber Café&lt;br /&gt;
 [http://www.joomlatche.com.br/pizza-bugs-and-fun-2011.html JUGRS - Joomla User Group Rio Grande do Sul] &lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sydney, Australia 6pm-9pm&lt;br /&gt;
Hosted by Tim Plummer&lt;br /&gt;
InterfaceFLOR (usual Sydney JUG venue)&lt;br /&gt;
101 Chalmers Street, Surry Hills, NSW&lt;br /&gt;
http://www.meetup.com/Joomla-User-Group-Sydney/events/42114152/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 1-7, Signature Office,&lt;br /&gt;
 The Boulevard Mid Valley City,&lt;br /&gt;
 Lingkaran Syed Putra,&lt;br /&gt;
 59200 Kuala Lumpur, Malaysia.&lt;br /&gt;
 Event RSPV: https://www.facebook.com/events/309178112434616/&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
 Algeria&lt;br /&gt;
 Cyber Park Algérie&lt;br /&gt;
 Sidi Abdellah, Rahmania zeralda,&lt;br /&gt;
 http://community.joomla.org/user-groups/africa/algeria.html&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
 Tel Aviv, Israel&lt;br /&gt;
 Hosted by Agron BC&amp;amp;C Ltd&lt;br /&gt;
 Ramat Hayal, Ha&#039;Barzel 31&lt;br /&gt;
 [http://www.joomla.org.il Joomla! Israel]&lt;br /&gt;
 More details to follow.&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
====Skype Chat====&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t already have Skype, you can download it for free from [http://skype.com Skype].&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]]. Please be aware that the registration process requires a valid email address. This is the same login for updating Joomla documentation.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_2011#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else&#039;s.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[Pizza Bugs and Fun 2011/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2011&amp;diff=63531</id>
		<title>Pizza Bugs and Fun 2011</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Pizza_Bugs_and_Fun_2011&amp;diff=63531"/>
		<updated>2011-12-09T08:53:02Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* Europe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We are announcing a Joomla! Pizza Bug and Fun 2011 event scheduled for Saturday, December 10, 2011. The event is global for virtual participants with local venues where ever they are organized. The official start time is 9am in each time zone. Help us prepare Joomla! 2.5 for release early in January 2012!&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event.&lt;br /&gt;
&lt;br /&gt;
The twitter hash tag is #jpbf11 and there is a Facebook page at http://www.facebook.com/events/208015399276419/&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bugs&#039;&#039;&#039; : We will be working through the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] where there are trackers needing patches and/or testing.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Features&#039;&#039;&#039; : There are features that need some coding and/or testing before they will be ready for 2.5. Finder and the multi-database are two such features. The [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8549 CMS Feature Tracker] has trackers of testing and coding that needs to be done.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Documentation&#039;&#039;&#039; : We still have documentation that needs to be done. If you want to help out writing documentation, you&#039;re also more than welcome.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
Pizza: OSM is offering pizza and soda for pre-registered groups. We aren’t setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Andrea Tarr (andrea.tarr@joomla.org) before the event to register and get details.&lt;br /&gt;
&lt;br /&gt;
Communication: We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
More information will be available here shortly. The main contact is Andy Tarr at andrea.tarr@joomla.org.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Andy Tarr (andrea.tarr@joomla.org). Feel free to contact her with any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
 Lancaster UK&lt;br /&gt;
 Hosted by Dean Marshall Consultancy Ltd&lt;br /&gt;
 CityLab, Dalton Square, Lancaster, Lancashire, LA1 1PP&lt;br /&gt;
 Tel: 01524 63492  or use our [http://www.deanmarshall.co.uk/contact-us.html | Online contact form]&lt;br /&gt;
 RSVP: [http://www.meetup.com/LancasterJUG/  Lancaster JUG Meetup page]&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
 Ringsted, Denmark&lt;br /&gt;
 Hosted by Janich Rasmussen&lt;br /&gt;
 Egevej 8, 4100 Ringsted&lt;br /&gt;
 Tel: +45 3113 6101 or use our [http://dkjug.dk/details/23-Joomla-Pizza-Bugs-and-Fun-2011/Ringsted/2011-12-10/09-00.html | Online contact form]&lt;br /&gt;
 RSVP: [http://dkjug.dk/userlist/JUG-Ringsted.html DKJUG Ringsted]&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Charlotte, NC&lt;br /&gt;
 [http://joomlacharlotte.org/index.php/events/pizza-bugs-fun-2011 Charlotte Joomla! User Group]&lt;br /&gt;
 Meetup Information posted shortly on event page&lt;br /&gt;
&lt;br /&gt;
 New England JUG&lt;br /&gt;
 Marlboro College Graduate Center&lt;br /&gt;
 28 Vernon Street&lt;br /&gt;
 Brattleboro, VT 05301  &lt;br /&gt;
 http://www.joomlanewengland.org&lt;br /&gt;
 Contact: Andy Tarr (andrea.tarr@joomla.org)&lt;br /&gt;
&lt;br /&gt;
 Portland, OR&lt;br /&gt;
 [http://joomlapdx.com/events/pizza-bugs-and-fun-2011.html Portland Joomla! User Group]&lt;br /&gt;
 Location to be posted on the page after Thursday meeting&lt;br /&gt;
&lt;br /&gt;
 Texas&lt;br /&gt;
 HubAustin&lt;br /&gt;
 4930 S. Congress Ave, Ste 307&lt;br /&gt;
 Austin, TX 78745&lt;br /&gt;
 http://www.meetup.com/joomlaaustin/events/41979952/&lt;br /&gt;
&lt;br /&gt;
 Washington, DC&lt;br /&gt;
 PICnet&lt;br /&gt;
 1605 Connecticut Ave, NW 3FL&lt;br /&gt;
 Washington, DC 20009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
 Porto Alegre, Rio Grande do Sul, Brasil&lt;br /&gt;
 Av. José Bonifácio 731, CEP 90040-130&lt;br /&gt;
 Coletânea Ciber Café&lt;br /&gt;
 [http://www.joomlatche.com.br/pizza-bugs-and-fun-2011.html JUGRS - Joomla User Group Rio Grande do Sul] &lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sydney, Australia 6pm-9pm&lt;br /&gt;
Hosted by Tim Plummer&lt;br /&gt;
InterfaceFLOR (usual Sydney JUG venue)&lt;br /&gt;
101 Chalmers Street, Surry Hills, NSW&lt;br /&gt;
http://www.meetup.com/Joomla-User-Group-Sydney/events/42114152/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 1-7, Signature Office,&lt;br /&gt;
 The Boulevard Mid Valley City,&lt;br /&gt;
 Lingkaran Syed Putra,&lt;br /&gt;
 59200 Kuala Lumpur, Malaysia.&lt;br /&gt;
 Event RSPV: https://www.facebook.com/events/309178112434616/&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
 Algeria&lt;br /&gt;
 Cyber Park Algérie&lt;br /&gt;
 Sidi Abdellah, Rahmania zeralda,&lt;br /&gt;
 http://community.joomla.org/user-groups/africa/algeria.html&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
 Tel Aviv, Israel&lt;br /&gt;
 Hosted by Agron BC&amp;amp;C Ltd&lt;br /&gt;
 Ramat Hayal, Ha&#039;Barzel 31&lt;br /&gt;
 [http://www.joomla.org.il Joomla! Israel]&lt;br /&gt;
 More details to follow.&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
====Skype Chat====&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t already have Skype, you can download it for free from [http://skype.com Skype].&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]]. Please be aware that the registration process requires a valid email address. This is the same login for updating Joomla documentation.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_2011#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else&#039;s.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[Pizza Bugs and Fun 2011/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_simple_module&amp;diff=31571</id>
		<title>J1.5:Creating a simple module</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_simple_module&amp;diff=31571"/>
		<updated>2010-10-27T10:53:46Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* Joomla! 1.5 Database installation usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
== Basic Hello World Module ==&lt;br /&gt;
&lt;br /&gt;
A Joomla! 1.5 Module is in its most basic form two files: an XML configuration file and a PHP controller file. The XML configuration file contains general information about the module (as will be displayed in the Module Manager in the Joomla! administration interface), as well as module parameters which may be supplied to fine tune the appearance / functionality of the module. The PHP file provides the controlling logic for the module. A very simple &amp;quot;Hello World&amp;quot; module might looking something like this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/mod_hello_world.xml:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!!! Note:&#039;&#039;&#039; it is very important, that XML file name matches module name. Otherwise, installer will install the module, but Joomla wouldn&#039;t show parameters and additional info stored in XML.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;install type=&amp;quot;module&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Name of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;Hello World - Hello&amp;lt;/name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Name of the Author --&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Ambitionality Software LLC&amp;lt;/author&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Version Date of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;2008-06-23&amp;lt;/creationDate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Copyright information --&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;All rights reserved by Ambitionality Software LLC 2008.&amp;lt;/copyright&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- License Information --&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GPL 2.0&amp;lt;/license&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s email address --&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@ambitionality.com&amp;lt;/authorEmail&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s website --&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.ambitionality.com&amp;lt;/authorUrl&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Module version number --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Description of what the module does --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;Provides a basic &amp;quot;Hello World&amp;quot; notice&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Listing of all files that should be installed for the module to function --&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The &amp;quot;module&amp;quot; attribute signifies that this is the main controller file --&amp;gt;&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_hello_world&amp;quot;&amp;gt;mod_hello_world.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;params /&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, this XML file just lines out basic information about the module such as the owner, version, etc. for identification by the Joomla! installer and then provides optional parameters which may be set in the Module Manager and accessed from within the module&#039;s logic to fine tune its behavior. Additionally, this file tells the installer which files should be copied and installed. Notice that we DO NOT include a reference in the files section for the XML file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/mod_hello_world.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//don&#039;t allow other scripts to grab and execute our file&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
    Hello World&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What happens when this module is loaded is that Joomla! includes (via the PHP include directive) the mod_hello_world.php file and stores the output into an output buffer which is then rendered onto the page output. This file would simply produce &amp;lt;p&amp;gt;Hello World&amp;lt;/p&amp;gt; to the final page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/index.html:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This really just helps to ensure that a default page is displayed if direct access to the directory is attempted without listing all of the other files in the directory. It&#039;s not necessary, but is good practice.&lt;br /&gt;
&lt;br /&gt;
To package this module for distribution and installation, simply zip the files together, e.g.,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
% cd mod_hello_world&lt;br /&gt;
% zip mod_hello_world.zip mod_hello_world.php mod_hello_world.xml index.html&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting mod_hello_world.zip file may be uploaded and installed through the standard Joomla! 1.5 Extension Manager.&lt;br /&gt;
&lt;br /&gt;
== Real Joomla! 1.5 Style Module Implementation ==&lt;br /&gt;
&lt;br /&gt;
Now that was easy...too easy. In fact, that was pretty much the simplest form of a module possible. In reality a module will probably be doing something much more substantial. Let&#039;s assume that our modules are going to be more complex - we need to take advantage of the MVC (Model View Controller) design pattern and consider using the following file layout for a &amp;quot;Hello World 2&amp;quot; module instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/modules/mod_hello_world2/index.html&lt;br /&gt;
/modules/mod_hello_world2/mod_hello_world2.php&lt;br /&gt;
/modules/mod_hello_world2/mod_hello_world2.xml&lt;br /&gt;
/modules/mod_hello_world2/helper.php&lt;br /&gt;
/modules/mod_hello_world2/en-GB.mod_hello_world2.ini&lt;br /&gt;
/modules/mod_hello_world2/tmpl/index.html&lt;br /&gt;
/modules/mod_hello_world2/tmpl/default.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The differences to note here are that there are three additional files beyond what the &amp;quot;Hello World&amp;quot; module had, namely helper.php, tmpl/default.php, and the en-GB.mod_hello_world2.ini file. The purpose in adding the first two files is two-fold. Firstly, we separate the module&#039;s logic into the helper.php file to ensure that all of the thinking and data access is performed here and separate out the module&#039;s presentation / template into the tmpl/default.php file (the (X)HTML). I argue that this is just good programming - separating logic from presentation. There is a second advantage to this, however, which is that it will allow the HTML / presentation to be overridden easily by any Joomla! 1.5 template for optimal integration into any site. (Overriding module and component presentation in templates is beyond the scope of this article, however it should be addressed as it&#039;s really useful).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at what these files might look like and discuss what&#039;s going on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/mod_hello_world2.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//no direct access&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
&lt;br /&gt;
// include the helper file&lt;br /&gt;
require_once(dirname(__FILE__).DS.&#039;helper.php&#039;);&lt;br /&gt;
&lt;br /&gt;
// get a parameter from the module&#039;s configuration&lt;br /&gt;
$userCount = $params-&amp;gt;get(&#039;usercount&#039;);&lt;br /&gt;
&lt;br /&gt;
// get the items to display from the helper&lt;br /&gt;
$items = ModHelloWorld2Helper::getItems($userCount);&lt;br /&gt;
&lt;br /&gt;
// include the template for display&lt;br /&gt;
require(JModuleHelper::getLayoutPath(&#039;mod_hello_world2&#039;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important differences to note are that (1) we include a helper file which will be the work-horse of our logic and data access and (2) once we have our data, we just load a template which will use our data and render it as it sees fit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/mod_hello_world2.xml&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;install type=&amp;quot;module&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Name of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;Hello World 2 - Hello&amp;lt;/name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Name of the Author --&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Ambitionality Software LLC&amp;lt;/author&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Version Date of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;2008-06-23&amp;lt;/creationDate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Copyright information --&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;All rights reserved by Ambitionality Software LLC 2008.&amp;lt;/copyright&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- License Information --&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GPL 2.0&amp;lt;/license&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s email address --&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@ambitionality.com&amp;lt;/authorEmail&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s website --&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.ambitionality.com&amp;lt;/authorUrl&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Module version number --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Description of what the module does --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;Provides a random listing of registered users&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Listing of all files that should be installed for the module to function --&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The &amp;quot;module&amp;quot; attribute signifies that this is the main controller file --&amp;gt;&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_hello_world2&amp;quot;&amp;gt;mod_hello_world2.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helper.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/default.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;languages&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Any language files included with the module --&amp;gt;&lt;br /&gt;
        &amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;en-GB.mod_hello_world2.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
    &amp;lt;/languages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;params&amp;gt;&lt;br /&gt;
        &amp;lt;!-- parameter to allow placement of a module class suffix for the module table / xhtml display --&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;moduleclass_sfx&amp;quot; type=&amp;quot;text&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;Module Class Suffix&amp;quot; description=&amp;quot;PARAMMODULECLASSSUFFIX&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- just gives us a little room between the previous parameter and the next --&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;@spacer&amp;quot; type=&amp;quot;spacer&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;&amp;quot; description=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- A parameter that allows an administrator to modify the number of users that this module will display --&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;usercount&amp;quot; type=&amp;quot;text&amp;quot; default=&amp;quot;5&amp;quot; label=&amp;quot;LABEL USER COUNT&amp;quot; description=&amp;quot;DESC USER COUNT&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main differences to note here are that we have added a language file reference (we could have added more) and we added some parameters.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/helper.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
&lt;br /&gt;
class ModHelloWorld2Helper&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns a list of post items&lt;br /&gt;
    */&lt;br /&gt;
    public function getItems($userCount)&lt;br /&gt;
    {&lt;br /&gt;
        // get a reference to the database&lt;br /&gt;
        $db = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&lt;br /&gt;
        // get a list of $userCount randomly ordered users &lt;br /&gt;
        $query = &#039;SELECT a.name FROM `#__users` AS a ORDER BY rand() LIMIT &#039; . $userCount  . &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        $db-&amp;gt;setQuery($query);&lt;br /&gt;
        $items = ($items = $db-&amp;gt;loadObjectList())?$items:array();&lt;br /&gt;
&lt;br /&gt;
        return $items;&lt;br /&gt;
    } //end getItems&lt;br /&gt;
&lt;br /&gt;
} //end ModHelloWorld2Helper&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This helper class (note that it is named for the module name so that it doesn&#039;t collide with other class names) simply retrieves a list of all users in the database and randomly selects a subset of those based upon the number supplied as $userCount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/tmpl/default.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php defined(&#039;_JEXEC&#039;) or die(&#039;Restricted access&#039;); // no direct access ?&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;RANDOM USERS&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;?php foreach ($items as $item) { ?&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
        &amp;lt;?php echo JText::sprintf(&#039;USER LABEL&#039;, $item-&amp;gt;name); ?&amp;gt;&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;?php } ?&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we simply create an unordered HTML list and then iterate through the items returned by our helper (in mod_hello_world2.php), printing out a message with each user&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/en-GB.mod_hello_world2.ini:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
LABEL USER COUNT=User Count&lt;br /&gt;
DESC USER COUNT=The number of users to display&lt;br /&gt;
RANDOM USERS=Random Users for Hello World2&lt;br /&gt;
USER LABEL=%s is a randomly selected user&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we simply identify strings which appear in the module configuration file and the module template which appear in JText::_ or JText::sprintf statements. This allows someone to easily write a new language file without editing any of the HTML or code for the module.&lt;br /&gt;
&lt;br /&gt;
Now all we have to do is zip up these files, as in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
% pwd&lt;br /&gt;
/somesite/modules/mod_hello_world2&lt;br /&gt;
% zip -r ../mod_hello_world2.zip *&lt;br /&gt;
% ls ..&lt;br /&gt;
mod_hello_world2.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting mod_hello_world2.zip file is ready for installation and distribution. When the ZIP file is installed, the en-GB.mod_hello_world2.ini file is copied to /language/en-GB/en-GB.mod_hello_world2.ini and is loaded each time the module is loaded. All of the other files are copied to the /modules/mod_hello_world2 subfolder of the Joomla! installation.&lt;br /&gt;
&lt;br /&gt;
== Joomla! 1.5 Database installation usage ==&lt;br /&gt;
&lt;br /&gt;
Modules should in general not interact with the database except for normal operations (SELECT, UPDATE, INSERT, DELETE).&lt;br /&gt;
But in some cases it might be needed to ALTER or even CREATE tables, even though it is not recommended.&lt;br /&gt;
There is no common practice to this, but here is one way of doing just that:&lt;br /&gt;
&lt;br /&gt;
Add a module parameter that to the manifest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;params group=&amp;quot;advanced&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;is_installed&amp;quot; type=&amp;quot;radio&amp;quot; default=&amp;quot;0&amp;quot; label=&amp;quot;Is module installed?&amp;quot; description=&amp;quot;Only use this if you know the consequences! Click No to recreate database&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;No&amp;lt;/option&amp;gt;&lt;br /&gt;
			&amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;Yes&amp;lt;/option&amp;gt;&lt;br /&gt;
		&amp;lt;/param&amp;gt;&lt;br /&gt;
	&amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you can use the parameter to switch the state. &lt;br /&gt;
Since the module parameters is already loaded from the database at this point, any overhead should not be noticable this way. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// put this in the module function. &lt;br /&gt;
function myModuleReInstall() {&lt;br /&gt;
	if (!$params-&amp;gt;get(&#039;is_installed&#039;)) {&lt;br /&gt;
		$database =&amp;amp; JFactory::getDBO();&lt;br /&gt;
		$query = &amp;quot;CREATE TABLE IF NOT EXISTS `example` ( `id` INT, `data` VARCHAR(100) );&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		$database-&amp;gt;setQuery($query);&lt;br /&gt;
		$result = $database-&amp;gt;query();&lt;br /&gt;
		&lt;br /&gt;
		$params-&amp;gt;set(&#039;is_installed&#039;, 1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is meant as an example and it can be extended in various ways. &lt;br /&gt;
However - If you do that, you should also ask yourself if this is the right way to do things. Components do have real installers and this could be the best solution even though a module can be quicker to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Category:Tutorials]] [[Category:Module Development]]&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_simple_module&amp;diff=31570</id>
		<title>J1.5:Creating a simple module</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_simple_module&amp;diff=31570"/>
		<updated>2010-10-27T10:44:45Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
== Basic Hello World Module ==&lt;br /&gt;
&lt;br /&gt;
A Joomla! 1.5 Module is in its most basic form two files: an XML configuration file and a PHP controller file. The XML configuration file contains general information about the module (as will be displayed in the Module Manager in the Joomla! administration interface), as well as module parameters which may be supplied to fine tune the appearance / functionality of the module. The PHP file provides the controlling logic for the module. A very simple &amp;quot;Hello World&amp;quot; module might looking something like this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/mod_hello_world.xml:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!!! Note:&#039;&#039;&#039; it is very important, that XML file name matches module name. Otherwise, installer will install the module, but Joomla wouldn&#039;t show parameters and additional info stored in XML.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;install type=&amp;quot;module&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Name of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;Hello World - Hello&amp;lt;/name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Name of the Author --&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Ambitionality Software LLC&amp;lt;/author&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Version Date of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;2008-06-23&amp;lt;/creationDate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Copyright information --&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;All rights reserved by Ambitionality Software LLC 2008.&amp;lt;/copyright&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- License Information --&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GPL 2.0&amp;lt;/license&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s email address --&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@ambitionality.com&amp;lt;/authorEmail&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s website --&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.ambitionality.com&amp;lt;/authorUrl&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Module version number --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Description of what the module does --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;Provides a basic &amp;quot;Hello World&amp;quot; notice&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Listing of all files that should be installed for the module to function --&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The &amp;quot;module&amp;quot; attribute signifies that this is the main controller file --&amp;gt;&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_hello_world&amp;quot;&amp;gt;mod_hello_world.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;params /&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, this XML file just lines out basic information about the module such as the owner, version, etc. for identification by the Joomla! installer and then provides optional parameters which may be set in the Module Manager and accessed from within the module&#039;s logic to fine tune its behavior. Additionally, this file tells the installer which files should be copied and installed. Notice that we DO NOT include a reference in the files section for the XML file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/mod_hello_world.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//don&#039;t allow other scripts to grab and execute our file&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
    Hello World&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What happens when this module is loaded is that Joomla! includes (via the PHP include directive) the mod_hello_world.php file and stores the output into an output buffer which is then rendered onto the page output. This file would simply produce &amp;lt;p&amp;gt;Hello World&amp;lt;/p&amp;gt; to the final page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/index.html:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This really just helps to ensure that a default page is displayed if direct access to the directory is attempted without listing all of the other files in the directory. It&#039;s not necessary, but is good practice.&lt;br /&gt;
&lt;br /&gt;
To package this module for distribution and installation, simply zip the files together, e.g.,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
% cd mod_hello_world&lt;br /&gt;
% zip mod_hello_world.zip mod_hello_world.php mod_hello_world.xml index.html&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting mod_hello_world.zip file may be uploaded and installed through the standard Joomla! 1.5 Extension Manager.&lt;br /&gt;
&lt;br /&gt;
== Real Joomla! 1.5 Style Module Implementation ==&lt;br /&gt;
&lt;br /&gt;
Now that was easy...too easy. In fact, that was pretty much the simplest form of a module possible. In reality a module will probably be doing something much more substantial. Let&#039;s assume that our modules are going to be more complex - we need to take advantage of the MVC (Model View Controller) design pattern and consider using the following file layout for a &amp;quot;Hello World 2&amp;quot; module instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/modules/mod_hello_world2/index.html&lt;br /&gt;
/modules/mod_hello_world2/mod_hello_world2.php&lt;br /&gt;
/modules/mod_hello_world2/mod_hello_world2.xml&lt;br /&gt;
/modules/mod_hello_world2/helper.php&lt;br /&gt;
/modules/mod_hello_world2/en-GB.mod_hello_world2.ini&lt;br /&gt;
/modules/mod_hello_world2/tmpl/index.html&lt;br /&gt;
/modules/mod_hello_world2/tmpl/default.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The differences to note here are that there are three additional files beyond what the &amp;quot;Hello World&amp;quot; module had, namely helper.php, tmpl/default.php, and the en-GB.mod_hello_world2.ini file. The purpose in adding the first two files is two-fold. Firstly, we separate the module&#039;s logic into the helper.php file to ensure that all of the thinking and data access is performed here and separate out the module&#039;s presentation / template into the tmpl/default.php file (the (X)HTML). I argue that this is just good programming - separating logic from presentation. There is a second advantage to this, however, which is that it will allow the HTML / presentation to be overridden easily by any Joomla! 1.5 template for optimal integration into any site. (Overriding module and component presentation in templates is beyond the scope of this article, however it should be addressed as it&#039;s really useful).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at what these files might look like and discuss what&#039;s going on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/mod_hello_world2.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//no direct access&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
&lt;br /&gt;
// include the helper file&lt;br /&gt;
require_once(dirname(__FILE__).DS.&#039;helper.php&#039;);&lt;br /&gt;
&lt;br /&gt;
// get a parameter from the module&#039;s configuration&lt;br /&gt;
$userCount = $params-&amp;gt;get(&#039;usercount&#039;);&lt;br /&gt;
&lt;br /&gt;
// get the items to display from the helper&lt;br /&gt;
$items = ModHelloWorld2Helper::getItems($userCount);&lt;br /&gt;
&lt;br /&gt;
// include the template for display&lt;br /&gt;
require(JModuleHelper::getLayoutPath(&#039;mod_hello_world2&#039;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important differences to note are that (1) we include a helper file which will be the work-horse of our logic and data access and (2) once we have our data, we just load a template which will use our data and render it as it sees fit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/mod_hello_world2.xml&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;install type=&amp;quot;module&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Name of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;Hello World 2 - Hello&amp;lt;/name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Name of the Author --&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Ambitionality Software LLC&amp;lt;/author&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Version Date of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;2008-06-23&amp;lt;/creationDate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Copyright information --&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;All rights reserved by Ambitionality Software LLC 2008.&amp;lt;/copyright&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- License Information --&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GPL 2.0&amp;lt;/license&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s email address --&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@ambitionality.com&amp;lt;/authorEmail&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s website --&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.ambitionality.com&amp;lt;/authorUrl&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Module version number --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Description of what the module does --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;Provides a random listing of registered users&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Listing of all files that should be installed for the module to function --&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The &amp;quot;module&amp;quot; attribute signifies that this is the main controller file --&amp;gt;&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_hello_world2&amp;quot;&amp;gt;mod_hello_world2.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helper.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/default.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;languages&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Any language files included with the module --&amp;gt;&lt;br /&gt;
        &amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;en-GB.mod_hello_world2.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
    &amp;lt;/languages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;params&amp;gt;&lt;br /&gt;
        &amp;lt;!-- parameter to allow placement of a module class suffix for the module table / xhtml display --&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;moduleclass_sfx&amp;quot; type=&amp;quot;text&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;Module Class Suffix&amp;quot; description=&amp;quot;PARAMMODULECLASSSUFFIX&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- just gives us a little room between the previous parameter and the next --&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;@spacer&amp;quot; type=&amp;quot;spacer&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;&amp;quot; description=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- A parameter that allows an administrator to modify the number of users that this module will display --&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;usercount&amp;quot; type=&amp;quot;text&amp;quot; default=&amp;quot;5&amp;quot; label=&amp;quot;LABEL USER COUNT&amp;quot; description=&amp;quot;DESC USER COUNT&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main differences to note here are that we have added a language file reference (we could have added more) and we added some parameters.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/helper.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
&lt;br /&gt;
class ModHelloWorld2Helper&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns a list of post items&lt;br /&gt;
    */&lt;br /&gt;
    public function getItems($userCount)&lt;br /&gt;
    {&lt;br /&gt;
        // get a reference to the database&lt;br /&gt;
        $db = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&lt;br /&gt;
        // get a list of $userCount randomly ordered users &lt;br /&gt;
        $query = &#039;SELECT a.name FROM `#__users` AS a ORDER BY rand() LIMIT &#039; . $userCount  . &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        $db-&amp;gt;setQuery($query);&lt;br /&gt;
        $items = ($items = $db-&amp;gt;loadObjectList())?$items:array();&lt;br /&gt;
&lt;br /&gt;
        return $items;&lt;br /&gt;
    } //end getItems&lt;br /&gt;
&lt;br /&gt;
} //end ModHelloWorld2Helper&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This helper class (note that it is named for the module name so that it doesn&#039;t collide with other class names) simply retrieves a list of all users in the database and randomly selects a subset of those based upon the number supplied as $userCount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/tmpl/default.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php defined(&#039;_JEXEC&#039;) or die(&#039;Restricted access&#039;); // no direct access ?&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;RANDOM USERS&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;?php foreach ($items as $item) { ?&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
        &amp;lt;?php echo JText::sprintf(&#039;USER LABEL&#039;, $item-&amp;gt;name); ?&amp;gt;&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;?php } ?&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we simply create an unordered HTML list and then iterate through the items returned by our helper (in mod_hello_world2.php), printing out a message with each user&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/en-GB.mod_hello_world2.ini:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
LABEL USER COUNT=User Count&lt;br /&gt;
DESC USER COUNT=The number of users to display&lt;br /&gt;
RANDOM USERS=Random Users for Hello World2&lt;br /&gt;
USER LABEL=%s is a randomly selected user&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we simply identify strings which appear in the module configuration file and the module template which appear in JText::_ or JText::sprintf statements. This allows someone to easily write a new language file without editing any of the HTML or code for the module.&lt;br /&gt;
&lt;br /&gt;
Now all we have to do is zip up these files, as in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
% pwd&lt;br /&gt;
/somesite/modules/mod_hello_world2&lt;br /&gt;
% zip -r ../mod_hello_world2.zip *&lt;br /&gt;
% ls ..&lt;br /&gt;
mod_hello_world2.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting mod_hello_world2.zip file is ready for installation and distribution. When the ZIP file is installed, the en-GB.mod_hello_world2.ini file is copied to /language/en-GB/en-GB.mod_hello_world2.ini and is loaded each time the module is loaded. All of the other files are copied to the /modules/mod_hello_world2 subfolder of the Joomla! installation.&lt;br /&gt;
&lt;br /&gt;
== Joomla! 1.5 Database installation usage ==&lt;br /&gt;
&lt;br /&gt;
Modules should in general not interact with the database except for normal operations (SELECT, UPDATE, INSERT, DELETE).&lt;br /&gt;
But in some cases it might be needed to ALTER or even CREATE tables, even though it is not recommended.&lt;br /&gt;
There is no common practice to this, but here is one way of doing just that:&lt;br /&gt;
&lt;br /&gt;
Add a module parameter that to the manifest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;params group=&amp;quot;advanced&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;is_installed&amp;quot; type=&amp;quot;radio&amp;quot; default=&amp;quot;0&amp;quot; label=&amp;quot;Is module installed?&amp;quot; description=&amp;quot;Only use this if you know the consequences! Click No to recreate database&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;No&amp;lt;/option&amp;gt;&lt;br /&gt;
			&amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;Yes&amp;lt;/option&amp;gt;&lt;br /&gt;
		&amp;lt;/param&amp;gt;&lt;br /&gt;
	&amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you can use the parameter to switch the state and since parameters is already loaded from database, any overhead is not noticable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// put this in the module function. &lt;br /&gt;
function myModuleReInstall() {&lt;br /&gt;
	if (!$params-&amp;gt;get(&#039;is_installed&#039;)) {&lt;br /&gt;
		$database =&amp;amp; JFactory::getDBO();&lt;br /&gt;
		$query = &amp;quot;CREATE TABLE example ( id INT, data VARCHAR(100) );&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		$database-&amp;gt;setQuery($query);&lt;br /&gt;
		$result = $database-&amp;gt;query();&lt;br /&gt;
		&lt;br /&gt;
		$params-&amp;gt;set(&#039;is_installed&#039;, 1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Category:Tutorials]] [[Category:Module Development]]&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_simple_module&amp;diff=31569</id>
		<title>J1.5:Creating a simple module</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_simple_module&amp;diff=31569"/>
		<updated>2010-10-27T10:42:36Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* Basic Hello World Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
== Basic Hello World Module ==&lt;br /&gt;
&lt;br /&gt;
A Joomla! 1.5 Module is in its most basic form two files: an XML configuration file and a PHP controller file. The XML configuration file contains general information about the module (as will be displayed in the Module Manager in the Joomla! administration interface), as well as module parameters which may be supplied to fine tune the appearance / functionality of the module. The PHP file provides the controlling logic for the module. A very simple &amp;quot;Hello World&amp;quot; module might looking something like this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/mod_hello_world.xml:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!!! Note:&#039;&#039;&#039; it is very important, that XML file name matches module name. Otherwise, installer will install the module, but Joomla wouldn&#039;t show parameters and additional info stored in XML.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;install type=&amp;quot;module&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Name of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;Hello World - Hello&amp;lt;/name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Name of the Author --&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Ambitionality Software LLC&amp;lt;/author&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Version Date of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;2008-06-23&amp;lt;/creationDate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Copyright information --&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;All rights reserved by Ambitionality Software LLC 2008.&amp;lt;/copyright&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- License Information --&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GPL 2.0&amp;lt;/license&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s email address --&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@ambitionality.com&amp;lt;/authorEmail&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s website --&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.ambitionality.com&amp;lt;/authorUrl&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Module version number --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Description of what the module does --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;Provides a basic &amp;quot;Hello World&amp;quot; notice&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Listing of all files that should be installed for the module to function --&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The &amp;quot;module&amp;quot; attribute signifies that this is the main controller file --&amp;gt;&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_hello_world&amp;quot;&amp;gt;mod_hello_world.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;params /&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, this XML file just lines out basic information about the module such as the owner, version, etc. for identification by the Joomla! installer and then provides optional parameters which may be set in the Module Manager and accessed from within the module&#039;s logic to fine tune its behavior. Additionally, this file tells the installer which files should be copied and installed. Notice that we DO NOT include a reference in the files section for the XML file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/mod_hello_world.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//don&#039;t allow other scripts to grab and execute our file&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
    Hello World&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What happens when this module is loaded is that Joomla! includes (via the PHP include directive) the mod_hello_world.php file and stores the output into an output buffer which is then rendered onto the page output. This file would simply produce &amp;lt;p&amp;gt;Hello World&amp;lt;/p&amp;gt; to the final page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/index.html:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This really just helps to ensure that a default page is displayed if direct access to the directory is attempted without listing all of the other files in the directory. It&#039;s not necessary, but is good practice.&lt;br /&gt;
&lt;br /&gt;
To package this module for distribution and installation, simply zip the files together, e.g.,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
% cd mod_hello_world&lt;br /&gt;
% zip mod_hello_world.zip mod_hello_world.php mod_hello_world.xml index.html&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting mod_hello_world.zip file may be uploaded and installed through the standard Joomla! 1.5 Extension Manager.&lt;br /&gt;
&lt;br /&gt;
== Real Joomla! 1.5 Style Module Implementation ==&lt;br /&gt;
&lt;br /&gt;
Now that was easy...too easy. In fact, that was pretty much the simplest form of a module possible. In reality a module will probably be doing something much more substantial. Let&#039;s assume that our modules are going to be more complex - we need to take advantage of the MVC (Model View Controller) design pattern and consider using the following file layout for a &amp;quot;Hello World 2&amp;quot; module instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/modules/mod_hello_world2/index.html&lt;br /&gt;
/modules/mod_hello_world2/mod_hello_world2.php&lt;br /&gt;
/modules/mod_hello_world2/mod_hello_world2.xml&lt;br /&gt;
/modules/mod_hello_world2/helper.php&lt;br /&gt;
/modules/mod_hello_world2/en-GB.mod_hello_world2.ini&lt;br /&gt;
/modules/mod_hello_world2/tmpl/index.html&lt;br /&gt;
/modules/mod_hello_world2/tmpl/default.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The differences to note here are that there are three additional files beyond what the &amp;quot;Hello World&amp;quot; module had, namely helper.php, tmpl/default.php, and the en-GB.mod_hello_world2.ini file. The purpose in adding the first two files is two-fold. Firstly, we separate the module&#039;s logic into the helper.php file to ensure that all of the thinking and data access is performed here and separate out the module&#039;s presentation / template into the tmpl/default.php file (the (X)HTML). I argue that this is just good programming - separating logic from presentation. There is a second advantage to this, however, which is that it will allow the HTML / presentation to be overridden easily by any Joomla! 1.5 template for optimal integration into any site. (Overriding module and component presentation in templates is beyond the scope of this article, however it should be addressed as it&#039;s really useful).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at what these files might look like and discuss what&#039;s going on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/mod_hello_world2.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//no direct access&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
&lt;br /&gt;
// include the helper file&lt;br /&gt;
require_once(dirname(__FILE__).DS.&#039;helper.php&#039;);&lt;br /&gt;
&lt;br /&gt;
// get a parameter from the module&#039;s configuration&lt;br /&gt;
$userCount = $params-&amp;gt;get(&#039;usercount&#039;);&lt;br /&gt;
&lt;br /&gt;
// get the items to display from the helper&lt;br /&gt;
$items = ModHelloWorld2Helper::getItems($userCount);&lt;br /&gt;
&lt;br /&gt;
// include the template for display&lt;br /&gt;
require(JModuleHelper::getLayoutPath(&#039;mod_hello_world2&#039;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important differences to note are that (1) we include a helper file which will be the work-horse of our logic and data access and (2) once we have our data, we just load a template which will use our data and render it as it sees fit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/mod_hello_world2.xml&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;install type=&amp;quot;module&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Name of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;Hello World 2 - Hello&amp;lt;/name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Name of the Author --&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Ambitionality Software LLC&amp;lt;/author&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Version Date of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;2008-06-23&amp;lt;/creationDate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Copyright information --&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;All rights reserved by Ambitionality Software LLC 2008.&amp;lt;/copyright&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- License Information --&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GPL 2.0&amp;lt;/license&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s email address --&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@ambitionality.com&amp;lt;/authorEmail&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s website --&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.ambitionality.com&amp;lt;/authorUrl&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Module version number --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Description of what the module does --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;Provides a random listing of registered users&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Listing of all files that should be installed for the module to function --&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The &amp;quot;module&amp;quot; attribute signifies that this is the main controller file --&amp;gt;&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_hello_world2&amp;quot;&amp;gt;mod_hello_world2.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helper.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/default.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;languages&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Any language files included with the module --&amp;gt;&lt;br /&gt;
        &amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;en-GB.mod_hello_world2.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
    &amp;lt;/languages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;params&amp;gt;&lt;br /&gt;
        &amp;lt;!-- parameter to allow placement of a module class suffix for the module table / xhtml display --&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;moduleclass_sfx&amp;quot; type=&amp;quot;text&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;Module Class Suffix&amp;quot; description=&amp;quot;PARAMMODULECLASSSUFFIX&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- just gives us a little room between the previous parameter and the next --&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;@spacer&amp;quot; type=&amp;quot;spacer&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;&amp;quot; description=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- A parameter that allows an administrator to modify the number of users that this module will display --&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;usercount&amp;quot; type=&amp;quot;text&amp;quot; default=&amp;quot;5&amp;quot; label=&amp;quot;LABEL USER COUNT&amp;quot; description=&amp;quot;DESC USER COUNT&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main differences to note here are that we have added a language file reference (we could have added more) and we added some parameters.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/helper.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
&lt;br /&gt;
class ModHelloWorld2Helper&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns a list of post items&lt;br /&gt;
    */&lt;br /&gt;
    public function getItems($userCount)&lt;br /&gt;
    {&lt;br /&gt;
        // get a reference to the database&lt;br /&gt;
        $db = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&lt;br /&gt;
        // get a list of $userCount randomly ordered users &lt;br /&gt;
        $query = &#039;SELECT a.name FROM `#__users` AS a ORDER BY rand() LIMIT &#039; . $userCount  . &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        $db-&amp;gt;setQuery($query);&lt;br /&gt;
        $items = ($items = $db-&amp;gt;loadObjectList())?$items:array();&lt;br /&gt;
&lt;br /&gt;
        return $items;&lt;br /&gt;
    } //end getItems&lt;br /&gt;
&lt;br /&gt;
} //end ModHelloWorld2Helper&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This helper class (note that it is named for the module name so that it doesn&#039;t collide with other class names) simply retrieves a list of all users in the database and randomly selects a subset of those based upon the number supplied as $userCount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/tmpl/default.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php defined(&#039;_JEXEC&#039;) or die(&#039;Restricted access&#039;); // no direct access ?&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;RANDOM USERS&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;?php foreach ($items as $item) { ?&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
        &amp;lt;?php echo JText::sprintf(&#039;USER LABEL&#039;, $item-&amp;gt;name); ?&amp;gt;&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;?php } ?&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we simply create an unordered HTML list and then iterate through the items returned by our helper (in mod_hello_world2.php), printing out a message with each user&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/en-GB.mod_hello_world2.ini:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
LABEL USER COUNT=User Count&lt;br /&gt;
DESC USER COUNT=The number of users to display&lt;br /&gt;
RANDOM USERS=Random Users for Hello World2&lt;br /&gt;
USER LABEL=%s is a randomly selected user&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we simply identify strings which appear in the module configuration file and the module template which appear in JText::_ or JText::sprintf statements. This allows someone to easily write a new language file without editing any of the HTML or code for the module.&lt;br /&gt;
&lt;br /&gt;
Now all we have to do is zip up these files, as in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
% pwd&lt;br /&gt;
/somesite/modules/mod_hello_world2&lt;br /&gt;
% zip -r ../mod_hello_world2.zip *&lt;br /&gt;
% ls ..&lt;br /&gt;
mod_hello_world2.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting mod_hello_world2.zip file is ready for installation and distribution. When the ZIP file is installed, the en-GB.mod_hello_world2.ini file is copied to /language/en-GB/en-GB.mod_hello_world2.ini and is loaded each time the module is loaded. All of the other files are copied to the /modules/mod_hello_world2 subfolder of the Joomla! installation.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Category:Tutorials]] [[Category:Module Development]]&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_simple_module&amp;diff=31568</id>
		<title>J1.5:Creating a simple module</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_simple_module&amp;diff=31568"/>
		<updated>2010-10-27T10:40:14Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* Basic Hello World Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
== Basic Hello World Module ==&lt;br /&gt;
&lt;br /&gt;
A Joomla! 1.5 Module is in its most basic form two files: an XML configuration file and a PHP controller file. The XML configuration file contains general information about the module (as will be displayed in the Module Manager in the Joomla! administration interface), as well as module parameters which may be supplied to fine tune the appearance / functionality of the module. The PHP file provides the controlling logic for the module. A very simple &amp;quot;Hello World&amp;quot; module might looking something like this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/mod_hello_world.xml:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!!! Note:&#039;&#039;&#039; it is very important, that XML file name matches module name. Otherwise, installer will install the module, but Joomla wouldn&#039;t show parameters and additional info stored in XML.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;install type=&amp;quot;module&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Name of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;Hello World - Hello&amp;lt;/name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Name of the Author --&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Ambitionality Software LLC&amp;lt;/author&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Version Date of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;2008-06-23&amp;lt;/creationDate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Copyright information --&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;All rights reserved by Ambitionality Software LLC 2008.&amp;lt;/copyright&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- License Information --&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GPL 2.0&amp;lt;/license&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s email address --&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@ambitionality.com&amp;lt;/authorEmail&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s website --&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.ambitionality.com&amp;lt;/authorUrl&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Module version number --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Description of what the module does --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;Provides a basic &amp;quot;Hello World&amp;quot; notice&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Listing of all files that should be installed for the module to function --&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The &amp;quot;module&amp;quot; attribute signifies that this is the main controller file --&amp;gt;&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_hello_world&amp;quot;&amp;gt;mod_hello_world.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;params /&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, this XML file just lines out basic information about the module such as the owner, version, etc. for identification by the Joomla! installer and then provides optional parameters which may be set in the Module Manager and accessed from within the module&#039;s logic to fine tune its behavior. Additionally, this file tells the installer which files should be copied and installed. Notice that we DO NOT include a reference in the files section for the XML file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/mod_hello_world.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//don&#039;t allow other scripts to grab and execute our file&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
    Hello World&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What happens when this module is loaded is that Joomla! includes (via the PHP include directive) the mod_hello_world.php file and stores the output into an output buffer which is then rendered onto the page output. This file would simply produce &amp;lt;p&amp;gt;Hello World&amp;lt;/p&amp;gt; to the final page.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world/index.html:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This really just helps to ensure that a default page is displayed if direct access to the directory is attempted without listing all of the other files in the directory. It&#039;s not necessary, but is good practice.&lt;br /&gt;
&lt;br /&gt;
Modules should in general not interact with the database except for normal operations (SELECT, UPDATE, INSERT, DELETE).&lt;br /&gt;
But in some cases it might be needed to ALTER or even CREATE tables, even though it is not recommended.&lt;br /&gt;
There is no common practice to this, but here is one way of doing just that:&lt;br /&gt;
&lt;br /&gt;
Add a module parameter that to the manifest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;params group=&amp;quot;advanced&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;is_installed&amp;quot; type=&amp;quot;radio&amp;quot; default=&amp;quot;0&amp;quot; label=&amp;quot;Is module installed?&amp;quot; description=&amp;quot;Only use this if you know the consequences! Click No to recreate database&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;No&amp;lt;/option&amp;gt;&lt;br /&gt;
			&amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;Yes&amp;lt;/option&amp;gt;&lt;br /&gt;
		&amp;lt;/param&amp;gt;&lt;br /&gt;
	&amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you can use the parameter to switch the state and since parameters is already loaded from database, any overhead is not noticable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// put this in the module function. &lt;br /&gt;
function myModuleReInstall() {&lt;br /&gt;
	if (!$params-&amp;gt;get(&#039;is_installed&#039;)) {&lt;br /&gt;
		$database =&amp;amp; JFactory::getDBO();&lt;br /&gt;
		$query = &amp;quot;CREATE TABLE example ( id INT, data VARCHAR(100) );&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		$database-&amp;gt;setQuery($query);&lt;br /&gt;
		$result = $database-&amp;gt;query();&lt;br /&gt;
		&lt;br /&gt;
		$params-&amp;gt;set(&#039;is_installed&#039;, 1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To package this module for distribution and installation, simply zip the files together, e.g.,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
% cd mod_hello_world&lt;br /&gt;
% zip mod_hello_world.zip mod_hello_world.php mod_hello_world.xml index.html&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting mod_hello_world.zip file may be uploaded and installed through the standard Joomla! 1.5 Extension Manager.&lt;br /&gt;
&lt;br /&gt;
== Real Joomla! 1.5 Style Module Implementation ==&lt;br /&gt;
&lt;br /&gt;
Now that was easy...too easy. In fact, that was pretty much the simplest form of a module possible. In reality a module will probably be doing something much more substantial. Let&#039;s assume that our modules are going to be more complex - we need to take advantage of the MVC (Model View Controller) design pattern and consider using the following file layout for a &amp;quot;Hello World 2&amp;quot; module instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/modules/mod_hello_world2/index.html&lt;br /&gt;
/modules/mod_hello_world2/mod_hello_world2.php&lt;br /&gt;
/modules/mod_hello_world2/mod_hello_world2.xml&lt;br /&gt;
/modules/mod_hello_world2/helper.php&lt;br /&gt;
/modules/mod_hello_world2/en-GB.mod_hello_world2.ini&lt;br /&gt;
/modules/mod_hello_world2/tmpl/index.html&lt;br /&gt;
/modules/mod_hello_world2/tmpl/default.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The differences to note here are that there are three additional files beyond what the &amp;quot;Hello World&amp;quot; module had, namely helper.php, tmpl/default.php, and the en-GB.mod_hello_world2.ini file. The purpose in adding the first two files is two-fold. Firstly, we separate the module&#039;s logic into the helper.php file to ensure that all of the thinking and data access is performed here and separate out the module&#039;s presentation / template into the tmpl/default.php file (the (X)HTML). I argue that this is just good programming - separating logic from presentation. There is a second advantage to this, however, which is that it will allow the HTML / presentation to be overridden easily by any Joomla! 1.5 template for optimal integration into any site. (Overriding module and component presentation in templates is beyond the scope of this article, however it should be addressed as it&#039;s really useful).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at what these files might look like and discuss what&#039;s going on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/mod_hello_world2.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//no direct access&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
&lt;br /&gt;
// include the helper file&lt;br /&gt;
require_once(dirname(__FILE__).DS.&#039;helper.php&#039;);&lt;br /&gt;
&lt;br /&gt;
// get a parameter from the module&#039;s configuration&lt;br /&gt;
$userCount = $params-&amp;gt;get(&#039;usercount&#039;);&lt;br /&gt;
&lt;br /&gt;
// get the items to display from the helper&lt;br /&gt;
$items = ModHelloWorld2Helper::getItems($userCount);&lt;br /&gt;
&lt;br /&gt;
// include the template for display&lt;br /&gt;
require(JModuleHelper::getLayoutPath(&#039;mod_hello_world2&#039;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important differences to note are that (1) we include a helper file which will be the work-horse of our logic and data access and (2) once we have our data, we just load a template which will use our data and render it as it sees fit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/mod_hello_world2.xml&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;install type=&amp;quot;module&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Name of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;Hello World 2 - Hello&amp;lt;/name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Name of the Author --&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Ambitionality Software LLC&amp;lt;/author&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Version Date of the Module --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;2008-06-23&amp;lt;/creationDate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Copyright information --&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;All rights reserved by Ambitionality Software LLC 2008.&amp;lt;/copyright&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- License Information --&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GPL 2.0&amp;lt;/license&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s email address --&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@ambitionality.com&amp;lt;/authorEmail&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Author&#039;s website --&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.ambitionality.com&amp;lt;/authorUrl&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Module version number --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt; &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Description of what the module does --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;Provides a random listing of registered users&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Listing of all files that should be installed for the module to function --&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;!-- The &amp;quot;module&amp;quot; attribute signifies that this is the main controller file --&amp;gt;&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_hello_world2&amp;quot;&amp;gt;mod_hello_world2.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helper.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/default.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;languages&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Any language files included with the module --&amp;gt;&lt;br /&gt;
        &amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;en-GB.mod_hello_world2.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
    &amp;lt;/languages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;params&amp;gt;&lt;br /&gt;
        &amp;lt;!-- parameter to allow placement of a module class suffix for the module table / xhtml display --&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;moduleclass_sfx&amp;quot; type=&amp;quot;text&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;Module Class Suffix&amp;quot; description=&amp;quot;PARAMMODULECLASSSUFFIX&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- just gives us a little room between the previous parameter and the next --&amp;gt;&lt;br /&gt;
		&amp;lt;param name=&amp;quot;@spacer&amp;quot; type=&amp;quot;spacer&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;&amp;quot; description=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- A parameter that allows an administrator to modify the number of users that this module will display --&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;usercount&amp;quot; type=&amp;quot;text&amp;quot; default=&amp;quot;5&amp;quot; label=&amp;quot;LABEL USER COUNT&amp;quot; description=&amp;quot;DESC USER COUNT&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main differences to note here are that we have added a language file reference (we could have added more) and we added some parameters.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/helper.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Direct Access to this location is not allowed.&#039;);&lt;br /&gt;
&lt;br /&gt;
class ModHelloWorld2Helper&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns a list of post items&lt;br /&gt;
    */&lt;br /&gt;
    public function getItems($userCount)&lt;br /&gt;
    {&lt;br /&gt;
        // get a reference to the database&lt;br /&gt;
        $db = &amp;amp;JFactory::getDBO();&lt;br /&gt;
&lt;br /&gt;
        // get a list of $userCount randomly ordered users &lt;br /&gt;
        $query = &#039;SELECT a.name FROM `#__users` AS a ORDER BY rand() LIMIT &#039; . $userCount  . &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        $db-&amp;gt;setQuery($query);&lt;br /&gt;
        $items = ($items = $db-&amp;gt;loadObjectList())?$items:array();&lt;br /&gt;
&lt;br /&gt;
        return $items;&lt;br /&gt;
    } //end getItems&lt;br /&gt;
&lt;br /&gt;
} //end ModHelloWorld2Helper&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This helper class (note that it is named for the module name so that it doesn&#039;t collide with other class names) simply retrieves a list of all users in the database and randomly selects a subset of those based upon the number supplied as $userCount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/tmpl/default.php:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php defined(&#039;_JEXEC&#039;) or die(&#039;Restricted access&#039;); // no direct access ?&amp;gt;&lt;br /&gt;
&amp;lt;?php echo JText::_(&#039;RANDOM USERS&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;?php foreach ($items as $item) { ?&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
        &amp;lt;?php echo JText::sprintf(&#039;USER LABEL&#039;, $item-&amp;gt;name); ?&amp;gt;&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;?php } ?&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we simply create an unordered HTML list and then iterate through the items returned by our helper (in mod_hello_world2.php), printing out a message with each user&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/modules/mod_hello_world2/en-GB.mod_hello_world2.ini:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
LABEL USER COUNT=User Count&lt;br /&gt;
DESC USER COUNT=The number of users to display&lt;br /&gt;
RANDOM USERS=Random Users for Hello World2&lt;br /&gt;
USER LABEL=%s is a randomly selected user&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we simply identify strings which appear in the module configuration file and the module template which appear in JText::_ or JText::sprintf statements. This allows someone to easily write a new language file without editing any of the HTML or code for the module.&lt;br /&gt;
&lt;br /&gt;
Now all we have to do is zip up these files, as in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
% pwd&lt;br /&gt;
/somesite/modules/mod_hello_world2&lt;br /&gt;
% zip -r ../mod_hello_world2.zip *&lt;br /&gt;
% ls ..&lt;br /&gt;
mod_hello_world2.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting mod_hello_world2.zip file is ready for installation and distribution. When the ZIP file is installed, the en-GB.mod_hello_world2.ini file is copied to /language/en-GB/en-GB.mod_hello_world2.ini and is loaded each time the module is loaded. All of the other files are copied to the /modules/mod_hello_world2 subfolder of the Joomla! installation.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Development]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Category:Tutorials]] [[Category:Module Development]]&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28979</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28979"/>
		<updated>2010-06-29T11:01:14Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.1 Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins.&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&lt;br /&gt;
The most common use of this routine would be logging the user into a thirdparty application. If you need to abort the login process (authentication), you will need to use [http://docs.joomla.org/Reference:User_Events_for_Plugin_System#5.3.4_onAuthenticate onAuthenticate] instead.&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $succes - Boolean to identify if the deletion was successful&lt;br /&gt;
  * $msg - Error message if delete failed ([http://api.joomla.org/Joomla-Framework/Error/JError.html JError] object detailing the error, if any)&lt;br /&gt;
&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28978</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28978"/>
		<updated>2010-06-29T11:00:12Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.1 Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&lt;br /&gt;
The most common use of this routine would be logging the user into a thirdparty application. If you need to abort the login process (authentication), you will need to use [http://docs.joomla.org/Reference:User_Events_for_Plugin_System#5.3.4_onAuthenticate onAuthenticate] instead.&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $succes - Boolean to identify if the deletion was successful&lt;br /&gt;
  * $msg - Error message if delete failed ([http://api.joomla.org/Joomla-Framework/Error/JError.html JError] object detailing the error, if any)&lt;br /&gt;
&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28977</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28977"/>
		<updated>2010-06-29T10:59:30Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.1 Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&lt;br /&gt;
The most common use of this routine would be logging the user into a thirdparty application. If you need to abort the login process (authentication), you will need to use [[#5.3.4_onAuthenticate onAuthenticate]] instead.&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $succes - Boolean to identify if the deletion was successful&lt;br /&gt;
  * $msg - Error message if delete failed ([http://api.joomla.org/Joomla-Framework/Error/JError.html JError] object detailing the error, if any)&lt;br /&gt;
&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28976</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28976"/>
		<updated>2010-06-29T10:58:46Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.1 Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered _after_ the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&lt;br /&gt;
The most common use of this routine would be logging the user into a thirdparty application. If you need to abort the login process (authentication), you will need to use [#5.3.4_onAuthenticate onAuthenticate] instead.&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $succes - Boolean to identify if the deletion was successful&lt;br /&gt;
  * $msg - Error message if delete failed ([http://api.joomla.org/Joomla-Framework/Error/JError.html JError] object detailing the error, if any)&lt;br /&gt;
&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Joomla!_1.6_Development_Status&amp;diff=28871</id>
		<title>Archived:Joomla! 1.6 Development Status</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Joomla!_1.6_Development_Status&amp;diff=28871"/>
		<updated>2010-06-25T17:41:23Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This page is outdated. &lt;br /&gt;
Joomla 1.6 is currently in beta 3 (or above). Check the status in the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 issuetracker]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 95%; padding:4px; width: auto;&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Task&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Blocker&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Contact person&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Implement JForm library&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Rob Schley, Andrew Eddie&lt;br /&gt;
|This library allows to create forms from XML definition files. See the introduction at http://tinyurl.com/psj6c6&lt;br /&gt;
|-&lt;br /&gt;
|Implement new event triggers&lt;br /&gt;
|Alpha&lt;br /&gt;
|60%&lt;br /&gt;
|&lt;br /&gt;
|onBeforeRender, triggers in JForm, onContentDisplay etc.&lt;br /&gt;
|-&lt;br /&gt;
|Implement new controller dispatcher&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|See the discussion at http://tinyurl.com/qlh5bg where Louis explained how this works in 1.6. See related article in wiki here: [[Xml-rpc changes in Joomla! 1.6]].&lt;br /&gt;
|-&lt;br /&gt;
|Upgrade to Mootools 1.2&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Louis Landry, Ercan Özkaya&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Javascript translation&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|This is implemented and finished. Take a look at JOpenID Javascript class and mod_login for details&lt;br /&gt;
|-&lt;br /&gt;
|New extension updater work&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Samuel  Moffatt&lt;br /&gt;
|New extension updater is implemented, but not finished yet.&lt;br /&gt;
|-&lt;br /&gt;
|Conversion of INI to JSON&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|We now use JSON format for storing parameters in the database. This is completed for core components.&lt;br /&gt;
|-&lt;br /&gt;
|Nested categories&lt;br /&gt;
|Alpha&lt;br /&gt;
|90%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Access control list (ACL)&lt;br /&gt;
|Alpha&lt;br /&gt;
|80%&lt;br /&gt;
|Hannes Papenberg, Louis Landry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|User management system&lt;br /&gt;
|Alpha&lt;br /&gt;
|75%&lt;br /&gt;
|&lt;br /&gt;
|The new com_members needs to be proof checked.&lt;br /&gt;
|-&lt;br /&gt;
|Documenting the triggers, finishing them&lt;br /&gt;
|&lt;br /&gt;
|10%&lt;br /&gt;
|Louis Landry, Rob Schley, Andrew Eddie&lt;br /&gt;
|The triggers for JForm need to be implemented in the respective extension, which has not happened yet. We need a plan for this one.&lt;br /&gt;
|-&lt;br /&gt;
|MVCing backend components&lt;br /&gt;
|&lt;br /&gt;
|90%&lt;br /&gt;
|&lt;br /&gt;
|Most of the back-end components have MVC file structure, but they are not fully MVC yet&lt;br /&gt;
|-&lt;br /&gt;
|Parameters for templates in the database&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|Especially the UI will take a lot of work, we might have to change the database for this one.&lt;br /&gt;
|-&lt;br /&gt;
|Add template parameter set to menu item creation&lt;br /&gt;
|&lt;br /&gt;
|10%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Refactoring parameters&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|&lt;br /&gt;
|A review of the current parameters and implementing new ones for the new category system.&lt;br /&gt;
|-&lt;br /&gt;
|Comments system&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|Louis Landry, Andrew Eddie, Rob Schley&lt;br /&gt;
|It will be donated by JXtended and will be added to trunk somewhere in the beta phase.&lt;br /&gt;
|-&lt;br /&gt;
|Hooks for external authentication systems&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|&lt;br /&gt;
|Need to be implemented in JUser and in the code where Usergroups are managed. Maybe we need a JUsergroupclass&lt;br /&gt;
|-&lt;br /&gt;
|Database driven install log&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Samuel Moffatt&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Convert all layouts to semantic and XHTML strict&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Ron Severdia&lt;br /&gt;
|There are some efforts going on for this. See the topic at http://tinyurl.com/qrb39k&lt;br /&gt;
|-&lt;br /&gt;
|Timezones, JDate and Datetime (gregorian, julian, shamsi, hijri, jewish, buddhist, ethiopian, chinese and french calendar)&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Refactoring all components to use JForm&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|Localising invalid token message&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|die(&#039;Invalid Token&#039;) will be replaced by jexit(JText::_(&#039;JInvalid_Token&#039;))&lt;br /&gt;
|-&lt;br /&gt;
|Ability to select multiple categories for some views&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|New sample content&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|Elin Waring&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Reformat translation files to adhere to proper INI specs&lt;br /&gt;
|&lt;br /&gt;
|75%&lt;br /&gt;
|Ole Ottosen, JM Simonet&lt;br /&gt;
|In 1.6 we will use PHP&#039;s own INI parser and will namespace strings. For example &amp;quot;Weblinks_Category_Fieldname&amp;quot; or &amp;quot;Config_Application_Name&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Migration script from 1.5 to 1.6&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|oc666&lt;br /&gt;
|[[Migration script from 1.5 to 1.6]]&lt;br /&gt;
|-&lt;br /&gt;
|Add module assignment to menu items creation&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ability to load additional layouts with a template&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Language switcher frontend]]&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Christophe Demko&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Development Working Group]]&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Joomla!_1.6_Development_Status&amp;diff=28870</id>
		<title>Archived:Joomla! 1.6 Development Status</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Joomla!_1.6_Development_Status&amp;diff=28870"/>
		<updated>2010-06-25T17:40:07Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This page is outdated and really needs an update.&lt;br /&gt;
Joomla 1.6 is currently in beta 3 (or above). [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 link Check the status in the tracker]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 95%; padding:4px; width: auto;&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Task&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Blocker&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Contact person&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Implement JForm library&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Rob Schley, Andrew Eddie&lt;br /&gt;
|This library allows to create forms from XML definition files. See the introduction at http://tinyurl.com/psj6c6&lt;br /&gt;
|-&lt;br /&gt;
|Implement new event triggers&lt;br /&gt;
|Alpha&lt;br /&gt;
|60%&lt;br /&gt;
|&lt;br /&gt;
|onBeforeRender, triggers in JForm, onContentDisplay etc.&lt;br /&gt;
|-&lt;br /&gt;
|Implement new controller dispatcher&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|See the discussion at http://tinyurl.com/qlh5bg where Louis explained how this works in 1.6. See related article in wiki here: [[Xml-rpc changes in Joomla! 1.6]].&lt;br /&gt;
|-&lt;br /&gt;
|Upgrade to Mootools 1.2&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Louis Landry, Ercan Özkaya&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Javascript translation&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|This is implemented and finished. Take a look at JOpenID Javascript class and mod_login for details&lt;br /&gt;
|-&lt;br /&gt;
|New extension updater work&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Samuel  Moffatt&lt;br /&gt;
|New extension updater is implemented, but not finished yet.&lt;br /&gt;
|-&lt;br /&gt;
|Conversion of INI to JSON&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|We now use JSON format for storing parameters in the database. This is completed for core components.&lt;br /&gt;
|-&lt;br /&gt;
|Nested categories&lt;br /&gt;
|Alpha&lt;br /&gt;
|90%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Access control list (ACL)&lt;br /&gt;
|Alpha&lt;br /&gt;
|80%&lt;br /&gt;
|Hannes Papenberg, Louis Landry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|User management system&lt;br /&gt;
|Alpha&lt;br /&gt;
|75%&lt;br /&gt;
|&lt;br /&gt;
|The new com_members needs to be proof checked.&lt;br /&gt;
|-&lt;br /&gt;
|Documenting the triggers, finishing them&lt;br /&gt;
|&lt;br /&gt;
|10%&lt;br /&gt;
|Louis Landry, Rob Schley, Andrew Eddie&lt;br /&gt;
|The triggers for JForm need to be implemented in the respective extension, which has not happened yet. We need a plan for this one.&lt;br /&gt;
|-&lt;br /&gt;
|MVCing backend components&lt;br /&gt;
|&lt;br /&gt;
|90%&lt;br /&gt;
|&lt;br /&gt;
|Most of the back-end components have MVC file structure, but they are not fully MVC yet&lt;br /&gt;
|-&lt;br /&gt;
|Parameters for templates in the database&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|Especially the UI will take a lot of work, we might have to change the database for this one.&lt;br /&gt;
|-&lt;br /&gt;
|Add template parameter set to menu item creation&lt;br /&gt;
|&lt;br /&gt;
|10%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Refactoring parameters&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|&lt;br /&gt;
|A review of the current parameters and implementing new ones for the new category system.&lt;br /&gt;
|-&lt;br /&gt;
|Comments system&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|Louis Landry, Andrew Eddie, Rob Schley&lt;br /&gt;
|It will be donated by JXtended and will be added to trunk somewhere in the beta phase.&lt;br /&gt;
|-&lt;br /&gt;
|Hooks for external authentication systems&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|&lt;br /&gt;
|Need to be implemented in JUser and in the code where Usergroups are managed. Maybe we need a JUsergroupclass&lt;br /&gt;
|-&lt;br /&gt;
|Database driven install log&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Samuel Moffatt&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Convert all layouts to semantic and XHTML strict&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Ron Severdia&lt;br /&gt;
|There are some efforts going on for this. See the topic at http://tinyurl.com/qrb39k&lt;br /&gt;
|-&lt;br /&gt;
|Timezones, JDate and Datetime (gregorian, julian, shamsi, hijri, jewish, buddhist, ethiopian, chinese and french calendar)&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Refactoring all components to use JForm&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|Localising invalid token message&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|die(&#039;Invalid Token&#039;) will be replaced by jexit(JText::_(&#039;JInvalid_Token&#039;))&lt;br /&gt;
|-&lt;br /&gt;
|Ability to select multiple categories for some views&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|New sample content&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|Elin Waring&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Reformat translation files to adhere to proper INI specs&lt;br /&gt;
|&lt;br /&gt;
|75%&lt;br /&gt;
|Ole Ottosen, JM Simonet&lt;br /&gt;
|In 1.6 we will use PHP&#039;s own INI parser and will namespace strings. For example &amp;quot;Weblinks_Category_Fieldname&amp;quot; or &amp;quot;Config_Application_Name&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Migration script from 1.5 to 1.6&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|oc666&lt;br /&gt;
|[[Migration script from 1.5 to 1.6]]&lt;br /&gt;
|-&lt;br /&gt;
|Add module assignment to menu items creation&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ability to load additional layouts with a template&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Language switcher frontend]]&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Christophe Demko&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Development Working Group]]&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Joomla!_1.6_Development_Status&amp;diff=28869</id>
		<title>Archived:Joomla! 1.6 Development Status</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Joomla!_1.6_Development_Status&amp;diff=28869"/>
		<updated>2010-06-25T17:37:53Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This page is outdated and really needs an update.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 95%; padding:4px; width: auto;&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Task&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Blocker&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Contact person&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Implement JForm library&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Rob Schley, Andrew Eddie&lt;br /&gt;
|This library allows to create forms from XML definition files. See the introduction at http://tinyurl.com/psj6c6&lt;br /&gt;
|-&lt;br /&gt;
|Implement new event triggers&lt;br /&gt;
|Alpha&lt;br /&gt;
|60%&lt;br /&gt;
|&lt;br /&gt;
|onBeforeRender, triggers in JForm, onContentDisplay etc.&lt;br /&gt;
|-&lt;br /&gt;
|Implement new controller dispatcher&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|See the discussion at http://tinyurl.com/qlh5bg where Louis explained how this works in 1.6. See related article in wiki here: [[Xml-rpc changes in Joomla! 1.6]].&lt;br /&gt;
|-&lt;br /&gt;
|Upgrade to Mootools 1.2&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Louis Landry, Ercan Özkaya&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Javascript translation&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|This is implemented and finished. Take a look at JOpenID Javascript class and mod_login for details&lt;br /&gt;
|-&lt;br /&gt;
|New extension updater work&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|Samuel  Moffatt&lt;br /&gt;
|New extension updater is implemented, but not finished yet.&lt;br /&gt;
|-&lt;br /&gt;
|Conversion of INI to JSON&lt;br /&gt;
|Alpha&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|We now use JSON format for storing parameters in the database. This is completed for core components.&lt;br /&gt;
|-&lt;br /&gt;
|Nested categories&lt;br /&gt;
|Alpha&lt;br /&gt;
|90%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Access control list (ACL)&lt;br /&gt;
|Alpha&lt;br /&gt;
|80%&lt;br /&gt;
|Hannes Papenberg, Louis Landry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|User management system&lt;br /&gt;
|Alpha&lt;br /&gt;
|75%&lt;br /&gt;
|&lt;br /&gt;
|The new com_members needs to be proof checked.&lt;br /&gt;
|-&lt;br /&gt;
|Documenting the triggers, finishing them&lt;br /&gt;
|&lt;br /&gt;
|10%&lt;br /&gt;
|Louis Landry, Rob Schley, Andrew Eddie&lt;br /&gt;
|The triggers for JForm need to be implemented in the respective extension, which has not happened yet. We need a plan for this one.&lt;br /&gt;
|-&lt;br /&gt;
|MVCing backend components&lt;br /&gt;
|&lt;br /&gt;
|90%&lt;br /&gt;
|&lt;br /&gt;
|Most of the back-end components have MVC file structure, but they are not fully MVC yet&lt;br /&gt;
|-&lt;br /&gt;
|Parameters for templates in the database&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|Especially the UI will take a lot of work, we might have to change the database for this one.&lt;br /&gt;
|-&lt;br /&gt;
|Add template parameter set to menu item creation&lt;br /&gt;
|&lt;br /&gt;
|10%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Refactoring parameters&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|&lt;br /&gt;
|A review of the current parameters and implementing new ones for the new category system.&lt;br /&gt;
|-&lt;br /&gt;
|Comments system&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|Louis Landry, Andrew Eddie, Rob Schley&lt;br /&gt;
|It will be donated by JXtended and will be added to trunk somewhere in the beta phase.&lt;br /&gt;
|-&lt;br /&gt;
|Hooks for external authentication systems&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|&lt;br /&gt;
|Need to be implemented in JUser and in the code where Usergroups are managed. Maybe we need a JUsergroupclass&lt;br /&gt;
|-&lt;br /&gt;
|Database driven install log&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Samuel Moffatt&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Convert all layouts to semantic and XHTML strict&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Ron Severdia&lt;br /&gt;
|There are some efforts going on for this. See the topic at http://tinyurl.com/qrb39k&lt;br /&gt;
|-&lt;br /&gt;
|Timezones, JDate and Datetime (gregorian, julian, shamsi, hijri, jewish, buddhist, ethiopian, chinese and french calendar)&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Refactoring all components to use JForm&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|Localising invalid token message&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|die(&#039;Invalid Token&#039;) will be replaced by jexit(JText::_(&#039;JInvalid_Token&#039;))&lt;br /&gt;
|-&lt;br /&gt;
|Ability to select multiple categories for some views&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|New sample content&lt;br /&gt;
|&lt;br /&gt;
|80%&lt;br /&gt;
|Elin Waring&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Reformat translation files to adhere to proper INI specs&lt;br /&gt;
|&lt;br /&gt;
|75%&lt;br /&gt;
|Ole Ottosen, JM Simonet&lt;br /&gt;
|In 1.6 we will use PHP&#039;s own INI parser and will namespace strings. For example &amp;quot;Weblinks_Category_Fieldname&amp;quot; or &amp;quot;Config_Application_Name&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Migration script from 1.5 to 1.6&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|oc666&lt;br /&gt;
|[[Migration script from 1.5 to 1.6]]&lt;br /&gt;
|-&lt;br /&gt;
|Add module assignment to menu items creation&lt;br /&gt;
|&lt;br /&gt;
|100%&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ability to load additional layouts with a template&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Hannes Papenberg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Language switcher frontend]]&lt;br /&gt;
|&lt;br /&gt;
|0%&lt;br /&gt;
|Christophe Demko&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Development Working Group]]&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28779</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28779"/>
		<updated>2010-06-14T09:11:09Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.9.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $succes - Boolean to identify if the deletion was successful&lt;br /&gt;
  * $msg - Error message if delete failed ([http://api.joomla.org/Joomla-Framework/Error/JError.html JError] object detailing the error, if any)&lt;br /&gt;
&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28778</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28778"/>
		<updated>2010-06-14T09:10:03Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.9.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $succes - Boolean to identify if the deletion was successful&lt;br /&gt;
  * $msg - Error message if delete failed ([[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any)&lt;br /&gt;
&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28777</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28777"/>
		<updated>2010-06-14T09:02:08Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.8.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28776</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28776"/>
		<updated>2010-06-14T09:00:58Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.9 onAfterDeleteUser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28775</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28775"/>
		<updated>2010-06-14T09:00:54Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.8 onBeforeDeleteUser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28774</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28774"/>
		<updated>2010-06-14T09:00:46Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.6 onBeforeStoreUser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28773</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28773"/>
		<updated>2010-06-14T09:00:17Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.5 onLoginFailure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28772</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28772"/>
		<updated>2010-06-14T09:00:02Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.4 onAuthenticate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28771</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28771"/>
		<updated>2010-06-14T08:59:49Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.3 onLogoutUser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28770</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28770"/>
		<updated>2010-06-14T08:57:40Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2 onLoginUser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28636</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28636"/>
		<updated>2010-06-10T22:31:53Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.7.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStoreUser()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28634</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28634"/>
		<updated>2010-06-10T22:30:32Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.7.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  * $user - An associative array of the columns in the user table.&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  * $success - Boolean to identify if the store was successful&lt;br /&gt;
  * $msg - Error message if store failed&lt;br /&gt;
Note; The old values that was just updated, is not available here/afterwards. In that case use onBeforeStore()&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28631</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28631"/>
		<updated>2010-06-10T22:27:52Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.6.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
Note; You can retrieve the values that are about to get updated with JFactory::getUser();&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28630</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28630"/>
		<updated>2010-06-10T22:26:35Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
  * $user - an associative array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
  * $options - an associative array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28629</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28629"/>
		<updated>2010-06-10T22:25:27Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.3.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
  * $credentials - an associative array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
  * $options - an associative array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28628</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28628"/>
		<updated>2010-06-10T22:24:33Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.6.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Two parameters: $credentials, $options&lt;br /&gt;
* Credentials is an array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
* Options is an array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28627</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28627"/>
		<updated>2010-06-10T22:24:10Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.6.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Two parameters: $credentials, $options&lt;br /&gt;
* Credentials is an array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
* Options is an array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Two parameters:&lt;br /&gt;
  * $user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * $isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28626</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28626"/>
		<updated>2010-06-10T22:23:54Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.6.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Two parameters: $credentials, $options&lt;br /&gt;
* Credentials is an array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
* Options is an array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Two parameters:&lt;br /&gt;
  * user - An associative array of the columns in the user table (current values).&lt;br /&gt;
  * isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28624</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28624"/>
		<updated>2010-06-10T22:19:57Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.3.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Two parameters: $credentials, $options&lt;br /&gt;
* Credentials is an array containing these keys: [&amp;quot;username&amp;quot;] =&amp;gt; string, [&amp;quot;id&amp;quot;] =&amp;gt; int&lt;br /&gt;
* Options is an array containing this key: [&amp;quot;clientid&amp;quot;] =&amp;gt; int&lt;br /&gt;
&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Three parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *id - A unique identifier for this user.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28622</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28622"/>
		<updated>2010-06-10T22:15:46Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.1 Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
&amp;lt;del&amp;gt;If one plugin returns false, the entire authentication process fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Three parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *id - A unique identifier for this user.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28621</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28621"/>
		<updated>2010-06-10T22:15:02Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.3.1 Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
If one plugin returns false, the entire authentication process fails.&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. &amp;lt;del&amp;gt;If one plugin&lt;br /&gt;
returns false, the global logout fails.&amp;lt;/del&amp;gt; (needs verification)&lt;br /&gt;
&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Three parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *id - A unique identifier for this user.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28614</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28614"/>
		<updated>2010-06-10T22:06:25Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
If one plugin returns false, the entire authentication process fails.&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse] type (see link for array keys)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. If one plugin&lt;br /&gt;
returns false, the global logout fails.&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Three parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *id - A unique identifier for this user.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28611</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28611"/>
		<updated>2010-06-10T22:05:17Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
If one plugin returns false, the entire authentication process fails.&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [http://api.joomla.org/Joomla-Framework/User/JAuthenticationResponse.html JAuthenticateResponse]&lt;br /&gt;
 object type (see link for array variables)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. If one plugin&lt;br /&gt;
returns false, the global logout fails.&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Three parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *id - A unique identifier for this user.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28604</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28604"/>
		<updated>2010-06-10T21:58:36Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
If one plugin returns false, the entire authentication process fails.&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
*User is an array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] object type (see api for variables)&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. If one plugin&lt;br /&gt;
returns false, the global logout fails.&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Three parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *id - A unique identifier for this user.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28603</id>
		<title>J1.5:Plugin/Events/User</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Plugin/Events/User&amp;diff=28603"/>
		<updated>2010-06-10T21:58:07Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* 5.3.2.2 Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
==5.3 User Events for Plugin System==&lt;br /&gt;
&lt;br /&gt;
===5.3.1 Overview===&lt;br /&gt;
In a standard installation of Joomla! 1.5 we have several predefined events which, when triggered, call functions in the associated plugins. For more information on plugins,&lt;br /&gt;
look [[plugins:create_plugin|here]].&lt;br /&gt;
&lt;br /&gt;
The user events are divided into two parts. First we have the events used while &lt;br /&gt;
authentication of a user takes place:&lt;br /&gt;
  *onLoginUser&lt;br /&gt;
  *onLogoutUser&lt;br /&gt;
  *onAuthenticate&lt;br /&gt;
  *onAuthenticateFailure&lt;br /&gt;
  &lt;br /&gt;
Second we have the events triggered during user management:&lt;br /&gt;
  *onBeforeStoreUser&lt;br /&gt;
  *onAfterStoreUser&lt;br /&gt;
  *onBeforeDeleteUser&lt;br /&gt;
  *onAfterDeleteUser&lt;br /&gt;
&lt;br /&gt;
===5.3.2 onLoginUser===&lt;br /&gt;
====5.3.2.1 Description====&lt;br /&gt;
This event is triggered after the user is authenticated against the Joomla! user-base.&lt;br /&gt;
If one plugin returns false, the entire authentication process fails.&lt;br /&gt;
====5.3.2.2 Parameters====&lt;br /&gt;
Two parameters: $user, and $options.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*User is an array of the [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] object type&lt;br /&gt;
*Options is an options array containing these keys: [&amp;quot;remember&amp;quot;] =&amp;gt; bool, [&amp;quot;return&amp;quot;] =&amp;gt; string, [&amp;quot;entry_url&amp;quot;] =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
====5.3.2.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.2.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.2.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
===5.3.3 onLogoutUser===&lt;br /&gt;
====5.3.3.1 Description====&lt;br /&gt;
This event is triggered before the user is logged out of the system. If one plugin&lt;br /&gt;
returns false, the global logout fails.&lt;br /&gt;
====5.3.3.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.3.3 Return Value====&lt;br /&gt;
Boolean&lt;br /&gt;
====5.3.3.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/application.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.3.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.4 onAuthenticate===&lt;br /&gt;
====5.3.4.1 Description====&lt;br /&gt;
This event is triggered to verify that a set of login credentials is valid.&lt;br /&gt;
====5.3.4.2 Parameters====&lt;br /&gt;
Array of credentials. Structure:\\&lt;br /&gt;
[&#039;username&#039;]\\&lt;br /&gt;
[&#039;password&#039;]\\&lt;br /&gt;
Alternative authentication mechanisms can supply additional credentials.&lt;br /&gt;
&lt;br /&gt;
====5.3.4.3 Return Value====&lt;br /&gt;
An array of [[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] objects detailing the results of each called plugin, including success or failure.&lt;br /&gt;
====5.3.4.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
  *plugins/authentication/gmail.php&lt;br /&gt;
  *plugins/authentication/joomla.php&lt;br /&gt;
  *plugins/authentication/ldap.php&lt;br /&gt;
====5.3.4.5 Examples====&lt;br /&gt;
  *plugins/authentication/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.5 onLoginFailure===&lt;br /&gt;
====5.3.5.1 Description====&lt;br /&gt;
This event is triggered whenever a user authentication request is failed by any plugin.&lt;br /&gt;
====5.3.5.2 Parameters====&lt;br /&gt;
Two parameters. The credentials array for the user (see onAuthenticate), and the&lt;br /&gt;
[[references:joomla.framework:user:jauthenticateresponse|JAuthenticateResponse]] that caused the failure.&lt;br /&gt;
====5.3.5.3 Return Value====&lt;br /&gt;
Unknown. The return value appears to be ignored in any case.&lt;br /&gt;
====5.3.5.4 Used in files====&lt;br /&gt;
  *libraries/joomla/application/user/authentication.php&lt;br /&gt;
&lt;br /&gt;
===5.3.6 onBeforeStoreUser===&lt;br /&gt;
====5.3.6.1 Description====&lt;br /&gt;
This event is triggered before an update of a user record.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.6.2 Parameters====&lt;br /&gt;
Three parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *id - A unique identifier for this user.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
&lt;br /&gt;
====5.3.6.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.6.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.6.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
===5.3.7 onAfterStoreUser===&lt;br /&gt;
====5.3.7.1 Description====&lt;br /&gt;
This event is triggered after an update of a user record, or when a new user has been stored in the database.&lt;br /&gt;
&lt;br /&gt;
Password in $user array is already hashed at this point. You may retrieve the cleartext password using $_POST[&#039;password&#039;].&lt;br /&gt;
&lt;br /&gt;
====5.3.7.2 Parameters====&lt;br /&gt;
Four parameters:&lt;br /&gt;
  *user - An associative array of the columns in the user table.&lt;br /&gt;
  *isnew - Boolean to identify if this is a new user (true - insert) or an existing one (false - update)&lt;br /&gt;
  *success - Boolean to identify if the store was successful&lt;br /&gt;
  *msg - Error message if store failed&lt;br /&gt;
&lt;br /&gt;
====5.3.7.3 Return Value====&lt;br /&gt;
None&lt;br /&gt;
====5.3.7.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
====5.3.7.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.8 onBeforeDeleteUser===&lt;br /&gt;
====5.3.8.1 Description====&lt;br /&gt;
The event is triggered when a user is about to be deleted from the system.&lt;br /&gt;
====5.3.8.2 Parameters====&lt;br /&gt;
An associative array containing user information. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
====5.3.8.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.8.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.8.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;br /&gt;
&lt;br /&gt;
===5.3.9 onAfterDeleteUser===&lt;br /&gt;
====5.3.9.1 Description====&lt;br /&gt;
The event is triggered after a user has been deleted from the system.&lt;br /&gt;
====5.3.9.2 Parameters====&lt;br /&gt;
Three parameters: user information, delete result, and error result.&lt;br /&gt;
User information is an associative array. Structure:\\&lt;br /&gt;
[&#039;id&#039;]\\&lt;br /&gt;
Delete result is boolean true if the delete succeeded or an error message on failure.\\&lt;br /&gt;
Error result is a [[references:joomla.framework:utilities:jerror|JError]] object detailing the error, if any.&lt;br /&gt;
====5.3.9.3 Return Value====&lt;br /&gt;
None.&lt;br /&gt;
====5.3.9.4 Used in files====&lt;br /&gt;
  *libraries/joomla/user/user.php&lt;br /&gt;
  *plugins/user/joomla.php&lt;br /&gt;
====5.3.9.5 Examples====&lt;br /&gt;
  *plugins/user/example.php&lt;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_an_Authentication_Plugin_for_Joomla&amp;diff=26986</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=26986"/>
		<updated>2010-04-29T14:45:46Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* The Complete myauth.php File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
====== Creating an Authentication Plugin for Joomla! 1.5 ======&lt;br /&gt;
&lt;br /&gt;
===== Introduction =====&lt;br /&gt;
&lt;br /&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 HOWTO 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 plgAuthentication, 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 plgAuthenticationMyauth.&lt;br /&gt;
&lt;br /&gt;
The class will have two methods. The first method is the constructor. The second method is the onAuthenticate() 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 &#039;__construct&#039; 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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;function plgAuthenticationMyauth(&amp;amp; $subject) {&lt;br /&gt;
    parent::__construct($subject);&lt;br /&gt;
}&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 onAuthenticate() 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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db =&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; ($credentials[&#039;username&#039;] == strrev( $credentials[&#039;password&#039;] )))&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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db =&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; ($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;
}&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 - JAUTHENTICATE_STATUS_SUCCESS, JAUTHENTICATE_STATUS_FAILURE, and JAUTHENTICATE_STATUS_CANCEL. 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. 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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&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; $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;$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; 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; ($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;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice that we have to add &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;jimport(&#039;joomla.event.plugin&#039;);&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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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;lt;name&amp;gt;Authentication - Myauth&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;author&amp;gt;Joomla! Documentation Project&amp;lt;/author&amp;gt;&lt;br /&gt;
    &amp;lt;creationDate&amp;gt;May 30, 2007&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
    &amp;lt;copyright&amp;gt;(C) 2005 - 2007 Open Source Matters. All rights reserved.&amp;lt;/copyright&amp;gt;&lt;br /&gt;
    &amp;lt;license&amp;gt;http://www.gnu.org/copyleft/gpl.html GNU/GPL&amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;lt;authorEmail&amp;gt;ian.maclennan@help.joomla.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
    &amp;lt;authorUrl&amp;gt;www.joomla.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;1.5&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;An sample authentication plugin&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;filename plugin=&amp;quot;myauth&amp;quot;&amp;gt;myauth.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
    &amp;lt;/files&amp;gt;&lt;br /&gt;
    &amp;lt;params/&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&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 JAUTHENTICATE_STATUS_SUCCESS 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;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_an_Authentication_Plugin_for_Joomla&amp;diff=26985</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=26985"/>
		<updated>2010-04-29T14:39:54Z</updated>

		<summary type="html">&lt;p&gt;Littlejohn: /* The onAuthenticate() Method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
====== Creating an Authentication Plugin for Joomla! 1.5 ======&lt;br /&gt;
&lt;br /&gt;
===== Introduction =====&lt;br /&gt;
&lt;br /&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 HOWTO 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 plgAuthentication, 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 plgAuthenticationMyauth.&lt;br /&gt;
&lt;br /&gt;
The class will have two methods. The first method is the constructor. The second method is the onAuthenticate() 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 &#039;__construct&#039; 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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;function plgAuthenticationMyauth(&amp;amp; $subject) {&lt;br /&gt;
    parent::__construct($subject);&lt;br /&gt;
}&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 onAuthenticate() 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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db =&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; ($credentials[&#039;username&#039;] == strrev( $credentials[&#039;password&#039;] )))&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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db =&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; ($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;
}&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 - JAUTHENTICATE_STATUS_SUCCESS, JAUTHENTICATE_STATUS_FAILURE, and JAUTHENTICATE_STATUS_CANCEL. 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. 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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&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; $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    string    $username    Username for authentication&lt;br /&gt;
     * @param    string    $password    Password for authentication&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( $username, $password, &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; 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( $username );&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; ($username == strrev( $password )))&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;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice that we have to add &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;jimport(&#039;joomla.event.plugin&#039;);&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;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&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;lt;name&amp;gt;Authentication - Myauth&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;author&amp;gt;Joomla! Documentation Project&amp;lt;/author&amp;gt;&lt;br /&gt;
    &amp;lt;creationDate&amp;gt;May 30, 2007&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
    &amp;lt;copyright&amp;gt;(C) 2005 - 2007 Open Source Matters. All rights reserved.&amp;lt;/copyright&amp;gt;&lt;br /&gt;
    &amp;lt;license&amp;gt;http://www.gnu.org/copyleft/gpl.html GNU/GPL&amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;lt;authorEmail&amp;gt;ian.maclennan@help.joomla.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
    &amp;lt;authorUrl&amp;gt;www.joomla.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;1.5&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;An sample authentication plugin&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;files&amp;gt;&lt;br /&gt;
        &amp;lt;filename plugin=&amp;quot;myauth&amp;quot;&amp;gt;myauth.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
    &amp;lt;/files&amp;gt;&lt;br /&gt;
    &amp;lt;params/&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&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 JAUTHENTICATE_STATUS_SUCCESS 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;/div&gt;</summary>
		<author><name>Littlejohn</name></author>
	</entry>
</feed>