egroupware/admin/inc/class.soldap_mgr.inc.php
2005-11-26 14:04:40 +00:00

170 lines
4.8 KiB
PHP

<?php
/***************************************************************************\
* EGroupWare - LDAPManager *
* http://www.egroupware.org *
* Written by : Andreas Krause (ak703@users.sourceforge.net *
* based on EmailAdmin by Lars Kneschke [lkneschke@egroupware.org] *
* ------------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\***************************************************************************/
class soldap_mgr
{
function soldap_mgr()
{
$this->db = clone($GLOBALS['egw']->db);
include(EGW_INCLUDE_ROOT.'/emailadmin/setup/tables_current.inc.php');
$this->tables = &$phpgw_baseline;
unset($phpgw_baseline);
$this->table = &$this->tables['phpgw_emailadmin'];
}
function getUserData($_accountID)
{
$ldap = $GLOBALS['egw']->common->ldapConnect();
$filter = "(&(uidnumber=$_accountID))";
$sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],$filter);
if ($sri)
{
$allValues = ldap_get_entries($ldap, $sri);
if ($allValues['count'] > 0)
{
#print 'found something<br>';
$userData['mail'] = $allValues[0]['mail'][0];
$userData['mailAlternateAddress'] = $allValues[0]['mailalternateaddress'];
$userData['accountStatus'] = $allValues[0]['accountstatus'][0];
$userData['mailForwardingAddress'] = $allValues[0]['mailforwardingaddress'][0];
$userData['deliveryMode'] = $allValues[0]['deliverymode'][0];
unset($userData['mailAlternateAddress']['count']);
unset($userData['mailForwardingAddress']['count']);
return $userData;
}
}
// if we did not return before, return false
return false;
}
function saveUserData($_accountID, $_accountData)
{
$ldap = $GLOBALS['egw']->common->ldapConnect();
// need to be fixed
if(is_numeric($_accountID))
{
$filter = "uidnumber=$_accountID";
}
else
{
$filter = "uid=$_accountID";
}
$sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],$filter);
if ($sri)
{
$allValues = ldap_get_entries($ldap, $sri);
$accountDN = $allValues[0]['dn'];
$uid = $allValues[0]['uid'][0];
$homedirectory = $allValues[0]['homedirectory'][0];
$objectClasses = $allValues[0]['objectclass'];
unset($objectClasses['count']);
}
else
{
return false;
}
if(empty($homedirectory))
{
$homedirectory = "/home/".$uid;
}
// the old code for qmail ldap
$newData = array
(
'mail' => $_accountData['mail'],
'mailAlternateAddress' => $_accountData['mailAlternateAddress'],
'mailForwardingAddress' => $_accountData['mailForwardingAddress'],
// 'homedirectory' => $homedirectory,
// 'mailMessageStore' => $homedirectory.'/Maildir/',
// 'gidnumber' => '1000',
// 'qmailDotMode' => $_accountData['qmailDotMode'],
// 'deliveryProgramPath' => $_accountData['deliveryProgramPath']
);
if(!in_array('qmailUser',$objectClasses) &&
!in_array('qmailuser',$objectClasses))
{
$objectClasses[] = 'qmailuser';
}
// the new code for postfix+cyrus+ldap
$newData = array
(
'mail' => $_accountData['mail'],
'accountStatus' => $_accountData['accountStatus'],
'objectclass' => $objectClasses
);
if(is_array($_accountData['mailAlternateAddress']))
{
$newData['mailAlternateAddress'] = $_accountData['mailAlternateAddress'];
}
else
{
$newData['mailAlternateAddress'] = array();
}
if($_accountData['accountStatus'] == 'active')
{
$newData['accountStatus'] = 'active';
}
else
{
$newData['accountStatus'] = 'disabled';
}
/*
if(!empty($_accountData['deliveryMode']))
{
$newData['deliveryMode'] = $_accountData['deliveryMode'];
}
else
{
$newData['deliveryMode'] = array();
}
*/
// if(is_array($_accountData['mailForwardingAddress']))
// {
$newData['mailForwardingAddress'] = $_accountData['mailForwardingAddress'];
// }
// else
// {
// $newData['mailForwardingAddress'] = array();
// }
#print "<br>DN: $accountDN<br>";
ldap_mod_replace ($ldap, $accountDN, $newData);
// also update the account_email field in egw_accounts
// when using sql account storage
if($GLOBALS['egw_info']['server']['account_repository'] == 'sql')
{
$this->db->update('egw_accounts',array(
'account_email' => $_accountData['mail']
),
array(
'account_id' => $_accountID
),__LINE__,__FILE__
);
}
}
}
?>