require_once 'DB.php';
$config = CRM_Core_Config::singleton();
+ $user = NULL;
if ($loadCMSBootstrap) {
$bootStrapParams = array();
jimport('joomla.application.component.helper');
jimport('joomla.database.table');
- $JUserTable = JTable::getInstance('User', 'JTable');
+ if ( !defined('JVERSION') ) {
+ $joomlaBase = dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))));
+ require $joomlaBase . '/libraries/cms/version/version.php';
+ $jversion = new JVersion;
+ define('JVERSION', $jversion->getShortVersion());
+ }
- $db = $JUserTable->getDbo();
- $query = $db->getQuery(TRUE);
- $query->select('id, username, email, password');
- $query->from($JUserTable->getTableName());
- $query->where('(LOWER(username) = LOWER(\'' . $name . '\')) AND (block = 0)');
- $db->setQuery($query, 0, 0);
- $users = $db->loadAssocList();
+ if ( version_compare(JVERSION, '2.5.18', 'lt') ||
+ ( version_compare(JVERSION, '3.0', 'ge') && version_compare(JVERSION, '3.2.2', 'lt') )
+ ) {
+ //old method for authenticating
+ $JUserTable = JTable::getInstance('User', 'JTable');
- $row = array();;
- if (count($users)) {
- $row = $users[0];
- }
+ $db = $JUserTable->getDbo();
+ $query = $db->getQuery(TRUE);
+ $query->select('id, username, email, password');
+ $query->from($JUserTable->getTableName());
+ $query->where('(LOWER(username) = LOWER(\'' . $name . '\')) AND (block = 0)');
+ $db->setQuery($query, 0, 0);
+ $users = $db->loadAssocList();
- $user = NULL;
- if (!empty($row)) {
- $dbPassword = CRM_Utils_Array::value('password', $row);
- $dbId = CRM_Utils_Array::value('id', $row);
- $dbEmail = CRM_Utils_Array::value('email', $row);
-
- // now check password
- if (strpos($dbPassword, ':') === FALSE) {
- if ($dbPassword != md5($password)) {
- return FALSE;
+ $row = array();;
+ if (count($users)) {
+ $row = $users[0];
+ }
+
+ if (!empty($row)) {
+ $dbPassword = CRM_Utils_Array::value('password', $row);
+ $dbId = CRM_Utils_Array::value('id', $row);
+ $dbEmail = CRM_Utils_Array::value('email', $row);
+
+ // now check password
+ if (strpos($dbPassword, ':') === FALSE) {
+ if ($dbPassword != md5($password)) {
+ return FALSE;
+ }
+ }
+ else {
+ list($hash, $salt) = explode(':', $dbPassword);
+ $cryptpass = md5($password . $salt);
+ if ($hash != $cryptpass) {
+ return FALSE;
+ }
}
}
- else {
- list($hash, $salt) = explode(':', $dbPassword);
- $cryptpass = md5($password . $salt);
- if ($hash != $cryptpass) {
- return FALSE;
+ }
+ else {
+ //new authentication method (J2.5.18/3.2.2 and greater)
+ // Get a database object
+ $db = JFactory::getDbo();
+ $query = $db->getQuery(TRUE);
+
+ $query->select('id, password');
+ $query->from('#__users');
+ $query->where('username='.$db->quote($name));
+
+ $db->setQuery( $query );
+ $result = $db->loadObject();
+
+ if ($result) {
+ $match = JUserHelper::verifyPassword($password, $result->password, $result->id);
+
+ if ($match === TRUE) {
+ $jUser = JUser::getInstance($result->id); // Bring this in line with the rest of the system
+ $dbId = $row['id'] = $result->id;
+ $dbEmail = $row['email'] = $jUser->email;
}
}
+ }
+ if (!empty($row)) {
CRM_Core_BAO_UFMatch::synchronizeUFMatch($user, $dbId, $dbEmail, 'Joomla');
$contactID = CRM_Core_BAO_UFMatch::getContactId($dbId);
if (!$contactID) {