From f6d7a2df40acc6892fa79bbf35939276b8810728 Mon Sep 17 00:00:00 2001 From: Florent Bruneau Date: Sun, 1 Feb 2009 16:02:29 +0100 Subject: [PATCH] Xnet group's directory rewritten (kill a lot of code). Signed-off-by: Florent Bruneau --- classes/user.php | 25 ++++++++-- modules/xnetgrp.php | 111 ++++++----------------------------------- templates/xnetgrp/annuaire.tpl | 63 ++++++++++------------- 3 files changed, 63 insertions(+), 136 deletions(-) diff --git a/classes/user.php b/classes/user.php index bd466b4..0e28f2c 100644 --- a/classes/user.php +++ b/classes/user.php @@ -139,7 +139,7 @@ class User extends PlUser throw new UserNotFoundException($res->fetchColumn(1)); } - protected static function loadMainFieldsFromUIDs(array $uids, $sorted = null) + protected static function loadMainFieldsFromUIDs(array $uids, $sorted = null, $count = null, $offset = null) { global $globals; $joins = ''; @@ -151,8 +151,10 @@ class User extends PlUser $with_pd = false; foreach (explode(',', $sorted) as $part) { $desc = ($part[0] == '-'); + echo $part . '=' . $desc; if ($desc) { - $part = substr($desc, 1); + $part = substr($part, 1); + echo $part; } switch ($part) { case 'promo': @@ -166,6 +168,11 @@ class User extends PlUser case 'display_name': $part = 'a.display_name'; break; + case 'directory_name': + $part = 'pd.directory_name'; + $with_pd = true; + $with_ap = true; + break; default: $part = null; } @@ -196,6 +203,14 @@ class User extends PlUser } else { $fields = ''; } + $limit = ''; + if (!is_null($count)) { + if (!is_null($offset)) { + $limit = ' LIMIT ' . $offset . ', ' . $count; + } else { + $limit = ' LIMIT ' . $count; + } + } $uids = array_map(array('XDB', 'escape'), $uids); return XDB::iterator('SELECT a.uid, a.hruid, a.registration_date, CONCAT(af.alias, \'@' . $globals->mail->domain . '\') AS forlife, @@ -212,7 +227,7 @@ class User extends PlUser LEFT JOIN aliases AS ab ON (ab.id = a.uid AND FIND_IN_SET(\'bestalias\', ab.flags)) ' . $joins . ' WHERE a.uid IN (' . implode(', ', $uids) . ') - ' . $orderby); + ' . $orderby . $limit); } // Implementation of the data loader. @@ -435,9 +450,9 @@ class User extends PlUser } // Fetch a set of users from a list of UIDs - public static function getBuildUsersWithUIDs(array $uids, $sortby = null) + public static function getBuildUsersWithUIDs(array $uids, $sortby = null, $count = null, $offset = null) { - $fields = self::loadMainFieldsFromUIDs($uids, $sortby); + $fields = self::loadMainFieldsFromUIDs($uids, $sortby, $count, $offset); $users = array(); while (($list = $fields->next())) { $users[] = User::getSilentWithValues(null, $list); diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index 53d5c0f..e72013c 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -326,103 +326,24 @@ class XnetGrpModule extends PLModule } $page->changeTpl('xnetgrp/annuaire.tpl'); - $sort = Env::v('order'); - switch (Env::v('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'; $sort = 'alpha'; - } - $page->assign('sort', $sort); - - if ($group == 'initiale') { - $res = 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 = {?} and (u.perms != \'pending\' OR m.email IS NOT NULL) - GROUP BY letter - ORDER BY letter', $globals->asso('id')); - } else { - $res = XDB::iterRow( - 'SELECT IF(m.origine="X",u.promo, - IF(m.origine="ext", "extérieur", "personne morale")) 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($group) && $char == strtoupper(Env::v($group))) { - $tot = $nb; - } - } - $page->assign('group', $group); - $page->assign('request_group', Env::v($group)); - $page->assign('only_admin', Env::has('admin')); - $page->assign('alphabet', $alphabet); - $page->assign('nb_tot', $nb_tot); - - $ofs = Env::i('offset'); - $tot = Env::v($group) ? $tot : $nb_tot; - $nbp = intval(($tot-1)/NB_PER_PAGE); - $links = array(); - if ($ofs) { - $links['précédent'] = $ofs-1; - } - for ($i = 0; $i <= $nbp; $i++) { - $links[(string)($i+1)] = $i; - } - if ($ofs < $nbp) { - $links['suivant'] = $ofs+1; - } - if (count($links)>1) { - $page->assign('links', $links); - } + $sort = Env::s('order', 'directory_name'); - $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::v('initiale')).'%"'; - } elseif (Env::has('promo')) { - $ini = 'AND IF(m.origine="X", u.promo, IF(m.origine="ext", "extérieur", "personne morale")) = "' - .addslashes(Env::v('promo')).'"'; - } elseif (Env::has('admin')) { - $ini = 'AND m.perms = "admin"'; + if (Env::b('admin')) { + $uids = XDB::fetchColumn('SELECT uid + FROM groupex.membres + WHERE asso_id = {?} AND perms = \'admin\'', + $globals->asso('id')); + } else { + $uids = XDB::fetchColumn('SELECT uid + FROM groupex.membres + WHERE asso_id = {?}', $globals->asso('id')); } - - $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',u.promo,'') AS promo_o, - IF(m.origine='X' AND u.perms != 'pending',a.alias,m.email) AS email, - IF(m.origine='X',FIND_IN_SET('femme', u.flags), m.sexe) AS femme, - m.perms='admin' AS admin, - m.origine='X' AS x, - u.perms!='pending' AS inscrit, - m.comm as comm, - m.uid, IF(e.email IS NULL AND FIND_IN_SET('googleapps', u.mail_storage) = 0, NULL, 1) AS actif - 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' ) - LEFT JOIN emails AS e ON ( e.flags = 'active' AND e.uid = m.uid) - WHERE m.asso_id = {?} $ini - AND (m.origine != 'X' OR u.perms != 'pending' OR m.email IS NOT NULL) - GROUP BY m.uid - ORDER BY $tri - LIMIT {?},{?}", $globals->asso('id'), $ofs*NB_PER_PAGE, NB_PER_PAGE); - $page->assign('ann', $ann); - $page->jsonAssign('ann', $ann); + $users = User::getBuildUsersWithUIDs($uids, $sort, + NB_PER_PAGE, $ofs * NB_PER_PAGE); + $page->assign('pages', (count($uids) + NB_PER_PAGE - 1) / NB_PER_PAGE); + $page->assign('order', $sort); + $page->assign('users', $users); + $page->assign('only_admin', Env::b('admin')); } function handler_trombi(&$page) diff --git a/templates/xnetgrp/annuaire.tpl b/templates/xnetgrp/annuaire.tpl index d462aa5..8706e5f 100644 --- a/templates/xnetgrp/annuaire.tpl +++ b/templates/xnetgrp/annuaire.tpl @@ -61,35 +61,38 @@ Le groupe {$asso.nom} compte {$nb_tot} membres : {else}

