/**
  * @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);
         }
     }
 }
Example #2
0
 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));
         }
     }
 }
Example #5
0
 $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);