class UserListBuilder

Same name in other branches
  1. 9 core/modules/user/src/UserListBuilder.php \Drupal\user\UserListBuilder
  2. 8.9.x core/modules/user/src/UserListBuilder.php \Drupal\user\UserListBuilder
  3. 10 core/modules/user/src/UserListBuilder.php \Drupal\user\UserListBuilder

Defines a class to build a listing of user entities.

Hierarchy

Expanded class hierarchy of UserListBuilder

See also

\Drupal\user\Entity\User

File

core/modules/user/src/UserListBuilder.php, line 20

Namespace

Drupal\user
View source
class UserListBuilder extends EntityListBuilder {
    
    /**
     * The date formatter service.
     *
     * @var \Drupal\Core\Datetime\DateFormatterInterface
     */
    protected $dateFormatter;
    
    /**
     * The redirect destination service.
     *
     * @var \Drupal\Core\Routing\RedirectDestinationInterface
     */
    protected $redirectDestination;
    
    /**
     * Constructs a new UserListBuilder object.
     *
     * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
     *   The entity type definition.
     * @param \Drupal\Core\Entity\EntityStorageInterface $storage
     *   The entity storage class.
     * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
     *   The date formatter service.
     * @param \Drupal\Core\Routing\RedirectDestinationInterface $redirect_destination
     *   The redirect destination service.
     */
    public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, DateFormatterInterface $date_formatter, RedirectDestinationInterface $redirect_destination) {
        parent::__construct($entity_type, $storage);
        $this->dateFormatter = $date_formatter;
        $this->redirectDestination = $redirect_destination;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
        return new static($entity_type, $container->get('entity_type.manager')
            ->getStorage($entity_type->id()), $container->get('date.formatter'), $container->get('redirect.destination'));
    }
    
    /**
     * {@inheritdoc}
     */
    public function load() {
        $entity_query = $this->storage
            ->getQuery();
        $entity_query->accessCheck(TRUE);
        $entity_query->condition('uid', 0, '<>');
        $entity_query->pager(50);
        $header = $this->buildHeader();
        $entity_query->tableSort($header);
        $uids = $entity_query->execute();
        return $this->storage
            ->loadMultiple($uids);
    }
    
    /**
     * {@inheritdoc}
     */
    public function buildHeader() {
        $header = [
            'username' => [
                'data' => $this->t('Username'),
                'field' => 'name',
                'specifier' => 'name',
            ],
            'status' => [
                'data' => $this->t('Status'),
                'field' => 'status',
                'specifier' => 'status',
                'class' => [
                    RESPONSIVE_PRIORITY_LOW,
                ],
            ],
            'roles' => [
                'data' => $this->t('Roles'),
                'class' => [
                    RESPONSIVE_PRIORITY_LOW,
                ],
            ],
            'member_for' => [
                'data' => $this->t('Member for'),
                'field' => 'created',
                'specifier' => 'created',
                'sort' => 'desc',
                'class' => [
                    RESPONSIVE_PRIORITY_LOW,
                ],
            ],
            'access' => [
                'data' => $this->t('Last access'),
                'field' => 'access',
                'specifier' => 'access',
                'class' => [
                    RESPONSIVE_PRIORITY_LOW,
                ],
            ],
        ];
        return $header + parent::buildHeader();
    }
    
    /**
     * {@inheritdoc}
     */
    public function buildRow(EntityInterface $entity) {
        $row['username']['data'] = [
            '#theme' => 'username',
            '#account' => $entity,
        ];
        $row['status'] = $entity->isActive() ? $this->t('active') : $this->t('blocked');
        $roles = Role::loadMultiple($entity->getRoles());
        unset($roles[RoleInterface::ANONYMOUS_ID]);
        unset($roles[RoleInterface::AUTHENTICATED_ID]);
        $users_roles = array_map(fn(RoleInterface $role) => $role->label(), $roles);
        asort($users_roles);
        $row['roles']['data'] = [
            '#theme' => 'item_list',
            '#items' => $users_roles,
        ];
        $options = [
            'return_as_object' => TRUE,
        ];
        $row['member_for']['data'] = $this->dateFormatter
            ->formatTimeDiffSince($entity->getCreatedTime(), $options)
            ->toRenderable();
        $last_access = $this->dateFormatter
            ->formatTimeDiffSince($entity->getLastAccessedTime(), $options);
        if ($entity->getLastAccessedTime()) {
            $row['access']['data']['#markup'] = $last_access->getString();
            CacheableMetadata::createFromObject($last_access)->applyTo($row['access']['data']);
        }
        else {
            $row['access']['data']['#markup'] = $this->t('never');
        }
        return $row + parent::buildRow($entity);
    }
    
    /**
     * {@inheritdoc}
     */
    public function getOperations(EntityInterface $entity) {
        $operations = parent::getOperations($entity);
        if (isset($operations['edit'])) {
            $destination = $this->redirectDestination
                ->getAsArray();
            $operations['edit']['query'] = $destination;
        }
        return $operations;
    }
    
    /**
     * {@inheritdoc}
     */
    public function render() {
        $build = parent::render();
        $build['table']['#empty'] = $this->t('No people available.');
        return $build;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
EntityHandlerBase::$moduleHandler protected property The module handler to invoke hooks on. 5
EntityHandlerBase::moduleHandler protected function Gets the module handler. 5
EntityHandlerBase::setModuleHandler public function Sets the module handler for this handler.
EntityListBuilder::$entityType protected property Information about the entity type.
EntityListBuilder::$entityTypeId protected property The entity type ID.
EntityListBuilder::$limit protected property The number of entities to list per page, or FALSE to list all entities.
EntityListBuilder::$storage protected property The entity storage class. 2
EntityListBuilder::buildOperations public function Builds a renderable list of operation links for the entity. 2
EntityListBuilder::ensureDestination protected function Ensures that a destination is present on the given URL. 1
EntityListBuilder::getDefaultOperations protected function Gets this list&#039;s default operations. 3
EntityListBuilder::getEntityIds protected function Loads entity IDs using a pager sorted by the entity id. 4
EntityListBuilder::getEntityListQuery protected function Returns a query object for loading entity IDs from the storage.
EntityListBuilder::getStorage public function Gets the entity storage. Overrides EntityListBuilderInterface::getStorage 1
EntityListBuilder::getTitle protected function Gets the title of the page. 1
EntityListBuilder::SORT_KEY protected constant The entity key to sort the list by. 1
MessengerTrait::$messenger protected property The messenger. 16
MessengerTrait::messenger public function Gets the messenger. 16
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::getDestinationArray protected function Prepares a &#039;destination&#039; URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UserListBuilder::$dateFormatter protected property The date formatter service.
UserListBuilder::$redirectDestination protected property The redirect destination service. Overrides RedirectDestinationTrait::$redirectDestination
UserListBuilder::buildHeader public function Builds the header row for the entity listing. Overrides EntityListBuilder::buildHeader
UserListBuilder::buildRow public function Builds a row for an entity in the entity listing. Overrides EntityListBuilder::buildRow
UserListBuilder::createInstance public static function Instantiates a new instance of this entity handler. Overrides EntityListBuilder::createInstance
UserListBuilder::getOperations public function Provides an array of information to build a list of operation links. Overrides EntityListBuilder::getOperations
UserListBuilder::load public function Loads entities of this type from storage for listing. Overrides EntityListBuilder::load
UserListBuilder::render public function Builds the entity listing as renderable array for table.html.twig. Overrides EntityListBuilder::render
UserListBuilder::__construct public function Constructs a new UserListBuilder object. Overrides EntityListBuilder::__construct

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.