From cbbbb4861131069cd2077a4eb5ac0747fe2be05b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Barrois?= Date: Sun, 4 Nov 2012 23:50:34 +0100 Subject: [PATCH] Refactor list_sort_members. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Raphaël Barrois --- modules/lists/lists.inc.php | 73 ++++++++++++++++++++++++++++++---------- templates/lists/display_list.tpl | 28 ++++++++------- 2 files changed, 71 insertions(+), 30 deletions(-) diff --git a/modules/lists/lists.inc.php b/modules/lists/lists.inc.php index a1aacc7..f167ab2 100644 --- a/modules/lists/lists.inc.php +++ b/modules/lists/lists.inc.php @@ -21,36 +21,73 @@ // {{{ function list_sort_owners -function list_sort_owners($members, $tri_promo = true) +function list_sort_owners($emails, $tri_promo = true) { global $globals; // $membres' structure is the following: $sortKey => $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(); + 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; } - uksort($membres, 'strcasecmp'); - 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; } // }}} diff --git a/templates/lists/display_list.tpl b/templates/lists/display_list.tpl index 5f65363..39bbdc9 100644 --- a/templates/lists/display_list.tpl +++ b/templates/lists/display_list.tpl @@ -21,8 +21,12 @@ {**************************************************************************} {assign var=lostUsers value=false} -{foreach from=$list item=users key=sort_key} -{foreach from=$users item=user name=all} +{foreach from=$list item=members key=sort_key} +{foreach from=$members item=member name=all} + {assign var=user value=$member.user} + {assign var=profile value=$member.profile} + {assign var=email value=$member.email} + {if $smarty.foreach.all.first} @@ -30,23 +34,23 @@ {/if} - {if t($user.hasProfile)} - {if t($user.lost)}{assign var=lostUsers value=true}{/if} - {profile user=$user.uid promo=$promo} - {elseif t($user.uid)} - {if t($user.name)}{$user.name}{else}{$user.email}{/if}{if t($promo)} (extérieur){/if} - {else} - {if t($user.name)}{$user.name}{else}{$user.email}{/if} + {if t($profile)} + {if $user->lost}{assign var=lostUsers value=true}{/if} + {profile user=$user profile=$profile promo=$promo} + {elseif t($user)} + {if $user->directoryName}{$user->directoryName}{else}{$email}{/if}{if not t($promo)} (extérieur){/if} + {else}{* Email without account or email *} + {$email} {/if} {if t($delete)} - {if t($user.uid)} - {icon name=user_edit title='Éditer'}  + {if t($member.user)} + {icon name=user_edit title='Éditer'}  {else} {icon name=null}  {/if} - {icon name=cross title='Retirer'} + {icon name=cross title='Retirer'} {/if} -- 2.1.4