21 private const ERROR_CHECK_FAILURE =
'ERROR_CHECK_FAILURE';
22 private const ERROR_HANDLER_NOT_FOUND =
'ERROR_HANDLER_NOT_FOUND';
23 private const ERROR_DELIVERY_ADD =
'ERROR_DELIVERY_ADD';
24 private const ERROR_DELIVERY_UPDATE =
'ERROR_DELIVERY_UPDATE';
25 private const ERROR_DELIVERY_DELETE =
'ERROR_DELIVERY_DELETE';
26 private const ERROR_DELIVERY_CONFIG_UPDATE =
'ERROR_DELIVERY_CONFIG_UPDATE';
27 private const ERROR_DELIVERY_NOT_FOUND =
'ERROR_DELIVERY_NOT_FOUND';
29 private const ALLOWED_DELIVERY_FIELDS = [
40 private const DELIVERY_FIELDS_STRING_TYPE = [
47 private const DELIVERY_FIELDS_INT_TYPE = [
59 private static function prepareDeliveryParams(
array $data, \CRestServer $server):
array
73 'LOGOTYPE' =>
'LOGOTIP',
83 'LOGOTIP' =>
'LOGOTYPE',
91 foreach (self::DELIVERY_FIELDS_STRING_TYPE as $stringField)
93 if (!array_key_exists($stringField,
$data))
99 ? (string)
$data[$stringField]
104 foreach (self::DELIVERY_FIELDS_INT_TYPE as $intField)
106 if (!array_key_exists($intField,
$data))
112 ? (int)
$data[$intField]
125 private static function checkParamsBeforeDeliveryAdd(
$params): void
127 if (empty(
$params[
'REST_CODE']))
129 throw new RestException(
'Parameter REST_CODE is not defined', self::ERROR_CHECK_FAILURE);
134 throw new RestException(
'Parameter NAME is not defined', self::ERROR_CHECK_FAILURE);
139 if (!is_array(
$params[
'CONFIG']))
141 throw new RestException(
'Parameter CONFIG must be of array type', self::ERROR_CHECK_FAILURE);
144 self::checkConfig(
$params[
'CONFIG']);
147 if (empty(
$params[
'CURRENCY']))
149 throw new RestException(
'Parameter CURRENCY is not defined', self::ERROR_CHECK_FAILURE);
155 if (
$params[
'APP_ID'] && !empty($handlerData[
'APP_ID']) && $handlerData[
'APP_ID'] !==
$params[
'APP_ID'])
157 throw new AccessException();
162 throw new RestException(
163 'Handler "' .
$params[
'REST_CODE'] .
'" not exists', self::ERROR_HANDLER_NOT_FOUND
185 private static function checkParamsBeforeDeliveryUpdate(
$params): void
189 throw new RestException(
'Parameter ID is not defined', self::ERROR_CHECK_FAILURE);
192 $data = Delivery\Services\Manager::getById(
$params[
'ID']);
195 throw new RestException(
'Delivery not found', self::ERROR_DELIVERY_NOT_FOUND);
198 if (array_key_exists(
'NAME',
$params))
202 throw new RestException(
'Parameter NAME should not be empty', self::ERROR_CHECK_FAILURE);
206 if (!self::hasAccessToDelivery(
$data,
$params[
'APP_ID']))
208 throw new AccessException();
217 private static function checkParamsBeforeDeliveryDelete(
$params): void
221 throw new RestException(
'Parameter ID is not defined', self::ERROR_CHECK_FAILURE);
224 $data = Delivery\Services\Manager::getById(
$params[
'ID']);
227 throw new RestException(
'Delivery not found', self::ERROR_DELIVERY_NOT_FOUND);
230 if (!self::hasAccessToDelivery(
$data,
$params[
'APP_ID']))
232 throw new AccessException();
240 private static function checkParamsBeforeDeliveryConfigGet(
$params): void
244 throw new RestException(
'Parameter ID is not defined', self::ERROR_CHECK_FAILURE);
247 $data = Delivery\Services\Manager::getById(
$params[
'ID']);
250 throw new RestException(
'Delivery not found', self::ERROR_DELIVERY_NOT_FOUND);
253 if (!self::hasAccessToDelivery(
$data,
$params[
'APP_ID']))
255 throw new AccessException();
259 private static function checkParamsBeforeDeliveryConfigUpdate(
$params): void
263 throw new RestException(
'Parameter ID is not defined', self::ERROR_CHECK_FAILURE);
268 if (!is_array(
$params[
'CONFIG']))
270 throw new RestException(
'Parameter CONFIG must be of array type', self::ERROR_CHECK_FAILURE);
273 self::checkConfig(
$params[
'CONFIG']);
276 $data = Delivery\Services\Manager::getById(
$params[
'ID']);
279 throw new RestException(
'Delivery not found', self::ERROR_DELIVERY_NOT_FOUND);
282 if (!self::hasAccessToDelivery(
$data,
$params[
'APP_ID']))
284 throw new AccessException();
293 $file[
'MODULE_ID'] =
'sale';
294 return \CFile::SaveFile($file,
'sale');
311 self::checkParamsBeforeDeliveryAdd(
$params);
317 'DESCRIPTION' =>
$params[
'DESCRIPTION'] ??
'',
318 'CLASS_NAME' =>
'\\' . \Sale\Handlers\Delivery\RestHandler::class,
319 'CURRENCY' =>
$params[
'CURRENCY'],
320 'SORT' =>
$params[
'SORT'] ?? 100,
321 'ACTIVE' =>
$params[
'ACTIVE'] ??
'Y',
323 'LOGOTIP' =>
$params[
'LOGOTIP'] ??
null,
330 'select' => self::ALLOWED_DELIVERY_FIELDS,
331 'filter' => [
'=ID' => (
int)
$result->getId()],
336 'select' => self::ALLOWED_DELIVERY_FIELDS,
337 'filter' => [
'=PARENT_ID' => (
int)
$result->getId()],
339 while ($profileDelivery = $profilesDeliveryList->fetch())
346 'profiles' => $profiles,
365 self::checkParamsBeforeDeliveryUpdate(
$params);
369 if (array_key_exists(
'NAME',
$params))
374 if (array_key_exists(
'ACTIVE',
$params))
379 if (array_key_exists(
'DESCRIPTION',
$params))
384 if (array_key_exists(
'SORT',
$params))
389 if (array_key_exists(
'CURRENCY',
$params))
394 if (array_key_exists(
'LOGOTIP',
$params))
420 self::checkParamsBeforeDeliveryDelete(
$params);
442 self::checkParamsBeforeDeliveryListGet(
$params);
446 ? array_flip(self::prepareIncomingParams(array_flip(
$params[
'SELECT'])))
447 : self::ALLOWED_DELIVERY_FIELDS
467 while ($delivery = $deliveryListResult->fetch())
479 private static function checkParamsBeforeDeliveryListGet(
array $params)
484 $select = array_flip(self::prepareIncomingParams(array_flip(
$select)));
485 $diffSelect = array_diff(
$select, self::ALLOWED_DELIVERY_FIELDS);
490 implode(
', ', $diffSelect) .
' not allowed for select',
491 self::ERROR_CHECK_FAILURE
500 foreach (
$filter as $rawName => $value)
503 if (isset($filterField[
'FIELD']))
510 $diffFilter = array_diff(
$filterFields, self::ALLOWED_DELIVERY_FIELDS);
513 throw new RestException(
514 implode(
', ', $diffFilter) .
' not allowed for filter',
515 self::ERROR_CHECK_FAILURE
527 $diffOrder = array_diff(array_keys(
$order), self::ALLOWED_DELIVERY_FIELDS);
530 throw new RestException(
531 implode(
', ', $diffOrder) .
' not allowed for order',
532 self::ERROR_CHECK_FAILURE
549 self::checkParamsBeforeDeliveryConfigGet(
$params);
556 if (is_array($delivery[
'CONFIG']))
558 $delivery[
'CONFIG'] = self::prepareOutcomingConfig($delivery[
'CONFIG']);
561 $result = is_array($delivery[
'CONFIG']) ? $delivery[
'CONFIG'] : [];
578 self::checkParamsBeforeDeliveryConfigUpdate(
$params);
582 $params[
'REST_CODE'] = $handlerCode;
587 'CONFIG' => self::prepareIncomingConfig(
$params[
'CONFIG'] ?? [],
$params)
603 'REST_CODE' =>
$params[
'REST_CODE']
607 foreach (
$config as $configItem)
609 $result[
'MAIN'][$configItem[
'CODE']] = $configItem[
'VALUE'];
621 if (isset(
$config[
'MAIN'][
'REST_CODE']))
623 unset(
$config[
'MAIN'][
'REST_CODE']);
629 foreach ($configItems as $configItemCode => $configItemValue)
632 'CODE' => $configItemCode,
633 'VALUE' => $configItemValue,
640 private static function checkConfig(
array $config): void
647 foreach (
$config as $configItem)
649 foreach ($requiredFields as $requiredField)
652 !isset($configItem[$requiredField])
653 || $configItem[$requiredField] ===
''
656 throw new RestException(
657 'Config item ' . $requiredField .
' is not specified',
658 self::ERROR_CHECK_FAILURE
static includeModule($moduleName)