Source code for file /joomla/user/user.php
Documentation is available at user.php
* @version $Id: user.php 11688 2009-03-13 02:05:56Z ian $
* @package Joomla.Framework
* @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant to the
* GNU General Public License, and as distributed it includes or is derivative
* of works licensed under the GNU General Public License or other free or open
* source software licenses. See COPYRIGHT.php for copyright notices and
// Check to ensure this file is within the rest of the framework
* User class. Handles all application interaction with a user
* @package Joomla.Framework
* The users real name (or nickname)
* Clear password, only available when a new password is set for a user
* @var string activation hash
* Constructor activating the default information of the language
// Create the user parameters object
// Load the user if it exists
if (!empty($identifier)) {
$this->load($identifier);
* Returns a reference to the global User object, only creating it if it
* This method must be invoked as:
* <pre> $user =& JUser::getInstance($id);</pre>
* @param int $id The user to load - Can be an integer or string - If string, it is converted to ID automatically.
* @return JUser The User object.
if (!isset
($instances)) {
if (empty($instances[$id])) {
* Method to get a parameter value
* @param string $key Parameter key
* @param mixed $default Parameter default value
* @return mixed The value or the default if it did not exist
function getParam( $key, $default =
null )
return $this->_params->get( $key, $default );
* Method to set a parameter
* @param string $key Parameter key
* @param mixed $value Parameter value
* @return mixed Set parameter value
return $this->_params->set( $key, $value );
* Method to set a default parameter if it does not exist
* @param string $key Parameter key
* @param mixed $value Parameter value
* @return mixed Set parameter value
return $this->_params->def( $key, $value );
* Method to check JUser object authorization against an access control
* object and optionally an access extension object
* @param string $acoSection The ACO section value
* @param string $aco The ACO value
* @param string $axoSection The AXO section value [optional]
* @param string $axo The AXO value [optional]
* @return boolean True if authorized
function authorize( $acoSection, $aco, $axoSection =
null, $axo =
null )
// the native calls (Check Mode 1) work on the user id, not the user type
$value =
$acl->getCheckMode() ==
1 ?
$this->id :
$this->usertype;
return $acl->acl_check( $acoSection, $aco, 'users', $value, $axoSection, $axo );
* Pass through method to the table for setting the last visit date
* @param int $timestamp The timestamp, defaults to 'now'
* @return boolean True on success
// Create the user table object
return $table->setLastVisit($timestamp);
* Method to get the user parameters
* This function tries to load an xml file based on the users usertype. The filename of the xml
* file is the same as the usertype. The functionals has a static variable to store the parameters
* setup file base path. You can call this function statically to set the base path if needed.
* @param boolean If true, loads the parameters setup file. Default is false.
* @param path Set the parameters setup file base path to be used to load the user parameters.
* @return object The user parameters object
// Set a custom parampath if defined
// Set the default parampath if not set already
if( !isset
($parampath) ) {
$parampath =
JPATH_ADMINISTRATOR.
DS.
'components'.
DS.
'com_users'.
DS.
'models';
$file =
$parampath.
DS.
$type.
'.xml';
$file =
$parampath.
DS.
'user.xml';
$this->_params->loadSetupFile($file);
* Method to get the user parameters
* @param object The user parameters object
* Method to get the user table object
* This function uses a static variable to store the table name of the user table to
* it instantiates. You can call this function statically to set the table name if
* @param string The user table name to be used
* @param string The user table prefix to be used
* @return object The user table object
function &getTable( $type =
null, $prefix =
'JTable' )
//Set the default tabletype;
$tabletype['name'] =
'user';
$tabletype['prefix'] =
'JTable';
//Set a custom table type is defined
$tabletype['name'] =
$type;
$tabletype['prefix'] =
$prefix;
// Create the user table object
* Method to bind an associative array of data to a user object
* @param array $array The associative array to bind to the object
* @return boolean True on success
// Lets check to see if the user is new or not
// Check the password and create the crypted password
if (empty($array['password'])) {
$array['password2'] =
$array['password'];
if ($array['password'] !=
$array['password2']) {
$array['password'] =
$crypt.
':'.
$salt;
// Set the registration timestamp
$this->set( 'registerDate', $now->toMySQL() );
// Check that username is not greater than 150 characters
$username =
$this->get( 'username' );
if ( strlen($username) >
150 )
$username =
substr( $username, 0, 150 );
$this->set( 'username', $username );
// Check that password is not greater than 100 characters
$password =
$this->get( 'password' );
if ( strlen($password) >
100 )
$password =
substr( $password, 0, 100 );
$this->set( 'password', $password );
// Updating an existing user
if (!empty($array['password']))
if ( $array['password'] !=
$array['password2'] ) {
$array['password'] =
$crypt.
':'.
$salt;
// TODO: this will be deprecated as of the ACL implementation
.
' FROM #__core_acl_aro_groups'
.
' WHERE id = ' . (int)
$gid
$this->set( 'usertype', $db->loadResult());
$this->_params->bind($array['params']);
$params =
$this->_params->toString();
$params =
$array['params'];
$this->setError("Unable to bind array to user object");
// Make sure its an integer
$this->id = (int)
$this->id;
* Method to save the JUser object to the database
* @param boolean $updateOnly Save the object only if not a new user
* @return boolean True on success
function save( $updateOnly =
false )
// Create the user table object
// Check and store the object.
// If user is made a Super Admin group and user is NOT a Super Admin
if ( $this->get('gid') ==
25 &&
$my->get('gid') !=
25 )
// disallow creation of Super Admin by non Super Admin users
// If user is made an Admin group and user is NOT a Super Admin
if ($this->get('gid') ==
24 &&
!($my->get('gid') ==
25 ||
($this->get('id') ==
$my->id &&
$my->get('gid') ==
24)))
// disallow creation of Admin by non Super Admin users
//are we creating a new user
// If we aren't allowed to create new users return
if ($isnew &&
$updateOnly) {
// Fire the onBeforeStoreUser event.
$dispatcher->trigger( 'onBeforeStoreUser', array( $old->getProperties(), $isnew ) );
//Store the user data in the database
if (!$result =
$table->store()) {
// Set the id for the JUser object in case we created a new user.
$this->id =
$table->get( 'id' );
// Fire the onAftereStoreUser event
$dispatcher->trigger( 'onAfterStoreUser', array( $this->getProperties(), $isnew, $result, $this->getError() ) );
* Method to delete the JUser object from the database
* @param boolean $updateOnly Save the object only if not a new user
* @return boolean True on success
//trigger the onBeforeDeleteUser event
$dispatcher->trigger( 'onBeforeDeleteUser', array( $this->getProperties() ) );
// Create the user table object
if (!$result =
$table->delete($this->id)) {
//trigger the onAfterDeleteUser event
* Method to load a JUser object by user id number
* @param mixed $identifier The user id of the user to load
* @param string $path Path to a parameters xml file
* @return boolean True on success
// Create the user table object
// Load the JUserModel object based on the user id or throw a warning.
JError::raiseWarning( 'SOME_ERROR_CODE', 'JUser::_load: Unable to load user with id: '.
$id );
* Set the user parameters using the default xml file. We might want to
* extend this in the future to allow for the ability to have custom
* user parameters, but for right now we'll leave it how it is.
$this->_params->loadINI($table->params);
// Assuming all is well at this point lets bind the data