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 = '';
$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':
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;
}
} 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,
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.
}
// 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);
}
$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)
{else}
<p class="center">
-[<a href="{$platal->ns}annuaire?order={$smarty.request.order}" {if !$only_admin}class="erreur"{/if}>tous les membres</a>]
-[<a href="{$platal->ns}annuaire?order={$smarty.request.order}&admin=1" {if $only_admin}class="erreur"{/if}>animateurs</a>]<br/>
+[<a href="{$platal->ns}annuaire?order={$order}" {if !$only_admin}class="erreur"{/if}>tous les membres</a>]
+[<a href="{$platal->ns}annuaire?order={$order}&admin=1" {if $only_admin}class="erreur"{/if}>animateurs</a>]<br/>
+{*
+ XXX: This code has been temporary dropped, waiting for a cleaner way to do that stuff
{foreach from=$alphabet item=c}
{if $c}
-[<a href="{$platal->ns}annuaire?{$group}={$c}&order={$smarty.request.order}{if $only_admin}&admin=1{/if}"{if $request_group eq $c} class="erreur"{/if}>{$c}</a>]
+[<a href="{$platal->ns}annuaire?order={$order}&admin={$only_admin}"{if $request_group eq $c} class="erreur"{/if}>{$c}</a>]
{/if}
{/foreach}
+*}
</p>
<table summary="membres du groupe" class="bicol">
<tr>
<th>
- <a href="{$platal->ns}annuaire?order=alpha{if $sort neq "alpha_inv"}_inv{/if}{if $request_group and $group eq 'initiale'}&initiale={$request_group}{/if}{if $only_admin}&admin=1{/if}">
- {if $sort eq 'alpha'}
+ <a href="{$platal->ns}annuaire?order={if $order eq 'directory_name'}-{/if}directory_name&admin={$only_admin}">
+ {if $order eq 'directory_name'}
<img src="{$platal->baseurl}images/dn.png" alt="" title="Tri croissant" />
- {elseif $sort eq 'alpha_inv'}
+ {elseif $order eq '-directory_name'}
<img src="{$platal->baseurl}images/up.png" alt="" title="Tri décroissant" />
{/if}
- Prénom NOM
+ Prénom NOM
</a>
</th>
<th>
- <a href="{$platal->ns}annuaire?order=promo{if $sort eq "promo"}_inv{/if}{if $request_group and $group eq 'promo'}&promo={$request_group}{/if}">
- {if $sort eq 'promo_inv'}
+ <a href="{$platal->ns}annuaire?order={if $order eq 'promo'}-{/if}promo&admin={$only_admin}">
+ {if $order eq '-promo'}
<img src="{$platal->baseurl}images/dn.png" alt="" title="Tri croissant" />
- {elseif $sort eq 'promo'}
+ {elseif $order eq 'promo'}
<img src="{$platal->baseurl}images/up.png" alt="" title="Tri décroissant" />
{/if}
- Promo
+ Promo
</a>
</th>
<th colspan="2">Infos</th>
<th>Actions</th>
{/if}
</tr>
- {iterate from=$ann item=m}
+ {foreach from=$users item=user}
<tr>
<td>
- {if $m.admin}<strong>{/if}
- {if $m.inscrit}
- <a href="https://www.polytechnique.org/profile/{$m.email}" class="popup2">
- {elseif $m.x}
- <a href="https://www.polytechnique.org/marketing/public/{$m.uid}">
- {/if}
- {if $m.femme}•{/if}{if $m.prenom || $m.nom}{$m.prenom} {$m.nom|strtoupper}{else}{$m.email}{/if}
- {if $m.x}</a>{/if}
- {if $m.admin}</strong>{/if}
- {if $m.inscrit && !$m.actif}
- <a href="https://www.polytechnique.org/marketing/broken/{$m.email}">{icon name=error title="Recherche d'email"}</a>
- {assign var=broken value=true}
- {/if}</td>
- <td>{if $m.admin}<strong>{/if}{$m.promo}{if $m.admin}</strong>{/if}</td>
- {if $m.comm}
- <td>{$m.comm}</td>
+ {profile user=$user promo=false}
+ <td>
+ {if $user->group_perms eq 'admin'}<strong>{/if}
+ {$user->promo()}
+ {if $user->group_perms eq 'admin'}</strong>{/if}
+ </td>
+ {if $user->group_comm}
+ <td>{$user->group_comm}</td>
{/if}
- <td class="right" {if !$m.comm}colspan="2"{/if}>
- {if $m.inscrit}
+ <td class="right" {if !$m->group_comm}colspan="2"{/if}>
<a href="https://www.polytechnique.org/vcard/{$m.email}.vcf">{icon name=vcard title="[vcard]"}</a>
<a href="mailto:{$m.email}@polytechnique.org">{icon name=email title="email"}</a>
- {else}
- <a href="mailto:{$m.email}">{icon name=email title="email"}</a>
- {/if}
</td>
{if $is_admin}
<td class="center">
- <a href="{$platal->ns}member/{if $m.x}{$m.email}{else}{$m.uid}{/if}">{icon name=user_edit title="Edition du profil"}</a>
- <a href="{$platal->ns}member/del/{if $m.x}{$m.email}{else}{$m.uid}{/if}">{icon name=delete title="Supprimer de l'annuaire"}</a>
+ <a href="{$platal->ns}member/{$user->login()}">{icon name=user_edit title="Edition du profil"}</a>
+ <a href="{$platal->ns}member/del/{$user->login()}">{icon name=delete title="Supprimer de l'annuaire"}</a>
</td>
{/if}
</tr>
- {/iterate}
+ {/foreach}
</table>
<p class="descr" style="text-align: center">