/** * @param Account $account; * @param int $messId * @param string $messUid * @param int $folderId * @param string $folderFullName * @return GetMessageBase */ function GetMessageBase(&$account, $messId, $messUid, $folderId, $folderFullName, $charset) { $this->messId = $messId; $this->messUid = $messUid; $this->folderId = $folderId; $this->folderFullName = $folderFullName; $this->charset = $charset; $this->accountId = $account->Id; $this->account =& $account; $this->processor = new MailProcessor($this->account); $this->folder = new Folder($this->accountId, $folderId, $folderFullName); $this->processor->GetFolderInfo($this->folder); $msgIdUid = array(); if (!empty($messId) && !empty($messUid)) { $msgIdUid[$messId] = $messUid; } $charsetNum = -1; if ($charset != -1) { $GLOBALS[MailInputCharset] = $charset; $charsetNum = ConvertUtils::GetCodePageNumber($charset); } $this->msg =& $this->processor->GetMessage($messId, $messUid, $this->folder); if ($this->msg) { if (!(($this->msg->Flags & MESSAGEFLAGS_Seen) == MESSAGEFLAGS_Seen)) { $this->processor->SetFlag($msgIdUid, $this->folder, MESSAGEFLAGS_Seen, ACTION_Set); } if ($this->folder->SyncType != FOLDERSYNC_DirectMode && $this->processor->DbStorage->Connect()) { $this->processor->DbStorage->UpdateMessageCharset($messId, $charsetNum, $this->msg); } } }
function SetCurrentFolder() { $currentFolder = null; if (isset($this->sArray[GOTOFOLDER])) { $this->sArray[FOLDER_ID] = -1; } if ($this->sArray[FOLDER_ID] > -1) { $folderFullName = isset($this->sArray[FOLDER_FULLNAME]) ? $this->sArray[FOLDER_FULLNAME] : 'temp_001'; $folder =& new Folder($this->account->Id, $this->sArray[FOLDER_ID], $folderFullName); $this->processor->GetFolderInfo($folder); if ($folder && $folder->Hide) { $newfolder = $this->folders ? $this->folders->GetFirstNotHideFolder() : null; if ($newfolder) { $currentFolder =& $newfolder; } } else { $currentFolder =& $folder; } } else { if ($this->sArray[FOLDER_ID] == -1) { $folderType = FOLDERTYPE_Inbox; if (isset($this->sArray[GOTOFOLDER])) { $folderType = $this->sArray[GOTOFOLDER]; unset($this->sArray[GOTOFOLDER]); } $folder =& $this->folders->GetFolderByType($folderType); $this->processor->GetFolderInfo($folder); if ($folder && $folder->Hide) { $newfolder = $this->folders ? $this->folders->GetFirstNotHideFolder() : null; if ($newfolder) { $currentFolder =& $newfolder; } } else { $currentFolder =& $folder; } } } $this->currentFolder =& $currentFolder; if ($this->currentFolder) { $this->processor->GetFolderMessageCount($this->currentFolder); $this->sArray[FOLDER_ID] = $this->currentFolder->IdDb; } else { $this->sArray[FOLDER_ID] = -1; } }
/** * @param int $messId * @param string $messUid * @param int $folderId * @param string $folderFullName * @param bool $isFull * @return GetMessageBase */ function GetMessageBase(&$account, $messId, $messUid, $folderId, $folderFullName, $charset, $isFull = false) { $this->messId = $messId; $this->messUid = $messUid; $this->folderId = $folderId; $this->folderFullName = $folderFullName; $this->charset = $charset; if (isset($_SESSION[ACCOUNT_ID])) { $this->accountId = $_SESSION[ACCOUNT_ID]; } if (!isset($_SESSION['attachtempdir'])) { $_SESSION['attachtempdir'] = md5(session_id()); } $this->account =& $account; $this->processor =& new MailProcessor($this->account); $this->folder =& new Folder($this->accountId, $folderId, $folderFullName); $this->processor->GetFolderInfo($this->folder); $msgIdUid = array(); if (!empty($messId) && !empty($messUid)) { $msgIdUid[$messId] = $messUid; } $this->processor->SetFlags($msgIdUid, $this->folder, MESSAGEFLAGS_Seen, ACTION_Set); if ($charset != -1) { $GLOBALS[MailInputCharset] = $charset; $charsetNum = ConvertUtils::GetCodePageNumber($charset); } else { $charsetNum = -1; } $this->msg =& $this->processor->GetMessage($messId, $messUid, $this->folder); if (!$this->msg) { return false; } if ($this->folder->SyncType != FOLDERSYNC_DirectMode && $this->processor->DbStorage->Connect()) { $this->processor->DbStorage->UpdateMessageCharset($messId, $charsetNum, $this->msg); } }
function DoOperationMessagesFunction() { $_dbStorage = $_settings = $_xmlObj = $_xmlRes = $_accountId = null; $this->_initFuncArgs($_dbStorage, $_settings, $_xmlObj, $_xmlRes, $_accountId); $_account =& CXmlProcessing::AccountCheckAndLoad($_xmlRes, $_accountId, false, false); $_processor = new MailProcessor($_account); $_messagesRequestNode =& $_xmlObj->XmlRoot->GetChildNodeByTagName('messages'); if (!$_messagesRequestNode) { CXmlProcessing::PrintErrorAndExit(WebMailException, $_xmlRes); } $_getmsg = isset($_messagesRequestNode->Attributes['getmsg']) && $_messagesRequestNode->Attributes['getmsg'] == '1'; $_folderNodeRequest =& $_messagesRequestNode->GetChildNodeByTagName('folder'); if (isset($_folderNodeRequest->Attributes['id'])) { $_folder = new Folder($_accountId, $_folderNodeRequest->Attributes['id'], ConvertUtils::WMBackHtmlSpecialChars($_folderNodeRequest->GetChildValueByTagName('full_name'))); } else { CXmlProcessing::PrintErrorAndExit(WebMailException, $_xmlRes); } $_processor->GetFolderInfo($_folder, true); $_toFolderNodeRequest =& $_messagesRequestNode->GetChildNodeByTagName('to_folder'); if (isset($_toFolderNodeRequest->Attributes['id'])) { $_toFolder = new Folder($_accountId, $_toFolderNodeRequest->Attributes['id'], ConvertUtils::WMBackHtmlSpecialChars($_toFolderNodeRequest->GetChildValueByTagName('full_name'))); } else { CXmlProcessing::PrintErrorAndExit(WebMailException, $_xmlRes); } $_processor->GetFolderInfo($_toFolder, true); $_operationNode = new XmlDomNode('operation_messages'); $_toFolderNode = new XmlDomNode('to_folder', $_toFolder->FullName, true); $_toFolderNode->AppendAttribute('id', $_toFolder->IdDb); $_operationNode->AppendChild($_toFolderNode); $_folderNode = new XmlDomNode('folder', $_folder->FullName, true); $_folderNode->AppendAttribute('id', $_folder->IdDb); $_operationNode->AppendChild($_folderNode); $_messagesNode = new XmlDomNode('messages'); $_messagesNode->AppendAttribute('getmsg', $_getmsg ? '1' : '0'); $_messageIdUidSet = array(); $_folders = array(); $_messagesKeys = array_keys($_messagesRequestNode->Children); foreach ($_messagesKeys as $_nodeKey) { $_messageNode =& $_messagesRequestNode->Children[$_nodeKey]; if ($_messageNode->TagName != 'message') { continue; } if (!isset($_messageNode->Attributes['id']) || !isset($_messageNode->Attributes['charset']) || !isset($_messageNode->Attributes['size'])) { continue; } $_msgId = $_messageNode->Attributes['id']; $_msgCharset = $_messageNode->Attributes['charset']; $_msgSize = $_messageNode->Attributes['size']; $_msgUid = $_messageNode->GetChildValueByTagName('uid', true); $_msgFolder =& $_messageNode->GetChildNodeByTagName('folder'); if (!isset($_msgFolder->Attributes['id'])) { continue; } $_msgFolderId = $_msgFolder->Attributes['id']; $_folders[$_msgFolderId] = $_msgFolder->GetChildValueByTagName('full_name', true); if (!isset($_messageIdUidSet[$_msgFolderId])) { $_messageIdUidSet[$_msgFolderId] = array(); } $_messageIdUidSet[$_msgFolderId][$_msgId] = $_msgUid; $_message = new XmlDomNode('message'); $_message->AppendAttribute('id', $_msgId); $_message->AppendAttribute('charset', $_msgCharset); $_message->AppendAttribute('size', $_msgSize); $_message->AppendChild(new XmlDomNode('uid', $_msgUid, true)); $_msgFolderNode = new XmlDomNode('folder', $_folders[$_msgFolderId], true); $_msgFolderNode->AppendAttribute('id', $_msgFolderId); $_message->AppendChild($_msgFolderNode); $_messagesNode->AppendChild($_message); unset($_messageNode, $_msgFolder, $_message, $_msgFolderNode); } $_operationNode->AppendChild($_messagesNode); $_errorString = $_typeString = ''; $_request = $_xmlObj->GetParamValueByName('request'); switch ($_request) { case 'mark_all_read': $_messageIdUidSet = null; if ($_processor->SetFlags($_messageIdUidSet, $_folder, MESSAGEFLAGS_Seen, ACTION_Set)) { $_typeString = 'mark_all_read'; } else { $_errorString = PROC_CANT_MARK_ALL_MSG_READ; } break; case 'mark_all_unread': $_messageIdUidSet = null; if ($_processor->SetFlags($_messageIdUidSet, $_folder, MESSAGEFLAGS_Seen, ACTION_Remove)) { $_typeString = 'mark_all_unread'; } else { $_errorString = PROC_CANT_MARK_ALL_MSG_UNREAD; } break; case 'purge': if (!$_settings->Imap4DeleteLikePop3 && $_account->MailProtocol == MAILPROTOCOL_IMAP4) { if ($_processor->PurgeFolder($_folder)) { $_typeString = 'purge'; } else { $_errorString = PROC_CANT_PURGE_MSGS; } } else { if ($_processor->EmptyTrash()) { $_typeString = 'purge'; } else { $_errorString = PROC_CANT_PURGE_MSGS; } } break; case 'clear_spam': if ($_processor->EmptySpam()) { $_typeString = 'clear_spam'; } else { $_errorString = PROC_CANT_PURGE_MSGS; } break; } $_deleteFolderAppendError = false; $_foldersArray = array(); foreach ($_folders as $_idFolder => $_fullNameFolder) { if (isset($_foldersArray[$_idFolder])) { $_folder =& $_foldersArray[$_idFolder]; } else { $_folder = new Folder($_accountId, $_idFolder, $_fullNameFolder); $_processor->GetFolderInfo($_folder, true); $_foldersArray[$_idFolder] =& $_folder; } switch ($_request) { case 'no_move_delete': if ($_processor->DeleteMessages($_messageIdUidSet[$_idFolder], $_folder, true)) { $_typeString = 'no_move_delete'; } else { $_errorString = PROC_CANT_DEL_MSGS; } break; case 'delete': if ($_processor->DeleteMessages($_messageIdUidSet[$_idFolder], $_folder)) { $_typeString = 'delete'; } else { if ($_processor->IsMoveError) { $_typeString = 'delete'; $_deleteFolderAppendError = true; } $_errorString = PROC_CANT_DEL_MSGS; } break; case 'undelete': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Deleted, ACTION_Remove)) { $_typeString = 'undelete'; } else { $_errorString = PROC_CANT_UNDEL_MSGS; } break; case 'mark_read': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Seen, ACTION_Set)) { $_typeString = 'mark_read'; } else { $_errorString = PROC_CANT_MARK_MSGS_READ; } break; case 'mark_unread': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Seen, ACTION_Remove)) { $_typeString = 'mark_unread'; } else { $_errorString = PROC_CANT_MARK_MSGS_UNREAD; } break; case 'flag': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Flagged, ACTION_Set)) { $_typeString = 'flag'; } else { $_errorString = PROC_CANT_SET_MSG_FLAGS; } break; case 'unflag': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Flagged, ACTION_Remove)) { $_typeString = 'unflag'; } else { $_errorString = PROC_CANT_REMOVE_MSG_FLAGS; } break; case 'copy_to_folder': // TODO if ($_processor->MoveMessages($_messageIdUidSet[$_idFolder], $_folder, $_toFolder)) { $_typeString = 'copy_to_folder'; } else { $_errorString = PROC_CANT_CHANGE_MSG_FLD; } break; case 'move_to_folder': if ($_processor->MoveMessages($_messageIdUidSet[$_idFolder], $_folder, $_toFolder)) { $_typeString = 'move_to_folder'; } else { $_errorString = PROC_CANT_CHANGE_MSG_FLD; } break; case 'spam': if ($_processor->SpamMessages($_messageIdUidSet[$_idFolder], $_folder, true)) { $_typeString = 'spam'; } else { $_errorString = PROC_CANT_SET_MSG_AS_SPAM; } break; case 'not_spam': if ($_processor->SpamMessages($_messageIdUidSet[$_idFolder], $_folder, false)) { $_typeString = 'not_spam'; } else { $_errorString = PROC_CANT_SET_MSG_AS_NOTSPAM; } break; } unset($_folder); if (strlen($_errorString) > 0) { break; } } if (strlen($_errorString) == 0 && strlen($_typeString) > 0) { $_operationNode->AppendAttribute('type', $_typeString); $_xmlRes->XmlRoot->AppendChild($_operationNode); } else { if ($_deleteFolderAppendError) { $_operationNode->AppendAttribute('type', $_typeString); $_messagesNode->AppendAttribute('no_move', '1'); $_xmlRes->XmlRoot->AppendChild($_operationNode); } else { if (strlen($_errorString) == 0) { $_errorString = WebMailException; } $_xmlRes->XmlRoot->AppendChild(new XmlDomNode('error', $_errorString, true)); } } }
$mes_uid = isset($_GET['msg_uid']) ? $_GET['msg_uid'] : ''; $folder_id = isset($_GET['folder_id']) ? (int) $_GET['folder_id'] : -1; $folder_name = isset($_GET['folder_full_name']) ? $_GET['folder_full_name'] : ''; $mes_charset = isset($_GET['charset']) ? (int) $_GET['charset'] : -1; $msgSize = isset($_GET['size']) ? (int) $_GET['size'] : 0; $mode = isset($_GET['mode']) ? (int) $_GET['mode'] : 0; if ($mes_charset > 0) { $account->DefaultIncCharset = ConvertUtils::GetCodePageName($mes_charset); $GLOBALS[MailInputCharset] = $_account->DefaultIncCharset; $account->UpdateDefaultIncCharset(); } $processor = new MailProcessor($account); $folder = null; if (!empty($folder_id) && !empty($folder_name)) { $folder = new Folder($account->Id, $folder_id, $folder_name); $processor->GetFolderInfo($folder); if (!$folder || $folder->IdDb < 1) { ///!!!! } } else { ///!!!! } $msgIdUid = array($mes_id => $mes_uid); $_messageInfo = new CMessageInfo(); $_messageInfo->SetInfo($mes_id, $mes_uid, $folder->IdDb, $folder->FullName); $modeForGet = $mode; if (empty($msgSize) || (int) $msgSize < BODYSTRUCTURE_MGSSIZE_LIMIT || $folder && FOLDERTYPE_Drafts == $folder->Type || (($mode & 8) == 8 || ($mode & 16) == 16 || ($mode & 32) == 32 || ($mode & 64) == 64)) { $modeForGet = null; } $message = null; $message =& $processor->GetMessage($mes_id, $mes_uid, $folder, $modeForGet);