• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/posting/segmentdatabuilder.php
  • Класс: BitrixSenderPostingSegmentDataBuilder
  • Вызов: SegmentDataBuilder::checkIsSegmentPrepared
static function checkIsSegmentPrepared(int $groupId)
{
	if (!Locker::lock(self::SEGMENT_LOCK_KEY, $groupId))
	{
		return false;
	}

	$states = GroupStateTable::getList([
		'filter' => [
			'=GROUP_ID' => $groupId
		],
	])->fetchAll();

	$currentState = GroupTable::STATUS_READY_TO_USE;
	foreach ($states as $state)
	{
		if ((int)$state['STATE'] !== GroupStateTable::STATES['COMPLETED'])
		{
			if (!SegmentDataBuilderJob::existsInDB($state['ID']))
			{
				SegmentDataBuilderJob::addEventAgent($state['ID']);
			}

			$currentState = GroupTable::STATUS_IN_PROGRESS;
			break;
		}
	}

	GroupTable::update($groupId, [
		'fields' => ['STATUS' => $currentState]
	]);

	$prepared = $currentState === GroupTable::STATUS_READY_TO_USE;
	if (CModule::IncludeModule('im') && $prepared)
	{
		$mailings = LetterSegmentTable::getList([
			'select' => [
				'ID' => 'LETTER.ID',
				'USER_ID' => 'LETTER.CREATED_BY',
			],
			'filter' => [
				'=SEGMENT_ID' => $groupId,
				'!=LETTER.STATUS' => LetterTable::STATUS_END
			],
		]);
		$group = GroupTable::getById($groupId)->fetchRaw();

		foreach ($mailings as $mailing)
		{
			if (!$mailing['ID'])
			{
				continue;
			}

			if (static::$isSent[$groupId][$mailing['USER_ID']])
			{
				continue;
			}

			LetterTable::update($mailing['ID'], [
				'WAITING_RECIPIENT' => 'N'
			]);

			$messageFields = [
				"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
				"NOTIFY_MODULE" => "sender",
				"NOTIFY_EVENT" => "group_prepared",
				"TO_USER_ID" => $mailing['USER_ID'],
				"NOTIFY_TAG" => "SENDER|GROUP_PREPARED|" . $groupId . "|" . $mailing['USER_ID'],
				"NOTIFY_MESSAGE" => Loc::getMessage(
					"SENDER_SEGMENT_BUILDER_GROUP_PREPARED",
					[
						"#SEGMENT_ID#" => $groupId,
						"#SEGMENT_NAME#" => htmlspecialcharsbx($group['NAME'])
					]
				)
			];

			CIMNotify::Add($messageFields);
			static::$isSent[$groupId][$mailing['USER_ID']] = $mailing['USER_ID'];
		}
	}

	Locker::unlock(self::SEGMENT_LOCK_KEY, $groupId);

	return $prepared;
}