예제 #1
0
 /**
  * Generates new available username based on email address
  *
  * @param   string  $email  Email address or preferrd username
  * @return  string  Generated username
  */
 public function generateUsername($email)
 {
     $loginMaxLen = 32;
     $email = strtolower($email);
     $email = explode('@', $email);
     $local = $email[0];
     $domain = '';
     if (!empty($email[1])) {
         $domain = $email[1];
     }
     // strip bad characters
     $local = preg_replace("/[^A-Za-z0-9_\\.]/", '', $local);
     $domain = preg_replace("/[^A-Za-z0-9_\\.]/", '', $domain);
     // Try just the local part of an address
     $login = $local;
     // Make sure login username is no longer than max allowed by DB
     $login = substr($login, 0, $loginMaxLen);
     $logincheck = self::checkusername($login);
     if (Helpers\Utility::validlogin($login) && $logincheck['status'] == 'ok') {
         return $login;
     }
     // try full email address with @ replaced with '_'
     if (!empty($domain)) {
         $login = $local . '_' . $domain;
     }
     // Make sure login username is no longer than max allowed by DB
     $login = substr($login, 0, $loginMaxLen);
     $logincheck = self::checkusername($login);
     if (Helpers\Utility::validlogin($login) && $logincheck['status'] == 'ok') {
         return $login;
     }
     // generate username by simply appending a sequential number to local part of an address until there is an avilable username available
     for ($i = 1; true; $i++) {
         // Make sure login username is no longer than max allowed by DB
         $numberLen = strlen($i);
         $login = substr($local, 0, $loginMaxLen - $numberLen) . $i;
         $logincheck = self::checkusername($login);
         if (Helpers\Utility::validlogin($login) && $logincheck['status'] == 'ok') {
             return $login;
         }
     }
     return false;
 }