• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/model/propertyfeature.php
  • Класс: BitrixIblockModelPropertyFeature
  • Вызов: PropertyFeature::updateFeatures
static function updateFeatures($propertyId, array $features): MainEntityResult
{
	$result = new MainEntityResult();

	$propertyId = (int)$propertyId;
	if ($propertyId <= 0)
	{
		$result->addError(new MainError(
			Loc::getMessage('PROPERTY_FEATURE_ERR_BAD_PROPERTY_ID')
		));
		return $result;
	}

	if (empty($features))
	{
		$result->addError(new MainError(
			Loc::getMessage('PROPERTY_FEATURE_ERR_EMPTY_FEATURE_LIST')
		));
		return $result;
	}

	$features = self::checkFeatureList($features);
	if ($features === null)
	{
		$result->addError(new MainError(
			Loc::getMessage('PROPERTY_FEATURE_ERR_BAD_FEATURE_LIST')
		));
		return $result;
	}

	$currentList = [];
	$iterator = IblockPropertyFeatureTable::getList([
		'select' => ['*'],
		'filter' => ['=PROPERTY_ID' => $propertyId]
	]);
	while ($row = $iterator->fetch())
	{
		$currentList[self::getIndex($row)] = $row;
	}
	unset($row, $iterator);

	foreach ($features as $index => $row)
	{
		if (isset($currentList[$index]))
		{
			$internalResult = IblockPropertyFeatureTable::update(
				$currentList[$index]['ID'],
				['IS_ENABLED' => $row['IS_ENABLED']]
			);
		}
		else
		{
			$row['PROPERTY_ID'] = $propertyId;
			$internalResult = IblockPropertyFeatureTable::add($row);
		}
		if (!$internalResult->isSuccess())
		{
			$result->addErrors($internalResult->getErrors());
			return $result;
		}
	}
	unset($internalResult, $index, $row);
	unset($currentList);

	return $result;
}