Skip to content

Commit

Permalink
Update joomla.php
Browse files Browse the repository at this point in the history
  • Loading branch information
sovainfo committed May 20, 2016
1 parent c91e113 commit eda2155
Showing 1 changed file with 1 addition and 55 deletions.
56 changes: 1 addition & 55 deletions plugins/user/joomla/joomla.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@
* @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

defined('_JEXEC') or die;

use Joomla\Registry\Registry;

/**
* Joomla User plugin
*
Expand All @@ -25,15 +22,13 @@ class PlgUserJoomla extends JPlugin
* @since 3.2
*/
protected $app;

/**
* Database object
*
* @var JDatabaseDriver
* @since 3.2
*/
protected $db;

/**
* Remove all sessions for the user name
*
Expand All @@ -53,11 +48,9 @@ public function onUserAfterDelete($user, $success, $msg)
{
return false;
}

$query = $this->db->getQuery(true)
->delete($this->db->quoteName('#__session'))
->where($this->db->quoteName('userid') . ' = ' . (int) $user['id']);

try
{
$this->db->setQuery($query)->execute();
Expand All @@ -66,10 +59,8 @@ public function onUserAfterDelete($user, $success, $msg)
{
return false;
}

return true;
}

/**
* Utility method to act on a user after it has been saved.
*
Expand All @@ -87,7 +78,6 @@ public function onUserAfterDelete($user, $success, $msg)
public function onUserAfterSave($user, $isnew, $success, $msg)
{
$mail_to_user = $this->params->get('mail_to_user', 1);

if ($isnew)
{
// TODO: Suck in the frontend registration emails here as well. Job for a rainy day.
Expand All @@ -97,29 +87,24 @@ public function onUserAfterSave($user, $isnew, $success, $msg)
{
$lang = JFactory::getLanguage();
$defaultLocale = $lang->getTag();

/**
* Look for user language. Priority:
* 1. User frontend language
* 2. User backend language
*/
$userParams = new Registry($user['params']);
$userLocale = $userParams->get('language', $userParams->get('admin_language', $defaultLocale));

if ($userLocale != $defaultLocale)
{
$lang->setLanguage($userLocale);
}

$lang->load('plg_user_joomla', JPATH_ADMINISTRATOR);

// Compute the mail subject.
$emailSubject = JText::sprintf(
'PLG_USER_JOOMLA_NEW_USER_EMAIL_SUBJECT',
$user['name'],
$config = $this->app->get('sitename')
);

// Compute the mail body.
$body_template = 'PLG_USER_JOOMLA_NEW_USER_EMAIL_BODY';

Expand All @@ -145,7 +130,7 @@ public function onUserAfterSave($user, $isnew, $success, $msg)
$user['username']
);
}

// Assemble the email data...the sexy way!
$mail = JFactory::getMailer()
->setSender(
Expand All @@ -157,13 +142,11 @@ public function onUserAfterSave($user, $isnew, $success, $msg)
->addRecipient($user['email'])
->setSubject($emailSubject)
->setBody($emailBody);

// Set application language back to default if we changed it
if ($userLocale != $defaultLocale)
{
$lang->setLanguage($defaultLocale);
}

if (!$mail->Send())
{
$this->app->enqueueMessage(JText::_('JERROR_SENDING_EMAIL'), 'warning');
Expand All @@ -176,7 +159,6 @@ public function onUserAfterSave($user, $isnew, $success, $msg)
// Existing user - nothing to do...yet.
}
}

