summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Pott2015-06-09 00:15:09 +0100
committerAlex Pott2015-06-09 00:15:09 +0100
commitec03242ba3daafa657b19a9fc0dd040fa02a87dc (patch)
tree578ec7acd89afac49d35e987273662cb6bc60288
parent796ca9a864f3de3c1378f0f73aff4a69114526f6 (diff)
Issue #2385243 by aneek, subhojit777, iMiksu, spesic, deepakaryan1988, tohesi, Petr Illek, Cottser, lauriii: Make core user fields available for twig templates
-rw-r--r--core/modules/user/src/Tests/UserFieldsTest.php57
-rw-r--r--core/modules/user/templates/user.html.twig1
-rw-r--r--core/modules/user/tests/themes/user_test_theme/user.html.twig32
-rw-r--r--core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml5
-rw-r--r--core/modules/user/user.module1
-rw-r--r--core/themes/classy/templates/user/user.html.twig1
6 files changed, 97 insertions, 0 deletions
diff --git a/core/modules/user/src/Tests/UserFieldsTest.php b/core/modules/user/src/Tests/UserFieldsTest.php
new file mode 100644
index 0000000..50564d0
--- /dev/null
+++ b/core/modules/user/src/Tests/UserFieldsTest.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\user\Tests\UserFieldsTest.
+ */
+
+namespace Drupal\user\Tests;
+
+use Drupal\user\Entity\User;
+use Drupal\simpletest\KernelTestBase;
+
+/**
+ * Tests available user fields in twig.
+ *
+ * @group user
+ */
+class UserFieldsTest extends KernelTestBase {
+
+ /**
+ * Modules to enable.
+ *
+ * @var array
+ */
+ public static $modules = ['user', 'system'];
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function setUp() {
+ parent::setUp();
+ $this->installEntitySchema('user');
+
+ // Set up 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..715a79e
--- /dev/null
+++ b/core/modules/user/tests/themes/user_test_theme/user.html.twig
@@ -0,0 +1,32 @@
+{#
+/**
+ * @file
+ * Theme override for testing the presence of 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()
+ */
+#}
+<article{{ attributes.addClass('profile') }}>
+ {% if content %}
+ {{ content }}
+ {% endif %}
+ {% if user %}
+ <p>{{ user.mail.value }}</p>
+ {% endif %}
+</article>
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..79a62e8
--- /dev/null
+++ b/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml
@@ -0,0 +1,5 @@
+name: 'User Test theme'
+type: theme
+description: 'Theme for testing the available fields in user twig template'
+version: VERSION
+core: 8.x
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index f909d62..f2c2414 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -1428,6 +1428,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()
*/