Exemple #1
0
 /**
  * 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));
         }
     }
 }
Exemple #3
0
 /**
  * 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));
             }
         }
     }
 }