Cron: Session: import missing cron to update session status based on date and number of student subscribed from 1.11.x and adapt from Chamilo 2 - refs BT#21099

pull/5337/head
NicoDucou 8 months ago
parent 514fb78d2a
commit 5d5778eb9e
  1. 64
      public/main/cron/update_session_status.php

@ -0,0 +1,64 @@
<?php
/* For licensing terms, see /license.txt */
require_once __DIR__.'/../inc/global.inc.php';
$test = true;
$sessionStatusAllowed = api_get_setting('session.allow_session_status');
if (!$sessionStatusAllowed) {
echo '"allow_session_status" setting is not activated.';
exit;
}
$em = Database::getManager();
$table = Database::get_main_table(TABLE_MAIN_SESSION);
$sql = "SELECT * FROM $table ";
$result = Database::query($sql);
$now = api_get_utc_datetime();
$line = PHP_SAPI === 'cli' ? PHP_EOL : '<br />';
echo 'Today is : '.$now.$line;
while ($session = Database::fetch_array($result, 'ASSOC')) {
$id = $session['id'];
$start = $session['display_start_date'];
$end = $session['display_end_date'];
//$userCount = (int) $session['nbr_users'];
$userCount = (int) SessionManager::get_users_by_session($id, 0, true);
// 1. Si une session a lieu dans le futur, c’est à dire que la date de début est supérieur à la date du
//jour alors elle est prévue
$status = 0;
if ($start > $now) {
$status = SessionManager::STATUS_PLANNED;
}
// 2. Si une session a plus de 2 apprenants et que la date de début est inférieur ou égale à la date
// du jour et que la date de fin n'est pas passée alors mettre le statut en cours
if ($userCount >= 2 && $start <= $now && $end > $now) {
$status = SessionManager::STATUS_PROGRESS;
}
// 3. Si une session n’a pas d’apprenant et que la date de début est passée alors mettre le statut à
//annulée.
if ($userCount === 0 && $now > $start) {
$status = SessionManager::STATUS_CANCELLED;
}
// 4. Si la date de fin d'une session est dépassée et qu'elle a plus de 2 apprenants alors passer le
//statut à terminée
if ($now > $end && $userCount >= 2) {
$status = SessionManager::STATUS_FINISHED;
}
$params = [
'status' => $status,
];
if ($test === false) {
Database::update($table, $params, ['id = ?' => $id]);
}
echo "Session #$id updated. Status = ".SessionManager::getStatusLabel($status)."($status) User count= $userCount: Start date: $start - End date: $end".$line;
}
Loading…
Cancel
Save