/** * @param array $aUnsortedMailFolders * @return void */ public function InitByUnsortedMailFolderArray($aUnsortedMailFolders) { $this->Clear(); $aSortedByLenImapFolders = array(); foreach ($aUnsortedMailFolders as &$oMailFolder) { $aSortedByLenImapFolders[$oMailFolder->FullNameRaw()] =& $oMailFolder; unset($oMailFolder); } unset($aUnsortedMailFolders); $aAddedFolders = array(); foreach ($aSortedByLenImapFolders as $oMailFolder) { $sDelimiter = $oMailFolder->Delimiter(); $aFolderExplode = explode($sDelimiter, $oMailFolder->FullNameRaw()); 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::NewNonExistenInstance($sNonExistenFolderFullNameRaw, $sDelimiter); } } } } $aSortedByLenImapFolders = array_merge($aSortedByLenImapFolders, $aAddedFolders); unset($aAddedFolders); uasort($aSortedByLenImapFolders, array(&$this, 'aASortHelper')); // 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->AddWithPositionSearch($oMailFolder); unset($oMailFolder); } unset($aSortedByLenImapFolders); }