예제 #1
0
      $export_csv .= ($with_note) ? $separateur."\r\n" : "\r\n" ;
    }
    $export_csv .= "\r\n"; // une valeur NULL donnera une chaine vide
  }
  $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_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);
예제 #2
0
 * si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>.
 * 
 */

if(!defined('SACoche')) {exit('Ce fichier ne peut être appelé directement !');}

/**
 * Code inclus commun aux pages
 * [./_inc/code_brevet_fiches_***.php]
 */

Erreur500::prevention_et_gestion_erreurs_fatales( TRUE /*memory*/ , FALSE /*time*/ );

// Chemins d'enregistrement

$fichier_nom = 'fiche_brevet_'.Clean::fichier($groupe_nom).'_'.fabriquer_fin_nom_fichier__date_et_alea() ;

// Initialisation de tableaux

$tab_eleve_infos    = array();  // [eleve_id] => array(eleve_INE,eleve_nom,eleve_prenom,eleve_genre,date_naissance,eleve_brevet_serie)
$tab_matiere        = array();  // [matiere_id] => matiere_nom
$tab_brevet_serie   = array();  // [serie_ref] => serie_nom
$tab_brevet_epreuve = array();  // [serie_ref][epreuve_code] => epreuve_nom, epreuve_obligatoire, epreuve_note_chiffree, epreuve_point_sup_10, epreuve_note_comptee, epreuve_coefficient, choix_matieres
$tab_eleve_saisie   = array();  // [eleve_id][epreuve_code][prof_id] => array(prof_info,appreciation,note); avec eleve_id=0 pour note ou appréciation sur la classe

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Récupération de l'identité des élèves
// ////////////////////////////////////////////////////////////////////////////////////////////////////

$tab_eleve_infos = DB_STRUCTURE_BILAN::DB_lister_eleves_cibles( $liste_eleve , 'alpha' /*eleves_ordre*/ , FALSE /*with_gepi*/ , FALSE /*with_langue*/ , TRUE /*with_brevet_serie*/ );
if(!is_array($tab_eleve_infos))
예제 #3
0
 * 
 * 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 !');
}
/**
 * Code inclus commun aux pages
 * [./pages/releve_socle.ajax.php]
 * [./_inc/code_officiel_***.php]
 */
Erreur500::prevention_et_gestion_erreurs_fatales(TRUE, FALSE);
// Chemins d'enregistrement
$fichier_nom = $make_action != 'imprimer' ? 'releve_socle_detail_' . Clean::fichier(substr($palier_nom, 0, strpos($palier_nom, ' ('))) . '_' . Clean::fichier($groupe_nom) . '_' . fabriquer_fin_nom_fichier__date_et_alea() : 'officiel_' . $BILAN_TYPE . '_' . Clean::fichier($groupe_nom) . '_' . fabriquer_fin_nom_fichier__date_et_alea();
// Tableau des langues
require CHEMIN_DOSSIER_INCLUDE . 'tableau_langues_socle.php';
$tab_item_pilier = array();
// id de l'item => id du pilier
// Initialisation de tableaux
$tab_pilier = array();
// [pilier_id] => pilier_nom;
$tab_section = array();
// [pilier_id][section_id] => section_nom;
$tab_socle = array();
// [section_id][socle_id] => socle_nom;
$tab_entree_id = array();
// [i] => entree_id
$tab_eleve_infos = array();
// [eleve_id] => array(eleve_INE,eleve_nom,eleve_prenom,date_naissance,eleve_langue)
예제 #4
0
    $tab_eleves[$DB_ROW['user_id']] = $DB_ROW['user_reference'];
}
// Récupérer les notes enregistrées ; convertir si besoin en nombre de points correspondants
$tab_points = array();
$DB_TAB = DB_STRUCTURE_BREVET::DB_lister_brevet_notes_eleves($listing_eleve_id);
if (count($DB_TAB)) {
    foreach ($DB_TAB as $DB_ROW) {
        if ($DB_ROW['brevet_epreuve_code'] == CODE_BREVET_EPREUVE_TOTAL) {
            $tab_points[$DB_ROW['eleve_id']][$DB_ROW['brevet_epreuve_code']] = $DB_ROW['saisie_note'];
        } elseif ($DB_ROW['brevet_epreuve_point_sup_10']) {
            $tab_points[$DB_ROW['eleve_id']][$DB_ROW['brevet_epreuve_code']] = max(0, $DB_ROW['saisie_note'] - 10);
        } else {
            $tab_points[$DB_ROW['eleve_id']][$DB_ROW['brevet_epreuve_code']] = is_numeric($DB_ROW['saisie_note']) ? $DB_ROW['saisie_note'] * $DB_ROW['brevet_epreuve_coefficient'] : $DB_ROW['saisie_note'];
        }
    }
}
// Fabriquer le fichier csv
$csv_contenu = '';
$csv_separateur = '|';
foreach ($tab_eleves as $eleve_id => $user_reference) {
    foreach ($tab_points[$eleve_id] as $epreuve_code => $points) {
        $csv_code = $epreuve_code != CODE_BREVET_EPREUVE_TOTAL ? (string) $epreuve_code : 'TOT';
        $format = $epreuve_code != CODE_BREVET_EPREUVE_TOTAL ? "%05.2f" : "%06.2f";
        $csv_note = is_numeric($points) ? sprintf($format, $points) : (string) $points;
        $csv_contenu .= $user_reference . $csv_separateur . $csv_code . $csv_separateur . $csv_note . $csv_separateur . NL;
    }
}
// Enregistrer le fichier csv / Retour
$fichier_nom = 'export_notanet' . '_' . Clean::fichier($_SESSION['WEBMESTRE_UAI']) . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.txt';
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_EXPORT . $fichier_nom, To::csv($csv_contenu));
exit($fichier_nom);
예제 #5
0
    }
    // Tag date heure initiales (code repris de [code_officiel_imprimer.php] )
    $tag_date_heure_initiales = date('d/m/Y H:i') . ' ' . afficher_identite_initiale($_SESSION['USER_PRENOM'], TRUE, $_SESSION['USER_NOM'], TRUE);
    // Fabrication du PDF
    $archivage_tableau_PDF = new PDF_archivage_tableau(TRUE, 'portrait', 5, 5, 5, 12, 'non');
    unset($tab_eleve_id[0]);
    $classe_effectif = count($tab_eleve_id);
    foreach ($tab_eleve_id as $eleve_id => $tab_eleve) {
        $archivage_tableau_PDF->recapitulatif_initialiser($tab_etabl_coords, $tab_eleve, $classe_nom, $classe_effectif, $annee_affichee, $tag_date_heure_initiales, $tab_nb_lignes[$eleve_id][0]);
        foreach ($tab_rubriques as $rubrique_id => $rubrique_nom) {
            $tab_profs = isset($tab_saisies[$eleve_id][$rubrique_id]['professeur']) ? $tab_saisies[$eleve_id][$rubrique_id]['professeur'] : NULL;
            $moyenne_eleve = $tab_moyennes[$rubrique_id][$eleve_id];
            $moyenne_classe = $tab_moyennes[$rubrique_id][0];
            $tab_appreciations = isset($tab_saisies[$eleve_id][$rubrique_id]['appreciation']) ? $tab_saisies[$eleve_id][$rubrique_id]['appreciation'] : array();
            $archivage_tableau_PDF->recapitulatif_rubrique($tab_nb_lignes[$eleve_id][$rubrique_id], $rubrique_nom, $tab_profs, $moyenne_eleve, $moyenne_classe, $tab_appreciations);
        }
    }
    $periode_nom = 'Année Scolaire';
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Enregistrement et affichage du retour.
// ////////////////////////////////////////////////////////////////////////////////////////////////////
$fichier_export = 'saisies_' . $BILAN_TYPE . '_' . Clean::fichier($periode_nom) . '_' . Clean::fichier($classe_nom) . '_' . $action . '_' . fabriquer_fin_nom_fichier__date_et_alea();
FileSystem::ecrire_sortie_PDF(CHEMIN_DOSSIER_EXPORT . $fichier_export . '.pdf', $archivage_tableau_PDF);
echo '<a target="_blank" href="' . URL_DIR_EXPORT . $fichier_export . '.pdf"><span class="file file_pdf">' . $tab_actions[$action] . ' (format <em>pdf</em>).</span></a>';
// Et le csv éventuel
if ($action == 'imprimer_donnees_eleves_moyennes') {
    FileSystem::ecrire_fichier(CHEMIN_DOSSIER_EXPORT . $fichier_export . '.csv', To::csv($archivage_tableau_CSV));
    echo '<br />' . NL . '<a target="_blank" href="./force_download.php?fichier=' . $fichier_export . '.csv"><span class="file file_txt">' . $tab_actions[$action] . ' (format <em>csv</em>).</span></a>';
}
exit;
 * Libérer de la place mémoire car les scripts de bilans sont assez gourmands.
 * Supprimer $DB_TAB ne fonctionne pas si on ne force pas auparavant la fermeture de la connexion.
 * SebR devrait peut-être envisager d'ajouter une méthode qui libère cette mémoire, si c'est possible...
 */
