• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Params.php
  • Класс: BitrixImV2MessageParams
  • Вызов: Params::save
public function save(): Result
{
	$result = new Result;

	/** @var EO_MessageParam_Collection $dataEntityCollection */
	$entityCollectionClass = Param::getDataClass()::getCollectionClass();
	$dataEntityCollection = new $entityCollectionClass;

	$dropIds = [];

	foreach ($this as $item)
	{
		if ($item->isDeleted())
		{
			unset($this[$item->getName()]);
			continue;
		}
		if (!$item->hasValue())
		{
			continue;
		}

		if ($item instanceof Param)
		{
			$prepareResult = $item->prepareFields();
			if ($prepareResult->isSuccess())
			{
				if ($item->isChanged())
				{
					$dataEntityCollection->add($item->getDataEntity());
					$item->markChanged(false);
				}
			}
			else
			{
				$result->addErrors($prepareResult->getErrors());
			}
		}
		elseif ($item instanceof ParamArray)
		{
			foreach ($item as $subItem)
			{
				if ($subItem->isDeleted())
				{
					if ($subItem->getPrimaryId())
					{
						$dropIds[] = $subItem->getPrimaryId();
					}
				}
				else
				{
					$prepareResult = $subItem->prepareFields();
					if ($prepareResult->isSuccess())
					{
						if ($subItem->isChanged())
						{
							$dataEntityCollection->add($subItem->getDataEntity());
							$subItem->markChanged(false);
						}
					}
					else
					{
						$result->addErrors($prepareResult->getErrors());
					}
				}
			}
		}
	}

	foreach ($this->droppedItems as $item)
	{
		if ($item instanceof Param)
		{
			if ($item->getPrimaryId())
			{
				$dropIds[] = $item->getPrimaryId();
			}
		}
		elseif ($item instanceof ParamArray)
		{
			foreach ($item as $subItem)
			{
				if ($subItem->getPrimaryId())
				{
					$dropIds[] = $subItem->getPrimaryId();
				}
			}
		}
	}

	$saveResult = $dataEntityCollection->save(true);
	if ($saveResult->isSuccess())
	{
		if (!empty($dropIds))
		{
			MessageParamTable::deleteBatch(['=ID' => $dropIds]);
		}

		$this->droppedItems = [];
	}
	else
	{
		$result->addErrors($saveResult->getErrors());
	}

	return $result;
}