From 31c3c378b14ffa752e22b62dbdc0e3b2c13df566 Mon Sep 17 00:00:00 2001 From: x2001corpet Date: Thu, 8 Jun 2006 10:24:00 +0000 Subject: [PATCH] annuaire xnet, tri par promo + suppression d'un exterieur rentre deux fois dans la table git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@308 839d8a87-29fc-0310-9880-83ba4fa771e5 --- htdocs.net/groupe/annuaire.php | 47 ++++++++++++++++++++++++++++---------- htdocs.net/groupe/membres-edit.php | 28 +++++++++++++++-------- templates/xnet/groupe/annuaire.tpl | 14 ++++++------ 3 files changed, 61 insertions(+), 28 deletions(-) diff --git a/htdocs.net/groupe/annuaire.php b/htdocs.net/groupe/annuaire.php index acec832..76a9946 100644 --- a/htdocs.net/groupe/annuaire.php +++ b/htdocs.net/groupe/annuaire.php @@ -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' ) diff --git a/htdocs.net/groupe/membres-edit.php b/htdocs.net/groupe/membres-edit.php index 8209b1a..c5c86f5 100644 --- a/htdocs.net/groupe/membres-edit.php +++ b/htdocs.net/groupe/membres-edit.php @@ -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') { @@ -158,7 +163,15 @@ $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); @@ -183,9 +196,6 @@ } } - $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 !"); } } diff --git a/templates/xnet/groupe/annuaire.tpl b/templates/xnet/groupe/annuaire.tpl index f5cf344..452a777 100644 --- a/templates/xnet/groupe/annuaire.tpl +++ b/templates/xnet/groupe/annuaire.tpl @@ -42,16 +42,16 @@ Fonctionnalit {/if}

-[tout] +[tout] {foreach from=$alphabet item=c} -[{$c}] +[{$c}] {/foreach}

- - + + {if $admin} @@ -60,7 +60,7 @@ Fonctionnalit {iterate from=$ann item=m} - + {if $admin} - - + + {/if} {/iterate} -- 2.1.4
Prénom NOMPromoPrénom NOMPromo InfosÉditer
{if $m.femme}•{/if}{$m.prenom} {$m.nom}{if $m.femme}•{/if}{$m.prenom} {$m.nom|strtoupper} {$m.promo} {if $m.x} @@ -72,8 +72,8 @@ Fonctionnalit {/if} Edition du profilSuppression de {$m.prenom} {$m.nom}Edition du profilSuppression de {$m.prenom} {$m.nom}