// ////////////////////////////////////////////////////////////////////////////////////////////////////

DB::close(SACOCHE_STRUCTURE_BD_NAME);
unset($DB_TAB);

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Tableaux et variables pour mémoriser les infos ; dans cette partie on ne fait que les calculs (aucun affichage)
// ////////////////////////////////////////////////////////////////////////////////////////////////////

$fichier = 'grille_item_'.Clean::fichier($matiere_nom).'_'.Clean::fichier($niveau_nom).'_<REPLACE>_'.fabriquer_fin_nom_fichier__date_et_alea();
$fichier_nom_type1 = ($type_generique) ? str_replace( '<REPLACE>' , 'generique' , $fichier ) : str_replace( '<REPLACE>' , Clean::fichier($groupe_nom).'_individuel' , $fichier ) ;
$fichier_nom_type2 = str_replace( '<REPLACE>' , Clean::fichier($groupe_nom).'_synthese' , $fichier ) ;

$tab_score_eleve_item         = array();  // Retenir les scores / élève / item
$tab_score_item_eleve         = array();  // Retenir les scores / item / élève
$tab_moyenne_scores_eleve     = array();  // Retenir la moyenne des scores d'acquisitions / élève
$tab_pourcentage_acquis_eleve = array();  // Retenir le pourcentage d'items acquis / élève
$tab_moyenne_scores_item      = array();  // Retenir la moyenne des scores d'acquisitions / item
$tab_pourcentage_acquis_item  = array();  // Retenir le pourcentage d'items acquis / item
$moyenne_moyenne_scores       = 0;  // moyenne des moyennes des scores d'acquisitions
$moyenne_pourcentage_acquis   = 0;  // moyenne des moyennes des pourcentages d'items acquis

