• Модуль: 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;
}