diff --git a/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php b/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php index 0bb45da8e48c7f0980efc4d647843a187eaa0015..e47c371416dd307672be2175370dad470885484e 100644 --- a/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php +++ b/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php @@ -18,12 +18,12 @@ class CommentNameConstraintValidator extends ConstraintValidator { /** * {@inheritdoc} */ - public function validate($field_item, Constraint $constraint) { - $author_name = $field_item->value; + public function validate($items, Constraint $constraint) { + $author_name = $items->first()->value; if (isset($author_name) && $author_name !== '') { // Do not allow unauthenticated comment authors to use a name that is // taken by a registered user. - if ($field_item->getEntity()->getOwnerId() === 0) { + if ($items->getEntity()->getOwnerId() === 0) { // @todo Properly inject dependency https://drupal.org/node/2197029 $users = \Drupal::entityManager()->getStorage('user')->loadByProperties(array('name' => $author_name)); if (!empty($users)) { diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php index 79bdd737640d02d08e2c5aa981850e4c73209129..eb465862b0b31b4ded6a87691e6074494a0c4382 100644 --- a/core/modules/user/src/Entity/User.php +++ b/core/modules/user/src/Entity/User.php @@ -472,7 +472,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { ->setLabel(t('Name')) ->setDescription(t('The name of this user.')) ->setDefaultValue('') - ->setPropertyConstraints('value', array( + ->setConstraints(array( // No Length constraint here because the UserName constraint also covers // that. 'UserName' => array(), @@ -487,7 +487,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { ->setLabel(t('Email')) ->setDescription(t('The email of this user.')) ->setDefaultValue('') - ->setPropertyConstraints('value', array('UserMailUnique' => array())); + ->setConstraints(array('UserMailUnique' => array())); // @todo Convert to a text field in https://drupal.org/node/1548204. $fields['signature'] = BaseFieldDefinition::create('string') diff --git a/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraint.php b/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraint.php index 8aba0cf15c1e4d8c593218d189d5127dc68174db..381d3cf13cc40beab5903160b7c73f04009a166e 100644 --- a/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraint.php +++ b/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraint.php @@ -14,7 +14,7 @@ * * @Plugin( * id = "UserName", - * label = @Translation("User name", context = "Validation") + * label = @Translation("User name", context = "Validation"), * ) */ class UserNameConstraint extends Constraint { diff --git a/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php b/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php index ffd4d82017af85da77eb8eeeabd7b88cff094bc3..5b788ca7a2d4cf25c3164a6ab08b499717a67198 100644 --- a/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php +++ b/core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php @@ -18,11 +18,12 @@ class UserNameConstraintValidator extends ConstraintValidator { /** * {@inheritdoc} */ - public function validate($name, Constraint $constraint) { - if (!$name) { + public function validate($items, Constraint $constraint) { + if (!isset($items) || !$items->value) { $this->context->addViolation($constraint->emptyMessage); return; } + $name = $items->first()->value; if (substr($name, 0, 1) == ' ') { $this->context->addViolation($constraint->spaceBeginMessage); } diff --git a/core/modules/user/src/Plugin/Validation/Constraint/UserNameUnique.php b/core/modules/user/src/Plugin/Validation/Constraint/UserNameUnique.php index d05d5a64d386a7f38cf92d9c53bb49bddadcc67f..3c146f06c8a45c68e6f5fd1c751e602d71834a54 100644 --- a/core/modules/user/src/Plugin/Validation/Constraint/UserNameUnique.php +++ b/core/modules/user/src/Plugin/Validation/Constraint/UserNameUnique.php @@ -14,7 +14,7 @@ * * @Plugin( * id = "UserNameUnique", - * label = @Translation("User name unique", context = "Validation") + * label = @Translation("User name unique", context = "Validation"), * ) */ class UserNameUnique extends Constraint { diff --git a/core/modules/user/src/Plugin/Validation/Constraint/UserUniqueValidator.php b/core/modules/user/src/Plugin/Validation/Constraint/UserUniqueValidator.php index b98408a1633bc90b7cfdfd6615dadf230c8bc22c..1c65d06167129dc221e1ed86e0d7219d41c25342 100644 --- a/core/modules/user/src/Plugin/Validation/Constraint/UserUniqueValidator.php +++ b/core/modules/user/src/Plugin/Validation/Constraint/UserUniqueValidator.php @@ -18,20 +18,22 @@ class UserUniqueValidator extends ConstraintValidator { /** * {@inheritdoc} */ - public function validate($value, Constraint $constraint) { - $field = $this->context->getMetadata()->getTypedData()->getParent(); - $uid = $field->getParent()->id(); + public function validate($items, Constraint $constraint) { + if (!isset($items)) { + return; + } + $field_name = $items->getFieldDefinition()->getName(); $value_taken = (bool) \Drupal::entityQuery('user') // The UID could be NULL, so we cast it to 0 in that case. - ->condition('uid', (int) $uid, '<>') - ->condition($field->getName(), $value) + ->condition('uid', (int) $items->getEntity()->id(), '<>') + ->condition($field_name, db_like($items->first()->value), 'LIKE') ->range(0, 1) ->count() ->execute(); if ($value_taken) { - $this->context->addViolation($constraint->message, array("%value" => $value)); + $this->context->addViolation($constraint->message, array("%value" => $items->value)); } } } diff --git a/core/modules/user/src/Tests/UserValidationTest.php b/core/modules/user/src/Tests/UserValidationTest.php index 36da033430b18c4b5542e4255d021ee0d4365882..958ef59c17dfccbda45a6abbcf56440fa5d7e216 100644 --- a/core/modules/user/src/Tests/UserValidationTest.php +++ b/core/modules/user/src/Tests/UserValidationTest.php @@ -78,7 +78,7 @@ function testValidation() { $user->set('name', $name); $violations = $user->validate(); $this->assertEqual(count($violations), 1, 'Violation found when name is too long.'); - $this->assertEqual($violations[0]->getPropertyPath(), 'name.0.value'); + $this->assertEqual($violations[0]->getPropertyPath(), 'name'); $this->assertEqual($violations[0]->getMessage(), t('The username %name is too long: it must be %max characters or less.', array('%name' => $name, '%max' => 60))); // Create a second test user to provoke a name collision. @@ -90,7 +90,7 @@ function testValidation() { $user->set('name', 'existing'); $violations = $user->validate(); $this->assertEqual(count($violations), 1, 'Violation found on name collision.'); - $this->assertEqual($violations[0]->getPropertyPath(), 'name.0.value'); + $this->assertEqual($violations[0]->getPropertyPath(), 'name'); $this->assertEqual($violations[0]->getMessage(), t('The name %name is already taken.', array('%name' => 'existing'))); // Make the name valid. @@ -115,11 +115,11 @@ function testValidation() { $this->assertEqual($violations[1]->getPropertyPath(), 'mail.0.value'); $this->assertEqual($violations[1]->getMessage(), t('This value is not a valid email address.')); - // Provoke a email collision with an exsiting user. + // Provoke an email collision with an existing user. $user->set('mail', 'existing@example.com'); $violations = $user->validate(); $this->assertEqual(count($violations), 1, 'Violation found when email already exists.'); - $this->assertEqual($violations[0]->getPropertyPath(), 'mail.0.value'); + $this->assertEqual($violations[0]->getPropertyPath(), 'mail'); $this->assertEqual($violations[0]->getMessage(), t('The email address %mail is already taken.', array('%mail' => 'existing@example.com'))); $user->set('mail', NULL); diff --git a/core/modules/user/user.module b/core/modules/user/user.module index 75777bbe671e2aa0b3f0c7db454ee2e4d41bb278..e7afb5a4a846f345629fbde0eb874459d1cbc2c0 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -17,7 +17,7 @@ use Drupal\user\UserInterface; use Drupal\user\RoleInterface; use Drupal\Core\Template\Attribute; -use Drupal\Core\TypedData\DataDefinition; +use Drupal\Core\Field\BaseFieldDefinition; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Drupal\menu_link\Entity\MenuLink; @@ -332,7 +332,7 @@ function user_load_by_name($name) { * */ function user_validate_name($name) { - $definition = DataDefinition::create('string') + $definition = BaseFieldDefinition::create('string') ->addConstraint('UserName', array()); $data = \Drupal::typedDataManager()->create($definition); $data->setValue($name);