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