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