Lists group former members to group admins (Closes #947).
authorStéphane Jacob <sj@m4x.org>
Sat, 14 May 2011 13:13:35 +0000 (15:13 +0200)
committerStéphane Jacob <sj@m4x.org>
Sat, 14 May 2011 13:13:35 +0000 (15:13 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
ChangeLog
classes/userfilter.php
classes/userfilter/conditions.inc.php
modules/xnetgrp.php
templates/include/plview.groupmember.entry.tpl
templates/include/plview.groupmember.tpl
templates/xnetgrp/annuaire.tpl

index 059ad36..fd21202 100644 (file)
--- 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
 
 ================================================================================
index 2834636..453d94a 100644 (file)
@@ -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;
     }
 
index 729c911..cb99cfb 100644 (file)
@@ -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
index 40138cd..0ba359b 100644 (file)
@@ -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');
index 07c7033..b0832ee 100644 (file)
@@ -36,7 +36,7 @@
     {/if}
     <a href="mailto:{$user->bestEmail()}">{icon name=email title="email"}</a>
   </td>
-  {if $is_admin}
+  {if $is_admin && !t($groupmember_noadmin)}
   <td class="center">
     <a href="{$platal->ns}member/{$user->login()}">{icon name=user_edit title="Édition du profil"}</a>
     <a href="{$platal->ns}member/del/{$user->login()}">{icon name=delete title="Supprimer de l'annuaire"}</a>
index ae538f3..f023d6a 100644 (file)
@@ -26,7 +26,7 @@
     <th>Nom</th>
     <th>Promo</th>
     <th colspan="2">Infos</th>
-    {if $is_admin}
+    {if $is_admin && !t($groupmember_noadmin)}
       <th>Actions</th>
     {/if}
   </tr>
index 70b1c26..4fe4b83 100644 (file)
@@ -54,6 +54,12 @@ Le groupe {$asso->nom} compte {$plset_count} membres&nbsp;:
     </a>
   </li>
   {/if}
+  <li>
+    <a href="{$platal->ns}former_users">
+      {icon name=status_offline title="Anciens membres du groupe"}
+      Anciens membres du groupe
+    </a>
+  </li>
   {/if}
   <li>
     <a href="{$platal->ns}annuaire/csv/{$asso->diminutif}.csv">