diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php index ff3e962..f8e87a1 100644 --- a/core/modules/user/src/Entity/User.php +++ b/core/modules/user/src/Entity/User.php @@ -460,7 +460,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { // The name should not vary per language. The username is the visual // identifier for a user and needs to be consistent in all languages. - $fields['name'] = BaseFieldDefinition::create('string') + $fields['name'] = BaseFieldDefinition::create('user_name') ->setLabel(t('Name')) ->setDescription(t('The name of this user.')) ->setRequired(TRUE) diff --git a/core/modules/user/src/Plugin/Field/FieldType/UserNameItem.php b/core/modules/user/src/Plugin/Field/FieldType/UserNameItem.php new file mode 100644 index 0000000..89d8c29 --- /dev/null +++ b/core/modules/user/src/Plugin/Field/FieldType/UserNameItem.php @@ -0,0 +1,37 @@ +getEntity()->id() === 0) { + return FALSE; + } + return parent::isEmpty(); + } + +} diff --git a/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php b/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php index 12d4fa3..84eee45 100644 --- a/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php +++ b/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php @@ -49,6 +49,11 @@ public function validate($items, Constraint $constraint) { ) { $this->context->addViolation($constraint->illegalMessage); } + /* @var \Drupal\user\UserInterface $entity */ + $entity = $items->getEntity(); + if (!$entity->isAnonymous() && Unicode::strtolower($name) === 'anonymous') { + $this->context->addViolation($constraint->anonymousMessage); + } if (Unicode::strlen($name) > USERNAME_MAX_LENGTH) { $this->context->addViolation($constraint->tooLongMessage, array('%name' => $name, '%max' => USERNAME_MAX_LENGTH)); } diff --git a/core/modules/user/src/Tests/UserValidationTest.php b/core/modules/user/src/Tests/UserValidationTest.php index c099dc3..d77d80e 100644 --- a/core/modules/user/src/Tests/UserValidationTest.php +++ b/core/modules/user/src/Tests/UserValidationTest.php @@ -180,6 +180,13 @@ function testValidation() { $this->assertEqual(count($violations), 1); $this->assertEqual($violations[0]->getPropertyPath(), 'roles.1'); $this->assertEqual($violations[0]->getMessage(), t('The referenced entity (%entity_type: %name) does not exist.', array('%entity_type' => 'user_role', '%name' => 'unknown_role'))); + + $user->save(); + $user->set('name', 'anonymous'); + $violations = $user->validate(); + $this->assertEqual(count($violations), 1, 'Anonymous is a reserved username.'); + $this->assertEqual($violations[0]->getPropertyPath(), 'name'); + $this->assertEqual($violations[0]->getMessage(), 'Anonymous is a reserved username.'); } /** diff --git a/core/modules/user/user.install b/core/modules/user/user.install index df17388..dd55b49 100644 --- a/core/modules/user/user.install +++ b/core/modules/user/user.install @@ -70,7 +70,6 @@ function user_install() { ->create(array( 'uid' => 0, 'status' => 0, - 'name' => 'Anonymous' )) ->save();