git-svn-id: https://192.168.0.254/svn/Proyectos.FundacionLQDVI_WebCongresos/trunk@2 94ccb1af-fd9d-d947-8d90-7f70ea60afc8
229 lines
6.5 KiB
PHP
229 lines
6.5 KiB
PHP
<?php
|
|
/**
|
|
* @version $Id: joomla.php 14401 2010-01-26 14:10:00Z louis $
|
|
* @package Joomla
|
|
* @subpackage JFramework
|
|
* @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 included in Joomla!
|
|
defined('_JEXEC') or die( 'Restricted access' );
|
|
|
|
jimport('joomla.plugin.plugin');
|
|
|
|
/**
|
|
* Joomla User plugin
|
|
*
|
|
* @package Joomla
|
|
* @subpackage JFramework
|
|
* @since 1.5
|
|
*/
|
|
class plgUserJoomla extends JPlugin
|
|
{
|
|
/**
|
|
* Constructor
|
|
*
|
|
* For php4 compatability we must not use the __constructor as a constructor for plugins
|
|
* because func_get_args ( void ) returns a copy of all passed arguments NOT references.
|
|
* This causes problems with cross-referencing necessary for the observer design pattern.
|
|
*
|
|
* @param object $subject The object to observe
|
|
* @param array $config An array that holds the plugin configuration
|
|
* @since 1.5
|
|
*/
|
|
function plgUserJoomla(& $subject, $config) {
|
|
parent::__construct($subject, $config);
|
|
}
|
|
|
|
/**
|
|
* Remove all sessions for the user name
|
|
*
|
|
* Method is called after user data is deleted from the database
|
|
*
|
|
* @param array holds the user data
|
|
* @param boolean true if user was succesfully stored in the database
|
|
* @param string message
|
|
*/
|
|
function onAfterDeleteUser($user, $succes, $msg)
|
|
{
|
|
if(!$succes) {
|
|
return false;
|
|
}
|
|
|
|
$db =& JFactory::getDBO();
|
|
$db->setQuery('DELETE FROM #__session WHERE userid = '.$db->Quote($user['id']));
|
|
$db->Query();
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* This method should handle any login logic and report back to the subject
|
|
*
|
|
* @access public
|
|
* @param array holds the user data
|
|
* @param array array holding options (remember, autoregister, group)
|
|
* @return boolean True on success
|
|
* @since 1.5
|
|
*/
|
|
function onLoginUser($user, $options = array())
|
|
{
|
|
jimport('joomla.user.helper');
|
|
|
|
$instance =& $this->_getUser($user, $options);
|
|
|
|
// if _getUser returned an error, then pass it back.
|
|
if (JError::isError( $instance )) {
|
|
return $instance;
|
|
}
|
|
|
|
// If the user is blocked, redirect with an error
|
|
if ($instance->get('block') == 1) {
|
|
return JError::raiseWarning('SOME_ERROR_CODE', JText::_('E_NOLOGIN_BLOCKED'));
|
|
}
|
|
|
|
// Get an ACL object
|
|
$acl =& JFactory::getACL();
|
|
|
|
// Get the user group from the ACL
|
|
if ($instance->get('tmp_user') == 1) {
|
|
$grp = new JObject;
|
|
// This should be configurable at some point
|
|
$grp->set('name', 'Registered');
|
|
} else {
|
|
$grp = $acl->getAroGroup($instance->get('id'));
|
|
}
|
|
|
|
//Authorise the user based on the group information
|
|
if(!isset($options['group'])) {
|
|
$options['group'] = 'USERS';
|
|
}
|
|
|
|
if(!$acl->is_group_child_of( $grp->name, $options['group'])) {
|
|
return JError::raiseWarning('SOME_ERROR_CODE', JText::_('E_NOLOGIN_ACCESS'));
|
|
}
|
|
|
|
//Mark the user as logged in
|
|
$instance->set( 'guest', 0);
|
|
$instance->set('aid', 1);
|
|
|
|
// Fudge Authors, Editors, Publishers and Super Administrators into the special access group
|
|
if ($acl->is_group_child_of($grp->name, 'Registered') ||
|
|
$acl->is_group_child_of($grp->name, 'Public Backend')) {
|
|
$instance->set('aid', 2);
|
|
}
|
|
|
|
//Set the usertype based on the ACL group name
|
|
$instance->set('usertype', $grp->name);
|
|
|
|
// Register the needed session variables
|
|
$session =& JFactory::getSession();
|
|
$session->set('user', $instance);
|
|
|
|
// Get the session object
|
|
$table = & JTable::getInstance('session');
|
|
$table->load( $session->getId() );
|
|
|
|
$table->guest = $instance->get('guest');
|
|
$table->username = $instance->get('username');
|
|
$table->userid = intval($instance->get('id'));
|
|
$table->usertype = $instance->get('usertype');
|
|
$table->gid = intval($instance->get('gid'));
|
|
|
|
$table->update();
|
|
|
|
// Hit the user last visit field
|
|
$instance->setLastVisit();
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* This method should handle any logout logic and report back to the subject
|
|
*
|
|
* @access public
|
|
* @param array holds the user data
|
|
* @param array array holding options (client, ...)
|
|
* @return object True on success
|
|
* @since 1.5
|
|
*/
|
|
function onLogoutUser($user, $options = array())
|
|
{
|
|
$my =& JFactory::getUser();
|
|
//Make sure we're a valid user first
|
|
if($user['id'] == 0 && !$my->get('tmp_user')) return true;
|
|
|
|
//Check to see if we're deleting the current session
|
|
if($my->get('id') == $user['id'])
|
|
{
|
|
// Hit the user last visit field
|
|
$my->setLastVisit();
|
|
|
|
// Destroy the php session for this user
|
|
$session =& JFactory::getSession();
|
|
$session->destroy();
|
|
} else {
|
|
// Force logout all users with that userid
|
|
$table = & JTable::getInstance('session');
|
|
$table->destroy($user['id'], $options['clientid']);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* This method will return a user object
|
|
*
|
|
* If options['autoregister'] is true, if the user doesn't exist yet he will be created
|
|
*
|
|
* @access public
|
|
* @param array holds the user data
|
|
* @param array array holding options (remember, autoregister, group)
|
|
* @return object A JUser object
|
|
* @since 1.5
|
|
*/
|
|
function &_getUser($user, $options = array())
|
|
{
|
|
$instance = new JUser();
|
|
if($id = intval(JUserHelper::getUserId($user['username']))) {
|
|
$instance->load($id);
|
|
return $instance;
|
|
}
|
|
|
|
//TODO : move this out of the plugin
|
|
jimport('joomla.application.component.helper');
|
|
$config = &JComponentHelper::getParams( 'com_users' );
|
|
$usertype = $config->get( 'new_usertype', 'Registered' );
|
|
|
|
$acl =& JFactory::getACL();
|
|
|
|
$instance->set( 'id' , 0 );
|
|
$instance->set( 'name' , $user['fullname'] );
|
|
$instance->set( 'username' , $user['username'] );
|
|
$instance->set( 'password_clear' , $user['password_clear'] );
|
|
$instance->set( 'email' , $user['email'] ); // Result should contain an email (check)
|
|
$instance->set( 'gid' , $acl->get_group_id( '', $usertype));
|
|
$instance->set( 'usertype' , $usertype );
|
|
|
|
//If autoregister is set let's register the user
|
|
$autoregister = isset($options['autoregister']) ? $options['autoregister'] : $this->params->get('autoregister', 1);
|
|
|
|
if($autoregister)
|
|
{
|
|
if(!$instance->save()) {
|
|
return JError::raiseWarning('SOME_ERROR_CODE', $instance->getError());
|
|
}
|
|
} else {
|
|
// No existing user and autoregister off, this is a temporary user.
|
|
$instance->set( 'tmp_user', true );
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
}
|