1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
documentuserfield.php
См. документацию.
1<?php
2
3namespace Bitrix\Catalog\RestView;
4
5use Bitrix\Catalog\Document\StoreDocumentTableManager;
6use Bitrix\Main\Result;
7use Bitrix\Rest\Integration\View\Attributes;
8use Bitrix\Rest\Integration\View\DataType;
9use Bitrix\Rest\Integration\View\Base;
10
11final class DocumentUserField extends Base
12{
13 public function getFields()
14 {
15 return [
16 'DOCUMENT_ID' => [
17 'TYPE' => DataType::TYPE_INT,
18 'CANONICAL_NAME' => 'ID',
19 ],
20 'DOCUMENT_TYPE' => [
21 'TYPE' => DataType::TYPE_CHAR,
22 'ATTRIBUTES' => [
23 Attributes::REQUIRED,
24 ],
25 'CANONICAL_NAME' => 'DOC_TYPE',
26 ],
27 ];
28 }
29
30 public function internalizeFieldsUpdate($fields, $fieldsInfo = []): array
31 {
32 $documentType = $fields['DOCUMENT_TYPE'];
33 $fieldsInfo = array_merge($fieldsInfo, $this->getFields(), $this->getFieldMapForType($documentType));
34
35 return parent::internalizeFieldsUpdate($fields, $fieldsInfo);
36 }
37
38 public function internalizeFieldsList($arguments, $fieldsInfo = []): array
39 {
40 $documentType = $arguments['filter']['DOCUMENT_TYPE'] ?? null;
41 $allowUserFields = (is_string($documentType) && $documentType !== '');
42 $fieldsInfo = array_merge(
43 $fieldsInfo,
44 $this->getFields(),
45 $allowUserFields ? $this->getFieldMapForType($documentType) : []
46 );
47
48 return parent::internalizeFieldsList($arguments, $fieldsInfo);
49 }
50
51 protected function internalizeExtendedTypeValue($value, $info): Result
52 {
53 $isDynamic = in_array(Attributes::DYNAMIC, $info['ATTRIBUTES'], true);
54 $isMultiple = in_array(Attributes::MULTIPLE, $info['ATTRIBUTES'], true);
55 if (empty($value) && $isDynamic && $isMultiple)
56 {
57 $value = [''];
58 }
59
60 if (($info['USER_FIELD_TYPE'] ?? null) === 'file')
61 {
62 if ($isMultiple)
63 {
64 $internalizedValue = [];
65 foreach ($value as $item)
66 {
67 $internalizedValue[] = $this->internalizeFileValue($item);
68 }
69 $value = $internalizedValue;
70 }
71 else
72 {
73 $value = $this->internalizeFileValue($value);
74 }
75 }
76
77 return parent::internalizeExtendedTypeValue($value, $info);
78 }
79
80 public function externalizeFieldsGet($fields, $fieldsInfo = []): array
81 {
82 $documentType = $fields['DOC_TYPE'];
83 $fieldsInfo = array_merge($fieldsInfo, $this->getFields(), $this->getFieldMapForType($documentType));
84
85 return parent::externalizeFieldsGet($fields, $fieldsInfo);
86 }
87
88 public function externalizeListFields($list, $fieldsInfo = []): array
89 {
90 $documentType = $list[0]['DOC_TYPE'] ?? null;
91 $userFields =
92 $documentType !== null
93 ? $this->getFieldMapForType($documentType)
94 : []
95 ;
96 $fieldsInfo = array_merge($fieldsInfo, $this->getFields(), $userFields);
97
98 return parent::externalizeListFields($list, $fieldsInfo);
99 }
100
101 private function getFieldMapForType($documentType): array
102 {
103 global $USER_FIELD_MANAGER;
104
105 if (!(is_string($documentType) && $documentType !== ''))
106 {
107 return [];
108 }
109
110 $ufEntityId = StoreDocumentTableManager::getUfEntityIds()[$documentType] ?? '';
111 if (!$ufEntityId)
112 {
113 return [];
114 }
115
116 $userFieldsDescriptions = $USER_FIELD_MANAGER->GetUserFields($ufEntityId, 0);
117
118 $result = [];
119 foreach ($userFieldsDescriptions as $userField)
120 {
121 $attributes = [Attributes::DYNAMIC];
122 if ($userField['MULTIPLE'] === 'Y')
123 {
124 $attributes[] = Attributes::MULTIPLE;
125 }
126 $result['FIELD_' . $userField['ID']] = [
127 'ATTRIBUTES' => $attributes,
128 'CANONICAL_NAME' => $userField['FIELD_NAME'],
129 'USER_FIELD_TYPE' => $userField['USER_TYPE_ID']
130 ];
131 }
132
133 return $result;
134 }
135}
internalizeFieldsList($arguments, $fieldsInfo=[])
Определения documentuserfield.php:38
externalizeFieldsGet($fields, $fieldsInfo=[])
Определения documentuserfield.php:80
internalizeFieldsUpdate($fields, $fieldsInfo=[])
Определения documentuserfield.php:30
externalizeListFields($list, $fieldsInfo=[])
Определения documentuserfield.php:88
internalizeExtendedTypeValue($value, $info)
Определения documentuserfield.php:51
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
global $USER_FIELD_MANAGER
Определения attempt.php:6
$result
Определения get_property_values.php:14
if($NS['step']==6) if( $NS[ 'step']==7) if(COption::GetOptionInt('main', 'disk_space', 0) > 0) $info
Определения backup.php:924
$fields
Определения yandex_run.php:501