X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Flists%2Flists.inc.php;h=4e90b4c81499c26010379d530afb502c589a7bb6;hb=96b778a679b261235ede8c5c4e7356680f4e5895;hp=217745aa40195817cb760c8eff8ce1cb20bf6a08;hpb=843a2191e4c76f0beb00c754f06974de76791238;p=platal.git diff --git a/modules/lists/lists.inc.php b/modules/lists/lists.inc.php index 217745a..4e90b4c 100644 --- a/modules/lists/lists.inc.php +++ b/modules/lists/lists.inc.php @@ -1,6 +1,6 @@ $key => $listMember + $membres = array(); + $seen = array(); - foreach($members as $mem) { - $user = User::getSilent($mem); - if (!$user) { - $membres[0][] = array('l' => $mem, 'p' => (!$tri_promo ? 'inconnue' : null), 'n' => null, 'x' => null, 'b' => null); + $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 ($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 = $user->id(); - $nom = $user->directoryName(); - $promo = $user->promo(); - if (!$promo) { - $promo = 'non-X'; - } - $key = $tri_promo ? ($promo != 'non-X' ? $promo : 0) : strtoupper(@$nom{0}); - if ($tri_promo) { - $promo = null; - } - $membres[$key][$nom.$mem] = array('n' => $nom, 'l' => $mem, 'p' => $promo, 'x' => $uid, 'b' => $user->lost); + $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; } // }}} @@ -82,9 +123,9 @@ function list_fetch_basic_info($members) foreach ($members as $member) { $user = User::getSilent($member); if (!$user) { - $res[] = $member . ',,'; + $res[] = $member . ';;'; } else { - $res[] = $user->forlifeEmail() . ',' . $user->directoryName() . ',' . $user->promo(); + $res[] = $user->lastName() . ';' . $user->firstName() . ';' . $user->promo(); } } return $res; @@ -108,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: ?>