$filterperms = null)
{
static $entries = array();
- if (array_key_exists($searchfilters, $entries)) {
+ if (isset($entries[$searchfilters])) {
return $entries[$searchfilters];
}
{
static $entries = array();
- if (array_key_exists($context, $entries)) {
+ if (isset($entries[$context])) {
return $entries[$context];
}
$search = ldap_search($this->_LDAP,
}
// }}}
- // {{{ _getHomeContext method
+ // {{{ getHomeContext method
/**
* Returns the name of the user's default context
*
function &getDialplan($context)
{
static $dialplans = array();
- if (array_key_exists($context, $dialplans)) {
+ if (isset($dialplans[$context])) {
return $dialplans[$context];
}
'voicemailboxesmax',
'asteriskusers');
- if(is_null($extension) && !is_null($context)) {
+ if(!is_null($extension) && is_null($context)) {
return PEAR::raiseError("Extension specified but no context " .
"given.");
}
- if (!is_null($context) && array_key_exists($context, $limits)) {
+ if (!is_null($context) && isset($limits[$context])) {
if (!is_null($extension) &&
- array_key_exists($extension, $limits[$context])) {
+ isset($limits[$context][$extension])) {
return $limits[$context][$extension];
}
return $limits[$context];
# Initialize the limits with defaults
if (count($cachedlimits) < 1) {
foreach ($limits as $limit) {
- $cachedlimits[$limit] = -1;
+ $cachedlimits[$limit] = 99999;
}
}
# Collect the global limits
- $res = ldap_search($this->_LDAP,
+ $res = @ldap_search($this->_LDAP,
SHOUT_ASTERISK_BRANCH.','.$this->_params['basedn'],
'(&(objectClass=asteriskLimits)(cn=globals))',
$limits);
}
if (isset($extension)) {
- $res = ldap_search($this->_LDAP,
+ $res = @ldap_search($this->_LDAP,
SHOUT_USERS_BRANCH.','.$this->_params['basedn'],
"(&(objectClass=asteriskLimits)(voiceMailbox=$extension)".
"(context=$context))");
}
}
// }}}
+
+ // {{{
+ /**
+ * Save a user to the LDAP tree
+ *
+ * @param string $context Context to which the user should be added
+ *
+ * @param string $extension Extension to be saved
+ *
+ * @param array $userdetails Phone numbers, PIN, options, etc to be saved
+ *
+ * @return TRUE on success, PEAR::Error object on error
+ */
+ function saveUser($context, $extension, $userdetails)
+ {
+
+ $dn = $this->_params['uid'];
+ switch ($this->_params['uid']) {
+ case 'mail':
+ $uid = 'email';
+ break;
+ case 'cn':
+ $uid = 'name';
+ break;
+ case 'voiceMailbox':
+ return PEAR::raiseError("Unsupported user key/DN");
+ }
+
+
+
+ # FIXME Access Control/Authorization
+ $entry = array(
+ 'cn' => $userdetails['name'],
+ 'mail' => $userdetails['email'],
+ 'voiceMailbox' => $userdetails['newextension'],
+ 'voiceMailboxPin' => $userdetails['pin'],
+ 'context' => $context,
+ 'asteriskUserDialOptions' => $userdetails['dialopts'],
+ );
+ if (!empty($userdetails['telephonenumbers'])) {
+ $entry['telephoneNumber'] = $userdetails['telephonenumbers'];
+ }
+
+ $validusers = &$this->getUsers($context);
+ if (!isset($validusers[$extension])) {
+ # FIXME: What if just the extension changed?
+
+ # We must be adding a new user.
+ $dn .= '='.$userdetails[$uid].',';
+ $dn .= SHOUT_USERS_BRANCH.','.$this->_params['basedn'];
+
+ $entry['objectClass'] = array(
+ 'top',
+ 'person',
+ 'organizationalPerson',
+ 'inetOrgPerson',
+ 'hordePerson',
+ 'asteriskUser',
+ 'asteriskVoiceMailbox'
+ );
+
+ # Check to see if the maximum number of users for this context
+ # has been reached
+ $limits = $this->getLimits($context);
+ if (is_a($limits, "PEAR_Error")) {
+ return $limits;
+ }
+ if (count($validusers) >= $limits['asteriskusers']) {
+ print count($validusers).$limits['asteriskusers'];
+ return PEAR::raiseError('Maximum number of users reached.');
+ }
+
+ $res = ldap_add($this->_LDAP, $dn, $entry);
+ if (!$res) {
+ print $dn;
+ print_r($entry);
+ return PEAR::raiseError('LDAP Add failed: ' .
+ ldap_error($this->_LDAP));
+ }
+
+ return true;
+ } else {
+ $key = $this->_params['uid'];
+ if ($validusers[$extension][$uid] != $entry[$key]) {
+ print "need rename\n";
+ $oldrdn = $key.'='.$validusers[$extension][$uid];
+ $oldparent = SHOUT_USERS_BRANCH.','.$this->_params['basedn'];
+ $newrdn = $key.'='.$entry[$key];
+ $res = ldap_rename($this->_LDAP, "$oldrdn,$oldparent",
+ $newrdn, $oldparent, true);
+ if (!$res) {
+ print $oldrdn;
+ print $newrdn;
+ print_r($entry);
+ return PEAR::raiseError('LDAP Rename failed: ' .
+ ldap_error($this->_LDAP));
+ }
+ }
+ $dn = $key.'='.$entry[$key];
+ $dn .= ','.SHOUT_USERS_BRANCH.','.$this->_params['basedn'];
+ $res = ldap_modify($this->_LDAP, $dn, $entry);
+ print_r($entry);
+ if (!$res) {
+ print $dn;
+ print_r($entry);
+ return PEAR::raiseError('LDAP Modify failed: ' .
+ ldap_error($this->_LDAP));
+ }
+ return true;
+ }
+ }
// {{{ _connect method
/**
* @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 {
parent::Horde_Form($vars, _("$formtitle - Context: $context"));
$this->addHidden('', 'context', 'text', true);
- $this->addHidden('', 'oldextension', 'text', true);
- $vars->set('oldextension', $extension);
+ $this->addHidden('', 'curextension', 'text', true);
+ $vars->set('curextension', $extension);
$this->addHidden('', 'action', 'text', true);
$vars->set('action', 'save');
$this->addVariable(_("Full Name"), 'name', 'text', true);
- $this->addVariable(_("Extension"), 'extension', 'int', true);
- $this->addVariable(_("E-Mail Address"), 'email', 'text', false);
+ $this->addVariable(_("Extension"), 'newextension', 'int', true);
+ $this->addVariable(_("E-Mail Address"), 'email', '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);
$vars->set('name', $userdetails['name']);
$vars->set('email', @$userdetails['email']);
$vars->set('pin', $userdetails['mailboxpin']);
+ $vars->set('newextension', $vars->get('extension'));
$i = 1;
foreach($userdetails['phonenumbers'] as $number) {
<item url="templates/" uploadstatus="2" />
<item url="lib/" uploadstatus="2" />
<item url="lib/Driver/" uploadstatus="2" />
- <item modified_time="1121832576" url="lib/Driver/ldap.php" uploadstatus="2" />
+ <item modified_time="1122529043" 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="1121832576" url="lib/Driver/ldap.php" />
+ <uploadeditem upload_time="1122529043" 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="1121832752" url="lib/User.php" />
+ <uploadeditem upload_time="1122514535" 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="1121404120" url="users/add.php" />
<uploadeditem upload_time="1121821098" url="users/edit.php" />
<uploadeditem upload_time="1121396278" url="users/index.php" />
- <uploadeditem upload_time="1121825812" url="users/save.php" />
+ <uploadeditem upload_time="1122514769" 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="1121832752" url="lib/User.php" uploadstatus="1" />
+ <item modified_time="1122514535" 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="1121825812" url="users/save.php" uploadstatus="1" />
+ <item modified_time="1122514769" url="users/save.php" uploadstatus="1" />
<item modified_time="1121574328" url="themes/screen.css" uploadstatus="1" />
<item modified_time="1121821098" url="users/edit.php" uploadstatus="1" />
<item modified_time="1121578573" url="templates/table-limiter-begin.inc" uploadstatus="1" />
$vars = &Variables::getDefaultVariables();
$formname = $vars->get('formname');
-print_r($vars);
$UserDetailsForm = &Horde_Form::singleton('UserDetailsForm', $vars);
$UserDetailsFormValid = $UserDetailsForm->validate($vars, true);
echo "Invalid Form!";
}
-$oldextension = Util::getFormData('oldextension');
-$extension = Util::getFormData('extension');
+$name = Util::getFormData('name');
+$curextension = Util::getFormData('curextension');
+$newextension = Util::getFormData('newextension');
+$email = Util::getFormData('email');
+$pin = Util::getFormData('pin');
-#$user = &new Shout_User();
-#$user->define($context, $oldextension);
-#$user->set('name', Util::getFormData('name'));
-#$user->set('extension', Util::getFormData('extension'));
-#$user->set('telephone'
+$limits = $shout->getLimits($context, $curextension);
+
+$userdetails = array("newextension" => $newextension,
+ "name" => $name,
+ "pin" => $pin,
+ "email" => $email);
+
+$i = 1;
+$userdetails['telephonenumbers'] = array();
+while ($i <= $limits['telephonenumbersmax']) {
+ $tmp = Util::getFormData("telephone$i");
+ if (!empty($tmp)) {
+ $userdetails['telephonenumbers'][] = $tmp;
+ }
+ $i++;
+}
+
+$userdetails['dialopts'] = array();
+if (Util::getFormData('moh')) {
+ $userdetails['dialopts'][] = 'm';
+}
+if (Util::getFormData('transfer')) {
+ $userdetails['dialopts'][] = 't';
+}
+
+$res = $shout->saveUser($context, $curextension, $userdetails);
+if (is_a($res, 'PEAR_Error')) {
+ print $res->getMessage();
+}
\ No newline at end of file