Chris@0: dateFormatter = $date_formatter; Chris@0: $this->redirectDestination = $redirect_destination; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { Chris@0: return new static( Chris@0: $entity_type, Chris@18: $container->get('entity_type.manager')->getStorage($entity_type->id()), Chris@0: $container->get('date.formatter'), Chris@0: $container->get('redirect.destination') Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function load() { Chris@0: $entity_query = $this->storage->getQuery(); Chris@0: $entity_query->condition('uid', 0, '<>'); Chris@0: $entity_query->pager(50); Chris@0: $header = $this->buildHeader(); Chris@0: $entity_query->tableSort($header); Chris@0: $uids = $entity_query->execute(); Chris@0: return $this->storage->loadMultiple($uids); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function buildHeader() { Chris@0: $header = [ Chris@0: 'username' => [ Chris@0: 'data' => $this->t('Username'), Chris@0: 'field' => 'name', Chris@0: 'specifier' => 'name', Chris@0: ], Chris@0: 'status' => [ Chris@0: 'data' => $this->t('Status'), Chris@0: 'field' => 'status', Chris@0: 'specifier' => 'status', Chris@0: 'class' => [RESPONSIVE_PRIORITY_LOW], Chris@0: ], Chris@0: 'roles' => [ Chris@0: 'data' => $this->t('Roles'), Chris@0: 'class' => [RESPONSIVE_PRIORITY_LOW], Chris@0: ], Chris@0: 'member_for' => [ Chris@0: 'data' => $this->t('Member for'), Chris@0: 'field' => 'created', Chris@0: 'specifier' => 'created', Chris@0: 'sort' => 'desc', Chris@0: 'class' => [RESPONSIVE_PRIORITY_LOW], Chris@0: ], Chris@0: 'access' => [ Chris@0: 'data' => $this->t('Last access'), Chris@0: 'field' => 'access', Chris@0: 'specifier' => 'access', Chris@0: 'class' => [RESPONSIVE_PRIORITY_LOW], Chris@0: ], Chris@0: ]; Chris@0: return $header + parent::buildHeader(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function buildRow(EntityInterface $entity) { Chris@0: $row['username']['data'] = [ Chris@0: '#theme' => 'username', Chris@0: '#account' => $entity, Chris@0: ]; Chris@0: $row['status'] = $entity->isActive() ? $this->t('active') : $this->t('blocked'); Chris@0: Chris@0: $roles = user_role_names(TRUE); Chris@0: unset($roles[RoleInterface::AUTHENTICATED_ID]); Chris@0: $users_roles = []; Chris@0: foreach ($entity->getRoles() as $role) { Chris@0: if (isset($roles[$role])) { Chris@0: $users_roles[] = $roles[$role]; Chris@0: } Chris@0: } Chris@0: asort($users_roles); Chris@0: $row['roles']['data'] = [ Chris@0: '#theme' => 'item_list', Chris@0: '#items' => $users_roles, Chris@0: ]; Chris@0: $options = [ Chris@0: 'return_as_object' => TRUE, Chris@0: ]; Chris@0: $row['member_for']['data'] = $this->dateFormatter->formatTimeDiffSince($entity->getCreatedTime(), $options)->toRenderable(); Chris@0: $last_access = $this->dateFormatter->formatTimeDiffSince($entity->getLastAccessedTime(), $options); Chris@0: Chris@0: if ($entity->getLastAccessedTime()) { Chris@0: $row['access']['data']['#markup'] = $last_access->getString(); Chris@0: CacheableMetadata::createFromObject($last_access)->applyTo($row['access']['data']); Chris@0: } Chris@0: else { Chris@0: $row['access']['data']['#markup'] = t('never'); Chris@0: } Chris@0: return $row + parent::buildRow($entity); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getOperations(EntityInterface $entity) { Chris@0: $operations = parent::getOperations($entity); Chris@0: if (isset($operations['edit'])) { Chris@0: $destination = $this->redirectDestination->getAsArray(); Chris@0: $operations['edit']['query'] = $destination; Chris@0: } Chris@0: return $operations; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function render() { Chris@0: $build = parent::render(); Chris@0: $build['table']['#empty'] = $this->t('No people available.'); Chris@0: return $build; Chris@0: } Chris@0: Chris@0: }