Cleaned up context filtering in LDAP driver
authorBen Klang <ben@alkaloid.net>
Wed, 2 Nov 2005 23:39:54 +0000 (23:39 +0000)
committerBen Klang <ben@alkaloid.net>
Wed, 2 Nov 2005 23:39:54 +0000 (23:39 +0000)
git-svn-id: https://svn.alkaloid.net/gpl/shout/trunk@79 06cd67b6-e706-0410-b29e-9de616bca6e9

andrew.webprj
lib/Driver/ldap.php
lib/api.php
lib/defines.php
templates/menu.inc
themes/graphics/add-user.gif

index 270e6d3..8939e12 100644 (file)
@@ -9,7 +9,7 @@
     <item modified_time="1130769960" url="dialplan/edit.php" uploadstatus="1" />
     <item url="lib/" uploadstatus="1" />
     <item url="lib/Driver/" uploadstatus="1" />
-    <item modified_time="1130792001" url="lib/Driver/ldap.php" uploadstatus="1" />
+    <item modified_time="1130864652" url="lib/Driver/ldap.php" uploadstatus="1" />
     <item modified_time="1130769961" url="lib/base.php" uploadstatus="1" />
     <item modified_time="1121689003" url="lib/Dialplan.php" uploadstatus="1" />
     <item modified_time="1130769960" url="lib/Driver.php" uploadstatus="1" />
     <item modified_time="1121581536" url="templates/users/userlist.inc" uploadstatus="1" />
     <item modified_time="1120174958" url="templates/common-header.inc" uploadstatus="1" />
     <item modified_time="1120073766" url="templates/content_page" uploadstatus="1" />
-    <item modified_time="1121689003" url="templates/menu.inc" uploadstatus="1" />
+    <item modified_time="1130864369" url="templates/menu.inc" uploadstatus="1" />
     <item modified_time="1121578596" url="templates/table-limiter-begin.inc" uploadstatus="1" />
     <item modified_time="1121578596" url="templates/table-limiter-end.inc" uploadstatus="1" />
     <item url="themes/" uploadstatus="1" />
     <item url="themes/graphics/" uploadstatus="1" />
     <item modified_time="1121581526" url="themes/graphics/add-extension.gif" uploadstatus="1" />
-    <item modified_time="1121300828" url="themes/graphics/add-user.gif" uploadstatus="1" />
+    <item modified_time="1130861777" url="themes/graphics/add-user.gif" uploadstatus="1" />
     <item modified_time="1121578596" url="themes/screen.css" uploadstatus="1" />
     <item url="users/" uploadstatus="1" />
     <item modified_time="1122704539" url="users/add.php" uploadstatus="1" />
         <uploadeditem upload_time="1121689003" url="lib/Dialplan.php" />
         <uploadeditem upload_time="1130769960" url="lib/Driver.php" />
         <uploadeditem upload_time="0" url="lib/Driver/" />
-        <uploadeditem upload_time="1130792001" url="lib/Driver/ldap.php" />
+        <uploadeditem upload_time="1130864652" url="lib/Driver/ldap.php" />
         <uploadeditem upload_time="1130769961" url="lib/Shout.php" />
         <uploadeditem upload_time="1121689003" url="lib/System.php" />
         <uploadeditem upload_time="1130769961" url="lib/User.php" />
-        <uploadeditem upload_time="1130762122" url="lib/api.php" />
+        <uploadeditem upload_time="1130862539" url="lib/api.php" />
         <uploadeditem upload_time="1130769961" url="lib/base.php" />
-        <uploadeditem upload_time="1130762122" url="lib/defines.php" />
+        <uploadeditem upload_time="1130864200" url="lib/defines.php" />
         <uploadeditem upload_time="0" url="main/" />
         <uploadeditem upload_time="1121689003" url="main/dialplan.php" />
         <uploadeditem upload_time="1121401845" url="main/moh.php" />
@@ -85,7 +85,7 @@
         <uploadeditem upload_time="1121689030" url="templates/dialplan/priority-form-begin.inc" />
         <uploadeditem upload_time="1121689030" url="templates/dialplan/priority-form-end.inc" />
         <uploadeditem upload_time="1121689030" url="templates/dialplan/priority-form-line.inc" />
-        <uploadeditem upload_time="1121689003" url="templates/menu.inc" />
+        <uploadeditem upload_time="1130864369" url="templates/menu.inc" />
         <uploadeditem upload_time="1121578596" url="templates/table-limiter-begin.inc" />
         <uploadeditem upload_time="1121578596" url="templates/table-limiter-end.inc" />
         <uploadeditem upload_time="0" url="templates/users/" />
