summaryrefslogtreecommitdiffstatshomepage
path: root/core/modules/user
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/user')
-rw-r--r--core/modules/user/src/AccountForm.php2
-rw-r--r--core/modules/user/src/Hook/UserRequirements.php1
-rw-r--r--core/modules/user/tests/modules/user_form_test/src/Hook/UserFormTestHooks.php11
-rw-r--r--core/modules/user/tests/src/Functional/UserEditTest.php17
-rw-r--r--core/modules/user/tests/src/Kernel/UserRequirementsTest.php18
5 files changed, 49 insertions, 0 deletions
diff --git a/core/modules/user/src/AccountForm.php b/core/modules/user/src/AccountForm.php
index 881244f6f53c..d0c5e8d2d9b2 100644
--- a/core/modules/user/src/AccountForm.php
+++ b/core/modules/user/src/AccountForm.php
@@ -402,6 +402,7 @@ abstract class AccountForm extends ContentEntityForm implements TrustedCallbackI
'name',
'pass',
'mail',
+ 'roles',
'timezone',
'langcode',
'preferred_langcode',
@@ -420,6 +421,7 @@ abstract class AccountForm extends ContentEntityForm implements TrustedCallbackI
'name',
'pass',
'mail',
+ 'roles',
'timezone',
'langcode',
'preferred_langcode',
diff --git a/core/modules/user/src/Hook/UserRequirements.php b/core/modules/user/src/Hook/UserRequirements.php
index f317ced58bc4..46155e55e3cb 100644
--- a/core/modules/user/src/Hook/UserRequirements.php
+++ b/core/modules/user/src/Hook/UserRequirements.php
@@ -49,6 +49,7 @@ class UserRequirements {
$query->addExpression('LOWER(mail)', 'lower_mail');
$query->isNotNull('mail');
$query->groupBy('lower_mail');
+ $query->groupBy('langcode');
$query->having('COUNT(uid) > :matches', [':matches' => 1]);
$conflicts = $query->countQuery()->execute()->fetchField();
diff --git a/core/modules/user/tests/modules/user_form_test/src/Hook/UserFormTestHooks.php b/core/modules/user/tests/modules/user_form_test/src/Hook/UserFormTestHooks.php
index f49008597f10..106199f413fe 100644
--- a/core/modules/user/tests/modules/user_form_test/src/Hook/UserFormTestHooks.php
+++ b/core/modules/user/tests/modules/user_form_test/src/Hook/UserFormTestHooks.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Drupal\user_form_test\Hook;
+use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Hook\Attribute\Hook;
/**
@@ -20,4 +21,14 @@ class UserFormTestHooks {
$form['access']['#value'] = \Drupal::currentUser()->hasPermission('cancel other accounts');
}
+ /**
+ * Implements hook_entity_base_field_info_alter().
+ */
+ #[Hook('entity_base_field_info_alter')]
+ public function entityBaseFieldInfoAlter(&$fields, EntityTypeInterface $entity_type): void {
+ if ($entity_type->id() === 'user' && \Drupal::keyvalue('user_form_test')->get('user_form_test_constraint_roles_edit')) {
+ $fields['roles']->addConstraint('FieldWidgetConstraint');
+ }
+ }
+
}
diff --git a/core/modules/user/tests/src/Functional/UserEditTest.php b/core/modules/user/tests/src/Functional/UserEditTest.php
index f9a8dfb1a75c..ff86fa249084 100644
--- a/core/modules/user/tests/src/Functional/UserEditTest.php
+++ b/core/modules/user/tests/src/Functional/UserEditTest.php
@@ -283,4 +283,21 @@ class UserEditTest extends BrowserTestBase {
$this->assertSession()->fieldEnabled('edit-status-1');
}
+ /**
+ * Tests constraint violations are triggered on the user account form.
+ */
+ public function testRolesValidation(): void {
+ $admin_user = $this->drupalCreateUser(['administer users']);
+ $this->drupalLogin($admin_user);
+ $this->drupalGet("user/" . $admin_user->id() . "/edit");
+ $this->submitForm([], 'Save');
+ $this->assertSession()->pageTextContains('The changes have been saved.');
+ \Drupal::keyvalue('user_form_test')->set('user_form_test_constraint_roles_edit', TRUE);
+ \Drupal::service('module_installer')->install(['entity_test', 'user_form_test']);
+ $this->drupalGet("user/" . $admin_user->id() . "/edit");
+ $this->submitForm([], 'Save');
+ $this->assertSession()->pageTextContains('Widget constraint has failed.');
+ $this->assertSession()->pageTextNotContains('The changes have been saved.');
+ }
+
}
diff --git a/core/modules/user/tests/src/Kernel/UserRequirementsTest.php b/core/modules/user/tests/src/Kernel/UserRequirementsTest.php
index 146ab9c8b904..746370a15d61 100644
--- a/core/modules/user/tests/src/Kernel/UserRequirementsTest.php
+++ b/core/modules/user/tests/src/Kernel/UserRequirementsTest.php
@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Drupal\Tests\user\Kernel;
use Drupal\KernelTests\KernelTestBase;
+use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\Tests\user\Traits\UserCreationTrait;
/**
@@ -70,4 +71,21 @@ class UserRequirementsTest extends KernelTestBase {
$this->assertArrayNotHasKey('conflicting emails', $output);
}
+ /**
+ * Tests that the requirements check does not flag user translations.
+ */
+ public function testTranslatedUserEmail(): void {
+ \Drupal::service('module_installer')->install(['language']);
+ ConfigurableLanguage::createFromLangcode('is')->save();
+
+ $output = $this->moduleHandler->invoke('user', 'runtime_requirements');
+ $this->assertArrayNotHasKey('conflicting emails', $output);
+
+ $user = $this->createUser([], 'User A', FALSE, ['mail' => 'unique@example.com']);
+ $user->addTranslation('is')->save();
+
+ $output = $this->moduleHandler->invoke('user', 'runtime_requirements');
+ $this->assertArrayNotHasKey('conflicting emails', $output);
+ }
+
}