X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Flists%2Flists.inc.php;h=4e90b4c81499c26010379d530afb502c589a7bb6;hb=96b778a679b261235ede8c5c4e7356680f4e5895;hp=8c9e81ccfd603deefe5928bc51f12a01521c1e82;hpb=be5a4adb62c3abe6c12fb020cf321bdb244ebc4b;p=platal.git diff --git a/modules/lists/lists.inc.php b/modules/lists/lists.inc.php index 8c9e81c..4e90b4c 100644 --- a/modules/lists/lists.inc.php +++ b/modules/lists/lists.inc.php @@ -1,6 +1,6 @@ $key => $listMember + $membres = array(); + $seen = array(); + + $members = array(); + + $uf = new UserFilter(new UFC_Email($emails)); + $it = $uf->iterUsers(); + while ($u = $it->next()) { + $members[$u->uid] = array( + 'user' => $u, + 'profile' => null, + 'email' => $u->forlifeEmail()); + $seen[] = $u->forlifeEmail(); + } + + $pf = new ProfileFilter(new UFC_Email($emails)); + $it = $pf->iterProfiles(); + if ($it) { + while ($p = $it->next()) { + $members[$p->owner_id]['user']->setPrefetchedProfile($p); + $members[$p->owner_id]['profile'] = $p; + } + } - foreach($members as $mem) { - list($m, $dom) = explode('@', $mem); - $info = list_fetch_name($mem); - if (!isset($info['uid']) || is_null($info['uid'])) { - $membres[0][] = array('l' => $mem, 'p' => (!$tri_promo ? 'inconnue' : null)); + foreach ($emails as $email) { + if (!in_array($email, $seen)) { + $seen[] = $email; + $members[$email] = array('user' => null, 'profile' => null, + 'email' => $email); + } + } + + // $members is now an array of uid => {'user': User or null, 'email': $email} + + // $sorted_members is an array of $sortKey1 => $sortKey2 => {User, email} + $sorted_members = array(); + + foreach($members as $member) { + if (is_null($member['user'])) { + $category = 'AAAAA'; + $name = $member['email']; } else { - $uid = $info['uid']; - $nom = $info['nom']; - $prenom = $info['prenom']; - $promo = $info['promo']; - $broken = $info['lost']; - $key = $tri_promo ? ($promo != 'non-X' ? $promo : 0) : mb_strtoupper(@$nom{0}); - if ($tri_promo) { - $promo = null; - } - $membres[$key][$nom.$m] = Array('n' => "$prenom $nom", 'l' => $m, 'p' => $promo, 'x' => $uid, 'b' => $broken); + $category = $member['user']->category(); + $name = $member['user']->directoryName(); + } + if (empty($category)) { + $category = "AAAAA"; } + + $main_sort_key = $tri_promo ? $category : strtoupper($name{0}); + $alt_sort_key = $name; + + if (!array_key_exists($main_sort_key, $sorted_members)) { + $sorted_members[$main_sort_key] = array(); + } + + $sorted_members[$main_sort_key][$alt_sort_key] = $member; } - ksort($membres); - foreach($membres as $key=>$val) ksort($membres[$key]); - return $membres; + uksort($sorted_members, 'strcasecmp'); + foreach($sorted_members as &$subsorted_members) { + uksort($subsorted_members, 'strcasecmp'); + } + return $sorted_members; } // }}} @@ -73,44 +115,18 @@ function list_sort_members($members, $tri_promo = true) } // }}} -// {{{ function list_fetch_names +// {{{ function list_fetch_basic_info -function list_fetch_name($member) -{ - global $globals; - list($m, $dom) = explode('@', $member); - if ($dom == $globals->mail->domain || $dom == $globals->mail->domain2) { - $res = XDB::query('SELECT u.user_id AS uid, prenom AS prenom, IF(nom_usage="", nom, nom_usage) AS nom, - promo AS promo, - (e.uid IS NULL AND FIND_IN_SET("googleapps", u.mail_storage) = 0) AS lost - FROM auth_user_md5 AS u - INNER JOIN aliases AS a ON u.user_id = a.id - LEFT JOIN emails AS e ON (e.flags = "active" AND e.uid = u.user_id) - WHERE a.alias = {?} - GROUP BY u.user_id', $m); - } else { - $res = XDB::query('SELECT m2.uid AS uid, - IF(m2.origine="X", u.prenom, m1.prenom) AS prenom, - IF(m2.origine="X", u.nom, m1.nom) AS nom, - IF(m2.origine="X", u.promo, "non-X") AS promo, - 0 AS lost - FROM groupex.membres AS m1 - LEFT JOIN groupex.membres AS m2 ON(m1.email=m2.email AND m2.asso_id={?}) - LEFT JOIN auth_user_md5 AS u ON(m2.origine = "X" AND m2.uid = u.user_id) - WHERE m1.email={?}', $globals->asso('id'), $member); - } - if ($res->numRows() == 0) { - return array('email' => $member); - } else { - return array_merge(array('email' => $member), $res->fetchOneAssoc()); - } -} - -function list_fetch_names($members) +function list_fetch_basic_info($members) { $res = array(); foreach ($members as $member) { - $res[] = list_fetch_name($member); + $user = User::getSilent($member); + if (!$user) { + $res[] = $member . ';;'; + } else { + $res[] = $user->lastName() . ';' . $user->firstName() . ';' . $user->promo(); + } } return $res; } @@ -133,5 +149,5 @@ function list_header_decode($value) { } // }}} -// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8: ?>