/** * @param FolderCollection $_folders * @param XmlDomNode $_nodeTree * @param MailProcessor $_processor */ function GetFoldersTreeXml(&$_folders, &$_nodeTree, &$_processor) { for ($_i = 0, $_count = $_folders->Count(); $_i < $_count; $_i++) { $_folder =& $_folders->Get($_i); $_folderNode = new XmlDomNode('folder'); $_folderNode->AppendAttribute('id', $_folder->IdDb); $_folderNode->AppendAttribute('id_parent', $_folder->IdParent); $_folderNode->AppendAttribute('type', $_folder->Type); $_folderNode->AppendAttribute('sync_type', $_folder->SyncType); $_folderNode->AppendAttribute('hide', (int) $_folder->Hide); $_folderNode->AppendAttribute('fld_order', (int) $_folder->FolderOrder); if ($_folder->SyncType == FOLDERSYNC_DirectMode) { $_processor->GetFolderMessageCount($_folder); } $_folderNode->AppendAttribute('count', $_folder->MessageCount); $_folderNode->AppendAttribute('count_new', $_folder->UnreadMessageCount); $_folderNode->AppendAttribute('size', $_folder->Size); if (ConvertUtils::IsLatin($_folder->Name)) { $_folderNode->AppendChild(new XmlDomNode('name', ConvertUtils::ConvertEncoding($_folder->Name, CPAGE_UTF7_Imap, CPAGE_UTF8), true)); } else { $_folderNode->AppendChild(new XmlDomNode('name', ConvertUtils::ConvertEncoding($_folder->Name, $_processor->_account->DefaultIncCharset, CPAGE_UTF8), true)); } $_folderNode->AppendChild(new XmlDomNode('full_name', $_folder->FullName, true)); if ($_folder->SubFolders != null && $_folder->SubFolders->Count() > 0) { $_foldersNode = new XmlDomNode('folders'); CXmlProcessing::GetFoldersTreeXml($_folder->SubFolders, $_foldersNode, $_processor); $_folderNode->AppendChild($_foldersNode); unset($_foldersNode); } $_nodeTree->AppendChild($_folderNode); unset($_folderNode, $_folder); } }
function DoDeleteFolders() { $_dbStorage = $_settings = $_xmlObj = $_xmlRes = $_accountId = null; $this->_initFuncArgs($_dbStorage, $_settings, $_xmlObj, $_xmlRes, $_accountId); $_acctId = $_xmlObj->GetParamValueByName('id_acct'); CXmlProcessing::CheckAccountAccess($_acctId, $_xmlRes); $_account =& CXmlProcessing::AccountCheckAndLoad($_xmlRes, $_acctId, false, false); $_processor = new MailProcessor($_account); $_foldersNode =& $_xmlObj->XmlRoot->GetChildNodeByTagName('folders'); $_result = true; $_foldersKeys = array_keys($_foldersNode->Children); foreach ($_foldersKeys as $_key) { $_fc =& $_foldersNode->Children[$_key]; if (isset($_fc->Attributes['id'])) { $_folder = new Folder($_acctId, $_fc->Attributes['id'], $_fc->GetChildValueByTagName('full_name')); } else { $_result = false; unset($_fc); break; } $_processor->GetFolderInfo($_folder); $_processor->GetFolderMessageCount($_folder); $_childCount = USE_DB ? $_processor->DbStorage->GetFolderChildCount($_folder) : 0; if ($_account->MailProtocol != MAILPROTOCOL_POP3 && ($_folder->MessageCount > 0 || $_childCount != 0)) { $_result = false; } else { $_result &= $_account->IsDemo ? true : $_processor->DeleteFolder($_folder); if ($_result && !$_account->IsDemo) { $log =& CLog::CreateInstance(); $log->WriteEvent('User delete personal folder ("' . $_folder->FullName . '")', $_account); } } unset($_fc, $_folder); } if ($_result) { $_folders =& $_processor->GetFolders(); $_foldersList = new XmlDomNode('folders_list'); $_foldersList->AppendAttribute('sync', -1); $_foldersList->AppendAttribute('id_acct', $_acctId); $_foldersList->AppendAttribute('namespace', $_account->NameSpace); CXmlProcessing::GetFoldersTreeXml($_folders, $_foldersList, $_processor); $_xmlRes->XmlRoot->AppendChild($_foldersList); } else { CXmlProcessing::PrintErrorAndExit(PROC_ERROR_DEL_FLD, $_xmlRes); } }