FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . $fichier_memo, serialize($tab_users_fichier));
    // On affiche la demande de confirmation
    exit('ok' . ']¤[' . html($date_export) . ']¤[' . html($periode_libelle) . ']¤[' . html($periode_date_debut) . ']¤[' . html($periode_date_fin));
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Réception et analyse d'un fichier d'import issu de GEPI Absences 2
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'import_gepi' && $periode_id) {
    // Récupération du fichier
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_dest, $tab_extensions_autorisees, NULL, NULL, '');
    if ($result !== TRUE) {
        exit('Erreur : ' . $result);
    }
    // Récupération des données du fichier
    $contenu = file_get_contents(CHEMIN_DOSSIER_IMPORT . $fichier_dest);
    $contenu = To::deleteBOM(To::utf8($contenu));
    // Mettre en UTF-8 si besoin et retirer le BOM éventuel
    $tab_lignes = extraire_lignes($contenu);
    // Extraire les lignes du fichier
    $separateur = extraire_separateur_csv($tab_lignes[0]);
    // Déterminer la nature du séparateur
    unset($tab_lignes[0]);
    // Supprimer la 1e ligne
    // Aanalyse et maj du contenu de la base
    $tab_users_fichier = array();
    foreach ($tab_lignes as $ligne_contenu) {
        $tab_elements = str_getcsv($ligne_contenu, $separateur);
        $tab_elements = array_slice($tab_elements, 0, 7);
        if (count($tab_elements) == 7) {
            list($elenoet, $nom, $prenom, $classe, $nb_absence, $nb_absence_nj, $nb_retard) = $tab_elements;
            $tab_users_fichier[] = array(NULL, Clean::entier($elenoet), Clean::nom($nom), Clean::prenom($prenom), Clean::entier($nb_absence), Clean::entier($nb_absence_nj), Clean::entier($nb_retard), NULL);
 /**
  * Vérifier qu'une arborescence XML d'un référentiel est syntaxiquement valide.
  * 
  * @param string    $arbreXML
  * @return string   "ok" ou "Erreur..."
  */
 public static function verifier_arborescence_XML($arbreXML)
 {
   // On ajoute déclaration et doctype au fichier (évite que l'utilisateur ait à se soucier de cette ligne et permet de le modifier en cas de réorganisation
   // Attention, le chemin du DTD est relatif par rapport à l'emplacement du fichier XML (pas celui du script en cours) !
   $fichier_adresse = CHEMIN_DOSSIER_IMPORT.'referentiel_'.fabriquer_fin_nom_fichier__date_et_alea().'.xml';
   $fichier_contenu = '<?xml version="1.0" encoding="UTF-8"?>'."\r\n".'<!DOCTYPE arbre SYSTEM "../../_dtd/referentiel.dtd">'."\r\n".$arbreXML;
   $fichier_contenu = To::deleteBOM(To::utf8($fichier_contenu)); // Mettre en UTF-8 si besoin et retirer le BOM éventuel
   // On enregistre temporairement dans un fichier pour analyse
   FileSystem::ecrire_fichier($fichier_adresse,$fichier_contenu);
   // On lance le test
   $test_XML_valide = ServeurCommunautaire::analyser_XML($fichier_adresse);
   // On efface le fichier temporaire
   FileSystem::supprimer_fichier($fichier_adresse);
   return $test_XML_valide;
 }
Example #3
0
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Cas 2 : réception d'un import csv (saisie déportée)
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if($ACTION=='uploader_saisie_csv')
{
  $fichier_nom = 'saisie_deportee_'.$_SESSION['BASE'].'_'.$_SESSION['USER_ID'].'_'.Clean::fichier($BILAN_TYPE).'_'.$periode_id.'_'.$groupe_id.'_'.$BILAN_ETAT.'_'.fabriquer_fin_nom_fichier__date_et_alea();
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , $fichier_nom.'.<EXT>' /*fichier_nom*/ , array('txt','csv') /*tab_extensions_autorisees*/ , NULL /*tab_extensions_interdites*/ , NULL /*taille_maxi*/ , NULL /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit('Erreur : '.$result);
  }
  $contenu_csv = file_get_contents(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name);
  $contenu_csv = To::deleteBOM(To::utf8($contenu_csv)); // Mettre en UTF-8 si besoin et retirer le BOM éventuel
  $tab_lignes = extraire_lignes($contenu_csv); // Extraire les lignes du fichier
  if(count($tab_lignes)<4)
  {
    exit('Erreur : absence de données suffisantes (fichier comportant moins de 4 lignes) !');
  }
  $separateur = extraire_separateur_csv($tab_lignes[2]); // Déterminer la nature du séparateur
  // Données de la ligne d'en-tête
  $tab_elements = str_getcsv($tab_lignes[0],$separateur);
  unset($tab_lignes[0]);
  list($string_references,$titre) = $tab_elements + array_fill(0,2,NULL); // Evite des NOTICE en initialisant les valeurs manquantes
  $tab_references = explode('_',$string_references);
  if(count($tab_references)!=5)
  {
    exit('Erreur : ligne d\'en-tête invalide !');
  }
    }
    $fnom_export = 'saisie_deportee_' . $_SESSION['BASE'] . '_' . $_SESSION['USER_ID'] . '_' . Clean::fichier($BILAN_TYPE) . '_' . Clean::fichier($periode_nom) . '_' . Clean::fichier($groupe_nom) . '_' . $BILAN_ETAT . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.csv';
    FileSystem::ecrire_fichier(CHEMIN_DOSSIER_EXPORT . $fnom_export, To::csv($export_csv));
    exit($fnom_export);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Cas 2 : réception d'un import csv (saisie déportée)
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($ACTION == 'uploader_saisie_csv') {
    $fichier_nom = 'saisie_deportee_' . $_SESSION['BASE'] . '_' . $_SESSION['USER_ID'] . '_' . Clean::fichier($BILAN_TYPE) . '_' . $periode_id . '_' . $groupe_id . '_' . $BILAN_ETAT . '_' . fabriquer_fin_nom_fichier__date_et_alea();
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_nom . '.<EXT>', array('txt', 'csv'), NULL, NULL, NULL);
    if ($result !== TRUE) {
        exit('Erreur : ' . $result);
    }
    $contenu_csv = file_get_contents(CHEMIN_DOSSIER_IMPORT . FileSystem::$file_saved_name);
    $contenu_csv = To::deleteBOM(To::utf8($contenu_csv));
    // Mettre en UTF-8 si besoin et retirer le BOM éventuel
    $tab_lignes = extraire_lignes($contenu_csv);
    // Extraire les lignes du fichier
    if (count($tab_lignes) < 4) {
        exit('Erreur : absence de données suffisantes (fichier comportant moins de 4 lignes) !');
    }
    $separateur = extraire_separateur_csv($tab_lignes[2]);
    // Déterminer la nature du séparateur
    // Données de la ligne d'en-tête
    $tab_elements = str_getcsv($tab_lignes[0], $separateur);
    unset($tab_lignes[0]);
    list($string_references, $titre) = $tab_elements + array_fill(0, 2, NULL);
    // Evite des NOTICE en initialisant les valeurs manquantes
    $tab_references = explode('_', $string_references);
    if (count($tab_references) != 5) {
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Importer un fichier de validations
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( in_array( $action , array('import_sacoche','import_compatible') ) )
{
  // Si c'est un fichier zippé, on considère alors que c'est un zip devant venir de SACoche, et contenant import_validations.xml
  $fichier_nom = 'import_validations_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea().'.xml';
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , $fichier_nom /*fichier_nom*/ , array('xml','zip') /*tab_extensions_autorisees*/ , NULL /*tab_extensions_interdites*/ , NULL /*taille_maxi*/ , 'import_validations.xml' /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit('Erreur : '.$result);
  }
  $fichier_contenu = file_get_contents(CHEMIN_DOSSIER_IMPORT.$fichier_nom);
  $fichier_contenu = To::deleteBOM(To::utf8($fichier_contenu)); // Mettre en UTF-8 si besoin et retirer le BOM éventuel
  $xml = @simplexml_load_string($fichier_contenu);
  if($xml===FALSE)
  {
    exit('Erreur : le fichier transmis n\'est pas un XML valide !');
  }
  // On extrait les infos du XML
  $tab_eleve_fichier = array();
  if( ($xml->donnees) && ($xml->donnees->eleve) )
  {
    foreach ($xml->donnees->eleve as $eleve)
    {
      $tab_eleve_fichier['sconet_id'][] = Clean::entier($eleve->attributes()->id);
      $tab_eleve_fichier['nom'][]       = Clean::nom($eleve->attributes()->nom);
      $tab_eleve_fichier['prenom'][]    = Clean::prenom($eleve->attributes()->prenom);
      // Indication des (in-)validations
    }
    echo '<li><label class="alerte">Pour des raisons de sécurité et de confidentialité, ce fichier sera effacé du serveur dans 1h.</label></li>' . NL;
    exit;
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Importer un fichier de validations
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if (in_array($action, array('import_sacoche', 'import_compatible'))) {
    // Si c'est un fichier zippé, on considère alors que c'est un zip devant venir de SACoche, et contenant import_validations.xml
    $fichier_nom = 'import_validations_' . $_SESSION['BASE'] . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.xml';
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_nom, array('xml', 'zip'), NULL, NULL, 'import_validations.xml');
    if ($result !== TRUE) {
        exit('Erreur : ' . $result);
    }
    $fichier_contenu = file_get_contents(CHEMIN_DOSSIER_IMPORT . $fichier_nom);
    $fichier_contenu = To::deleteBOM(To::utf8($fichier_contenu));
    // Mettre en UTF-8 si besoin et retirer le BOM éventuel
    $xml = @simplexml_load_string($fichier_contenu);
    if ($xml === FALSE) {
        exit('Erreur : le fichier transmis n\'est pas un XML valide !');
    }
    // On extrait les infos du XML
    $tab_eleve_fichier = array();
    if ($xml->donnees && $xml->donnees->eleve) {
        foreach ($xml->donnees->eleve as $eleve) {
            $tab_eleve_fichier['sconet_id'][] = Clean::entier($eleve->attributes()->id);
            $tab_eleve_fichier['nom'][] = Clean::nom($eleve->attributes()->nom);
            $tab_eleve_fichier['prenom'][] = Clean::prenom($eleve->attributes()->prenom);
            // Indication des (in-)validations
            $tab_validations = array();
            if ($eleve->palier) {