- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/posting/builder.php
- Класс: BitrixSenderPostingBuilder
- Вызов: Builder::prepareGroups
protected function prepareGroups()
{
$groups = [];
$groups = array_merge($groups, $this->getLetterConnectors($this->postingData['MAILING_CHAIN_ID']));
$groups = array_merge($groups, $this->getSubscriptionConnectors($this->postingData['MAILING_ID']));
ModelLetterTable::update($this->postingData['MAILING_CHAIN_ID'], [
'WAITING_RECIPIENT' => 'N'
]);
foreach ($groups as $group)
{
if ($group['GROUP_ID'] && !GroupTable::getById($group['GROUP_ID'])->fetch())
{
continue;
}
if ($group['GROUP_ID'])
{
$this->groupQueueService
->addToDB(ModelGroupQueueTable::TYPE['POSTING'], $this->postingId, $group['GROUP_ID']);
}
if (in_array($group['STATUS'], [GroupTable::STATUS_NEW, GroupTable::STATUS_DONE]))
{
SegmentDataBuilder::actualize($group['GROUP_ID'], true);
$this->stopRecipientListBuilding();
}
if ($group['STATUS'] !== GroupTable::STATUS_READY_TO_USE)
{
SegmentDataBuilder::checkIsSegmentPrepared($group['GROUP_ID']);
$this->stopRecipientListBuilding();
}
}
// fetch all connectors for getting emails
array_walk($groups,
function(&$group)
{
$group['INCLUDE'] = (bool)$group['INCLUDE'];
}
);
// sort groups by include value
usort(
$groups,
function ($a, $b)
{
if ($a['INCLUDE'] == $b['INCLUDE'])
{
return 0;
}
return ($a['INCLUDE'] > $b['INCLUDE']) ? -1 : 1;
}
);
return $groups;
}