blob: f174393453fa22b0029242a6afa5d25be4796028 [file] [log] [blame]
avm99963472b0de2020-09-28 17:15:42 +02001<?php
2namespace DAFME\Covid;
3
4class Classes {
avm999634fb108d2020-09-30 01:02:08 +02005 // Marge en segons per seguir retornant una assignatura abans o després que
6 // acabi, quan s'obtenen les classes actuals.
avm99963b8365752020-10-04 13:02:38 +02007 const CURRENT_MARGIN_BEGINS = 5*60;
8 const CURRENT_MARGIN_ENDS = 5*60;
avm999634fb108d2020-09-30 01:02:08 +02009
avm99963b8365752020-10-04 13:02:38 +020010 const INTIME_MARGIN_BEGINS = 0*60;
11 const INTIME_MARGIN_ENDS = 0*60;
12
13
avm999631a331722020-10-08 23:46:15 +020014 public static function getClasses(int $unix_time = null) {
avm99963472b0de2020-09-28 17:15:42 +020015 global $con;
16
17 $isSignedIn = Users::isSignedIn();
18
avm999636fc627e2020-10-07 10:29:26 +020019 $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
avm99963b8365752020-10-04 13:02:38 +020020 '.($isSignedIn ? ', u_s.id user_subject_id' : '').',
avm99963592e5a42020-10-02 11:25:27 +020021 CASE
avm9996365a2dcd2020-10-08 23:29:52 +020022 WHEN c.begins > :unix_time OR c.ends <= :unix_time
avm99963592e5a42020-10-02 11:25:27 +020023 THEN 0
24 ELSE 1
25 END is_current
avm99963472b0de2020-09-28 17:15:42 +020026 FROM classes c
avm99963b3920912020-09-30 10:51:54 +020027 LEFT OUTER JOIN subjects s
avm99963472b0de2020-09-28 17:15:42 +020028 ON c.calendar_name = s.calendar_name
29 '.($isSignedIn ? 'LEFT OUTER JOIN user_subjects u_s
30 ON s.id = u_s.subject_id
31 ' : '').
32 'WHERE
avm999631a331722020-10-08 23:46:15 +020033 c.begins - '.($unix_time === null ? self::CURRENT_MARGIN_BEGINS : self::INTIME_MARGIN_BEGINS).' <= :unix_time AND
34 c.ends + '.($unix_time === null ? self::CURRENT_MARGIN_ENDS: self::INTIME_MARGIN_ENDS).' > :unix_time'.($isSignedIn ? ' AND
avm99963472b0de2020-09-28 17:15:42 +020035 (
36 u_s.user_id = :user_id OR
37 u_s.subject_id IS NULL
avm999633b2a94c2020-09-30 00:54:27 +020038 )': '').'
avm99963592e5a42020-10-02 11:25:27 +020039 ORDER BY
avm999636688abe2020-10-09 00:30:31 +020040 s.id IS NULL, -- Mostrem primer les assignatures que reconeguem
41 is_current DESC, -- Mostrem primer les classes actuals
42 '.($isSignedIn ? 'u_s.subject_id IS NULL, -- Mostrem primer les classes seleccionades per l\'alumne
43 ' : '').'s.friendly_name ASC, -- Ordenem per ordre alfabètic el nom de l\'assignatura
44 c.calendar_name ASC, -- Ordenem per ordre alfabètic el nom de l\'assignatura del calendari
45 c.room ASC -- Ordenem per ordre alfabètic l\'aula';
avm99963472b0de2020-09-28 17:15:42 +020046 $query = $con->prepare($sentence);
avm99963472b0de2020-09-28 17:15:42 +020047
avm999631a331722020-10-08 23:46:15 +020048 if ($unix_time === null) $unix_time = time();
avm99963b8365752020-10-04 13:02:38 +020049
50 $query_params = ['unix_time' => $unix_time];
51 if ($isSignedIn) $query_params['user_id'] = Users::getUserId();
52
53 if (!$query->execute($query_params)) return false;
avm99963472b0de2020-09-28 17:15:42 +020054 $classes = $query->fetchAll(\PDO::FETCH_ASSOC);
55
56 foreach ($classes as &$class) {
avm99963ea2309c2020-09-28 17:20:25 +020057 if (!$isSignedIn)
avm99963472b0de2020-09-28 17:15:42 +020058 $class['user_subject_id'] = null;
59
60 $class['user_selected'] = $class['user_subject_id'] !== null;
61 }
62
63 return $classes;
64 }
avm99963472b0de2020-09-28 17:15:42 +020065}