function Roles::pre_render

Run before any fields are rendered.

This gives the handlers some time to set up before any handler has been rendered.

Parameters

$values: An array of all objects returned from the query.

Overrides FieldPluginBase::pre_render

File

drupal/core/modules/user/lib/Drupal/user/Plugin/views/field/Roles.php, line 38
Definition of Drupal\user\Plugin\views\field\Roles.

Class

Roles
Field handler to provide a list of roles.

Namespace

Drupal\user\Plugin\views\field

Code

function pre_render(&$values) {
  $uids = array();
  $this->items = array();
  foreach ($values as $result) {
    $uids[] = $this
      ->getValue($result);
  }
  if ($uids) {
    $roles = user_roles();
    $query = db_select('users_roles', 'u');
    $query
      ->fields('u', array(
      'uid',
      'rid',
    ));
    $query
      ->condition('u.rid', array_keys($roles));
    $query
      ->condition('u.uid', $uids);
    $result = $query
      ->execute();
    foreach ($result as $role) {
      $this->items[$role->uid][$role->rid]['role'] = check_plain($roles[$role->rid]
        ->label());
      $this->items[$role->uid][$role->rid]['rid'] = $role->rid;
    }

    // Sort the roles for each user by role weight.
    $ordered_roles = array_flip(array_keys($roles));
    foreach ($this->items as &$user_roles) {

      // Create an array of rids that the user has in the role weight order.
      $sorted_keys = array_intersect_key($ordered_roles, $user_roles);

      // Merge with the unsorted array of role information which has the
      // effect of sorting it.
      $user_roles = array_merge($sorted_keys, $user_roles);
    }
  }
}