- Модуль: mail
- Путь к файлу: ~/bitrix/modules/mail/lib/mailmessageuid.php
- Класс: BitrixMailMailMessageUidTable
- Вызов: MailMessageUidTable::deleteList
static function deleteList(array $filter, array $messages = [], $limit = false): bool
{
$eventName = MessageEventManager::EVENT_DELETE_MESSAGES;
$filter = array_merge(
$filter,
[
'!=MESSAGE_ID' => 0,
]
);
$messages = static::selectMessagesToBeDeleted(
MessageEventManager::getRequiredFieldNamesForEvent($eventName),
$filter,
$messages,
$limit
);
if (empty($messages))
{
return false;
}
$entity = static::getEntity();
$connection = $entity->getConnection();
$portionLimit = 200;
$messagesCount = count($messages);
for ($i = 0; $i < $messagesCount; $i=$i+$portionLimit)
{
$portion = array_slice($messages, $i, $portionLimit);
$query = sprintf(
' FROM %s WHERE ID IN ('' . join("','", array_column($portion, 'ID')) . '')',
$connection->getSqlHelper()->quote($entity->getDbTableName()),
);
self::insertIntoDeleteMessagesQueue($connection, $query);
$connection->query(sprintf('DELETE %s', $query));
}
$remains=[];
if($limit === false)
{
$remains = array_column(
static::selectMessagesToBeDeleted(
MessageEventManager::getRequiredFieldNamesForEvent($eventName),
$filter,
$messages
),
'MESSAGE_ID'
);
}
else
{
if ($messagesIds = array_column($messages, 'MESSAGE_ID') )
{
$remains = array_column(
static::getList(
[
'select' => [
'MESSAGE_ID',
],
'filter' => [
'@MESSAGE_ID' => $messagesIds,
],
]
)->fetchAll(),
'MESSAGE_ID'
);
}
}
//Checking that the values were actually deleted:
$deletedMessages = array_filter(
$messages,
function ($item) use ($remains)
{
return !in_array($item['MESSAGE_ID'], $remains);
}
);
$eventManager = EventManager::getInstance();
$eventKey = $eventManager->addEventHandler(
'mail',
'onMailMessageDeleted',
array(MessageEventManager::class, 'onMailMessageDeleted')
);
$event = new BitrixMainEvent('mail', 'onMailMessageDeleted', array(
'MAIL_FIELDS_DATA' => $deletedMessages,
'DELETED_BY_FILTER' => $filter,
));
$event->send();
EventManager::getInstance()->removeEventHandler('mail', 'onMailMessageDeleted', $eventKey);
return true;
}