X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Flists%2Flists.inc.php;h=4e90b4c81499c26010379d530afb502c589a7bb6;hb=96b778a679b261235ede8c5c4e7356680f4e5895;hp=cfda3c1181feb398371e700b9fecf7a5f2a5b01b;hpb=45ea6160465aeba0aa780e49c12272819dedffd1;p=platal.git diff --git a/modules/lists/lists.inc.php b/modules/lists/lists.inc.php index cfda3c1..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 ($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) { - $user = User::getSilent($member); - if (!$user) { - $membres[0][$member] = array('name' => null, 'email' => $member, 'category' => null, 'uid' => null, 'lost' => null, 'hasProfile' => null); + if (is_null($member['user'])) { + $category = 'AAAAA'; + $name = $member['email']; } else { - $hasProfile = $user->hasProfile(); - $uid = $user->id(); - $name = $user->directoryName(); - $category = $user->category(); - $key = $tri_promo ? ($category ? $category : 'AAAAA') : strtoupper($name{0}); - if (!$category) { - $category = 'extérieurs'; - } - $membres[$key][$name] = array('name' => $name, 'email' => $member, 'category' => $category, - 'uid' => $uid, 'lost' => $user->lost, 'hasProfile' => $hasProfile); + $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 &$membre) { - uksort($membre, strcasecmp); + uksort($sorted_members, 'strcasecmp'); + foreach($sorted_members as &$subsorted_members) { + uksort($subsorted_members, 'strcasecmp'); } - return $membres; + return $sorted_members; } // }}} @@ -84,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; @@ -110,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: ?>