%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/mail/lib/imapcommands/ |
Current File : /home/bitrix/www/bitrix/modules/mail/lib/imapcommands/repository.php |
<?php namespace Bitrix\Mail\ImapCommands; use Bitrix\Mail; use Bitrix\Main; use Bitrix\Main\Entity\ReferenceField; class Repository { private $mailboxId; private $messagesIds; public function __construct($mailboxId, $messagesIds) { $this->mailboxId = $mailboxId; $this->messagesIds = $messagesIds; } public function getMailbox() { return Mail\MailboxTable::getUserMailbox($this->mailboxId); } public function deleteOldMessages($folderCurrentName) { $connection = Main\Application::getInstance()->getConnection(); $sqlHelper = $connection->getSqlHelper(); $sql = 'DELETE from ' . Mail\MailMessageUidTable::getTableName() . ' WHERE MAILBOX_ID = ' . intval($this->mailboxId) . " AND DIR_MD5 = '" . $sqlHelper->forSql(md5($folderCurrentName)) . "'" . ' AND MSG_UID = 0;'; $connection->query($sql); return $connection->getAffectedRowsCount(); } public function markMessagesUnseen($messages, $mailbox) { $this->setMessagesSeen('N', $messages, $mailbox); } public function markMessagesSeen($messages, $mailbox) { $this->setMessagesSeen('Y', $messages, $mailbox); } protected function setMessagesSeen($isSeen, $messages, $mailbox) { $messagesIds = []; foreach ($this->messagesIds as $index => $messageId) { $messagesIds[$index] = $messageId; } if (empty($messagesIds) || empty($messages) || empty($mailbox)) { return; } $mailsData = []; foreach ($messages as $messageData) { $mailsData[] = [ 'HEADER_MD5' => $messageData['HEADER_MD5'], 'MAILBOX_USER_ID' => $mailbox['USER_ID'], 'MAILBOX_OPTIONS' => $mailbox['OPTIONS'], 'IS_SEEN' => $isSeen, ]; } Mail\MailMessageUidTable::updateList( [ 'MAILBOX_ID' => intval($this->mailboxId), '@ID' => $messagesIds, ], [ 'IS_SEEN' => $isSeen, ], $mailsData ); } public function updateMessageFieldsAfterMove($messages, $folderNewName, $mailbox) { $messagesIds = []; foreach ($messages as $message) { $messagesIds[] = $message['ID']; } if (empty($messagesIds)) { return; } $mailsData = []; foreach ($messages as $messageData) { $mailsData[] = [ 'HEADER_MD5' => $messageData['HEADER_MD5'], 'MAILBOX_USER_ID' => $mailbox['USER_ID'], 'MAILBOX_OPTIONS' => $mailbox['OPTIONS'], ]; } Mail\MailMessageUidTable::updateList( [ 'MAILBOX_ID' => intval($this->mailboxId), '@ID' => $messagesIds, ], [ 'MSG_UID' => 0, 'DIR_MD5' => md5($folderNewName), ], $mailsData ); } public function addMailsToBlacklist($blacklistMails, $userId) { $result = new Main\Result(); $result->setData([Mail\BlacklistTable::addMailsBatch($blacklistMails, $userId)]); return $result; } public function deleteMailsCompletely($messagesToDelete) { $ids = array_map( function ($mail) { return intval($mail['MESSAGE_ID']); }, $messagesToDelete ); if (empty($ids)) { return; } Mail\MailMessageUidTable::deleteList( [ '@MESSAGE_ID' => $ids, ] ); $connection = Main\Application::getInstance()->getConnection(); $connection->query( 'DELETE from ' . Mail\MailMessageTable::getTableName() . ' WHERE ID IN (' . implode(',', $ids) . ');' ); } public function getMessages() { if (empty($this->messagesIds)) { return []; } $messages = []; $messagesSelected = Mail\MailMessageUidTable::query() ->addSelect('MESSAGE_ID') ->where('MAILBOX_ID', $this->mailboxId) ->whereIn('ID', $this->messagesIds) ->whereNot('MSG_UID', 0) ->where('MESSAGE_ID', '>', 0) ->exec() ->fetchAll(); if ($messagesSelected) { $messagesSelectedIds = array_map( function ($item) { return $item['MESSAGE_ID']; }, $messagesSelected ); if (empty($messagesSelectedIds)) { return []; } $messages = Mail\MailMessageUidTable::query() ->registerRuntimeField( '', new ReferenceField( 'ref', Mail\MailMessageTable::class, ['=this.MESSAGE_ID' => 'ref.ID'] ) ) ->addSelect('ID') ->addSelect('MAILBOX_ID') ->addSelect('DIR_MD5') ->addSelect('DIR_UIDV') ->addSelect('MSG_UID') ->addSelect('HEADER_MD5') ->addSelect('IS_SEEN') ->addSelect('SESSION_ID') ->addSelect('MESSAGE_ID') ->addSelect('ref.FIELD_FROM', 'FIELD_FROM') ->whereIn('MESSAGE_ID', $messagesSelectedIds) ->where('MAILBOX_ID', $this->mailboxId) ->whereNot('MSG_UID', 0) ->exec() ->fetchAll(); } return $messages; } }