$alerte = '<p class="danger">Vous avez fourni le fichier <span class="u b">avec</span> adresses ! Vous pouvez toutefois poursuivre&hellip;</p>' . NL;
        }
    } else {
        if ($import_profil == 'parent') {
            $nom_fichier_extrait = 'ResponsablesAvecAdresses.xml';
            if (isset($_FILES['userfile']['name']) && strpos($_FILES['userfile']['name'], 'ResponsablesSansAdresses')) {
                $nom_fichier_extrait = 'ResponsablesSansAdresses.xml';
                $alerte = '<p class="danger">Vous avez fourni le fichier <span class="u b">sans</span> adresses ! Si vous poursuivez, sachez que les adresses ne seront pas trouvées&hellip;</p>' . NL;
            }
        } else {
            if ($import_profil == 'professeur') {
                $annee_scolaire = date('n') > 7 ? date('Y') : date('Y') - 1;
                $nom_fichier_extrait = 'sts_emp_' . $_SESSION['WEBMESTRE_UAI'] . '_' . $annee_scolaire . '.xml';
            }
        }
    }
}
$result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_dest, $tab_extensions_autorisees, NULL, NULL, $nom_fichier_extrait);
if ($result !== TRUE) {
    exit('Erreur : ' . $result);
}
// On affiche le bilan et les puces des étapes
echo '<hr />' . NL;
echo $mode == 'complet' ? '<p class="astuce">Affichage complet des analyses et des comptes-rendus.</p>' : '<p class="astuce">Analyse restreinte aux seules différences trouvées et comptes-rendus non détaillés.</p>' . NL;
echo afficher_etapes($import_origine, $import_profil);
echo '<hr />' . NL;
echo '<fieldset>' . NL;
echo '<div><label class="valide">Votre fichier a été correctement réceptionné.</label></div>' . NL;
echo $alerte;
echo '<ul class="puce p"><li><a href="#step20" id="passer_etape_suivante">Passer à l\'étape 2.</a><label id="ajax_msg">&nbsp;</label></li></ul>' . NL;
echo '</fieldset>' . NL;
Exemplo n.º 2
0
    }
    $nb_eleves_trouves = count($tab_users_fichier, COUNT_NORMAL);
    if (!$nb_eleves_trouves) {
        exit('Erreur : aucun élève trouvé dans le fichier !');
    }
    // On enregistre
    FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . $fichier_memo, serialize($tab_users_fichier));
    // On affiche la demande de confirmation
    exit('ok' . ']¤[' . html($nb_eleves_trouves));
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Réception et analyse d'un fichier d'import issu de Pronote
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'import_pronote' && $periode_id) {
    // Récupération du fichier (zip ou pas)
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_dest, $tab_extensions_autorisees, NULL, NULL, 'SIECLE_exportAbsence.xml');
    if ($result !== TRUE) {
        exit('Erreur : ' . $result);
    }
    // Vérification du fichier
    $xml = @simplexml_load_file(CHEMIN_DOSSIER_IMPORT . $fichier_dest);
    if ($xml === FALSE) {
        exit('Erreur : le fichier transmis n\'est pas un XML valide !');
    }
    // Récupération des données du fichier
    $memo_date_debut = 9999;
    $memo_date_fin = 0;
    $tab_users_fichier = array();
    if ($xml->Absences_des_eleves) {
        $objet = 'absences';
        // cas d'un fichier d'absences
        }
    }
    // Nettoyer des restes d'upload de zip éventuels
    foreach ($_SESSION['tab_info'] as $key => $tab_infos) {
        FileSystem::supprimer_fichier(CHEMIN_DOSSIER_DUMP . $tab_infos['fichier_nom'], TRUE);
    }
    exit(']¤[' . $info_lignes_trouvees);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Import d'un fichier ZIP avec le fichier des bases sauvegardées
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'importer_zip') {
    if (!count($_SESSION['tab_info'])) {
        exit('Erreur : données du fichier CSV perdues !');
    }
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_zip_nom, array('zip'), NULL, NULL, NULL);
    if ($result !== TRUE) {
        exit('Erreur : ' . $result);
    }
    // Dezipper dans le dossier dump (pas dans un sous-dossier "temporaire" sinon ce dossier n'est pas vidé si l'opération n'arrive pas à son terme).
    $code_erreur = FileSystem::unzip(CHEMIN_DOSSIER_IMPORT . $fichier_zip_nom, CHEMIN_DOSSIER_DUMP, TRUE);
    if ($code_erreur) {
        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_zip_nom);
    // Vérifier le contenu : noms des fichiers
    $tab_fichier = FileSystem::lister_contenu_dossier(CHEMIN_DOSSIER_DUMP);
    $nb_fichiers_introuvables = 0;
    foreach ($_SESSION['tab_info'] as $key => $tab_infos) {
        if (!in_array($tab_infos['fichier_nom'], $tab_fichier)) {
            $nb_fichiers_introuvables++;
    } else {
        $options = count($DB_TAB) == 1 ? '' : '<option value="0">Tous les enseignants concernés</option>';
        foreach ($DB_TAB as $DB_ROW) {
            $options .= '<option value="' . $DB_ROW['user_id'] . '">' . html(afficher_identite_initiale($DB_ROW['user_nom'], FALSE, $DB_ROW['user_prenom'], TRUE, $DB_ROW['user_genre'])) . '</option>';
        }
        exit($options);
    }
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Uploader un document pour joindre à une demande
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'uploader_document') {
    // Récupération du fichier
    $fichier_nom = 'demande_' . $_SESSION['BASE'] . '_user_' . $_SESSION['USER_ID'] . '_' . $_SERVER['REQUEST_TIME'] . '.<EXT>';
    // pas besoin de le rendre inaccessible -> fabriquer_fin_nom_fichier__date_et_alea() inutilement lourd
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_nom, NULL, array('bat', 'com', 'exe', 'php', 'zip'), FICHIER_TAILLE_MAX, NULL);
    if ($result !== TRUE) {
        exit($result);
    }
    // Retour
    exit('ok' . ']¤[' . FileSystem::$file_saved_name . ']¤[' . URL_DIR_IMPORT . FileSystem::$file_saved_name);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Un élève confirme l'ajout d'une demande d'évaluation
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'confirmer_ajout' && $matiere_id && $item_id && $prof_id !== -1 && $score !== -2) {
    // Vérifier que cet item n'est pas déjà en attente d'évaluation pour cet élève
    if (DB_STRUCTURE_DEMANDE::DB_tester_demande_existante($_SESSION['USER_ID'], $matiere_id, $item_id)) {
        exit('<label class="erreur">Cette demande est déjà enregistrée !</label>');
    }
    // Vérifier que les demandes sont autorisées pour cette matière
Exemplo n.º 5
0
    }
    $export_csv .= "\r\n"; // une valeur NULL donnera une chaine vide
  }
  $fnom_export = 'saisie_deportee_'.$_SESSION['BASE'].'_'.$_SESSION['USER_ID'].'_'.Clean::fichier($BILAN_TYPE).'_'.Clean::fichier($periode_nom).'_'.Clean::fichier($groupe_nom).'_'.$BILAN_ETAT.'_'.fabriquer_fin_nom_fichier__date_et_alea().'.csv';
  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_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]);
    $_SESSION['ETABLISSEMENT']['DENOMINATION'] = $etablissement_denomination;
    $_SESSION['ETABLISSEMENT']['ADRESSE1'] = $etablissement_adresse1;
    $_SESSION['ETABLISSEMENT']['ADRESSE2'] = $etablissement_adresse2;
    $_SESSION['ETABLISSEMENT']['ADRESSE3'] = $etablissement_adresse3;
    $_SESSION['ETABLISSEMENT']['TELEPHONE'] = $etablissement_telephone;
    $_SESSION['ETABLISSEMENT']['FAX'] = $etablissement_fax;
    $_SESSION['ETABLISSEMENT']['COURRIEL'] = $etablissement_courriel;
    $_SESSION['ETABLISSEMENT']['URL'] = $etablissement_url;
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Traitement du formulaire form_logo (upload d'un fichier image)
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'upload_logo') {
    $fichier_nom = 'logo_' . $_SESSION['BASE'] . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.<EXT>';
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_nom, array('gif', 'jpg', 'jpeg', 'png'), NULL, 100, NULL);
    if ($result !== TRUE) {
        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);
  // Supprimer le dossier temporaire
  FileSystem::supprimer_dossier($dossier_temp);
  // Enregistrement du rapport
  $fichier_nom = 'rapport_zip_photos_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea().'.html';
  FileSystem::fabriquer_fichier_rapport( $fichier_nom , $thead , $tbody );
  // retour
  exit(']¤['.URL_DIR_EXPORT.$fichier_nom);
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Uploader une photo
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='envoyer_photo') && $user_id )
{
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , NULL /*fichier_nom*/ , $tab_ext_images /*tab_extensions_autorisees*/ , NULL /*tab_extensions_interdites*/ , 500 /*taille_maxi*/ , NULL /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit('Erreur : '.$result);
  }
  // traiter l'image : la vérifier, la redimensionner, l'enregistrer en BDD, et effacer les fichiers temporaires
  $result = photo_file_to_base($user_id,CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name);
  if(is_string($result))
  {
    exit('Erreur : '.$result.' !');
  }
  // retour
  list( $image_contenu_base_64 , $largeur_new , $hauteur_new) = $result;
  exit('ok'.']¤['.$user_id.']¤['.$largeur_new.']¤['.$hauteur_new.']¤['.'data:'.image_type_to_mime_type(IMAGETYPE_JPEG).';base64,'.$image_contenu_base_64);
}
Exemplo n.º 8
0
    exit('Erreur : aucun élève trouvé dans le fichier !');
  }
  // On enregistre
  FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT.$fichier_memo,serialize($tab_users_fichier));
  // On affiche la demande de confirmation
  exit('ok'.']¤['.html($nb_eleves_trouves));
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Réception et analyse d'un fichier d'import issu de Pronote
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='import_pronote') && $periode_id )
{
  // Récupération du fichier (zip ou pas)
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , $fichier_dest /*fichier_nom*/ , $tab_extensions_autorisees , NULL /*tab_extensions_interdites*/ , NULL /*taille_maxi*/ , 'SIECLE_exportAbsence.xml' /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit('Erreur : '.$result);
  }
  // Vérification du fichier
  $xml = @simplexml_load_file(CHEMIN_DOSSIER_IMPORT.$fichier_dest);
  if($xml===FALSE)
  {
    exit('Erreur : le fichier transmis n\'est pas un XML valide !');
  }
  // Récupération des données du fichier
  $memo_date_debut = 9999;
  $memo_date_fin   = 0;
  $tab_users_fichier = array();
  if($xml->Absences_des_eleves)
