vcards
authorx2000habouzit <x2000habouzit>
Tue, 27 Jan 2004 13:41:41 +0000 (13:41 +0000)
committerx2000habouzit <x2000habouzit>
Tue, 27 Jan 2004 13:41:41 +0000 (13:41 +0000)
etat_migration
htdocs/vcard.php [new file with mode: 0644]
templates/vcard.tpl [new file with mode: 0644]

index 507b6ef..0a8778a 100644 (file)
@@ -173,7 +173,6 @@ Etat  | Ancien nom                                                            | Nouveau nom
          | trezo/trezo.inc.php                                           | 
          | trombino.php                                                          | 
          | trombipromo.php                                                       | 
-         | vcard.php                                                             | 
          | x.php                                                                         | 
 ------+-------------------------------------------+----------------
 xx       | AccesPermanentOff.php                                         | cookie_off.php
@@ -188,4 +187,5 @@ xx    | login.php                                                             | -
 xx       | motdepassemd5.php                                             | -
 xx       | preferences.php                                                       | -
 xx       | skins.php                                                             | -
+xx       | vcard.php                                                             | -
 ------+-------------------------------------------+----------------
diff --git a/htdocs/vcard.php b/htdocs/vcard.php
new file mode 100644 (file)
index 0000000..30a7b6e
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+require("auto.prepend.inc.php");
+require("Smarty.class.php");
+
+function quoted_printable_encode($input, $line_max = 76) {
+    $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
+    $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
+    $eol = "\r\n";
+    $linebreak = "\n";
+    $escape = "=";
+    $output = "";
+
+    for ($j=0;$j<count($lines);$j++) {
+        $line = $lines[$j];
+        $linlen = strlen($line);
+        $newline = "";
+        for($i = 0; $i < $linlen; $i++) {
+            $c = substr($line, $i, 1);
+            $dec = ord($c);
+            if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only
+                $c = "=20";
+            } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required
+                $h2 = floor($dec/16); $h1 = floor($dec%16);
+                $c = $escape.$hex["$h2"].$hex["$h1"];
+            }
+            if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
+                $output .= $newline.$escape."\n"; // soft line break; " =\r\n" is okay
+                $newline = "    ";
+            }
+            $newline .= $c;
+        } // end of for
+        $output .= $newline;
+        if ($j<count($lines)-1) $output .= $linebreak;
+    }
+    return trim($output);
+}
+
+function format_adr($params, &$smarty) {
+    // $adr1, $adr2, $adr3, $cp, $ville, $region, $pays
+    extract($params['adr']);
+    $res = ";;";
+    if (! empty($adr1)) $res .= "$adr1\n";
+    if (! empty($adr2)) $res .= "$adr2\n";
+    if (! empty($adr3)) $res .= "$adr3\n";
+    if (! empty($adr1) || ! empty($adr2) || ! empty($adr3))
+        $res = substr($res, 0, -1);
+    $res .= ";";
+    if (! empty($ville)) $res .= "$ville;"; else $res .= ";";
+    if (! empty($region)) $res .= "$region;"; else $res .= ";";
+    if (! empty($cp)) $res .= "$cp;"; else $res .= ";";
+    if (! empty($pays)) $res .= "$pays";
+    return quoted_printable_encode($res);
+}
+
+
+$page = new smarty();
+$page->template_dir = $globals->spoolroot . "/templates/";
+$page->compile_dir  = $globals->spoolroot . "/templates_c/";
+$page->plugins_dir[]= $globals->spoolroot . "/plugins/";
+$page->cache_dir    = $globals->spoolroot . "/cache/";
+$page->compile_check = true;
+$page->caching = false;
+
+$page->register_modifier('qp_enc', 'quoted_printable_encode');
+$page->register_function('format_adr', 'format_adr');
+
+$myquery = 
+    "SELECT prenom, nom, epouse, username, mobile, web, libre, promo, alias, user_id
+    FROM auth_user_md5 AS a
+    WHERE username='{$_REQUEST['x']}'";
+    $result=mysql_query($myquery);
+if (mysql_num_rows($result)!=1) {
+    echo 'erreur';
+    exit;
+}
+$vcard = mysql_fetch_assoc($result);
+$page->assign_by_ref('vcard', $vcard);
+mysql_free_result($result);
+
+$adr = mysql_query(
+        "SELECT statut,adr1,adr2,adr3,cp,ville,gp.pays,gr.name,tel,fax,
+        FIND_IN_SET('courrier', a.statut) AS courrier
+        FROM adresses as a
+        LEFT JOIN geoloc_pays AS gp ON(a.pays = gp.a2)
+        LEFT JOIN geoloc_region AS gr
+        ON(a.pays = gr.a2 AND a.region = gr.region)
+        WHERE uid = {$vcard['user_id']}
+        ORDER BY FIND_IN_SET('active', a.statut),
+        NOT FIND_IN_SET('res-secondaire', a.statut)"
+);
+$home = Array();
+while($home[] = mysql_fetch_assoc($adr));
+array_pop($home);
+mysql_free_result($adr);
+$page->assign_by_ref('home', $home);
+
+
+$adr = mysql_query(
+        "SELECT adr1,adr2,adr3,cp,ville,gp.pays,gr.name,tel,fax,poste,entreprise,f.label as fonction
+        FROM entreprises as e
+        LEFT JOIN emploi_naf AS f ON(e.fonction = f.id)
+        LEFT JOIN geoloc_pays AS gp ON(e.pays = gp.a2)
+        LEFT JOIN geoloc_region AS gr
+        ON(e.pays = gr.a2 AND e.region = gr.region)
+        WHERE uid = {$vcard['user_id']}"
+);
+if(mysql_num_rows($adr))
+    $work = mysql_fetch_assoc($adr);
+mysql_free_result($adr);
+$page->assign_by_ref('work', $work);
+
+
+header("Pragma: ");
+header("Cache-Control: ");
+header("Content-type: text/x-vcard\n");
+header("Content-Transfer-Encoding: Quoted-Printable\n");
+
+$page->display('vcard.tpl');
+?>
diff --git a/templates/vcard.tpl b/templates/vcard.tpl
new file mode 100644 (file)
index 0000000..7be1c00
--- /dev/null
@@ -0,0 +1,52 @@
+{* $Id: vcard.tpl,v 1.1 2004-01-27 13:41:41 x2000habouzit Exp $ *}
+BEGIN:VCARD
+VERSION:3.0
+{if $vcard.epouse}
+FN;ENCODING=QUOTED-PRINTABLE:{"`$vcard.prenom` `$vcard.epouse` (`$vcard.nom`)"|qp_enc}
+{else}
+FN;ENCODING=QUOTED-PRINTABLE:{"`$vcard.prenom` `$vcard.nom`"|qp_enc}
+{/if}
+N;ENCODING=QUOTED-PRINTABLE:{$vcard.nom|qp_enc};{$vcard.prenom|qp_enc};{$vcard.epouse|qp_enc};;
+EMAIL;TYPE=internet:{$vcard.username}@polytechnique.org
+{if $vcard.alias}
+EMAIL;TYPE=internet:{$vcard.alias}@polytechnique.org
+{/if}
+{if $vcard.mobile}
+TEL;TYPE=cell;ENCODING=QUOTED-PRINTABLE:{$vcard.mobile|qp_enc}
+{/if}
+{if $work}
+{if $work.entreprise}
+ORG;ENCODING=QUOTED-PRINTABLE:{$work.entreprise|qp_enc}
+{/if}
+{if $work.poste}
+TITLE;ENCODING=QUOTED-PRINTABLE:{$vcard.poste|qp_enc}
+{/if}
+{if $work.fonction}
+ROLE;ENCODING=QUOTED-PRINTABLE:{$work.fonction|qp_enc}
+{/if}
+{if $work.tel}
+TEL;TYPE=work;ENCODING=QUOTED-PRINTABLE:{$work.tel|qp_enc}
+{/if}
+{if $work.fax}
+FAX;TYPE=work;ENCODING=QUOTED-PRINTABLE:{$work.fax|qp_enc}
+{/if}
+ADR;TYPE=work;ENCODING=QUOTED-PRINTABLE:{format_adr adr=$work}
+{/if}
+{foreach item=adr from=$home}
+{if $adr.tel}
+TEL;TYPE=home;ENCODING=QUOTED-PRINTABLE:{$adr.tel|qp_enc}
+{/if}
+{if $adr.fax}
+FAX;TYPE=home;ENCODING=QUOTED-PRINTABLE:{$adr.fax|qp_enc}
+{/if}
+ADR;TYPE=home{if $adr.courier},postal{/if};ENCODING=QUOTED-PRINTABLE:{format_adr adr=$adr}
+{/foreach}
+{if $vcard.web}
+URL;ENCODING=QUOTED-PRINTABLE:{$vcard.web|qp_enc}
+{/if}
+NOTE;ENCODING=QUOTED-PRINTABLE:{"(X`$vcard.promo`)\n`$vcard.libre`"|qp_enc}
+SORT-STRING;ENCODING=QUOTED-PRINTABLE:{$vcard.nom|qp_enc}
+REV:{$smarty.now|date_format:"%Y-%m-%dT%TZ"}
+END:VCARD
+
+{* vim:set et sw=2 sts=2 sws=2: *}