View source
<?php
namespace Drupal\content_planner\Plugin\DashboardBlock;
use Drupal\content_planner\DashboardBlockBase;
use Drupal\content_planner\UserProfileImage;
use Drupal\Core\Form\FormStateInterface;
use Drupal\user\Entity\Role;
use Drupal\user\Entity\User;
use Symfony\Component\HttpFoundation\Request;
class UserBlock extends DashboardBlockBase {
public function build() {
$config = $this
->getConfiguration();
$users = $this
->getUsers($config);
if ($users) {
$user_data = [];
foreach ($users as $user) {
$roles = array_map(function ($role) {
if ($role != 'authenticated') {
$role_entity = $this->entityTypeManager
->getStorage('user_role')
->load($role);
return $role_entity ? $role_entity
->label() : NULL;
}
}, $user
->getRoles());
$user_data[] = [
'name' => $user
->label(),
'image' => UserProfileImage::generateProfileImageUrl($user, 'content_planner_user_block_profile_image'),
'roles' => implode(', ', array_filter($roles)),
'content_count' => $this
->getUserContentCount($user
->id()),
'content_kalendertag_count' => $this
->getUserContentWorkflowCount($user
->id(), 'am_kalendertag_publizieren'),
'content_draft_count' => $this
->getUserContentWorkflowCount($user
->id(), 'draft'),
];
}
return [
'#theme' => 'content_planner_dashboard_user_block',
'#users' => $user_data,
];
}
return [];
}
protected function getUsers() {
if (isset($this
->getConfiguration()['plugin_specific_config']['roles'])) {
$configured_roles = $this
->getConfiguration()['plugin_specific_config']['roles'];
$query = \Drupal::entityQuery('user');
$query
->condition('roles', array_values($configured_roles), 'in');
$query
->sort('access', 'desc');
$result = $query
->execute();
if ($result) {
return User::loadMultiple($result);
}
}
return [];
}
protected function getUserContentCount($user_id) {
$query = \Drupal::database()
->select('node_field_data', 'nfd');
$query
->fields('nfd', [
'nid',
]);
$query
->condition('nfd.uid', $user_id);
$query
->countQuery();
$result = $query
->execute();
$result->allowRowCount = TRUE;
$count = $result
->rowCount();
if ($count) {
return $count;
}
return 0;
}
public function getUserContentWorkflowCount($user_id, $moderation_state) {
$kanban_service = \Drupal::service('content_kanban.kanban_service');
$filters = [
'uid' => $user_id,
'moderation_state' => $moderation_state,
];
$nids = $kanban_service
->getEntityIdsFromContentModerationEntities('netnode', $filters);
return count($nids);
}
public function getConfigSpecificFormFields(FormStateInterface &$form_state, Request &$request, array $block_configuration) {
$form = [];
$form['roles'] = $this
->buildRoleSelectBox($form_state, $request, $block_configuration);
return $form;
}
protected function buildRoleSelectBox(FormStateInterface &$form_state, Request &$request, array $block_configuration) {
$roles = Role::loadMultiple();
$roles_options = [];
foreach ($roles as $role_id => $role) {
if (in_array($role_id, [
'anonymous',
])) {
continue;
}
$roles_options[$role_id] = $role
->label();
}
$default_value = isset($block_configuration['plugin_specific_config']['roles']) ? $block_configuration['plugin_specific_config']['roles'] : [];
return [
'#type' => 'checkboxes',
'#title' => t('Which Roles to display'),
'#description' => t('Select which Roles should be displayed in the block.'),
'#required' => TRUE,
'#options' => $roles_options,
'#default_value' => $default_value,
];
}
}