From 2f52e5d9f36ec2a6140cd7d808342d7e23c5b089 Mon Sep 17 00:00:00 2001 From: slawkens Date: Sat, 9 May 2020 13:12:45 +0200 Subject: [PATCH] Fixes in create new character nick + fixed config.character_name_min/max_length being ignored in change_name.php (cherry picked from commit d148b71f0f7559029ac2e6afee0af2bd9493dc8a) --- system/libs/CreateCharacter.php | 17 ++++-------- system/libs/validator.php | 41 ++++++++++++++++------------ system/pages/account/change_name.php | 18 +++++------- 3 files changed, 35 insertions(+), 41 deletions(-) diff --git a/system/libs/CreateCharacter.php b/system/libs/CreateCharacter.php index 91eea3fb..8a57d604 100644 --- a/system/libs/CreateCharacter.php +++ b/system/libs/CreateCharacter.php @@ -26,21 +26,13 @@ class CreateCharacter if(empty($name)) $errors['name'] = 'Please enter a name for your character!'; else if(strlen($name) > $maxLength) - $errors['name'] = 'Name is too long. Max. lenght '.$maxLength.' letters.'; + $errors['name'] = 'Name is too long. Max. length '.$maxLength.' letters.'; else if(strlen($name) < $minLength) - $errors['name'] = 'Name is too short. Min. lenght '.$minLength.' letters.'; - elseif(preg_match('/ {2,}/', $name)) - $errors['name'] = 'Invalid character name format. Use only A-Z and numbers 0-9 and no double spaces.'; + $errors['name'] = 'Name is too short. Min. length '.$minLength.' letters.'; else { if(!admin() && !Validator::newCharacterName($name)) { $errors['name'] = Validator::getLastError(); } - - $exist = new OTS_Player(); - $exist->find($name); - if($exist->isLoaded()) { - $errors['name'] = 'Character with this name already exist.'; - } } if(empty($sex) && $sex != "0") @@ -122,7 +114,7 @@ class CreateCharacter return false; } - global $db, $twig; + global $db; if($sex == "0") $char_to_copy->setLookType(136); @@ -188,7 +180,7 @@ class CreateCharacter } $player->save(); - $player->setCustomField("created", time()); + $player->setCustomField('created', time()); $player = new OTS_Player(); $player->find($name); @@ -211,6 +203,7 @@ class CreateCharacter foreach($loaded_items_to_copy as $save_item) $db->query("INSERT INTO `player_items` (`player_id` ,`pid` ,`sid` ,`itemtype`, `count`, `attributes`) VALUES ('".$player->getId()."', '".$save_item['pid']."', '".$save_item['sid']."', '".$save_item['itemtype']."', '".$save_item['count']."', '".$save_item['attributes']."');"); + global $twig; $twig->display('success.html.twig', array( 'title' => 'Character Created', 'description' => 'The character ' . $name . ' has been created.
diff --git a/system/libs/validator.php b/system/libs/validator.php index 1daa7a8b..31dfd3a5 100644 --- a/system/libs/validator.php +++ b/system/libs/validator.php @@ -85,6 +85,12 @@ class Validator return false; } + if(preg_match('/ {2,}/', $name)) + { + self::$lastError = 'Invalid account name format. Use only A-Z and numbers 0-9 and no double spaces.'; + return false; + } + if(!preg_match("/[A-Z0-9]/i", $name)) { self::$lastError = 'Invalid account name format. Use only A-Z and numbers 0-9.'; @@ -179,13 +185,13 @@ class Validator $length = strlen($name); if($length < 3) { - self::$lastError = 'Character name is too short. Min. lenght 3 characters.'; + self::$lastError = 'Character name is too short. Min. length 3 characters.'; return false; } if($length > 25) { - self::$lastError = 'Character name is too long. Max. lenght 25 characters.'; + self::$lastError = 'Character name is too long. Max. length 25 characters.'; return false; } @@ -194,6 +200,13 @@ class Validator self::$lastError = "Invalid name format. Use only A-Z, spaces and '."; return false; } + + if(preg_match('/ {2,}/', $name)) + { + self::$lastError = 'Invalid character name format. Use only A-Z and numbers 0-9 and no double spaces.'; + return false; + } + if(!preg_match("/[A-z ']/", $name)) { self::$lastError = "Invalid name format. Use only A-Z, spaces and '."; @@ -216,7 +229,7 @@ class Validator $name_lower = strtolower($name); - $first_words_blocked = array('admin ', 'administrator ', 'gm ', 'cm ', 'god ','tutor ', "'", '-'); + $first_words_blocked = array('admin ', 'administrator ', 'gm ', 'cm ', 'god ','tutor '); foreach($first_words_blocked as $word) { if($word == substr($name_lower, 0, strlen($word))) { @@ -240,6 +253,12 @@ class Validator return false; } + if(preg_match('/ {2,}/', $name)) + { + self::$lastError = 'Invalid character name format. Use only A-Z and numbers 0-9 and no double spaces.'; + return false; + } + if(strtolower($config['lua']['serverName']) == $name_lower) { self::$lastError = 'Your name cannot be same as server name.'; return false; @@ -272,14 +291,6 @@ class Validator } } - for($i = 0; $i < $name_length; $i++) - { - if(isset($name_lower[$i - 1]) && $name_lower[$i - 1] == ' ' && isset($name_lower[$i + 1]) && $name_lower[$i + 1] == ' ') { - self::$lastError = 'Your name contains too many spaces.'; - return false; - } - } - $player = new OTS_Player(); $player->find($name); if($player->isLoaded()) { @@ -327,13 +338,7 @@ class Validator return false; } - if($name_length < 3 || $name_length > 28) { - self::$lastError = 'Your name cannot be shorter than 3 characters and longer than 28 characters.'; - return false; - } - - - if(!preg_match("/[A-z ']{3,28}/", $name)) { + if(!preg_match("/[A-z ']/", $name)) { self::$lastError = 'Your name containst illegal characters.'; return false; } diff --git a/system/pages/account/change_name.php b/system/pages/account/change_name.php index aec153e6..6771760b 100644 --- a/system/pages/account/change_name.php +++ b/system/pages/account/change_name.php @@ -21,19 +21,15 @@ else if($points < $config['account_change_character_name_points']) $errors[] = 'You need ' . $config['account_change_character_name_points'] . ' premium points to change name. You have '.$points.' premium points.'; + $minLength = config('character_name_min_length'); + $maxLength = config('character_name_max_length'); + if(empty($errors) && empty($name)) $errors[] = 'Please enter a new name for your character!'; - else if(strlen($name) > 25) - $errors[] = 'Name is too long. Max. lenght 25 letters.'; - else if(strlen($name) < 3) - $errors[] = 'Name is too short. Min. lenght 3 letters.'; - else { - $exist = new OTS_Player(); - $exist->find($name); - if($exist->isLoaded()) { - $errors[] = 'Character with this name already exist.'; - } - } + else if(strlen($name) > $maxLength) + $errors['name'] = 'Name is too long. Max. length '.$maxLength.' letters.'; + else if(strlen($name) < $minLength) + $errors['name'] = 'Name is too short. Min. length '.$minLength.' letters.'; if(empty($errors)) {