From: Stéphane Jacob Date: Sat, 14 May 2011 13:13:35 +0000 (+0200) Subject: Lists group former members to group admins (Closes #947). X-Git-Tag: xorg/1.1.2~91 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=486bc076249f9eb8ccc843498a5ca583ed8d9387;p=platal.git Lists group former members to group admins (Closes #947). Signed-off-by: Stéphane Jacob --- diff --git a/ChangeLog b/ChangeLog index 059ad36..fd21202 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,7 @@ Bug/Wish: - #1285: Autocompletes on internal words in university search -JAC * XnetGrp: + - #947: Lists group former members to group admins -JAC - #1481: Adds group nl subscription from group profile edition -JAC ================================================================================ diff --git a/classes/userfilter.php b/classes/userfilter.php index 2834636..453d94a 100644 --- a/classes/userfilter.php +++ b/classes/userfilter.php @@ -846,6 +846,15 @@ class UserFilter extends PlFilter return $sub; } + private $gpfm = array(); + public function addGroupFormerMemberFilter() + { + $this->requireAccounts(); + $sub = '_' . $this->option++; + $this->gpfm[] = $sub; + return $sub; + } + protected function groupJoins() { $joins = array(); @@ -860,6 +869,9 @@ class UserFilter extends PlFilter $joins['gpm' . $sub] = PlSqlJoin::left('group_members', '$ME.uid = $UID AND $ME.asso_id = gpa' . $sub . '.id'); } } + foreach ($this->gpfm as $sub) { + $joins['gpfm' . $sub] = PlSqlJoin::left('group_former_members', '$ME.uid = $UID'); + } return $joins; } diff --git a/classes/userfilter/conditions.inc.php b/classes/userfilter/conditions.inc.php index 729c911..cb99cfb 100644 --- a/classes/userfilter/conditions.inc.php +++ b/classes/userfilter/conditions.inc.php @@ -912,6 +912,30 @@ class UFC_Group extends UserFilterCondition } } // }}} +// {{{ class UFC_GroupFormerMember +/** Filters users based on group former membership + * @param $group Group whose former members we are selecting + */ +class UFC_GroupFormerMember extends UserFilterCondition +{ + private $group; + + public function __construct($group) + { + $this->group = $group; + } + + public function buildCondition(PlFilter $uf) + { + // Groups are only visible for users with perm 'groups'. + if (!S::user()->checkPerms(User::PERM_GROUPS)) { + return self::COND_FALSE; + } + $sub = $uf->addGroupFormerMemberFilter(); + return XDB::format('gpfm' . $sub . '.asso_id = {?}', $this->group); + } +} +// }}} // {{{ class UFC_Binet /** Selects users based on their belonging to a given (list of) binet * @param $binet either a binet_id or an array of binet_ids diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index 40138cd..0ba359b 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -32,6 +32,7 @@ class XnetGrpModule extends PLModule '%grp/edit' => $this->make_hook('edit', AUTH_MDP, 'groupadmin'), '%grp/mail' => $this->make_hook('mail', AUTH_MDP, 'groupadmin'), '%grp/forum' => $this->make_hook('forum', AUTH_MDP, 'groupmember'), + '%grp/former_users' => $this->make_hook('former_users', AUTH_MDP, 'groupadmin'), '%grp/annuaire' => $this->make_hook('annuaire', AUTH_MDP, 'groupannu'), '%grp/annuaire/vcard' => $this->make_hook('vcard', AUTH_MDP, 'groupmember:groupannu'), '%grp/annuaire/csv' => $this->make_hook('csv', AUTH_MDP, 'groupmember:groupannu'), @@ -338,6 +339,17 @@ class XnetGrpModule extends PLModule $page->changeTpl('xnetgrp/annuaire.tpl'); } + function handler_former_users($page) + { + global $globals; + require_once 'userset.inc.php'; + + $view = new UserSet(new UFC_GroupFormerMember($globals->asso('id'))); + $view->addMod('groupmember', 'Anciens membres', true, array('noadmin' => true)); + $view->apply('former_users', $page); + $page->changeTpl('xnetgrp/former_users.tpl'); + } + function handler_trombi($page) { pl_redirect('annuaire/trombi'); diff --git a/templates/include/plview.groupmember.entry.tpl b/templates/include/plview.groupmember.entry.tpl index 07c7033..b0832ee 100644 --- a/templates/include/plview.groupmember.entry.tpl +++ b/templates/include/plview.groupmember.entry.tpl @@ -36,7 +36,7 @@ {/if} {icon name=email title="email"} - {if $is_admin} + {if $is_admin && !t($groupmember_noadmin)} {icon name=user_edit title="Édition du profil"} {icon name=delete title="Supprimer de l'annuaire"} diff --git a/templates/include/plview.groupmember.tpl b/templates/include/plview.groupmember.tpl index ae538f3..f023d6a 100644 --- a/templates/include/plview.groupmember.tpl +++ b/templates/include/plview.groupmember.tpl @@ -26,7 +26,7 @@ Nom Promo Infos - {if $is_admin} + {if $is_admin && !t($groupmember_noadmin)} Actions {/if} diff --git a/templates/xnetgrp/annuaire.tpl b/templates/xnetgrp/annuaire.tpl index 70b1c26..4fe4b83 100644 --- a/templates/xnetgrp/annuaire.tpl +++ b/templates/xnetgrp/annuaire.tpl @@ -54,6 +54,12 @@ Le groupe {$asso->nom} compte {$plset_count} membres : {/if} +
  • + + {icon name=status_offline title="Anciens membres du groupe"} + Anciens membres du groupe + +
  • {/if}