@@ -93,7 +93,7 @@
         <uploadeditem upload_time="0" url="themes/" />
         <uploadeditem upload_time="0" url="themes/graphics/" />
         <uploadeditem upload_time="1121581526" url="themes/graphics/add-extension.gif" />
-        <uploadeditem upload_time="1121300828" url="themes/graphics/add-user.gif" />
+        <uploadeditem upload_time="1130861777" url="themes/graphics/add-user.gif" />
         <uploadeditem upload_time="1121578596" url="themes/screen.css" />
         <uploadeditem upload_time="1122704475" url="users.php" />
         <uploadeditem upload_time="0" url="users/" />
     </uploadprofiles>
     <templates>templates/</templates>
     <toolbars>toolbars/</toolbars>
-    <item modified_time="1130762122" url="lib/api.php" uploadstatus="1" />
+    <item modified_time="1130862539" url="lib/api.php" uploadstatus="1" />
     <author>Ben Klang</author>
     <email>ben@alkaloid.net</email>
     <debuggerclient>No Debugger</debuggerclient>
       <mailinglist address="" />
     </teamdata>
     <events/>
-    <item modified_time="1130762122" url="lib/defines.php" uploadstatus="1" />
+    <item modified_time="1130864200" url="lib/defines.php" uploadstatus="1" />
     <treestatus>
       <openfolder url="config" />
       <openfolder url="dialplan" />
       <openfolder url="lib" />
       <openfolder url="lib/Driver" />
       <openfolder url="main" />
+      <openfolder url="templates" />
       <openfolder url="users" />
     </treestatus>
   </project>
index 985fd7d..3b27a4c 100644 (file)
@@ -68,34 +68,26 @@ class Shout_Driver_ldap extends Shout_Driver
         if ($searchfilters == SHOUT_CONTEXT_ALL) {
             $searchfilter="(objectClass=asteriskObject)";
         } else {
-            $searchfilter = "(|";
+            $searchfilter = "(&";
             # FIXME Change this to non-V-Office specific objectClass
             if ($searchfilters & SHOUT_CONTEXT_CUSTOMERS) {
+                # FIXME what does this objectClass really do for us?
                 $searchfilter.="(objectClass=vofficeCustomer)";
-            } else {
-                $searchfilter.="(!(objectClass=vofficeCustomer))";
             }
-
             if ($searchfilters & SHOUT_CONTEXT_EXTENSIONS) {
                 $searchfilter.="(objectClass=asteriskExtensions)";
-            } else {
-                $searchfilter.="(!(objectClass=asteriskExtensions))";
             }
-
             if ($searchfilters & SHOUT_CONTEXT_MOH) {
                 $searchfilter.="(objectClass=asteriskMusicOnHold)";
-            } else {
-                $searchfilter.="(!(objectClass=asteriskMusicOnHold))";
             }
-
             if ($searchfilters & SHOUT_CONTEXT_CONFERENCE) {
                 $searchfilter.="(objectClass=asteriskMeetMe)";
-            } else {
-                $searchfilter.="(!(objectClass=asteriskMeetMe))";
             }
             $searchfilter .= ")";
         }
 
