$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 // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($ACTION=='imprimer') && ($etape==4) ) { $releve_pdf = new PDFMerger; if($_SESSION['tmp']['pages_non_anonymes']!='') // Potentiellement possible si on veut imprimer un ou plusieurs bulletins d'élèves sans aucune donnée, ce qui provoque l'erreur "FPDF error: Pagenumber is wrong!" {
/** * Supprimer une structure (mode multi-structures) * * @param int $BASE * @return void */ public static function supprimer_multi_structure($BASE) { // Paramètres de connexion à la base de données $BD_name = 'sac_base_' . $BASE; $BD_user = '******' . $BASE; // Limité à 16 caractères // Supprimer la base de données d'une structure, et son utilisateur MySQL une fois défait de ses droits. DB_WEBMESTRE_WEBMESTRE::DB_supprimer_base_structure_et_user_mysql($BD_name, $BD_user); // Supprimer le fichier de connexion FileSystem::supprimer_fichier(CHEMIN_DOSSIER_MYSQL . 'serveur_sacoche_structure_' . $BASE . '.php'); // Retirer l'enregistrement d'une structure dans la base du webmestre DB_WEBMESTRE_WEBMESTRE::DB_supprimer_structure($BASE); // Supprimer les dossiers de fichiers temporaires par établissement foreach (FileSystem::$tab_dossier_tmp_structure as $dossier) { FileSystem::supprimer_dossier($dossier . $BASE); } // Supprimer les éventuels fichiers de blocage LockAcces::supprimer_fichiers_blocage($BASE); // Log de l'action SACocheLog::ajouter('Suppression de la structure n°' . $BASE . '.'); }
// Insérer l'enregistrement dans la base du webmestre // Créer le fichier de connexion de la base de données de la structure // Créer la base de données de la structure // Créer un utilisateur pour la base de données de la structure et lui attribuer ses droits $base_id = Webmestre::ajouter_structure($import_id, $geo_id, $uai, $localisation, $denomination, $contact_nom, $contact_prenom, $contact_courriel, $date); // Créer les dossiers de fichiers temporaires par établissement foreach (FileSystem::$tab_dossier_tmp_structure as $dossier) { FileSystem::creer_dossier($dossier . $base_id); FileSystem::ecrire_fichier_index($dossier . $base_id); } // Charger les paramètres de connexion à cette base afin de pouvoir y effectuer des requêtes charger_parametres_mysql_supplementaires($base_id); // Restaurer des fichiers de svg et mettre la base à jour si besoin. $texte_etape = restaurer_tables_base_etablissement($dossier_temp_sql, 0); // Supprimer le dossier temporaire FileSystem::supprimer_dossier($dossier_temp_sql); // Retour du succès, appel suivant $retour_cellules_oui = '<td class="nu"><input type="checkbox" name="f_ids" value="' . $base_id . '" /></td><td class="label">' . $base_id . '</td><td class="label">' . html($localisation . ' | ' . $denomination . ' [' . $uai . ']') . '</td><td class="label">' . html($contact_nom . ' ' . $contact_prenom . ' (' . $contact_courriel . ')') . '</td>'; exit(']¤[' . '<tr>' . $retour_cellules_oui . '<td class="label"><label class="valide">' . $texte_etape . ' avec succès.</label></td>' . '</tr>'); } elseif ($action == 'importer' && $num && $max && $num == $max) { // Supprimer les fichiers zip des bases foreach ($_SESSION['tab_info'] as $key => $tab_infos) { FileSystem::supprimer_fichier(CHEMIN_DOSSIER_DUMP . $tab_infos['fichier_nom'], TRUE); } // Game over unset($_SESSION['datetime'], $_SESSION['alea'], $_SESSION['tab_info']); exit(']¤[' . 'ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer plusieurs structures existantes // ////////////////////////////////////////////////////////////////////////////////////////////////////
} elseif(!isset($tab['apres'])) // (forcément) { $tbody_pb .= '<tr class="r"><td>Fichier en trop</td><td>'.$fichier.'</td></tr>'; } } // Enregistrement du rapport $_SESSION['tmp']['rapport_filename'] = 'rapport_verif_file_appli_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea().'.html'; FileSystem::fabriquer_fichier_rapport( $_SESSION['tmp']['rapport_filename'] , $thead , $tbody_pb.$tbody_ok ); exit(']¤['.'ok'.']¤['.'Rapport des différences trouvées et nettoyage…'); } // // 5. Nettoyage... // if($action=='verif_file_appli_etape5') { FileSystem::supprimer_dossier($dossier_dezip); $fichier_chemin = URL_DIR_EXPORT.$_SESSION['tmp']['rapport_filename']; unset($_SESSION['tmp']); exit(']¤['.'ok'.']¤['.$fichier_chemin); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là... // //////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !'); ?>
/** * Effacer d'anciens fichiers temporaires sur le serveur. * * @param string $dossier le dossier à vider * @param int $nb_minutes le délai d'expiration en minutes * @param bool $with_sous_dossiers TRUE pour forcer aussi la suppression de sous-dossiers résiduels (facultatif) * @return void */ public static function effacer_fichiers_temporaires($dossier,$nb_minutes,$with_sous_dossiers=FALSE) { if(is_dir($dossier)) { $date_limite = $_SERVER['REQUEST_TIME'] - $nb_minutes*60; $tab_contenu = FileSystem::lister_contenu_dossier($dossier); $ds = (substr($dossier,-1)==DS) ? '' : DS ; foreach($tab_contenu as $contenu) { $chemin_contenu = $dossier.$ds.$contenu; $extension = pathinfo($chemin_contenu,PATHINFO_EXTENSION); $date_unix = @filemtime($chemin_contenu); // @ car dans de rares cas le fichier est simultanément supprimé par un autre processus if( ($date_unix<$date_limite) && ($extension!='htm') ) { if(is_file($chemin_contenu)) { FileSystem::supprimer_fichier($chemin_contenu); } else if( is_dir($chemin_contenu) && $with_sous_dossiers ) { FileSystem::supprimer_dossier($chemin_contenu); } } } } }