LockAcces::debloquer_application($_SESSION['USER_PROFIL_TYPE'], '0'); exit(']¤[' . 'pb' . ']¤[' . "Erreur lors de l'écriture du fichier " . $fichier . " !"); } $tbody .= '<tr><td class="b">Fichier modifié</td><td>' . $fichier . '</td></tr>'; } } elseif (!isset($tab['avant']) && substr($fichier, -9) != '.htaccess') { // Fichier à ajouter (si le .htaccess n'y est pas, c'est sans doute volontaire, ne pas l'y remettre) if (!copy($dossier_dezip . $fichier, $dossier_install . $fichier)) { ajouter_log_PHP('Mise à jour des fichiers', 'Application accessible.', __FILE__, __LINE__, FALSE); LockAcces::debloquer_application($_SESSION['USER_PROFIL_TYPE'], '0'); exit(']¤[' . 'pb' . ']¤[' . "Erreur lors de l'écriture du fichier " . $fichier . " !"); } $tbody .= '<tr><td class="v">Fichier ajouté</td><td>' . $fichier . '</td></tr>'; } elseif (!isset($tab['apres'])) { // Fichier à supprimer FileSystem::supprimer_fichier($dossier_install . $fichier, TRUE); $tbody .= '<tr><td class="r">Fichier supprimé</td><td>' . $fichier . '</td></tr>'; } } // Débloquer l'application ajouter_log_PHP('Mise à jour des fichiers', 'Application accessible.', __FILE__, __LINE__, FALSE); LockAcces::debloquer_application($_SESSION['USER_PROFIL_TYPE'], '0'); // Enregistrement du rapport $_SESSION['tmp']['rapport_filename'] = 'rapport_maj_' . $_SESSION['BASE'] . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.html'; FileSystem::fabriquer_fichier_rapport($_SESSION['tmp']['rapport_filename'], $thead, $tbody); exit(']¤[' . 'ok' . ']¤[' . 'Rapport des modifications apportées et nettoyage…'); } // // 5. Nettoyage... // if ($action == 'maj_etape5') {
/** * Supprimer les fichiers de blocage éventuels d'une structure * * @param int $base_id * @return void */ public static function supprimer_fichiers_blocage($base_id) { FileSystem::supprimer_fichier(LockAcces::chemin_fichier_blocage('webmestre', $base_id), TRUE); FileSystem::supprimer_fichier(LockAcces::chemin_fichier_blocage('administrateur', $base_id), TRUE); FileSystem::supprimer_fichier(LockAcces::chemin_fichier_blocage('automate', $base_id), TRUE); }
/** * Cas d'un service externe récupérant les données d'un user authentifié sur SACoche. * C'est un webservice un peu particulier qui ne requiert pas d'autre fichier de code dans CHEMIN_DOSSIER_WEBSERVICES. * Il y a en revanche quelques lignes de code associées dans le fichier /index.php */ if ($WS_qui == 'AutoMaths') { $WS_cle = Clean::param_chemin($WS_cle); if (!$WS_cle) { exit('Erreur : clef non transmise !'); } $fichier = CHEMIN_DOSSIER_LOGINPASS . $WS_cle . '.txt'; if (!is_file($fichier)) { exit('Erreur : absence de données associées à cette clef !'); } $infos_user = file_get_contents($fichier); FileSystem::supprimer_fichier($fichier); exit($infos_user); } /** * Place aux autres webservices appelés depuis l'extérieur. * On ne vérifie dans un premier temps que le 1er paramètre (le service web prendra éventuellement en charge la suite). */ $tab_ws = array('argos_parent', 'argos_ajout', 'Laclasse-provisionning'); if (!in_array($WS_qui, $tab_ws)) { exit('Erreur : nom du service web manquant / incorrect ou service non autorisé !'); } $fichier = CHEMIN_DOSSIER_WEBSERVICES . $WS_qui . '.php'; if (!is_file($fichier)) { exit('Erreur : le service web "' . $WS_qui . '" n\'est pas disponible sur cette installation !'); } require $fichier;
} // //////////////////////////////////////////////////////////////////////////////////////////////////// // Enregistrer le nouveau fichier de paramètres // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'enregistrer') { // Pour le logo, ... if (!isset($_SESSION['tmp']['partenaire_logo_new_filename'])) { // soit on conserve le précédent (éventuellement rien), } elseif ($_SESSION['tmp']['partenaire_logo_new_filename'] == '') { // soit on le supprime, FileSystem::supprimer_fichier(CHEMIN_DOSSIER_PARTENARIAT . $_SESSION['tmp']['partenaire_logo_actuel_filename'], TRUE); $_SESSION['tmp']['partenaire_logo_actuel_filename'] = ''; } elseif (is_file(CHEMIN_DOSSIER_IMPORT . $_SESSION['tmp']['partenaire_logo_new_filename'])) { // soit on prend le nouveau, auquel cas il faut aussi le déplacer dans CHEMIN_DOSSIER_PARTENARIAT, et éventuellement supprimer l'ancien if ($_SESSION['tmp']['partenaire_logo_actuel_filename']) { FileSystem::supprimer_fichier(CHEMIN_DOSSIER_PARTENARIAT . $_SESSION['tmp']['partenaire_logo_actuel_filename'], TRUE); } $_SESSION['tmp']['partenaire_logo_actuel_filename'] = 'logo_' . $_SESSION['USER_ID'] . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.' . $_SESSION['tmp']['partenaire_logo_new_file_ext']; copy(CHEMIN_DOSSIER_IMPORT . $_SESSION['tmp']['partenaire_logo_new_filename'], CHEMIN_DOSSIER_PARTENARIAT . $_SESSION['tmp']['partenaire_logo_actuel_filename']); } unset($_SESSION['tmp']['partenaire_logo_new_filename'], $_SESSION['tmp']['partenaire_logo_new_file_ext']); // On fabrique le fichier avec les infos et on l'enregistre FileSystem::fabriquer_fichier_partenaire_message($_SESSION['USER_ID'], $_SESSION['tmp']['partenaire_logo_actuel_filename'], $adresse_web, $message); // Retour $partenaire_logo_url = $_SESSION['tmp']['partenaire_logo_actuel_filename'] ? URL_DIR_PARTENARIAT . $_SESSION['tmp']['partenaire_logo_actuel_filename'] : URL_DIR_IMG . 'auto.gif'; $partenaire_lien_ouvrant = $adresse_web ? '<a href="' . html($adresse_web) . '" target="_blank">' : ''; $partenaire_lien_fermant = $adresse_web ? '</a>' : ''; exit('ok-' . $partenaire_lien_ouvrant . '<span id="partenaire_logo"><img src="' . html($partenaire_logo_url) . '" /></span><span id="partenaire_message">' . nl2br(html($message)) . '</span>' . $partenaire_lien_fermant . '<hr id="partenaire_hr" />'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Il se peut que rien n'ait été récupéré à cause de l'upload d'un fichier trop lourd
// 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 /*verif_exist*/ ); } // Game over unset($_SESSION['datetime'],$_SESSION['alea'],$_SESSION['tab_info']); exit(']¤['.'ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer plusieurs structures existantes // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='supprimer') && $nb_bases ) { foreach($tab_base_id as $base_id) { Webmestre::supprimer_multi_structure($base_id);
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 // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'supprimer' && $nb_bases) { foreach ($tab_base_id as $base_id) { Webmestre::supprimer_multi_structure($base_id); } exit('<ok>'); } // ////////////////////////////////////////////////////////////////////////////////////////////////////
/** * Vérifier qu'une arborescence XML d'un référentiel est syntaxiquement valide. * * @param string $arbreXML * @return string "ok" ou "Erreur..." */ public static function verifier_arborescence_XML($arbreXML) { // On ajoute déclaration et doctype au fichier (évite que l'utilisateur ait à se soucier de cette ligne et permet de le modifier en cas de réorganisation // Attention, le chemin du DTD est relatif par rapport à l'emplacement du fichier XML (pas celui du script en cours) ! $fichier_adresse = CHEMIN_DOSSIER_IMPORT.'referentiel_'.fabriquer_fin_nom_fichier__date_et_alea().'.xml'; $fichier_contenu = '<?xml version="1.0" encoding="UTF-8"?>'."\r\n".'<!DOCTYPE arbre SYSTEM "../../_dtd/referentiel.dtd">'."\r\n".$arbreXML; $fichier_contenu = To::deleteBOM(To::utf8($fichier_contenu)); // Mettre en UTF-8 si besoin et retirer le BOM éventuel // On enregistre temporairement dans un fichier pour analyse FileSystem::ecrire_fichier($fichier_adresse,$fichier_contenu); // On lance le test $test_XML_valide = ServeurCommunautaire::analyser_XML($fichier_adresse); // On efface le fichier temporaire FileSystem::supprimer_fichier($fichier_adresse); return $test_XML_valide; }
exit('Erreur : le fichier contenant les données à traiter est introuvable !'); } $contenu = file_get_contents($fichier_chemin); $tab_donnees_csv = @unserialize($contenu); if ($tab_donnees_csv === FALSE) { exit('Erreur : le fichier contenant les données à traiter est syntaxiquement incorrect !'); } $nb_modifs = 0; foreach ($tab_donnees_csv as $rubrique_id => $tab_eleves) { foreach ($tab_eleves as $eleve_id => $tab_saisies) { if (isset($tab_saisies['moyenne'])) { if ($tab_saisies['moyenne'] >= 0 && $OBJET == 'modifier' && $BILAN_TYPE == 'bulletin' && $rubrique_id > 0) { enregistrer_note($BILAN_TYPE, $periode_id, $eleve_id, $rubrique_id, $tab_saisies['moyenne']); $nb_modifs++; } } if (isset($tab_saisies['appreciation'])) { if ($tab_saisies['appreciation'] && ($rubrique_id > 0 || $OBJET == 'tamponner')) { enregistrer_appreciation($BILAN_TYPE, $periode_id, $eleve_id, $classe_id, $rubrique_id, $_SESSION['USER_ID'], $tab_saisies['appreciation']); $nb_modifs++; } } } } if (!$nb_modifs) { exit('Erreur : aucune donnée trouvée à enregistrer !'); } FileSystem::supprimer_fichier($fichier_chemin, FALSE); $s = $nb_modifs > 1 ? 's' : ''; exit('ok' . ']¤[' . $nb_modifs . ' donnée' . $s . ' enregistrée' . $s . '.'); }
if (!defined('SERVEUR_PROXY_USED')) { $tab_constantes_modifiees += array('SERVEUR_PROXY_USED' => '', 'SERVEUR_PROXY_NAME' => '', 'SERVEUR_PROXY_PORT' => '', 'SERVEUR_PROXY_TYPE' => '', 'SERVEUR_PROXY_AUTH_USED' => '', 'SERVEUR_PROXY_AUTH_METHOD' => '', 'SERVEUR_PROXY_AUTH_USER' => '', 'SERVEUR_PROXY_AUTH_PASS' => ''); } // A compter du 26/05/2011, ajout de paramètres pour les dates CNIL. [TODO] peut être retiré dans un an environ if (!defined('CNIL_NUMERO')) { $tab_constantes_modifiees += array('CNIL_NUMERO' => HEBERGEUR_CNIL, 'CNIL_DATE_ENGAGEMENT' => '', 'CNIL_DATE_RECEPISSE' => ''); } // A compter du 14/03/2012, ajout de paramètres pour les fichiers associés aux devoirs. [TODO] peut être retiré dans un an environ if (!defined('FICHIER_DUREE_CONSERVATION')) { $tab_constantes_modifiees += array('FICHIER_TAILLE_MAX' => 500, 'FICHIER_DUREE_CONSERVATION' => 12); } // A compter du 18/10/2012, ajout de paramètre pour le chemin des logs phpCAS. [TODO] peut être retiré dans un an environ if (!defined('CHEMIN_LOGS_PHPCAS') && !defined('PHPCAS_CHEMIN_LOGS')) { $tab_constantes_modifiees += array('CHEMIN_LOGS_PHPCAS' => CHEMIN_DOSSIER_TMP); $ancien_fichier = CHEMIN_DOSSIER_TMP . 'debugcas_' . md5($_SERVER['DOCUMENT_ROOT']) . '.txt'; FileSystem::supprimer_fichier($ancien_fichier, TRUE); } // A compter du 17/10/2012, ajout de paramètre pour fixer un niveau de restriction de droits d'accès (CHMOD). [TODO] peut être retiré dans un an environ if (!defined('SYSTEME_UMASK')) { $tab_constantes_modifiees += array('SYSTEME_UMASK' => '000'); } // A compter du 30/11/2013, ajout de paramètre pour indiquer si les admins peuvent modifier les coordonnées de la personne contact (multi-structures). [TODO] peut être retiré dans un an environ if (!defined('CONTACT_MODIFICATION_USER')) { $tab_constantes_modifiees += array('CONTACT_MODIFICATION_USER' => 'non', 'CONTACT_MODIFICATION_MAIL' => 'non'); } // A compter du 14/01/2014, ajout de paramètres pour le debug phpCAS. [TODO] peut être retiré dans un an environ if (!defined('PHPCAS_CHEMIN_LOGS')) { $tab_constantes_modifiees += array('PHPCAS_CHEMIN_LOGS' => CHEMIN_LOGS_PHPCAS, 'PHPCAS_ETABL_ID_LISTING' => ''); } // A compter du 08/02/2014, ajout de paramètre pour permettre de ne pas vérifier le certificat ssl de certaines connexions CAS if (!defined('PHPCAS_NO_CERTIF_LISTING')) {
/** * 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); } } } } }
/** * Tâches pseudo-planifiées exécutées lors de la connexion d'un utilisateur d'un établissement * * @param void * @return void */ public static function cron() { // On essaye de faire en sorte que plusieurs connexions ne lancent pas ces procédures simultanément $fichier_lock = CHEMIN_DOSSIER_TMP.'lock.txt'; if(!file_exists($fichier_lock)) { // On écrit un marqueur FileSystem::ecrire_fichier($fichier_lock,''); // On efface les fichiers temporaires obsolètes FileSystem::nettoyer_fichiers_temporaires($_SESSION['BASE']); // On rend visibles les notifications en attente et on supprime les notifications obsolètes Sesamail::envoyer_notifications(); DB_STRUCTURE_NOTIFICATION::DB_supprimer_log_anciens(); // On efface le marqueur FileSystem::supprimer_fichier($fichier_lock); } // Si le fichier témoin du nettoyage existe, on vérifie que sa présence n'est pas anormale (cela s'est déjà produit...) else { if( $_SERVER['REQUEST_TIME'] - filemtime($fichier_lock) > 30 ) { FileSystem::supprimer_fichier($fichier_lock); } } }
} list($image_largeur, $image_hauteur, $image_type, $html_attributs) = $tab_infos; $tab_extension_types = array(IMAGETYPE_GIF => 'gif', IMAGETYPE_JPEG => 'jpeg', IMAGETYPE_PNG => 'png', IMAGETYPE_BMP => 'bmp'); // http://www.php.net/manual/fr/function.exif-imagetype.php#refsect1-function.exif-imagetype-constants // vérifier le type if (!isset($tab_extension_types[$image_type])) { FileSystem::supprimer_fichier(CHEMIN_DOSSIER_LOGO . FileSystem::$file_saved_name); exit('Erreur : le fichier transmis n\'est pas un fichier image !'); } exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer un logo // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'delete_logo' && $logo) { FileSystem::supprimer_fichier(CHEMIN_DOSSIER_LOGO . $logo, TRUE); // Si on supprime l'image actuellement utilisée, alors la retirer du fichier if ($logo == HEBERGEUR_LOGO) { FileSystem::fabriquer_fichier_hebergeur_info(array('HEBERGEUR_LOGO' => '')); } exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Enregistrer le nouveau fichier de paramètres // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'enregistrer' && $denomination && $nom && $prenom && $courriel) { // Vérifier le domaine du serveur mail seulement en mode multi-structures car ce peut être sinon une installation sur un serveur local non ouvert sur l'extérieur. if (HEBERGEUR_INSTALLATION == 'multi-structures') { list($mail_domaine, $is_domaine_valide) = tester_domaine_courriel_valide($courriel); if (!$is_domaine_valide) { exit('Erreur avec le domaine "' . $mail_domaine . '" !');
} FileSystem::supprimer_fichier($chemin_logs . 'debugcas_test_ecriture.txt'); // Nettoyer la liste des établissements transmise if ($etabl_id_listing) { $tab_etabl_id = explode(',', $etabl_id_listing); $tab_etabl_id = Clean::map_entier($tab_etabl_id); $tab_etabl_id = array_filter($tab_etabl_id, 'positif'); $etabl_id_listing = count($tab_etabl_id) ? ',' . implode(',', $tab_etabl_id) . ',' : ''; } // ok FileSystem::fabriquer_fichier_hebergeur_info(array('PHPCAS_CHEMIN_LOGS' => $chemin_logs, 'PHPCAS_ETABL_ID_LISTING' => $etabl_id_listing)); exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Effacer un fichier de logs de phpCAS // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'supprimer' && $fichier_logs) { FileSystem::supprimer_fichier(PHPCAS_CHEMIN_LOGS . $fichier_logs . '.txt', TRUE); exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Récupérer un fichier de logs de phpCAS // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'voir' && $fichier_logs) { FileSystem::zip(CHEMIN_DOSSIER_EXPORT . $fichier_logs . '.zip', $fichier_logs . '.txt', file_get_contents(PHPCAS_CHEMIN_LOGS . $fichier_logs . '.txt')); exit('<ul class="puce"><li><a target="_blank" href="' . URL_DIR_EXPORT . $fichier_logs . '.zip' . '"><span class="file file_zip">Fichier de logs au format <em>zip</em>.</li></ul>'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là... // //////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !');
// vérifier le type if(!isset($tab_extension_types[$image_type])) { FileSystem::supprimer_fichier(CHEMIN_DOSSIER_LOGO.FileSystem::$file_saved_name); exit('Erreur : le fichier transmis n\'est pas un fichier image !'); } exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer un logo // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='delete_logo') && $logo ) { FileSystem::supprimer_fichier( CHEMIN_DOSSIER_LOGO.$logo , TRUE /*verif_exist*/ ); // Si on supprime l'image actuellement utilisée, alors la retirer du fichier if($logo==HEBERGEUR_LOGO) { FileSystem::fabriquer_fichier_hebergeur_info( array('HEBERGEUR_LOGO'=>'') ); } exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Enregistrer le nouveau fichier de paramètres // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='enregistrer') && $denomination && $nom && $prenom && $courriel ) { // Vérifier le domaine du serveur mail seulement en mode multi-structures car ce peut être sinon une installation sur un serveur local non ouvert sur l'extérieur.
foreach($tab_eleves as $eleve_id => $tab_saisies) { if(isset($tab_saisies['moyenne'])) { if( ($tab_saisies['moyenne']>=0) && ($OBJET=='modifier') && ($BILAN_TYPE=='bulletin') && ($rubrique_id>0) ) { enregistrer_note( $BILAN_TYPE , $periode_id , $eleve_id , $rubrique_id , $tab_saisies['moyenne'] ); $nb_modifs++; } } if(isset($tab_saisies['appreciation'])) { if( ($tab_saisies['appreciation']) && ( ($rubrique_id>0) || ($OBJET=='tamponner') ) ) { enregistrer_appreciation( $BILAN_TYPE , $periode_id , $eleve_id , $classe_id , $rubrique_id , $_SESSION['USER_ID'] , $tab_saisies['appreciation'] ); $nb_modifs++; } } } } if(!$nb_modifs) { exit('Erreur : aucune donnée trouvée à enregistrer !'); } FileSystem::supprimer_fichier( $fichier_chemin , FALSE /*verif_exist*/ ); $s = ($nb_modifs>1) ? 's' : '' ; exit('ok'.']¤['.$nb_modifs.' donnée'.$s.' enregistrée'.$s.'.'); } ?>
$notification_contenu = $texte; $tab_abonnes = explode(',',$listing_abonnes); foreach($tab_abonnes as $abonne_id) { DB_STRUCTURE_NOTIFICATION::DB_modifier_log_attente( $abonne_id , $abonnement_ref , 0 , NULL , $notification_contenu , 'compléter' , TRUE /*sep*/ ); } } } // // On passe maintenant au commentaire texte // // Supprimer un éventuel fichier précédent if( $msg_url && (mb_strpos($msg_url,$url_dossier_devoir)===0) ) { // Il peut ne pas être présent sur le serveur en cas de restauration de base ailleurs, etc. FileSystem::supprimer_fichier( url_to_chemin($msg_url) , TRUE /*verif_exist*/ ); } // Mise à jour dans la base if($msg_data) { $fichier_nom = 'devoir_'.$devoir_id.'_eleve_'.$_SESSION['USER_ID'].'_'.'texte'.'_'.$_SERVER['REQUEST_TIME'].'.'.'txt'; // pas besoin de le rendre inaccessible -> fabriquer_fin_nom_fichier__date_et_alea() inutilement lourd DB_STRUCTURE_COMMENTAIRE::DB_remplacer_devoir_commentaire( $devoir_id , $_SESSION['USER_ID'] , 'texte' , $url_dossier_devoir.$fichier_nom ); // et enregistrement du fichier FileSystem::ecrire_fichier( $chemin_devoir.$fichier_nom , $msg_data ); } else { if($msg_autre=='oui') { DB_STRUCTURE_COMMENTAIRE::DB_remplacer_devoir_commentaire( $devoir_id , $_SESSION['USER_ID'] , 'texte' , '' ); }
$listing_abonnes = DB_STRUCTURE_NOTIFICATION::DB_lister_destinataires_listing_id($abonnement_ref, $listing_profs); if ($listing_abonnes) { $notification_contenu = $texte; $tab_abonnes = explode(',', $listing_abonnes); foreach ($tab_abonnes as $abonne_id) { DB_STRUCTURE_NOTIFICATION::DB_modifier_log_attente($abonne_id, $abonnement_ref, 0, NULL, $notification_contenu, 'compléter', TRUE); } } } // // On passe maintenant au commentaire texte // // Supprimer un éventuel fichier précédent if ($msg_url && mb_strpos($msg_url, $url_dossier_devoir) === 0) { // Il peut ne pas être présent sur le serveur en cas de restauration de base ailleurs, etc. FileSystem::supprimer_fichier(url_to_chemin($msg_url), TRUE); } // Mise à jour dans la base if ($msg_data) { $fichier_nom = 'devoir_' . $devoir_id . '_eleve_' . $_SESSION['USER_ID'] . '_' . 'texte' . '_' . $_SERVER['REQUEST_TIME'] . '.' . 'txt'; // pas besoin de le rendre inaccessible -> fabriquer_fin_nom_fichier__date_et_alea() inutilement lourd DB_STRUCTURE_COMMENTAIRE::DB_remplacer_devoir_commentaire($devoir_id, $_SESSION['USER_ID'], 'texte', $url_dossier_devoir . $fichier_nom); // et enregistrement du fichier FileSystem::ecrire_fichier($chemin_devoir . $fichier_nom, $msg_data); } else { if ($msg_autre == 'oui') { DB_STRUCTURE_COMMENTAIRE::DB_remplacer_devoir_commentaire($devoir_id, $_SESSION['USER_ID'], 'texte', ''); } else { DB_STRUCTURE_COMMENTAIRE::DB_supprimer_devoir_commentaire($devoir_id, $_SESSION['USER_ID']); } }
* 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 !');} if(!isset($STEP)) {exit('Ce fichier ne peut être appelé directement !');} // //////////////////////////////////////////////////////////////////////////////////////////////////// // Étape 90 - Nettoyage des fichiers temporaires (tous les cas) // //////////////////////////////////////////////////////////////////////////////////////////////////// // Il est arrivé que ces fichiers n'existent plus (bizarre...) d'où le test d'existence. FileSystem::supprimer_fichier( CHEMIN_DOSSIER_IMPORT.$fichier_dest , TRUE /*verif_exist*/ ); FileSystem::supprimer_fichier( CHEMIN_DOSSIER_IMPORT.'import_'.$import_origine.'_'.$import_profil.'_'.$_SESSION['BASE'].'_'.session_id().'_users.txt' , TRUE /*verif_exist*/ ); FileSystem::supprimer_fichier( CHEMIN_DOSSIER_IMPORT.'import_'.$import_origine.'_'.$import_profil.'_'.$_SESSION['BASE'].'_'.session_id().'_classes.txt' , TRUE /*verif_exist*/ ); FileSystem::supprimer_fichier( CHEMIN_DOSSIER_IMPORT.'import_'.$import_origine.'_'.$import_profil.'_'.$_SESSION['BASE'].'_'.session_id().'_groupes.txt' , TRUE /*verif_exist*/ ); FileSystem::supprimer_fichier( CHEMIN_DOSSIER_IMPORT.'import_'.$import_origine.'_'.$import_profil.'_'.$_SESSION['BASE'].'_'.session_id().'_memo_analyse.txt' , TRUE /*verif_exist*/ ); FileSystem::supprimer_fichier( CHEMIN_DOSSIER_IMPORT.'import_'.$import_origine.'_'.$import_profil.'_'.$_SESSION['BASE'].'_'.session_id().'_liens_id_base.txt' , TRUE /*verif_exist*/ ); // Retenir qu'un import a été effectué $nom_variable = 'date_last_import_'.$import_profil.'s'; DB_STRUCTURE_COMMUN::DB_modifier_parametres( array( $nom_variable => TODAY_MYSQL ) ); $_SESSION[strtoupper($nom_variable)] = TODAY_MYSQL; // Game over echo'<p><label class="valide">Fichiers temporaires effacés, procédure d\'import terminée !</label></p>'.NL; echo'<ul class="puce p"><li><a href="#" id="retourner_depart">Retour au départ.</a><label id="ajax_msg"> </label></li></ul>'.NL; ?>
} elseif( (!isset($tab['avant'])) && (substr($fichier,-9)!='.htaccess') ) { // Fichier à ajouter (si le .htaccess n'y est pas, c'est sans doute volontaire, ne pas l'y remettre) if( !copy( $dossier_dezip.$fichier , $dossier_install.$fichier ) ) { 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'.']¤['."Erreur lors de l'écriture du fichier ".$fichier." !"); } $tbody .= '<tr><td class="v">Fichier ajouté</td><td>'.$fichier.'</td></tr>'; } elseif(!isset($tab['apres'])) // (forcément) { // Fichier à supprimer FileSystem::supprimer_fichier($dossier_install.$fichier , TRUE /*verif_exist*/ ); $tbody .= '<tr><td class="r">Fichier supprimé</td><td>'.$fichier.'</td></tr>'; } } // Débloquer l'application 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'); // Enregistrement du rapport $_SESSION['tmp']['rapport_filename'] = 'rapport_maj_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea().'.html'; FileSystem::fabriquer_fichier_rapport( $_SESSION['tmp']['rapport_filename'] , $thead , $tbody ); exit(']¤['.'ok'.']¤['.'Rapport des modifications apportées et nettoyage…'); } // // 5. Nettoyage... //
/** * Traiter un fichier photo : le vérifier, redimensionner l'image, enregistrer en BDD son contenu, effacer les fichiers correspondants * * @param int $user_id * @param string $fichier_chemin * @return string|array un message d'erreur ou un tableau avec [ contenu_base_64 , largeur , hauteur ] */ function photo_file_to_base($user_id,$fichier_chemin) { // vérifier la conformité du fichier image, récupérer les infos le concernant $tab_infos = @getimagesize($fichier_chemin); if($tab_infos==FALSE) { FileSystem::supprimer_fichier($fichier_chemin); return'le fichier image ne semble pas valide'; } list($image_largeur, $image_hauteur, $image_type, $html_attributs) = $tab_infos; $tab_extension_types = array( IMAGETYPE_GIF=>'gif' , IMAGETYPE_JPEG=>'jpeg' , IMAGETYPE_PNG=>'png' ); // http://www.php.net/manual/fr/function.exif-imagetype.php#refsect1-function.exif-imagetype-constants // vérifier le type if(!isset($tab_extension_types[$image_type])) { FileSystem::supprimer_fichier($fichier_chemin); return'le fichier transmis n\'est pas un fichier image'; } // vérifier les dimensions if( ($image_largeur>1024) || ($image_hauteur>1024) ) { FileSystem::supprimer_fichier($fichier_chemin); return'le fichier transmis a des dimensions trop grandes ('.$image_largeur.' sur '.$image_hauteur.')'; } if( ($image_largeur==0) && ($image_hauteur==0) ) { FileSystem::supprimer_fichier($fichier_chemin); return'le fichier transmis a des dimensions indéterminables'; } // C'est bon, on continue $fichier_chemin_vignette = $fichier_chemin.'.mini.jpeg'; $image_format = $tab_extension_types[$image_type]; $coef = PHOTO_DIMENSION_MAXI / max($image_largeur,$image_hauteur); $largeur_new = round($image_largeur*$coef); $hauteur_new = round($image_hauteur*$coef); $image_new = function_exists('imagecreatetruecolor') ? imagecreatetruecolor($largeur_new,$hauteur_new) : imagecreate($largeur_new,$hauteur_new) ; $couleur_fond = imagecolorallocate($image_new,255,255,255); // Le premier appel à imagecolorallocate() remplit la couleur de fond si imagecreate(). $couleur_fill = imagefill($image_new, 0, 0, $couleur_fond); // Si imagecreatetruecolor(), l'image est noire et il faut la remplir explicitement. $image_depart = call_user_func( 'imagecreatefrom'.$image_format, $fichier_chemin ); imagecopyresampled($image_new , $image_depart , 0 /* dest_x */ , 0 /* dest_y */ , 0 /* dep_x */ , 0 /* dep_y */ , $largeur_new , $hauteur_new , $image_largeur , $image_hauteur ); imagedestroy($image_depart); imagejpeg($image_new , $fichier_chemin_vignette , JPEG_QUALITY ); imagedestroy($image_new); // stocker l'image dans la base $image_contenu_base_64 = base64_encode(file_get_contents($fichier_chemin_vignette)) ; DB_STRUCTURE_IMAGE::DB_modifier_image( $user_id , 'photo' , $image_contenu_base_64 , 'jpeg' , $largeur_new , $hauteur_new ); // effacer les fichiers images FileSystem::supprimer_fichier($fichier_chemin); FileSystem::supprimer_fichier($fichier_chemin_vignette); // retour des informations return array( $image_contenu_base_64 , $largeur_new , $hauteur_new ); }
/** * 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 . '.'); }
$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) ) { 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 contient au moins un fichier dont la taille dépasse la limitation <em>max_allowed_packet</em> de MySQL !</label></li>'); } // Vérifier le contenu : version de la base compatible avec la version logicielle if( version_base_fichier_svg($dossier_temp) > VERSION_BASE_STRUCTURE )
{ exit('Erreur : '.$result); } // vérifier la conformité du fichier image, récupérer les infos le concernant $tab_infos = @getimagesize(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name); if($tab_infos==FALSE) { FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name); exit('Erreur : le fichier image ne semble pas valide !'); } list($image_largeur, $image_hauteur, $image_type, $html_attributs) = $tab_infos; $tab_extension_types = array( IMAGETYPE_GIF=>'gif' , IMAGETYPE_JPEG=>'jpeg' , IMAGETYPE_PNG=>'png' ); // http://www.php.net/manual/fr/function.exif-imagetype.php#refsect1-function.exif-imagetype-constants // vérifier le type if(!isset($tab_extension_types[$image_type])) { FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name); exit('Erreur : le fichier transmis n\'est pas un fichier image (type '.$image_type.') !'); } $image_format = $tab_extension_types[$image_type]; // stocker l'image dans la base DB_STRUCTURE_IMAGE::DB_modifier_image( $user_id , 'signature' , base64_encode(file_get_contents(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name)) , $image_format , $image_largeur , $image_hauteur ); // Générer la balise html et afficher le retour list($width,$height) = dimensions_affichage_image( $image_largeur , $image_hauteur , 200 /*largeur_maxi*/ , 200 /*hauteur_maxi*/ ); $user_texte = ($user_id) ? 'Signature '.$user_texte : $user_texte ; exit('<li id="sgn_'.$user_id.'">'.html($user_texte).' : <img src="'.URL_DIR_IMPORT.FileSystem::$file_saved_name.'" alt="'.html($user_texte).'" width="'.$width.'" height="'.$height.'" /><q class="supprimer" title="Supprimer cette image (aucune confirmation ne sera demandée)."></q></li>'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer un fichier image (tampon de l'établissement ou signature) // ////////////////////////////////////////////////////////////////////////////////////////////////////
} // ok FileSystem::fabriquer_fichier_hebergeur_info( array( 'PHPCAS_LOGS_CHEMIN' => $chemin_logs, 'PHPCAS_LOGS_ETABL_LISTING' => $etabl_id_listing, ) ); exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Effacer un fichier de logs de phpCAS // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='supprimer') && $fichier_logs ) { FileSystem::supprimer_fichier( PHPCAS_LOGS_CHEMIN.$fichier_logs.'.txt' , TRUE /*verif_exist*/ ); exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Récupérer un fichier de logs de phpCAS // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='voir') && $fichier_logs ) { FileSystem::zip( CHEMIN_DOSSIER_EXPORT.$fichier_logs.'.zip' , $fichier_logs.'.txt' , file_get_contents(PHPCAS_LOGS_CHEMIN.$fichier_logs.'.txt') ); exit('<ul class="puce"><li><a target="_blank" href="'.URL_DIR_EXPORT.$fichier_logs.'.zip'.'"><span class="file file_zip">Fichier de logs au format <em>zip</em>.</li></ul>'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là...