Commit ec03242b authored by Alex Pott's avatar Alex Pott
Browse files

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
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
<?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");
  }

}
+1 −0
Original line number Diff line number Diff line
@@ -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()
 *
+32 −0
Original line number Diff line number Diff line
{#
/**
 * @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>
+5 −0
Original line number Diff line number Diff line
name: 'User Test theme'
type: theme
description: 'Theme for testing the available fields in user twig template'
version: VERSION
core: 8.x
+1 −0
Original line number Diff line number Diff line
@@ -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];
Loading