True, ); // stores the users profile var $profileData; var $sessionData; var $boemailadmin; function bopreferences($_restoreSession = true) { //error_log(__METHOD__." called ".print_r($_restoreSession,true).function_backtrace()); parent::sopreferences(); $this->boemailadmin = new emailadmin_bo(-1,$_restoreSession); if ($_restoreSession && !(is_array($this->sessionData) && (count($this->sessionData)>0)) ) $this->restoreSessionData(); if ($_restoreSession===false && (is_array($this->sessionData) && (count($this->sessionData)>0)) ) { //error_log(__METHOD__." Unset Session ".function_backtrace()); //make sure session data will be reset $this->sessionData = array(); $this->profileData = array(); self::saveSessionData(); } //error_log(__METHOD__.print_r($this->sessionData,true)); if (isset($this->sessionData['profileData']) && is_a($this->sessionData['profileData'],'ea_preferences')) { $this->profileData = $this->sessionData['profileData']; } } function restoreSessionData() { //error_log(__METHOD__." Session restore ".function_backtrace()); // set an own autoload function, search emailadmin for missing classes $GLOBALS['egw_info']['flags']['autoload'] = array(__CLASS__,'autoload'); $this->sessionData = (array) unserialize($GLOBALS['egw']->session->appsession('fm_preferences','felamimail')); } /** * Autoload classes from emailadmin, 'til they get autoloading conform names * * @param string $class */ static function autoload($class) { if (file_exists($file=EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php')) { include_once($file); //error_log(__METHOD__."($class) included $file"); } elseif (file_exists($file=EGW_INCLUDE_ROOT.'/felamimail/inc/class.'.$class.'.inc.php')) { include_once($file); } else { #error_log(__METHOD__."($class) failed!"); } } function saveSessionData() { $GLOBALS['egw']->session->appsession('fm_preferences','felamimail',serialize($this->sessionData)); } // get the first active user defined account function getAccountData(&$_profileData, $_accountID=NULL) { #echo "

backtrace: ".function_backtrace()."

