4namespace Bitrix\Rest\Integration\View;
7use Bitrix\Main\Engine\Response\Converter;
9use Bitrix\Main\NotImplementedException;
10use Bitrix\Main\Result;
11use Bitrix\Main\Type\Collection;
12use Bitrix\Main\Type\Date;
13use Bitrix\Main\Type\DateTime;
14use Bitrix\Rest\Integration\Externalizer;
25 $attributs = isset(
$info[
'ATTRIBUTES']) ?
$info[
'ATTRIBUTES'] : [];
40 $intersectRequired = array_intersect([
47 'TYPE' =>
$info[
'TYPE'],
48 'IS_REQUIRED' =>
count($intersectRequired) > 0,
59 $ignoredAttributes = isset(
$filter[
'ignoredAttributes'])?
$filter[
'ignoredAttributes']:[];
60 $ignoredFields = isset(
$filter[
'ignoredFields'])?
$filter[
'ignoredFields']:[];
61 $skipFields = isset(
$filter[
'skipFields'])?
$filter[
'skipFields']:[];
65 if(in_array(
$name, $ignoredFields))
71 if(isset(
$info[
'ATTRIBUTES']))
73 $skipAttr = array_intersect($ignoredAttributes,
$info[
'ATTRIBUTES']);
95 $converter =
new Converter(Converter::VALUES | Converter::TO_SNAKE | Converter::TO_SNAKE_DIGIT | Converter::TO_UPPER);
96 return $converter->process(
$fields);
108 $converter =
new Converter(Converter::VALUES | Converter::TO_UPPER);
109 $converterForKey =
new Converter(Converter::KEYS | Converter::TO_SNAKE | Converter::TO_SNAKE_DIGIT | Converter::TO_UPPER);
111 foreach ($converter->process(
$fields) as
$key=>$value)
126 $converter =
new Converter(Converter::KEYS | Converter::RECURSIVE | Converter::TO_SNAKE | Converter::TO_SNAKE_DIGIT | Converter::TO_UPPER);
127 return $converter->process(
$data);
139 $fieldsInfo = empty($fieldsInfo) ? $this->
getFields() : $fieldsInfo;
141 $orderFields = $fieldsInfo;
147 'ignoredAttributes' => [
157 'ignoredAttributes' => [
169 'ignoredAttributes' => [
191 $fieldsInfo = empty($fieldsInfo) ? $this->
getFields():$fieldsInfo;
204 $fieldsInfo = empty($fieldsInfo) ? $this->
getFields():$fieldsInfo;
229 if($r->isSuccess() ===
false)
247 $value = floatval($value);
251 if (is_array($value))
253 Collection::normalizeArrayValuesByInt($value);
261 $value = (int)$value;
268 if ($boolean->isSuccess())
270 $value = $boolean->getData()[0];
274 $r->addErrors($boolean->getErrors());
281 if($date->isSuccess())
283 $value = $date->getData()[0];
287 $r->addErrors($date->getErrors());
294 if($date->isSuccess())
296 $value = $date->getData()[0];
300 $r->addErrors($date->getErrors());
312 $value = $r->getData()[0];
318 $r->setData([$value]);
330 || !in_array($value, [
'Y',
'N'])
333 $r->addError(
new Error(
'Boolean value must be Y or N'));
338 $value = $value ===
'Y';
339 $r->setData([$value]);
350 if($date instanceof
Date)
356 $r->addError(
new Error(
'Wrong type date'));
361 $r->setData([$value]);
379 $r->addError(
new Error(
'Wrong type datetime'));
384 $r->setData([$value]);
398 $time = strtotime($value);
412 $time = strtotime($value);
422 $remove = isset($value[
'REMOVE']) && is_string($value[
'REMOVE']) && mb_strtoupper($value[
'REMOVE']) ===
'Y';
423 $data = isset($value[
'FILE_DATA']) ? $value[
'FILE_DATA'] : [];
424 if (!is_array(
$data))
438 if(is_array($fileInfo))
456 $r->setData([$value]);
488 $fieldsInfo = empty($fieldsInfo)? $this->
getFields():$fieldsInfo;
496 'ignoredAttributes' => [
505 foreach (
$fields as $rawName=>$value)
509 $info = isset($listFieldsInfo[$field[
'FIELD']]) ? $listFieldsInfo[$field[
'FIELD']]:
null;
517 if ($r->isSuccess() ===
false)
522 $operation = mb_substr($rawName, 0, mb_strlen($rawName) - mb_strlen($field[
'FIELD']));
523 if (isset(
$info[
'FORBIDDEN_FILTERS'])
524 && is_array(
$info[
'FORBIDDEN_FILTERS'])
525 && in_array($operation,
$info[
'FORBIDDEN_FILTERS'],
true))
530 $rawName = $operation.$this->canonicalizeField($field[
'FIELD'],
$info);
532 $result[$rawName] = $r->getData()[0];
543 $fieldsInfo = empty($fieldsInfo)? $this->
getFields():$fieldsInfo;
549 $fields = array_keys($listFieldsInfo);
554 if (!is_scalar(
$name))
574 $fieldsInfo = empty($fieldsInfo)? $this->
getFields():$fieldsInfo;
582 'ignoredAttributes' => [
593 $info = isset($listFieldsInfo[$field]) ? $listFieldsInfo[$field]:
null;
610 $fieldsInfo = empty($fieldsInfo) ? $this->
getFields():$fieldsInfo;
614 if(is_array($list) &&
count($list)>0)
616 foreach ($list as
$k=>$item)
630 $type = isset($fieldsInfo[
$name][
'TYPE']) ? $fieldsInfo[
$name][
'TYPE']:
'';
632 if($this->isEmptyValue($value,
$type))
640 $value = floatval($value);
644 $value = (int)$value;
650 if($externalizedValue->isSuccess())
652 $value = $externalizedValue->getData()[0];
656 $r->addErrors($externalizedValue->getErrors());
663 if($date->isSuccess())
665 $value = $date->getData()[0];
669 $r->addErrors($date->getErrors());
676 if($date->isSuccess())
678 $value = $date->getData()[0];
682 $r->addErrors($date->getErrors());
694 $value = $r->getData()[0];
701 $r->setData([$value]);
707 private function isEmptyValue(mixed $value,
string $type): bool
717 return empty($value);
738 if ($r->isSuccess() ===
false)
758 if (!is_bool($value))
760 $r->addError(
new Error(
'Boolean value must be true of false'));
765 $value = $value ?
'Y' :
'N';
766 $r->setData([$value]);
775 $time = strtotime($value);
780 $r->setData([$value]);
790 $time = strtotime($value);
795 $r->setData([$value]);
823 $r->setData([$value]);
832 $fieldsInfo = empty($fieldsInfo) ? $this->
getFields():$fieldsInfo;
836 if(is_array($list) &&
count($list)>0)
857 $fieldsInfo = empty($fieldsInfo) ? $this->
getFields():$fieldsInfo;
875 if(!$required->isSuccess())
876 $r->addError(
new Error(
'Required fields: '.implode(
', ', $required->getErrorMessages())));
886 if(!$required->isSuccess())
887 $r->addError(
new Error(
'Required fields: '.implode(
', ', $required->getErrorMessages())));
922 $addRequiredFields = isset(
$params[
'+required']) ?
$params[
'+required']:[];
923 $delRequiredFields = isset(
$params[
'-required']) ?
$params[
'-required']:[];
927 if(in_array(
$name, $delRequiredFields))
945 $canonical =
$info[
'CANONICAL_NAME'] ??
null;
962 $item = array_filter($fieldsInfo,
function(
$info) use (
$name){
963 $canonical =
$info[
'CANONICAL_NAME'] ??
null;
969 return $canonical ===
$name;
972 if (is_array($item) && !empty($item))
974 $alias = array_keys($item)[0];
static convertKeysToCamelCase($fields)
checkRequiredFieldsAdd($fields)
externalizeExtendedTypeValue($name, $value, $fields, $fieldsInfo)
aliasesField($name, $fieldsInfo)
checkFieldsUpdate($fields)
parserFileValue(array $data)
canonicalizeField($name, $info)
internalizeFieldsList($arguments, $fieldsInfo=[])
internalizeSelectFields($fields, array $fieldsInfo)
externalizeFields($fields, $fieldsInfo)
internalizeArguments($name, $arguments)
internalizeFieldsAdd($fields, $fieldsInfo=[])
getListFieldInfo(array $fieldsInfo, $params=[])
internalizeFilterFields($fields, array $fieldsInfo)
externalizeValue($name, $value, $fields, $fieldsInfo)
internalizeBooleanValue($value)
convertKeysToSnakeCaseOrder($fields)
internalizeDateTimeValue($value)
convertKeysToSnakeCaseArguments($name, $arguments)
externalizeFieldsGet($fields, $fieldsInfo=[])
prepareFieldInfos($fields)
checkArguments($name, $arguments)
convertKeysToSnakeCase($data)
internalizeFieldsUpdate($fields, $fieldsInfo=[])
externalizeFileValue($name, $value, $fields)
externalizeBooleanValue($value)
internalizeOrderFields($fields, array $fieldsInfo)
convertKeysToSnakeCaseSelect($fields)
externalizeDateValue($value)
checkRequiredFieldsUpdate($fields)
externalizeListFields($list, $fieldsInfo=[])
externalizeResult($name, $fields)
prepareFieldAttributs($info, $attributs)
internalizeFields($fields, array $fieldsInfo)
internalizeListFields($list, $fieldsInfo=[])
convertKeysToSnakeCaseFields($fields)
internalizeValue($value, $info)
internalizeFileValue($value)
convertKeysToSnakeCaseFilter($fields)
internalizeDateValue($value)
externalizeDateTimeValue($value)
internalizeDateTime($value)
checkRequiredFields($fields, array $fieldsInfo, $params=[])
checkFieldsList($arguments)
externalizeEmptyValue($name, $value, $fields, $fieldsInfo)
internalizeExtendedTypeValue($value, $info)
static GetFilterOperation($key)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if($NS['step']==6) if( $NS[ 'step']==7) if(COption::GetOptionInt('main', 'disk_space', 0) > 0) $info
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']