• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/location/tree.php
  • Класс: BitrixSaleLocationis
  • Вызов: is::checkFields
static function checkFields(EntityResult $result, $primary, array $data)
{
	parent::checkFields($result, $primary, $data);

	if(!($result instanceof EntityUpdateResult)) // work out only when update()
		return;

	foreach (static::getEntity()->getFields() as $field)
	{
		if($field->getName() == 'PARENT_ID' && mb_strlen($data['PARENT_ID']))
		{
			//it cant be parent for itself
			if(intval($primary['ID']) == intval($data['PARENT_ID']))
			{
				$result->addError(new EntityFieldError(
					$field,
					Loc::getMessage('SALE_LOCATION_TREE_ENTITY_CANNOT_MOVE_STRAIGHT_TO_ITSELF_EXCEPTION'),
					EntityFieldError::INVALID_VALUE
				));
			}
			else
			{
				try
				{
					$node = self::getNodeInfo($primary['ID']);
					$nodeDst = self::getNodeInfo($data['PARENT_ID']);

					// new parent cannot belong to node subtree
					if($node['PARENT_ID'] != $nodeDst['ID'])
					{
						if($nodeDst['LEFT_MARGIN'] >= $node['LEFT_MARGIN'] && $nodeDst['RIGHT_MARGIN'] <= $node['RIGHT_MARGIN'])
						{
							$result->addError(new EntityFieldError(
								$field,
								Loc::getMessage('SALE_LOCATION_TREE_ENTITY_CANNOT_MOVE_TO_ITSELF_EXCEPTION'),
								EntityFieldError::INVALID_VALUE
							));
						}
					}

				}
				catch(MainSystemException $e)
				{
				}
			}
		}
	}
}