/**
* This method should handle any login logic and report back to the subject
*
Expand All @@ -190,55 +172,43 @@ public function onUserAfterSave($user, $isnew, $success, $msg)
public function onUserLogin($user, $options = array())
{
$instance = $this->_getUser($user, $options);

// If _getUser returned an error, then pass it back.
if ($instance instanceof Exception)
{
return false;
}

// If the user is blocked, redirect with an error
if ($instance->get('block') == 1)
{
$this->app->enqueueMessage(JText::_('JERROR_NOLOGIN_BLOCKED'), 'warning');

return false;
}

// Authorise the user based on the group information
if (!isset($options['group']))
{
$options['group'] = 'USERS';
}

// Check the user can login.
$result = $instance->authorise($options['action']);

if (!$result)
{
$this->app->enqueueMessage(JText::_('JERROR_LOGIN_DENIED'), 'warning');

return false;
}

// Mark the user as logged in
$instance->set('guest', 0);

// Register the needed session variables
$session = JFactory::getSession();
$session->set('user', $instance);

// Check to see the the session already exists.
$this->app->checkSession();

// Update the user related fields for the Joomla sessions table.
$query = $this->db->getQuery(true)
->update($this->db->quoteName('#__session'))
->set($this->db->quoteName('guest') . ' = ' . $this->db->quote($instance->guest))
->set($this->db->quoteName('username') . ' = ' . $this->db->quote($instance->username))
->set($this->db->quoteName('userid') . ' = ' . (int) $instance->id)
->where($this->db->quoteName('session_id') . ' = ' . $this->db->quote($session->getId()));

try
{
$this->db->setQuery($query)->execute();
Expand All @@ -247,23 +217,18 @@ public function onUserLogin($user, $options = array())
{
return false;
}

// Hit the user last visit field
$instance->setLastVisit();

// Add "user state" cookie used for reverse caching proxies like Varnish, Nginx etc.
$conf = JFactory::getConfig();
$cookie_domain = $conf->get('cookie_domain', '');
$cookie_path = $conf->get('cookie_path', '/');

if ($this->app->isSite())
{
$this->app->input->cookie->set("joomla_user_state", "logged_in", 0, $cookie_path, $cookie_domain, 0);
}

return true;
}

/**
* This method should handle any logout logic and report back to the subject
*
Expand All @@ -278,33 +243,27 @@ public function onUserLogout($user, $options = array())
{
$my = JFactory::getUser();
$session = JFactory::getSession();

// 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'] && $options['clientid'] == $this->app->getClientId())
{
// Hit the user last visit field
$my->setLastVisit();

// Destroy the php session for this user
$session->destroy();
}

// Enable / Disable Forcing logout all users with same userid
$forceLogout = $this->params->get('forceLogout', 1);

if ($forceLogout)
{
$query = $this->db->getQuery(true)
->delete($this->db->quoteName('#__session'))
->where($this->db->quoteName('userid') . ' = ' . (int) $user['id'])
->where($this->db->quoteName('client_id') . ' = ' . (int) $options['clientid']);

try
{
$this->db->setQuery($query)->execute();
Expand All @@ -314,20 +273,16 @@ public function onUserLogout($user, $options = array())
return false;
}
}

// Delete "user state" cookie used for reverse caching proxies like Varnish, Nginx etc.
$conf = JFactory::getConfig();
$cookie_domain = $conf->get('cookie_domain', '');
$cookie_path = $conf->get('cookie_path', '/');

if ($this->app->isSite())
{
$this->app->input->cookie->set("joomla_user_state", "", time() - 86400, $cookie_path, $cookie_domain, 0);
}

return true;
}

/**
* This method will return a user object
*
Expand All @@ -344,32 +299,24 @@ protected function _getUser($user, $options = array())
{
$instance = JUser::getInstance();
$id = (int) JUserHelper::getUserId($user['username']);

if ($id)
{
$instance->load($id);

return $instance;
}

// TODO : move this out of the plugin
$config = JComponentHelper::getParams('com_users');

// Hard coded default to match the default value from com_users.
$defaultUserGroup = $config->get('new_usertype', 2);

$instance->set('id', 0);
$instance->set('name', $user['fullname']);
$instance->set('username', $user['username']);
$instance->set('password_clear', $user['password_clear']);

// Result should contain an email (check).
$instance->set('email', $user['email']);
$instance->set('groups', array($defaultUserGroup));

// 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())
Expand All @@ -382,7 +329,6 @@ protected function _getUser($user, $options = array())
// No existing user and autoregister off, this is a temporary user.
$instance->set('tmp_user', true);
}

return $instance;
}
}

0 comments on commit eda2155

Please sign in to comment.