\n"; if(!is_a($_profileData, 'ea_preferences')) die(__FILE__.': '.__LINE__); $accountData = parent::getAccountData($GLOBALS['egw_info']['user']['account_id'],$_accountID); // currently we use only the first profile available $accountData = array_shift($accountData); #_debug_array($accountData); $icServer = CreateObject('emailadmin.defaultimap'); $icServer->encryption = isset($accountData['ic_encryption']) ? $accountData['ic_encryption'] : 1; $icServer->host = $accountData['ic_hostname']; $icServer->port = isset($accountData['ic_port']) ? $accountData['ic_port'] : 143; $icServer->validatecert = isset($accountData['ic_validatecertificate']) ? (bool)$accountData['ic_validatecertificate'] : 1; $icServer->username = $accountData['ic_username']; $icServer->loginName = $accountData['ic_username']; $icServer->password = $accountData['ic_password']; $icServer->enableSieve = isset($accountData['ic_enable_sieve']) ? (bool)$accountData['ic_enable_sieve'] : 1; $icServer->sieveHost = $accountData['ic_sieve_server']; $icServer->sievePort = isset($accountData['ic_sieve_port']) ? $accountData['ic_sieve_port'] : 2000; if ($accountData['ic_folderstoshowinhome']) $icServer->folderstoshowinhome = $accountData['ic_folderstoshowinhome']; if ($accountData['ic_trashfolder']) $icServer->trashfolder = $accountData['ic_trashfolder']; if ($accountData['ic_sentfolder']) $icServer->sentfolder = $accountData['ic_sentfolder']; if ($accountData['ic_draftfolder']) $icServer->draftfolder = $accountData['ic_draftfolder']; if ($accountData['ic_templatefolder']) $icServer->templatefolder = $accountData['ic_templatefolder']; $ogServer = CreateObject('emailadmin.defaultsmtp'); $ogServer->host = $accountData['og_hostname']; $ogServer->port = isset($accountData['og_port']) ? $accountData['og_port'] : 25; $ogServer->smtpAuth = (bool)$accountData['og_smtpauth']; if($ogServer->smtpAuth) { $ogServer->username = $accountData['og_username']; $ogServer->password = $accountData['og_password']; } $identity = CreateObject('emailadmin.ea_identity'); $identity->emailAddress = $accountData['emailaddress']; $identity->realName = $accountData['realname']; //$identity->default = true; $identity->default = (bool)$accountData['active']; $identity->organization = $accountData['organization']; $identity->signature = $accountData['signatureid']; $identity->id = $accountData['id']; $isActive = (bool)$accountData['active']; return array('icServer' => $icServer, 'ogServer' => $ogServer, 'identity' => $identity, 'active' => $isActive); } function getAllAccountData(&$_profileData) { if(!is_a($_profileData, 'ea_preferences')) die(__FILE__.': '.__LINE__); $AllAccountData = parent::getAccountData($GLOBALS['egw_info']['user']['account_id'],'all'); #_debug_array($accountData); foreach ($AllAccountData as $key => $accountData) { $icServer = CreateObject('emailadmin.defaultimap'); $icServer->encryption = isset($accountData['ic_encryption']) ? $accountData['ic_encryption'] : 1; $icServer->host = $accountData['ic_hostname']; $icServer->port = isset($accountData['ic_port']) ? $accountData['ic_port'] : 143; $icServer->validatecert = isset($accountData['ic_validatecertificate']) ? (bool)$accountData['ic_validatecertificate'] : 1; $icServer->username = $accountData['ic_username']; $icServer->loginName = $accountData['ic_username']; $icServer->password = $accountData['ic_password']; $icServer->enableSieve = isset($accountData['ic_enable_sieve']) ? (bool)$accountData['ic_enable_sieve'] : 1; $icServer->sieveHost = $accountData['ic_sieve_server']; $icServer->sievePort = isset($accountData['ic_sieve_port']) ? $accountData['ic_sieve_port'] : 2000; if ($accountData['ic_folderstoshowinhome']) $icServer->folderstoshowinhome = $accountData['ic_folderstoshowinhome']; if ($accountData['ic_trashfolder']) $icServer->trashfolder = $accountData['ic_trashfolder']; if ($accountData['ic_sentfolder']) $icServer->sentfolder = $accountData['ic_sentfolder']; if ($accountData['ic_draftfolder']) $icServer->draftfolder = $accountData['ic_draftfolder']; if ($accountData['ic_templatefolder']) $icServer->templatefolder = $accountData['ic_templatefolder']; $ogServer = CreateObject('emailadmin.defaultsmtp'); $ogServer->host = $accountData['og_hostname']; $ogServer->port = isset($accountData['og_port']) ? $accountData['og_port'] : 25; $ogServer->smtpAuth = (bool)$accountData['og_smtpauth']; if($ogServer->smtpAuth) { $ogServer->username = $accountData['og_username']; $ogServer->password = $accountData['og_password']; } $identity = CreateObject('emailadmin.ea_identity'); $identity->emailAddress = $accountData['emailaddress']; $identity->realName = $accountData['realname']; //$identity->default = true; $identity->default = (bool)$accountData['active']; $identity->organization = $accountData['organization']; $identity->signature = $accountData['signatureid']; $identity->id = $accountData['id']; $isActive = (bool)$accountData['active']; $out[] = array('icServer' => $icServer, 'ogServer' => $ogServer, 'identity' => $identity, 'active' => $isActive); } return $out; } function getUserDefinedIdentities() { $profileData = $this->boemailadmin->getUserProfile('felamimail'); if(!is_a($profileData, 'ea_preferences') || !is_a($profileData->ic_server[0], 'defaultimap')) { return false; } if($profileData->userDefinedAccounts || $profileData->userDefinedIdentities) { // get user defined accounts $allAccountData = $this->getAllAccountData($profileData); if ($allAccountData) { foreach ($allAccountData as $tmpkey => $accountData) { $accountArray[] = $accountData['identity']; } return $accountArray; } } return array(); } function getPreferences($getUserDefinedProfiles=true) { if (isset($this->sessionData['profileData']) && is_a($this->sessionData['profileData'],'ea_preferences')) { $this->profileData = $this->sessionData['profileData']; } if(!is_a($this->profileData,'ea_preferences')) { $imapServerTypes = $this->boemailadmin->getIMAPServerTypes(); $profileData = $this->boemailadmin->getUserProfile('felamimail'); if(!is_a($profileData, 'ea_preferences') || !is_a($profileData->ic_server[0], 'defaultimap')) { return false; } if($profileData->userDefinedAccounts && $GLOBALS['egw_info']['user']['apps']['felamimail'] && $getUserDefinedProfiles) { // get user defined accounts $accountData = $this->getAccountData($profileData); if($accountData['active']) { // replace the global defined IMAP Server if(is_a($accountData['icServer'],'defaultimap')) $profileData->setIncomingServer($accountData['icServer'],0); // replace the global defined SMTP Server if(is_a($accountData['ogServer'],'defaultsmtp')) $profileData->setOutgoingServer($accountData['ogServer'],0); // replace the global defined identity if(is_a($accountData['identity'],'ea_identity')) { //_debug_array($profileData); $rememberIdentities = $profileData->identities; $profileData->setIdentity($accountData['identity'],0); $rememberID = $accountData['identity']->id; } } } if($profileData->userDefinedIdentities && $GLOBALS['egw_info']['user']['apps']['felamimail']) { $allUserIdentities = $this->getUserDefinedIdentities(); if (is_array($allUserIdentities)) { $i=count($allUserIdentities); $y=-1; foreach ($allUserIdentities as $tmpkey => $id) { if ($id->id != $rememberID) { $profileData->setIdentity($id,$i); $i++; } else { foreach ($rememberIdentities as $adkey => $ident) { $profileData->setIdentity($ident,$i); $profileData->identities[$i]->default = false; $profileData->identities[$i]->id = $y; $i++; $y--; } } } } } $GLOBALS['egw']->preferences->read_repository(); $userPrefs = $GLOBALS['egw_info']['user']['preferences']['felamimail']; # echo "

