summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Pott2014-09-09 18:37:40 (GMT)
committerAlex Pott2014-09-09 18:37:40 (GMT)
commite32a11e76bbe8be639987e331fb8c7e647e0a5e7 (patch)
tree473b0f8f15b46fa1c13d3e8d8764a9e31a8ff2e7
parent4a4763289a7577bc1b1f226aac15ec0cd1567e2f (diff)
Issue #2110345 by mr.york, effulgentsia, Désiré, fgm, fago, pfrenssen, stefan.r, Berdir, Rajendar Reddy: Simplify validation constraint implementations for fields.
-rw-r--r--core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php6
-rw-r--r--core/modules/user/src/Entity/User.php4
-rw-r--r--core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraint.php2
-rw-r--r--core/modules/user/src/Plugin/Validation/Constraint/UserNameConstraintValidator.php5
-rw-r--r--core/modules/user/src/Plugin/Validation/Constraint/UserNameUnique.php2
-rw-r--r--core/modules/user/src/Plugin/Validation/Constraint/UserUniqueValidator.php14
-rw-r--r--core/modules/user/src/Tests/UserValidationTest.php8
-rw-r--r--core/modules/user/user.module4
8 files changed, 24 insertions, 21 deletions
diff --git a/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php b/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php
index 0bb45da..e47c371 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 79bdd73..eb46586 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -472,7 +472,7 @@ class User extends ContentEntityBase implements UserInterface {
->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 @@ class User extends ContentEntityBase implements UserInterface {
->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 8aba0cf..381d3cf 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 @@ use Symfony\Component\Validator\Constraint;
*
* @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 ffd4d82..5b788ca 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 d05d5a6..3c146f0 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 @@ use Symfony\Component\Validator\Constraint;
*
* @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 b98408a..1c65d06 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 36da033..958ef59 100644
--- a/core/modules/user/src/Tests/UserValidationTest.php
+++ b/core/modules/user/src/Tests/UserValidationTest.php
@@ -78,7 +78,7 @@ class UserValidationTest extends DrupalUnitTestBase {
$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 @@ class UserValidationTest extends DrupalUnitTestBase {
$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 @@ class UserValidationTest extends DrupalUnitTestBase {
$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 75777bb..e7afb5a 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -17,7 +17,7 @@ use Drupal\user\Entity\User;
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);