• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/controller/status.php
  • Класс: BitrixSaleControllerStatus
  • Вызов: Status::validate
protected function validate(array $fields)
{
	$r = new Result();

	if(!in_array($fields['TYPE'], [
		OrderStatus::TYPE,
		DeliveryStatus::TYPE
	]))
	{
		$r->addError(new Error(Loc::getMessage('CONTROLLER_ERROR_STATUS_TYPE_OUT_OF_RANGE'), 201350000003));
	}

	if(trim($fields['ID'])=='')
	{
		$r->addError(new Error(Loc::getMessage('CONTROLLER_ERROR_STATUS_TYPE_ID_EMPTY'), 201350000004));
	}
	elseif(mb_strlen($fields['ID']) > 2)
	{
		$r->addError(new Error(Loc::getMessage('CONTROLLER_ERROR_STATUS_TYPE_STRLEN'), 201350000005));
	}

	/* TODO: check is_latin()
	 * if(!is_latin($fields['TYPE']))
	{
		$r->addError(new Error('', 'ERROR_STATUS_TYPE_LATIN_ONLY'));
	}*/

	if($r->isSuccess())
	{
		if($status = $this->get($fields['ID']))
		{
			$lockedType = $this->getLockedStatusType($fields['ID']);
			if($lockedType<>'' && $lockedType!=$fields['TYPE'])
			{
				$r->addError(new Error(Loc::getMessage('CONTROLLER_ERROR_STATUS_WRONG_TYPE'),201350000006));
			}

			if ($status['TYPE'] != $fields['TYPE'])
			{
				if ($status['TYPE'] == BitrixSaleOrderStatus::TYPE)
				{
					if(BitrixSaleInternalsOrderTable::getList([
						'select'=>['ID'],
						'filter'=>['STATUS_ID'=>$status['ID']],
						'limit'=>1
					])->fetch())
					{
						$r->addError(new Error(Loc::getMessage('CONTROLLER_ERROR_STATUS_TYPE_ORDER_EXISTS'),201350000007));
					}
				}
				else
				{
					if(BitrixSaleInternalsShipmentTable::getList([
						'select'=>['ID'],
						'filter'=>['STATUS_ID'=>$status['ID']],
						'limit'=>1
					])->fetch())
					{
						$r->addError(new Error(Loc::getMessage('CONTROLLER_ERROR_STATUS_TYPE_SHIPMENT_EXISTS'),201350000008));
					}
				}
			}
		}
	}

	return $r;
}