cron.class.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Classe `cron`
  4. *
  5. * Cette classe gère les tâches planifiées (cron jobs) pour l'application.
  6. *
  7. * Fonctionnalités principales :
  8. * - Vérification de l'exécution en environnement local.
  9. * - Gestion des paramètres d'alertes email.
  10. * - Envoi d'emails pour les documents assignés.
  11. *
  12. * @package Core\Class
  13. */
  14. class cron
  15. {
  16. /**
  17. * Vérifie si le script est exécuté en local.
  18. *
  19. * @return bool TRUE si exécuté en local, FALSE sinon.
  20. */
  21. public static function ifLocalHost(){
  22. return $_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR'] ? TRUE : FALSE;
  23. }
  24. /**
  25. * Envoie des emails pour les documents assignés.
  26. *
  27. * @return void
  28. */
  29. public static function sendMailAssignDocument(){
  30. foreach (document::assignMailDocument() as $assign) {
  31. if(self::checkParameter($assign["id"])){
  32. document::sendEmailCronAssign($assign);
  33. }
  34. }
  35. }
  36. /**
  37. * Insère les paramètres d'alertes email pour un utilisateur.
  38. *
  39. * @param array|null $_array Les paramètres d'alertes (heures et jours).
  40. * @return bool TRUE si l'insertion a réussi, FALSE sinon.
  41. */
  42. public static function insertParameter(array $_array = NULL){
  43. $userId = session::getId();
  44. db::query("DELETE FROM " . DB_T_ALERTES_EMAILS . " WHERE id_user = :id_user");
  45. db::bind(':id_user', $userId);
  46. db::execute();
  47. if(!is_null($_array)){
  48. foreach ($_array as $heure => $tmp) {
  49. foreach ($tmp as $jour => $value) {
  50. db::query("INSERT INTO " . DB_T_ALERTES_EMAILS . " (id, id_user, heure, jour) VALUES (:id, :id_user, :heure, :jour)");
  51. db::bind(':id', $userId."#".$heure."#".$jour);
  52. db::bind(':id_user', $userId);
  53. db::bind(':heure', $heure);
  54. db::bind(':jour', $jour);
  55. try {
  56. db::execute();
  57. } catch (Exception $ex) {
  58. alert::recError("Erreur d'enregistrement des alertes");
  59. return FALSE;
  60. }
  61. }
  62. }
  63. alert::recSuccess("Enregistrement pris en compte");
  64. return TRUE;
  65. } else {
  66. alert::recSuccess("Vous n'avez plus de plages horaires enregistrées");
  67. return TRUE;
  68. }
  69. }
  70. /**
  71. * Récupère les paramètres d'alertes email pour un utilisateur.
  72. *
  73. * @param float|null $_id L'ID de l'utilisateur (optionnel).
  74. * @return array|null Les paramètres d'alertes ou NULL si aucun paramètre.
  75. */
  76. public static function getParameter(float $_id = NULL){
  77. $userId = is_null($_id) ? session::getId() : $_id;
  78. db::query("SELECT "
  79. . "" . DB_T_ALERTES_EMAILS . ".heure, "
  80. . "" . DB_T_ALERTES_EMAILS . ".jour "
  81. . "FROM " . DB_T_ALERTES_EMAILS . " "
  82. . "WHERE id_user = :id_user");
  83. db::bind(':id_user', $userId);
  84. $tmp = db::resultset();
  85. if(isset($tmp)){
  86. $return = [];
  87. foreach ($tmp as $value) {
  88. $return[$value["heure"]][$value["jour"]] = 1;
  89. }
  90. return $return;
  91. } else {
  92. return NULL;
  93. }
  94. }
  95. /**
  96. * Vérifie si les paramètres d'alertes sont valides pour un utilisateur.
  97. *
  98. * @param float $_id L'ID de l'utilisateur.
  99. * @return bool TRUE si les paramètres sont valides, FALSE sinon.
  100. */
  101. public static function checkParameter(float $_id){
  102. $data = self::getParameter($_id);
  103. $jourSemaineOriginal = date('w');
  104. $jourSemaineAdjuste = ($jourSemaineOriginal + 6) % 7; // Pour que le Lundi soit le numéro 0
  105. return isset($data[date('G')][$jourSemaineAdjuste]) ? TRUE : FALSE;
  106. }
  107. }