blob: 6bfa0c8f6bb5e1ccd9c57b00810b8d4967f9cb0b [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.
avm99963592e5a42020-10-02 11:25:27 +02007 const MARGIN_BEGINS = 5*60;
8 const MARGIN_ENDS = 5*60;
avm999634fb108d2020-09-30 01:02:08 +02009
avm99963472b0de2020-09-28 17:15:42 +020010 public static function getCurrentClasses() {
11 global $con;
12
13 $isSignedIn = Users::isSignedIn();
14
avm99963592e5a42020-10-02 11:25:27 +020015 $sentence = 'SELECT c.id, c.calendar_name, c.room, c.begins, c.ends, c.calendar_name, s.id subject_id, s.friendly_name'.($isSignedIn ? ', u_s.id user_subject_id' : '').',
16 CASE
17 WHEN c.begins > UNIX_TIMESTAMP() OR c.ends < UNIX_TIMESTAMP()
18 THEN 0
19 ELSE 1
20 END is_current
avm99963472b0de2020-09-28 17:15:42 +020021 FROM classes c
avm99963b3920912020-09-30 10:51:54 +020022 LEFT OUTER JOIN subjects s
avm99963472b0de2020-09-28 17:15:42 +020023 ON c.calendar_name = s.calendar_name
24 '.($isSignedIn ? 'LEFT OUTER JOIN user_subjects u_s
25 ON s.id = u_s.subject_id
26 ' : '').
27 'WHERE
avm99963592e5a42020-10-02 11:25:27 +020028 c.begins - '.self::MARGIN_BEGINS.' <= UNIX_TIMESTAMP() AND
29 c.ends + '.self::MARGIN_ENDS.' >= UNIX_TIMESTAMP()'.($isSignedIn ? ' AND
avm99963472b0de2020-09-28 17:15:42 +020030 (
31 u_s.user_id = :user_id OR
32 u_s.subject_id IS NULL
avm999633b2a94c2020-09-30 00:54:27 +020033 )': '').'
avm99963592e5a42020-10-02 11:25:27 +020034 ORDER BY
35 s.id IS NULL,
36 is_current DESC,
37 '.($isSignedIn ? 'u_s.subject_id IS NULL,
38 ' : '').'s.friendly_name ASC';
avm99963472b0de2020-09-28 17:15:42 +020039 $query = $con->prepare($sentence);
40
41 if (!$query->execute(($isSignedIn ? ['user_id' => Users::getUserId()] : [])))
42 return false;
43
44 $classes = $query->fetchAll(\PDO::FETCH_ASSOC);
45
46 foreach ($classes as &$class) {
avm99963ea2309c2020-09-28 17:20:25 +020047 if (!$isSignedIn)
avm99963472b0de2020-09-28 17:15:42 +020048 $class['user_subject_id'] = null;
49
50 $class['user_selected'] = $class['user_subject_id'] !== null;
51 }
52
53 return $classes;
54 }
avm99963472b0de2020-09-28 17:15:42 +020055}