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);
     }
 }