// Récupérer les bilans déjà existants pour savoir s'il faut faire un INSERT ou un UPDATE (sinon, un REPLACE efface les dates de consultation) $DB_TAB = DB_STRUCTURE_OFFICIEL::DB_lister_bilan_officiel_fichiers( $BILAN_TYPE , $periode_id , array_keys($_SESSION['tmp']['tab_pages_decoupe_pdf']) ); $tab_notif = array(); foreach($_SESSION['tmp']['tab_pages_decoupe_pdf'] as $eleve_id => $tab_tirages) { list( $eleve_identite , $page_plage ) = $tab_tirages[0]; if(!isset($DB_TAB[$eleve_id])) { DB_STRUCTURE_OFFICIEL::DB_ajouter_bilan_officiel_fichier( $eleve_id , $BILAN_TYPE , $periode_id ); $tab_notif[$eleve_id] = $eleve_id; } else { DB_STRUCTURE_OFFICIEL::DB_modifier_bilan_officiel_fichier_date( $eleve_id , $BILAN_TYPE , $periode_id , 'generation' ); } $fichier_extraction_chemin = CHEMIN_DOSSIER_OFFICIEL.$_SESSION['BASE'].DS.fabriquer_nom_fichier_bilan_officiel( $eleve_id , $BILAN_TYPE , $periode_id ); unset($_SESSION['tmp']['tab_pages_decoupe_pdf'][$eleve_id][0]); $releve_pdf = new PDFMerger; $pdf_string = $releve_pdf -> addPDF( CHEMIN_DOSSIER_EXPORT.$_SESSION['tmp']['fichier_nom'].'.pdf' , $page_plage ) -> merge( 'file' , $fichier_extraction_chemin ); } // Notifications (rendues visibles ultérieurement parce que plus simple comme cela) if(!empty($tab_notif)) { $abonnement_ref = 'bilan_officiel_visible'; $is_acces_parent = in_array( 'TUT' , explode(',',$_SESSION['DROIT_OFFICIEL_'.$tab_types[$BILAN_TYPE]['droit'].'_VOIR_ARCHIVE']) ) ? TRUE : FALSE ; $is_acces_enfant = in_array( 'ELV' , explode(',',$_SESSION['DROIT_OFFICIEL_'.$tab_types[$BILAN_TYPE]['droit'].'_VOIR_ARCHIVE']) ) ? TRUE : FALSE ; if( $is_acces_parent || $is_acces_enfant ) { $listing_eleves = implode(',',$tab_notif); $listing_parents = DB_STRUCTURE_NOTIFICATION::DB_lister_parents_listing_id($listing_eleves); $listing_users = ($listing_parents) ? $listing_eleves.','.$listing_parents : $listing_eleves ;
{ foreach($_SESSION['OPT_PARENT_ENFANTS'] as $tab) { $tab_eleve_id[] = $tab['valeur']; $tab_tbody[$tab['valeur']][0] = '<th>'.html($tab['texte']).'</th>'; } } // lister les bilans officiels archivés de l'année courante $DB_TAB = DB_STRUCTURE_OFFICIEL::DB_lister_bilan_officiel_fichiers( '' /*BILAN_TYPE*/ , 0 /*periode_id*/ , $tab_eleve_id ); $_SESSION['tmp_droit_voir_archive'] = array(); // marqueur mis en session pour vérifier que c'est bien cet utilisateur qui veut voir (et à donc le droit de voir) le fichier, car il n'y a pas d'autre vérification de droit ensuite foreach($DB_TAB as $DB_ROW) { if(strpos($_SESSION['DROIT_OFFICIEL_'.$tab_types[$DB_ROW['officiel_type']]['droit'].'_VOIR_ARCHIVE'],$_SESSION['USER_PROFIL'])!==FALSE) { if(is_file(CHEMIN_DOSSIER_OFFICIEL.$_SESSION['BASE'].DS.fabriquer_nom_fichier_bilan_officiel( $DB_ROW['user_id'] , $DB_ROW['officiel_type'] , $DB_ROW['periode_id'] ))) { $_SESSION['tmp_droit_voir_archive'][$DB_ROW['user_id'].$DB_ROW['officiel_type']] = TRUE; // marqueur mis en session pour vérifier que c'est bien cet utilisateur qui veut voir (et à donc le droit de voir) le fichier, car il n'y a pas d'autre vérification de droit ensuite $tab_tbody[$DB_ROW['user_id']][$DB_ROW['periode_id']][] = '<a href="releve_pdf.php?fichier='.$DB_ROW['user_id'].'_'.$DB_ROW['officiel_type'].'_'.$DB_ROW['periode_id'].'" class="lien_ext">'.$tab_types[$DB_ROW['officiel_type']]['titre'].'</a>' ; } } } // Assemblage et affichage du tableau. echo'<p class="astuce">Ces bilans ne sont que des copies partielles, laissées à disposition pour information jusqu\'à la fin de l\'année scolaire.<br /><span class="u">Seul le document original fait foi.</span></p>'; echo'<table id="table_bilans"><thead><tr>'.implode('',$tab_thead).'</tr></thead><tbody>'."\r\n"; unset($tab_thead[0]); foreach($tab_eleve_id as $eleve_id) { echo'<tr>'.$tab_tbody[$eleve_id][0] ;
echo '<td>' . $tab_eleve_td[$eleve_id] . '</td>'; echo '<td class="hc">' . $archive_td . '</td>'; echo '</tr>'; } } exit; } // //////////////////////////////////////////////////////////////////////////////////////////////////// // IMPRIMER ETAPE 2/4 - Le PDF complet est généré ; on archive individuellement les fiches brevet informatives (qui sont y rester une année scolaire) // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($ACTION == 'imprimer' && $etape == 2) { Erreur500::prevention_et_gestion_erreurs_fatales(FALSE, TRUE); foreach ($_SESSION['tmp']['tab_pages_decoupe_pdf'] as $eleve_id => $tab_tirages) { list($eleve_identite, $page_numero) = $tab_tirages[1]; DB_STRUCTURE_BREVET::DB_modifier_brevet_fichier($eleve_id); $fichier_extraction_chemin = CHEMIN_DOSSIER_OFFICIEL . $_SESSION['BASE'] . DS . fabriquer_nom_fichier_bilan_officiel($eleve_id, $bilan_type, $annee_session_brevet); unset($_SESSION['tmp']['tab_pages_decoupe_pdf'][$eleve_id][1]); $releve_pdf = new PDFMerger(); $pdf_string = $releve_pdf->addPDF(CHEMIN_DOSSIER_EXPORT . $_SESSION['tmp']['fichier_nom'] . '.pdf', $page_numero)->merge('file', $fichier_extraction_chemin); } exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // IMPRIMER ETAPE 3/4 - Le PDF complet est généré ; on découpe individuellement les fiches brevet par élève puis on zippe l'ensemble // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($ACTION == 'imprimer' && $etape == 3) { Erreur500::prevention_et_gestion_erreurs_fatales(FALSE, TRUE); $date = date('Y-m-d'); $tab_pages_non_anonymes = array(); $chemin_temp_pdf = CHEMIN_DOSSIER_EXPORT . 'pdf_' . mt_rand() . DS; FileSystem::creer_ou_vider_dossier($chemin_temp_pdf);
if(is_file(CHEMIN_DOSSIER_OFFICIEL.$_SESSION['BASE'].DS.fabriquer_nom_fichier_bilan_officiel( $DB_ROW['user_id'] , $DB_ROW['officiel_type'] , $DB_ROW['periode_id'] ))) { $_SESSION['tmp_droit_voir_archive'][$DB_ROW['user_id'].$DB_ROW['officiel_type']] = TRUE; // marqueur mis en session pour vérifier que c'est bien cet utilisateur qui veut voir (et à donc le droit de voir) le fichier, car il n'y a pas d'autre vérification de droit ensuite $tab_tbody[$DB_ROW['user_id']][$DB_ROW['periode_id']][] = '<a href="releve_pdf.php?fichier='.$DB_ROW['user_id'].'_'.$DB_ROW['officiel_type'].'_'.$DB_ROW['periode_id'].'" target="_blank">'.$tab_types[$DB_ROW['officiel_type']]['titre'].'</a>' ; } } } // autre boucle pour les fiches brevet (ce n'est pas la même table) if(test_user_droit_specifique($_SESSION['DROIT_'.$tab_types['brevet']['droit'].'_VOIR_ARCHIVE'])) { $bilan_type = 'brevet'; $DB_TAB = DB_STRUCTURE_BREVET::DB_lister_brevet_fichiers( implode(',',$tab_eleve_id) ); foreach($DB_TAB as $user_id => $tab) { if(is_file(CHEMIN_DOSSIER_OFFICIEL.$_SESSION['BASE'].DS.fabriquer_nom_fichier_bilan_officiel( $user_id , $bilan_type , $annee_session_brevet ))) { $_SESSION['tmp_droit_voir_archive'][$user_id.$bilan_type] = TRUE; // marqueur mis en session pour vérifier que c'est bien cet utilisateur qui veut voir (et à donc le droit de voir) le fichier, car il n'y a pas d'autre vérification de droit ensuite $tab_tbody[$user_id]['+'.$annee_session_brevet][] = '<a href="releve_pdf.php?fichier='.$user_id.'_'.$bilan_type.'_'.$annee_session_brevet.'" target="_blank">'.$tab_types['brevet']['titre'].'</a>' ; $tab_thead['+'.$annee_session_brevet] = '<th class="hc">Année</th>'; } } } // Assemblage et affichage du tableau. echo'<p>Ces bilans sont des copies numériques, laissées à disposition <span class="danger">seulement jusqu\'à la fin de l\'année scolaire.</span></p>'.NL; echo'<p class="astuce">Cliquer sur un lien atteste que vous avez pris connaissance du document correspondant.</p>'.NL; echo'<hr />'.NL; echo'<table id="table_bilans"><thead>'.NL.'<tr>'.implode('',$tab_thead).'</tr>'.NL.'</thead><tbody>'.NL; unset($tab_thead[0]);
exit_error( 'Paramètre manquant' /*titre*/ , 'Page appelée sans indiquer la référence de l\'archive PDF à récupérer.' /*contenu*/ , '' /*lien*/ ); } if( (!in_array($bilan_type,$tab_types)) || !$periode_id || !$eleve_id ) { exit_error( 'Paramètre incorrect' /*titre*/ , 'La valeur "'.html($FICHIER).'" transmise n\'est pas conforme.' /*contenu*/ , '' /*lien*/ ); } // Vérifications complémentaires if( !isset($_SESSION['tmp_droit_voir_archive'][$eleve_id.$bilan_type]) || !isset($_SESSION['BASE']) ) { exit_error( 'Accès non autorisé' /*titre*/ , 'Cet appel n\'est valide que pour un utilisateur précis, connecté, et ayant affiché la page listant les archives disponibles.<br />Veuillez ne pas appeler ce lien dans un autre contexte (ni le transmettre à un tiers).' /*contenu*/ , '' /*lien*/ ); } $fichier_archive = CHEMIN_DOSSIER_OFFICIEL.$_SESSION['BASE'].DS.fabriquer_nom_fichier_bilan_officiel( $eleve_id , $bilan_type , $periode_id ); if(!is_file($fichier_archive)) { exit_error( 'Document manquant' /*titre*/ , 'Archive non trouvée sur ce serveur.' /*contenu*/ , '' /*lien*/ ); } // Copie du fichier pour préserver son anonymat $fichier_copie_nom = 'officiel_'.$bilan_type.'_archive_'.$eleve_id.'_'.$periode_id.'_'.fabriquer_fin_nom_fichier__date_et_alea().'.pdf' ; copy($fichier_archive,CHEMIN_DOSSIER_EXPORT.$fichier_copie_nom); // Enregistrement de l'accès if( in_array( $_SESSION['USER_PROFIL_TYPE'] , array('eleve','parent') ) ) { // Connexion à la base de données adaptée (à ce stade, plus besoin de vérif, il s'agit d'une install bien en place...). if(HEBERGEUR_INSTALLATION=='multi-structures')