From: x2000habouzit Date: Mon, 19 Jul 2004 15:46:00 +0000 (+0000) Subject: mescontacts_pdf X-Git-Tag: xorg/old~1787 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=dd9e9f38d456c2b2f4a744cd40ed7a72afb7005b;p=platal.git mescontacts_pdf --- diff --git a/etat_migration b/etat_migration index 1eb1bcf..f4a5aa6 100644 --- a/etat_migration +++ b/etat_migration @@ -27,7 +27,6 @@ Etat | Ancien nom | Nouveau nom ; | tmpPWD.php | ------+-[ bordel ]--------------------------------+---------------- ; | fiche_referent.php | -; | mescontacts_pdf.php | ; | recherche.php | ; | trombino.php | ; | trombipromo.php | @@ -157,6 +156,7 @@ xx | inscrire.php | xx | login.php | - xx | maj.php | xx | marketing.php | marketing/public.php +xx | mescontacts_pdf.php | xx | mescontacts.php | - xx | motdepassemd5.php | - xx | nbpromo2.php | stats/nb_by_promo.php diff --git a/htdocs/mescontacts_pdf.php b/htdocs/mescontacts_pdf.php new file mode 100644 index 0000000..990c17e --- /dev/null +++ b/htdocs/mescontacts_pdf.php @@ -0,0 +1,126 @@ +db->query("SELECT * FROM auth_user_md5 as a, contacts as c" + ." WHERE a.user_id = c.contact AND c.uid = {$_SESSION['uid']} " + ." ORDER BY a.promo, a.nom, a.prenom" + ); +} else { + $req = $globals->db->query("SELECT * FROM auth_user_md5 as a, contacts as c " + ." WHERE a.user_id = c.contact AND c.uid = {$_SESSION['uid']} " + ." ORDER BY a.nom, a.prenom, a.promo" + ); +} + +// génération des en-têtes +$texsrc = contacts_headers(); + +// on traite ensuite les contacts un par un +while ($myrow = mysql_fetch_array($req)) { + + /* affichage de l'identité */ + ereg( "[0-9]{2}([0-9]{2})-([0-9]{1,2})-([0-9]{1,2})", $myrow["date"], $regs ); + $texsrc .= contact_tbl_hdr($myrow["prenom"], $myrow["nom"], $myrow["epouse"], $myrow["promo"], "$regs[3].$regs[2].$regs[1]"); + + + /* affichage de l'école d'appli et de la post-appli */ + $tmpreq=$globals->db->query( + "SELECT applis_def.text,applis_def.url,applis_ins.type,applis_ins.ordre + FROM applis_ins + INNER JOIN applis_def ON applis_def.id=applis_ins.aid + WHERE uid=".$myrow["user_id"]." ORDER by ordre" + ); + while (list($rapp_txt,$rapp_url,$rapp_type,$rapp_ordre)=mysql_fetch_row($tmpreq)) { + if ($rapp_ordre==0) + $texsrc .= contact_tbl_entry("Appli", applis_fmt($rapp_type,$rapp_txt,"")); + if ($rapp_ordre==1) + $texsrc .= contact_tbl_entry("Post-appli", applis_fmt($rapp_type,$rapp_txt,"")); + } + mysql_free_result($tmpreq); + + /* affichage des différentes adresses persos */ + $i = 0; + $tmpreq = $globals->db->query( + "SELECT adr1,adr2,adr3,cp,ville,gp.pays,gr.name,tel,fax + FROM adresses AS adr + LEFT JOIN geoloc_pays AS gp ON(adr.pays=gp.a2) + LEFT JOIN geoloc_region AS gr ON(adr.pays=gr.a2 AND adr.region=gr.region) + WHERE adr.uid = ".$myrow["user_id"] + ); + while (list($adr1,$adr2,$adr3,$cp,$ville,$pays,$region,$tel,$fax) + = mysql_fetch_row($tmpreq)) { + $i++; + $ch_adr = ""; + if (! empty($adr1)) $ch_adr .= "\n$adr1"; + if (! empty($adr2)) $ch_adr .= "\n$adr2"; + if (! empty($adr3)) $ch_adr .= "\n$adr3"; + if (! empty($cp) || ! empty($ville)) $ch_adr .= "\n$cp $ville"; + if (! empty($region)) $ch_adr .= "\n$region, "; + else if (! empty($pays)) $ch_adr .= "\n"; + if (! empty($pays)) $ch_adr .= "$pays"; + $texsrc .= contact_tbl_entry("Adresse $i", substr($ch_adr, 1)); + if (! empty($tel)) $texsrc .= contact_tbl_entry("Téléphone $i", $tel); + if (! empty($fax)) $texsrc .= contact_tbl_entry("Fax $i", $fax); + + } + mysql_free_result($tmpreq); + + /* affichage du téléphone mobile */ + if ($myrow["mobile"]) + $texsrc .= contact_tbl_entry("Mobile", $myrow["mobile"]); + + /* affichage des infos professionnelles (poste, adresse, tel) */ + $res_pro = $globals->db->query( + "SELECT entreprise, s.label, ss.label, f.fonction_fr, poste, + adr1, adr2, adr3, cp, ville, gp.pays, gr.name, tel, fax + FROM entreprises AS e + LEFT JOIN emploi_secteur AS s ON e.secteur = s.id + LEFT JOIN emploi_ss_secteur AS ss + ON (e.secteur = ss.secteur AND e.ss_secteur = ss.id) + LEFT JOIN fonctions_def AS f ON f.id = e.fonction + INNER JOIN geoloc_pays AS gp on gp.a2 = e.pays + INNER JOIN geoloc_region AS gr + ON (gr.a2 = e.pays AND gr.region = e.region) + WHERE e.uid = ".$myrow["user_id"] + ); + while (list($entreprise, $secteur, $ss_secteur, $fonction, $poste, $adr1, $adr2, $adr3, $cp, $ville, $pays, $region, $tel, $fax) = mysql_fetch_row($res_pro)) { + if (!empty($entreprise)) + $texsrc .= contact_tbl_entry("Entreprise", $entreprise . ($secteur ? " ($secteur - $ss_secteur)" : "")); + + if (!empty($poste)) + $texsrc .= contact_tbl_entry("Poste / Fonction", $poste." / ".(($fonction) ? $fonction : "-")); + $ch_adr = ""; + if (! empty($adr1)) $ch_adr .= "\n$adr1"; + if (! empty($adr2)) $ch_adr .= "\n$adr2"; + if (! empty($adr3)) $ch_adr .= "\n$adr3"; + if (! empty($cp) || ! empty($ville)) $ch_adr .= "\n$cp $ville"; + if (! empty($region)) $ch_adr .= "\n$region, "; + else if (! empty($pays)) $ch_adr .= "\n"; + if (! empty($pays)) $ch_adr .= "$pays"; + $texsrc .= contact_tbl_entry("Adresse pro.", substr($ch_adr, 1)); + if (! empty($tel)) $texsrc .= contact_tbl_entry("Téléphone pro.", $tel); + if (! empty($fax)) $texsrc .= contact_tbl_entry("Fax pro.", $fax); + } + + /* fin du contact */ + $texsrc .= contact_tbl_ftr(); + +} + +// enfin on rajoute le footer +$texsrc .= contacts_footer(); +mysql_free_result($req); + +// puis on convertit le fichier tex en pdf ! +tex_to_pdf($texsrc); + +?> diff --git a/include/applis.func.inc.php b/include/applis.func.inc.php index cef3e1c..e7c0eff 100644 --- a/include/applis.func.inc.php +++ b/include/applis.func.inc.php @@ -54,8 +54,7 @@ $page->register_function('applis_type_all','applis_type_all'); /** formatte une ecole d'appli pour l'affichage */ -function applis_fmt($params, &$smarty) { - extract($params); +function applis_fmt($type, $text, $url) { $txt=""; if (($type!="Ingénieur")&&($type!="Diplôme")) $txt .= $type; @@ -68,6 +67,10 @@ function applis_fmt($params, &$smarty) { } return $txt; } -$page->register_function('applis_fmt','applis_fmt'); +function _applis_fmt($params, &$smarty) { + extract($params); + return applis_fmt($type, $text, $url); +} +$page->register_function('applis_fmt','_applis_fmt'); ?> diff --git a/include/texify.inc.php b/include/texify.inc.php new file mode 100644 index 0000000..035d9b6 --- /dev/null +++ b/include/texify.inc.php @@ -0,0 +1,163 @@ +/dev/null"); + + // sortie en PDF + header("Pragma: "); + header("Cache-Control: "); + header("Content-type: application/pdf"); + // force le nom du fichier final +# header("Content-Disposition: attachment; filename=mes_contacts.pdf"); + + readfile("$pdf_tmp_dir/contacts.pdf", "r"); + + // le nétoyage du répertoire est fait par la fonction clean_tmp_dir + // exécutée à la fin du script grâce à register_shutdown_function. +} + +/** Hearders LaTeX pour la feuille de contacts + * @return en têtes tex pour la feuille de contacts (imprimercontacts.php) + */ +function contacts_headers() { + return "\\documentclass[twocolumn,a4paper,10pt]{article}\n" + . "\\usepackage[francais]{babel}\n" + . "\\usepackage[latin1]{inputenc}\n" + . "\\usepackage[left=1.5cm,right=1.5cm,top=1cm,bottom=1cm]{geometry}\n" + . "\\usepackage{tabularx,float}\n" + . "\n" + . "\\makeatletter\n" + . "\\renewcommand{\\@oddhead}{\\small\\hfill " + ." {\\bf\\Large Mes contacts sur Polytechnique.org\$^\\ast\$}" + . "\\renewcommand{\\@evenhead}{\\@oddhead}\n" + ." \\hfill}\n" + . "\\renewcommand{\\@oddfoot}{\\small\\hfill " + ." {\\bf \$^\\ast\$ Informations limitées à un usage strictement personnel et non commercial}" + ." \\hfill}\n" + . "\\renewcommand{\\@evenfoot}{\\@oddfoot}\n" + . "\\makeatother\n" + . "\\newcolumntype{L}{@{\\hspace{1pt}}>{\\small\\sffamily\\bfseries}l}\n" + . "\\newcolumntype{T}{>{\\center\\bfseries}p{\\linewidth}}\n" + . "\\renewcommand{\\tabularxcolumn}[1]{>{\\small\\raggedright\\arraybackslash}p{#1}@{\\hspace{1pt}}}\n" + . "\n" + . "\\begin{document}\n" + . "\t\\floatstyle{plain}\n" + . "\t\\newfloat{contact}{thp}{lop}\n" + . "\t\\floatname{contact}{}\n" + . "\n"; +} + +/** Footers LaTeX pour la feuille de contacts + * @return pied de page tex pour la feuille de contacts (imprimercontacts.php) + */ +function contacts_footer() { + return "\n" . "\\end{document}\n"; +} + +/** préfixe de tableau de contact + * @return Préfixe de construction d'une fiche. Contient l'en tête avec le nom. + * @param $prenom prénom du contact + * @param $nom nom du contact + * @param $epouse nom d'épouse + * @param $promo promo + * @param $maj date de dernière mise à jour de la fiche + */ +function contact_tbl_hdr($prenom, $nom, $epouse, $promo, $maj) { + return "\t\\noindent\\parbox{\\linewidth}{\n" + . "\t\t\\begin{tabularx}{\\linewidth}{LX}\n" + . "\t\t\t\\multicolumn{2}{@{}T@{}}{\\noindent\\rule{\\linewidth}{1pt}\n\n" + . "\\vspace{-2pt}$prenom $nom" . ($epouse ? " épouse $epouse" : "") . " ($promo) {\small $maj}}\\\\\n" + . "\t\t\t\\hline\n"; +} + +/** suffixe de tableau de contact + * @return suffixe de construction d'une fiche. + */ +function contact_tbl_ftr() { + return "\t\t\\end{tabularx}\n" + . "\t}\n" + . "\t\\vspace{-1.5em}\n\n"; +} + +/** Fonction qui remplace les caractères particuliers + * remplace les # par \# par exemple + * @param $texte le texte à stripper + * @return le texte modifié + */ +function tex_strip($texte) { + $tmp = str_replace("\\", "$\\backslash$", $texte); + $tmp = str_replace("#", "\\#", $tmp); + $tmp = str_replace("$", "\\$", $tmp); + $tmp = str_replace("\\$\\backslash\\$", "$\\backslash$", $texte); + $tmp = str_replace("%", "\\%", $tmp); + $tmp = str_replace("&", "\\&", $tmp); + $tmp = str_replace("_", "\\_", $tmp); + $tmp = str_replace("^", "\\^{}", $tmp); + return $tmp; +} + +/** Génération d'un nouvel item + * @return code TeX pour la création d'un nouveau titre de ligne de tableau + * @param $itemname label de la nouvelle ligne + */ +function contact_tbl_item($itemname) { + return "\t\t\t" . tex_strip($itemname) . "\n"; +} + +/** Génération d'un contenu + * @return code TeX pour l'insertion d'une nouvelle ligne de contenu. + * @param $text le-dit contenu, chaque '\n' est réinterprété. + */ +function contact_tbl_row($text) { + $temp = split("\n",tex_strip($text)); + return "\t\t\t\t&" + . join("\\\\\n\t\t\t&", $temp) + . "\\\\\n"; +} + +/** Génération d'un item + contenu + * @return code TeX pour l'insertion d'une nouvelle ligne. + * @param $itemname label de la nouvelle ligne + * @param $text le-dit contenu, chaque '\n' est réinterprété. + */ +function contact_tbl_entry($itemname, $text) { + $temp = split("\n",tex_strip($text)); + return "\t\t\t" . tex_strip($itemname) . "\n" + . "\t\t\t\t&" + . join("\\\\\n\t\t\t&", $temp) + . "\\\\\n"; +} + +?>