|
@@ -604,26 +604,44 @@ function resetPassword($memID, $username = null)
|
|
|
* @param string $username
|
|
|
* @return string Returns null if fine
|
|
|
*/
|
|
|
-function validateUsername($memID, $username)
|
|
|
+function validateUsername($memID, $username, $return_error = false, $check_reserved_name = true)
|
|
|
{
|
|
|
- global $sourcedir, $txt;
|
|
|
+ global $sourcedir, $txt, $smcFunc, $user_info;
|
|
|
+
|
|
|
+ $errors = array();
|
|
|
+
|
|
|
+ // Don't use too long a name.
|
|
|
+ if ($smcFunc['strlen']($username) > 25)
|
|
|
+ $errors[] = array('lang', 'error_long_name');
|
|
|
|
|
|
// No name?! How can you register with no name?
|
|
|
if ($username == '')
|
|
|
- fatal_lang_error('need_username', false);
|
|
|
+ $errors[] = array('lang', 'need_username');
|
|
|
|
|
|
// Only these characters are permitted.
|
|
|
if (in_array($username, array('_', '|')) || preg_match('~[<>&"\'=\\\\]~', preg_replace('~&#(?:\\d{1,7}|x[0-9a-fA-F]{1,6});~', '', $username)) != 0 || strpos($username, '[code') !== false || strpos($username, '[/code') !== false)
|
|
|
- fatal_lang_error('error_invalid_characters_username', false);
|
|
|
+ $errors[] = array('lang', 'error_invalid_characters_username');
|
|
|
|
|
|
if (stristr($username, $txt['guest_title']) !== false)
|
|
|
- fatal_lang_error('username_reserved', true, array($txt['guest_title']));
|
|
|
+ $errors[] = array('lang', 'username_reserved', 'general', array($txt['guest_title']));
|
|
|
+
|
|
|
+ if ($check_reserved_name)
|
|
|
+ {
|
|
|
+ require_once($sourcedir . '/Subs-Members.php');
|
|
|
+ if (isReservedName($username, $memID, false))
|
|
|
+ $errors[] = array('done', '(' . htmlspecialchars($username) . ') ' . $txt['name_in_use']);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($return_error)
|
|
|
+ return $errors;
|
|
|
+ elseif (empty($errors))
|
|
|
+ return null;
|
|
|
|
|
|
- require_once($sourcedir . '/Subs-Members.php');
|
|
|
- if (isReservedName($username, $memID, false))
|
|
|
- fatal_error('(' . htmlspecialchars($username) . ') ' . $txt['name_in_use'], false);
|
|
|
+ loadLanguage('Errors');
|
|
|
+ $error = $errors[0];
|
|
|
|
|
|
- return null;
|
|
|
+ $message = $error[0] == 'lang' ? (empty($error[3]) ? $txt[$error[1]] : vsprintf($txt[$error[1]], $error[3])) : $error[1];
|
|
|
+ fatal_error($message, empty($error[2]) || $user_info['is_admin'] ? false : $error[2]);
|
|
|
}
|
|
|
|
|
|
/**
|