You are here

protected function DashboardForm::buildUserMetrics in Opigno statistics 3.x

Same name and namespace in other branches
  1. 8 src/Form/DashboardForm.php \Drupal\opigno_statistics\Form\DashboardForm::buildUserMetrics()

Builds user metrics.

Parameters

array $lp_ids: Learning path IDs.

Return value

array Render array.

1 call to DashboardForm::buildUserMetrics()
DashboardForm::buildForm in src/Form/DashboardForm.php
Form constructor.

File

src/Form/DashboardForm.php, line 308

Class

DashboardForm
Implements the statistics dashboard.

Namespace

Drupal\opigno_statistics\Form

Code

protected function buildUserMetrics(array $lp_ids = []) : array {
  $query = $this->database
    ->select('users', 'u');
  if ($lp_ids) {
    $query
      ->leftJoin('group_content_field_data', 'g_c_f_d', 'u.uid = g_c_f_d.entity_id');
    $query
      ->condition('g_c_f_d.type', 'learning_path-group_membership');
    $query
      ->condition('g_c_f_d.gid', $lp_ids, 'IN');
  }
  $query
    ->condition('u.uid', 0, '<>');
  $query
    ->groupBy('u.uid');
  $users = $query
    ->countQuery()
    ->execute()
    ->fetchField();
  $now = $this->time
    ->getRequestTime();

  // Last 7 days.
  $period = 60 * 60 * 24 * 7;
  $query = $this->database
    ->select('users_field_data', 'u');
  if ($lp_ids) {
    $query
      ->leftJoin('group_content_field_data', 'g_c_f_d', 'u.uid = g_c_f_d.entity_id');
    $query
      ->condition('g_c_f_d.type', 'learning_path-group_membership');
    $query
      ->condition('g_c_f_d.gid', $lp_ids, 'IN');
  }
  $query
    ->condition('u.uid', 0, '<>');
  $query
    ->condition('u.created', $now - $period, '>');
  $query
    ->groupBy('u.uid');
  $new_users = $query
    ->countQuery()
    ->execute()
    ->fetchField();
  $query = $this->database
    ->select('users_field_data', 'u');
  if ($lp_ids) {
    $query
      ->leftJoin('group_content_field_data', 'g_c_f_d', 'u.uid = g_c_f_d.entity_id');
    $query
      ->condition('g_c_f_d.type', 'learning_path-group_membership');
    $query
      ->condition('g_c_f_d.gid', $lp_ids, 'IN');
  }
  $query
    ->condition('u.uid', 0, '<>');
  $query
    ->condition('u.access', $now - $period, '>');
  $query
    ->groupBy('u.uid');
  $active_users = $query
    ->countQuery()
    ->execute()
    ->fetchField();
  return [
    '#theme' => 'opigno_statistics_user_metrics',
    'users' => $this
      ->buildUserMetric($this
      ->t('Users'), $users),
    'new_users' => $this
      ->buildUserMetric($this
      ->t('New users'), $new_users),
    'active_users' => $this
      ->buildUserMetric($this
      ->t('Recently active users'), $active_users),
  ];
}