* de la “GNU Affero General Public License” telle que publiée par la Free Software Foundation :
 * soit la version 3 de cette licence, soit (à votre gré) toute version ultérieure.
 * 
 * SACoche est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE :
 * sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER.
 * Consultez la Licence Publique Générale GNU Affero pour plus de détails.
 * 
 * Vous devriez avoir reçu une copie de la Licence Publique Générale GNU Affero avec SACoche ;
 * si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>.
 * 
 */
if (!defined('SACoche')) {
    exit('Ce fichier ne peut être appelé directement !');
}
if ($_SESSION['SESAMATH_ID'] == ID_DEMO) {
    exit('Action désactivée pour la démo...');
}
$action = isset($_POST['f_action']) ? Clean::texte($_POST['f_action']) : '';
$motif = isset($_POST['f_motif']) ? Clean::texte($_POST['f_motif']) : '';
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Bloquer ou débloquer l'application
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'debloquer') {
    LockAcces::debloquer_application($_SESSION['USER_PROFIL_TYPE'], $_SESSION['BASE']);
    exit('<label class="valide">Application accessible.</label>');
} elseif ($action == 'bloquer') {
    LockAcces::bloquer_application($_SESSION['USER_PROFIL_TYPE'], $_SESSION['BASE'], $motif);
    exit('<label class="erreur">Application fermée : ' . html($motif) . '</label>');
} else {
    echo 'Erreur avec les données transmises !';
}
if ($action == 'exporter' && $num && $max && $num < $max) {
    // Récupérer la ligne de données
    $fichier_texte = file_get_contents(CHEMIN_DOSSIER_EXPORT . $fichier_csv_nom);
    $tab_ligne = explode("\r\n", $fichier_texte);
    // Récupérer une série d'infos, sachant que seuls $export_id et $fichier_nom sont utiles
    list($export_id, $import_id, $geo_id, $localisation, $denomination, $uai, $contact_nom, $contact_prenom, $contact_courriel, $date, $fichier_nom) = explode($separateur, $tab_ligne[$num]);
    // Charger les paramètres de connexion à cette base afin de pouvoir y effectuer des requêtes
    charger_parametres_mysql_supplementaires($export_id);
    // Créer ou vider le dossier temporaire des sql
    FileSystem::creer_ou_vider_dossier($dossier_temp_sql);
    // Bloquer l'application
    LockAcces::bloquer_application('automate', $export_id, 'Sauvegarde de la base en cours.');
    // Remplir le dossier temporaire avec les fichiers de svg des tables
    sauvegarder_tables_base_etablissement($dossier_temp_sql, 0);
    // Débloquer l'application
    LockAcces::debloquer_application('automate', $export_id);
    // Zipper les fichiers de svg
    FileSystem::zipper_fichiers($dossier_temp_sql, $dossier_temp_zip, $fichier_nom);
    // Appel suivant
    exit(']¤[' . 'ok');
} elseif ($action == 'exporter' && $num && $max && $num == $max) {
    // Supprimer le dossier temporaire des sql
    FileSystem::supprimer_dossier($dossier_temp_sql);
    // Zipper les zip de svg
    FileSystem::zipper_fichiers($dossier_temp_zip, CHEMIN_DOSSIER_DUMP, $fichier_zip_nom);
    // Supprimer le dossier temporaire des zip
    FileSystem::supprimer_dossier($dossier_temp_zip);
    // Game over
    unset($_SESSION['datetime'], $_SESSION['alea']);
    exit(']¤[' . 'ok' . ']¤[' . URL_DIR_EXPORT . $fichier_csv_nom . ']¤[' . URL_DIR_DUMP . $fichier_zip_nom);
}
Exemplo n.º 3
0
/**
 * Mettre à jour automatiquement la base si besoin ; à effectuer avant toute récupération des données sinon ça peut poser pb...
 * 
 * @param int   $BASE
 * @return void
 */
function maj_base_structure_si_besoin($BASE)
{
  $version_base_structure = DB_STRUCTURE_PUBLIC::DB_version_base();
  if($version_base_structure != VERSION_BASE_STRUCTURE)
  {
    // On ne met pas à jour la base tant que le webmestre bloque l'accès à l'application, car sinon cela pourrait se produire avant le transfert de tous les fichiers.
    if(LockAcces::tester_blocage('webmestre',0)===NULL)
    {
      // Bloquer l'application
      LockAcces::bloquer_application('automate',$BASE,'Mise à jour de la base en cours.');
      // Lancer une mise à jour de la base
      DB_STRUCTURE_MAJ_BASE::DB_maj_base($version_base_structure);
      // Log de l'action
      SACocheLog::ajouter('Mise à jour automatique de la base '.SACOCHE_STRUCTURE_BD_NAME.'.');
      // Débloquer l'application
      LockAcces::debloquer_application('automate',$BASE);
    }
  }
}
  exit('<ok>');
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Bloquer les accès à une structure
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='bloquer') && $base_id )
{
  LockAcces::bloquer_application($_SESSION['USER_PROFIL_TYPE'],$base_id,'Action ciblée ; contacter le webmestre pour obtenir des précisions.');
  exit('<img class="debloquer" src="./_img/etat/acces_non.png" title="Débloquer cet établissement." />');
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Débloquer les accès à une structure
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='debloquer') && $base_id )
{
  LockAcces::debloquer_application($_SESSION['USER_PROFIL_TYPE'],$base_id);
  exit('<img class="bloquer" src="./_img/etat/acces_oui.png" title="Bloquer cet établissement." />');
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// On ne devrait pas en arriver là...
// ////////////////////////////////////////////////////////////////////////////////////////////////////

exit('Erreur avec les données transmises !');

?>
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Suppression des notes et des validations
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if($action=='supprimer')
{
  // Bloquer l'application
  LockAcces::bloquer_application('automate',$_SESSION['BASE'],'Suppression des notes et des validations en cours.');
  // Supprimer toutes les saisies aux évaluations
  DB_STRUCTURE_ADMINISTRATEUR::DB_supprimer_saisies();
  // Supprimer toutes les validations du socle
  DB_STRUCTURE_ADMINISTRATEUR::DB_supprimer_validations();
  // Débloquer l'application
  LockAcces::debloquer_application('automate',$_SESSION['BASE']);
  // Notifications (rendues visibles ultérieurement)
  $notification_contenu = date('d-m-Y H:i:s').' '.$_SESSION['USER_PRENOM'].' '.$_SESSION['USER_NOM'].' a supprimé toutes les notes et les validations enregistrées.'."\r\n";
  DB_STRUCTURE_NOTIFICATION::enregistrer_action_admin( $notification_contenu , $_SESSION['USER_ID'] );
  // Afficher le retour
  echo'<li><label class="valide">Notes saisies aux évaluations supprimées.</label></li>'.NL;
  echo'<li><label class="valide">Validations des items et des compétences du socle supprimées.</label></li>'.NL;
  $top_arrivee = microtime(TRUE);
  $duree = number_format($top_arrivee - $top_depart,2,',','');
  echo'<li><label class="valide">Suppression des notes et des validations réalisée en '.$duree.'s.</label></li>'.NL;
  exit();
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Effacement des étiquettes nom & prénom
// ////////////////////////////////////////////////////////////////////////////////////////////////////
Exemplo n.º 6
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);
         }
     }
 }