21 private const ERROR_HANDLER_ADD =
'ERROR_HANDLER_ADD';
22 private const ERROR_HANDLER_UPDATE =
'ERROR_HANDLER_UPDATE';
23 private const ERROR_HANDLER_DELETE =
'ERROR_HANDLER_DELETE';
24 private const ERROR_CHECK_FAILURE =
'ERROR_CHECK_FAILURE';
25 private const ERROR_HANDLER_ALREADY_EXIST =
'ERROR_HANDLER_ALREADY_EXIST';
26 private const ERROR_HANDLER_NOT_FOUND =
'ERROR_HANDLER_NOT_FOUND';
33 private static function prepareHandlerParams(
array $data, \CRestServer $server):
array
48 private static function checkParamsOnAddHandler(
array $params):
void
52 throw new RestException(
'Parameter NAME is not defined', self::ERROR_CHECK_FAILURE);
57 throw new RestException(
'Parameter CODE is not defined', self::ERROR_CHECK_FAILURE);
60 self::checkSettings(
$params[
'SETTINGS']);
61 self::checkProfiles(
$params[
'PROFILES']);
68 if ($deliveryRestHandler)
70 throw new RestException(
'Handler already exists!', self::ERROR_HANDLER_ALREADY_EXIST);
79 private static function checkParamsOnUpdateHandler(
array $params):
void
83 throw new RestException(
'Parameter ID is not defined', self::ERROR_CHECK_FAILURE);
88 throw new RestException(
'Parameter NAME is not defined', self::ERROR_CHECK_FAILURE);
93 throw new RestException(
'Parameter CODE is not defined', self::ERROR_CHECK_FAILURE);
96 if (array_key_exists(
'SETTINGS',
$params))
98 self::checkSettings(
$params[
'SETTINGS']);
101 if (array_key_exists(
'PROFILES',
$params))
103 self::checkProfiles(
$params[
'PROFILES']);
111 if (!$deliveryRestHandler)
113 throw new RestException(
'Handler not found', self::ERROR_HANDLER_NOT_FOUND);
116 if (
$params[
'APP_ID'] && !empty($deliveryRestHandler[
'APP_ID']) && $deliveryRestHandler[
'APP_ID'] !==
$params[
'APP_ID'])
127 private static function checkParamsOnDeleteHandler(
$params):
void
131 throw new RestException(
'Parameter ID is not defined', self::ERROR_CHECK_FAILURE);
139 if (!$deliveryRestHandler)
141 throw new RestException(
'Handler not found', self::ERROR_HANDLER_NOT_FOUND);
144 if (
$params[
'APP_ID'] && !empty($deliveryRestHandler[
'APP_ID']) && $deliveryRestHandler[
'APP_ID'] !==
$params[
'APP_ID'])
150 'select' => [
'ID',
'CLASS_NAME',
'CONFIG'],
155 $deliveryIdList = [];
156 while ($delivery = $deliveryListResult->fetch())
158 if ($delivery[
'CONFIG'][
'MAIN'][
'REST_CODE'] === $deliveryRestHandler[
'CODE'])
160 $deliveryIdList[] = $delivery[
'ID'];
167 'There are deliveries with this handler: '.implode(
', ', $deliveryIdList),
168 self::ERROR_HANDLER_DELETE
184 self::checkParamsOnAddHandler(
$params);
186 if (isset(
$params[
'SETTINGS'][
'CONFIG']) && is_array(
$params[
'SETTINGS'][
'CONFIG']))
188 $params[
'SETTINGS'][
'CONFIG'] = [
189 'ITEMS' => self::convertArrayForSaving(
$params[
'SETTINGS'][
'CONFIG'],
'[SETTINGS][CONFIG][]'),
196 'SORT' =>
$params[
'SORT'] ?: 100,
197 'DESCRIPTION' =>
$params[
'DESCRIPTION'],
198 'SETTINGS' =>
$params[
'SETTINGS'],
199 'PROFILES' => self::convertArrayForSaving(
$params[
'PROFILES'],
'[PROFILES][]'),
225 self::checkParamsOnUpdateHandler(
$params);
240 if (!array_key_exists($field,
$params))
245 if ($field ===
'CODE')
253 if ($deliveryRestHandler)
255 throw new RestException(
'Handler already exists!', self::ERROR_HANDLER_ALREADY_EXIST);
259 if ($field ===
'SORT')
263 elseif ($field ===
'PROFILES')
265 $value = self::convertArrayForSaving(
$params[$field],
'[PROFILES][]');
267 elseif ($field ===
'SETTINGS')
269 if (isset(
$params[$field][
'CONFIG']) && is_array(
$params[$field][
'CONFIG']))
272 'ITEMS' => self::convertArrayForSaving(
$params[$field][
'CONFIG'],
'[SETTINGS][CONFIG][]'),
308 self::checkParamsOnDeleteHandler(
$params);
333 foreach ($handlersList as $handler)
336 'ID' => (int)$handler[
'ID'],
337 'NAME' => (
string)$handler[
'NAME'],
338 'CODE' => (string)$handler[
'CODE'],
339 'SORT' => (
int)$handler[
'SORT'],
340 'DESCRIPTION' => (string)$handler[
'DESCRIPTION'],
347 if (isset($handler[
'PROFILES']) && is_array($handler[
'PROFILES']))
349 $profiles = self::convertArrayForOutput($handler[
'PROFILES']);
351 $resultItem[
'PROFILES'] = $profiles;
375 private static function checkProfiles($profiles): void
377 if (empty($profiles) || !is_array($profiles))
379 throw new RestException(
'Parameter PROFILES is not defined', self::ERROR_CHECK_FAILURE);
382 $profileRequiredFields = [
386 $profileAllowedFields = [
391 foreach ($profiles as $profile)
393 foreach ($profile as
$key => $value)
395 if (!in_array(
$key, $profileAllowedFields,
true))
398 'Unexpected profile key: ' .
$key .
'. Allowed keys: '
399 . implode(
', ', $profileAllowedFields)
405 foreach ($profileRequiredFields as $profileRequiredField)
408 !isset($profile[$profileRequiredField])
409 || $profile[$profileRequiredField] ===
''
412 throw new RestException(
413 'Profile field ' . $profileRequiredField .
' is not specified',
414 self::ERROR_CHECK_FAILURE
425 private static function checkSettings(
$settings): void
429 throw new RestException(
'Parameter SETTINGS is not defined', self::ERROR_CHECK_FAILURE);
434 throw new RestException(
435 'Parameter SETTINGS[CALCULATE_URL] is not defined',
436 self::ERROR_CHECK_FAILURE
441 throw new RestException(
442 'Parameter SETTINGS[CALCULATE_URL] must be of string type',
443 self::ERROR_CHECK_FAILURE
448 !empty(
$settings[
'CREATE_DELIVERY_REQUEST_URL'])
449 && !is_string(
$settings[
'CREATE_DELIVERY_REQUEST_URL'])
452 throw new RestException(
453 'Parameter SETTINGS[CREATE_DELIVERY_REQUEST_URL] must be of string type',
454 self::ERROR_CHECK_FAILURE
459 !empty(
$settings[
'CANCEL_DELIVERY_REQUEST_URL'])
460 && !is_string(
$settings[
'CANCEL_DELIVERY_REQUEST_URL'])
463 throw new RestException(
464 'Parameter SETTINGS[CANCEL_DELIVERY_REQUEST_URL] must be of string type',
465 self::ERROR_CHECK_FAILURE
473 throw new RestException(
474 'Parameter SETTINGS[CONFIG] must be of array type',
475 self::ERROR_CHECK_FAILURE
479 $configItemRequiredFields = [
485 foreach (
$settings[
'CONFIG'] as $configItem)
487 $configItemAllowedFields = (isset($configItem[
'TYPE']) && $configItem[
'TYPE'] ===
'ENUM')
501 foreach ($configItem as
$key => $value)
503 if (!in_array(
$key, $configItemAllowedFields,
true))
506 'Unexpected config item key: ' .
$key .
'. Allowed keys: '
507 . implode(
', ', $configItemAllowedFields)
509 throw new RestException(
$message, self::ERROR_CHECK_FAILURE);
513 foreach ($configItemRequiredFields as $configItemRequiredField)
515 if (!isset($configItem[$configItemRequiredField]))
517 throw new RestException(
518 'Config item field ' . $configItemRequiredField .
' is not specified',
519 self::ERROR_CHECK_FAILURE
539 if (!isset($item[
'CODE']))
541 throw new RestException(
542 (
$path ===
'' ?
'' :
$path .
' ') .
'Item CODE is not specified',
543 self::ERROR_CHECK_FAILURE
547 $profileCode = $item[
'CODE'];
548 unset($item[
'CODE']);
564 foreach (
$items as $profileCode => $item)
566 $item[
'CODE'] = $profileCode;
static includeModule($moduleName)
static getList(array $parameters=array())
static update($primary, array $data)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)