/*
  Calcul des états d'acquisition (si besoin) et des données nécessaires pour le tableau de synthèse (si besoin).
  $tab_score_eleve_item[$eleve_id][$item_id]
  $tab_score_item_eleve[$item_id][$eleve_id]
  $tab_moyenne_scores_eleve[$eleve_id]
            $releve_HTML_body .= '<td class="nu2"></td>';
            foreach ($tab as $socle_id => $socle_nom) {
                $releve_HTML_body .= Html::td_validation('td', $tab_user_entree[$eleve_id][$socle_id], FALSE, $tab_user_pilier[$eleve_id][$pilier_id]['etat']);
            }
        }
        $releve_HTML_body .= '</tr>' . NL;
        $releve_PDF->validation_eleve($eleve_id, $eleve_nom, $eleve_prenom, $tab_user_pilier, $tab_user_entree, $tab_pilier, $tab_socle, $drapeau_langue);
    }
}
$releve_HTML .= $affichage_checkbox ? '<form id="form_synthese" action="#" method="post">' . NL : '';
$releve_HTML .= '<table class="bilan"><thead>' . NL . $releve_HTML_head . '</thead><tbody>' . NL . $releve_HTML_body . '</tbody></table>' . NL;
$releve_HTML .= $affichage_checkbox ? HtmlForm::afficher_synthese_exploitation('eleves') . '</form>' . NL : '';
$releve_HTML .= Html::legende(FALSE, FALSE, FALSE, FALSE, $type == 'pourcentage', $type == 'validation', FALSE);
$releve_PDF->legende($type);
// Chemins d'enregistrement
$fichier = 'releve_socle_synthese_' . Clean::fichier(substr($palier_nom, 0, strpos($palier_nom, ' ('))) . '_' . Clean::fichier($groupe_nom) . '_' . $type . '_' . fabriquer_fin_nom_fichier__date_et_alea();
// On enregistre les sorties HTML et PDF
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_EXPORT . $fichier . '.html', $releve_HTML);
FileSystem::ecrire_sortie_PDF(CHEMIN_DOSSIER_EXPORT . $fichier . '.pdf', $releve_PDF);
// Affichage du résultat
if ($affichage_direct) {
    echo '<hr />' . NL;
    echo '<ul class="puce">' . NL;
    echo '<li><a target="_blank" href="' . URL_DIR_EXPORT . $fichier . '.pdf"><span class="file file_pdf">Archiver / Imprimer (format <em>pdf</em>).</span></a></li>' . NL;
    echo '</ul>' . NL;
    echo $releve_HTML;
} else {
    echo '<ul class="puce">' . NL;
    echo '<li><a target="_blank" href="' . URL_DIR_EXPORT . $fichier . '.pdf"><span class="file file_pdf">Archiver / Imprimer (format <em>pdf</em>).</span></a></li>' . NL;
    echo '<li><a target="_blank" href="./releve_html.php?fichier=' . $fichier . '"><span class="file file_htm">Explorer / Détailler (format <em>html</em>).</span></a></li>' . NL;
    echo '</ul>' . NL;
 FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT.$fichier_nom);
 if($code_erreur)
 {
   FileSystem::supprimer_dossier($dossier_temp); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.
   exit('Erreur : votre archive ZIP n\'a pas pu être ouverte ('.FileSystem::$tab_zip_error[$code_erreur].') !');
 }
 // Récupérer la liste des élèves et fabriquer le nom de fichier attendu correspondant à chacun
 $tab_bad = array( '[sconet_id]' , '[sconet_num]' , '[reference]' , '[nom]' , '[prenom]' , '[login]' , '[ent_id]' );
 $champs = 'user_id, user_id_ent, user_sconet_id, user_sconet_elenoet, user_reference, user_nom, user_prenom, user_login' ;
 $DB_TAB = DB_STRUCTURE_COMMUN::DB_lister_users_regroupement( 'eleve' /*profil_type*/ , 1 /*statut*/ , 'all' /*groupe_type*/ , 0 /*groupe_id*/ , 'alpha' /*eleves_ordre*/ , $champs );
 if(!empty($DB_TAB))
 {
   foreach($DB_TAB as $DB_ROW)
   {
     $tab_bon = array( $DB_ROW['user_sconet_id'] , $DB_ROW['user_sconet_elenoet'] , Clean::fichier($DB_ROW['user_reference']) , Clean::fichier($DB_ROW['user_nom']) , Clean::fichier($DB_ROW['user_prenom']) , Clean::fichier($DB_ROW['user_login']) , Clean::fichier($DB_ROW['user_id_ent']) );
     $tab_fichier_masque[$DB_ROW['user_id']] = Clean::fichier(str_replace( $tab_bad , $tab_bon , $masque ));
   }
 }
 // Pour l'affichage du retour
 $thead = '<tr><td colspan="2">Import d\'un fichier de photos zippées le '.date('d/m/Y H:i:s').'</td></tr>';
 $tbody = '';
 // Traiter les fichier un à un
 $tab_fichier = FileSystem::lister_contenu_dossier($dossier_temp);
 foreach($tab_fichier as $fichier_nom)
 {
   // echo'*'.$fichier_nom;
   $tab_user_id = array_keys( $tab_fichier_masque , $fichier_nom );
   $nb_user_find = count($tab_user_id);
   if($nb_user_find == 0)
   {
     $tbody .= '<tr><td class="r">'.html($fichier_nom).'</td><td>Pas de correspondance trouvée.</td></tr>';
예제 #9
0
 * [./pages/brevet_moyennes.ajax.php]
 * [./_inc/code_officiel_***.php]
 */

Erreur500::prevention_et_gestion_erreurs_fatales( TRUE /*memory*/ , FALSE /*time*/ );

/*
$type_individuel | $type_synthese | $type_bulletin
$releve_modele [ matiere | selection | multimatiere | professeur ]
*/

$matiere_et_groupe = ($releve_modele=='matiere') ? $matiere_nom.' - '.$groupe_nom : $groupe_nom ;

// Chemins d'enregistrement

$fichier_nom = ($make_action!='imprimer') ? 'releve_item_'.$releve_modele.'_'.Clean::fichier($groupe_nom).'_<REPLACE>_'.fabriquer_fin_nom_fichier__date_et_alea() : 'officiel_'.$BILAN_TYPE.'_'.Clean::fichier($groupe_nom).'_'.fabriquer_fin_nom_fichier__date_et_alea() ;

// Si pas grille générique et si notes demandées ou besoin pour colonne bilan ou besoin pour synthèse
$calcul_acquisitions = ( $type_synthese || $type_bulletin || $aff_etat_acquisition ) ? TRUE : FALSE ;

// Initialisation de tableaux

$tab_item_infos       = array();  // [item_id] => array(item_ref,item_nom,item_coef,item_cart,item_socle,item_lien,calcul_methode,calcul_limite,calcul_retroactif);
$tab_matiere_item     = array();  // [matiere_id][item_id] => item_nom
$tab_eleve_infos      = array();  // [eleve_id] => array(eleve_INE,eleve_nom,eleve_prenom,date_naissance,eleve_id_gepi)
$tab_matiere          = array();  // [matiere_id] => array(matiere_nom,matiere_nb_demandes)
$tab_eval             = array();  // [eleve_id][matiere_id][item_id][devoir] OU [matiere_id][item_id][eleve_id][devoir] => array(note,date,info)

// Initialisation de variables

if( ($make_html) || ($make_pdf) )
예제 #10
0
$repartition_type = (isset($_POST['f_repartition_type'])) ? Clean::texte($_POST['f_repartition_type'])      : '';
$cart_detail      = (isset($_POST['f_detail']))           ? Clean::texte($_POST['f_detail'])                : '';
$cart_cases_nb    = (isset($_POST['f_cases_nb']))         ? Clean::entier($_POST['f_cases_nb'])             : '';
$cart_contenu     = (isset($_POST['f_contenu']))          ? Clean::texte($_POST['f_contenu'])               : '';
$orientation      = (isset($_POST['f_orientation']))      ? Clean::texte($_POST['f_orientation'])           : '';
$marge_min        = (isset($_POST['f_marge_min']))        ? Clean::texte($_POST['f_marge_min'])             : '';
$couleur          = (isset($_POST['f_couleur']))          ? Clean::texte($_POST['f_couleur'])               : '';
$fond             = (isset($_POST['f_fond']))             ? Clean::texte($_POST['f_fond'])                  : '';
$only_req         = (isset($_POST['f_restriction_req']))  ? TRUE                                            : FALSE;
$doc_objet        = (isset($_POST['f_doc_objet']))        ? Clean::texte($_POST['f_doc_objet'])             : '';
$doc_url          = (isset($_POST['f_doc_url']))          ? Clean::texte($_POST['f_doc_url'])               : '';
$fini             = (isset($_POST['f_fini']))             ? Clean::texte($_POST['f_fini'])                  : '';

$chemin_devoir      = CHEMIN_DOSSIER_DEVOIR.$_SESSION['BASE'].DS;
$url_dossier_devoir = URL_DIR_DEVOIR.$_SESSION['BASE'].'/';
$fnom_export = $_SESSION['BASE'].'_'.Clean::fichier($groupe_nom).'_'.Clean::fichier($description).'_'.fabriquer_fin_nom_fichier__date_et_alea();

// Si "ref" est renseigné (pour Éditer ou Retirer ou Saisir ou ...), il contient l'id de l'évaluation + '_' + l'initiale du type de groupe + l'id du groupe
// Dans le cas d'une duplication, "ref" sert à retrouver l'évaluation d'origine pour évenuellement récupérer l'ordre des items
if(mb_strpos($ref,'_'))
{
  list($devoir_id,$groupe_temp) = explode('_',$ref,2);
  $devoir_id = Clean::entier($devoir_id);
  // Si "groupe" est transmis en POST (pour Ajouter ou Éditer), il faut le prendre comme référence nouvelle ; sinon, on prend le groupe extrait de "ref"
  $groupe = ($groupe) ? $groupe : Clean::texte($groupe_temp) ;
}
else
{
  $devoir_id = 0;
}
예제 #11
0
 public static function zip_filename($text) { return Clean::fichier(iconv('CP850','UTF-8',$text)); } //  filenames stored in the ZIP archives created on non-Unix systems are encoded in CP850 http://fr.php.net/manual/fr/function.zip-entry-name.php#87130
예제 #12
0
 /**
  * Récupérer un fichier uploadé, effectuer les vérifications demandées, et l'enregistrer dans le dossier et sous le nom indiqué.
  * 
  * @param string   $fichier_final_chemin
  * @param string   $fichier_final_nom           (facultatif) Si pas transmis, ce sera le nom du fichier envoyé (nettoyé) ; si transmis, peut comporter ".<EXT>" qui sera remplacé par l'extension du fichier réceptionné.
  * @param array    $tab_extensions_autorisees   (facultatif) tableau des extensions autorisées
  * @param array    $tab_extensions_interdites   (facultatif) tableau des extensions interdites
  * @param int      $taille_maxi                 (facultatif) en Ko
  * @param string   $filename_in_zip             (facultatif) nom d'un fichier contenu dans le fichier zippé reçu, à extraire au passage
  * @return TRUE|string                          TRUE ou un message d'erreur
  */
 public static function recuperer_upload( $fichier_final_chemin , $fichier_final_nom=NULL , $tab_extensions_autorisees=NULL , $tab_extensions_interdites=NULL , $taille_maxi=NULL , $filename_in_zip=NULL )
 {
   // Si le fichier dépasse les capacités du serveur, il se peut que $_FILES ne soit même pas renseigné.
   if(!isset($_FILES['userfile']))
   {
     return 'Problème de transfert ! Fichier trop lourd ? '.InfoServeur::minimum_limitations_upload();
   }
   // Si $_FILES est renseigné, il se peut qu'il y ait quand même eu un dépassement des limites ou un problème d'écriture.
   $tab_file = $_FILES['userfile'];
   $fichier_tmp_nom    = $tab_file['name'];
   $fichier_tmp_chemin = $tab_file['tmp_name'];
   $fichier_tmp_taille = $tab_file['size']/1000; // Conversion octets => Ko
   $fichier_tmp_erreur = $tab_file['error'];
   if( (!file_exists($fichier_tmp_chemin)) || (!$fichier_tmp_taille) || ($fichier_tmp_erreur) )
   {
     $alerte_open_basedir = InfoServeur::is_open_basedir() ? ' Variable serveur "open_basedir" mal renseignée ?' : '' ;
     $alerte_upload_size = ' Fichier trop lourd ? '.InfoServeur::minimum_limitations_upload();
     return 'Problème de récupération !'.$alerte_open_basedir.$alerte_upload_size;
   }
   // Vérification d'une sécurité sur le nom
   if($fichier_tmp_nom{0}=='.')
   {
     return 'Le nom du fichier ne doit pas commencer par un point !';
   }
   // Vérification de l'extension
   $extension = strtolower(pathinfo($fichier_tmp_nom,PATHINFO_EXTENSION));
   if( ($tab_extensions_autorisees!==NULL) && (!in_array($extension,$tab_extensions_autorisees)) )
   {
     return 'L\'extension du fichier transmis n\'est pas conforme !';
   }
   if( ($tab_extensions_interdites!==NULL) && (in_array($extension,$tab_extensions_interdites)) )
   {
     return 'L\'extension du fichier transmis est interdite !';
   }
   // Vérification de la taille
   if( ($taille_maxi!==NULL) && ($fichier_tmp_taille>$taille_maxi) )
   {
     $conseil = '';
     if( ($tab_extensions_autorisees!==NULL) && (in_array('jpg',$tab_extensions_autorisees)) )
     {
       $conseil = (($extension=='jpg')||($extension=='jpeg')) ? ' : réduisez les dimensions de l\'image' : ' : convertissez l\'image au format JPEG' ;
     }
     return 'Le fichier dépasse les '.$taille_maxi.' Ko autorisés'.$conseil.' !';
   }
   // On rapatrie le fichier dans l'arborescence SACoche, en en dézippant un fichier précis si demandé
   $fichier_final_nom = ($fichier_final_nom) ? str_replace('.<EXT>','.'.$extension,$fichier_final_nom) : Clean::fichier($fichier_tmp_nom);
   if( ($extension!='zip') || ($filename_in_zip===NULL) )
   {
     if(!move_uploaded_file($fichier_tmp_chemin,$fichier_final_chemin.$fichier_final_nom))
     {
       return 'Le fichier n\'a pas pu être enregistré sur le serveur.';
     }
   }
   else
   {
     // Dézipper le fichier (on considère alors que c'est un zip venant de SACoche et contenant import_validations.xml)
     if(extension_loaded('zip')!==TRUE)
     {
       return 'Le serveur ne gère pas les fichiers ZIP ! Renvoyez votre fichier sans compression.';
     }
     // Remarque : la ligne suivante peut balancer un exit sans se poser de questions
     FileSystem::unzip_one( $fichier_tmp_chemin , $filename_in_zip , $fichier_final_chemin.$fichier_final_nom );
   }
   // C'est bon :)
   FileSystem::$file_upload_name = $fichier_tmp_nom;
   FileSystem::$file_saved_name  = $fichier_final_nom;
   return TRUE;
 }
예제 #13
0
               $xml.= '              <etat>'.$tab_item_infos['etat'].'</etat>'."\r\n";
               $xml.= '              <info>'.html($tab_item_infos['info']).'</info>'."\r\n";
             }
             $xml.= '            </renseignement>'."\r\n";
             $xml.= '          </item>'."\r\n";
           }
         }
         $xml.= '        </competence>'."\r\n";
       }
       $xml.= '      </palier>'."\r\n";
     }
     $xml.= '    </eleve>'."\r\n";
   }
 }
 $fichier_extension = ($action=='export_lpc') ? 'xml' : 'zip' ;
 $fichier_nom = str_replace('export_','import-',$action).'-'.Clean::fichier($_SESSION['WEBMESTRE_UAI']).'_'.fabriquer_fin_nom_fichier__date_et_alea().'.'.$fichier_extension; // LPC recommande le modèle "import-lpc-{timestamp}.xml"
 if($action=='export_lpc')
 {
   $xml.= '  </donnees>'."\r\n";
   $xml.= '</lpc>'."\r\n";
   // Pour LPC, ajouter la signature via un appel au serveur sécurisé
   $xml = utf8_decode($xml);
   $xml = ServeurCommunautaire::signer_exportLPC( $_SESSION['SESAMATH_ID'] , $_SESSION['SESAMATH_KEY'] , $xml ); // fonction sur le modèle de envoyer_arborescence_XML()
   if(substr($xml,0,5)!='<?xml')
   {
     exit(html($xml));
   }
   FileSystem::ecrire_fichier( CHEMIN_DOSSIER_EXPORT.$fichier_nom , $xml );
   $fichier_lien = './force_download.php?fichier='.$fichier_nom;
 }
 else
