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); } }
<p class="astuce">Les actions sensibles sont enregistrées, ce qui permet aux administrateurs de rechercher quel compte est fautif en cas de problème...</p> <p class="astuce">Ces logs sont enregistrés dans un fichier (pas dans la base) ; ils sont donc propres à un serveur et ne sont pas transférés lors d'une sauvegarde / restauration de base.</p> <p class="astuce">Concernant la suppression d'un référentiel, suivez ces liens pour savoir à quoi correspondent les identifiants <a target="_blank" href="http://redmine.sesamath.net/projects/sacoche/repository/entry/_sql/structure/sacoche_matiere.sql">de matières</a> et <a target="_blank" href="http://redmine.sesamath.net/projects/sacoche/repository/entry/_sql/structure/sacoche_niveau.sql">de niveaux</a>.</p> <?php $fichier_log_contenu = SACocheLog::lire(); if($fichier_log_contenu===NULL) { echo'<p class="danger">Le fichier n\'existe pas : probablement qu\'aucune action sensible n\'a encore été effectuée !</p>'.NL; } else { // 1 En extraire le plus récent (les 100 derniers enregistrements) $table_log_extrait = '<table class="p"><thead><tr><th>Date & Heure</th><th>Utilisateur</th><th>Action</th></tr></thead><tbody>'; $tab_lignes = extraire_lignes($fichier_log_contenu); $indice_ligne_debut = count($tab_lignes)-1 ; $indice_ligne_fin = max(-1 , $indice_ligne_debut-100) ; $nb_lignes = $indice_ligne_debut - $indice_ligne_fin ; $s = ($nb_lignes>1) ? 's' : '' ; for( $indice_ligne=$indice_ligne_debut ; $indice_ligne>$indice_ligne_fin ; $indice_ligne-- ) { list( $balise_debut , $date_heure , $utilisateur , $action , $balise_fin ) = explode("\t",$tab_lignes[$indice_ligne]); $table_log_extrait .= '<tr><td>'.$date_heure.'</td><td>'.$utilisateur.'</td><td>'.$action.'</td></tr>'; // Pas de html(), cela a déjà été fait lors de l'enregistrement des logs } $table_log_extrait .= '</tbody></table>'; // 2 Enregistrer un csv récupérable $fichier_log_contenu = str_replace(array('<?php /*','*/ ?>'),'',$fichier_log_contenu); $fichier_export_nom = 'log_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea(); FileSystem::ecrire_fichier( CHEMIN_DOSSIER_EXPORT.$fichier_export_nom.'.csv' , To::csv($fichier_log_contenu) ); // Afficher tout ça
// //////////////////////////////////////////////////////////////////////////////////////////////////// // 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 !'); } list($csv_bilan_type,$csv_bilan_etat,$csv_user_id,$csv_periode_id,$csv_groupe_id) = $tab_references;
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) { exit('Erreur : ligne d\'en-tête invalide !'); }