diff --git a/emailadmin/inc/class.emailadmin_imapbase.inc.php b/emailadmin/inc/class.emailadmin_imapbase.inc.php index 7bc6095f0f..b1a4abca96 100644 --- a/emailadmin/inc/class.emailadmin_imapbase.inc.php +++ b/emailadmin/inc/class.emailadmin_imapbase.inc.php @@ -2288,24 +2288,20 @@ class emailadmin_imapbase { $_subscribedOnly = false; } - #$inboxData->attributes = 64; $inboxFolderObject = array('INBOX' => $inboxData); - #_debug_array($folders); //$nameSpace = $this->icServer->getNameSpaces(); $nameSpace = $this->_getNameSpaces(); + $fetchedAllInOneGo = false; //error_log(__METHOD__.__LINE__.array2string($nameSpace)); - //_debug_array($nameSpace); - //_debug_array($delimiter); if (is_array($nameSpace)) { foreach($nameSpace as $k => $singleNameSpace) { $type = $singleNameSpace['type']; - $prefix_present = $singleNameSpace['prefix_present']; // the following line (assumption that for the same namespace the delimiter should be equal) may be wrong $foldersNameSpace[$type]['delimiter'] = $singleNameSpace['delimiter']; - if(is_array($singleNameSpace)) { + if(is_array($singleNameSpace)&&$fetchedAllInOneGo==false) { // fetch and sort the subscribed folders // we alway fetch the subscribed, as this provides the only way to tell // if a folder is subscribed or not @@ -2313,10 +2309,14 @@ class emailadmin_imapbase { try { - $subscribedMailboxes = $this->icServer->listSubscribedMailboxes($singleNameSpace['prefix'],0,true); - if (empty($subscribedMailboxes) && $type == 'shared') + $subscribedMailboxes = $this->icServer->listSubscribedMailboxes('',0,true); + if (!empty($subscribedMailboxes)) { - $subscribedMailboxes = $this->icServer->listSubscribedMailboxes('',0,true); + $fetchedAllInOneGo = true; + } + else + { + $subscribedMailboxes = $this->icServer->listSubscribedMailboxes($singleNameSpace['prefix'],0,true); } } catch(Exception $e) @@ -2358,28 +2358,6 @@ class emailadmin_imapbase } } - // skip the checks here completely; we rely on Hordes code/results as for now - // this improves speed tremendously for the !$_subscribedOnly - mode - /* - // only check for Folder in FolderMaintenance for Performance Reasons - if(!$_subscribedOnly) { - foreach ((array)$foldersNameSpace[$type]['subscribed'] as $folderName) - { - if ($singleNameSpace['prefix'] == $folderName || $singleNameSpace['prefix'] == $folderName.$singleNameSpace['delimiter']) continue; - //echo __METHOD__."Checking $folderName for existence
"; - if (!$this->folderExists($folderName,true)) { - //echo("eMail Folder $folderName failed to exist; should be unsubscribed; Trying ..."); - if ($this->subscribe($folderName, false)) - { - $r = " success."; - } else { - $r = " failed."; - } - error_log(__METHOD__."-> $folderName in NS: $type failed to be here; should be unsubscribed....".$r); - } - } - } - */ // fetch and sort all folders //echo $type.'->'.$singleNameSpace['prefix'].'->'.($type=='shared'?0:2)."
"; @@ -2397,38 +2375,6 @@ class emailadmin_imapbase error_log(__METHOD__.' ('.__LINE__.') '.' Failed to retrieve all Boxes:'.$e->getMessage()); $allMailboxesExt = array(); } -/* - if (empty($allMailboxesExt) && $type == 'shared') - { - try - { - $allMailboxesExt = $this->icServer->getMailboxes('',0,true); - } - catch (Exception $e) - { - $allMailboxesExt = array(); - } - } - else - { - if ($prefix_present=='forced' && $type=='personal') // you cannot trust dovecots assumed prefix - { - try - { - $allMailboxesExtAll = $this->icServer->getMailboxes('',0,true); - } - catch (Exception $e) - { - $allMailboxesExtAll=array(); - } - foreach ($allMailboxesExtAll as $kaMEA => $aMEA) - { - if (!in_array($aMEA,$allMailboxesExt)) $allMailboxesExt[] = $aMEA; - } - } - } - $allMailBoxesExtSorted = array(); -*/ if (!is_array($allMailboxesExt)) { //error_log(__METHOD__.' ('.__LINE__.') '.' Expected Array but got:'.array2string($allMailboxesExt). 'Type:'.$type.' Prefix:'.$singleNameSpace['prefix']); @@ -2469,20 +2415,6 @@ class emailadmin_imapbase //_debug_array(array_keys($allMailBoxesExtSorted)); $allMailboxes = array(); foreach ((array)$allMailBoxesExtSorted as $mbx) { - //echo $mbx['MAILBOX']."
"; - // this is not used when we are callinglistMailboxes with $restriction_search = 0 - // this lists all mailboxes so fetching mailboxes for each level would be obsolete - /* - if (in_array('\HasChildren',$mbx["ATTRIBUTES"]) || in_array('\Haschildren',$mbx["ATTRIBUTES"]) || in_array('\haschildren',$mbx["ATTRIBUTES"])) { - unset($buff); - if (!in_array($mbx['MAILBOX'],$allMailboxes)) $buff = self::getMailBoxesRecursive($mbx['MAILBOX'],$delimiter,$foldersNameSpace[$type]['prefix'],1); - if( PEAR::isError($buff) ) { - continue; - } - #_debug_array($buff); - if (is_array($buff)) $allMailboxes = array_merge($allMailboxes,$buff); - } - */ if (!in_array($mbx['MAILBOX'],$allMailboxes)) $allMailboxes[] = $mbx['MAILBOX']; //echo "Result:";_debug_array($allMailboxes); } @@ -2490,108 +2422,6 @@ class emailadmin_imapbase if (is_array($foldersNameSpace[$type]['all'])) sort($foldersNameSpace[$type]['all']); } } -/* - // check for autocreated folders - if(isset($foldersNameSpace['personal']['prefix'])) { - $personalPrefix = $foldersNameSpace['personal']['prefix']; - $personalDelimiter = $foldersNameSpace['personal']['delimiter']; - if(!empty($personalPrefix)) { - if(substr($personalPrefix, -1) != $personalDelimiter) { - $folderPrefix = $personalPrefix . $personalDelimiter; - } else { - $folderPrefix = $personalPrefix; - } - } - else - { - if(substr($personalPrefix, -1) != $personalDelimiter) { - $folderPrefixAsInbox = 'INBOX' . $personalDelimiter; - } else { - $folderPrefixAsInbox = 'INBOX'; - } - } - if (!$_alwaysGetDefaultFolders && $this->mailPreferences['notavailableautofolders'] && !empty($this->mailPreferences['notavailableautofolders'])) - { - $foldersToCheck = array_diff(self::$autoFolders,explode(',',$this->mailPreferences['notavailableautofolders'])); - } else { - $foldersToCheck = self::$autoFolders; - } - //error_log(__METHOD__.' ('.__LINE__.') '." foldersToCheck:".array2string($foldersToCheck)); - //error_log(__METHOD__.' ('.__LINE__.') '." foldersToCheck:".array2string( $this->mailPreferences['sentFolder'])); - foreach($foldersToCheck as $personalFolderName) { - $folderName = (!empty($personalPrefix) ? $folderPrefix.$personalFolderName : $personalFolderName); - //error_log(__METHOD__.' ('.__LINE__.') '." foldersToCheck: $personalFolderName / $folderName"); - if(!is_array($foldersNameSpace['personal']['all']) || !in_array($folderName, $foldersNameSpace['personal']['all'])) { - $createfolder = true; - switch($personalFolderName) - { - case 'Drafts': // => Entwürfe - $draftFolder = $this->getDraftFolder(); - if ($draftFolder && $draftFolder=='none') - $createfolder=false; - break; - case 'Junk': //] => Spammails - $junkFolder = $this->getJunkFolder(); - if ($junkFolder && $junkFolder=='none') - $createfolder=false; - break; - case 'Sent': //] => Gesendet - // ToDo: we may need more sophistcated checking here - $sentFolder = $this->getSentFolder(); - if ($sentFolder && $sentFolder=='none') - $createfolder=false; - break; - case 'Trash': //] => Papierkorb - $trashFolder = $this->getTrashFolder(); - if ($trashFolder && $trashFolder=='none') - $createfolder=false; - break; - case 'Templates': //] => Vorlagen - $templateFolder = $this->getTemplateFolder(); - if ($templateFolder && $templateFolder=='none') - $createfolder=false; - break; - case 'Outbox': // Nokia Outbox for activesync - //if ($this->mailPreferences['outboxFolder'] && $this->mailPreferences['outboxFolder']=='none') - $createfolder=false; - if ($GLOBALS['egw_info']['user']['apps']['activesync']) $createfolder = true; - break; - } - // check for the foldername as constructed with prefix (or not) - if ($createfolder && $this->folderExists($folderName)) - { - $createfolder = false; - } - // check for the folder as it comes (no prefix) - if ($createfolder && $personalFolderName != $folderName && $this->folderExists($personalFolderName)) - { - $createfolder = false; - $folderName = $personalFolderName; - } - // check for the folder as it comes with INBOX prefixed - $folderWithInboxPrefixed = $folderPrefixAsInbox.$personalFolderName; - if ($createfolder && $folderWithInboxPrefixed != $folderName && $this->folderExists($folderWithInboxPrefixed)) - { - $createfolder = false; - $folderName = $folderWithInboxPrefixed; - } - // now proceed with the folderName that may be altered in the progress of testing for existence - if ($createfolder === false && $_alwaysGetDefaultFolders) - { - if (!in_array($folderName,$foldersNameSpace['personal']['all'])) $foldersNameSpace['personal']['all'][] = $folderName; - if (!in_array($folderName,$foldersNameSpace['personal']['subscribed'])) $foldersNameSpace['personal']['subscribed'][] = $folderName; - } - - if($createfolder === true && $this->createFolder('', $folderName, true)) { - $foldersNameSpace['personal']['all'][] = $folderName; - $foldersNameSpace['personal']['subscribed'][] = $folderName; - } else { - #print "FOLDERNAME failed: $folderName
"; - } - } - } - } -*/ } //subscribed folders may be used in getFolderStatus egw_cache::setCache(egw_cache::INSTANCE,'email','subscribedFolders'.trim($GLOBALS['egw_info']['user']['account_id']),$subscribedFoldersForCache,$expiration=60*60*1); @@ -2607,6 +2437,7 @@ class emailadmin_imapbase foreach((array)$listOfFolders as $folderName) { //echo "
FolderToCheck:$folderName
"; //error_log(__METHOD__.__LINE__.'#Delimiter:'.$delimiter.':#'.$folderName); + if ($_subscribedOnly && empty($foldersNameSpace[$type]['all'])) continue;//when subscribedonly, we fetch all folders in one go. if($_subscribedOnly && !(in_array($folderName, $foldersNameSpace[$type]['all'])||in_array($folderName.$foldersNameSpace[$type]['delimiter'], $foldersNameSpace[$type]['all']))) { #echo "$folderName failed to be here
"; continue;