backtrace: ".function_backtrace()."

\n"; if (is_array($profileData->ic_server[0]->folderstoshowinhome) && !empty($profileData->ic_server[0]->folderstoshowinhome[0])) { $userPrefs['mainscreen_showfolders'] = implode(',',$profileData->ic_server[0]->folderstoshowinhome); } if (!empty($profileData->ic_server[0]->sentfolder)) $userPrefs['sentFolder'] = $profileData->ic_server[0]->sentfolder; if (!empty($profileData->ic_server[0]->trashfolder)) $userPrefs['trashFolder'] = $profileData->ic_server[0]->trashfolder; if (!empty($profileData->ic_server[0]->draftfolder)) $userPrefs['draftFolder'] = $profileData->ic_server[0]->draftfolder; if (!empty($profileData->ic_server[0]->templatefolder)) $userPrefs['templateFolder'] = $profileData->ic_server[0]->templatefolder; if(empty($userPrefs['deleteOptions'])) $userPrefs['deleteOptions'] = 'mark_as_deleted'; if (!empty($userPrefs['trash_folder'])) $userPrefs['move_to_trash'] = True; if (!empty($userPrefs['sent_folder'])) $userPrefs['move_to_sent'] = True; $userPrefs['signature'] = $userPrefs['email_sig']; unset($userPrefs['email_sig']); $profileData->setPreferences($userPrefs); #_debug_array($profileData);#exit; $this->sessionData['profileData'] = $this->profileData = $profileData; $this->saveSessionData(); #_debug_array($this->profileData); } return $this->profileData; } function saveAccountData($_icServer, $_ogServer, $_identity) { if(is_object($_icServer) && !isset($_icServer->validatecert)) { $_icServer->validatecert = true; } if(isset($_icServer->host)) { $_icServer->sieveHost = $_icServer->host; } $this->sessionData = array(); $this->saveSessionData(); return parent::saveAccountData($GLOBALS['egw_info']['user']['account_id'], $_icServer, $_ogServer, $_identity); } function deleteAccountData($_identity) { if (is_array($_identity)) { foreach ($_identity as $tmpkey => $id) { if ($id->id) { $identity[] = $id->id; } else { $identity[] = $id; } } } else { $identity = $_identity; } $this->sessionData = array(); $this->saveSessionData(); parent::deleteAccountData($GLOBALS['egw_info']['user']['account_id'], $identity); } function setProfileActive($_status, $_identity=NULL) { $this->sessionData = array(); $this->saveSessionData(); parent::setProfileActive($GLOBALS['egw_info']['user']['account_id'], $_status, $_identity); } } ?>