• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/internals/countercalculation.php
  • Класс: Bitrix\Sender\Internals\CounterCalculation
  • Вызов: CounterCalculation::updateRecipientsAgent
static function updateRecipientsAgent()
{
	$conn = Application::getConnection();

	$hasData = false;
	if ($conn->isTableExists('b_sender_posting_rcpnt_old'))
	{
		$limit = 1000;
		$timer = new Runtime\Timer(Runtime\Env::getJobExecutionTimeout(), 100);
		while (!$timer->isElapsed())
		{
			$hasData = true;
			$sql = "INSERT IGNORE 
				INTO b_sender_posting_recipient 
				(
					CONTACT_ID, 
					POSTING_ID, 
					STATUS, 
					USER_ID, 
					FIELDS, 
					ROOT_ID, 
					IS_READ, 
					IS_CLICK, 
					IS_UNSUB, 
					DATE_DENY, 
					DATE_SENT
				) 
				SELECT
					c.ID as CONTACT_ID,
					ro2.POSTING_ID,
					ro2.STATUS,
					ro2.USER_ID,
					ro2.FIELDS,
					ro2.ROOT_ID,
					ro2.IS_READ,
					ro2.IS_CLICK,
					ro2.IS_UNSUB,
					ro2.DATE_DENY,
					ro2.DATE_SENT
				FROM
					(
						SELECT
							ro.ID,
							ro.POSTING_ID,
							ro.STATUS,
							ro.USER_ID,
							ro.FIELDS,
							ro.ROOT_ID,
							ro.IS_READ,
							ro.IS_CLICK,
							ro.IS_UNSUB,
							ro.DATE_DENY,
							ro.EMAIL,
							ro.DATE_SENT
						FROM
							b_sender_posting_rcpnt_old ro
						order by
							ro.ID ASC
						limit $limit
					) ro2,
					b_sender_posting p,
					b_sender_contact c
				WHERE
					ro2.POSTING_ID = p.ID
					and c.TYPE_ID = 1
					and c.CODE = ro2.EMAIL
				order by ro2.ID ASC 
				limit $limit";
			$conn->query($sql);
			$conn->query("delete from b_sender_posting_rcpnt_old order by ID asc limit $limit");
			if (!$conn->query('select ID from b_sender_posting_rcpnt_old limit 1')->fetch())
			{
				$hasData = false;
				break;
			}
		}
	}

	if (!$hasData)
	{
		Application::getConnection()->query(
			"DROP TABLE IF EXISTS b_sender_posting_rcpnt_old"
		);

		return '';
	}
	else
	{
		return '\Bitrix\Sender\Internals\CounterCalculation::updateRecipientsAgent();';
	}
}