Added LDAP based limit support. Also will need new schema file currently on
authorBen Klang <ben@alkaloid.net>
Wed, 20 Jul 2005 04:41:54 +0000 (04:41 +0000)
committerBen Klang <ben@alkaloid.net>
Wed, 20 Jul 2005 04:41:54 +0000 (04:41 +0000)
Marconi.  Still no save support (coming soon...)

git-svn-id: https://svn.alkaloid.net/gpl/shout/trunk@69 06cd67b6-e706-0410-b29e-9de616bca6e9

lib/Driver/ldap.php
lib/User.php
shout.webprj
users/edit.php
users/save.php

index b9b3b1b..dea475c 100644 (file)
@@ -270,7 +270,9 @@ type");
 
         $res = ldap_get_entries($this->_LDAP, $res);
 
-        # Assume the user only has one context.  The schema encforces this
+        # Assume the user only has one context.  The schema enforces this
+        # FIXME: Handle cases where the managing user isn't a valid telephone
+        # system user
         return $res[0]['context'][0];
     }
     // }}}
@@ -436,60 +438,135 @@ for $context"));
         return $dialplans[$context];
     }
     // }}}
-
-    // {{{ getUserPhoneNumbers method
+    
+    // {{{
     /**
-     * Get a list of phone numbers for the given user from the backend
+     * Get the limits for the current user, the user's context, and global
+     * Return the most specific values in every case.  Return default values
+     * where no data is found.  If $extension is specified, $context must 
+     * also be specified.
      *
-     * @param string $extension Extension on which to search
+     * @param optional string $context Context to search
      *
-     * @param string $context Context for which this user is valid
+     * @param optional string $extension Extension/user to search
      *
-     * @return array Phone numbers for this user
-     *
-     * @access public
+     * @return array Array with elements indicating various limits
      */
