• Модуль: lists
  • Путь к файлу: ~/bitrix/modules/lists/lib/field.php
  • Класс: BitrixListsField
  • Вызов: Field::prepareFieldDataForEditForm
static function prepareFieldDataForEditForm(array $field)
{
	$result = ['customHtml' => ''];

	self::$renderForForm = true;

	$field['SHOW'] = 'Y';
	if (!empty($field['ELEMENT_ID']) && !empty($field['SETTINGS']['SHOW_EDIT_FORM']))
	{
		$field['SHOW'] = $field['SETTINGS']['SHOW_EDIT_FORM'];
	}
	if (empty($field['ELEMENT_ID']) && !empty($field['SETTINGS']['SHOW_ADD_FORM']))
	{
		$field['SHOW'] = $field['SETTINGS']['SHOW_ADD_FORM'];
	}

	$field['READ'] = 'N';
	if (!empty($field['ELEMENT_ID']) && !empty($field['SETTINGS']['EDIT_READ_ONLY_FIELD']))
	{
		$field['READ'] = $field['SETTINGS']['EDIT_READ_ONLY_FIELD'];
	}
	if (empty($field['ELEMENT_ID']) && !empty($field['SETTINGS']['ADD_READ_ONLY_FIELD']))
	{
		$field['READ'] = $field['SETTINGS']['ADD_READ_ONLY_FIELD'];
	}

	if ($field['TYPE'] === 'S:employee')
	{
		$field['SETTINGS']['USE_ENTITY_SELECTOR'] = 'Y';
	}

	if(isset($field['PROPERTY_USER_TYPE']['USER_TYPE']) && method_exists(
		__CLASS__, 'prepareEditFieldByUserType'.$field['PROPERTY_USER_TYPE']['USER_TYPE']))
	{
		$prepareEditMethod = 'prepareEditFieldByUserType'.$field['PROPERTY_USER_TYPE']['USER_TYPE'];
		$result = self::$prepareEditMethod($field);
	}
	elseif(isset($field['PROPERTY_USER_TYPE']['GetPublicEditHTMLMulty']) && $field['MULTIPLE'] == 'Y')
	{
		if(!is_array($field['VALUE']))
			$field['VALUE'] = array($field['VALUE']);
		$html = '';
		$isEmptyValue = true;
		foreach($field['VALUE'] as $key => $value)
		{
			if($field['READ'] == 'Y')
			{
				if(empty($value['VALUE']))
				{
					continue;
				}
				else
				{
					$isEmptyValue = false;
					$field['CURRENT_VALUE'] = $value['VALUE'];
					$html .= ' '.self::renderField($field);
				}
				$value['VALUE'] = (!is_array($value['VALUE']) ? [$value['VALUE']] : $value['VALUE']);
				foreach ($value['VALUE'] as $innerKey => $innerValue)
				{
					$result['customHtml'] .= '';
				}
			}
		}
		if($field['READ'] == 'N')
		{
			$html .= call_user_func_array(
				$field['PROPERTY_USER_TYPE']['GetPublicEditHTMLMulty'],
				[
					$field,
					$field['VALUE'],
					[
						'VALUE' => $field['FIELD_ID'],
						'DESCRIPTION' => '',
						'FORM_NAME' => 'form_' . ($field['FORM_ID'] ?? ''),
						'MODE' => 'FORM_FILL',
					],
				]
			);
		}
		else
		{
			if($isEmptyValue)
				$html .= Loc::getMessage('LISTS_FIELD_NOT_DATA');
		}
		$result['id'] = $field['FIELD_ID'];
		$result['name'] = $field['NAME'];
		$result['required'] = $field['IS_REQUIRED'] == 'Y' ? true : false;
		$result['type'] = 'custom';
		$result['value'] = $html;
		$result['show'] = $field['SHOW'];
	}
	elseif(isset($field['PROPERTY_USER_TYPE']['GetPublicEditHTML']))
	{
		$listTypeNotMultiple = array('S:DiskFile', 'S:ECrm');
		if (!isset($field['VALUE']) || !is_array($field['VALUE']))
		{
			$field['VALUE'] = [$field['VALUE'] ?? null];
		}

		if($field['MULTIPLE'] == 'Y' && !in_array($field['TYPE'], $listTypeNotMultiple))
		{
			$html = '';
			$isEmptyValue = true;
			foreach($field['VALUE'] as $key => $value)
			{
				if($field['READ'] == 'Y')
				{
					if(empty($value['VALUE']))
					{
						continue;
					}
					else
					{
						$isEmptyValue = false;
						$field['CURRENT_VALUE'] = $value['VALUE'];
						$html .= '';
					}
					$result['customHtml'] .= '';
				}
				else
				{
					$html .= '';
				}
			}
			if($field['READ'] == 'Y')
			{
				if($isEmptyValue)
					$html .= Loc::getMessage('LISTS_FIELD_NOT_DATA');
			}
			$html .= '
' . self::renderField($field).'
'.call_user_func_array($field['PROPERTY_USER_TYPE']['GetPublicEditHTML'], array( $field, $value, array( 'VALUE' => $field['FIELD_ID']."[".$key."][VALUE]", 'DESCRIPTION' => '', 'FORM_NAME' => 'form_' . ($field['FORM_ID'] ?? ''), 'MODE' => "FORM_FILL", 'COPY' => $field['COPY_ID'] > 0, ) )).'
'; if($field['READ'] == 'N') { $regExp = '/'.$field['FIELD_ID'].'[(n)([0-9]*)]/g'; $html .= ''; } } else { $html = ''; $isEmptyValue = true; foreach($field['VALUE'] as $key => $value) { if($field['READ'] == 'Y') { if(empty($value['VALUE'])) { continue; } else { $isEmptyValue = false; $field['CURRENT_VALUE'] = $value['VALUE']; $html .= ' '.self::renderField($field); } if(!is_array($value['VALUE'])) { $result['customHtml'] .= ''; } } else { if ($field['TYPE'] == 'S:DiskFile') { $html .= call_user_func_array($field['PROPERTY_USER_TYPE']['GetPublicViewHTML'], array($field, $value, array())); } $html .= call_user_func_array($field['PROPERTY_USER_TYPE']['GetPublicEditHTML'], array( $field, $value, array( 'VALUE' => $field['FIELD_ID']."[".$key."][VALUE]", 'DESCRIPTION' => '', 'FORM_NAME' => 'form_' . ($field['FORM_ID'] ?? ''), 'MODE' => 'FORM_FILL', 'COPY' => $field['COPY_ID'] > 0, ), )); } break; } if($field['READ'] == 'Y') { if($isEmptyValue) $html .= Loc::getMessage('LISTS_FIELD_NOT_DATA'); } } $result['id'] = $field['FIELD_ID']; $result['name'] = $field['NAME']; $result['required'] = $field['IS_REQUIRED'] == 'Y' ? true: false; $result['type'] = 'custom'; $result['value'] = $html; $result['show'] = $field['SHOW']; } elseif($field['PROPERTY_TYPE'] != '') { $prepareEditMethod = 'prepareEditFieldByType'.$field['PROPERTY_TYPE']; if(method_exists(__CLASS__, $prepareEditMethod)) { $result = self::$prepareEditMethod($field); } } elseif($field['TYPE'] != '') { $prepareEditMethod = 'prepareEditFieldByField'.str_replace('_', '', $field['TYPE']); if(method_exists(__CLASS__, $prepareEditMethod)) { $result = self::$prepareEditMethod($field); } else { $result = self::prepareEditDefaultField($field); } } return $result; }