blob: f174393453fa22b0029242a6afa5d25be4796028 [file] [log] [blame]
<?php
namespace DAFME\Covid;
class Classes {
// Marge en segons per seguir retornant una assignatura abans o després que
// acabi, quan s'obtenen les classes actuals.
const CURRENT_MARGIN_BEGINS = 5*60;
const CURRENT_MARGIN_ENDS = 5*60;
const INTIME_MARGIN_BEGINS = 0*60;
const INTIME_MARGIN_ENDS = 0*60;
public static function getClasses(int $unix_time = null) {
global $con;
$isSignedIn = Users::isSignedIn();
$sentence = 'SELECT c.id, c.calendar_name, c.room, c.begins, c.ends, c.calendar_name, c.degree, s.id subject_id, s.friendly_name
'.($isSignedIn ? ', u_s.id user_subject_id' : '').',
CASE
WHEN c.begins > :unix_time OR c.ends <= :unix_time
THEN 0
ELSE 1
END is_current
FROM classes c
LEFT OUTER JOIN subjects s
ON c.calendar_name = s.calendar_name
'.($isSignedIn ? 'LEFT OUTER JOIN user_subjects u_s
ON s.id = u_s.subject_id
' : '').
'WHERE
c.begins - '.($unix_time === null ? self::CURRENT_MARGIN_BEGINS : self::INTIME_MARGIN_BEGINS).' <= :unix_time AND
c.ends + '.($unix_time === null ? self::CURRENT_MARGIN_ENDS: self::INTIME_MARGIN_ENDS).' > :unix_time'.($isSignedIn ? ' AND
(
u_s.user_id = :user_id OR
u_s.subject_id IS NULL
)': '').'
ORDER BY
s.id IS NULL, -- Mostrem primer les assignatures que reconeguem
is_current DESC, -- Mostrem primer les classes actuals
'.($isSignedIn ? 'u_s.subject_id IS NULL, -- Mostrem primer les classes seleccionades per l\'alumne
' : '').'s.friendly_name ASC, -- Ordenem per ordre alfabètic el nom de l\'assignatura
c.calendar_name ASC, -- Ordenem per ordre alfabètic el nom de l\'assignatura del calendari
c.room ASC -- Ordenem per ordre alfabètic l\'aula';
$query = $con->prepare($sentence);
if ($unix_time === null) $unix_time = time();
$query_params = ['unix_time' => $unix_time];
if ($isSignedIn) $query_params['user_id'] = Users::getUserId();
if (!$query->execute($query_params)) return false;
$classes = $query->fetchAll(\PDO::FETCH_ASSOC);
foreach ($classes as &$class) {
if (!$isSignedIn)
$class['user_subject_id'] = null;
$class['user_selected'] = $class['user_subject_id'] !== null;
}
return $classes;
}
}