-    function getUserPhoneNumbers($extension, $context = null)
+    function &getLimits($context = null, $extension = null)
     {
-        $userfilter = "(".$this->userkey."=".$username.",".
-            $this->usersOU.",".$this->_params['basedn'].")";
-        $searchfilter = "(&".$userfilter;
-        foreach ($prefs["searchfilters"]["phoneuser"] as $filter) {
-            $searchfilter .= "($filter)";
+    
+        $limits = array('telephonenumbersmax',
+                        'voicemailboxesmax',
+                        'asteriskusers');
+
+        if(is_null($extension) && !is_null($context)) {
+            return PEAR::raiseError("Extension specified but no context " .
+                "given.");
         }
-        $searchfilter .= ")";
-
-        $res = ldap_search($this->_LDAP, $this->_params['basedn'],
-$searchfilter,
-            array("userNumber"));
-        if (!res) {
-            return PEAR::raiseError("Unable to locate any LDAP entries for
-$searchfilter under ".$this->_params['basedn']);
+
+        if (!is_null($context) && array_key_exists($context, $limits)) {
+            if (!is_null($extension) &&
+                array_key_exists($extension, $limits[$context])) {
+                return $limits[$context][$extension];
+            }
+            return $limits[$context];
+        }
+        
+        # Set some default limits (to unlimited)
+        static $cachedlimits = array();
+        # Initialize the limits with defaults
+        if (count($cachedlimits) < 1) {
+            foreach ($limits as $limit) {
+                $cachedlimits[$limit] = -1;
+            }
+        }
+        
+        # Collect the global limits
+        $res = ldap_search($this->_LDAP,
+            SHOUT_ASTERISK_BRANCH.','.$this->_params['basedn'],
+            '(&(objectClass=asteriskLimits)(cn=globals))',
+            $limits);
+        
+        if (!$res) {
+            return PEAR::raiseError('Unable to search the LDAP server for ' .
+                'global limits');
+        }
+        
+        $res = ldap_get_entries($this->_LDAP, $res);
+        # There should only have been one object returned so we'll just take the
+        # first result returned
+        if ($res['count'] > 0) {
+            foreach ($limits as $limit) {
+                if (isset($res[0][$limit][0])) {
+                    $cachedlimits[$limit] = $res[0][$limit][0];
+                }
+            }
+        } else {    
+            return PEAR::raiseError("No global object found.");
         }
-        // FIXME
-    }
 
-    // {{{ getUserVoicemailInfo method
-    /**
-     * Get the named user's voicemail particulars from LDAP
-     *
-     * @param string $extension Extension for which voicemail information should
-     *                          be returned
-     * @param optional string $context Context to which this extension belongs
-     *
-     * @return array Array containing voicemail options, user's name, email
-     *               and pager addresses and PIN number
-     *
-     * @access public
-     */
-    function getUserVoicemailInfo($extension, $context = null)
-    {
-        $userfilter = "(&(objectClass=asteriskVoiceMailbox)(context=$context))";
-        $res = ldap_search($this->_LDAP, $this->_params['basedn'],
-$userfilter,
-            array('asteriskVoiceMailboxOptions', 'mail', 'asteriskPager',
-                'voiceMailboxPin', 'cn'));
-        return $res;
+        # Get limits for the context, if provided
+        if (isset($context)) {
+            $res = ldap_search($this->_LDAP,
+                SHOUT_ASTERISK_BRANCH.','.$this->_params['basedn'],
+                "(&(objectClass=asteriskLimits)(cn=$context))");
+            
+            if (!$res) {
+                return PEAR::raiseError('Unable to search the LDAP server ' .
+                    "for $context specific limits");
+            }
+            
+            $cachedlimits[$context][$extension] = array();
+            if ($res['count'] > 0) {
+                foreach ($limits as $limit) {
+                    if (isset($res[0][$limit][0])) {
+                        $cachedlimits[$context][$limit] = $res[0][$limit][0];
+                    } else {
+                        # If no value is provided use the global limit
+                        $cachedlimits[$context][$limit] = $cachedlimits[$limit];
+                    }
+                }
+            } else {
+
+                foreach ($limits as $limit) {
+                    $cachedlimits[$context][$limit] =
+                        $cachedlimits[$limit];
+                }
+            }
+            
+            if (isset($extension)) {
+                $res = ldap_search($this->_LDAP,
+                    SHOUT_USERS_BRANCH.','.$this->_params['basedn'],
+                    "(&(objectClass=asteriskLimits)(voiceMailbox=$extension)".
+                    "(context=$context))");
+                
+                if (!$res) {
+                    return PEAR::raiseError('Unable to search the LDAP server '.
+                        "for Extension $extension, $context specific limits");
+                }
+                
+                $cachedlimits[$context][$extension] = array();
+                if ($res['count'] > 0) {
+                    foreach ($limits as $limit) {
+                        if (isset($res[0][$limit][0])) {
+                            $cachedlimits[$context][$extension][$limit] =
+                                $res[0][$limit][0];
+                        } else {
+                            # If no value is provided use the context limit
+                            $cachedlimits[$context][$extension][$limit] =
+                                $cachedlimits[$context][$limit];
+                        }
+                    }
+                } else {
+                    foreach ($limits as $limit) {
+                        $cachedlimits[$context][$extension][$limit] =
+                            $cachedlimits[$context][$limit];
+                    }
+                }
+                return $cachedlimits[$context][$extension];
+            }
+            return $cachedlimits[$context];
+        }
     }
     // }}}
 
index b0f979e..6260495 100644 (file)
@@ -9,6 +9,22 @@
  *
  * @package Shout
  */
+
+// {{{ Shout_User class
+/**
+ * Class defining a single Asterisk user
+ *
+ * @package Shout
+ */
+class Shout_User {
+    var $_name;
+    var $_extension;
+    var $_email;
+    var $_pager;
+    var $_pin;
+}
+    
+
 // {{{
 class UserDetailsForm extends Horde_Form {
 
@@ -22,11 +38,13 @@ class UserDetailsForm extends Horde_Form {
         if (array_key_exists($extension, $users)) {
             # We must be editing an existing user
             $this->fillUserForm(&$vars, $users[$extension]);
+            $limits = &$shout->getLimits($context, $extension);
             $formtitle = "Edit User";
         } else {
+            $limits = &$shout->getLimits($context);
             $formtitle = "Add User";
         }
-       
+
         parent::Horde_Form($vars, _("$formtitle - Context: $context"));
         
         $this->addHidden('', 'context', 'text', true);
@@ -40,14 +58,15 @@ class UserDetailsForm extends Horde_Form {
         # TODO: Integrate with To-Be-Written user manager and possibly make this
         # TODO: new user also an email account.
         $this->addVariable(_("PIN"), 'pin', 'int', true);
-        $this->addVariable(_("Telephone Number 1:"), 'telephone1', 'text',
-            false);
-        $this->addVariable(_("Telephone Number 2:"), 'telephone2', 'text',
-            false);
-        $this->addVariable(_("Telephone Number 3:"), 'telephone3', 'text',
-            false);
-        $this->addVariable(_("Telephone Number 4:"), 'telephone4', 'text',
-            false);
+        
+        $t = 1;
+        while ($t <= $limits['telephonenumbersmax']) {
+            $this->addVariable(_("Telephone Number $t:"), "telephone$t",
+'text',
+                false);
+            $t++;
+        }
+        
         $this->addVariable(_("Music on Hold while transferring"), 'moh',
             'radio', true, false, null,
             array('values' => array(true => 'Yes', false => 'No')));
index 738ac88..5c11556 100644 (file)
@@ -9,7 +9,7 @@
     <item url="templates/" uploadstatus="2" />
     <item url="lib/" uploadstatus="2" />
     <item url="lib/Driver/" uploadstatus="2" />
-    <item modified_time="1121623158" url="lib/Driver/ldap.php" uploadstatus="2" />
+    <item modified_time="1121832576" url="lib/Driver/ldap.php" uploadstatus="2" />
     <item modified_time="1120589135" url="lib/base.php" uploadstatus="2" />
     <item modified_time="1121306551" url="lib/Driver.php" uploadstatus="2" />
     <item modified_time="1121623574" url="index.php" uploadstatus="2" />
         <uploadeditem upload_time="1121306551" url="lib/Driver.php" />
         <uploadeditem upload_time="1120022560" url="lib/Driver.php~" />
         <uploadeditem upload_time="0" url="lib/Driver/" />
-        <uploadeditem upload_time="1121623158" url="lib/Driver/ldap.php" />
+        <uploadeditem upload_time="1121832576" url="lib/Driver/ldap.php" />
         <uploadeditem upload_time="1120026921" url="lib/Driver/ldap.php~" />
         <uploadeditem upload_time="1120288491" url="lib/SelectContext.php" />
         <uploadeditem upload_time="1121580048" url="lib/Shout.php" />
         <uploadeditem upload_time="1121623619" url="lib/System.php" />
-        <uploadeditem upload_time="1121623659" url="lib/User.php" />
+        <uploadeditem upload_time="1121832752" url="lib/User.php" />
         <uploadeditem upload_time="1120279975" url="lib/Users.php" />
         <uploadeditem upload_time="1120589135" url="lib/base.php" />
         <uploadeditem upload_time="1120073766" url="lib/defines.php" />
@@ -71,9 +71,9 @@
         <uploadeditem upload_time="1121623747" url="users.php" />
         <uploadeditem upload_time="0" url="users/" />
         <uploadeditem upload_time="1121404120" url="users/add.php" />
-        <uploadeditem upload_time="1121580517" url="users/edit.php" />
+        <uploadeditem upload_time="1121821098" url="users/edit.php" />
         <uploadeditem upload_time="1121396278" url="users/index.php" />
-        <uploadeditem upload_time="1121579127" url="users/save.php" />
+        <uploadeditem upload_time="1121825812" url="users/save.php" />
       </profile>
     </uploadprofiles>
     <debuggers>
     <item url="themes/graphics/" uploadstatus="1" />
     <item modified_time="1121300828" url="themes/graphics/add-user.gif" uploadstatus="1" />
     <item url="users/" uploadstatus="1" />
-    <item modified_time="1121623659" url="lib/User.php" uploadstatus="1" />
+    <item modified_time="1121832752" url="lib/User.php" uploadstatus="1" />
     <item url="main/" uploadstatus="1" />
     <item modified_time="1121623690" url="main/dialplan.php" uploadstatus="1" />
     <item modified_time="1120287842" url="main/moh.php" uploadstatus="1" />
     <item modified_time="1120815615" url="main/system.php" uploadstatus="1" />
     <item modified_time="1121623695" url="main/users.php" uploadstatus="1" />
     <item modified_time="1121623747" url="users.php" uploadstatus="1" />
-    <item modified_time="1121579127" url="users/save.php" uploadstatus="1" />
+    <item modified_time="1121825812" url="users/save.php" uploadstatus="1" />
     <item modified_time="1121574328" url="themes/screen.css" uploadstatus="1" />
-    <item modified_time="1121580517" url="users/edit.php" uploadstatus="1" />
+    <item modified_time="1121821098" url="users/edit.php" uploadstatus="1" />
     <item modified_time="1121578573" url="templates/table-limiter-begin.inc" uploadstatus="1" />
     <item modified_time="1121578576" url="templates/table-limiter-end.inc" uploadstatus="1" />
     <item modified_time="1121631735" url="dialplan.php" uploadstatus="1" />
     <item modified_time="1121632074" url="dialplan/edit.php" uploadstatus="1" />
     <item url="dialplan/" uploadstatus="1" />
     <item modified_time="1121632956" url="lib/Dialplan.php" uploadstatus="1" />
-    <item modified_time="1121621204" url="templates/dialplan/priority-form-begin.inc" />
-    <item modified_time="1121621077" url="templates/dialplan/priority-form-end.inc" />
-    <item modified_time="1121621149" url="templates/dialplan/priority-form-line.inc" />
+    <item modified_time="1121621204" url="templates/dialplan/priority-form-begin.inc" uploadstatus="1" />
+    <item modified_time="1121621077" url="templates/dialplan/priority-form-end.inc" uploadstatus="1" />
+    <item modified_time="1121621149" url="templates/dialplan/priority-form-line.inc" uploadstatus="1" />
     <treestatus>
       <openfolder url="config" />
       <openfolder url="dialplan" />
index 35d3172..5ecc311 100644 (file)
@@ -23,8 +23,9 @@ $UserDetailsForm = &Horde_Form::singleton('UserDetailsForm', $vars);
 $UserDetailsFormValid = $UserDetailsForm->validate($vars, true);
 
 $UserDetailsForm->open($RENDERER, $vars, 'users.php', 'post');
+$vars->set('section', $section);
 $UserDetailsForm->preserveVarByPost($vars, "section");
-$UserDetailsForm->preserve($vars);
+// $UserDetailsForm->preserve($vars);
 require SHOUT_TEMPLATES . '/table-limiter-begin.inc';
 $RENDERER->beginActive($UserDetailsForm->getTitle());
 $RENDERER->renderFormActive($UserDetailsForm, $vars);
index b2abc97..e1813f3 100644 (file)
@@ -23,5 +23,15 @@ $UserDetailsForm = &Horde_Form::singleton('UserDetailsForm', $vars);
 $UserDetailsFormValid = $UserDetailsForm->validate($vars, true);
 if (!$UserDetailsFormValid) {
     # FIXME Handle invalid forms gracefully
+    echo "Invalid Form!";
 }
 
+$oldextension = Util::getFormData('oldextension');
+$extension = Util::getFormData('extension');
+
+#$user = &new Shout_User();
+
+#$user->define($context, $oldextension);
+#$user->set('name', Util::getFormData('name'));
+#$user->set('extension', Util::getFormData('extension'));
+#$user->set('telephone'