/** * Check if username and email exists in the drupal db * * @params $params array array of name and mail values * @params $errors array array of errors * @params $emailName string field label for the 'email' * * @return void * @static */ static function checkUserNameEmailExists(&$params, &$errors, $emailName = 'email') { $config =& CRM_Core_Config::singleton(); $isDrupal = ucfirst($config->userFramework) == 'Drupal' ? true : false; $isJoomla = ucfirst($config->userFramework) == 'Joomla' ? true : false; $dao =& new CRM_Core_DAO(); $name = $dao->escape($params['name']); $email = $dao->escape($params['mail']); if ($isDrupal) { _user_edit_validate(null, $params); $errors = form_get_errors(); if ($errors) { if (CRM_Utils_Array::value('name', $errors)) { $errors['cms_name'] = $errors['name']; } if (CRM_Utils_Array::value('mail', $errors)) { $errors[$emailName] = $errors['mail']; } // also unset drupal messages to avoid twice display of errors unset($_SESSION['messages']); } // drupal api sucks // do the name check manually $nameError = user_validate_name($params['name']); if ($nameError) { $errors['cms_name'] = $nameError; } $sql = "\nSELECT count(*)\n FROM {$config->userFrameworkUsersTableName}\n WHERE LOWER(name) = LOWER('{$name}')\n"; } elseif ($isJoomla) { //don't allow the special characters and min. username length is two //regex \\ to match a single backslash would become '/\\\\/' $isNotValid = (bool) preg_match('/[\\<|\\>|\\"|\'|\\%|\\;|\\(|\\)|\\&|\\\\|\\/]/im', $name); if ($isNotValid || strlen($name) < 2) { $errors['cms_name'] = ts("Your username contains invalid characters or is too short"); } $sql = "\nSELECT username, email\n FROM {$config->userFrameworkUsersTableName}\n WHERE (LOWER(username) = LOWER('{$name}')) OR (LOWER(email) = LOWER('{$email}'))\n"; } $db_cms = DB::connect($config->userFrameworkDSN); if (DB::isError($db_cms)) { die("Cannot connect to UF db via {$dsn}, " . $db_cms->getMessage()); } $query = $db_cms->query($sql); $row = $query->fetchRow(); if (!empty($row)) { if ($row[0] == $name) { $errors['cms_name'] = ts('The username %1 is already taken. Please select another username.', array(1 => $name)); } else { if ($row[1] == $email) { $errors['email-5'] = ts('This email %1 is already registered. Please select another email.', array(1 => $email)); } } } }
/** * Check if username and email exists in the drupal db * * @params $params array array of name and mail values * @params $errors array array of errors * @params $emailName string field label for the 'email' * * @return void */ function checkUserNameEmailExists(&$params, &$errors, $emailName = 'email') { $config = CRM_Core_Config::singleton(); $dao = new CRM_Core_DAO(); $name = $dao->escape(CRM_Utils_Array::value('name', $params)); $email = $dao->escape(CRM_Utils_Array::value('mail', $params)); _user_edit_validate(NULL, $params); $errors = form_get_errors(); if ($errors) { if (CRM_Utils_Array::value('name', $errors)) { $errors['cms_name'] = $errors['name']; } if (CRM_Utils_Array::value('mail', $errors)) { $errors[$emailName] = $errors['mail']; } // also unset drupal messages to avoid twice display of errors unset($_SESSION['messages']); } // drupal api sucks do the name check manually $nameError = user_validate_name($params['name']); if ($nameError) { $errors['cms_name'] = $nameError; } $sql = "\nSELECT name, mail\n FROM {$config->userFrameworkUsersTableName}\n WHERE (LOWER(name) = LOWER('{$name}')) OR (LOWER(mail) = LOWER('{$email}'))"; $db_cms = DB::connect($config->userFrameworkDSN); if (DB::isError($db_cms)) { die("Cannot connect to UF db via {$dsn}, " . $db_cms->getMessage()); } $query = $db_cms->query($sql); $row = $query->fetchRow(); if (!empty($row)) { $dbName = CRM_Utils_Array::value(0, $row); $dbEmail = CRM_Utils_Array::value(1, $row); if (strtolower($dbName) == strtolower($name)) { $errors['cms_name'] = ts('The username %1 is already taken. Please select another username.', array(1 => $name)); } if (strtolower($dbEmail) == strtolower($email)) { $errors[$emailName] = ts('This email %1 is already registered. Please select another email.', array(1 => $email)); } } }
/** * Check if username and email exists in the drupal db. * * @param array $params * Array of name and mail values. * @param array $errors * Array of errors. * @param string $emailName * Field label for the 'email'. */ public function checkUserNameEmailExists(&$params, &$errors, $emailName = 'email') { $config = CRM_Core_Config::singleton(); $dao = new CRM_Core_DAO(); $name = $dao->escape(CRM_Utils_Array::value('name', $params)); $email = $dao->escape(CRM_Utils_Array::value('mail', $params)); _user_edit_validate(NULL, $params); $errors = form_get_errors(); if ($errors) { if (!empty($errors['name'])) { $errors['cms_name'] = $errors['name']; } if (!empty($errors['mail'])) { $errors[$emailName] = $errors['mail']; } // also unset drupal messages to avoid twice display of errors unset($_SESSION['messages']); } // Do the name check manually. $nameError = user_validate_name($params['name']); if ($nameError) { $errors['cms_name'] = $nameError; } $sql = "\n SELECT name, mail\n FROM {users}\n WHERE (LOWER(name) = LOWER('{$name}')) OR (LOWER(mail) = LOWER('{$email}'))\n "; $result = db_query($sql); $row = db_fetch_array($result); if (!$row) { return; } $user = NULL; if (!empty($row)) { $dbName = CRM_Utils_Array::value('name', $row); $dbEmail = CRM_Utils_Array::value('mail', $row); if (strtolower($dbName) == strtolower($name)) { $errors['cms_name'] = ts('The username %1 is already taken. Please select another username.', array(1 => $name)); } if (strtolower($dbEmail) == strtolower($email)) { if (empty($email)) { $errors[$emailName] = ts('You cannot create an email account for a contact with no email', array(1 => $email)); } else { $errors[$emailName] = ts('This email %1 is already registered. Please select another email.', array(1 => $email)); } } } }