1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
repository.php
См. документацию.
1<?php
2namespace Bitrix\Mail\ImapCommands;
3
4use Bitrix\Mail;
5use Bitrix\Main;
6use Bitrix\Main\Entity\ReferenceField;
7use \Bitrix\Mail\Helper\MessageFolder;
8
10{
11 private $mailboxId;
12 private $messagesIds;
13
14 public function __construct($mailboxId, $messagesIds)
15 {
16 $this->mailboxId = $mailboxId;
17 $this->messagesIds = $messagesIds;
18 }
19
20 public function getMailbox($mailboxUserId = null)
21 {
22 return Mail\MailboxTable::getUserMailbox($this->mailboxId, $mailboxUserId);
23 }
24
25 public function deleteOldMessages($folderCurrentName)
26 {
27 $connection = Main\Application::getInstance()->getConnection();
28 $sqlHelper = $connection->getSqlHelper();
29 $sql = 'DELETE from ' . Mail\MailMessageUidTable::getTableName() .
30 ' WHERE MAILBOX_ID = ' . intval($this->mailboxId) .
31 " AND DIR_MD5 = '" . $sqlHelper->forSql(md5($folderCurrentName)) . "'" .
32 ' AND MSG_UID = 0;';
33 $connection->query($sql);
34 return $connection->getAffectedRowsCount();
35 }
36
37 public function markMessagesUnseen($messages, $mailbox)
38 {
39 $this->setMessagesSeen('N', $messages, $mailbox);
40 }
41
42 public function markMessagesSeen($messages, $mailbox)
43 {
44 $this->setMessagesSeen('Y', $messages, $mailbox);
45 }
46
47 protected function setMessagesSeen($isSeen, $messages, $mailbox)
48 {
49 $messagesIds = [];
50
51 foreach ($this->messagesIds as $index => $messageId)
52 {
53 $messagesIds[$index] = $messageId;
54 }
55
56 if (empty($messagesIds) || empty($messages) || empty($mailbox))
57 {
58 return;
59 }
60
61 $mailsData = [];
62
63 foreach ($messages as $messageData)
64 {
65 $mailsData[] = [
66 'HEADER_MD5' => $messageData['HEADER_MD5'],
67 'MAILBOX_USER_ID' => $mailbox['USER_ID'],
68 'IS_SEEN' => $isSeen,
69 ];
70 }
71
72 $mailboxId = intval($this->mailboxId);
73
75 [
76 '=MAILBOX_ID' => $mailboxId,
77 '@ID' => $messagesIds,
78 ],
79 [
80 'IS_SEEN' => $isSeen,
81 ],
82 $mailsData
83 );
84
85 $dirWithMessagesId = MessageFolder::getDirIdForMessages($mailboxId,$messagesIds);
86
87 if($isSeen === 'Y')
88 {
89 MessageFolder::decreaseDirCounter($mailboxId, $dirWithMessagesId, count($messagesIds));
90 }
91 else
92 {
93 MessageFolder::increaseDirCounter($mailboxId, null, $dirWithMessagesId, count($messagesIds));
94 }
95
96 \Bitrix\Mail\Helper::updateMailboxUnseenCounter($mailboxId);
97 }
98
99 public function updateMessageFieldsAfterMove($messages, $folderNewName, $mailbox)
100 {
101 $messagesIds = [];
102 foreach ($messages as $message)
103 {
104 $messagesIds[] = $message['ID'];
105 }
106 if (empty($messagesIds))
107 {
108 return;
109 }
110
111 $mailsData = [];
112 foreach ($messages as $messageData)
113 {
114 $mailsData[] = [
115 'HEADER_MD5' => $messageData['HEADER_MD5'],
116 'MAILBOX_USER_ID' => $mailbox['USER_ID'],
117 'OLD_DIR_MD5' => $messageData['DIR_MD5'],
118 'INTERNALDATE' => $messageData['INTERNALDATE'],
119 'IS_OLD' => $messageData['IS_OLD'],
120 ];
121 }
122
124 [
125 '=MAILBOX_ID' => intval($this->mailboxId),
126 '@ID' => $messagesIds,
127 ],
128 [
129 'MSG_UID' => 0,
130 'DIR_MD5' => md5($folderNewName),
131 ],
132 $mailsData
133 );
134 }
135
136 public function addMailsToBlacklist($blacklistMails, $userId)
137 {
138 $result = new Main\Result();
139 $result->setData([Mail\BlacklistTable::addMailsBatch($blacklistMails, $userId)]);
140 return $result;
141 }
142
151 public function deleteMailsCompletely($messagesToDelete, $mailboxUserId)
152 {
153 // @TODO: make a log optional
154 /*$messageToLog = [
155 'cause' => 'deleteMailsCompletely',
156 'filter' => 'manual deletion of messages',
157 'removedMessages'=>$messagesToDelete,
158 ];
159 AddMessage2Log($messageToLog);*/
160
161 $ids = array_map(
162 function ($mail)
163 {
164 return intval($mail['MESSAGE_ID']);
165 },
166 $messagesToDelete
167 );
168 if (empty($ids))
169 {
170 return;
171 }
172 $mailFieldsForEvent = [];
173
174 foreach ($messagesToDelete as $index => $item)
175 {
176 $mailFieldsForEvent[] = [
177 'HEADER_MD5' => $item['HEADER_MD5'],
178 'MESSAGE_ID' => $item['MESSAGE_ID'],
179 'MAILBOX_USER_ID' => $mailboxUserId,
180 ];
181 }
183 [
184 '=MAILBOX_ID' => $this->mailboxId,
185 '!=MESSAGE_ID' => 0,
186 '@MESSAGE_ID' => $ids,
187 ],
188 $mailFieldsForEvent
189 );
190
191 // @TODO: use API
192 $connection = Main\Application::getInstance()->getConnection();
193 $connection->query(
194 'DELETE from ' . Mail\MailMessageTable::getTableName() .
195 ' WHERE ID IN (' . implode(',', $ids) . ');'
196 );
197 }
198
199 public function getMessages()
200 {
201 if (empty($this->messagesIds))
202 {
203 return [];
204 }
205 $messages = [];
206 $messagesSelected = Mail\MailMessageUidTable::query()
207 ->addSelect('MESSAGE_ID')
208 ->where('MAILBOX_ID', $this->mailboxId)
209 ->whereIn('ID', $this->messagesIds)
210 ->whereNot('MSG_UID', 0)
211 ->where('MESSAGE_ID', '>', 0)
212 ->addFilter('==DELETE_TIME', 0)
213 ->exec()
214 ->fetchAll();
215 if ($messagesSelected)
216 {
217 $messagesSelectedIds = array_map(
218 function ($item)
219 {
220 return $item['MESSAGE_ID'];
221 },
222 $messagesSelected
223 );
224 if (empty($messagesSelectedIds))
225 {
226 return [];
227 }
228 $messages = Mail\MailMessageUidTable::query()
229 ->registerRuntimeField(
230 '',
231 new ReferenceField(
232 'ref',
233 Mail\MailMessageTable::class,
234 ['=this.MESSAGE_ID' => 'ref.ID']
235 )
236 )
237 ->addSelect('ID')
238 ->addSelect('MAILBOX_ID')
239 ->addSelect('DIR_MD5')
240 ->addSelect('DIR_UIDV')
241 ->addSelect('MSG_UID')
242 ->addSelect('HEADER_MD5')
243 ->addSelect('IS_SEEN')
244 ->addSelect('SESSION_ID')
245 ->addSelect('MESSAGE_ID')
246 ->addSelect('INTERNALDATE')
247 ->addSelect('IS_OLD')
248 ->addSelect('ref.FIELD_FROM', 'FIELD_FROM')
249 ->whereIn('MESSAGE_ID', $messagesSelectedIds)
250 ->where('MAILBOX_ID', $this->mailboxId)
251 ->whereNot('MSG_UID', 0)
252 ->exec()
253 ->fetchAll();
254 }
255
256 return $messages;
257 }
258}
$connection
Определения actionsdefinitions.php:38
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
Определения callback_ismscenter.php:26
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static addMailsBatch(array $list, $userId=null)
Определения blacklist.php:126
static decreaseDirCounter($mailboxId, $dirWithMessagesId, $idsUnseenCount)
Определения messagefolder.php:56
static getDirIdForMessages($mailboxId, $messagesIds)
Определения messagefolder.php:81
static increaseDirCounter($mailboxId, ?MailboxDirectory $dirForMoveMessages, $dirForMoveMessagesId, $idsUnseenCount)
Определения messagefolder.php:22
setMessagesSeen($isSeen, $messages, $mailbox)
Определения repository.php:47
updateMessageFieldsAfterMove($messages, $folderNewName, $mailbox)
Определения repository.php:99
markMessagesUnseen($messages, $mailbox)
Определения repository.php:37
addMailsToBlacklist($blacklistMails, $userId)
Определения repository.php:136
deleteOldMessages($folderCurrentName)
Определения repository.php:25
getMailbox($mailboxUserId=null)
Определения repository.php:20
deleteMailsCompletely($messagesToDelete, $mailboxUserId)
Определения repository.php:151
__construct($mailboxId, $messagesIds)
Определения repository.php:14
markMessagesSeen($messages, $mailbox)
Определения repository.php:42
static getTableName()
Определения mailmessage.php:41
static deleteList(array $filter, array $messages=[], $limit=false, bool $sendEvent=true)
Определения mailmessageuid.php:113
static updateList(array $filter, array $fields, array $eventData=[], bool $sendEvent=true)
Определения mailmessageuid.php:71
static getTableName()
Определения mailmessageuid.php:54
static getUserMailbox($mailboxId, $userId=null)
Определения mailbox.php:122
static getInstance()
Определения application.php:98
$result
Определения get_property_values.php:14
Определения address.php:8
$message
Определения payment.php:8
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$messages
Определения template.php:8