From 2517192f055b6ef9e5c07bdedb3bef14514abe26 Mon Sep 17 00:00:00 2001 From: Lars Kneschke Date: Tue, 6 Jun 2006 10:24:49 +0000 Subject: [PATCH] bug reported by admlange spelling error --- emailadmin/inc/class.bo.inc.php | 669 ++++++++++++++++++++++++++++++++ 1 file changed, 669 insertions(+) create mode 100644 emailadmin/inc/class.bo.inc.php diff --git a/emailadmin/inc/class.bo.inc.php b/emailadmin/inc/class.bo.inc.php new file mode 100644 index 0000000000..6b4a709734 --- /dev/null +++ b/emailadmin/inc/class.bo.inc.php @@ -0,0 +1,669 @@ +soemailadmin =& CreateObject('emailadmin.so'); + + $this->SMTPServerType = array( + '1' => array( + 'fieldNames' => array( + 'smtpServer', + 'smtpPort', + 'smtpAuth', + 'smtpType' + ), + 'description' => lang('standard SMTP-Server'), + 'classname' => 'defaultsmtp' + ), + '2' => array( + 'fieldNames' => array( + 'smtpServer', + 'smtpPort', + 'smtpAuth', + 'smtpType', + 'editforwardingaddress', + 'smtpLDAPServer', + 'smtpLDAPAdminDN', + 'smtpLDAPAdminPW', + 'smtpLDAPBaseDN', + 'smtpLDAPUseDefault' + ), + 'description' => lang('Postfix with LDAP'), + 'classname' => 'postfixldap' + ) + ); + + $this->IMAPServerType = array( + '1' => array( + 'fieldNames' => array( + 'imapServer', + 'imapPort', + 'imapType', + 'imapLoginType', + 'imapTLSEncryption', + 'imapTLSAuthentication', + 'imapoldcclient' + ), + 'description' => lang('standard POP3 server'), + 'protocol' => 'pop3', + 'classname' => 'defaultpop' + ), + '2' => array( + 'fieldNames' => array( + 'imapServer', + 'imapPort', + 'imapType', + 'imapLoginType', + 'imapTLSEncryption', + 'imapTLSAuthentication', + 'imapoldcclient' + ), + 'description' => lang('standard IMAP server'), + 'protocol' => 'imap', + 'classname' => 'defaultimap' + ), + '3' => array( + 'fieldNames' => array( + 'imapServer', + 'imapPort', + 'imapType', + 'imapLoginType', + 'imapTLSEncryption', + 'imapTLSAuthentication', + 'imapoldcclient', + 'imapEnableCyrusAdmin', + 'imapAdminUsername', + 'imapAdminPW', + 'imapEnableSieve', + 'imapSieveServer', + 'imapSievePort' + ), + 'description' => lang('Cyrus IMAP Server'), + 'protocol' => 'imap', + 'classname' => 'cyrusimap' + ) + ); + + if ($_restoreSesssion) $this->restoreSessionData(); + + if($_profileID >= 0) + { + $this->profileID = $_profileID; + + $this->profileData = $this->getProfile($_profileID); + + $this->imapClass = $this->IMAPServerType[$this->profileData['imapType']]['classname']; + $this->smtpClass = $this->SMTPServerType[$this->profileData['smtpType']]['classname']; + } + } + + function addAccount($_hookValues) + { + $this->profileData = $this->getUserProfile('felamimail', $_hookValues['account_groups']); + + $this->imapClass = $this->IMAPServerType[$this->profileData['imapType']]['classname']; + $this->smtpClass = $this->SMTPServerType[$this->profileData['smtpType']]['classname']; + + + if (!empty($this->imapClass)) + { + ExecMethod("emailadmin.".$this->imapClass.".addAccount",$_hookValues,3,$this->profileData); + } + + if (!empty($this->smtpClass)) + { + ExecMethod("emailadmin.".$this->smtpClass.".addAccount",$_hookValues,3,$this->profileData); + } + } + + function deleteAccount($_hookValues) + { + $this->profileData = $this->getUserProfile('felamimail', $_hookValues['account_groups']); + + $this->imapClass = $this->IMAPServerType[$this->profileData['imapType']]['classname']; + $this->smtpClass = $this->SMTPServerType[$this->profileData['smtpType']]['classname']; + + if (!empty($this->imapClass)) + { + ExecMethod("emailadmin.".$this->imapClass.".deleteAccount",$_hookValues,3,$this->profileData); + } + + if (!empty($this->smtpClass)) + { + ExecMethod("emailadmin.".$this->smtpClass.".deleteAccount",$_hookValues,3,$this->profileData); + } + } + + function deleteProfile($_profileID) + { + $this->soemailadmin->deleteProfile($_profileID); + } + + function encodeHeader($_string, $_encoding='q') + { + switch($_encoding) + { + case "q": + if(!preg_match("/[\x80-\xFF]/",$_string)) + { + // nothing to quote, only 7 bit ascii + return $_string; + } + + $string = imap_8bit($_string); + $stringParts = explode("=\r\n",$string); + while(list($key,$value) = each($stringParts)) + { + if(!empty($retString)) $retString .= " "; + $value = str_replace(" ","_",$value); + // imap_8bit does not convert "?" + // it does not need, but it should + $value = str_replace("?","=3F",$value); + $retString .= "=?".strtoupper($this->displayCharset)."?Q?".$value."?="; + } + #exit; + return $retString; + break; + default: + return $_string; + } + } + + function getAccountEmailAddress($_accountName, $_profileID) + { + $profileData = $this->getProfile($_profileID); + + $smtpClass = $this->SMTPServerType[$profileData['smtpType']]['classname']; + + return empty($smtpClass) ? False : ExecMethod("emailadmin.$smtpClass.getAccountEmailAddress",$_accountName,3,$profileData); + } + + function getFieldNames($_serverTypeID, $_class) + { + switch($_class) + { + case 'imap': + return $this->IMAPServerType[$_serverTypeID]['fieldNames']; + break; + case 'smtp': + return $this->SMTPServerType[$_serverTypeID]['fieldNames']; + break; + } + } + +# function getIMAPClass($_profileID) +# { +# if(!is_object($this->imapClass)) +# { +# $profileData = $this->getProfile($_profileID); +# $this->imapClass =& CreateObject('emailadmin.cyrusimap',$profileData); +# } +# +# return $this->imapClass; +# } + + function getIMAPServerTypes() + { + foreach($this->IMAPServerType as $key => $value) + { + $retData[$key]['description'] = $value['description']; + $retData[$key]['protocol'] = $value['protocol']; + } + + return $retData; + } + + function getLDAPStorageData($_serverid) + { + $storageData = $this->soemailadmin->getLDAPStorageData($_serverid); + return $storageData; + } + + function getMailboxString($_folderName) + { + if (!empty($this->imapClass)) + { + return ExecMethod("emailadmin.".$this->imapClass.".getMailboxString",$_folderName,3,$this->profileData); + } + else + { + return false; + } + } + + function getProfile($_profileID) + { + $profileData = $this->soemailadmin->getProfileList($_profileID); + $found = false; + if (is_array($profileData) && count($profileData)) + { + foreach($profileData as $n => $data) + { + if ($data['ProfileID'] == $_profileID) + { + $found = $n; + break; + } + } + } + if ($found === false) // no existing profile selected + { + if (is_array($profileData) && count($profileData)) // if we have a profile use that + { + reset($profileData); + list($found,$data) = each($profileData); + $this->profileID = $_profileID = $data['profileID']; + } + elseif ($GLOBALS['egw_info']['server']['smtp_server']) // create a default profile, from the data in the api config + { + $this->profileID = $_profileID = $this->soemailadmin->addProfile(array( + 'description' => $GLOBALS['egw_info']['server']['smtp_server'], + 'defaultDomain' => $GLOBALS['egw_info']['server']['mail_suffix'], + 'organisationName' => '', + 'userDefinedAccounts' => '', + ),array( + 'smtpServer' => $GLOBALS['egw_info']['server']['smtp_server'], + 'smtpPort' => $GLOBALS['egw_info']['server']['smtp_port'], + 'smtpAuth' => '', + 'smtpType' => '1', + ),array( + 'imapServer' => $GLOBALS['egw_info']['server']['mail_server'] ? + $GLOBALS['egw_info']['server']['mail_server'] : $GLOBALS['egw_info']['server']['smtp_server'], + 'imapPort' => '143', + 'imapType' => '2', // imap + 'imapLoginType' => $GLOBALS['egw_info']['server']['mail_login_type'] ? + $GLOBALS['egw_info']['server']['mail_login_type'] : 'standard', + 'imapTLSEncryption' => '', + 'imapTLSAuthentication' => '', + 'imapoldcclient' => '', + )); + $profileData[$found = 0] = array( + 'smtpType' => '1', + 'imapType' => '2', + ); + } + } + $fieldNames = array(); + if (isset($profileData[$found])) + { + $fieldNames = array_merge($this->SMTPServerType[$profileData[$found]['smtpType']]['fieldNames'], + $this->IMAPServerType[$profileData[$found]['imapType']]['fieldNames']); + } + $fieldNames[] = 'description'; + $fieldNames[] = 'defaultDomain'; + $fieldNames[] = 'profileID'; + $fieldNames[] = 'organisationName'; + $fieldNames[] = 'userDefinedAccounts'; + $fieldNames[] = 'ea_appname'; + $fieldNames[] = 'ea_group'; + + return $this->soemailadmin->getProfile($_profileID, $fieldNames); + } + + function getProfileList($_profileID='') + { + return $this->soemailadmin->getProfileList($_profileID); + } + +# function getSMTPClass($_profileID) +# { +# if(!is_object($this->smtpClass)) +# { +# $profileData = $this->getProfile($_profileID); +# $this->smtpClass =& CreateObject('emailadmin.postfixldap',$profileData); +# } +# +# return $this->smtpClass; +# } + + function getSMTPServerTypes() + { + foreach($this->SMTPServerType as $key => $value) + { + $retData[$key] = $value['description']; + } + + return $retData; + } + + function getUserProfile($_appName='', $_groups='') + { + $appName = ($_appName != '' ? $_appName : $GLOBALS['egw_info']['flags']['currentapp']); + if(!is_array($_groups)) + { + // initialize with 0 => means no group id + $groups = array(0); + $userGroups = $GLOBALS['egw']->accounts->membership($GLOBALS['egw_info']['user']['account_id']); + foreach((array)$userGroups as $groupInfo) + { + $groups[] = $groupInfo['account_id']; + } + } + else + { + $groups = $_groups; + } + + return $this->soemailadmin->getUserProfile($appName, $groups); + } + + function getUserData($_accountID, $_usecache) + { + if ($_usecache) + { + $userData = $this->userSessionData[$_accountID]; + } + else + { + $userData = $this->soemailadmin->getUserData($_accountID); + $bofelamimail =& CreateObject('felamimail.bofelamimail'); + $bofelamimail->openConnection('','',true); + $userQuota = + $bofelamimail->imapGetQuota($GLOBALS['egw']->accounts->id2name($_accountID)); + if(is_array($userQuota)) + { + $userData['quotaLimit'] = $userQuota['limit']; + } + $bofelamimail->closeConnection(); + $this->userSessionData[$_accountID] = $userData; + $this->saveSessionData(); + } + return $userData; + } + + function restoreSessionData() + { + $this->sessionData = $GLOBALS['egw']->session->appsession('session_data'); + $this->userSessionData = $GLOBALS['egw']->session->appsession('user_session_data'); + } + + function saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy) + { + if (!empty($this->smtpClass)) + { + $smtpClass = &CreateObject('emailadmin.'.$this->smtpClass,$this->profileID); + $smtpClass->saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy); + } + + } + + /** + * called by the validation hook in setup + * + * @param array $settings following keys: mail_server, mail_server_type {IMAP|IMAPS|POP-3|POP-3S}, + * mail_login_type {standard|vmailmgr}, mail_suffix (domain), smtp_server, smtp_port, smtp_auth_user, smtp_auth_passwd + */ + function setDefaultProfile($settings) + { + if (($profiles = $this->soemailadmin->getProfileList(0,true))) + { + $profile = array_shift($profiles); + } + else + { + $profile = array( + 'smtpType' => 1, + 'description' => 'default profile (created by setup)', + 'ea_appname' => '', + 'ea_group' => 0, + ); + } + foreach(array( + 'mail_server' => 'imapServer', + 'mail_server_type' => array( + 'imap' => array( + 'imapType' => 2, + 'imapPort' => 143, + 'imapTLSEncryption' => null, + ), + 'imaps' => array( + 'imapType' => 2, + 'imapPort' => 993, + 'imapTLSEncryption' => 'yes', + ), + 'pop3' => array( + 'imapType' => 1, + 'imapPort' => 110, + 'imapTLSEncryption' => null, + ), + 'pop3s' => array( + 'imapType' => 1, + 'imapPort' => 995, + 'imapTLSEncryption' => 'yes', + ), + ), + 'mail_login_type' => 'imapLoginType', + 'mail_suffix' => 'defaultDomain', + 'smtp_server' => 'smtpServer', + 'smtp_port' => 'smtpPort', + ) as $setup_name => $ea_name_data) + { + if (!is_array($ea_name_data)) + { + $profile[$ea_name_data] = $settings[$setup_name]; + } + else + { + foreach($ea_name_data as $setup_val => $ea_data) + { + if ($setup_val == $settings[$setup_name]) + { + foreach($ea_data as $var => $val) + { + if ($var != 'imapType' || $val != 2 || $profile[$var] < 3) // dont kill special imap server types + { + $profile[$var] = $val; + } + } + break; + } + } + } + } + $this->soemailadmin->updateProfile($profile); + //echo "

EMailAdmin profile update: ".print_r($profile,true)."

\n"; exit; + } + + function saveProfile($_globalSettings, $_smtpSettings, $_imapSettings) + { + if(!isset($_globalSettings['profileID'])) + { + $_globalSettings['ea_order'] = count($this->getProfileList()) + 1; + $this->soemailadmin->addProfile($_globalSettings, $_smtpSettings, $_imapSettings); + } + else + { + $this->soemailadmin->updateProfile($_globalSettings, $_smtpSettings, $_imapSettings); + } + $all = $_globalSettings+$_smtpSettings+$_imapSettings; + if (!$all['ea_group'] && !$all['ea_application']) // standard profile update eGW config + { + $new_config = array(); + foreach(array( + 'imapServer' => 'mail_server', + 'imapType' => 'mail_server_type', + 'imapLoginType' => 'mail_login_type', + 'defaultDomain' => 'mail_suffix', + 'smtpServer' => 'smtp_server', + 'smtpPort' => 'smtp_port', + ) as $ea_name => $config_name) + { + if (isset($all[$ea_name])) + { + if ($ea_name != 'imapType') + { + $new_config[$config_name] = $all[$ea_name]; + } + else // imap type + { + $new_config[$config_name] = ($all['imapType'] == 1 ? 'pop3' : 'imap').($all['imapTLSEncryption'] ? 's' : ''); + } + } + } + if (count($new_config)) + { + $config =& CreateObject('phpgwapi.config','phpgwapi'); + + foreach($new_config as $name => $value) + { + $config->save_value($name,$value,'phpgwapi'); + } + //echo "

eGW configuration update: ".print_r($new_config,true)."

\n"; + } + } + } + + function saveSessionData() + { + $GLOBALS['egw']->session->appsession('session_data','',$this->sessionData); + $GLOBALS['egw']->session->appsession('user_session_data','',$this->userSessionData); + } + + function saveUserData($_accountID, $_formData, $_boAction) + { + $this->userSessionData[$_accountID]['mailLocalAddress'] = $_formData["mailLocalAddress"]; + $this->userSessionData[$_accountID]['accountStatus'] = $_formData["accountStatus"]; + $this->userSessionData[$_accountID]['deliveryMode'] = $_formData["deliveryMode"]; + $this->userSessionData[$_accountID]['qmailDotMode'] = $_formData["qmailDotMode"]; + $this->userSessionData[$_accountID]['deliveryProgramPath'] = $_formData["deliveryProgramPath"]; + $this->userSessionData[$_accountID]['quotaLimit'] = $_formData["quotaLimit"]; + + switch ($_boAction) + { + case 'add_mailAlternateAddress': + if (is_array($this->userSessionData[$_accountID]['mailAlternateAddress'])) + { + $count = count($this->userSessionData[$_accountID]['mailAlternateAddress']); + } + else + { + $count = 0; + $this->userSessionData[$_accountID]['mailAlternateAddress'] = array(); + } + + $this->userSessionData[$_accountID]['mailAlternateAddress'][$count] = + $_formData['add_mailAlternateAddress']; + + $this->saveSessionData(); + + break; + + case 'remove_mailAlternateAddress': + $i=0; + + while(list($key, $value) = @each($this->userSessionData[$_accountID]['mailAlternateAddress'])) + { + #print ".. $key: $value
"; + if ($key != $_formData['remove_mailAlternateAddress']) + { + $newMailAlternateAddress[$i]=$value; + #print "!! $i: $value
"; + $i++; + } + } + $this->userSessionData[$_accountID]['mailAlternateAddress'] = $newMailAlternateAddress; + + $this->saveSessionData(); + + break; + + case 'add_mailRoutingAddress': + if (is_array($this->userSessionData[$_accountID]['mailRoutingAddress'])) + { + $count = count($this->userSessionData[$_accountID]['mailRoutingAddress']); + } + else + { + $count = 0; + $this->userSessionData[$_accountID]['mailRoutingAddress'] = array(); + } + + $this->userSessionData[$_accountID]['mailRoutingAddress'][$count] = + $_formData['add_mailRoutingAddress']; + + $this->saveSessionData(); + + break; + + case 'remove_mailRoutingAddress': + $i=0; + + while(list($key, $value) = @each($this->userSessionData[$_accountID]['mailRoutingAddress'])) + { + if ($key != $_formData['remove_mailRoutingAddress']) + { + $newMailRoutingAddress[$i]=$value; + $i++; + } + } + $this->userSessionData[$_accountID]['mailRoutingAddress'] = $newMailRoutingAddress; + + $this->saveSessionData(); + + break; + + case 'save': + $this->soemailadmin->saveUserData( + $_accountID, + $this->userSessionData[$_accountID]); + $bofelamimail =& CreateObject('felamimail.bofelamimail'); + $bofelamimail->openConnection('','',true); + $bofelamimail->imapSetQuota($GLOBALS['egw']->accounts->id2name($_accountID), + $this->userSessionData[$_accountID]['quotaLimit']); + $bofelamimail->closeConnection(); + $GLOBALS['egw']->accounts->cache_invalidate($_accountID); + + + break; + } + } + + function setOrder($_order) + { + if(is_array($_order)) { + $this->soemailadmin->setOrder($_order); + } + } + + function updateAccount($_hookValues) + { + $this->profileData = $this->getUserProfile('felamimail', $_hookValues['account_groups']); + + $this->imapClass = $this->IMAPServerType[$this->profileData['imapType']]['classname']; + $this->smtpClass = $this->SMTPServerType[$this->profileData['smtpType']]['classname']; + + if (!empty($this->imapClass)) + { + ExecMethod("emailadmin.".$this->imapClass.".updateAccount",$_hookValues,3,$this->profileData); + } + + if (!empty($this->smtpClass)) + { + ExecMethod("emailadmin.".$this->smtpClass.".updateAccount",$_hookValues,3,$this->profileData); + } + } + + } +?>