| 1 | <?php |
| 2 | require 'xnet.inc.php'; |
| 3 | |
| 4 | define('NB_PER_PAGE', 25); |
| 5 | |
| 6 | if ($globals->asso('pub') == 'public') |
| 7 | new_group_page('xnet/groupe/annuaire.tpl'); |
| 8 | else |
| 9 | new_groupadmin_page('xnet/groupe/annuaire.tpl'); |
| 10 | |
| 11 | $page->assign('admin', may_update()); |
| 12 | |
| 13 | switch (Env::get('order')) { |
| 14 | case 'promo' : $group = 'promo'; $tri = 'promo_o DESC, nom, prenom'; break; |
| 15 | case 'promo_inv' : $group = 'promo'; $tri = 'promo_o, nom, prenom'; break; |
| 16 | case 'alpha_inv' : $group = 'initiale'; $tri = 'nom DESC, prenom DESC, promo'; break; |
| 17 | default : $group = 'initiale'; $tri = 'nom, prenom, promo'; |
| 18 | } |
| 19 | if ($group == 'initiale') |
| 20 | $res = $globals->xdb->iterRow( |
| 21 | 'SELECT UPPER(SUBSTRING(IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom), 1, 1)) as letter, COUNT(*) |
| 22 | FROM groupex.membres AS m |
| 23 | LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid ) |
| 24 | WHERE asso_id = {?} |
| 25 | GROUP BY letter |
| 26 | ORDER BY letter', $globals->asso('id')); |
| 27 | else |
| 28 | $res = $globals->xdb->iterRow( |
| 29 | 'SELECT IF(m.origine="X",u.promo,"extérieur") as promo, COUNT(*), IF(m.origine="X",u.promo,"") as promo_o |
| 30 | FROM groupex.membres AS m |
| 31 | LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid ) |
| 32 | WHERE asso_id = {?} |
| 33 | GROUP BY promo |
| 34 | ORDER BY promo_o DESC', $globals->asso('id')); |
| 35 | |
| 36 | $alphabet = array(); |
| 37 | $nb_tot = 0; |
| 38 | while (list($char, $nb) = $res->next()) { |
| 39 | $alphabet[] = $char; |
| 40 | $nb_tot += $nb; |
| 41 | if (Env::has($group) && $char == strtoupper(Env::get($group))) { |
| 42 | $tot = $nb; |
| 43 | } |
| 44 | } |
| 45 | $page->assign('group', $group); |
| 46 | $page->assign('request_group', Env::get($group)); |
| 47 | $page->assign('alphabet', $alphabet); |
| 48 | $page->assign('nb_tot', $nb_tot); |
| 49 | |
| 50 | $ofs = Env::getInt('offset'); |
| 51 | $tot = Env::get($group) ? $tot : $nb_tot; |
| 52 | $nbp = intval(($tot-1)/NB_PER_PAGE); |
| 53 | $links = array(); |
| 54 | if ($ofs) { |
| 55 | $links['précédent'] = $ofs-1; |
| 56 | } |
| 57 | for ($i = 0; $i <= $nbp; $i++) { |
| 58 | $links[(string)($i+1)] = $i; |
| 59 | } |
| 60 | if ($ofs < $nbp) { |
| 61 | $links['suivant'] = $ofs+1; |
| 62 | } |
| 63 | if (count($links)>1) { |
| 64 | $page->assign('links', $links); |
| 65 | } |
| 66 | |
| 67 | $ini = ''; |
| 68 | if (Env::has('initiale')) |
| 69 | $ini = 'AND IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom) LIKE "'.addslashes(Env::get('initiale')).'%"'; |
| 70 | elseif (Env::has('promo')) |
| 71 | $ini = 'AND IF(m.origine="X",u.promo,"extérieur") = "'.addslashes(Env::get('promo')).'"'; |
| 72 | $ann = $globals->xdb->iterator( |
| 73 | "SELECT IF(m.origine='X',IF(u.nom_usage<>'', u.nom_usage, u.nom) ,m.nom) AS nom, |
| 74 | IF(m.origine='X',u.prenom,m.prenom) AS prenom, |
| 75 | IF(m.origine='X',u.promo,'extérieur') AS promo, |
| 76 | IF(m.origine='X',u.promo,'') AS promo_o, |
| 77 | IF(m.origine='X',a.alias,m.email) AS email, |
| 78 | IF(m.origine='X',FIND_IN_SET('femme', u.flags),0) AS femme, |
| 79 | m.perms='admin' AS admin, |
| 80 | m.origine='X' AS x, |
| 81 | m.uid |
| 82 | FROM groupex.membres AS m |
| 83 | LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid ) |
| 84 | LEFT JOIN aliases AS a ON ( a.id = m.uid AND a.type='a_vie' ) |
| 85 | WHERE m.asso_id = {?} $ini |
| 86 | ORDER BY $tri |
| 87 | LIMIT {?},{?}", $globals->asso('id'), $ofs*NB_PER_PAGE, NB_PER_PAGE); |
| 88 | |
| 89 | |
| 90 | $page->assign('ann', $ann); |
| 91 | |
| 92 | $page->run(); |
| 93 | |
| 94 | ?> |