function DoUpdateFolders() { $_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); $_processor = new MailProcessor($_account); $_foldersNode =& $_xmlObj->XmlRoot->GetChildNodeByTagName('folders'); $_result = true; if (!$_processor->MailStorage->Connect()) { CXmlProcessing::PrintErrorAndExit(getGlobalError(), $_xmlRes); } $_serverFoldersName = array(); if ($_account->MailProtocol != MAILPROTOCOL_POP3) { $_tempFolders = $_processor->MailStorage->GetFolders(); $_serverFolders = $_tempFolders->CreateFolderListFromTree(); $_serverFoldersArray = $_serverFolders->Instance(); foreach ($_serverFoldersArray as $_sFolder) { $_serverFoldersName[] = strtolower($_sFolder->FullName); } unset($_tempFolders, $_serverFolders, $_serverFoldersArray, $_sFolder); } $aLSubList = null; $log =& CLog::CreateInstance(); $log->SetEventPrefixByAccount($_account); for ($_key = count($_foldersNode->Children) - 1; $_key >= 0; $_key--) { $_folderNode =& $_foldersNode->Children[$_key]; if (!ConvertUtils::CheckDefaultWordsFileName($_folderNode->GetChildValueByTagName('name')) || !ConvertUtils::CheckFileName($_folderNode->GetChildValueByTagName('name'))) { CXmlProcessing::PrintErrorAndExit(PROC_CANT_UPD_FLD, $_xmlRes); } $_newFolderName = ConvertUtils::ConvertEncoding(ConvertUtils::ClearFileName(ConvertUtils::WMBackHtmlSpecialChars($_folderNode->GetChildValueByTagName('name'))), $_account->GetUserCharset(), CPAGE_UTF7_Imap); $_newFolderHide = (bool) $_folderNode->GetAttribute('hide', false); $_newFolderType = (int) $_folderNode->GetAttribute('type', 0); $_newFolderType = $_newFolderType === 0 ? 10 : $_newFolderType; $_fullFolderName = $_folderNode->GetChildValueByTagName('full_name'); $_folder = new Folder($_acctId, $_folderNode->GetAttribute('id', -1), $_fullFolderName); $_processor->GetFolderInfo($_folder); $_isRename = false; if ($_folder->Name != $_newFolderName) { $log->WriteLine('personal folder (rename "' . $_folder->FullName . '" => "' . $_newFolderName . '")'); if (!$_account->IsDemo && null === $aLSubList) { $aLSubList = $_processor->GetLsubFolders(); } $_oldName = $_folder->Name; $_folder->Name = $_newFolderName; $_validate = $_folder->ValidateData(); if (true !== $_validate) { CXmlProcessing::PrintErrorAndExit($_validate, $_xmlRes); } else { $_folder->Name = $_oldName; } $_result &= $_account->IsDemo ? true : $_processor->RenameFolder($_folder, $_newFolderName, $_account->Delimiter, $aLSubList); $log->WriteEvent('User edit personal folder (rename "' . $_folder->FullName . '" => "' . $_newFolderName . '")'); $_isRename = true; } if ($_folder->Hide != $_newFolderHide) { $_folder->Hide = $_newFolderHide; $_processor->SetHide($_folder, $_newFolderHide); } if ($_folder->Type != $_newFolderType) { $_folder->Type = $_newFolderType; } $_folder->Name = $_newFolderName; $_folder->SyncType = (int) $_folderNode->GetAttribute('sync_type', FOLDERSYNC_DontSync); $_folder->FolderOrder = (int) $_folderNode->GetAttribute('fld_order', 0); if (!$_isRename && $_account->MailProtocol != MAILPROTOCOL_POP3 && !in_array(strtolower($_folder->FullName), $_serverFoldersName) && $_folder->SyncType != FOLDERSYNC_DontSync) { $_result &= $_processor->MailStorage->CreateFolder($_folder); } if ($_result) { $_result &= $_account->IsDemo || !USE_DB ? true : $_processor->DbStorage->UpdateFolder($_folder); } else { CXmlProcessing::PrintErrorAndExit(PROC_CANT_UPD_FLD, $_xmlRes); } } 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_CANT_UPD_FLD, $_xmlRes); } }