$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];
}
// }}}
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];
+ }
}
// }}}
*
* @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 {
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);
# 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')));
<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" />
<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" />
$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);
$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'