Can export X.net directory as a .csv file (Close #847)
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 27 Jun 2008 21:41:24 +0000 (23:41 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 27 Jun 2008 21:42:08 +0000 (23:42 +0200)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
htdocs/images/icons/page_excel.gif [new file with mode: 0644]
htdocs/images/icons/page_white_excel.gif [new file with mode: 0644]
modules/xnetgrp.php
templates/xnetgrp/annuaire-csv.tpl [new file with mode: 0644]
templates/xnetgrp/annuaire.tpl

diff --git a/htdocs/images/icons/page_excel.gif b/htdocs/images/icons/page_excel.gif
new file mode 100644 (file)
index 0000000..c424a63
Binary files /dev/null and b/htdocs/images/icons/page_excel.gif differ
diff --git a/htdocs/images/icons/page_white_excel.gif b/htdocs/images/icons/page_white_excel.gif
new file mode 100644 (file)
index 0000000..422293b
Binary files /dev/null and b/htdocs/images/icons/page_white_excel.gif differ
index b27831c..550e0a1 100644 (file)
@@ -82,6 +82,7 @@ class XnetGrpModule extends PLModule
             '%grp/forum'          => $this->make_hook('forum',     AUTH_MDP, 'groupmember'),
             '%grp/annuaire'       => $this->make_hook('annuaire',  AUTH_MDP, 'groupannu'),
             '%grp/annuaire/vcard' => $this->make_hook('vcard',     AUTH_MDP, 'groupmember:groupannu'),
+            '%grp/annuaire/csv'   => $this->make_hook('csv',       AUTH_MDP, 'groupmember:groupannu'),
             '%grp/trombi'         => $this->make_hook('trombi',    AUTH_MDP, 'groupannu'),
             '%grp/geoloc'         => $this->make_hook('geoloc',    AUTH_MDP, 'groupannu'),
             '%grp/subscribe'      => $this->make_hook('subscribe', AUTH_MDP),
@@ -473,6 +474,34 @@ class XnetGrpModule extends PLModule
         $vcard->do_page($page);
     }
 
+    function handler_csv(&$page, $filename = null)
+    {
+        global $globals;
+        if (is_null($filename)) {
+            $filename = $globals->asso('diminutif') . '.csv';
+        }
+        $ann = XDB::iterator(
+                  "SELECT  IF(m.origine='X',IF(u.nom_usage<>'', u.nom_usage, u.nom) ,m.nom) AS nom,
+                           IF(m.origine='X',u.prenom,m.prenom) AS prenom,
+                           IF(m.origine='X', u.promo, IF(m.origine='ext', 'extérieur', 'personne morale')) AS promo,
+                           IF(m.origine='X' AND u.perms != 'pending',CONCAT(a.alias, '@', {?}), m.email) AS email,
+                           IF(m.origine='X',FIND_IN_SET('femme', u.flags), m.sexe) AS femme,
+                           m.comm as comm
+                     FROM  groupex.membres AS m
+                LEFT JOIN  auth_user_md5   AS u ON ( u.user_id = m.uid )
+                LEFT JOIN  aliases         AS a ON ( a.id = m.uid AND a.type = 'a_vie' )
+                    WHERE  m.asso_id = {?}
+                           AND (m.origine != 'X' OR u.perms != 'pending' OR m.email IS NOT NULL)
+                 GROUP BY  m.uid
+                 ORDER BY  nom, prenom",
+                 $globals->mail->domain, $globals->asso('id'));
+        header('Content-Type: text/x-csv; charset=utf-8;');
+        header('Pragma: ');
+        header('Cache-Control: ');
+        $page->changeTpl('xnetgrp/annuaire-csv.tpl', NO_SKIN);
+        $page->assign('ann', $ann);
+    }
+
     function handler_subscribe(&$page, $u = null)
     {
         global $globals;
diff --git a/templates/xnetgrp/annuaire-csv.tpl b/templates/xnetgrp/annuaire-csv.tpl
new file mode 100644 (file)
index 0000000..30e6a7c
--- /dev/null
@@ -0,0 +1,30 @@
+{**************************************************************************}
+{*                                                                        *}
+{*  Copyright (C) 2003-2008 Polytechnique.org                             *}
+{*  http://opensource.polytechnique.org/                                  *}
+{*                                                                        *}
+{*  This program is free software, you can redistribute it and/or modify  *}
+{*  it under the terms of the GNU General Public License as published by  *}
+{*  the Free Software Foundation, either version 2 of the License; or     *}
+{*  (at your option) any later version.                                   *}
+{*                                                                        *}
+{*  This program is distributed in the hope that it will be useful,       *}
+{*  but WITHOUT ANY WARRANTY, without even the implied warranty of        *}
+{*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *}
+{*  GNU General Public License for more details.                          *}
+{*                                                                        *}
+{*  You should have received a copy of the GNU General Public License     *}
+{*  along with this program, if not; write to the Free Software           *}
+{*  Foundation, Inc.;                                                     *}
+{*  59 Temple Place, Suite 330; Boston, MA  02111-1307  USA               *}
+{*                                                                        *}
+{**************************************************************************}
+Nom,Prénom,Sexe,Promotion,Email,Commentaire
+{if $ann}
+{iterate from=$ann item=m}
+
+{$m.nom},{$m.prenom},{if $m.sexe}F{else}M{/if},{$m.promo},{$m.email},{$m.comm|replace:',':'\,'}
+
+{/iterate}
+{/if}
+{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index acb7244..552fb53 100644 (file)
@@ -42,6 +42,12 @@ Le groupe {$asso.nom} compte {$nb_tot} membres&nbsp;:
   </li>
   {/if}
   <li>
+    <a href="{$platal->ns}annuaire/csv/{$asso.diminutif}.csv">
+      {icon name=page_excel title="Fichier Excel"} 
+      Obtenir au format Excel
+    </a>
+  </li>
+  <li>
     <a href="{$platal->ns}annuaire/vcard/photos/{$asso.diminutif}.vcf">
       {icon name=vcard title="Carte de visite"} 
       Ajouter les membres à ton carnet d'adresse