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