- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/posting/sender.php
- Класс: BitrixSenderPostingSender
- Вызов: Sender::updateActualStatus
static function updateActualStatus($postingId, $isPrevented = false, $awaitThread = false)
{
//set status and delivered and error emails
$statusList = PostingTable::getRecipientCountByStatus($postingId,[
'LOGIC' => 'OR',
[
'@STATUS' => [
PostingRecipientTable::SEND_RESULT_DENY,
PostingRecipientTable::SEND_RESULT_NONE,
PostingRecipientTable::SEND_RESULT_SUCCESS,
PostingRecipientTable::SEND_RESULT_ERROR,
],
],
[
'=STATUS' => PostingRecipientTable::SEND_RESULT_WAIT_ACCEPT,
'>=DATE_SENT' => (new TypeDateTime())->add("- 1 week")
]
]);
$hasStatusError = array_key_exists(PostingRecipientTable::SEND_RESULT_ERROR, $statusList);
$hasStatusNone = array_key_exists(PostingRecipientTable::SEND_RESULT_NONE, $statusList);
$hasStatusWait = array_key_exists(PostingRecipientTable::SEND_RESULT_WAIT_ACCEPT, $statusList);
if ($isPrevented)
{
$status = PostingTable::STATUS_ABORT;
}
elseif (!$hasStatusNone && !$awaitThread && !$hasStatusWait)
{
$status = $hasStatusError ? PostingTable::STATUS_SENT_WITH_ERRORS : PostingTable::STATUS_SENT;
}
else
{
$status = PostingTable::STATUS_PART;
}
$postingUpdateFields = [
'STATUS' => $status,
'DATE_SENT' => $status == PostingTable::STATUS_PART ? null : new TypeDateTime(),
'COUNT_SEND_ALL' => 0
];
$recipientStatusToPostingFieldMap = PostingTable::getRecipientStatusToPostingFieldMap();
foreach ($recipientStatusToPostingFieldMap as $recipientStatus => $postingFieldName)
{
if (!array_key_exists($recipientStatus, $statusList))
{
$statusList[$recipientStatus] = 0;
}
$postingUpdateFields[$postingFieldName] = $statusList[$recipientStatus];
}
$postingUpdateFields['COUNT_SEND_ALL'] = array_sum($statusList);
ModelPostingTable::update($postingId, $postingUpdateFields);
return $status;
}