Exemplo n.º 9
0
            $export_csv .= $eleve_ligne_debut;
            $export_csv .= $with_note ? $separateur . "\r\n" : "\r\n";
        }
        $export_csv .= "\r\n";
        // une valeur NULL donnera une chaine vide
    }
    $fnom_export = 'saisie_deportee_' . $_SESSION['BASE'] . '_' . $_SESSION['USER_ID'] . '_' . Clean::fichier($BILAN_TYPE) . '_' . Clean::fichier($periode_nom) . '_' . Clean::fichier($groupe_nom) . '_' . $BILAN_ETAT . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.csv';
    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);
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'Rechercher_documents') {
    exit(ServeurCommunautaire::rechercher_documents($_SESSION['SESAMATH_ID'], $_SESSION['SESAMATH_KEY']));
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Uploader une ressource sur le serveur communautaire
// ////////////////////////////////////////////////////////////////////////////////////////////////////
/*
Pour uploader une ressource directement sur le serveur communautaire, le fichier "professeur_referentiel_edition.php" devrait l'appeller dans une iframe (le bouton d'upload du formulaire devant se trouver sur ce serveur). Mais :
- une fois l'upload effectué, pour faire remonter l'info au serveur où est installé SACoche, se pose un souci de cross-domain javascript.
- il faudrait reproduire côté serveur communautaire tout un environnement (js & css) semblable à celui du serveur d'installation de SACoche
Finalement, j'ai opté pour le plus simple même si ce n'est pas le plus économe : uploader sur le serveur SACoche puis transférer vers le serveur communautaire avec cURL::get_contents().
Ca va qu'une limite de 500Ko est imposée...
*/
if ($action == 'Uploader_document') {
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, NULL, NULL, array('bat', 'com', 'exe', 'php', 'zip'), 500, NULL);
    if ($result !== TRUE) {
        exit($result);
    }
    $fichier_nom = Clean::fichier(FileSystem::$file_upload_name);
    $reponse = ServeurCommunautaire::uploader_ressource($_SESSION['SESAMATH_ID'], $_SESSION['SESAMATH_KEY'], $_SESSION['tmp']['matiere_ref'], $fichier_nom, file_get_contents(CHEMIN_DOSSIER_IMPORT . FileSystem::$file_saved_name));
    FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT . FileSystem::$file_saved_name);
    exit($reponse);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Il se peut que rien n'ait été récupéré à cause de l'upload d'un fichier trop lourd
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if (empty($_POST)) {
    exit('Erreur : aucune donnée reçue ! Fichier trop lourd ? ' . InfoServeur::minimum_limitations_upload());
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
Exemplo n.º 11
0
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Uploader un sujet ou un corrigé d'évaluation
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='uploader_document') && $devoir_id && in_array($doc_objet,array('sujet','corrige')) )
{
  // Vérification des droits
  $proprio_id = DB_STRUCTURE_PROFESSEUR::DB_recuperer_devoir_prorietaire_id( $devoir_id );
  if($proprio_id!=$_SESSION['USER_ID'])
  {
    exit('Erreur : vous n\'êtes pas propriétaire du devoir n°'.$devoir_id.' !');
  }
  // Récupération du fichier
  $fichier_nom = 'devoir_'.$devoir_id.'_'.$doc_objet.'_'.$_SERVER['REQUEST_TIME'].'.<EXT>'; // pas besoin de le rendre inaccessible -> fabriquer_fin_nom_fichier__date_et_alea() inutilement lourd
  $result = FileSystem::recuperer_upload( $chemin_devoir /*fichier_chemin*/ , $fichier_nom /*fichier_nom*/ , NULL /*tab_extensions_autorisees*/ , array('bat','com','exe','php','zip') /*tab_extensions_interdites*/ , FICHIER_TAILLE_MAX /*taille_maxi*/ , NULL /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit($result);
  }
  // Mise à jour dans la base
  DB_STRUCTURE_PROFESSEUR::DB_modifier_devoir_document( $devoir_id , $doc_objet , $url_dossier_devoir.FileSystem::$file_saved_name );
  // Retour
  exit('ok'.']¤['.$ref.']¤['.$doc_objet.']¤['.$url_dossier_devoir.FileSystem::$file_saved_name);
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Retirer un sujet ou un corrigé d'évaluation
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='retirer_document') && $devoir_id && in_array($doc_objet,array('sujet','corrige')) && $doc_url )
Exemplo n.º 12
0
  {
    echo'<li>Vous devrez indiquer dans <em>lpc</em> les dates suivantes : <span class="b">'.html(CNIL_DATE_ENGAGEMENT).'</span> (déclaration <em>cnil</em>) et <span class="b">'.html(CNIL_DATE_RECEPISSE).'</span> (retour du récépissé).</li>'.NL;
  }
  echo'<li><label class="alerte">Pour des raisons de sécurité et de confidentialité, ce fichier sera effacé du serveur dans 1h.</label></li>'.NL;
  exit();
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Importer un fichier de validations
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( in_array( $action , array('import_sacoche','import_compatible') ) )
{
  // Si c'est un fichier zippé, on considère alors que c'est un zip devant venir de SACoche, et contenant import_validations.xml
  $fichier_nom = 'import_validations_'.$_SESSION['BASE'].'_'.fabriquer_fin_nom_fichier__date_et_alea().'.xml';
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , $fichier_nom /*fichier_nom*/ , array('xml','zip') /*tab_extensions_autorisees*/ , NULL /*tab_extensions_interdites*/ , NULL /*taille_maxi*/ , 'import_validations.xml' /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit('Erreur : '.$result);
  }
  $fichier_contenu = file_get_contents(CHEMIN_DOSSIER_IMPORT.$fichier_nom);
  $fichier_contenu = To::deleteBOM(To::utf8($fichier_contenu)); // Mettre en UTF-8 si besoin et retirer le BOM éventuel
  $xml = @simplexml_load_string($fichier_contenu);
  if($xml===FALSE)
  {
    exit('Erreur : le fichier transmis n\'est pas un XML valide !');
  }
  // On extrait les infos du XML
  $tab_eleve_fichier = array();
  if( ($xml->donnees) && ($xml->donnees->eleve) )
  {
Exemplo n.º 13
0
    // Retour
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Uploader un sujet ou un corrigé d'évaluation
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'uploader_document' && $devoir_id && in_array($doc_objet, array('sujet', 'corrige'))) {
    // Vérification des droits
    $proprio_id = DB_STRUCTURE_PROFESSEUR::DB_recuperer_devoir_prorietaire_id($devoir_id);
    if ($proprio_id != $_SESSION['USER_ID']) {
        exit('Erreur : vous n\'êtes pas propriétaire du devoir n°' . $devoir_id . ' !');
    }
    // Récupération du fichier
    $fichier_nom = 'devoir_' . $devoir_id . '_' . $doc_objet . '_' . $_SERVER['REQUEST_TIME'] . '.<EXT>';
    // pas besoin de le rendre inaccessible -> fabriquer_fin_nom_fichier__date_et_alea() inutilement lourd
    $result = FileSystem::recuperer_upload($chemin_devoir, $fichier_nom, NULL, array('bat', 'com', 'exe', 'php', 'zip'), FICHIER_TAILLE_MAX, NULL);
    if ($result !== TRUE) {
        exit($result);
    }
    // Mise à jour dans la base
    DB_STRUCTURE_PROFESSEUR::DB_modifier_devoir_document($devoir_id, $doc_objet, $url_dossier_devoir . FileSystem::$file_saved_name);
    // Retour
    exit('ok' . ']¤[' . $ref . ']¤[' . $doc_objet . ']¤[' . $url_dossier_devoir . FileSystem::$file_saved_name);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Retirer un sujet ou un corrigé d'évaluation
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'retirer_document' && $devoir_id && in_array($doc_objet, array('sujet', 'corrige')) && $doc_url) {
    // Vérification des droits
    $proprio_id = DB_STRUCTURE_PROFESSEUR::DB_recuperer_devoir_prorietaire_id($devoir_id);
    if ($proprio_id != $_SESSION['USER_ID']) {
    exit('Ce fichier ne peut être appelé directement !');
}
if ($_SESSION['SESAMATH_ID'] == ID_DEMO) {
    exit('Action désactivée pour la démo...');
}
$action = isset($_POST['f_action']) ? Clean::texte($_POST['f_action']) : '';
$logo = isset($_POST['f_logo']) ? Clean::texte($_POST['f_logo']) : '';
// inutilisé
$adresse_web = isset($_POST['f_adresse_web']) ? Clean::url($_POST['f_adresse_web']) : '';
$message = isset($_POST['f_message']) ? Clean::texte($_POST['f_message']) : '';
$tab_ext_images = array('bmp', 'gif', 'jpg', 'jpeg', 'png');
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Uploader un logo
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'upload_logo') {
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, NULL, $tab_ext_images, NULL, 100, NULL);
    if ($result !== TRUE) {
        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', 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_IMPORT . FileSystem::$file_saved_name);
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Uploader une ressource sur le serveur communautaire
// ////////////////////////////////////////////////////////////////////////////////////////////////////

/*
Pour uploader une ressource directement sur le serveur communautaire, le fichier "professeur_referentiel_edition.php" devrait l'appeller dans une iframe (le bouton d'upload du formulaire devant se trouver sur ce serveur). Mais :
- une fois l'upload effectué, pour faire remonter l'info au serveur où est installé SACoche, se pose un souci de cross-domain javascript.
- il faudrait reproduire côté serveur communautaire tout un environnement (js & css) semblable à celui du serveur d'installation de SACoche
Finalement, j'ai opté pour le plus simple même si ce n'est pas le plus économe : uploader sur le serveur SACoche puis transférer vers le serveur communautaire avec cURL::get_contents().
Ca va qu'une limite de 500Ko est imposée...
*/

if($action=='Uploader_document')
{
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , NULL /*fichier_nom*/ , NULL /*tab_extensions_autorisees*/ , array('bat','com','exe','php','zip') /*tab_extensions_interdites*/ , 500 /*taille_maxi*/ , NULL /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    exit($result);
  }
  $fichier_nom = Clean::fichier(FileSystem::$file_upload_name);
  $reponse = ServeurCommunautaire::uploader_ressource( $_SESSION['SESAMATH_ID'] , $_SESSION['SESAMATH_KEY'] , $_SESSION['tmp']['matiere_ref'] , $fichier_nom , file_get_contents(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name) );
  FileSystem::supprimer_fichier(CHEMIN_DOSSIER_IMPORT.FileSystem::$file_saved_name);
  exit($reponse);
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Il se peut que rien n'ait été récupéré à cause de l'upload d'un fichier trop lourd
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if(empty($_POST))
  $tab_parametres = array();
  $tab_parametres['officiel_tampon_signature'] = $tampon_signature;
  DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
  // On modifie aussi la session
  $_SESSION['OFFICIEL']['TAMPON_SIGNATURE'] = $tampon_signature ;
  exit('ok');
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Traitement du formulaire form_tampon (upload d'un fichier image)
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='upload_signature') && ($user_id>=0) && ($user_texte!='') )
{
  $fichier_nom = 'signature_'.$_SESSION['BASE'].'_'.$user_id.'_'.fabriquer_fin_nom_fichier__date_et_alea().'.<EXT>';
  $result = FileSystem::recuperer_upload( CHEMIN_DOSSIER_IMPORT /*fichier_chemin*/ , $fichier_nom /*fichier_nom*/ , array('gif','jpg','jpeg','png') /*tab_extensions_autorisees*/ , NULL /*tab_extensions_interdites*/ , 100 /*taille_maxi*/ , NULL /*filename_in_zip*/ );
  if($result!==TRUE)
  {
    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]))
    $in = $only_positives ? '' : '(in)-';
    echo '<li><label class="valide">Fichier d\'export généré : ' . $nb_piliers . ' ' . $in . 'validation' . $sp . ' de compétence' . $sp . ' et ' . $nb_items . ' ' . $in . 'validation' . $si . ' d\'item' . $si . ' concernant ' . $nb_eleves . ' élève' . $se . '.</label></li>' . NL;
    echo '<li><a target="_blank" href="' . $fichier_lien . '"><span class="file file_' . $fichier_extension . '">Récupérer le fichier au format <em>' . $fichier_extension . '</em>.</span></a></li>' . NL;
    if ($action == 'export_lpc') {
        echo '<li>Vous devrez indiquer dans <em>lpc</em> les dates suivantes : <span class="b">' . html(CNIL_DATE_ENGAGEMENT) . '</span> (déclaration <em>cnil</em>) et <span class="b">' . html(CNIL_DATE_RECEPISSE) . '</span> (retour du récépissé).</li>' . NL;
    }
    echo '<li><label class="alerte">Pour des raisons de sécurité et de confidentialité, ce fichier sera effacé du serveur dans 1h.</label></li>' . NL;
    exit;
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Importer un fichier de validations
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if (in_array($action, array('import_sacoche', 'import_compatible'))) {
    // Si c'est un fichier zippé, on considère alors que c'est un zip devant venir de SACoche, et contenant import_validations.xml
    $fichier_nom = 'import_validations_' . $_SESSION['BASE'] . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.xml';
    $result = FileSystem::recuperer_upload(CHEMIN_DOSSIER_IMPORT, $fichier_nom, array('xml', 'zip'), NULL, NULL, 'import_validations.xml');
    if ($result !== TRUE) {
        exit('Erreur : ' . $result);
    }
    $fichier_contenu = file_get_contents(CHEMIN_DOSSIER_IMPORT . $fichier_nom);
    $fichier_contenu = To::deleteBOM(To::utf8($fichier_contenu));
    // Mettre en UTF-8 si besoin et retirer le BOM éventuel
    $xml = @simplexml_load_string($fichier_contenu);
    if ($xml === FALSE) {
        exit('Erreur : le fichier transmis n\'est pas un XML valide !');
    }
    // On extrait les infos du XML
    $tab_eleve_fichier = array();
    if ($xml->donnees && $xml->donnees->eleve) {
        foreach ($xml->donnees->eleve as $eleve) {
            $tab_eleve_fichier['sconet_id'][] = Clean::entier($eleve->attributes()->id);