event.class.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683
  1. <?php
  2. /**
  3. * Classe event
  4. *
  5. * Cette classe gère les événements, y compris leur création, mise à jour, suppression,
  6. * gestion des inscriptions, et génération de QR codes associés.
  7. */
  8. class event
  9. {
  10. /**
  11. * Récupère les informations d'un événement spécifique par son identifiant.
  12. *
  13. * @param int $_id Identifiant de l'événement.
  14. * @return array Retourne les informations de l'événement.
  15. */
  16. public static function getFiche(int $_id)
  17. {
  18. db::query("SELECT * FROM " . DB_T_EVENTS . " WHERE id = :id");
  19. db::bind(':id', $_id);
  20. return db::single();
  21. }
  22. /**
  23. * Récupère les informations d'un événement spécifique par son hash MD5.
  24. *
  25. * @param string $_md5 Hash MD5 de l'événement.
  26. * @return array Retourne les informations de l'événement.
  27. */
  28. public static function getFicheByMd5(string $_md5)
  29. {
  30. db::query("SELECT * FROM " . DB_T_EVENTS . " WHERE md5 = :md5");
  31. db::bind(':md5', $_md5);
  32. return db::single();
  33. }
  34. /**
  35. * Génère un QR code pour un événement spécifique.
  36. *
  37. * @param int $_id Identifiant de l'événement.
  38. * @param int $_width Largeur du QR code (par défaut 50).
  39. * @param string|null $_link Lien personnalisé (facultatif).
  40. * @return string Retourne le QR code sous forme d'image HTML.
  41. */
  42. public static function getQRCode(int $_id, $_width = 50, ?string $_link = NULL)
  43. {
  44. db::query("SELECT md5 FROM " . DB_T_EVENTS . " WHERE id = :id");
  45. db::bind(':id', $_id);
  46. $md5 = db::single()["md5"];
  47. $link = core::base64_url_encode("https://" . DOMAIN_EVENTS . "/?e=" . $md5);
  48. if ($_link == NULL) {
  49. return '<img src="/qrcode.php?q= ' . $link . '" width="' . $_width . '" >';
  50. } else {
  51. return '<a href="https://' . DOMAIN_EVENTS . '/qrcode.php?q=' . $link . '" target="_blank"><img src="/qrcode.php?q= ' . $link . '" width="' . $_width . '" ></a>';
  52. }
  53. }
  54. /**
  55. * Ajoute un nouvel événement dans la base de données.
  56. *
  57. * @return bool Retourne TRUE en cas de succès, FALSE en cas d'échec.
  58. */
  59. public static function add()
  60. {
  61. db::query("INSERT INTO " . DB_T_EVENTS . " (md5, titre, description, startDate, endDate, type_emargement, type_inscription, actif, id_user) VALUES (:md5, :titre, :description, :startDate, :endDate, :type_emargement, :type_inscription, :actif, :id_user)");
  62. db::bind(':md5', md5(time().rand(1000000000, 9999999999)));
  63. db::bind(':titre', core::getPost("titre"));
  64. db::bind(':description', core::getPost("description"));
  65. db::bind(':startDate', core::getPost("startDate"));
  66. db::bind(':endDate', core::getPost("endDate"));
  67. db::bind(':type_emargement', core::getPost("type_emargement"));
  68. db::bind(':type_inscription', core::getPost("type_inscription"));
  69. db::bind(':actif', core::getPost("actif"));
  70. db::bind(':id_user', session::getId());
  71. try {
  72. db::execute();
  73. return TRUE;
  74. } catch (Exception $ex) {
  75. return FALSE;
  76. }
  77. }
  78. /**
  79. * Met à jour un événement existant dans la base de données.
  80. *
  81. * @return bool Retourne TRUE en cas de succès, FALSE en cas d'échec.
  82. */
  83. public static function update()
  84. {
  85. db::query("UPDATE " . DB_T_EVENTS . " SET "
  86. . "titre = :titre, "
  87. . "description = :description, "
  88. . "startDate = :startDate, "
  89. . "endDate = :endDate, "
  90. . "type_emargement = :type_emargement, "
  91. . "type_inscription = :type_inscription, "
  92. . "actif = :actif, "
  93. . "id_user = :id_user "
  94. . "WHERE id = :id");
  95. db::bind(':titre', core::getPost("titre"));
  96. db::bind(':description', core::getPost("description"));
  97. db::bind(':startDate', core::getPost("startDate"));
  98. db::bind(':endDate', core::getPost("endDate"));
  99. db::bind(':type_emargement', core::getPost("type_emargement"));
  100. db::bind(':type_inscription', core::getPost("type_inscription"));
  101. db::bind(':actif', core::getPost("actif"));
  102. db::bind(':id_user', session::getId());
  103. db::bind(':id', core::getPost("id"));
  104. try {
  105. db::execute();
  106. return TRUE;
  107. } catch (Exception $ex) {
  108. return FALSE;
  109. }
  110. }
  111. /**
  112. * Inscrit un salarié à un événement spécifique.
  113. *
  114. * @param int|null $_salarie Identifiant du salarié (facultatif).
  115. * @return bool Retourne TRUE en cas de succès, FALSE en cas d'échec.
  116. */
  117. public static function subscribe(?int $_salarie = NULL)
  118. {
  119. if($_salarie == NULL){
  120. $salarie = core::getPost("salarie");
  121. } else {
  122. $salarie = $_salarie;
  123. }
  124. db::query("INSERT INTO " . DB_T_EVENTS_INSCRITS . " (id_evenement, id_salarie, sel, id_user) VALUES (:id_evenement, :id_salarie, :sel, :id_user)");
  125. db::bind(':sel', md5(core::getPost("event")."-".time().rand(100000000000000, 999999999999999)));
  126. db::bind(':id_evenement', core::getPost("event"));
  127. db::bind(':id_salarie', $salarie);
  128. db::bind(':id_user', session::getId());
  129. try {
  130. db::execute();
  131. return TRUE;
  132. } catch (Exception $ex) {
  133. return FALSE;
  134. }
  135. }
  136. /**
  137. * Désinscrit un salarié d'un événement spécifique.
  138. *
  139. * @return bool Retourne TRUE en cas de succès, FALSE en cas d'échec.
  140. */
  141. public static function unsubscribe()
  142. {
  143. db::query("DELETE FROM " . DB_T_EVENTS_INSCRITS . " WHERE id_evenement = :id_evenement AND id_salarie = :id_salarie");
  144. db::bind(':id_evenement', core::getPost("event"));
  145. db::bind(':id_salarie', core::getPost("salarie"));
  146. try {
  147. db::execute();
  148. return TRUE;
  149. } catch (Exception $ex) {
  150. return FALSE;
  151. }
  152. }
  153. /**
  154. * Récupère la liste des événements.
  155. *
  156. * @return array Retourne un tableau des événements.
  157. */
  158. public static function getEvents()
  159. {
  160. db::query("SELECT "
  161. . "" . DB_T_EVENTS . ".id, "
  162. . "" . DB_T_EVENTS . ".md5, "
  163. . "" . DB_T_EVENTS . ".titre, "
  164. . "" . DB_T_EVENTS . ".description, "
  165. . "" . DB_T_EVENTS . ".startDate, "
  166. . "COUNT(" . DB_T_EVENTS_INSCRITS . ".id_salarie) AS m_global, "
  167. . "COUNT(" . DB_T_EVENTS_INSCRITS . ".present) AS m_inscrit, "
  168. . "" . DB_T_EVENTS . ".endDate, "
  169. . "TIMESTAMPDIFF(HOUR, " . DB_T_EVENTS . ".startDate, " . DB_T_EVENTS . ".endDate) AS pastHours, "
  170. . "IF(" . DB_T_EVENTS . ".type_emargement = 1, 'Contôle', IF(" . DB_T_EVENTS . ".type_emargement = 2, 'Autonome', 'Contrôle & Autonome')) AS type_emargement, "
  171. . "IF(" . DB_T_EVENTS . ".type_inscription = 1, 'Incription', 'Libre') AS type_inscription, "
  172. . "" . DB_T_EVENTS . ".actif, "
  173. . "" . DB_T_EVENTS . ".cree, "
  174. . "" . DB_T_EVENTS . ".maj, "
  175. . "CONCAT (" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS 'user' "
  176. . "FROM " . DB_T_EVENTS . " "
  177. . "LEFT JOIN " . DB_T_EVENTS_INSCRITS . " ON " . DB_T_EVENTS_INSCRITS . ".id_evenement = " . DB_T_EVENTS . ".id "
  178. . "INNER JOIN " . DB_T_USER . " ON " . DB_T_EVENTS . ".id_user = " . DB_T_USER . ".id "
  179. . "GROUP BY 1");
  180. return db::resultset();
  181. }
  182. /**
  183. * Récupère les inscriptions pour un événement spécifique.
  184. *
  185. * @return array Retourne un tableau des inscriptions.
  186. */
  187. public static function getInscriptions()
  188. {
  189. db::query("SELECT "
  190. . "" . DB_T_SALARIES . ".id, "
  191. . "" . DB_T_SALARIES . ".idLocal, "
  192. . "" . DB_T_SALARIES . ".loginId, "
  193. . "" . DB_T_SALARIES . ".nom, "
  194. . "" . DB_T_SALARIES . ".prenom, "
  195. . "" . DB_T_SALARIES . ".sexe, "
  196. . "" . DB_T_SALARIES . ".contrat, "
  197. . "" . DB_T_SALARIES_PROWEB . ".dateNaissance, "
  198. . "" . DB_T_SALARIES . ".lieu, "
  199. . "" . DB_T_SALARIES . ".actif, "
  200. . "IF(" . DB_T_EVENTS_INSCRITS . ".id_salarie IS NOT NULL, 1, 0) AS inscrit, "
  201. . "" . DB_T_EVENTS_INSCRITS . ".present "
  202. . "FROM " . DB_T_SALARIES . " "
  203. . "LEFT JOIN " . DB_T_SALARIES_PROWEB . " ON " . DB_T_SALARIES . ".loginId = " . DB_T_SALARIES_PROWEB . ".loginId "
  204. . "LEFT JOIN " . DB_T_EVENTS_INSCRITS . " ON " . DB_T_SALARIES . ".id = " . DB_T_EVENTS_INSCRITS . ".id_salarie "
  205. . "AND " . DB_T_EVENTS_INSCRITS . ".id_evenement = " . core::getGet("id"));
  206. return db::resultset();
  207. }
  208. /**
  209. * Connecte un salarié à un événement en fonction de ses informations.
  210. *
  211. * @param array $_post Données du salarié.
  212. * @return bool Retourne TRUE en cas de succès, FALSE en cas d'échec.
  213. */
  214. public static function connectSalarie(array $_post)
  215. {
  216. if (empty($_post["ident"])) {
  217. return FALSE;
  218. } elseif (empty($_post["date"])) {
  219. return FALSE;
  220. }
  221. if (is_int($_post["ident"])) {
  222. $login = intval($_post["ident"]);
  223. } else {
  224. $login = $_post["ident"];
  225. }
  226. $date = new DateTime($_post["date"]);
  227. $date = $date->format('Y-m-d H:i:s');
  228. db::query("SELECT "
  229. . "" . DB_T_SALARIES . ".id, "
  230. . "" . DB_T_SALARIES . ".sel, "
  231. . "" . DB_T_SALARIES . ".nom, "
  232. . "" . DB_T_SALARIES_PROWEB . ".dateNaissance, "
  233. . "" . DB_T_SALARIES . ".prenom, "
  234. . "" . DB_T_SALARIES . ".actif, "
  235. . "" . DB_T_SALARIES . ".contrat, "
  236. . "" . DB_T_SALARIES . ".jourEntree "
  237. . "FROM " . DB_T_SALARIES . " "
  238. . "INNER JOIN " . DB_T_SALARIES_PROWEB . " ON " . DB_T_SALARIES . ".loginId = " . DB_T_SALARIES_PROWEB . ".loginId "
  239. . "WHERE " . DB_T_SALARIES . ".loginId = :login OR " . DB_T_SALARIES . ".idLocal = :login");
  240. db::bind(':login', $login);
  241. $salarie = db::single();
  242. if (isset($salarie["id"])) {
  243. if ($salarie["actif"] == 0) {
  244. return FALSE;
  245. } elseif (core::dateWhithoutHours($salarie["dateNaissance"]) != core::dateWhithoutHours($date)) {
  246. return FALSE;
  247. } else {
  248. $_SESSION["salarie"] = array(
  249. "id" => $salarie["id"],
  250. "sel" => $salarie["sel"],
  251. "nom" => $salarie["nom"],
  252. "prenom" => $salarie["prenom"]
  253. );
  254. return TRUE;
  255. }
  256. } else {
  257. return FALSE;
  258. }
  259. return FALSE;
  260. }
  261. /**
  262. * Récupère l'identifiant du dernier événement ajouté.
  263. *
  264. * @return int Identifiant du dernier événement.
  265. */
  266. public static function lastEvenement()
  267. {
  268. db::query("SELECT MAX(id) AS id FROM " . DB_T_EVENTS);
  269. return db::single()["id"];
  270. }
  271. /**
  272. * Récupère l'identifiant d'un événement par son hash MD5.
  273. *
  274. * @param string $_md5 Hash MD5 de l'événement.
  275. * @return int Identifiant de l'événement.
  276. */
  277. public static function getIdEvenementByMd5(string $_md5)
  278. {
  279. db::query("SELECT id FROM " . DB_T_EVENTS . " WHERE md5 = :md5");
  280. db::bind(':md5', $_md5);
  281. return db::single()["id"];
  282. }
  283. /**
  284. * Récupère les événements auxquels un salarié est présent.
  285. *
  286. * @param int $_idSalarie Identifiant du salarié.
  287. * @return array Retourne un tableau des événements.
  288. */
  289. public static function presentEvenement(int $_idSalarie)
  290. {
  291. db::query("SELECT "
  292. . "" . DB_T_EVENTS . ".id, "
  293. . "" . DB_T_EVENTS . ".md5, "
  294. . "" . DB_T_EVENTS . ".titre, "
  295. . "" . DB_T_EVENTS . ".startDate, "
  296. . "" . DB_T_EVENTS . ".endDate, "
  297. . "" . DB_T_EVENTS . ".type_emargement, "
  298. . "" . DB_T_EVENTS_INSCRITS . ".sel, "
  299. . "" . DB_T_EVENTS_INSCRITS . ".present "
  300. . "FROM " . DB_T_EVENTS . " "
  301. . "LEFT JOIN " . DB_T_EVENTS_INSCRITS . " ON " . DB_T_EVENTS_INSCRITS . ".id_evenement = " . DB_T_EVENTS . ".id AND " . DB_T_EVENTS_INSCRITS . ".id_salarie = :id_salarie "
  302. . "WHERE " . DB_T_EVENTS . ".startDate <= CURRENT_TIMESTAMP() "
  303. . "AND " . DB_T_EVENTS . ".endDate >= CURRENT_TIMESTAMP() "
  304. . "AND ((" . DB_T_EVENTS . ".type_inscription = 1 AND " . DB_T_EVENTS_INSCRITS . ".id_salarie = :id_salarie) OR (" . DB_T_EVENTS . ".type_inscription = 0))"
  305. . "AND " . DB_T_EVENTS . ".actif = 1");
  306. db::bind(':id_salarie', $_idSalarie);
  307. $row = db::resultset();
  308. return $row;
  309. }
  310. /**
  311. * Supprime un événement spécifique de la base de données.
  312. *
  313. * @param int $_id Identifiant de l'événement.
  314. * @return bool Retourne TRUE en cas de succès, FALSE en cas d'échec.
  315. */
  316. public static function deleteEvenement(int $_id)
  317. {
  318. db::query("DELETE FROM " . DB_T_EVENTS . " WHERE id = :id");
  319. db::bind(':id', $_id);
  320. return db::execute();
  321. }
  322. /**
  323. * Supprime toutes les inscriptions associées à un événement spécifique.
  324. *
  325. * @param int $_idEvenement Identifiant de l'événement.
  326. * @return bool Retourne TRUE en cas de succès, FALSE en cas d'échec.
  327. */
  328. public static function deleteInscriptionEvenement(int $_idEvenement)
  329. {
  330. db::query("DELETE FROM " . DB_T_EVENTS_INSCRITS . " WHERE id_evenement = :id_evenement");
  331. db::bind(':id_evenement', $_idEvenement);
  332. return db::execute();
  333. }
  334. /**
  335. * Vérifie l'URL d'un événement.
  336. *
  337. * @param string $_url URL à vérifier.
  338. * @return string Retourne l'hôte de l'URL.
  339. */
  340. public static function checkUrl(string $_url)
  341. {
  342. return parse_url($_url)["host"];
  343. }
  344. /**
  345. * Récupère les informations d'un événement à partir d'un QR code.
  346. *
  347. * @param string $_QRCode QR code de l'événement.
  348. * @return array Retourne les paramètres extraits du QR code.
  349. */
  350. public static function getEvenementbyQRCode(string $_QRCode)
  351. {
  352. $query = parse_url($_QRCode)["query"];
  353. parse_str($query, $params);
  354. return $params;
  355. }
  356. /**
  357. * Vérifie le nombre d'émargements pour un événement spécifique.
  358. *
  359. * @param int $_id_evenement Identifiant de l'événement.
  360. * @return int Retourne le nombre d'émargements.
  361. */
  362. public static function checkEmargement(int $_id_evenement)
  363. {
  364. db::query("SELECT "
  365. . "COUNT(present) AS nb "
  366. . "FROM " . DB_T_EVENTS_INSCRITS . " "
  367. . "WHERE " . DB_T_EVENTS_INSCRITS . ".id_evenement = :id_evenement");
  368. db::bind(':id_evenement', $_id_evenement);
  369. $nb = db::single()["nb"];
  370. return $nb;
  371. }
  372. /**
  373. * Récupère les informations d'inscription d'un salarié pour un événement spécifique.
  374. *
  375. * @param int $_id_evenement Identifiant de l'événement.
  376. * @param int $_id_salarie Identifiant du salarié.
  377. * @return array Retourne les informations d'inscription.
  378. */
  379. public static function getInscriptionEvenementById(int $_id_evenement, int $_id_salarie)
  380. {
  381. db::query("SELECT "
  382. . "" . DB_T_EVENTS_INSCRITS . ".id_salarie, "
  383. . "" . DB_T_EVENTS_INSCRITS . ".present, "
  384. . "" . DB_T_EVENTS . ".titre "
  385. . "FROM " . DB_T_EVENTS_INSCRITS . " "
  386. . "INNER JOIN " . DB_T_EVENTS . " ON " . DB_T_EVENTS_INSCRITS . ".id_evenement = " . DB_T_EVENTS . ".id "
  387. . "WHERE " . DB_T_EVENTS_INSCRITS . ".id_salarie = :id_salarie AND " . DB_T_EVENTS_INSCRITS . ".id_evenement = :id_evenement");
  388. db::bind(':id_salarie', $_id_salarie);
  389. db::bind(':id_evenement', $_id_evenement);
  390. $inscription = db::single();
  391. return $inscription;
  392. }
  393. /**
  394. * Récupère les inscriptions pour un événement spécifique.
  395. *
  396. * @param int $_id_event Identifiant de l'événement.
  397. * @return array Retourne un tableau des inscriptions.
  398. */
  399. public static function getInscription(int $_id_event)
  400. {
  401. db::query("SELECT "
  402. . "" . DB_T_SALARIES . ".id, "
  403. . "" . DB_T_SALARIES . ".loginId, "
  404. . "" . DB_T_SALARIES . ".idLocal, "
  405. . "" . DB_T_SALARIES_PROWEB . ".dateNaissance, "
  406. . "" . DB_T_SALARIES . ".jourEntree, "
  407. . "" . DB_T_SALARIES . ".nom, "
  408. . "" . DB_T_SALARIES . ".prenom, "
  409. . "" . DB_T_SALARIES . ".sexe, "
  410. . "" . DB_T_SALARIES . ".contrat, "
  411. . "" . DB_T_SALARIES . ".lieu, "
  412. . "" . DB_T_SALARIES . ".actif, "
  413. . "" . DB_T_EVENTS_INSCRITS . ".id_evenement, "
  414. . "CONCAT (" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS 'nameAdminPresent', "
  415. . "" . DB_T_EVENTS_INSCRITS . ".present "
  416. . "FROM " . DB_T_SALARIES . " "
  417. . "INNER JOIN " . DB_T_EVENTS_INSCRITS . " ON " . DB_T_EVENTS_INSCRITS . ".id_salarie = " . DB_T_SALARIES . ".id "
  418. . "LEFT JOIN " . DB_T_SALARIES_PROWEB . " ON " . DB_T_SALARIES . ".loginId = " . DB_T_SALARIES_PROWEB . ".loginId "
  419. . "LEFT JOIN " . DB_T_USER . " ON " . DB_T_EVENTS_INSCRITS . ".id_admin_present = " . DB_T_USER . ".id "
  420. . "WHERE " . DB_T_EVENTS_INSCRITS . ".id_evenement = " . $_id_event);
  421. return db::resultset();
  422. }
  423. /**
  424. * Vérifie si un salarié est éligible pour un événement spécifique.
  425. *
  426. * @param string $_md5 Hash MD5 de l'événement.
  427. * @return array Retourne un tableau contenant le résultat et la description.
  428. */
  429. public static function checkEvenementBySalarie(string $_md5)
  430. {
  431. $return = array();
  432. $now = time();
  433. db::query("SELECT "
  434. . "" . DB_T_SALARIES . ".id, "
  435. . "" . DB_T_SALARIES . ".actif, "
  436. . "" . DB_T_SALARIES . ".contrat "
  437. . "FROM " . DB_T_SALARIES . " "
  438. . "WHERE " . DB_T_SALARIES . ".id = :id");
  439. db::bind(':id', session::getId("salarie"));
  440. $salarie = db::single();
  441. db::query("SELECT "
  442. . "" . DB_T_EVENTS_INSCRITS . ".id_salarie, "
  443. . "" . DB_T_EVENTS_INSCRITS . ".present "
  444. . "FROM " . DB_T_EVENTS . " "
  445. . "LEFT JOIN " . DB_T_EVENTS_INSCRITS . " ON " . DB_T_EVENTS_INSCRITS . ".id_evenement = " . DB_T_EVENTS . ".id "
  446. . "WHERE " . DB_T_EVENTS_INSCRITS . ".id_salarie = :id_salarie AND " . DB_T_EVENTS . ".md5 = :md5");
  447. db::bind(':id_salarie', session::getId("salarie"));
  448. db::bind(':md5', $_md5);
  449. $inscription = db::single();
  450. db::query("SELECT "
  451. . "" . DB_T_EVENTS . ".id, "
  452. . "" . DB_T_EVENTS . ".md5, "
  453. . "" . DB_T_EVENTS . ".titre, "
  454. . "" . DB_T_EVENTS . ".startDate, "
  455. . "" . DB_T_EVENTS . ".endDate, "
  456. . "" . DB_T_EVENTS . ".type_emargement, "
  457. . "" . DB_T_EVENTS . ".type_inscription, "
  458. . "" . DB_T_EVENTS . ".actif "
  459. . "FROM " . DB_T_EVENTS . " "
  460. . "WHERE " . DB_T_EVENTS . ".md5 = :md5");
  461. db::bind(':md5', $_md5);
  462. $evenement = db::single();
  463. if ($salarie["id"] == NULL) {
  464. $return["result"] = FALSE;
  465. $return["description"] = "Vous n'êtes pas un salarié rattaché à notre CSE";
  466. } elseif ($salarie["actif"] == 0) {
  467. $return["result"] = FALSE;
  468. $return["description"] = "Vous n'êtes plus un salarié rattaché à notre CSE";
  469. } elseif ($evenement["actif"] == 0) {
  470. $return["result"] = FALSE;
  471. $return["description"] = "Cet évènement n'est pas activée";
  472. } elseif ($evenement["type_inscription"] == 1 and $inscription["id_salarie"] == NULL) {
  473. $return["result"] = FALSE;
  474. $return["description"] = "Vous n'êtes pas inscrit à cet évènement";
  475. } elseif ($now < strtotime($evenement["startDate"])) {
  476. $return["result"] = FALSE;
  477. $return["description"] = "Cet évènement n'a pas encore commencé";
  478. } elseif ($now > (strtotime($evenement["endDate"]) + EMEMARGEMENT_END)) {
  479. $return["result"] = FALSE;
  480. $return["description"] = "Cet évènement est terminé";
  481. } elseif (isset($inscription["present"])) {
  482. $return["result"] = FALSE;
  483. $return["description"] = "Votre émargement a déjà été pris en compte<br />le " . core::convertDate($inscription["present"]);
  484. } else {
  485. $return["result"] = TRUE;
  486. $return["description"] = "Votre émargement a été pris en compte";
  487. }
  488. $return["evenement"] = $evenement["titre"];
  489. return $return;
  490. }
  491. /**
  492. * Enregistre l'émargement d'un salarié pour un événement spécifique.
  493. *
  494. * @param int $_idEvenement Identifiant de l'événement.
  495. * @param int $_idSalarie Identifiant du salarié.
  496. * @param int|null $_idAdmin Identifiant de l'administrateur (facultatif).
  497. * @return array Retourne un tableau contenant le résultat et la description.
  498. */
  499. public static function emargementEvenement(int $_idEvenement, int $_idSalarie, ?int $_idAdmin = NULL)
  500. {
  501. $inscription = self::getInscriptionEvenementById($_idEvenement, $_idSalarie);
  502. $evenement = self::getFiche($_idEvenement);
  503. if (!isset($inscription["present"]) or empty($inscription["present"])) {
  504. if (isset($inscription["id_salarie"])) {
  505. db::query("UPDATE " . DB_T_EVENTS_INSCRITS . " SET present = CURRENT_TIMESTAMP(), id_admin_present = :id_admin_present WHERE id_evenement = :id_evenement AND id_salarie = :id_salarie");
  506. db::bind(':id_evenement', $_idEvenement);
  507. db::bind(':id_salarie', $_idSalarie);
  508. db::bind(':id_admin_present', $_idAdmin);
  509. db::execute();
  510. $return["result"] = TRUE;
  511. $return["evenement"] = $evenement["titre"];
  512. $return["description"] = "L'émargement a été pris en compte";
  513. } else {
  514. db::query("INSERT INTO " . DB_T_EVENTS_INSCRITS . " (id_evenement, id_salarie, present, id_admin_present) "
  515. . "VALUES (:id_evenement, :id_salarie, CURRENT_TIMESTAMP(), :id_admin_present)");
  516. db::bind(':id_evenement', $_idEvenement);
  517. db::bind(':id_salarie', $_idSalarie);
  518. db::bind(':id_admin_present', $_idAdmin);
  519. db::execute();
  520. $return["result"] = TRUE;
  521. $return["evenement"] = $evenement["titre"];
  522. $return["description"] = "L'émargement a été pris en compte";
  523. }
  524. } else {
  525. $return["result"] = FALSE;
  526. $return["description"] = "Emargement déjà pris en compte le " . core::convertDate($inscription["present"]);
  527. }
  528. return $return;
  529. }
  530. /**
  531. * Enregistre l'émargement d'un salarié pour un événement via un QR code.
  532. *
  533. * @return array Retourne un tableau contenant le résultat et la description.
  534. */
  535. public static function emargementEvenementByQRCode()
  536. {
  537. $idSalarie = core::getGet("s");
  538. $md5Evenement = core::getGet("e");
  539. $key = core::getGet("k");
  540. $salarie = salaries::getSalarieById($idSalarie);
  541. $constructKey = md5($md5Evenement . $salarie["sel"]);
  542. if ($constructKey == $key) {
  543. $checkEmarge = self::emargementEvenement(self::getIdEvenementByMd5($md5Evenement), $salarie["id"]);
  544. return $checkEmarge;
  545. } else {
  546. $return["result"] = FALSE;
  547. $return["description"] = "Le QR-Code n'est pas valide";
  548. return $return;
  549. }
  550. }
  551. /**
  552. * Affiche un bouton pour un événement spécifique.
  553. *
  554. * @param array $_array Données de l'événement.
  555. * @return void
  556. */
  557. public static function printEventBouton(array $_array)
  558. {
  559. switch ($_array["nb"]) {
  560. case 0:
  561. $class_fadeIn = "first";
  562. break;
  563. case 1:
  564. $class_fadeIn = "second";
  565. break;
  566. case 2:
  567. $class_fadeIn = "third";
  568. break;
  569. case 3:
  570. $class_fadeIn = "fourth";
  571. break;
  572. default:
  573. $class_fadeIn = "fifth";
  574. break;
  575. }
  576. if ($_array["type_emargement"] == 1) {
  577. $explication = '<p class="card-text">
  578. <div>[ QRCode à présenter à votre arrivée ]</div>
  579. <br />
  580. <div><i class="bi bi-fullscreen" style="font-size:2rem"></i></div>
  581. </p>';
  582. $meta = 'data-toggle="modal" data-target="#QRCodeModal" data-qrr-qrcode-regexp="^https?:\/\/" data-sel="' . $_array["url_qrcode"] . '" data-titre="' . $_array["titre"] . '"';
  583. $class_card = 'showQRCode';
  584. $txt["footer"] = "Cliquez ici pour afficher votre QRCode";
  585. } else {
  586. $explication = '<p class="card-text">
  587. <div>[ QRCode à flasher vous même ]</div>
  588. <br />
  589. <div><i class="bi bi-camera-video" style="font-size:2rem"></i></div>
  590. </p>';
  591. $meta = 'data-event="' . $_array["md5"] . '" data-qrr-target="#QRCodeRead" ';
  592. $class_card = 'qrcodeReader';
  593. $txt["footer"] = "Cliquez ici pour scanner le QRCode";
  594. }
  595. if (isset($_array["present"])) {
  596. $meta = "";
  597. $explication = '<p class="card-text">Votre émargement a bien été pris en compte</p>';
  598. $class["card-text"] = "text-success";
  599. $class["card"] = "";
  600. $txt["footer"] = "Emargement réalisé le " . core::convertDate($_array["present"]);
  601. } else {
  602. $class["card-text"] = "text-dark";
  603. $class["card"] = $class_card;
  604. }
  605. echo ' <div ' . $meta . ' class="card mb-3 text-center ' . $class["card"] . ' ' . $class["card-text"] . ' fadeIn ' . $class_fadeIn . '">
  606. <div class="card-header"><small>Du ' . core::convertDate($_array["startDate"]) . ' au ' . core::convertDate($_array["endDate"]) . '</small></div>
  607. <div class="card-body">
  608. <h5 class="card-title">' . $_array["titre"] . '</h5>
  609. ' . $explication . '
  610. </div>
  611. <div class="card-footer"><small>' . $txt["footer"] . '</small></div>
  612. </div>';
  613. }
  614. /**
  615. * Affiche une icône de résultat pour un flash QR code.
  616. *
  617. * @param string $_result Résultat du flash (1 pour succès, autre pour échec).
  618. * @return void
  619. */
  620. public static function printIconeResultFlash(string $_result)
  621. {
  622. if ($_result == 1) {
  623. echo ' <div class="swal2-icon swal2-success swal2-animate-success-icon" style="display: flex;">
  624. <div class="swal2-success-circular-line-left" style="background-color: rgb(255, 255, 255);"></div>
  625. <span class="swal2-success-line-tip"></span>
  626. <span class="swal2-success-line-long"></span>
  627. <div class="swal2-success-ring"></div>
  628. <div class="swal2-success-fix" style="background-color: rgb(255, 255, 255);"></div>
  629. <div class="swal2-success-circular-line-right" style="background-color: rgb(255, 255, 255);"></div>
  630. </div>';
  631. } else {
  632. echo ' <div class="swal2-icon swal2-error swal2-animate-error-icon" style="display: flex;">
  633. <span class="swal2-x-mark"><span class="swal2-x-mark-line-left"></span><span class="swal2-x-mark-line-right"></span></span>
  634. </div>';
  635. }
  636. }
  637. }