X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Flists%2Flists.inc.php;h=f167ab23e00c972a22da0d9b8f7c56799cfbe33b;hb=f04660bfe4add5cf47297d81d304274d3ef4d42e;hp=217745aa40195817cb760c8eff8ce1cb20bf6a08;hpb=b97ecb9d9d15e48fb8320c780acf271e06f7777d;p=platal.git diff --git a/modules/lists/lists.inc.php b/modules/lists/lists.inc.php index 217745a..f167ab2 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(); + 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 +121,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;