Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
CRAP | |
72.73% |
16 / 22 |
| ProtectedUserFieldConstraintValidator | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
14.92 | |
72.73% |
16 / 22 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| validate | |
100.00% |
1 / 1 |
10 | |
100.00% |
16 / 16 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\user\Plugin\Validation\Constraint\ProtectedUserFieldConstraintValidator. | |
| */ | |
| namespace Drupal\user\Plugin\Validation\Constraint; | |
| use Drupal\Core\DependencyInjection\ContainerInjectionInterface; | |
| use Drupal\Core\Session\AccountProxyInterface; | |
| use Drupal\user\UserStorageInterface; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| use Symfony\Component\Validator\Constraint; | |
| use Symfony\Component\Validator\ConstraintValidator; | |
| /** | |
| * Validates the ProtectedUserFieldConstraint constraint. | |
| */ | |
| class ProtectedUserFieldConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface { | |
| /** | |
| * User storage handler. | |
| * | |
| * @var \Drupal\user\UserStorageInterface | |
| */ | |
| protected $userStorage; | |
| /** | |
| * The current user. | |
| * | |
| * @var \Drupal\Core\Session\AccountProxyInterface | |
| */ | |
| protected $currentUser; | |
| /** | |
| * Constructs the object. | |
| * | |
| * @param \Drupal\user\UserStorageInterface $user_storage | |
| * The user storage handler. | |
| * @param \Drupal\Core\Session\AccountProxyInterface $current_user | |
| * The current user. | |
| */ | |
| public function __construct(UserStorageInterface $user_storage, AccountProxyInterface $current_user) { | |
| $this->userStorage = $user_storage; | |
| $this->currentUser = $current_user; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('entity.manager')->getStorage('user'), | |
| $container->get('current_user') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validate($items, Constraint $constraint) { | |
| if (!isset($items)) { | |
| return; | |
| } | |
| /* @var \Drupal\Core\Field\FieldItemListInterface $items */ | |
| $field = $items->getFieldDefinition(); | |
| /* @var \Drupal\user\UserInterface $account */ | |
| $account = $items->getEntity(); | |
| if (!isset($account) || !empty($account->_skipProtectedUserFieldConstraint)) { | |
| // Looks like we are validating a field not being part of a user, or the | |
| // constraint should be skipped, so do nothing. | |
| return; | |
| } | |
| // Only validate for existing entities and if this is the current user. | |
| if (!$account->isNew() && $account->id() == $this->currentUser->id()) { | |
| /* @var \Drupal\user\UserInterface $account_unchanged */ | |
| $account_unchanged = $this->userStorage | |
| ->loadUnchanged($account->id()); | |
| $changed = FALSE; | |
| // Special case for the password, it being empty means that the existing | |
| // password should not be changed, ignore empty password fields. | |
| $value = $items->value; | |
| if ($field->getName() != 'pass' || !empty($value)) { | |
| // Compare the values of the field this is being validated on. | |
| $changed = $items->getValue() != $account_unchanged->get($field->getName())->getValue(); | |
| } | |
| if ($changed && (!$account->checkExistingPassword($account_unchanged))) { | |
| $this->context->addViolation($constraint->message, array('%name' => $field->getLabel())); | |
| } | |
| } | |
| } | |
| } |