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