/** * 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); } } }