/**
  * @param WebMailMessage $message
  * @param Folder $folder
  * @return bool
  */
 function SaveMessage(&$message, &$folder, $fromFolder = null)
 {
     if ($message == null || $folder == null) {
         return false;
     }
     //Get size all messages in DB
     $mailBoxesSize = $this->DbStorage->SelectMailboxesSize() + $message->GetMailSize();
     $this->DbStorage->SelectMailboxesSize();
     if ($this->MailStorage->_settings->EnableMailboxSizeLimit && $this->_account->MailboxLimit < $mailBoxesSize) {
         setGlobalError(ErrorGetMailLimit);
         return false;
     }
     switch ($this->_account->MailProtocol) {
         case MAILPROTOCOL_POP3:
             $result = true;
             if ($this->DbStorage->Connect()) {
                 //if ($message->IdMsg != -1)
                 //{
                 //$messageIdSet = array($message->IdMsg);
                 //$result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $folder);
                 //}
                 //else
                 //{
                 $message->IdMsg = $this->DbStorage->SelectLastIdMsg() + 1;
                 //}
                 return $result && $this->DbStorage->SaveMessage($message, $folder);
             }
         case MAILPROTOCOL_IMAP4:
             $result = true;
             if ($message->IdMsg != -1) {
                 $messageIdUidSet = array();
                 $messageIdUidSet[$message->IdMsg] = $message->Uid;
                 $nfolder = $fromFolder ? $fromFolder : $folder;
                 $result &= $this->DeleteMessages($messageIdUidSet, $nfolder);
             }
             if ($folder->SyncType != FOLDERSYNC_DontSync) {
                 if ($this->MailStorage->Connect()) {
                     $result &= $this->MailStorage->SaveMessage($message, $folder);
                     $GLOBALS[MailDefaultCharset] = $this->_account->GetDefaultIncCharset();
                     unset($GLOBALS[MailInputCharset]);
                     $GLOBALS[MailOutputCharset] = $this->_account->GetUserCharset();
                     $result &= $this->MailStorage->SynchronizeFolder($folder);
                 }
                 return $result;
             } elseif ($this->DbStorage->Connect()) {
                 //if ($message->IdMsg == -1)
                 //{
                 $message->IdMsg = $this->DbStorage->SelectLastIdMsg() + 1;
                 //}
                 $result &= $this->DbStorage->SaveMessage($message, $folder);
                 return $result;
             }
         case MAILPROTOCOL_WMSERVER:
             $result = true;
             if ($this->DbStorage->Connect()) {
                 $message->IdMsg = $this->DbStorage->SelectLastIdMsg() + 1;
                 return $result && $this->DbStorage->SaveMessage($message, $folder);
             }
     }
     return false;
 }
    /**
     * @param WebMailMessage $message
     * @param Folder $folder
     * @param bool $downloaded
     * @param Account $account
     * @return string
     */
    function SaveMessageHeader(&$message, &$folder, $downloaded, &$account)
    {
        //save message header
        $sql = 'INSERT INTO %sawm_messages (id_msg, id_acct, id_folder_srv, id_folder_db,
								%s, from_msg, to_msg, cc_msg, bcc_msg, subject,
								msg_date, attachments, size, downloaded, x_spam,
								seen, flagged, deleted, replied, grayed, flags, priority, body_text)
					VALUES (%d, %d,	%d, %d, %s, %s, %s, %s, %s, %s, %s, %d, %d, %d,	%d, %d, %d, %d, %d, %d, %d, %d, %s)';
        $date =& $message->GetDate();
        $from =& new I18nString($message->GetFromAsString(), $account->DbCharset);
        $to =& new I18nString($message->GetToAsString(), $account->DbCharset);
        $cc =& new I18nString($message->GetCcAsString(), $account->DbCharset);
        $bcc =& new I18nString($message->GetBccAsString(), $account->DbCharset);
        $subject =& new I18nString($message->GetSubject(), $account->DbCharset);
        $uid = $account->MailProtocol == MAILPROTOCOL_IMAP4 ? (int) $message->Uid : $this->_escapeString($message->Uid);
        return sprintf($sql, $this->_settings->DbPrefix, $this->_getMsgIdUidFieldName(true, $account->MailProtocol), $message->IdMsg, $account->Id, $folder->IdDb, $folder->IdDb, $uid, $this->_escapeString($from->Truncate(255)), $this->_escapeString($to->Truncate(255)), $this->_escapeString($cc->Truncate(255)), $this->_escapeString($bcc->Truncate(255)), $this->_escapeString($subject->Truncate(255)), $this->_escapeString($date->ToANSI()), $this->Bool2Bool((int) $message->HasAttachments()), (int) $message->GetMailSize(), $this->Bool2Bool((int) $downloaded), $this->Bool2Bool((int) $message->GetXSpamStatus()), (int) (($message->Flags & MESSAGEFLAGS_Seen) == MESSAGEFLAGS_Seen), (int) (($message->Flags & MESSAGEFLAGS_Flagged) == MESSAGEFLAGS_Flagged), (int) (($message->Flags & MESSAGEFLAGS_Deleted) == MESSAGEFLAGS_Deleted), (int) (($message->Flags & MESSAGEFLAGS_Answered) == MESSAGEFLAGS_Answered), (int) (($message->Flags & MESSAGEFLAGS_Grayed) == MESSAGEFLAGS_Grayed), $message->Flags, $message->GetPriorityStatus(), $this->_escapeString(ConvertUtils::mainClear(substr($message->GetPlainLowerCaseBodyText(), 0, 500000))));
    }
    /**
     * @param WebMailMessage $message
     * @param Folder $folder
     * @param bool $downloaded
     * @param Account $account
     * @return string
     */
    function SaveMessageHeader($message, $folder, $downloaded, $account)
    {
        /* save message header */
        $sql = 'INSERT INTO %sawm_messages (id_msg, id_acct, id_folder_srv, id_folder_db,
								str_uid, int_uid, from_msg, to_msg, cc_msg, bcc_msg, subject,
								msg_date, attachments, size, downloaded, x_spam,
								seen, flagged, rtl, deleted, replied, grayed, flags,
								priority, body_text, forwarded, charset, sensitivity)
					VALUES (%d, %d,	%d, %d, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d, %d,	%d, %d, %d, %d, %d, %d, %d, %d, %d, %s, 0, -1, %d)';
        $date =& $message->GetDate();
        $from = new I18nString($message->GetFromAsString(), $account->DbCharset);
        $to = new I18nString($message->GetToAsString(), $account->DbCharset);
        $cc = new I18nString($message->GetCcAsString(), $account->DbCharset);
        $bcc = new I18nString($message->GetBccAsString(), $account->DbCharset);
        $subject = new I18nString($message->GetSubject(), $account->DbCharset);
        $str_uid = $int_uid = null;
        if ($account->MailProtocol == MAILPROTOCOL_IMAP4) {
            $str_uid = '';
            $int_uid = $message->Uid;
        } else {
            $str_uid = $message->Uid;
            $int_uid = 0;
        }
        return sprintf($sql, $this->_settings->DbPrefix, $message->IdMsg, $account->Id, $folder->IdDb, $folder->IdDb, $this->_escapeString($str_uid), $int_uid, $this->_escapeString($from->Truncate(255)), $this->_escapeString($to->Truncate(255)), $this->_escapeString($cc->Truncate(255)), $this->_escapeString($bcc->Truncate(255)), $this->_escapeString($subject->Truncate(255)), $this->UpdateDateFormat($date->ToANSI()), (int) $message->HasAttachments(), $message->GetMailSize(), (int) $downloaded, (int) $message->GetXSpamStatus(), ($message->Flags & MESSAGEFLAGS_Seen) == MESSAGEFLAGS_Seen, ($message->Flags & MESSAGEFLAGS_Flagged) == MESSAGEFLAGS_Flagged, 0, ($message->Flags & MESSAGEFLAGS_Deleted) == MESSAGEFLAGS_Deleted, ($message->Flags & MESSAGEFLAGS_Answered) == MESSAGEFLAGS_Answered, ($message->Flags & MESSAGEFLAGS_Grayed) == MESSAGEFLAGS_Grayed, $message->Flags, $message->GetPriorityStatus(), $this->_escapeString(substr($message->GetPlainLowerCaseBodyText(), 0, 500000)), $message->GetSensitivity());
    }