Commit ec03242b authored by alexpott's avatar alexpott

Issue #2385243 by aneek, subhojit777, iMiksu, spesic, deepakaryan1988, tohesi,...

Issue #2385243 by aneek, subhojit777, iMiksu, spesic, deepakaryan1988, tohesi, Petr Illek, Cottser, lauriii: Make core user fields available for twig templates
parent 796ca9a8
<?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");
}
}
......@@ -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()
*
......
{#
/**
* @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>
name: 'User Test theme'
type: theme
description: 'Theme for testing the available fields in user twig template'
version: VERSION
core: 8.x
......@@ -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];
......
......@@ -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()
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment