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