protected function DashboardForm::buildTrainingsProgress in Opigno statistics 3.x
Same name and namespace in other branches
- 8 src/Form/DashboardForm.php \Drupal\opigno_statistics\Form\DashboardForm::buildTrainingsProgress()
Builds trainings progress.
Parameters
\Drupal\Core\Datetime\DrupalDateTime $datetime: Date.
array $lp_ids: LP IDs.
Return value
array Render array.
Throws
\Exception
1 call to DashboardForm::buildTrainingsProgress()
- DashboardForm::buildForm in src/
Form/ DashboardForm.php - Form constructor.
File
- src/
Form/ DashboardForm.php, line 231
Class
- DashboardForm
- Implements the statistics dashboard.
Namespace
Drupal\opigno_statistics\FormCode
protected function buildTrainingsProgress(DrupalDateTime $datetime, array $lp_ids = []) : array {
$progress = $completion = 0;
$time_str = $datetime
->format(DrupalDateTime::FORMAT);
$query = $this->database
->select('opigno_learning_path_achievements', 'a');
$query
->addExpression('SUM(a.progress) / COUNT(a.progress) / 100', 'progress');
$query
->addExpression('COUNT(a.completed) / COUNT(a.registered)', 'completion');
$query
->fields('a', [
'name',
])
->groupBy('a.name')
->orderBy('a.name')
->condition('a.registered', $time_str, '<');
if ($lp_ids) {
$query
->condition('a.gid', $lp_ids, 'IN');
$query
->leftJoin('group_content_field_data', 'g_c_f_d', 'a.uid = g_c_f_d.entity_id AND g_c_f_d.gid = a.gid');
$query
->condition('g_c_f_d.type', 'learning_path-group_membership');
}
$query
->condition('a.uid', 0, '<>');
$or_group = $query
->orConditionGroup();
$or_group
->condition('a.completed', $time_str, '<');
$or_group
->isNull('a.completed');
$data = $query
->execute()
->fetchAll();
$count = count($data);
if ($count > 0) {
foreach ($data as $row) {
$progress += $row->progress;
$completion += $row->completion;
}
$progress /= $count;
$completion /= $count;
}
return [
'drupalSettings' => [
'opignoCharts' => [
'trainingsProgress' => $this
->buildDonutChart((double) $progress, '#trainings-progress-chart'),
'trainingsCompletion' => $this
->buildDonutChart((double) $completion, '#trainings-completion-chart'),
'usersPerDay' => $this
->buildUsersPerDay($datetime, $lp_ids),
],
],
];
}