} FileSystem::ecrire_fichier($fichier_import,$contenu_zip); exit(']¤['.'ok'.']¤['."Décompression de l'archive…"); } // // 2. Décompression de l'archive... // if($action=='verif_file_appli_etape2') { if(is_dir($dossier_dezip)) { FileSystem::supprimer_dossier($dossier_dezip); } // Dezipper dans le dossier temporaire $code_erreur = FileSystem::unzip( $fichier_import , CHEMIN_DOSSIER_IMPORT , TRUE /*use_ZipArchive*/ ); if($code_erreur) { exit(']¤['.'pb'.']¤['.'Fichiers impossibles à extraire ('.FileSystem::$tab_zip_error[$code_erreur].') !'); } exit(']¤['.'ok'.']¤['."Analyse des fichiers et recensement des dossiers…"); } // // 3. Analyse des fichiers et recensement des dossiers... (après initialisation de la session temporaire) // if($action=='verif_file_appli_etape3') { $_SESSION['tmp'] = array(); FileSystem::analyser_dossier( $dossier_install , strlen($dossier_install) , 'avant' , FALSE /*with_first_dir*/ ); FileSystem::analyser_dossier( $dossier_dezip , strlen($dossier_dezip) , 'apres' , FALSE /*with_first_dir*/ , FALSE );
// //////////////////////////////////////////////////////////////////////////////////////////////////// // Etape d'import d'une base // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'importer' && $num && $max && $num < $max) { if (!count($_SESSION['tab_info'])) { exit('Erreur : données du fichier CSV perdues !'); } // Récupérer la série d'infos extract($_SESSION['tab_info'][$num]); // import_id / geo_id / localisation / denomination / uai / contact_nom / contact_prenom / contact_courriel / date / fichier_nom // Préparer le retour en cas de pb $retour_cellules_non = '<td class="nu"></td><td>---</td><td>' . html($localisation . ' | ' . $denomination) . '</td><td>' . html($contact_nom . ' ' . $contact_prenom) . '</td>'; // Créer ou vider le dossier temporaire FileSystem::creer_ou_vider_dossier($dossier_temp_sql); // Dezipper dans le dossier temporaire $code_erreur = FileSystem::unzip(CHEMIN_DOSSIER_DUMP . $fichier_nom, $dossier_temp_sql, TRUE); if ($code_erreur) { exit(']¤[' . '<tr>' . $retour_cellules_non . '<td><label class="erreur">Erreur : fichiers de ' . html($fichier_nom) . ' impossible à extraire (' . FileSystem::$tab_zip_error[$code_erreur] . ') !</label></td>' . '</tr>'); } // Vérifier le contenu : noms des fichiers $fichier_taille_maximale = verifier_dossier_decompression_sauvegarde($dossier_temp_sql); if (!$fichier_taille_maximale) { FileSystem::supprimer_dossier($dossier_temp_sql); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive. exit(']¤[' . '<tr>' . $retour_cellules_non . '<td><label class="erreur">Erreur : le contenu de ' . html($fichier_nom) . ' ne semble pas être une sauvegarde de base !</label></td>' . '</tr>'); } // Vérifier le contenu : taille des requêtes if (!verifier_taille_requetes($fichier_taille_maximale)) { FileSystem::supprimer_dossier($dossier_temp_sql); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive. exit(']¤[' . '<tr>' . $retour_cellules_non . '<td><label class="erreur">Erreur : ' . html($fichier_nom) . ' contient au moins un fichier dont la taille dépasse la limitation <em>max_allowed_packet</em> de MySQL !</label></td>' . '</tr>');
$contenu_zip = cURL::get_contents(SERVEUR_TELECHARGEMENT, $tab_post, 60); if (substr($contenu_zip, 0, 6) == 'Erreur') { exit(']¤[' . 'pb' . ']¤[' . $contenu_zip); } FileSystem::ecrire_fichier($fichier_import, $contenu_zip); exit(']¤[' . 'ok' . ']¤[' . "Décompression de l'archive…"); } // // 2. Décompression de l'archive... // if ($action == 'verif_file_appli_etape2') { if (is_dir($dossier_dezip)) { FileSystem::supprimer_dossier($dossier_dezip); } // Dezipper dans le dossier temporaire $code_erreur = FileSystem::unzip($fichier_import, CHEMIN_DOSSIER_IMPORT, TRUE); if ($code_erreur) { exit(']¤[' . 'pb' . ']¤[' . 'Fichiers impossibles à extraire (' . FileSystem::$tab_zip_error[$code_erreur] . ') !'); } exit(']¤[' . 'ok' . ']¤[' . "Analyse des fichiers et recensement des dossiers…"); } // // 3. Analyse des fichiers et recensement des dossiers... (après initialisation de la session temporaire) // if ($action == 'verif_file_appli_etape3') { $_SESSION['tmp'] = array(); FileSystem::analyser_dossier($dossier_install, strlen($dossier_install), 'avant', FALSE); FileSystem::analyser_dossier($dossier_dezip, strlen($dossier_dezip), 'apres', FALSE, FALSE); exit(']¤[' . 'ok' . ']¤[' . "Comparaison des données…"); } //
// //////////////////////////////////////////////////////////////////////////////////////////////////// // Uploader et dezipper / vérifier un fichier à restaurer // //////////////////////////////////////////////////////////////////////////////////////////////////// if($action=='uploader') { $fichier_upload_nom = 'dump_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea().'.zip'; $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , $fichier_upload_nom /*fichier_nom*/ , array('zip') /*tab_extensions_autorisees*/ , NULL /*tab_extensions_interdites*/ , NULL /*taille_maxi*/ , NULL /*filename_in_zip*/ ); if($result!==TRUE) { exit('<li><label class="alerte">Erreur : '.$result.'</label></li>'); } // Créer ou vider le dossier temporaire FileSystem::creer_ou_vider_dossier($dossier_temp); // Dezipper dans le dossier temporaire $code_erreur = FileSystem::unzip( CHEMIN_DOSSIER_IMPORT.$fichier_upload_nom , $dossier_temp , FALSE /*use_ZipArchive*/ ); 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('<li><label class="alerte">Erreur : votre archive ZIP n\'a pas pu être ouverte ('.FileSystem::$tab_zip_error[$code_erreur].') !</label></li>'); } FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT.$fichier_upload_nom); // Vérifier le contenu : noms des fichiers $fichier_taille_maximale = verifier_dossier_decompression_sauvegarde($dossier_temp); if(!$fichier_taille_maximale) { FileSystem::supprimer_dossier($dossier_temp); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive. exit('<li><label class="alerte">Erreur : votre archive ZIP ne semble pas contenir les fichiers d\'une sauvegarde de la base effectuée par SACoche !</label></li>'); } // Vérifier le contenu : taille des requêtes if( !verifier_taille_requetes($fichier_taille_maximale) )
if ($result !== TRUE) { exit('Erreur : ' . $result); } // vérification du masque if (!$masque) { exit('Erreur : masque des noms de fichiers non transmis !'); } $masque_filename = '#\\[(sconet_id|sconet_num|reference|nom|prenom|login|ent_id)\\]#'; $masque_extension = '#\\.(gif|jpg|jpeg|png)$#'; if (!preg_match($masque_filename, $masque) || !preg_match($masque_extension, $masque)) { exit('Erreur : masque des noms de fichiers contenus dans l\'archive non conforme !'); } // Créer ou vider le dossier temporaire FileSystem::creer_ou_vider_dossier($dossier_temp); // Dezipper dans le dossier temporaire $code_erreur = FileSystem::unzip(CHEMIN_DOSSIER_IMPORT . $fichier_nom, $dossier_temp, FALSE); 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', 1, 'all', 0, 'alpha', $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)); }
// //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='importer') && $num && $max && ($num<$max) ) { if(!count($_SESSION['tab_info'])) { exit('Erreur : données du fichier CSV perdues !'); } // Récupérer la série d'infos extract($_SESSION['tab_info'][$num]); // import_id / geo_id / localisation / denomination / uai / contact_nom / contact_prenom / contact_courriel / date / fichier_nom // Préparer le retour en cas de pb $retour_cellules_non = '<td class="nu"></td><td>---</td><td>'.html($localisation.' | '.$denomination).'</td><td>'.html($contact_nom.' '.$contact_prenom).'</td>'; // Créer ou vider le dossier temporaire FileSystem::creer_ou_vider_dossier($dossier_temp_sql); // Dezipper dans le dossier temporaire $code_erreur = FileSystem::unzip( CHEMIN_DOSSIER_DUMP.$fichier_nom , $dossier_temp_sql , TRUE /*use_ZipArchive*/ ); if($code_erreur) { exit(']¤['.'<tr>'.$retour_cellules_non.'<td><label class="erreur">Erreur : fichiers de '.html($fichier_nom).' impossible à extraire ('.FileSystem::$tab_zip_error[$code_erreur].') !</label></td>'.'</tr>'); } // Vérifier le contenu : noms des fichiers $fichier_taille_maximale = verifier_dossier_decompression_sauvegarde($dossier_temp_sql); if(!$fichier_taille_maximale) { FileSystem::supprimer_dossier($dossier_temp_sql); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive. exit(']¤['.'<tr>'.$retour_cellules_non.'<td><label class="erreur">Erreur : le contenu de '.html($fichier_nom).' ne semble pas être une sauvegarde de base !</label></td>'.'</tr>'); } // Vérifier le contenu : taille des requêtes if( !verifier_taille_requetes($fichier_taille_maximale) ) { FileSystem::supprimer_dossier($dossier_temp_sql); // Pas seulement vider, au cas où il y aurait des sous-dossiers créés par l'archive.