• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/internals/countercalculation.php
  • Класс: Bitrix\Sender\Internals\CounterCalculation
  • Вызов: CounterCalculation::updateRecipientReadCounters
static function updateRecipientReadCounters($type)
{
	$params = array(
		'select' => array('RECIPIENT_ID'),
		'runtime' => array(
			new \Bitrix\Main\Entity\ReferenceField(
				'UPDATE_RECIPIENT',
				'Bitrix\Sender\PostingRecipientTable',
				array('=this.RECIPIENT_ID' => 'ref.ID')
			)
		),
		'filter' => array(
			'!UPDATE_RECIPIENT.ID' => null,
			'=UPDATE_RECIPIENT.IS_' . $type => 'N',
		),
		'group' => array('RECIPIENT_ID')
	);
	$dataDb = null;
	switch($type)
	{
		case 'READ':
			$dataDb = \Bitrix\Sender\PostingReadTable::getList($params);
			break;
		case 'CLICK':
			$dataDb = \Bitrix\Sender\PostingClickTable::getList($params);
			break;
		case 'UNSUB':
			$dataDb = \Bitrix\Sender\PostingUnsubTable::getList($params);
			break;
	}

	if(!$dataDb)
	{
		return false;
	}

	while($item = $dataDb->fetch())
	{
		if(self::isTimeUp())
		{
			return true;
		}

		Model\Posting\RecipientTable::update($item['RECIPIENT_ID'], ['IS_' . $type => 'Y']);
	}

	return false;
}