mbAvailable = TRUE; } $this->restoreSessionData(); // construtor for Net_IMAP stuff $this->Net_IMAPProtocol(); } /** * adds a account on the imap server * * @param array $_hookValues * @return bool true on success, false on failure */ function addAccount($_hookValues) { return true; } /** * updates a account on the imap server * * @param array $_hookValues * @return bool true on success, false on failure */ function updateAccount($_hookValues) { return true; } /** * deletes a account on the imap server * * @param array $_hookValues * @return bool true on success, false on failure */ function deleteAccount($_hookValues) { return true; } function disconnect() { parent::disconnect(); $this->_isConnected = false; } /** * converts a foldername from current system charset to UTF7 * * @param string $_folderName * @return string the encoded foldername */ function encodeFolderName($_folderName) { if($this->mbAvailable) { return mb_convert_encoding($_folderName, "UTF7-IMAP", $GLOBALS['egw']->translation->charset()); } // if not // we can encode only from ISO 8859-1 return imap_utf7_encode($_folderName); } /** * returns the supported capabilities of the imap server * return false if the imap server does not support capabilities * * @return array the supported capabilites */ function getCapabilities() { if(!is_array($this->sessionData['capabilities'][$this->host])) { return false; } return $this->sessionData['capabilities'][$this->host]; } /** * return the delimiter used by the current imap server * * @return string the delimimiter */ function getDelimiter() { return isset($this->sessionData['delimiter'][$this->host]) ? $this->sessionData['delimiter'][$this->host] : $this->mailboxDelimiter; } /** * Create transport string * * @return string the transportstring */ function _getTransportString() { if($this->encryption == 2) { $connectionString = "tls://". $this->host; } elseif($this->encryption == 3) { $connectionString = "ssl://". $this->host; } else { // no tls $connectionString = $this->host; } return $connectionString; } /** * Create the options array for SSL/TLS connections * * @return string the transportstring */ function _getTransportOptions() { if($this->validatecert === false) { if($this->encryption == 2) { return array( 'tls' => array( 'verify_peer' => false, 'allow_self_signed' => true, ) ); } elseif($this->encryption == 3) { return array( 'ssl' => array( 'verify_peer' => false, 'allow_self_signed' => true, ) ); } } else { if($this->encryption == 2) { return array( 'tls' => array( 'verify_peer' => true, 'allow_self_signed' => false, ) ); } elseif($this->encryption == 3) { return array( 'ssl' => array( 'verify_peer' => true, 'allow_self_signed' => false, ) ); } } return null; } /** * Create mailbox string from given mailbox-name and user-name * * @param string $_folderName='' * @return string utf-7 encoded (done in getMailboxName) */ function getUserMailboxString($_username, $_folderName='') { $nameSpaces = $this->getNameSpaces(); if(!isset($nameSpaces['others'])) { return false; } $username = $_username; if($this->loginType == 'vmailmgr') { $username .= '@'. $this->domainName; } $mailboxString = $nameSpaces['others'][0]['name'] . $username . (!empty($_folderName) ? $nameSpaces['others'][0]['delimiter'] . $_folderName : ''); return $mailboxString; } /** * get list of namespaces * * @return array array containing information about namespace */ function getNameSpaces() { if(!$this->_connected) { return false; } $retrieveDefault = false; if($this->hasCapability('NAMESPACE')) { $nameSpace = $this->getNamespace(); if( PEAR::isError($nameSpace)) { if ($this->debug) error_log("emailadmin::defaultimap->getNameSpaces:".print_r($nameSpace,true)); $retrieveDefault = true; } else { $result = array(); $result['personal'] = $nameSpace['personal']; if(is_array($nameSpace['others'])) { $result['others'] = $nameSpace['others']; } if(is_array($nameSpace['shared'])) { $result['shared'] = $nameSpace['shared']; } } } if (!$this->hasCapability('NAMESPACE') || $retrieveDefault) { $delimiter = $this->getHierarchyDelimiter(); if( PEAR::isError($delimiter)) $delimiter = '/'; $result['personal'] = array( 0 => array( 'name' => '', 'delimiter' => $delimiter ) ); } return $result; } /** * returns the quota for given foldername * gets quota for the current user only * * @param string $_folderName * @return string the current quota for this folder */ # function getQuota($_folderName) # { # if(!is_resource($this->mbox)) { # $this->openConnection(); # } # # if(function_exists('imap_get_quotaroot') && $this->supportsCapability('QUOTA')) { # $quota = @imap_get_quotaroot($this->mbox, $this->encodeFolderName($_folderName)); # if(is_array($quota) && isset($quota['STORAGE'])) { # return $quota['STORAGE']; # } # } # # return false; # } /** * return the quota for another user * used by admin connections only * * @param string $_username * @return string the quota for specified user */ function getQuotaByUser($_username) { $mailboxName = $this->getUserMailboxString($_username); $storageQuota = $this->getStorageQuota($mailboxName); if(is_array($storageQuota) && isset($storageQuota['QMAX'])) { return (int)$storageQuota['QMAX']; } return false; } /** * returns information about a user * currently only supported information is the current quota * * @param string $_username * @return array userdata */ function getUserData($_username) { $this->openConnection(true); $userData = array(); if($quota = $this->getQuotaByUser($_username)) { $userData['quotaLimit'] = $quota / 1024; } $this->disconnect(); return $userData; } /** * opens a connection to a imap server * * @param bool $_adminConnection create admin connection if true * * @return resource the imap connection */ function openConnection($_adminConnection=false) { unset($this->_connectionErrorObject); if($_adminConnection) { $username = $this->adminUsername; $password = $this->adminPassword; $options = ''; $this->isAdminConnection = true; } else { $username = $this->loginName; $password = $this->password; $options = $_options; $this->isAdminConnection = false; } $this->setStreamContextOptions($this->_getTransportOptions()); $this->setTimeout(20); if( PEAR::isError($status = $this->connect($this->_getTransportString(), $this->port, $this->encryption == 1)) ) { $this->_connectionErrorObject = $status; return false; } if( PEAR::isError($status = $this->login($username, $password, TRUE, !$this->isAdminConnection)) ) { $this->_connectionErrorObject = $status; return false; } return true; } /** * restore session variable * */ function restoreSessionData() { $this->sessionData = $GLOBALS['egw']->session->appsession('imap_session_data'); } /** * save session variable * */ function saveSessionData() { $GLOBALS['egw']->session->appsession('imap_session_data','',$this->sessionData); } /** * set userdata * * @param string $_username username of the user * @param int $_quota quota in bytes * @return bool true on success, false on failure */ function setUserData($_username, $_quota) { return true; } /** * check if imap server supports given capability * * @param string $_capability the capability to check for * @return bool true if capability is supported, false if not */ function supportsCapability($_capability) { return $this->hasCapability($_capability); } } ?>