+        $attributes = array(SHOUT_ACCOUNT_ID_ATTRIBUTE, 'objectClass', 'context');
+
         # Collect all the possible contexts from the backend
         $res = @ldap_search($this->_LDAP,
             SHOUT_ASTERISK_BRANCH.','.$this->_params['basedn'],
@@ -112,10 +104,33 @@ class Shout_Driver_ldap extends Shout_Driver
         $entries[$searchfilters] = array();
         while ($i < $res['count']) {
             $context = $res[$i]['context'][0];
-            @$domain = $res[$i]['associateddomain'][0];
+            $type = SHOUT_CONTEXT_NONE;
+            foreach ($res[$i][strtolower('objectClass')] as $objectClass) {
+                switch ($objectClass) {
+                    case SHOUT_CONTEXT_CUSTOMERS_OBJECTCLASS:
+                        # FIXME What does this objectClass really get us?
+                        $type = $type | SHOUT_CONTEXT_CUSTOMERS;
+                        break;
+                    case SHOUT_CONTEXT_EXTENSIONS_OBJECTCLASS:
+                        $type = $type | SHOUT_CONTEXT_EXTENSIONS;
+                        break;
+                    case SHOUT_CONTEXT_MOH_OBJECTCLASS:
+                        $type = $type | SHOUT_CONTEXT_MOH;
+                        break;
+                    case SHOUT_CONTEXT_CONFERENCE_OBJECTCLASS:
+                        $type = $type | SHOUT_CONTEXT_CONFERENCE;
+                        break;
+                    case SHOUT_CONTEXT_VOICEMAIL_OBJECTCLASS:
+                        $type = $type | SHOUT_CONTEXT_VOICEMAIL;
+                        break;
+                }
+            }
             if (Shout::checkRights("shout:contexts:$context", $filterperms)) {
                 $entries[$searchfilters][$context] =
-                    array('domain' => $domain);
+                    array(
+                        'custid' => SHOUT_ACCOUNT_ID_ATTRIBUTE,
+                        'type' => $type,
+                    );
             }
             $i++;
         }
@@ -270,6 +285,7 @@ for $context"));
         foreach ($res[0]['objectclass'] as $objectClass) {
             switch ($objectClass) {
                 case "vofficeCustomer":
+                    # FIXME What does this objectClass really do for us?
                     $properties = $properties | SHOUT_CONTEXT_CUSTOMERS;
                     break;
 
index c7b6910..484ab7a 100644 (file)
@@ -17,11 +17,6 @@ $_services['perms'] = array(
     'type' => '{urn:horde}stringArray'
 );
 
-$_services['getUsersByDomain'] = array(
-    'args' => array('domain' => 'string', 'timestamp' => 'int'),
-    'type' => '{urn:horde}stringArray',
-);
-
 function _shout_perms()
 {
     static $perms = array();
index eda8834..fd86b69 100644 (file)
 @define(SHOUT_USERS_BRANCH, "ou=Customers");
 @define(SHOUT_USER_OBJECTCLASS, "asteriskUser");
 
-@define(SHOUT_CONTEXT_ALL, 0xF);
-@define(SHOUT_CONTEXT_NONE, 0);
-@define(SHOUT_CONTEXT_CUSTOMERS, 1 << 0);
-@define(SHOUT_CONTEXT_EXTENSIONS, 1 << 1);
-@define(SHOUT_CONTEXT_MOH, 1 << 2);
-@define(SHOUT_CONTEXT_CONFERENCE, 1 << 3);
\ No newline at end of file
+@define('SHOUT_CONTEXT_ALL', 0xFFF);
+@define('SHOUT_CONTEXT_NONE', 0);
+@define('SHOUT_CONTEXT_CUSTOMERS', 1 << 0);
+@define('SHOUT_CONTEXT_EXTENSIONS', 1 << 1);
+@define('SHOUT_CONTEXT_MOH', 1 << 2);
+@define('SHOUT_CONTEXT_CONFERENCE', 1 << 3);
+@define('SHOUT_CONTEXT_VOICEMAIL', 1 << 4);
+
+# FIXME Maybe these should be params instead?
+@define('SHOUT_CONTEXT_CUSTOMERS_OBJECTCLASS', 'vofficeCustomer');
+@define('SHOUT_CONTEXT_EXTENSIONS_OBJECTCLASS', 'asteriskExtensions');
+@define('SHOUT_CONTEXT_MOH_OBJECTCLASS', 'asteriskMusiconHold');
+@define('SHOUT_CONTEXT_CONFERENCE_OBJECTCLASS', 'asteriskMeetMe');
+@define('SHOUT_CONTEXT_VOICEMAIL_OBJECTCLASS', 'asteriskVoicemail');
+
+# FIXME Maybe these should be params instead?
+@define('SHOUT_ACCOUNT_ID_ATTRIBUTE', 'vofficeCustomerNumber');
\ No newline at end of file
index 2a2a44c..3297c0c 100644 (file)
@@ -13,12 +13,12 @@ $menu_view = $prefs->getValue('menu_view');
     <select id="context" name="context" onchange="contextSubmit()">
      <?php
         $contexts = &$shout->getContexts();
-        foreach ($contexts as $item) {
-            print "<option name=\"$item\"";
-            if ($item == $context) {
+        foreach ($contexts as $c => $cdata) {
+            print "<option name=\"$c\"";
+            if ($c == $context) {
                 print " selected";
             }
-            print ">$item</option>\n";
+            print ">$c</option>\n";
         }
      ?>
     </select>
index c343e4b..faac4f1 100644 (file)
Binary files a/themes/graphics/add-user.gif and b/themes/graphics/add-user.gif differ