Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\user;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Cache\CacheableMetadata;
|
Chris@0
|
6 use Drupal\Core\Datetime\DateFormatterInterface;
|
Chris@0
|
7 use Drupal\Core\Entity\EntityInterface;
|
Chris@0
|
8 use Drupal\Core\Entity\EntityListBuilder;
|
Chris@0
|
9 use Drupal\Core\Entity\EntityStorageInterface;
|
Chris@0
|
10 use Drupal\Core\Entity\EntityTypeInterface;
|
Chris@0
|
11 use Drupal\Core\Routing\RedirectDestinationInterface;
|
Chris@0
|
12 use Symfony\Component\DependencyInjection\ContainerInterface;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * Defines a class to build a listing of user entities.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @see \Drupal\user\Entity\User
|
Chris@0
|
18 */
|
Chris@0
|
19 class UserListBuilder extends EntityListBuilder {
|
Chris@0
|
20
|
Chris@0
|
21 /**
|
Chris@0
|
22 * The date formatter service.
|
Chris@0
|
23 *
|
Chris@0
|
24 * @var \Drupal\Core\Datetime\DateFormatterInterface
|
Chris@0
|
25 */
|
Chris@0
|
26 protected $dateFormatter;
|
Chris@0
|
27
|
Chris@0
|
28 /**
|
Chris@0
|
29 * The redirect destination service.
|
Chris@0
|
30 *
|
Chris@0
|
31 * @var \Drupal\Core\Routing\RedirectDestinationInterface
|
Chris@0
|
32 */
|
Chris@0
|
33 protected $redirectDestination;
|
Chris@0
|
34
|
Chris@0
|
35 /**
|
Chris@0
|
36 * Constructs a new UserListBuilder object.
|
Chris@0
|
37 *
|
Chris@0
|
38 * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
|
Chris@0
|
39 * The entity type definition.
|
Chris@0
|
40 * @param \Drupal\Core\Entity\EntityStorageInterface $storage
|
Chris@0
|
41 * The entity storage class.
|
Chris@0
|
42 * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
|
Chris@0
|
43 * The date formatter service.
|
Chris@0
|
44 * @param \Drupal\Core\Routing\RedirectDestinationInterface $redirect_destination
|
Chris@0
|
45 * The redirect destination service.
|
Chris@0
|
46 */
|
Chris@0
|
47 public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, DateFormatterInterface $date_formatter, RedirectDestinationInterface $redirect_destination) {
|
Chris@0
|
48 parent::__construct($entity_type, $storage);
|
Chris@0
|
49 $this->dateFormatter = $date_formatter;
|
Chris@0
|
50 $this->redirectDestination = $redirect_destination;
|
Chris@0
|
51 }
|
Chris@0
|
52
|
Chris@0
|
53 /**
|
Chris@0
|
54 * {@inheritdoc}
|
Chris@0
|
55 */
|
Chris@0
|
56 public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
|
Chris@0
|
57 return new static(
|
Chris@0
|
58 $entity_type,
|
Chris@18
|
59 $container->get('entity_type.manager')->getStorage($entity_type->id()),
|
Chris@0
|
60 $container->get('date.formatter'),
|
Chris@0
|
61 $container->get('redirect.destination')
|
Chris@0
|
62 );
|
Chris@0
|
63 }
|
Chris@0
|
64
|
Chris@0
|
65 /**
|
Chris@0
|
66 * {@inheritdoc}
|
Chris@0
|
67 */
|
Chris@0
|
68 public function load() {
|
Chris@0
|
69 $entity_query = $this->storage->getQuery();
|
Chris@0
|
70 $entity_query->condition('uid', 0, '<>');
|
Chris@0
|
71 $entity_query->pager(50);
|
Chris@0
|
72 $header = $this->buildHeader();
|
Chris@0
|
73 $entity_query->tableSort($header);
|
Chris@0
|
74 $uids = $entity_query->execute();
|
Chris@0
|
75 return $this->storage->loadMultiple($uids);
|
Chris@0
|
76 }
|
Chris@0
|
77
|
Chris@0
|
78 /**
|
Chris@0
|
79 * {@inheritdoc}
|
Chris@0
|
80 */
|
Chris@0
|
81 public function buildHeader() {
|
Chris@0
|
82 $header = [
|
Chris@0
|
83 'username' => [
|
Chris@0
|
84 'data' => $this->t('Username'),
|
Chris@0
|
85 'field' => 'name',
|
Chris@0
|
86 'specifier' => 'name',
|
Chris@0
|
87 ],
|
Chris@0
|
88 'status' => [
|
Chris@0
|
89 'data' => $this->t('Status'),
|
Chris@0
|
90 'field' => 'status',
|
Chris@0
|
91 'specifier' => 'status',
|
Chris@0
|
92 'class' => [RESPONSIVE_PRIORITY_LOW],
|
Chris@0
|
93 ],
|
Chris@0
|
94 'roles' => [
|
Chris@0
|
95 'data' => $this->t('Roles'),
|
Chris@0
|
96 'class' => [RESPONSIVE_PRIORITY_LOW],
|
Chris@0
|
97 ],
|
Chris@0
|
98 'member_for' => [
|
Chris@0
|
99 'data' => $this->t('Member for'),
|
Chris@0
|
100 'field' => 'created',
|
Chris@0
|
101 'specifier' => 'created',
|
Chris@0
|
102 'sort' => 'desc',
|
Chris@0
|
103 'class' => [RESPONSIVE_PRIORITY_LOW],
|
Chris@0
|
104 ],
|
Chris@0
|
105 'access' => [
|
Chris@0
|
106 'data' => $this->t('Last access'),
|
Chris@0
|
107 'field' => 'access',
|
Chris@0
|
108 'specifier' => 'access',
|
Chris@0
|
109 'class' => [RESPONSIVE_PRIORITY_LOW],
|
Chris@0
|
110 ],
|
Chris@0
|
111 ];
|
Chris@0
|
112 return $header + parent::buildHeader();
|
Chris@0
|
113 }
|
Chris@0
|
114
|
Chris@0
|
115 /**
|
Chris@0
|
116 * {@inheritdoc}
|
Chris@0
|
117 */
|
Chris@0
|
118 public function buildRow(EntityInterface $entity) {
|
Chris@0
|
119 $row['username']['data'] = [
|
Chris@0
|
120 '#theme' => 'username',
|
Chris@0
|
121 '#account' => $entity,
|
Chris@0
|
122 ];
|
Chris@0
|
123 $row['status'] = $entity->isActive() ? $this->t('active') : $this->t('blocked');
|
Chris@0
|
124
|
Chris@0
|
125 $roles = user_role_names(TRUE);
|
Chris@0
|
126 unset($roles[RoleInterface::AUTHENTICATED_ID]);
|
Chris@0
|
127 $users_roles = [];
|
Chris@0
|
128 foreach ($entity->getRoles() as $role) {
|
Chris@0
|
129 if (isset($roles[$role])) {
|
Chris@0
|
130 $users_roles[] = $roles[$role];
|
Chris@0
|
131 }
|
Chris@0
|
132 }
|
Chris@0
|
133 asort($users_roles);
|
Chris@0
|
134 $row['roles']['data'] = [
|
Chris@0
|
135 '#theme' => 'item_list',
|
Chris@0
|
136 '#items' => $users_roles,
|
Chris@0
|
137 ];
|
Chris@0
|
138 $options = [
|
Chris@0
|
139 'return_as_object' => TRUE,
|
Chris@0
|
140 ];
|
Chris@0
|
141 $row['member_for']['data'] = $this->dateFormatter->formatTimeDiffSince($entity->getCreatedTime(), $options)->toRenderable();
|
Chris@0
|
142 $last_access = $this->dateFormatter->formatTimeDiffSince($entity->getLastAccessedTime(), $options);
|
Chris@0
|
143
|
Chris@0
|
144 if ($entity->getLastAccessedTime()) {
|
Chris@0
|
145 $row['access']['data']['#markup'] = $last_access->getString();
|
Chris@0
|
146 CacheableMetadata::createFromObject($last_access)->applyTo($row['access']['data']);
|
Chris@0
|
147 }
|
Chris@0
|
148 else {
|
Chris@0
|
149 $row['access']['data']['#markup'] = t('never');
|
Chris@0
|
150 }
|
Chris@0
|
151 return $row + parent::buildRow($entity);
|
Chris@0
|
152 }
|
Chris@0
|
153
|
Chris@0
|
154 /**
|
Chris@0
|
155 * {@inheritdoc}
|
Chris@0
|
156 */
|
Chris@0
|
157 public function getOperations(EntityInterface $entity) {
|
Chris@0
|
158 $operations = parent::getOperations($entity);
|
Chris@0
|
159 if (isset($operations['edit'])) {
|
Chris@0
|
160 $destination = $this->redirectDestination->getAsArray();
|
Chris@0
|
161 $operations['edit']['query'] = $destination;
|
Chris@0
|
162 }
|
Chris@0
|
163 return $operations;
|
Chris@0
|
164 }
|
Chris@0
|
165
|
Chris@0
|
166 /**
|
Chris@0
|
167 * {@inheritdoc}
|
Chris@0
|
168 */
|
Chris@0
|
169 public function render() {
|
Chris@0
|
170 $build = parent::render();
|
Chris@0
|
171 $build['table']['#empty'] = $this->t('No people available.');
|
Chris@0
|
172 return $build;
|
Chris@0
|
173 }
|
Chris@0
|
174
|
Chris@0
|
175 }
|