diff --git a/core/modules/user/src/Tests/UserFieldsTest.php b/core/modules/user/src/Tests/UserFieldsTest.php new file mode 100644 index 0000000..f698937 --- /dev/null +++ b/core/modules/user/src/Tests/UserFieldsTest.php @@ -0,0 +1,56 @@ +installEntitySchema('user'); + + // Setup a test theme that prints the user's mail field. + \Drupal::service('theme_handler')->install(array('user_test_theme')); + \Drupal::theme()->setActiveTheme(\Drupal::service('theme.initialization')->initTheme('user_test_theme')); + // Clear the theme registry. + $this->container->set('theme.registry', NULL); + } + + /** + * Tests account's available fields. + */ + function testUserFields() { + // Create the user to test the user fields. + $user = User::create([ + 'name' => 'foobar', + 'mail' => 'foobar@example.com', + ]); + $build = user_view($user); + $output = \Drupal::service('renderer')->render($build); + $this->setRawContent($output); + $userEmail = $user->getEmail(); + $this->assertText($userEmail, "User's mail field is found in the twig template"); + } +} diff --git a/core/modules/user/templates/user.html.twig b/core/modules/user/templates/user.html.twig index b00a744..45c4ea0 100644 --- a/core/modules/user/templates/user.html.twig +++ b/core/modules/user/templates/user.html.twig @@ -17,6 +17,7 @@ * e.g. account.field_example.en, thus overriding any language negotiation * rule that was previously applied. * - attributes: HTML attributes for the container element. + * - user: A Drupal User entity. * * @see template_preprocess_user() * diff --git a/core/modules/user/tests/themes/user_test_theme/user.html.twig b/core/modules/user/tests/themes/user_test_theme/user.html.twig new file mode 100644 index 0000000..79dfc17 --- /dev/null +++ b/core/modules/user/tests/themes/user_test_theme/user.html.twig @@ -0,0 +1,32 @@ +{# +/** + * @file + * Theme override for testing presence all user data. + * + * This template is used when viewing a registered user's page, + * e.g., example.com/user/123. 123 being the user's ID. + * + * Available variables: + * - content: A list of content items. Use 'content' to print all content, or + * print a subset such as 'content.field_example'. + * - Field variables: For each field attached to the user a corresponding + * variable is defined; e.g., account.field_example has a variable + * 'field_example' defined. When needing to access a field's raw values, + * developers/themers are strongly encouraged to use these variables. + * Otherwise they will have to explicitly specify the desired field language, + * e.g. account.field_example.en, thus overriding any language negotiation + * rule that was previously applied. + * - attributes: HTML attributes for the container element. + * - user: A Drupal User entity. + * + * @see template_preprocess_user() + */ +#} + + {% if content %} + {{- content -}} + {% endif %} + {% if user %} +

{{- user.mail.value -}}

+ {% endif %} + diff --git a/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml b/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml new file mode 100644 index 0000000..817d265 --- /dev/null +++ b/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml @@ -0,0 +1,11 @@ +name: 'User Test theme' +type: theme +description: 'Theme for testing the available fields in user twig template' +version: VERSION +core: 8.x +stylesheets-remove: + - system.module.css +regions: + content: Content + left: Left + right: Right diff --git a/core/modules/user/user.module b/core/modules/user/user.module index adab776..6c84b20 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -1413,6 +1413,7 @@ function user_logout() { * - attributes: HTML attributes for the containing element. */ function template_preprocess_user(&$variables) { + $variables['user'] = $variables['elements']['#user']; // Helpful $content variable for templates. foreach (Element::children($variables['elements']) as $key) { $variables['content'][$key] = $variables['elements'][$key]; diff --git a/core/themes/classy/templates/user/user.html.twig b/core/themes/classy/templates/user/user.html.twig index 7d3add5..9ee9c0a 100644 --- a/core/themes/classy/templates/user/user.html.twig +++ b/core/themes/classy/templates/user/user.html.twig @@ -17,6 +17,7 @@ * e.g. account.field_example.en, thus overriding any language negotiation * rule that was previously applied. * - attributes: HTML attributes for the container element. + * - user: A Drupal User entity. * * @see template_preprocess_user() */