?
Path : /home/admin/domains/happytokorea.com/public_html_bk/promice/libraries/joomla/user/ |
Current File : /home/admin/domains/happytokorea.com/public_html_bk/promice/libraries/joomla/user/user.php |
<?php /** * @version $Id: user.php 14401 2010-01-26 14:10:00Z louis $ * @package Joomla.Framework * @subpackage User * @copyright Copyright (C) 2005 - 2010 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 * details. */ // Check to ensure this file is within the rest of the framework defined('JPATH_BASE') or die(); jimport( 'joomla.html.parameter'); /** * User class. Handles all application interaction with a user * * @package Joomla.Framework * @subpackage User * @since 1.5 */ class JUser extends JObject { /** * Unique id * @var int */ var $id = null; /** * The users real name (or nickname) * @var string */ var $name = null; /** * The login name * @var string */ var $username = null; /** * The email * @var string */ var $email = null; /** * MD5 encrypted password * @var string */ var $password = null; /** * Clear password, only available when a new password is set for a user * @var string */ var $password_clear = ''; /** * Description * @var string */ var $usertype = null; /** * Description * @var int */ var $block = null; /** * Description * @var int */ var $sendEmail = null; /** * The group id number * @var int */ var $gid = null; /** * Description * @var datetime */ var $registerDate = null; /** * Description * @var datetime */ var $lastvisitDate = null; /** * Description * @var string activation hash */ var $activation = null; /** * Description * @var string */ var $params = null; /** * Description * @var string integer */ var $aid = null; /** * Description * @var boolean */ var $guest = null; /** * User parameters * @var object */ var $_params = null; /** * Error message * @var string */ var $_errorMsg = null; /** * Constructor activating the default information of the language * * @access protected */ function __construct($identifier = 0) { // Create the user parameters object $this->_params = new JParameter( '' ); // Load the user if it exists if (!empty($identifier)) { $this->load($identifier); } else { //initialise $this->id = 0; $this->gid = 0; $this->sendEmail = 0; $this->aid = 0; $this->guest = 1; } } /** * Returns a reference to the global User object, only creating it if it * doesn't already exist. * * This method must be invoked as: * <pre> $user =& JUser::getInstance($id);</pre> * * @access public * @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. * @since 1.5 */ function &getInstance($id = 0) { static $instances; if (!isset ($instances)) { $instances = array (); } // Find the user id if(!is_numeric($id)) { jimport('joomla.user.helper'); if (!$id = JUserHelper::getUserId($id)) { JError::raiseWarning( 'SOME_ERROR_CODE', 'JUser::_load: User '.$id.' does not exist' ); $retval = false; return $retval; } } if (empty($instances[$id])) { $user = new JUser($id); $instances[$id] = $user; } return $instances[$id]; } /** * Method to get a parameter value * * @access public * @param string $key Parameter key * @param mixed $default Parameter default value * @return mixed The value or the default if it did not exist * @since 1.5 */ function getParam( $key, $default = null ) { return $this->_params->get( $key, $default ); } /** * Method to set a parameter * * @access public * @param string $key Parameter key * @param mixed $value Parameter value * @return mixed Set parameter value * @since 1.5 */ function setParam( $key, $value ) { return $this->_params->set( $key, $value ); } /** * Method to set a default parameter if it does not exist * * @access public * @param string $key Parameter key * @param mixed $value Parameter value * @return mixed Set parameter value * @since 1.5 */ function defParam( $key, $value ) { return $this->_params->def( $key, $value ); } /** * Method to check JUser object authorization against an access control * object and optionally an access extension object * * @access public * @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 * @since 1.5 */ function authorize( $acoSection, $aco, $axoSection = null, $axo = null ) { // the native calls (Check Mode 1) work on the user id, not the user type $acl = & JFactory::getACL(); $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 * * @access public * @param int $timestamp The timestamp, defaults to 'now' * @return boolean True on success * @since 1.5 */ function setLastVisit($timestamp=null) { // Create the user table object $table =& $this->getTable(); $table->load($this->id); 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. * * @access public * @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 * @since 1.5 */ function &getParameters($loadsetupfile = false, $path = null) { static $parampath; // Set a custom parampath if defined if( isset($path) ) { $parampath = $path; } // Set the default parampath if not set already if( !isset($parampath) ) { $parampath = JPATH_ADMINISTRATOR.DS.'components'.DS.'com_users'.DS.'models'; } if($loadsetupfile) { $type = str_replace(' ', '_', strtolower($this->usertype)); $file = $parampath.DS.$type.'.xml'; if(!file_exists($file)) { $file = $parampath.DS.'user.xml'; } $this->_params->loadSetupFile($file); } return $this->_params; } /** * Method to get the user parameters * * @access public * @param object The user parameters object * @since 1.5 */ function setParameters($params ) { $this->_params = $params; } /** * 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 * needed. * * @access public * @param string The user table name to be used * @param string The user table prefix to be used * @return object The user table object * @since 1.5 */ function &getTable( $type = null, $prefix = 'JTable' ) { static $tabletype; //Set the default tabletype; if(!isset($tabletype)) { $tabletype['name'] = 'user'; $tabletype['prefix'] = 'JTable'; } //Set a custom table type is defined if(isset($type)) { $tabletype['name'] = $type; $tabletype['prefix'] = $prefix; } // Create the user table object $table =& JTable::getInstance( $tabletype['name'], $tabletype['prefix'] ); return $table; } /** * Method to bind an associative array of data to a user object * * @access public * @param array $array The associative array to bind to the object * @return boolean True on success * @since 1.5 */ function bind(& $array) { jimport('joomla.user.helper'); // Lets check to see if the user is new or not if (empty($this->id)) { // Check the password and create the crypted password if (empty($array['password'])) { $array['password'] = JUserHelper::genRandomPassword(); $array['password2'] = $array['password']; } if ($array['password'] != $array['password2']) { $this->setError( JText::_( 'PASSWORD DO NOT MATCH.' ) ); return false; } $this->password_clear = JArrayHelper::getValue( $array, 'password', '', 'string' ); $salt = JUserHelper::genRandomPassword(32); $crypt = JUserHelper::getCryptedPassword($array['password'], $salt); $array['password'] = $crypt.':'.$salt; // Set the registration timestamp $now =& JFactory::getDate(); $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 ); } } else { // Updating an existing user if (!empty($array['password'])) { if ( $array['password'] != $array['password2'] ) { $this->setError( JText::_( 'PASSWORD DO NOT MATCH.' ) ); return false; } $this->password_clear = JArrayHelper::getValue( $array, 'password', '', 'string' ); $salt = JUserHelper::genRandomPassword(32); $crypt = JUserHelper::getCryptedPassword($array['password'], $salt); $array['password'] = $crypt.':'.$salt; } else { $array['password'] = $this->password; } } // TODO: this will be deprecated as of the ACL implementation $db =& JFactory::getDBO(); $gid = array_key_exists('gid', $array ) ? $array['gid'] : $this->get('gid'); $query = 'SELECT name' . ' FROM #__core_acl_aro_groups' . ' WHERE id = ' . (int) $gid ; $db->setQuery( $query ); $this->set( 'usertype', $db->loadResult()); if ( array_key_exists('params', $array) ) { $params = ''; $this->_params->bind($array['params']); if ( is_array($array['params']) ) { $params = $this->_params->toString(); } else { $params = $array['params']; } $this->params = $params; } // Bind the array if (!$this->setProperties($array)) { $this->setError("Unable to bind array to user object"); return false; } // Make sure its an integer $this->id = (int) $this->id; return true; } /** * Method to save the JUser object to the database * * @access public * @param boolean $updateOnly Save the object only if not a new user * @return boolean True on success * @since 1.5 */ function save( $updateOnly = false ) { // Create the user table object $table =& $this->getTable(); $this->params = $this->_params->toString(); $table->bind($this->getProperties()); // Check and store the object. if (!$table->check()) { $this->setError($table->getError()); return false; } // If user is made a Super Admin group and user is NOT a Super Admin $my =& JFactory::getUser(); if ( $this->get('gid') == 25 && $my->get('gid') != 25 ) { // disallow creation of Super Admin by non Super Admin users $this->setError(JText::_( 'WARNSUPERADMINCREATE' )); return false; } // 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 $this->setError(JText::_( 'WARNSUPERADMINCREATE' )); return false; } //are we creating a new user $isnew = !$this->id; // If we aren't allowed to create new users return if ($isnew && $updateOnly) { return true; } // Get the old user $old = new JUser($this->id); // Fire the onBeforeStoreUser event. JPluginHelper::importPlugin( 'user' ); $dispatcher =& JDispatcher::getInstance(); $dispatcher->trigger( 'onBeforeStoreUser', array( $old->getProperties(), $isnew ) ); //Store the user data in the database if (!$result = $table->store()) { $this->setError($table->getError()); } // Set the id for the JUser object in case we created a new user. if (empty($this->id)) { $this->id = $table->get( 'id' ); } // Fire the onAftereStoreUser event $dispatcher->trigger( 'onAfterStoreUser', array( $this->getProperties(), $isnew, $result, $this->getError() ) ); return $result; } /** * Method to delete the JUser object from the database * * @access public * @param boolean $updateOnly Save the object only if not a new user * @return boolean True on success * @since 1.5 */ function delete( ) { JPluginHelper::importPlugin( 'user' ); //trigger the onBeforeDeleteUser event $dispatcher =& JDispatcher::getInstance(); $dispatcher->trigger( 'onBeforeDeleteUser', array( $this->getProperties() ) ); // Create the user table object $table =& $this->getTable(); $result = false; if (!$result = $table->delete($this->id)) { $this->setError($table->getError()); } //trigger the onAfterDeleteUser event $dispatcher->trigger( 'onAfterDeleteUser', array( $this->getProperties(), $result, $this->getError()) ); return $result; } /** * Method to load a JUser object by user id number * * @access public * @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 * @since 1.5 */ function load($id) { // Create the user table object $table =& $this->getTable(); // Load the JUserModel object based on the user id or throw a warning. if(!$table->load($id)) { JError::raiseWarning( 'SOME_ERROR_CODE', 'JUser::_load: Unable to load user with id: '.$id ); return false; } /* * 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 $this->setProperties($table->getProperties()); return true; } }