-[tous les membres] -[animateurs]
+[tous les membres] +[animateurs]
+{* + XXX: This code has been temporary dropped, waiting for a cleaner way to do that stuff {foreach from=$alphabet item=c} {if $c} -[{$c}] +[{$c}] {/if} {/foreach} +*}

@@ -97,42 +100,30 @@ Le groupe {$asso.nom} compte {$nb_tot} membres : {/if} - {iterate from=$ann item=m} + {foreach from=$users item=user} - - {if $m.comm} - + {profile user=$user promo=false} + + {if $user->group_comm} + {/if} - {if $is_admin} {/if} - {/iterate} + {/foreach}
- - {if $sort eq 'alpha'} + + {if $order eq 'directory_name'} - {elseif $sort eq 'alpha_inv'} + {elseif $order eq '-directory_name'} {/if} - Prénom NOM + Prénom NOM - - {if $sort eq 'promo_inv'} + + {if $order eq '-promo'} - {elseif $sort eq 'promo'} + {elseif $order eq 'promo'} {/if} - Promo + Promo InfosActions
- {if $m.admin}{/if} - {if $m.inscrit} - - {elseif $m.x} - - {/if} - {if $m.femme}•{/if}{if $m.prenom || $m.nom}{$m.prenom} {$m.nom|strtoupper}{else}{$m.email}{/if} - {if $m.x}{/if} - {if $m.admin}{/if} - {if $m.inscrit && !$m.actif} - {icon name=error title="Recherche d'email"} - {assign var=broken value=true} - {/if}{if $m.admin}{/if}{$m.promo}{if $m.admin}{/if}{$m.comm} + {if $user->group_perms eq 'admin'}{/if} + {$user->promo()} + {if $user->group_perms eq 'admin'}{/if} + {$user->group_comm} - {if $m.inscrit} + group_comm}colspan="2"{/if}> {icon name=vcard title="[vcard]"} {icon name=email title="email"} - {else} - {icon name=email title="email"} - {/if} - {icon name=user_edit title="Edition du profil"} - {icon name=delete title="Supprimer de l'annuaire"} + {icon name=user_edit title="Edition du profil"} + {icon name=delete title="Supprimer de l'annuaire"}

-- 2.1.4