git-svn-id: https://192.168.0.254/svn/Proyectos.FundacionLQDVI_WebCongresos/trunk@2 94ccb1af-fd9d-d947-8d90-7f70ea60afc8
342 lines
7.1 KiB
PHP
342 lines
7.1 KiB
PHP
<?php
|
|
/**
|
|
* @version $Id: user.php 14401 2010-01-26 14:10:00Z louis $
|
|
* @package Joomla.Framework
|
|
* @subpackage Table
|
|
* @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();
|
|
|
|
/**
|
|
* Users table
|
|
*
|
|
* @package Joomla.Framework
|
|
* @subpackage Table
|
|
* @since 1.0
|
|
*/
|
|
class JTableUser extends JTable
|
|
{
|
|
/**
|
|
* 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;
|
|
|
|
/**
|
|
* 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;
|
|
|
|
/**
|
|
* @param database A database connector object
|
|
*/
|
|
function __construct( &$db )
|
|
{
|
|
parent::__construct( '#__users', 'id', $db );
|
|
|
|
//initialise
|
|
$this->id = 0;
|
|
$this->gid = 0;
|
|
$this->sendEmail = 0;
|
|
}
|
|
|
|
/**
|
|
* Validation and filtering
|
|
*
|
|
* @return boolean True is satisfactory
|
|
*/
|
|
function check()
|
|
{
|
|
jimport('joomla.mail.helper');
|
|
|
|
// Validate user information
|
|
if (trim( $this->name ) == '') {
|
|
$this->setError( JText::_( 'Please enter your name.' ) );
|
|
return false;
|
|
}
|
|
|
|
if (trim( $this->username ) == '') {
|
|
$this->setError( JText::_( 'Please enter a user name.') );
|
|
return false;
|
|
}
|
|
|
|
if (preg_match( "#[<>\"'%;()&]#i", $this->username) || strlen(utf8_decode($this->username )) < 2) {
|
|
$this->setError( JText::sprintf( 'VALID_AZ09', JText::_( 'Username' ), 2 ) );
|
|
return false;
|
|
}
|
|
|
|
if ((trim($this->email) == "") || ! JMailHelper::isEmailAddress($this->email) ) {
|
|
$this->setError( JText::_( 'WARNREG_MAIL' ) );
|
|
return false;
|
|
}
|
|
|
|
if ($this->registerDate == null) {
|
|
// Set the registration timestamp
|
|
$now =& JFactory::getDate();
|
|
$this->registerDate = $now->toMySQL();
|
|
}
|
|
|
|
|
|
// check for existing username
|
|
$query = 'SELECT id'
|
|
. ' FROM #__users '
|
|
. ' WHERE username = ' . $this->_db->Quote($this->username)
|
|
. ' AND id != '. (int) $this->id;
|
|
;
|
|
$this->_db->setQuery( $query );
|
|
$xid = intval( $this->_db->loadResult() );
|
|
if ($xid && $xid != intval( $this->id )) {
|
|
$this->setError( JText::_('WARNREG_INUSE'));
|
|
return false;
|
|
}
|
|
|
|
|
|
// check for existing email
|
|
$query = 'SELECT id'
|
|
. ' FROM #__users '
|
|
. ' WHERE email = '. $this->_db->Quote($this->email)
|
|
. ' AND id != '. (int) $this->id
|
|
;
|
|
$this->_db->setQuery( $query );
|
|
$xid = intval( $this->_db->loadResult() );
|
|
if ($xid && $xid != intval( $this->id )) {
|
|
$this->setError( JText::_( 'WARNREG_EMAIL_INUSE' ) );
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function store( $updateNulls=false )
|
|
{
|
|
$acl =& JFactory::getACL();
|
|
|
|
$section_value = 'users';
|
|
$k = $this->_tbl_key;
|
|
$key = $this->$k;
|
|
|
|
if ($key)
|
|
{
|
|
// existing record
|
|
$ret = $this->_db->updateObject( $this->_tbl, $this, $this->_tbl_key, $updateNulls );
|
|
|
|
// syncronise ACL
|
|
// single group handled at the moment
|
|
// trivial to expand to multiple groups
|
|
$object_id = $acl->get_object_id( $section_value, $this->$k, 'ARO' );
|
|
|
|
$groups = $acl->get_object_groups( $object_id, 'ARO' );
|
|
$acl->del_group_object( $groups[0], $section_value, $this->$k, 'ARO' );
|
|
$acl->add_group_object( $this->gid, $section_value, $this->$k, 'ARO' );
|
|
|
|
$acl->edit_object( $object_id, $section_value, $this->_db->getEscaped( $this->name ), $this->$k, 0, 0, 'ARO' );
|
|
}
|
|
else
|
|
{
|
|
// new record
|
|
$ret = $this->_db->insertObject( $this->_tbl, $this, $this->_tbl_key );
|
|
// syncronise ACL
|
|
$acl->add_object( $section_value, $this->name, $this->$k, null, null, 'ARO' );
|
|
$acl->add_group_object( $this->gid, $section_value, $this->$k, 'ARO' );
|
|
}
|
|
|
|
if( !$ret )
|
|
{
|
|
$this->setError( strtolower(get_class( $this ))."::". JText::_( 'store failed' ) ."<br />" . $this->_db->getErrorMsg() );
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
function delete( $oid=null )
|
|
{
|
|
$acl =& JFactory::getACL();
|
|
|
|
$k = $this->_tbl_key;
|
|
if ($oid) {
|
|
$this->$k = intval( $oid );
|
|
}
|
|
$aro_id = $acl->get_object_id( 'users', $this->$k, 'ARO' );
|
|
$acl->del_object( $aro_id, 'ARO', true );
|
|
|
|
$query = 'DELETE FROM '. $this->_tbl
|
|
. ' WHERE '. $this->_tbl_key .' = '. (int) $this->$k
|
|
;
|
|
$this->_db->setQuery( $query );
|
|
|
|
if ($this->_db->query()) {
|
|
// cleanup related data
|
|
|
|
// private messaging
|
|
$query = 'DELETE FROM #__messages_cfg'
|
|
. ' WHERE user_id = '. (int) $this->$k
|
|
;
|
|
$this->_db->setQuery( $query );
|
|
if (!$this->_db->query()) {
|
|
$this->setError( $this->_db->getErrorMsg() );
|
|
return false;
|
|
}
|
|
$query = 'DELETE FROM #__messages'
|
|
. ' WHERE user_id_to = '. (int) $this->$k
|
|
;
|
|
$this->_db->setQuery( $query );
|
|
if (!$this->_db->query()) {
|
|
$this->setError( $this->_db->getErrorMsg() );
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
} else {
|
|
$this->setError( $this->_db->getErrorMsg() );
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates last visit time of user
|
|
*
|
|
* @param int The timestamp, defaults to 'now'
|
|
* @return boolean False if an error occurs
|
|
*/
|
|
function setLastVisit( $timeStamp=null, $id=null )
|
|
{
|
|
// check for User ID
|
|
if (is_null( $id )) {
|
|
if (isset( $this )) {
|
|
$id = $this->id;
|
|
} else {
|
|
// do not translate
|
|
jexit( 'WARNMOSUSER' );
|
|
}
|
|
}
|
|
|
|
// if no timestamp value is passed to functon, than current time is used
|
|
$date =& JFactory::getDate($timeStamp);
|
|
|
|
// updates user lastvistdate field with date and time
|
|
$query = 'UPDATE '. $this->_tbl
|
|
. ' SET lastvisitDate = '.$this->_db->Quote($date->toMySQL())
|
|
. ' WHERE id = '. (int) $id
|
|
;
|
|
$this->_db->setQuery( $query );
|
|
if (!$this->_db->query()) {
|
|
$this->setError( $this->_db->getErrorMsg() );
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Overloaded bind function
|
|
*
|
|
* @access public
|
|
* @param array $hash named array
|
|
* @return null|string null is operation was satisfactory, otherwise returns an error
|
|
* @see JTable:bind
|
|
* @since 1.5
|
|
*/
|
|
|
|
function bind($array, $ignore = '')
|
|
{
|
|
if (key_exists( 'params', $array ) && is_array( $array['params'] )) {
|
|
$registry = new JRegistry();
|
|
$registry->loadArray($array['params']);
|
|
$array['params'] = $registry->toString();
|
|
}
|
|
|
|
return parent::bind($array, $ignore);
|
|
}
|
|
}
|