protected function TrainingForm::buildTrainingContent in Opigno statistics 8
Same name and namespace in other branches
- 3.x src/Form/TrainingForm.php \Drupal\opigno_statistics\Form\TrainingForm::buildTrainingContent()
Builds training content.
Parameters
\Drupal\group\Entity\GroupInterface $group: Group.
mixed $expired_uids: Users uids with the training expired certification.
Return value
array Render array.
Throws
\Exception
1 call to TrainingForm::buildTrainingContent()
- TrainingForm::buildForm in src/
Form/ TrainingForm.php - Form constructor.
File
- src/
Form/ TrainingForm.php, line 338
Class
- TrainingForm
- Implements the training statistics page.
Namespace
Drupal\opigno_statistics\FormCode
protected function buildTrainingContent(GroupInterface $group, $expired_uids = NULL) {
$gid = $group
->id();
$query = $this->database
->select('users', 'u');
$query
->innerJoin('group_content_field_data', 'gc', "gc.entity_id = u.uid\nAND gc.type IN ('learning_path-group_membership', 'opigno_course-group_membership')\nAND gc.gid = :gid", [
':gid' => $gid,
]);
$query
->fields('u', [
'uid',
]);
$users = $query
->condition('u.uid', 0, '<>')
->execute()
->fetchAll();
$users_number = count($users);
// Filter users with expired certificate.
$users = array_filter($users, function ($user) use ($expired_uids) {
return !in_array($user->uid, $expired_uids);
});
$table = [
'#type' => 'table',
'#attributes' => [
'class' => [
'statistics-table',
'training-content-list',
'table-striped',
],
],
'#header' => [
$this
->t('Step'),
$this
->t('% Completed'),
$this
->t('Avg score'),
$this
->t('Avg time spent'),
],
'#rows' => [],
];
$rows = [];
if (LPStatus::isCertificateExpireSet($group)) {
// Calculate training content in condition of certification.
$contents = OpignoGroupManagedContent::loadByGroupId($gid);
if ($users && $contents) {
foreach ($contents as $content) {
$content_id = $content
->id();
$rows[$content_id] = new \stdClass();
$rows[$content_id]->name = '';
$rows[$content_id]->completed = 0;
$rows[$content_id]->score = 0;
$rows[$content_id]->time = 0;
$statistics = $this
->getGroupContentStatisticsCertificated($group, $users, $content);
if (!empty($statistics['name'])) {
// Step name.
$rows[$content_id]->name = $statistics['name'];
// Step average completed.
$rows[$content_id]->completed = $statistics['completed'];
// Step average score.
$rows[$content_id]->score = $statistics['score'] / $users_number;
// Step average score.
$rows[$content_id]->time = round($statistics['time'] / $users_number);
}
}
}
}
else {
// Calculate training content without certification condition.
$rows = $this
->getTrainingContentStatistics($gid);
}
if ($rows) {
foreach ($rows as $row) {
if (!empty($row->name)) {
$completed = round(100 * $row->completed / $users_number);
$score = round($row->score);
$time = $row->time > 0 ? $this->date_formatter
->formatInterval($row->time) : '-';
$table['#rows'][] = [
$row->name,
$this
->t('@completed%', [
'@completed' => $completed,
]),
$this
->t('@score%', [
'@score' => $score,
]),
$time,
];
}
}
}
return [
'#type' => 'container',
'#attributes' => [
'class' => [
'training-content',
],
],
'title' => [
'#type' => 'html_tag',
'#tag' => 'h3',
'#attributes' => [
'class' => [
'training-content-title',
],
],
'#value' => $this
->t('Training Content'),
],
'list' => $table,
];
}