- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/mailing.php
- Класс: Bitrix\Sender\MailingTable
- Вызов: MailingTable::updateChain
static function updateChain($id, array $fields)
{
$result = new Entity\Result;
static::checkFieldsChain($result, $id, $fields);
if(!$result->isSuccess(true))
return $result;
$parentChainId = null;
$existChildIdList = array();
foreach($fields as $chainFields)
{
$chainId = $chainFields['ID'];
unset($chainFields['ID']);
$chainFields['MAILING_ID'] = $id;
$chainFields['IS_TRIGGER'] = 'Y';
$chainFields['REITERATE'] = 'Y';
$chainFields['PARENT_ID'] = $parentChainId;
// default status
if($chainId > 0)
{
$chain = MailingChainTable::getRowById(array('ID' => $chainId));
if($chain && $chain['STATUS'] != MailingChainTable::STATUS_WAIT)
{
$chainFields['STATUS'] = $chain['STATUS'];
unset($chainFields['CREATED_BY']);
}
}
if(empty($chainFields['STATUS']))
$chainFields['STATUS'] = MailingChainTable::STATUS_WAIT;
// add or update
if($chainId > 0)
{
$existChildIdList[] = $chainId;
$chainUpdateDb = Model\LetterTable::update($chainId, $chainFields);
if($chainUpdateDb->isSuccess())
{
}
else
{
$result->addErrors($chainUpdateDb->getErrors());
}
}
else
{
$chainAddDb = MailingChainTable::add($chainFields);
if($chainAddDb->isSuccess())
{
$chainId = $chainAddDb->getId();
$existChildIdList[] = $chainId;
}
else
{
$result->addErrors($chainAddDb->getErrors());
}
}
if(!empty($errorList)) break;
$parentChainId = null;
if($chainId !== null)
$parentChainId = $chainId;
}
$deleteChainDb = MailingChainTable::getList(array(
'select' => array('ID'),
'filter' => array('MAILING_ID' => $id, '!ID' => $existChildIdList),
));
while($deleteChain = $deleteChainDb->fetch())
{
Model\LetterTable::delete($deleteChain['ID']);
}
static::updateChainTrigger($id);
return $result;
}