annuaire xnet, tri par promo + suppression d'un exterieur rentre deux fois dans la...
authorx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Thu, 8 Jun 2006 10:24:00 +0000 (10:24 +0000)
committerx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Thu, 8 Jun 2006 10:24:00 +0000 (10:24 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@308 839d8a87-29fc-0310-9880-83ba4fa771e5

htdocs.net/groupe/annuaire.php
htdocs.net/groupe/membres-edit.php
templates/xnet/groupe/annuaire.tpl

index acec832..76a9946 100644 (file)
@@ -10,28 +10,45 @@ else
 
 $page->assign('admin', may_update());
 
-$tri = (Env::get('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
-$res = $globals->xdb->iterRow(
-            'SELECT  UPPER(SUBSTRING(IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom), 1, 1)) as letter, COUNT(*)
-               FROM  groupex.membres AS m
-          LEFT JOIN  auth_user_md5   AS u ON ( u.user_id = m.uid )
-              WHERE  asso_id = {?}
-           GROUP BY  letter
-           ORDER BY  letter', $globals->asso('id'));
+switch (Env::get('order')) {
+    case 'promo'        : $group = 'promo'; $tri = 'promo_o DESC, nom, prenom'; break;
+    case 'promo_inv'    : $group = 'promo'; $tri = 'promo_o, nom, prenom'; break;
+    case 'alpha_inv'    : $group = 'initiale'; $tri = 'nom DESC, prenom DESC, promo'; break;
+    default             : $group = 'initiale'; $tri = 'nom, prenom, promo';
+}
+if ($group == 'initiale')
+    $res = $globals->xdb->iterRow(
+                'SELECT  UPPER(SUBSTRING(IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom), 1, 1)) as letter, COUNT(*)
+                   FROM  groupex.membres AS m
+              LEFT JOIN  auth_user_md5   AS u ON ( u.user_id = m.uid )
+                  WHERE  asso_id = {?}
+               GROUP BY  letter
+               ORDER BY  letter', $globals->asso('id'));
+else
+    $res = $globals->xdb->iterRow(
+                'SELECT  IF(m.origine="X",u.promo,"extérieur") as promo, COUNT(*), IF(m.origine="X",u.promo,"") as promo_o
+                   FROM  groupex.membres AS m
+              LEFT JOIN  auth_user_md5   AS u ON ( u.user_id = m.uid )
+                  WHERE  asso_id = {?}
+               GROUP BY  promo
+               ORDER BY  promo_o DESC', $globals->asso('id'));
+
 $alphabet = array();
 $nb_tot = 0;
 while (list($char, $nb) = $res->next()) {
     $alphabet[] = $char;
     $nb_tot += $nb;
-    if (Env::has('initiale') && $char == strtoupper(Env::get('initiale'))) {
+    if (Env::has($group) && $char == strtoupper(Env::get($group))) {
         $tot = $nb;
     }
 }
+$page->assign('group', $group);
+$page->assign('request_group', Env::get($group));
 $page->assign('alphabet', $alphabet);
 $page->assign('nb_tot',   $nb_tot);
 
 $ofs   = Env::getInt('offset');
-$tot   = Env::get('initiale') ? $tot : $nb_tot;
+$tot   = Env::get($group) ? $tot : $nb_tot;
 $nbp   = intval(($tot-1)/NB_PER_PAGE);
 $links = array();
 if ($ofs) {
@@ -47,15 +64,21 @@ if (count($links)>1) {
     $page->assign('links', $links);
 }
 
-$ini = Env::has('initiale') ? 'AND IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom) LIKE "'.addslashes(Env::get('initiale')).'%"' : '';
+$ini = '';
+if (Env::has('initiale'))
+    $ini = 'AND IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom) LIKE "'.addslashes(Env::get('initiale')).'%"';
+elseif (Env::has('promo'))
+    $ini = 'AND IF(m.origine="X",u.promo,"extérieur") = "'.addslashes(Env::get('promo')).'"';
 $ann = $globals->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,'extérieur') AS promo,
+                   IF(m.origine='X',u.promo,'') AS promo_o,
                    IF(m.origine='X',a.alias,m.email) AS email,
                    IF(m.origine='X',FIND_IN_SET('femme', u.flags),0) AS femme,
                    m.perms='admin' AS admin,
-                   m.origine='X' AS x
+                   m.origine='X' AS x,
+                   m.uid
              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' )
index 8209b1a..c5c86f5 100644 (file)
@@ -5,17 +5,22 @@
     function get_infos($email)
     {
         global $globals;
+        // look for uid instead of email if numeric
+        $field = is_numeric($email)?'uid':'email';
 
-        $email = strtolower($email);
-        if (strpos($email, '@') === false) {
-            $email .= '@m4x.org';
+        if ($field == 'email') {
+            $email = strtolower($email);
+            if (strpos($email, '@') === false) {
+                $email .= '@m4x.org';
+            }
+            list($mbox,$dom) = explode('@', $email);
         }
-        list($mbox,$dom) = explode('@', $email);
 
         $res = $globals->xdb->query(
                 "SELECT  uid, nom, prenom, email, email AS email2, perms='admin', origine
                    FROM  groupex.membres
-                  WHERE  email = {?} AND asso_id = {?}", $email, $globals->asso('id'));
+                  WHERE  $field = {?} AND asso_id = {?}", $email, $globals->asso('id'));
+
         if ($res->numRows()) {
             return $res->fetchOneAssoc();
         } elseif ($dom == 'polytechnique.org' || $dom == 'm4x.org') {
         $page->assign('user', $user);
 
         if (Post::has('confirm')) {
-            if ($domain = $globals->asso('mail_domain')) {
+
+            $globals->xdb->execute(
+                    "DELETE FROM  groupex.membres WHERE uid={?} AND asso_id={?}",
+                    $user['uid'], $globals->asso('id'));
+
+            // don't unsubscribe email from list if other user use same email
+            $user_same_email = get_infos($user['email']);
+            
+            if (($domain = $globals->asso('mail_domain')) && empty($user_same_email)) {
             
                 require 'lists.inc.php';
                 $client =& lists_xmlrpc(Session::getInt('uid'), Session::get('password'), $domain);
                 }
             }
 
-            $globals->xdb->execute(
-                    "DELETE FROM  groupex.membres WHERE uid={?} AND asso_id={?}",
-                    $user['uid'], $globals->asso('id'));
             $page->trig("{$user['prenom']} {$user['nom']} a été retiré du groupe !");
         }
     }
index f5cf344..452a777 100644 (file)
@@ -42,16 +42,16 @@ Fonctionnalit
 {/if}
 
 <p class="center">
-[<a href="{$smarty.server.PHP_SELF}" {if !$smarty.request.initiale}class="erreur"{/if}>tout</a>]
+[<a href="{$smarty.server.PHP_SELF}" {if !$request_group}class="erreur"{/if}>tout</a>]
 {foreach from=$alphabet item=c}
-[<a href="?initiale={$c}"{if $smarty.request.initiale eq $c} class="erreur"{/if}>{$c}</a>]
+[<a href="?{$group}={$c}&amp;order={$smarty.request.order}"{if $request_group eq $c} class="erreur"{/if}>{$c}</a>]
 {/foreach}
 </p>
 
 <table summary="membres du groupe" class="{if $admin}large{else}tiny{/if}">
   <tr>
-    <th>Prénom NOM</th>
-    <th>Promo</th>
+    <th><a href="?order=alpha{if $smarty.request.order neq "alpha_inv"}_inv{/if}{if $request_group and $group eq 'initiale'}&amp;initiale={$request_group}{/if}">Prénom NOM</a></th>
+    <th><a href="?order=promo{if $smarty.request.order eq "promo"}_inv{/if}{if $request_group and $group eq 'promo'}&amp;promo={$request_group}{/if}">Promo</a></th>
     <th>Infos</th>
     {if $admin}
     <th>Éditer</th>
@@ -60,7 +60,7 @@ Fonctionnalit
   </tr>
   {iterate from=$ann item=m}
   <tr {if $m.admin}style="background:#d0c198;"{/if}>
-    <td>{if $m.femme}&bull;{/if}{$m.prenom} {$m.nom}</td>
+    <td>{if $m.femme}&bull;{/if}{$m.prenom} {$m.nom|strtoupper}</td>
     <td>{$m.promo}</td>
     <td>
       {if $m.x}
@@ -72,8 +72,8 @@ Fonctionnalit
       {/if}
     </td>
     {if $admin}
-    <td><a href="membres-edit.php?edit={$m.email}"><img src="{rel}/images/profil.png" alt="Edition du profil" /></a></td>
-    <td><a href="membres-edit.php?del={$m.email}"><img src="{rel}/images/del.png" alt="Suppression de {$m.prenom} {$m.nom}" /></a></td>
+    <td><a href="membres-edit.php?edit={if $m.x}{$m.email}{else}{$m.uid}{/if}"><img src="{rel}/images/profil.png" alt="Edition du profil" /></a></td>
+    <td><a href="membres-edit.php?del={if $m.x}{$m.email}{else}{$m.uid}{/if}"><img src="{rel}/images/del.png" alt="Suppression de {$m.prenom} {$m.nom}" /></a></td>
     {/if}
   </tr>
   {/iterate}