From a1bb59d601ea44a49228cf81c1b18a2b2cb828a0 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 12 Aug 2014 06:10:30 -0400
Subject: [PATCH] Add support for groups

---
 plugins/acl/config.inc.php.dist |    9 +++++++--
 plugins/acl/acl.php             |   22 ++++++++++++++++++++--
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/plugins/acl/acl.php b/plugins/acl/acl.php
index 681ef0e..a8b8f58 100644
--- a/plugins/acl/acl.php
+++ b/plugins/acl/acl.php
@@ -111,6 +111,20 @@
                     $users[] = $user;
                 }
             }
+
+            if ($this->rc->config->get('acl_groups')) {
+                $prefix = $this->rc->config->get('acl_group_prefix');
+                $result = $this->ldap->list_groups($search, $mode);
+
+                foreach ($result as $record) {
+                    $group = $record['name'];
+
+                    if ($group) {
+                        $users[] = array('name' => ($prefix ? $prefix : '')  . $group, 'display' => $group);
+                        $keys[]  = $group;
+                    }
+                }
+            }
         }
 
         sort($users, SORT_LOCALE_STRING);
@@ -439,9 +453,13 @@
         $result = 0;
 
         foreach ($users as $user) {
-            $user = trim($user);
+            $user   = trim($user);
+            $prefix = $this->rc->config->get('acl_groups') ? $this->rc->config->get('acl_group_prefix') : '';
 
-            if (!empty($this->specials) && in_array($user, $this->specials)) {
+            if ($prefix && strpos($user, $prefix) === 0) {
+                $username = $user;
+            }
+            else if (!empty($this->specials) && in_array($user, $this->specials)) {
                 $username = $this->gettext($user);
             }
             else if (!empty($user)) {
diff --git a/plugins/acl/config.inc.php.dist b/plugins/acl/config.inc.php.dist
index 3f0b1ef..de1f8b5 100644
--- a/plugins/acl/config.inc.php.dist
+++ b/plugins/acl/config.inc.php.dist
@@ -16,10 +16,15 @@
 // The LDAP search filter will be &'d with search queries
 $config['acl_users_filter'] = '';
 
+// Enable LDAP groups in user autocompletion.
+// Note: LDAP addressbook defined in acl_users_source must include groups config
+$config['acl_groups'] = false;
+
+// Prefix added to the group name to build IMAP ACL identifier
+$config['acl_group_prefix'] = 'group:';
+
 // Include the following 'special' access control subjects in the ACL dialog;
 // Defaults to array('anyone', 'anonymous') (not when set to an empty array)
 // Example: array('anyone') to exclude 'anonymous'.
 // Set to an empty array to exclude all special aci subjects.
 $config['acl_specials'] = array('anyone', 'anonymous');
-
-?>

--
Gitblit v1.9.1