/** * 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; }