예제 #14
0
 * 
 * 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 !');
}
$action = isset($_POST['f_action']) ? Clean::texte($_POST['f_action']) : '';
$chemin_logs = isset($_POST['f_chemin_logs']) ? Clean::texte($_POST['f_chemin_logs']) : '';
$etabl_id_listing = isset($_POST['f_etabl_id_listing']) ? Clean::texte($_POST['f_etabl_id_listing']) : '';
$fichier_logs = isset($_POST['f_fichier']) ? Clean::fichier($_POST['f_fichier']) : '';
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Modifier les paramètres de debug
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'modifier_debug') {
    $debug = 0;
    $tab_debug = array('PHP' => 1, 'PHPCAS' => 2, 'SQL' => 4, 'SESSION' => 8, 'POST' => 16, 'GET' => 32, 'FILES' => 64, 'COOKIE' => 128, 'SERVER' => 256, 'CONST' => 512);
    foreach ($tab_debug as $debug_mode => $debug_val) {
        $debug += isset($_POST['f_debug_' . $debug_mode]) ? $debug_val : 0;
    }
    if ($debug) {
        FileSystem::ecrire_fichier(CHEMIN_FICHIER_DEBUG_CONFIG, $debug);
    } else {
        FileSystem::supprimer_fichier(CHEMIN_FICHIER_DEBUG_CONFIG, TRUE);
    }
    exit('ok');
}
// On récupère les photos
$listing_user_id = implode(',',array_keys($tab_vignettes));
$DB_TAB = DB_STRUCTURE_IMAGE::DB_lister_images( $listing_user_id , 'photo' );
if(!empty($DB_TAB))
{
  foreach($DB_TAB as $DB_ROW)
  {
    $tab_vignettes[$DB_ROW['user_id']]['img_width']  = $DB_ROW['image_largeur'];
    $tab_vignettes[$DB_ROW['user_id']]['img_height'] = $DB_ROW['image_hauteur'];
    $tab_vignettes[$DB_ROW['user_id']]['img_src']    = $DB_ROW['image_contenu'];
    $tab_vignettes[$DB_ROW['user_id']]['img_title']  = FALSE;
  }
}
// Génération de la sortie HTML (affichée directement) et de la sortie PDF (enregistrée dans un fichier)
$fnom_pdf = 'trombinoscope_'.$_SESSION['BASE'].'_'.Clean::fichier($groupe_nom).'_'.fabriquer_fin_nom_fichier__date_et_alea().'.pdf';
$trombinoscope_HTML = '<h2>'.html($groupe_nom).'</h2><p><a target="_blank" href="'.URL_DIR_EXPORT.$fnom_pdf.'"><span class="file file_pdf">Archiver / Imprimer (format <em>pdf</em>).</span></a> &rarr; <span class="noprint">Afin de préserver l\'environnement, n\'imprimer que si nécessaire !</span></p>';
$trombinoscope_PDF = new PDF_trombinoscope( FALSE /*officiel*/ , 'portrait' /*orientation*/ , 5 /*marge_gauche*/ , 5 /*marge_droite*/ , 5 /*marge_haut*/ , 7 /*marge_bas*/ );
$trombinoscope_PDF->initialiser($groupe_nom);
// On passe les élèves en revue (on a toutes les infos déjà disponibles)
foreach($tab_vignettes as $user_id => $tab)
{
  $trombinoscope_PDF->vignette($tab);
  $img_src   = ($tab['img_src'])   ? ' src="data:'.image_type_to_mime_type(IMAGETYPE_JPEG).';base64,'.$tab['img_src'].'"' : ' src="./_img/trombinoscope_vide.png"' ;
  $img_title = ($tab['img_title']) ? ' title="absence de photo"' : '' ;
  $trombinoscope_HTML .= '<div id="div_'.$user_id.'" class="photo"><img width="'.$tab['img_width'].'" height="'.$tab['img_height'].'" alt=""'.$img_src.$img_title.' /><br />'.html($tab['user_nom']).'<br />'.html($tab['user_prenom']).'</div>';
}
// Enregistrement du PDF
FileSystem::ecrire_sortie_PDF( CHEMIN_DOSSIER_EXPORT.$fnom_pdf , $trombinoscope_PDF );
// Affichage du HTML
exit($trombinoscope_HTML);
예제 #16
0
 public static function zip_filename($text)
 {
     return Clean::fichier(iconv('CP850', 'UTF-8', $text));
 }
    // Pour avoir les élèves dans l'ordre alphabétique, il faut utiliser $tab_eleve_id.
    $archivage_tableau_PDF->SetXY($archivage_tableau_PDF->marge_gauche, $archivage_tableau_PDF->marge_haut + $archivage_tableau_PDF->etiquette_hauteur);
    foreach ($tab_eleve_id as $eleve_id) {
        extract($tab_eleve_infos[$eleve_id]);
        // $eleve_nom $eleve_prenom $date_naissance $eleve_brevet_serie
        $archivage_tableau_PDF->moyennes_reference_eleve($eleve_id, $eleve_nom . ' ' . $eleve_prenom);
        $archivage_tableau_CSV .= '"' . $eleve_nom . ' ' . $eleve_prenom . '"';
        foreach ($tab_brevet_serie as $serie_ref => $serie_nom) {
            foreach ($tab_brevet_epreuve[$serie_ref] as $epreuve_ref => $epreuve_nom) {
                $note = isset($tab_saisie[$eleve_id][$serie_ref . $epreuve_ref]) ? $tab_saisie[$eleve_id][$serie_ref . $epreuve_ref] : NULL;
                $archivage_tableau_PDF->moyennes_note($eleve_id, $epreuve_ref, $note, TRUE);
                $archivage_tableau_CSV .= $separateur . '"' . str_replace('.', ',', $note) . '"';
                // Remplacer le point décimal par une virgule pour le tableur.
            }
        }
        $archivage_tableau_PDF->SetXY($archivage_tableau_PDF->marge_gauche, $archivage_tableau_PDF->GetY() + $archivage_tableau_PDF->cases_hauteur);
        $archivage_tableau_CSV .= "\r\n";
    }
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Enregistrement et affichage du retour.
// ////////////////////////////////////////////////////////////////////////////////////////////////////
$fichier_export = 'saisies_' . $bilan_type . '_' . $annee_session_brevet . '_' . Clean::fichier($classe_nom) . '_' . $action . '_' . fabriquer_fin_nom_fichier__date_et_alea();
FileSystem::ecrire_sortie_PDF(CHEMIN_DOSSIER_EXPORT . $fichier_export . '.pdf', $archivage_tableau_PDF);
echo '<a target="_blank" href="' . URL_DIR_EXPORT . $fichier_export . '.pdf"><span class="file file_pdf">' . $tab_actions[$action] . ' (format <em>pdf</em>).</span></a>';
// Et le csv éventuel
if ($action == 'imprimer_donnees_eleves_moyennes') {
    FileSystem::ecrire_fichier(CHEMIN_DOSSIER_EXPORT . $fichier_export . '.csv', To::csv($archivage_tableau_CSV));
    echo '<br />' . NL . '<a target="_blank" href="./force_download.php?fichier=' . $fichier_export . '.csv"><span class="file file_txt">' . $tab_actions[$action] . ' (format <em>csv</em>).</span></a>';
}
exit;
/*
Pour uploader une ressource directement sur le serveur communautaire, le fichier "professeur_referentiel_edition.php" devrait l'appeller dans une iframe (le bouton d'upload du formulaire devant se trouver sur ce serveur). Mais :
- une fois l'upload effectué, pour faire remonter l'info au serveur où est installé SACoche, se pose un souci de cross-domain javascript.
- il faudrait reproduire côté serveur communautaire tout un environnement (js & css) semblable à celui du serveur d'installation de SACoche
Finalement, j'ai opté pour le plus simple même si ce n'est pas le plus économe : uploader sur le serveur SACoche puis transférer vers le serveur communautaire avec cURL::get_contents().
Ca va qu'une limite de 500Ko est imposée...
*/

