Exemplo n.º 1
0
 /**
  * Test si l'accès est bloqué sur demande du webmestre ou d'un administrateur (maintenance, sauvegarde/restauration, ...).
  * Si tel est le cas, alors exit().
  * 
  * Nécessite que la session soit ouverte.
  * Appelé depuis les pages index.php + ajax.php + lors d'une demande d'identification d'un utilisateur (sauf webmestre)
  * 
  * En cas de blocage demandé par le webmestre, on ne laisse l'accès que :
  * - pour le webmestre déjà identifié
  * - pour la partie publique, si pas une demande d'identification, sauf demande webmestre
  * 
  * En cas de blocage demandé par un administrateur ou par l'automate (sauvegarde/restauration) pour un établissement donné, on ne laisse l'accès que :
  * - pour le webmestre déjà identifié
  * - pour un administrateur déjà identifié
  * - pour la partie publique, si pas une demande d'identification, sauf demande webmestre ou administrateur
  * 
  * @param string $BASE                             car $_SESSION['BASE'] non encore renseigné si demande d'identification
  * @param string $demande_connexion_profil_sigle   FALSE si appel depuis index.php ou ajax.php, le sigle du profil si demande d'identification
  * @return void | exit !
  */
 public static function stopper_si_blocage($BASE, $demande_connexion_profil_sigle)
 {
     // Blocage demandé par le webmestre pour tous les établissements (multi-structures) ou pour l'établissement (mono-structure).
     $blocage_msg = LockAcces::tester_blocage('webmestre', 0);
     if ($blocage_msg !== NULL && $_SESSION['USER_PROFIL_SIGLE'] != 'WBM' && ($_SESSION['USER_PROFIL_SIGLE'] != 'OUT' || $demande_connexion_profil_sigle != FALSE)) {
         exit_error('Blocage par le webmestre', html('Blocage par le webmestre - ' . $blocage_msg));
     }
     // Blocage demandé par le webmestre pour un établissement donné (multi-structures).
     $blocage_msg = LockAcces::tester_blocage('webmestre', $BASE);
     if ($blocage_msg !== NULL && $_SESSION['USER_PROFIL_SIGLE'] != 'WBM' && ($_SESSION['USER_PROFIL_SIGLE'] != 'OUT' || $demande_connexion_profil_sigle != FALSE)) {
         exit_error('Blocage par le webmestre', html('Blocage par le webmestre - ' . $blocage_msg));
     }
     // Blocage demandé par un administrateur pour son établissement.
     $blocage_msg = LockAcces::tester_blocage('administrateur', $BASE);
     if ($blocage_msg !== NULL && !in_array($_SESSION['USER_PROFIL_SIGLE'], array('WBM', 'ADM')) && ($_SESSION['USER_PROFIL_SIGLE'] != 'OUT' || !in_array($demande_connexion_profil_sigle, array(FALSE, 'WBM', 'ADM')))) {
         exit_error('Blocage par un administrateur', html('Blocage par un administrateur - ' . $blocage_msg));
     }
     // Blocage demandé par l'automate pour un établissement donné.
     $blocage_msg = LockAcces::tester_blocage('automate', $BASE);
     if ($blocage_msg !== NULL && !in_array($_SESSION['USER_PROFIL_SIGLE'], array('WBM', 'ADM')) && ($_SESSION['USER_PROFIL_SIGLE'] != 'OUT' || !in_array($demande_connexion_profil_sigle, array(FALSE, 'WBM', 'ADM')))) {
         // Au cas où une procédure de sauvegarde / restauration / nettoyage / tranfert échouerait, un fichier de blocage automatique pourrait être créé et ne pas être effacé.
         // Pour cette raison on teste une durée de vie anormalement longue d'une tel fichier de blocage (puisqu'il ne devrait être que temporaire).
         if ($_SERVER['REQUEST_TIME'] - filemtime(LockAcces::chemin_fichier_blocage('automate', $BASE)) < 5 * 60) {
             exit_error('Blocage automatique', html('Blocage automatique - ' . $blocage_msg));
         } else {
             // Annuler un blocage à SACoche par l'automate anormalement long.
             LockAcces::debloquer_application('automate', $BASE);
         }
     }
 }