// Bloquer l'application ajouter_log_PHP( 'Mise à jour des fichiers' /*log_objet*/ , 'Application fermée.' /*log_contenu*/ , __FILE__ /*log_fichier*/ , __LINE__ /*log_ligne*/ , FALSE /*only_sesamath*/ ); LockAcces::bloquer_application($_SESSION['USER_PROFIL_TYPE'],'0','Mise à jour des fichiers en cours.'); // Dossiers : ordre croissant pour commencer par ceux les moins imbriqués : obligatoire pour l'ajout, et pour la suppression on teste si pas déjà supprimé. ksort($_SESSION['tmp']['dossier']); foreach($_SESSION['tmp']['dossier'] as $dossier => $tab) { if( (isset($tab['avant'])) && (isset($tab['apres'])) ) { // Dossier inchangé (cas le plus fréquent donc testé en premier). } elseif(!isset($tab['avant'])) { // Dossier à ajouter $tbody .= '<tr><td class="v">Dossier ajouté</td><td>'.$dossier.'</td></tr>'; if( !FileSystem::creer_dossier($dossier_install.$dossier) ) { ajouter_log_PHP( 'Mise à jour des fichiers' /*log_objet*/ , 'Application accessible.' /*log_contenu*/ , __FILE__ /*log_fichier*/ , __LINE__ /*log_ligne*/ , FALSE /*only_sesamath*/ ); LockAcces::debloquer_application($_SESSION['USER_PROFIL_TYPE'],'0'); exit(']¤['.'pb'.']¤['."Dossier ".$dossier." non créé ou inaccessible en écriture !"); } } elseif(!isset($tab['apres'])) // (forcément) { // Dossier à supprimer $tbody .= '<tr><td class="r">Dossier supprimé</td><td>'.$dossier.'</td></tr>'; if(is_dir($dossier_install.$dossier)) { FileSystem::supprimer_dossier($dossier_install.$dossier); } }
// A ce niveau, le fichier d'informations sur l'hébergement doit exister. if(!is_file(CHEMIN_FICHIER_CONFIG_INSTALL)) { exit('Erreur : problème avec le fichier : '.FileSystem::fin_chemin(CHEMIN_FICHIER_CONFIG_INSTALL).' !'); } // A ce niveau, le fichier de connexion à la base de données doit exister. if(!is_file(CHEMIN_FICHIER_CONFIG_MYSQL)) { exit('Erreur : problème avec le fichier : '.FileSystem::fin_chemin(CHEMIN_FICHIER_CONFIG_MYSQL).' !'); } // Créer les dossiers de fichiers temporaires par établissement if(HEBERGEUR_INSTALLATION=='mono-structure') { foreach(FileSystem::$tab_dossier_tmp_structure as $dossier) { FileSystem::creer_dossier($dossier.'0' , $affichage ); FileSystem::ecrire_fichier_index($dossier.'0'); } } // On cherche d'éventuelles tables existantes de SACoche. $DB_TAB = (HEBERGEUR_INSTALLATION=='mono-structure') ? DB_STRUCTURE_COMMUN::DB_recuperer_tables_informations() : DB_WEBMESTRE_PUBLIC::DB_recuperer_tables_informations() ; $nb_tables_presentes = !empty($DB_TAB) ? count($DB_TAB) : 0 ; if($nb_tables_presentes) { $s = ($nb_tables_presentes>1) ? 's' : '' ; $base_nom = (HEBERGEUR_INSTALLATION=='mono-structure') ? SACOCHE_STRUCTURE_BD_NAME : SACOCHE_WEBMESTRE_BD_NAME ; $affichage .= '<p><label class="alerte">'.$nb_tables_presentes.' table'.$s.' de SACoche étant déjà présente'.$s.' dans la base « <b>'.$base_nom.'</b> », les tables n\'ont pas été installées.</label></p>'.NL; $affichage .= '<p class="astuce">Si besoin, supprimez les tables manuellement, puis <a href="#" class="step6">relancer l\'étape 6.</a><label id="ajax_msg"> </label></p>'.NL; $affichage .= '<hr />'.NL; $affichage .= '<h2>Installation logicielle terminée</h2>'.NL; $affichage .= '<p>Pour se connecter avec le compte webmestre : <a href="'.URL_DIR_SACOCHE.'?webmestre">'.URL_DIR_SACOCHE.'?webmestre</a></p>'.NL;
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>'); } // Vérifier le contenu : version de la base compatible avec la version logicielle if (version_base_fichier_svg($dossier_temp_sql) > VERSION_BASE_STRUCTURE) { 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 une sauvegarde plus récente que celle supportée par cette installation ! Il faut mettre à jour SACoche.</label></td>' . '</tr>'); } // 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);
/** * Nettoyer les fichiers temporaires * Fonction appeler lors d'une nouvelle connexion d'un utilisateur d'un établissement (pas mis en page d'accueil sinon c'est appelé trop souvent) * * @param int $BASE * @return void */ public static function nettoyer_fichiers_temporaires($BASE) { // On verifie que certains sous-dossiers existent : $tab_sous_dossier = array( CHEMIN_DOSSIER_DEVOIR , // n'a été ajouté qu'en mars 2012, CHEMIN_DOSSIER_DEVOIR.$BASE.DS , CHEMIN_DOSSIER_OFFICIEL , // n'a été ajouté qu'en mai 2012, CHEMIN_DOSSIER_OFFICIEL.$BASE.DS , CHEMIN_DOSSIER_PARTENARIAT , // n'a été ajouté qu'en juin 2013, ); foreach($tab_sous_dossier as $sous_dossier) { if(!is_dir($sous_dossier)) { FileSystem::creer_dossier($sous_dossier); FileSystem::ecrire_fichier($sous_dossier.'index.htm','Circulez, il n\'y a rien à voir par ici !'); } } $nb_mois = (defined('FICHIER_DUREE_CONSERVATION')) ? FICHIER_DUREE_CONSERVATION : 12 ; // Une fois tous les devoirs ont été supprimés sans raison claire : nettoyage simultané avec une mise à jour ? FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_LOGINPASS , 10 ); // Nettoyer ce dossier des fichiers antérieurs à 10 minutes FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_EXPORT , 60,TRUE); // Nettoyer ce dossier des fichiers antérieurs à 1 heure + sous-dossiers temporaires d'un zip qui ne serait pas allé au bout (pb de mémoire...) FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_DUMP , 60,TRUE); // Nettoyer ce dossier des fichiers antérieurs à 1 heure + sous-dossiers temporaires d'un zip qui ne serait pas allé au bout (pb de mémoire...) FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_IMPORT , 10080 ); // Nettoyer ce dossier des fichiers antérieurs à 1 semaine FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_TMP , 219000 ); // Nettoyer ce dossier des fichiers antérieurs à 6 mois FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_RSS.$BASE , 43800 ); // Nettoyer ce dossier des fichiers antérieurs à 1 mois FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_OFFICIEL.$BASE , 438000 ); // Nettoyer ce dossier des fichiers antérieurs à 10 mois FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_BADGE.$BASE , 481800 ); // Nettoyer ce dossier des fichiers antérieurs à 11 mois FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_COOKIE.$BASE , 525600 ); // Nettoyer ce dossier des fichiers antérieurs à 1 an FileSystem::effacer_fichiers_temporaires(CHEMIN_DOSSIER_DEVOIR.$BASE , 43800*$nb_mois); // Nettoyer ce dossier des fichiers antérieurs à la date fixée par le webmestre (1 an par défaut) }