if($action=='Uploader_document')
{
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , NULL /*fichier_nom*/ , NULL /*tab_extensions_autorisees*/ , array('bat','com','exe','php','zip') /*tab_extensions_interdites*/ , 500 /*taille_maxi*/ , NULL /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit($result);
  }
  $fichier_nom = Clean::fichier(FileSystem::$file_upload_name);
  $reponse = ServeurCommunautaire::uploader_ressource( $_SESSION['SESAMATH_ID'] , $_SESSION['SESAMATH_KEY'] , $_SESSION['tmp']['matiere_ref'] , $fichier_nom , file_get_contents(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name) );
  FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name);
  exit($reponse);
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Il se peut que rien n'ait été récupéré à cause de l'upload d'un fichier trop lourd
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if(empty($_POST))
{
  exit('Erreur : aucune donnée reçue ! Fichier trop lourd ? '.InfoServeur::minimum_limitations_upload());
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
예제 #19
0
                         .'<td>'.html($DB_ROW['user_id_gepi']).'</td>'
                         .'<td>'.$DB_ROW['user_sconet_id'].'</td>'
                         .'<td>'.$DB_ROW['user_sconet_elenoet'].'</td>'
                         .'<td>'.html($DB_ROW['user_reference']).'</td>'
                         .'<td>'.html($DB_ROW['user_login']).'</td>'
                         .'<td>'.Html::$tab_genre['adulte'][$DB_ROW['user_genre']].'</td>'
                         .'<td>'.html($DB_ROW['user_nom']).'</td>'
                         .'<td>'.html($DB_ROW['user_prenom']).'</td>'
                         .'<td>'.$DB_ROW['user_profil_sigle'].'</td>'
                       .'</tr>'.NL;
      }
    }
  }

  // Finalisation de l'export CSV (archivage dans un fichier)
  $fnom = 'export_infos-professeurs_'.Clean::fichier($groupe_nom).'_'.fabriquer_fin_nom_fichier__date_et_alea();
  FileSystem::ecrire_fichier( CHEMIN_DOSSIER_EXPORT.$fnom.'.csv' , To::csv($export_csv) );
  // Finalisation de l'export HTML
  $export_html .= '</tbody></table>'.NL;

  // Affichage
  echo'<ul class="puce"><li><a target="_blank" href="./force_download.php?fichier='.$fnom.'.csv"><span class="file file_txt">Récupérer les données (fichier <em>csv</em></span>).</a></li></ul>'.NL;
  echo $export_html;
  exit();
}

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

