2namespace Bitrix\Main\UserField;
5use Bitrix\Main\ErrorCollection;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\Main\ObjectNotFoundException;
52 if(!static::$instance)
54 static::$instance =
new static();
56 return static::$instance;
84 $this->
addError(Loc::getMessage(
'MAIN_UF_DISPATCHER_ERROR_SIGNATURE'), $fieldInfo[
'FIELD']);
108 $addFieldInfo =
array(
109 'ENTITY_ID' => $fieldInfo[
'ENTITY_ID'],
110 'FIELD' => $fieldInfo[
'FIELD'],
111 'CONTEXT' => $fieldInfo[
'CONTEXT'] ??
null,
114 $addFieldInfo[
'SIGNATURE'] = $this->
getSignature($addFieldInfo);
116 $this->
storeFieldSignature($addFieldInfo[
'ENTITY_ID'], $addFieldInfo[
'FIELD'], $addFieldInfo[
'SIGNATURE']);
131 $currentFieldInfo = $this->
getUserFieldInfo($fieldInfo[
'ENTITY_ID'], $fieldInfo[
'FIELD']);
144 'ENTITY_ID' => $fieldInfo[
'ENTITY_ID'],
145 'ENTITY_VALUE_ID' => $fieldInfo[
'ENTITY_VALUE_ID'],
146 'FIELD' => $fieldInfo[
'FIELD'],
147 'VALUE' => $fieldInfo[
'VALUE'],
148 'CONTEXT' => $fieldInfo[
'CONTEXT'] ??
null,
151 $addFieldInfo[
'SIGNATURE'] = $this->
getSignature($addFieldInfo);
153 $this->
storeFieldSignature($addFieldInfo[
'ENTITY_ID'], $addFieldInfo[
'FIELD'], $addFieldInfo[
'SIGNATURE']);
169 $userFieldInfo = $this->
getUserFieldInfo($fieldInfo[
'ENTITY_ID'], $fieldInfo[
'FIELD']);
173 $this->
addError(
'Field not found', $fieldInfo[
'FIELD']);
177 $userTypeEntity = new \CUserTypeEntity();
178 $deleteResult = $userTypeEntity->delete($userFieldInfo[
'ID']);
197 $userFieldInfo = $this->
getUserFieldInfo($fieldInfo[
'ENTITY_ID'], $fieldInfo[
'FIELD']);
201 $this->
addError(
'Field not found', $fieldInfo[
'FIELD']);
205 if(!isset($this->validateFieldList[$fieldInfo[
'ENTITY_ID']]))
207 $this->validateFieldList[$fieldInfo[
'ENTITY_ID']] =
array();
210 if(!isset($this->validateFieldList[$fieldInfo[
'ENTITY_ID']][$fieldInfo[
'ENTITY_VALUE_ID']]))
212 $this->validateFieldList[$fieldInfo[
'ENTITY_ID']][$fieldInfo[
'ENTITY_VALUE_ID']] =
array();
215 $this->validateFieldList[$fieldInfo[
'ENTITY_ID']][$fieldInfo[
'ENTITY_VALUE_ID']][$fieldInfo[
'FIELD']] = $fieldInfo[
'VALUE'] ??
null;
219 protected function processValidate()
223 foreach($this->validateFieldList as
$entityId => $entityFields)
225 foreach($entityFields as $entityValueId =>
$fieldList)
235 $errorMessages = $e->GetMessages();
245 $this->result = array_merge($this->result, $this->getValidateErrorList());
251 $userTypeEntity = new \CUserTypeEntity();
252 $fieldId = $userTypeEntity->add(
array(
253 'ENTITY_ID' => $fieldInfo[
'ENTITY_ID'],
254 'FIELD_NAME' => $fieldInfo[
'FIELD'],
255 'USER_TYPE_ID' => $fieldInfo[
'USER_TYPE_ID'],
256 'MULTIPLE' => $fieldInfo[
'MULTIPLE'],
257 'MANDATORY' => $fieldInfo[
'MANDATORY'],
258 'SHOW_FILTER' => $fieldInfo[
'SHOW_FILTER'] ??
null,
259 'SHOW_IN_LIST' => $fieldInfo[
'SHOW_IN_LIST'] ??
null,
260 'EDIT_IN_LIST' => $fieldInfo[
'EDIT_IN_LIST'] ??
null,
261 'IS_SEARCHABLE' => $fieldInfo[
'IS_SEARCHABLE'] ??
null,
262 'SETTINGS' => $fieldInfo[
'SETTINGS'] ??
null,
263 'EDIT_FORM_LABEL' => $this->
checkLabel($fieldInfo[
'EDIT_FORM_LABEL'] ??
null),
264 'LIST_COLUMN_LABEL' => $this->
checkLabel($fieldInfo[
'LIST_COLUMN_LABEL'] ??
null),
265 'LIST_FILTER_LABEL' => $this->
checkLabel($fieldInfo[
'LIST_FILTER_LABEL'] ??
null),
266 'ERROR_MESSAGE' => $this->
checkLabel($fieldInfo[
'ERROR_MESSAGE'] ??
null),
267 'HELP_MESSAGE' => $this->
checkLabel($fieldInfo[
'HELP_MESSAGE'] ??
null),
268 'CONTEXT_PARAMS' => $fieldInfo[
'CONTEXT_PARAMS'] ??
null,
281 $userFieldInfo = $this->
getUserFieldInfo($fieldInfo[
'ENTITY_ID'], $fieldInfo[
'FIELD']);
283 if(is_array($userFieldInfo))
285 $updateField =
array();
287 if(array_key_exists(
'MANDATORY', $fieldInfo))
289 $updateField[
'MANDATORY'] = $fieldInfo[
'MANDATORY'];
292 if(array_key_exists(
'SHOW_FILTER', $fieldInfo))
294 $updateField[
'SHOW_FILTER'] = $fieldInfo[
'SHOW_FILTER'];
297 if(array_key_exists(
'SHOW_IN_LIST', $fieldInfo))
299 $updateField[
'SHOW_IN_LIST'] = $fieldInfo[
'SHOW_IN_LIST'];
302 if(array_key_exists(
'EDIT_IN_LIST', $fieldInfo))
304 $updateField[
'EDIT_IN_LIST'] = $fieldInfo[
'EDIT_IN_LIST'];
307 if(array_key_exists(
'IS_SEARCHABLE', $fieldInfo))
309 $updateField[
'IS_SEARCHABLE'] = $fieldInfo[
'IS_SEARCHABLE'];
312 if(array_key_exists(
'EDIT_FORM_LABEL', $fieldInfo))
314 $updateField[
'EDIT_FORM_LABEL'] = $this->
checkLabel($fieldInfo[
'EDIT_FORM_LABEL']);
317 if(array_key_exists(
'LIST_COLUMN_LABEL', $fieldInfo))
319 $updateField[
'LIST_COLUMN_LABEL'] = $this->
checkLabel($fieldInfo[
'LIST_COLUMN_LABEL']);
322 if(array_key_exists(
'LIST_FILTER_LABEL', $fieldInfo))
324 $updateField[
'LIST_FILTER_LABEL'] = $this->
checkLabel($fieldInfo[
'LIST_FILTER_LABEL']);
327 if(array_key_exists(
'ERROR_MESSAGE', $fieldInfo))
329 $updateField[
'ERROR_MESSAGE'] = $this->
checkLabel($fieldInfo[
'ERROR_MESSAGE']);
332 if(array_key_exists(
'HELP_MESSAGE', $fieldInfo))
334 $updateField[
'HELP_MESSAGE'] = $this->
checkLabel($fieldInfo[
'HELP_MESSAGE']);
337 if(array_key_exists(
'SETTINGS', $fieldInfo) && is_array($fieldInfo[
'SETTINGS']))
339 $updateField[
'SETTINGS'] = array_merge($userFieldInfo[
'SETTINGS'], $fieldInfo[
'SETTINGS']);
342 if(!empty($updateField))
344 $userTypeEntity = new \CUserTypeEntity();
345 $updateResult = $userTypeEntity->update($userFieldInfo[
'ID'], $updateField);
355 return $userFieldInfo[
'ID'];
360 if(array_key_exists(
'ENUM', $fieldInfo) && is_array($fieldInfo[
'ENUM']))
362 $enumValuesManager = new \CUserFieldEnum();
364 $enum = array_values($fieldInfo[
'ENUM']);
365 $enumValues =
array();
366 foreach($enum as
$key => $valueDescription)
368 if(is_array($valueDescription))
370 $enumValues[
'n' .
$key] = [
371 'XML_ID' => $valueDescription[
'XML_ID'] ??
null,
372 'VALUE' => $valueDescription[
'VALUE'],
373 'DEF' => ($valueDescription[
'DEF'] ??
'N') ===
'Y' ?
'Y' :
'N',
374 'SORT' => $valueDescription[
'SORT'] ?? 0,
378 $setEnumResult = $enumValuesManager->setEnumValues($fieldId, $enumValues);
389 array_key_exists(
'ENUM', $fieldInfo) && is_array($fieldInfo[
'ENUM']))
391 $currentFieldInfo = $this->
getUserFieldInfo($fieldInfo[
'ENTITY_ID'], $fieldInfo[
'FIELD']);
393 $deletedEnum =
array();
394 $storedEnum =
array();
395 $updatedEnum =
array();
397 if(is_array($currentFieldInfo[
'ENUM']))
399 foreach($currentFieldInfo[
'ENUM'] as $enumItem)
401 $storedEnum[$enumItem[
'ID']] = $enumItem;
402 $deletedEnum[$enumItem[
'ID']] =
true;
407 foreach($fieldInfo[
'ENUM'] as $enumItem)
409 if(is_array($enumItem))
411 if(array_key_exists(
'ID', $enumItem))
413 if(empty($enumItem[
'XML_ID']))
415 $enumItem[
'XML_ID'] = $storedEnum[$enumItem[
'ID']][
'XML_ID'];
418 unset($deletedEnum[$enumItem[
'ID']]);
421 $enumTypeId = $enumItem[
'ID'] ??
null;
425 :
'n' . ($countAdded++)
428 $isDefault = ($enumItem[
'DEF'] ??
'N');
429 $itemDescription =
array(
430 'VALUE' => $enumItem[
'VALUE'],
431 'DEF' => $isDefault ===
'Y' ?
'Y' :
'N',
432 'SORT' => $enumItem[
'SORT'],
435 if (!empty($enumItem[
'XML_ID']))
437 $itemDescription[
'XML_ID'] = $enumItem[
'XML_ID'];
440 if(intval($enumItem[
'SORT']) > 0)
442 $itemDescription[
'SORT'] = $enumItem[
'SORT'];
445 $updatedEnum[$itemKey] = $itemDescription;
449 foreach($deletedEnum as $deletedId => $t)
451 $updatedEnum[$deletedId] =
array(
457 $enumValuesManager = new \CUserFieldEnum();
458 $setEnumResult = $enumValuesManager->setEnumValues($fieldId, $updatedEnum);
474 $this->
addError($ex->GetString(), $fieldInfo[
'FIELD']);
480 return is_array($label) ? $label :
array($this->languageId => $label);
485 $this->storedFieldSignature[
$entityId.
'|'.$field] = $signature;
490 return $this->storedFieldSignature[
$entityId.
'|'.$field] ??
null;
509 $this->fieldList[] = $field;
534 $this->assetCollectior->startAssetCollection();
536 if(!empty($this->validateFieldList))
538 $this->processValidate();
541 foreach($this->fieldList as $fieldInfo)
547 'FIELD' => $this->result,
548 'ERROR' => $this->getErrorList(),
549 'ASSET' => $this->assetCollectior->getCollectedAssets(),
588 if(!$this->signatureManager)
620 $this->
addError(Loc::getMessage(
'MAIN_UF_DISPATCHER_ERROR_SIGNATURE'), $fieldInfo[
'FIELD']);
625 $userFieldInfo = $this->
getUserFieldInfo($fieldInfo[
'ENTITY_ID'], $fieldInfo[
'FIELD']);
629 $this->
addError(Loc::getMessage(
'MAIN_UF_DISPATCHER_ERROR_FIELD_NOT_FOUND'), $fieldInfo[
'FIELD']);
634 if(isset($fieldInfo[
'ENTITY_VALUE_ID']))
636 $userFieldInfo[
'ENTITY_VALUE_ID'] = $fieldInfo[
'ENTITY_VALUE_ID'];
639 if(isset($fieldInfo[
'VALUE']))
641 $userFieldInfo[
'VALUE'] = $fieldInfo[
'VALUE'];
645 unset($userFieldInfo[
'VALUE']);
648 if(isset($fieldInfo[
'CONTEXT']))
650 $userFieldInfo[
'CONTEXT'] = $fieldInfo[
'CONTEXT'];
655 $view->setField($userFieldInfo);
657 if (!empty($fieldInfo[
'ADDITIONAL']) && is_array($fieldInfo[
'ADDITIONAL']))
659 foreach ($fieldInfo[
'ADDITIONAL'] as $paramName => $paramValue)
661 $view->setAdditionalParameter($paramName, $paramValue);
665 $this->result[$fieldInfo[
'FIELD']] = [
666 'HTML' =>
$view->display(),
681 $this->fieldList =
array();
682 $this->result =
array();
683 $this->errorCollection->clear();
695 $this->errorCollection->setError(
new Error(
$message, $field));
703 protected function getErrorList()
706 if(!$this->errorCollection->isEmpty())
711 foreach($this->errorCollection->toArray() as
$error)
727 protected function getValidateErrorList()
730 if(!$this->errorCollection->isEmpty())
735 foreach($this->errorCollection->toArray() as
$error)
753 $this->errorCollection->clear();
765 if(!is_array($fieldInfo))
767 $this->
addError(Loc::getMessage(
'MAIN_UF_DISPATCHER_ERROR_FORMAT'));
769 elseif(empty($fieldInfo[
'FIELD']))
771 $this->
addError(Loc::getMessage(
'MAIN_UF_DISPATCHER_ERROR_FORMAT'));
773 elseif(empty($fieldInfo[
'ENTITY_ID']))
775 $this->
addError(Loc::getMessage(
'MAIN_UF_DISPATCHER_ERROR_FORMAT', $fieldInfo[
'FIELD']));
797 if(!array_key_exists(
$entityId, $this->userFieldList))
803 isset($this->userFieldList[
$entityId][$field])
805 && !isset($this->userFieldList[
$entityId][$field][
'ENUM'])
810 $enumValuesManager = new \CUserFieldEnum();
813 while($enumValue =
$dbRes->fetch())
816 'ID' => $enumValue[
'ID'],
817 'VALUE' => $enumValue[
'VALUE'],
818 'DEF' => $enumValue[
'DEF'],
819 'SORT' => $enumValue[
'SORT'],
820 'XML_ID' => $enumValue[
'XML_ID'],
825 return $this->userFieldList[
$entityId][$field];
848 'ID' => $userField[
'ID'],
849 'USER_TYPE_ID' => $userField[
'USER_TYPE_ID'],
850 'ENTITY_ID' => $userField[
'ENTITY_ID'],
851 'ENTITY_VALUE_ID' => $userField[
'ENTITY_VALUE_ID'] ?? 0,
852 'MANDATORY' => $userField[
'MANDATORY'],
853 'MULTIPLE' => $userField[
'MULTIPLE'],
854 'FIELD' => $userField[
'FIELD_NAME'],
855 'EDIT_FORM_LABEL' => $userField[
'EDIT_FORM_LABEL'],
856 'LIST_COLUMN_LABEL' => $userField[
'LIST_COLUMN_LABEL'],
857 'LIST_FILTER_LABEL' => $userField[
'LIST_FILTER_LABEL'],
858 'HELP_MESSAGE' => $userField[
'HELP_MESSAGE'],
859 'SETTINGS' => $userField[
'SETTINGS'],
860 'SHOW_FILTER' => $userField[
'SHOW_FILTER'],
861 'SHOW_IN_LIST' => $userField[
'SHOW_IN_LIST'],
862 'SORT' => $userField[
'SORT'],
863 'CONTEXT_PARAMS' => $userField[
'CONTEXT_PARAMS'] ?? [],
868 $fieldInfo[
'ENUM'] = $userField[
'ENUM'];
874 $fieldInfo[
'SIGNATURE'] = $storedSignature;
storeFieldSignature($entityId, $field, $signature)
validateField($fieldInfo)
getErrorFromApplicationException($fieldInfo)
reloadUserFieldInfo($entityId)
validateFieldChangeRequest($fieldInfo)
getSignature(array $fieldParam)
setDefaultSignatureManager()
getStoredFieldSignature($entityId, $field)
createNewField(array $fieldInfo)
getCreateSignature(array $fieldParam)
checkFieldDescription($fieldInfo)
updateField(array $fieldInfo)
addError($message, $field=0)
createNewFieldEnumValues($fieldId, $fieldInfo)
getResultFieldInfo(array $userField)
updateFieldEnumValues($fieldId, $fieldInfo)
setSignatureManager(SignatureManager $signatureManager)
getUserFieldInfo($entityId, $field)
processField(array $fieldInfo)
static validateSignature(SignatureManager $signatureManager, array $fieldParam, $signature)
static getSignature(SignatureManager $signatureManager, array $fieldParam)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key