- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/entity/letter.php
- Класс: BitrixSenderEntityLetter
- Вызов: Letter::saveDataSegments
protected function saveDataSegments($id, array $segmentsInclude, array $segmentsExclude)
{
$segmentsExclude = array_unique($segmentsExclude);
$segmentsInclude = array_unique($segmentsInclude);
$segmentsInclude = array_diff($segmentsInclude, $segmentsExclude);
$segmentsList = array(
array(
'list' => $segmentsExclude,
'include' => false
),
array(
'list' => $segmentsInclude,
'include' => true
),
);
$oldSegments = $this->loadDataSegments($id);
$letter = LetterTable::getById($id)->fetch();
LetterSegmentTable::deleteList(array('LETTER_ID' => $id));
$isChanged = false;
$dataToInsert = [];
foreach ($segmentsList as $segments)
{
if(empty($segments['list']))
{
continue;
}
$typeCode = $segments['include'] ? 'INCLUDE' : 'EXCLUDE';
$list = [];
foreach ($segments['list'] as $segment)
{
$list[] = ['DATE_UPDATE' => $letter['DATE_UPDATE'], 'ID' => $segment];
$dataToInsert[] = array(
'LETTER_ID' => $id,
'SEGMENT_ID' => $segment,
'INCLUDE' => $segments['include'],
);
}
$newest = self::getArrayDiffNewest($list, $oldSegments[$typeCode]);
$removed = self::getArrayDiffRemoved($list, $oldSegments[$typeCode]);
if (count($newest) === 0 && count($removed) === 0)
{
continue;
}
if (count($newest) > 0)
{
Segment::updateUseCounters($newest, $segments['include']);
}
$isChanged = true;
}
if(!empty($dataToInsert))
{
LetterSegmentTable::addMulti($dataToInsert);
}
if ($isChanged && $this->getId() && $this->get('POSTING_ID'))
{
PostingBuilder::create()
->run($this->get('POSTING_ID'), false);
}
}