exit('Erreur avec les données transmises !');
    }
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// IMPRIMER ETAPE 3/4 - Le PDF complet est généré ; on découpe individuellement les fiches brevet par élève puis on zippe l'ensemble
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($ACTION == 'imprimer' && $etape == 3) {
    Erreur500::prevention_et_gestion_erreurs_fatales(FALSE, TRUE);
    $date = date('Y-m-d');
    $tab_pages_non_anonymes = array();
    $chemin_temp_pdf = CHEMIN_DOSSIER_EXPORT . 'pdf_' . mt_rand() . DS;
    FileSystem::creer_ou_vider_dossier($chemin_temp_pdf);
    foreach ($_SESSION['tmp']['tab_pages_decoupe_pdf'] as $eleve_id => $tab_tirages) {
        list($eleve_identite, $page_numero) = $tab_tirages[0];
        $tab_pages_non_anonymes[] = $page_numero;
        $fichier_extraction_chemin = $chemin_temp_pdf . 'officiel_' . $bilan_type . '_' . Clean::fichier($eleve_identite) . '_' . $date . '.pdf';
        $releve_pdf = new PDFMerger();
        $pdf_string = $releve_pdf->addPDF(CHEMIN_DOSSIER_EXPORT . $_SESSION['tmp']['fichier_nom'] . '.pdf', $page_numero)->merge('file', $fichier_extraction_chemin);
    }
    FileSystem::zipper_fichiers($chemin_temp_pdf, CHEMIN_DOSSIER_EXPORT, $_SESSION['tmp']['fichier_nom'] . '.zip');
    FileSystem::supprimer_dossier($chemin_temp_pdf);
    $_SESSION['tmp']['pages_non_anonymes'] = implode(',', $tab_pages_non_anonymes);
    unset($_SESSION['tmp']['tab_pages_decoupe_pdf']);
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// IMPRIMER ETAPE 4/4 - Le PDF complet est généré ; on n'en garde que les fiches brevet officielles
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($ACTION == 'imprimer' && $etape == 4) {
    $releve_pdf = new PDFMerger();
    if ($_SESSION['tmp']['pages_non_anonymes'] != '') {
예제 #21
0
if( ($ACTION=='imprimer') && ($etape==3) )
{
  Erreur500::prevention_et_gestion_erreurs_fatales( FALSE /*memory*/ , TRUE /*time*/ );
  $date = date('Y-m-d');
  $tab_pages_non_anonymes     = array();
  $tab_pages_nombre_par_bilan = array();
  $chemin_temp_pdf = CHEMIN_DOSSIER_EXPORT.'pdf_'.mt_rand().DS;
  FileSystem::creer_ou_vider_dossier($chemin_temp_pdf);
  foreach($_SESSION['tmp']['tab_pages_decoupe_pdf'] as $eleve_id => $tab_tirages)
  {
    foreach($tab_tirages as $numero_tirage => $tab)
    {
      list( $eleve_identite , $page_plage , $page_nombre ) = $tab;
      $tab_pages_non_anonymes[]     = $page_plage;
      $tab_pages_nombre_par_bilan[] = $page_nombre;
      $fichier_extraction_chemin = $chemin_temp_pdf.'officiel_'.$BILAN_TYPE.'_'.Clean::fichier($eleve_identite).'_'.$date.'_resp'.$numero_tirage.'.pdf';
      $releve_pdf = new PDFMerger;
      $pdf_string = $releve_pdf -> addPDF( CHEMIN_DOSSIER_EXPORT.$_SESSION['tmp']['fichier_nom'].'.pdf' , $page_plage ) -> merge( 'file' , $fichier_extraction_chemin );
    }
  }
  FileSystem::zipper_fichiers( $chemin_temp_pdf , CHEMIN_DOSSIER_EXPORT , $_SESSION['tmp']['fichier_nom'].'.zip' );
  FileSystem::supprimer_dossier($chemin_temp_pdf);
  $_SESSION['tmp']['pages_non_anonymes']     = implode(',',$tab_pages_non_anonymes);
  $_SESSION['tmp']['pages_nombre_par_bilan'] = implode(' ; ',$tab_pages_nombre_par_bilan);
  unset($_SESSION['tmp']['tab_pages_decoupe_pdf']);
  exit('ok');
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// IMPRIMER ETAPE 4/4 - Le PDF complet est généré ; on n'en garde que les bilans non anonymes
// ////////////////////////////////////////////////////////////////////////////////////////////////////
 }
 $tab_eleves  = array();
 $tab_autres  = array();
 $tab_groupes = array();
 foreach($DB_TAB as $DB_ROW)
 {
   if( ($selection_groupe) || !isset($tab_eleves[ $DB_ROW['valeur']]) ) // Un élève peut être une classe + un groupe associé au prof ; dans ce cas on ne garde que la 1e entrée (la classe)
   {
     $tab_eleves[ $DB_ROW['valeur']] = $DB_ROW['texte'];
     $tab_autres[ $DB_ROW['valeur']] = $DB_ROW['texte'];
     $tab_groupes[$DB_ROW['valeur']] = ($selection_groupe) ? $groupe_nom : $DB_ROW['optgroup'] ;
   }
 }
 $listing_user_id = implode(',', array_keys($tab_eleves) );
 // Lister les demandes (et les messages associés)
 $fnom_export = 'messages_'.$_SESSION['BASE'].'_'.Clean::fichier($matiere_nom).'_'.Clean::fichier($groupe_nom).'_'.fabriquer_fin_nom_fichier__date_et_alea();
 $separateur = ';';
 $messages_html = '<table><thead><tr><th>Matière - Item</th><th>Groupe - Élève</th><th>Message(s)</th></tr></thead><tbody>';
 $fichier_csv = 'Matière'.$separateur.'Item Ref'.$separateur.'Item Nom'.$separateur.'Groupe'.$separateur.'Élève'.$separateur.'Score'.$separateur.'Date'.$separateur.'Message'."\r\n";
 $tab_demandes = array();
 $DB_TAB = DB_STRUCTURE_DEMANDE::DB_lister_demandes_prof( $_SESSION['USER_ID'] , $matiere_id , $listing_user_id );
 if(empty($DB_TAB))
 {
   exit('Aucune demande n\'a été formulée selon les critères indiqués !');
 }
 foreach($DB_TAB as $DB_ROW)
 {
   unset($tab_autres[$DB_ROW['eleve_id']]);
   $tab_demandes[] = $DB_ROW['demande_id'];
   $score  = ($DB_ROW['demande_score']!==NULL) ? $DB_ROW['demande_score'] : FALSE ;
   $date   = convert_date_mysql_to_french($DB_ROW['demande_date']);
예제 #23
0
 * 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 !');
}
/**
 * Code inclus commun aux pages
 * [./pages/releve_synthese_matiere.ajax.php]
 * [./pages/releve_synthese_multimatiere.ajax.php]
 * [./_inc/code_officiel_***.php]
 */
Erreur500::prevention_et_gestion_erreurs_fatales(TRUE, FALSE);
// Chemins d'enregistrement
$fichier_nom = $make_action != 'imprimer' ? 'releve_synthese_' . $synthese_modele . '_' . Clean::fichier($groupe_nom) . '_' . fabriquer_fin_nom_fichier__date_et_alea() : 'officiel_' . $BILAN_TYPE . '_' . Clean::fichier($groupe_nom) . '_' . fabriquer_fin_nom_fichier__date_et_alea();
// Initialisation de tableaux
$tab_item = array();
// [item_id] => array(item_ref,item_nom,item_coef,item_cart,item_socle,item_lien,matiere_id,calcul_methode,calcul_limite,calcul_retroactif,synthese_ref);
$tab_liste_item = array();
// [i] => item_id
$tab_eleve_infos = array();
// [eleve_id] => array(eleve_INE,eleve_nom,eleve_prenom,date_naissance)
$tab_matiere = array();
// [matiere_id] => array(matiere_nom,matiere_nb_demandes)
$tab_synthese = array();
// [synthese_ref] => synthese_nom
$tab_eval = array();
// [eleve_id][item_id][devoir] => array(note,date,info) On utilise un tableau multidimensionnel vu qu'on ne sait pas à l'avance combien il y a d'évaluations pour un élève et un item donnés.
// Initialisation de variables
if ($make_html || $make_pdf || $make_graph) {
                             $xml .= '              <etat>' . $tab_item_infos['etat'] . '</etat>' . "\r\n";
                             $xml .= '              <info>' . html($tab_item_infos['info']) . '</info>' . "\r\n";
                         }
                         $xml .= '            </renseignement>' . "\r\n";
                         $xml .= '          </item>' . "\r\n";
                     }
                 }
                 $xml .= '        </competence>' . "\r\n";
             }
             $xml .= '      </palier>' . "\r\n";
         }
         $xml .= '    </eleve>' . "\r\n";
     }
 }
 $fichier_extension = $action == 'export_lpc' ? 'xml' : 'zip';
 $fichier_nom = str_replace('export_', 'import-', $action) . '-' . Clean::fichier($_SESSION['WEBMESTRE_UAI']) . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.' . $fichier_extension;
 // LPC recommande le modèle "import-lpc-{timestamp}.xml"
 if ($action == 'export_lpc') {
     $xml .= '  </donnees>' . "\r\n";
     $xml .= '</lpc>' . "\r\n";
     // Pour LPC, ajouter la signature via un appel au serveur sécurisé
     $xml = utf8_decode($xml);
     $xml = ServeurCommunautaire::signer_exportLPC($_SESSION['SESAMATH_ID'], $_SESSION['SESAMATH_KEY'], $xml);
     // fonction sur le modèle de envoyer_arborescence_XML()
     if (substr($xml, 0, 5) != '<?xml') {
         exit(html($xml));
     }
     FileSystem::ecrire_fichier(CHEMIN_DOSSIER_EXPORT . $fichier_nom, $xml);
     $fichier_lien = './force_download.php?fichier=' . $fichier_nom;
 } else {
     $xml .= '  </donnees>' . "\r\n";