/** * Initializes collection by unsorted mail folders. * * @param array $aUnsortedMailFolders Unsorted mail folder list. * * @return void */ public function initialize($aUnsortedMailFolders) { $this->clear(); $aSortedByLenImapFolders = array(); foreach ($aUnsortedMailFolders as &$oMailFolder) { $aSortedByLenImapFolders[$oMailFolder->getRawFullName()] =& $oMailFolder; unset($oMailFolder); } unset($aUnsortedMailFolders); $aAddedFolders = array(); foreach ($aSortedByLenImapFolders as $oMailFolder) { $sDelimiter = $oMailFolder->getDelimiter(); $aFolderExplode = explode($sDelimiter, $oMailFolder->getRawFullName()); if (1 < count($aFolderExplode)) { array_pop($aFolderExplode); $sNonExistenFolderFullNameRaw = ''; foreach ($aFolderExplode as $sFolderExplodeItem) { $sNonExistenFolderFullNameRaw .= 0 < strlen($sNonExistenFolderFullNameRaw) ? $sDelimiter . $sFolderExplodeItem : $sFolderExplodeItem; if (!isset($aSortedByLenImapFolders[$sNonExistenFolderFullNameRaw])) { $aAddedFolders[$sNonExistenFolderFullNameRaw] = CApiMailFolder::createNonexistentInstance($sNonExistenFolderFullNameRaw, $sDelimiter); } } } } $aSortedByLenImapFolders = array_merge($aSortedByLenImapFolders, $aAddedFolders); unset($aAddedFolders); uasort($aSortedByLenImapFolders, array(&$this, '__sortHelper')); // INBOX and Utf-7 modified sort $aFoot = $aTop = array(); foreach ($aSortedByLenImapFolders as $sKey => &$oMailFolder) { if (0 === strpos($sKey, '&')) { $aFoot[] = $oMailFolder; unset($aSortedByLenImapFolders[$sKey]); } else { if ('INBOX' === strtoupper($sKey)) { array_unshift($aTop, $oMailFolder); unset($aSortedByLenImapFolders[$sKey]); } else { if ('[GMAIL]' === strtoupper($sKey)) { $aTop[] = $oMailFolder; unset($aSortedByLenImapFolders[$sKey]); } } } } $aSortedByLenImapFolders = array_merge($aTop, $aSortedByLenImapFolders, $aFoot); foreach ($aSortedByLenImapFolders as &$oMailFolder) { $this->addFolder($oMailFolder); unset($oMailFolder); } unset($aSortedByLenImapFolders); }