$tab_destinataires[$eleve_id][2] = ($_SESSION['OFFICIEL']['INFOS_RESPONSABLES']=='non') ? NULL : $tab_coords_resp2 ; } // Ajouter sur le 1er tirage le nom du 2e responsable si les adresses sont identiques et que le 2e bilan n'est imprimé qu'en cas d'adresses différentes if( ($_SESSION['OFFICIEL']['NOMBRE_EXEMPLAIRES']=='deux_si_besoin') && ($tab_destinataires[$eleve_id][1]!=NULL) && (!isset($tab_destinataires[$eleve_id][2])) ) { array_unshift($tab_destinataires[$eleve_id][1], $tab_coords_resp2[0]); } } // Récupérer le logo de l'établissement $tab_etabl_logo = NULL; $logo_hauteur = 0; if(mb_substr_count($_SESSION['OFFICIEL']['INFOS_ETABLISSEMENT'],'logo')) { $DB_ROW = DB_STRUCTURE_IMAGE::DB_recuperer_image( 0 /*user_id*/ , 'logo' ); if(!empty($DB_ROW)) { $tab_etabl_logo = array( base64_decode($DB_ROW['image_contenu']) , $DB_ROW['image_format'] , $DB_ROW['image_largeur'] , $DB_ROW['image_hauteur'] ); $logo_hauteur = 7; } } // Bloc des coordonnées de l'établissement $tab_etabl_coords = array(); if(mb_substr_count($_SESSION['OFFICIEL']['INFOS_ETABLISSEMENT'],'denomination')) { $tab_etabl_coords['denomination'] = $_SESSION['ETABLISSEMENT']['DENOMINATION']; } if(mb_substr_count($_SESSION['OFFICIEL']['INFOS_ETABLISSEMENT'],'adresse'))
$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) // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='delete_signature') && ($user_id>=0) ) { DB_STRUCTURE_IMAGE::DB_supprimer_image( $user_id , 'signature' ); exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // 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()); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là... // ////////////////////////////////////////////////////////////////////////////////////////////////////
$img_height = PHOTO_DIMENSION_MAXI; $img_width = PHOTO_DIMENSION_MAXI*2/3; foreach($DB_TAB as $DB_ROW) { $tab_vignettes[$DB_ROW['user_id']] = array( 'user_nom' => $DB_ROW['user_nom'], 'user_prenom' => $DB_ROW['user_prenom'], 'img_width' => $img_width, 'img_height' => $img_height, 'img_src' => '', 'img_title' => TRUE, ); } // On récupère les photos $listing_user_id = implode(',',array_keys($tab_vignettes)); $DB_TAB = DB_STRUCTURE_IMAGE::DB_lister_images( $listing_user_id , 'photo' ); if(!empty($DB_TAB)) { foreach($DB_TAB as $DB_ROW) { $tab_vignettes[$DB_ROW['user_id']]['img_width'] = $DB_ROW['image_largeur']; $tab_vignettes[$DB_ROW['user_id']]['img_height'] = $DB_ROW['image_hauteur']; $tab_vignettes[$DB_ROW['user_id']]['img_src'] = $DB_ROW['image_contenu']; $tab_vignettes[$DB_ROW['user_id']]['img_title'] = FALSE; } } // Génération de la sortie HTML (affichée directement) et de la sortie PDF (enregistrée dans un fichier) $fnom_pdf = 'trombinoscope_'.$_SESSION['BASE'].'_'.Clean::fichier($groupe_nom).'_'.fabriquer_fin_nom_fichier__date_et_alea().'.pdf'; $trombinoscope_HTML = '<h2>'.html($groupe_nom).'</h2><p><a target="_blank" href="'.URL_DIR_EXPORT.$fnom_pdf.'"><span class="file file_pdf">Archiver / Imprimer (format <em>pdf</em>).</span></a> → <span class="noprint">Afin de préserver l\'environnement, n\'imprimer que si nécessaire !</span></p>'; $trombinoscope_PDF = new PDF_trombinoscope( FALSE /*officiel*/ , 'portrait' /*orientation*/ , 5 /*marge_gauche*/ , 5 /*marge_droite*/ , 5 /*marge_haut*/ , 7 /*marge_bas*/ ); $trombinoscope_PDF->initialiser($groupe_nom);
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(0, 'logo', 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, 200); exit('<li><img src="' . URL_DIR_IMPORT . FileSystem::$file_saved_name . '" alt="Logo établissement" width="' . $width . '" height="' . $height . '" /><q class="supprimer" title="Supprimer cette image (aucune confirmation ne sera demandée)."></q></li>'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer un fichier image (logo de l'établissement) // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'delete_logo') { DB_STRUCTURE_IMAGE::DB_supprimer_image(0, 'logo'); exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Mettre à jour mois_bascule_annee_scolaire // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($mois_bascule_annee_scolaire) { $tab_parametres = array(); $tab_parametres['mois_bascule_annee_scolaire'] = $mois_bascule_annee_scolaire; DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres); // On modifie aussi la session $_SESSION['MOIS_BASCULE_ANNEE_SCOLAIRE'] = $mois_bascule_annee_scolaire; exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Mettre à jour la langue par défaut
for ($i = $mini; $i <= $maxi; $i++) { $options .= '<option value="' . $i . '">' . number_format($i / 10, 1, ',', '') . 'cm</option>'; } return $options; } $options_horizontal_gauche = str_replace('"' . $_SESSION['ENVELOPPE']['HORIZONTAL_GAUCHE'] . '"', '"' . $_SESSION['ENVELOPPE']['HORIZONTAL_GAUCHE'] . '" selected', fabriquer_chaine_option(90, 120)); $options_horizontal_milieu = str_replace('"' . $_SESSION['ENVELOPPE']['HORIZONTAL_MILIEU'] . '"', '"' . $_SESSION['ENVELOPPE']['HORIZONTAL_MILIEU'] . '" selected', fabriquer_chaine_option(85, 115)); $options_horizontal_droite = str_replace('"' . $_SESSION['ENVELOPPE']['HORIZONTAL_DROITE'] . '"', '"' . $_SESSION['ENVELOPPE']['HORIZONTAL_DROITE'] . '" selected', fabriquer_chaine_option(15, 25)); $options_vertical_haut = str_replace('"' . $_SESSION['ENVELOPPE']['VERTICAL_HAUT'] . '"', '"' . $_SESSION['ENVELOPPE']['VERTICAL_HAUT'] . '" selected', fabriquer_chaine_option(40, 60)); $options_vertical_milieu = str_replace('"' . $_SESSION['ENVELOPPE']['VERTICAL_MILIEU'] . '"', '"' . $_SESSION['ENVELOPPE']['VERTICAL_MILIEU'] . '" selected', fabriquer_chaine_option(35, 55)); $options_vertical_bas = str_replace('"' . $_SESSION['ENVELOPPE']['VERTICAL_BAS'] . '"', '"' . $_SESSION['ENVELOPPE']['VERTICAL_BAS'] . '" selected', fabriquer_chaine_option(15, 25)); // Formulaire avec la liste des directeurs et professeurs $select_user = HtmlForm::afficher_select(DB_STRUCTURE_COMMUN::DB_OPT_professeurs_directeurs_etabl(1), 'f_user', 'tampon_structure', FALSE, 'profs_directeurs'); // Récupérer les signatures existantes, dont le tampon de l'établissement. $li_signatures = ''; $DB_TAB = DB_STRUCTURE_IMAGE::DB_lister_signatures_avec_identite(); foreach ($DB_TAB as $DB_ROW) { // Enregistrer temporairement le fichier sur le disque $texte = $DB_ROW['user_id'] ? 'Signature ' . $DB_ROW['user_nom'] . ' ' . $DB_ROW['user_prenom'] : 'Tampon de l\'établissement'; $fichier_nom = 'signature_' . $_SESSION['BASE'] . '_' . $DB_ROW['user_id'] . '_' . fabriquer_fin_nom_fichier__date_et_alea() . '.' . $DB_ROW['image_format']; FileSystem::ecrire_fichier(CHEMIN_DOSSIER_EXPORT . $fichier_nom, base64_decode($DB_ROW['image_contenu'])); // Générer la balise html pour afficher l'image list($width, $height) = dimensions_affichage_image($DB_ROW['image_largeur'], $DB_ROW['image_hauteur'], 200, 200); $li_signatures .= '<li id="sgn_' . $DB_ROW['user_id'] . '">' . html($texte) . ' : <img src="' . URL_DIR_EXPORT . $fichier_nom . '" alt="' . html($texte) . '" width="' . $width . '" height="' . $height . '" /><q class="supprimer" title="Supprimer cette image (aucune confirmation ne sera demandée)."></q></li>'; } $li_signatures = $li_signatures ? $li_signatures : '<li id="sgn_none">Aucun fichier image trouvé !</li>'; ?> <div><span class="manuel"><a class="pop_up" href="<?php echo SERVEUR_DOCUMENTAIRE; ?>
* * Ce fichier est une partie de SACoche. * * SACoche est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes * de la “GNU Affero General Public License” telle que publiée par la Free Software Foundation : * soit la version 3 de cette licence, soit (à votre gré) toute version ultérieure. * * SACoche est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE : * sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. * 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 ($_SESSION['SESAMATH_ID'] == ID_DEMO) { } // On récupère l'identifiant de l'élève $user_id = isset($_GET['user_id']) ? (int) $_GET['user_id'] : -1; if ($user_id == -1) { exit('Erreur avec les données transmises !'); } // On récupère la photo // $user_id=0 possible si mode bulletin et consultation des données sur le groupe classe (pas un élève en particulier) $DB_ROW = $user_id ? DB_STRUCTURE_IMAGE::DB_recuperer_image($user_id, 'photo') : NULL; $image = !empty($DB_ROW) ? '<img width="' . $DB_ROW['image_largeur'] . '" height="' . $DB_ROW['image_hauteur'] . '" src="data:' . image_type_to_mime_type(IMAGETYPE_JPEG) . ';base64,' . $DB_ROW['image_contenu'] . '" alt="" />' : '<img width="' . PHOTO_DIMENSION_MAXI * 2 / 3 . '" height="' . PHOTO_DIMENSION_MAXI . '" src="./_img/trombinoscope_vide.png" alt="" title="absence de photo" />'; // On affiche le résultat exit($image);
/** * 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 ); }
// Tirage pour le 1er responsable $tab_destinataires[$eleve_id][1] = $_SESSION['OFFICIEL']['INFOS_RESPONSABLES'] == 'non' ? NULL : $tab_coords_resp1; // Tirage pour le 2e responsable if ($_SESSION['OFFICIEL']['NOMBRE_EXEMPLAIRES'] == 'deux_de_force' && $tab_coords_resp2 != NULL || $_SESSION['OFFICIEL']['NOMBRE_EXEMPLAIRES'] == 'deux_si_besoin' && $tab_coords_resp2 != NULL && ($tab_coords_resp1 == NULL || array_slice($tab_coords_resp2, 1) != array_slice($tab_coords_resp1, 1))) { $tab_destinataires[$eleve_id][2] = $_SESSION['OFFICIEL']['INFOS_RESPONSABLES'] == 'non' ? NULL : $tab_coords_resp2; } // Ajouter sur le 1er tirage le nom du 2e responsable si les adresses sont identiques et que le 2e bilan n'est imprimé qu'en cas d'adresses différentes if ($_SESSION['OFFICIEL']['NOMBRE_EXEMPLAIRES'] == 'deux_si_besoin' && $tab_destinataires[$eleve_id][1] != NULL && !isset($tab_destinataires[$eleve_id][2])) { array_unshift($tab_destinataires[$eleve_id][1], $tab_coords_resp2[0]); } } // Récupérer le logo de l'établissement $tab_etabl_logo = NULL; $logo_hauteur = 0; if (mb_substr_count($_SESSION['OFFICIEL']['INFOS_ETABLISSEMENT'], 'logo')) { $DB_ROW = DB_STRUCTURE_IMAGE::DB_recuperer_image(0, 'logo'); if (!empty($DB_ROW)) { $tab_etabl_logo = array(base64_decode($DB_ROW['image_contenu']), $DB_ROW['image_format'], $DB_ROW['image_largeur'], $DB_ROW['image_hauteur']); $logo_hauteur = 7; } } // Bloc des coordonnées de l'établissement $tab_etabl_coords = array(); if (mb_substr_count($_SESSION['OFFICIEL']['INFOS_ETABLISSEMENT'], 'denomination')) { $tab_etabl_coords['denomination'] = $_SESSION['ETABLISSEMENT']['DENOMINATION']; } if (mb_substr_count($_SESSION['OFFICIEL']['INFOS_ETABLISSEMENT'], 'adresse')) { if ($_SESSION['ETABLISSEMENT']['ADRESSE1']) { $tab_etabl_coords['adresse1'] = $_SESSION['ETABLISSEMENT']['ADRESSE1']; } if ($_SESSION['ETABLISSEMENT']['ADRESSE2']) {
} $image_format = $tab_extension_types[$image_type]; // stocker l'image dans la base DB_STRUCTURE_IMAGE::DB_modifier_image( 0 /*user_id*/ , 'logo' , 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*/ ); exit('<li><img src="'.URL_DIR_IMPORT.FileSystem::$file_saved_name.'" alt="Logo établissement" width="'.$width.'" height="'.$height.'" /><q class="supprimer" title="Supprimer cette image (aucune confirmation ne sera demandée)."></q></li>'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer un fichier image (logo de l'établissement) // //////////////////////////////////////////////////////////////////////////////////////////////////// if($action=='delete_logo') { DB_STRUCTURE_IMAGE::DB_supprimer_image( 0 /*user_id*/ , 'logo' ); exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Mettre à jour mois_bascule_annee_scolaire // //////////////////////////////////////////////////////////////////////////////////////////////////// if( $mois_bascule_annee_scolaire ) { $tab_parametres = array(); $tab_parametres['mois_bascule_annee_scolaire'] = $mois_bascule_annee_scolaire; DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres); // On modifie aussi la session $_SESSION['MOIS_BASCULE_ANNEE_SCOLAIRE'] = $mois_bascule_annee_scolaire; exit('ok');