• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_fields.php
  • Класс: \CCrmFields
  • Вызов: CCrmFields::GetAdditionalFields
static function GetAdditionalFields($entityType, $fieldValue = Array())
{
	global $APPLICATION;

	$arFields = Array();
	switch ($entityType)
	{
		case 'string':
			$arFields[] = array(
				'id' => 'ROWS',
				'name' => GetMessage('CRM_FIELDS_TEXT_ROW_COUNT'),
				'type' => 'text',
			);
			$arFields[] = array(
				'id' => 'DEFAULT_VALUE',
				'name' => GetMessage('CRM_FIELDS_DEFAULT_VALUE'),
				'type' => 'text',
			);
			break;
		case 'url':
			$arFields[] = array(
				'id' => 'DEFAULT_VALUE',
				'name' => GetMessage('CRM_FIELDS_DEFAULT_VALUE'),
				'type' => 'text',
			);
			break;
		case 'integer':
		case 'double':
			$arFields[] = array(
				'id' => 'DEFAULT_VALUE',
				'name' => GetMessage('CRM_FIELDS_DEFAULT_VALUE'),
				'type' => 'text',
			);
			break;

		case 'boolean':
			$arFields[] = array(
				'id' => 'B_DEFAULT_VALUE',
				'name' => GetMessage('CRM_FIELDS_TYPE_B_VALUE'),
				'type' => 'list',
				'items' => array(
					'1' => GetMessage('CRM_FIELDS_TYPE_B_VALUE_YES'),
					'0' => GetMessage('CRM_FIELDS_TYPE_B_VALUE_NO')
				),
			);
			$arFields[] = array(
				'id' => 'B_DISPLAY',
				'name' => GetMessage('CRM_FIELDS_TYPE_B_DISPLAY'),
				'type' => 'list',
				'items' => array(
					'CHECKBOX' => GetMessage('CRM_FIELDS_TYPE_B_DISPLAY_CHECKBOX'),
					'RADIO' => GetMessage('CRM_FIELDS_TYPE_B_DISPLAY_RADIO'),
					'DROPDOWN' => GetMessage('CRM_FIELDS_TYPE_B_DISPLAY_DROPDOWN'),
				),
			);
			break;

		case 'datetime':
		case 'date':
			{
				$arFields[] = array(
					'id' => 'DT_TYPE',
					'name' => GetMessage('CRM_FIELDS_TYPE_DT_TYPE'),
					'type' => 'list',
					'items' => array(
						'NONE' => GetMessage('CRM_FIELDS_TYPE_DT_TYPE_NONE'),
						'NOW' => GetMessage($entityType === 'datetime'
							? 'CRM_FIELDS_TYPE_DT_TYPE_NOW' : 'CRM_FIELDS_TYPE_DATE_TYPE_NOW'),
						'FIXED' => GetMessage('CRM_FIELDS_TYPE_DT_TYPE_FIXED'),
					),
				);

				if ($entityType === 'datetime')
				{
					$arFields[] = array(
						'id' => 'DT_DEFAULT_VALUE',
						'name' => GetMessage('CRM_FIELDS_TYPE_DT_FIXED'),
						'type' => 'date',
						'params' => array('size' => 25)
					);
				}
				else
				{
					$arFields[] = [
						'id' => 'DT_DEFAULT_VALUE',
						'name' => Loc::getMessage('CRM_FIELDS_TYPE_DT_FIXED'),
						'type' => 'date_short',
						'params' => [
							'size' => 10,
						],
					];
				}
			}
			break;

		case 'enumeration':
			$arFields[] = [
				'id' => 'E_DISPLAY',
				'name' => Loc::getMessage('CRM_FIELDS_TYPE_E_DISPLAY'),
				'type' => 'list',
				'items' => [
					'LIST' => Loc::getMessage('CRM_FIELDS_TYPE_E_DISPLAY_LIST'),
					'UI' => Loc::getMessage('CRM_FIELDS_TYPE_E_DISPLAY_UI'),
					'CHECKBOX' => Loc::getMessage('CRM_FIELDS_TYPE_E_DISPLAY_CHECKBOX'),
					'DIALOG' => Loc::getMessage('CRM_FIELDS_TYPE_E_DISPLAY_DIALOG'),
				],
			];
			$arFields[] = [
				'id' => 'E_LIST_HEIGHT',
				'name' => Loc::getMessage('CRM_FIELDS_TYPE_E_LIST_HEIGHT'),
				'type' => 'text',
			];
			$arFields[] = [
				'id' => 'E_CAPTION_NO_VALUE',
				'name' => Loc::getMessage('CRM_FIELDS_TYPE_E_CAPTION_NO_VALUE'),
				'type' => 'text',
			];
			break;
		case 'money':
			if (Loader::includeModule('currency'))
			{
				ob_start();
				$APPLICATION->IncludeComponent(
					'bitrix:currency.money.input',
					'',
					array(
						'CONTROL_ID' => 'DEFAULT_VALUE_'.Main\Security\Random::getString(5),
						'FIELD_NAME' => 'DEFAULT_VALUE',
						'VALUE' => (isset($fieldValue['DEFAULT_VALUE']) ? $fieldValue['DEFAULT_VALUE'] : ''),
						'EXTENDED_CURRENCY_SELECTOR' => 'N'
					),
					null,
					array('HIDE_ICONS' => 'Y')
				);
				$moneyContent = ob_get_contents();
				ob_end_clean();
				$arFields[] = array(
					'id' => 'DEFAULT_VALUE',
					'name' => GetMessage('CRM_FIELDS_DEFAULT_VALUE'),
					'type' => 'custom',
					'value' => $moneyContent
				);
			}
			else
			{
				$arFields[] = array(
					'id' => 'DEFAULT_VALUE',
					'name' => GetMessage('CRM_FIELDS_DEFAULT_VALUE'),
					'type' => 'text',
				);
			}
			break;
		case 'iblock_section':
			$id = isset($fieldValue['IB_IBLOCK_ID']) ? (int)$fieldValue['IB_IBLOCK_ID'] : 0;
			$bActiveFilter = isset($fieldValue['IB_ACTIVE_FILTER']) && $fieldValue['IB_ACTIVE_FILTER'] == 'Y' ? 'Y' : 'N';

			$arFields[] = array(
				'id' => 'IB_IBLOCK_TYPE_ID',
				'name' => GetMessage('CRM_FIELDS_TYPE_IB_IBLOCK_TYPE_ID'),
				'type' => 'custom',
				'value' => GetIBlockDropDownList($id, 'IB_IBLOCK_TYPE_ID', 'IB_IBLOCK_ID')
			);

			$arDefault = Array('' => GetMessage('CRM_FIELDS_TYPE_IB_DEFAULT_VALUE_ANY'));
			$found = false;
			if ($id > 0)
			{
				$arFilter = Array("IBLOCK_ID" => $id);
				if ($bActiveFilter === "Y")
					$arFilter["GLOBAL_ACTIVE"] = "Y";

				$rsSections = CIBlockSection::GetList(
					Array("LEFT_MARGIN" => "ASC"),
					$arFilter,
					false,
					array("ID", "DEPTH_LEVEL", "NAME", "LEFT_MARGIN")
				);

				while ($arSection = $rsSections->Fetch())
				{
					$arDefault[$arSection["ID"]] = str_repeat(". ", $arSection["DEPTH_LEVEL"] - 1).$arSection["NAME"];
					$found = true;
				}
				unset($arSection, $rsSections);
			}

			if ($found)
			{
				$arFields[] = array(
					'id' => 'IB_DEFAULT_VALUE',
					'name' => GetMessage('CRM_FIELDS_TYPE_IB_DEFAULT_VALUE'),
					'items' => $arDefault,
					'type' => 'list',
				);
			}
			else
			{
				$arFields[] = array(
					'id' => 'IB_DEFAULT_VALUE',
					'name' => GetMessage('CRM_FIELDS_TYPE_IB_DEFAULT_VALUE'),
					'type' => 'text',
				);
			}
			unset($arDefault);

			$arFields[] = array(
				'id' => 'IB_DISPLAY',
				'name' => GetMessage('CRM_FIELDS_TYPE_IB_DISPLAY'),
				'type' => 'list',
				'items' => array(
					'LIST'		=> GetMessage('CRM_FIELDS_TYPE_IB_DISPLAY_LIST'),
					'CHECKBOX' 	=> GetMessage('CRM_FIELDS_TYPE_IB_DISPLAY_CHECKBOX'),
				),
			);
			$arFields[] = array(
				'id' => 'IB_LIST_HEIGHT',
				'name' => GetMessage('CRM_FIELDS_TYPE_IB_LIST_HEIGHT'),
				'type' => 'text',
			);
			$arFields[] = array(
				'id' => 'IB_ACTIVE_FILTER',
				'name' => GetMessage('CRM_FIELDS_TYPE_IB_ACTIVE_FILTER'),
				'type' => 'checkbox',
			);
		break;


		case 'iblock_element':
			$id = isset($fieldValue['IB_IBLOCK_ID'])? (int)$fieldValue['IB_IBLOCK_ID']: 0;
			$bActiveFilter = isset($fieldValue['IB_ACTIVE_FILTER']) && $fieldValue['IB_ACTIVE_FILTER'] == 'Y'? 'Y': 'N';

			$arFields[] = array(
				'id' => 'IB_IBLOCK_TYPE_ID',
				'name' => GetMessage('CRM_FIELDS_TYPE_IB_IBLOCK_TYPE_ID'),
				'type' => 'custom',
				'value' => GetIBlockDropDownList($id, 'IB_IBLOCK_TYPE_ID', 'IB_IBLOCK_ID')
			);

			$arDefault = Array(''=>GetMessage('CRM_FIELDS_TYPE_IB_DEFAULT_VALUE_ANY'));
			$found = false;
			if ($id > 0)
			{
				$arFilter = Array("IBLOCK_ID" => $id);
				if ($bActiveFilter === "Y")
					$arFilter["ACTIVE"] = "Y";

				$rs = CIBlockElement::GetList(
					array("SORT" => "DESC", "NAME" => "ASC"),
					$arFilter,
					false,
					false,
					array("ID", "NAME", "SORT")
				);

				while ($ar = $rs->Fetch())
				{
					$found = true;
					$arDefault[$ar["ID"]] = $ar["NAME"];
				}
				unset($sr, $rs);
			}

			if ($found)
			{
				$arFields[] = array(
					'id' => 'IB_DEFAULT_VALUE',
					'name' => GetMessage('CRM_FIELDS_TYPE_IB_DEFAULT_VALUE'),
					'items' => $arDefault,
					'type' => 'list',
				);
			}
			else
			{
				$arFields[] = array(
					'id' => 'IB_DEFAULT_VALUE',
					'name' => GetMessage('CRM_FIELDS_TYPE_IB_DEFAULT_VALUE'),
					'type' => 'text',
				);
			}
			unset($arDefault);

			$arFields[] = array(
				'id' => 'IB_DISPLAY',
				'name' => GetMessage('CRM_FIELDS_TYPE_IB_DISPLAY'),
				'type' => 'list',
				'items' => array(
					'LIST'		=> GetMessage('CRM_FIELDS_TYPE_IB_DISPLAY_LIST'),
					'CHECKBOX' 	=> GetMessage('CRM_FIELDS_TYPE_IB_DISPLAY_CHECKBOX'),
				),
			);
			$arFields[] = array(
				'id' => 'IB_LIST_HEIGHT',
				'name' => GetMessage('CRM_FIELDS_TYPE_IB_LIST_HEIGHT'),
				'type' => 'text',
			);
			$arFields[] = array(
				'id' => 'IB_ACTIVE_FILTER',
				'name' => GetMessage('CRM_FIELDS_TYPE_IB_ACTIVE_FILTER'),
				'type' => 'checkbox',
			);

		break;

		case 'crm_status':

			$arItems = Array();
			$ar = CCrmStatus::GetEntityTypes();
			foreach ($ar as $data)
				$arItems[$data['ID']] = $data['NAME'];

			$arFields[] = array(
				'id' => 'ENTITY_TYPE',
				'name' => GetMessage('CRM_FIELDS_TYPE_CRM_STATUS_ENTITY_TYPE'),
				'type' => 'list',
				'items' => $arItems,
			);
		break;

		case 'crm':
			$settings = $fieldValue['SETTINGS'] ?? [];

			$entityTypeLead = isset($settings['LEAD']) && $settings['LEAD'] === 'Y'? 'Y': 'N';
			$entityTypeContact = isset($settings['CONTACT']) && $settings['CONTACT'] === 'Y'? 'Y': 'N';
			$entityTypeCompany = isset($settings['COMPANY']) && $settings['COMPANY'] === 'Y'? 'Y': 'N';
			$entityTypeDeal = isset($settings['DEAL']) && $settings['DEAL'] === 'Y'? 'Y': 'N';
			$entityTypeQuote = isset($settings['QUOTE']) && $settings['QUOTE'] === 'Y'? 'Y': 'N';

			$sVal = '
				 '.GetMessage('USER_TYPE_CRM_ENTITY_TYPE_LEAD').' 
'.GetMessage('USER_TYPE_CRM_ENTITY_TYPE_CONTACT').'
'.GetMessage('USER_TYPE_CRM_ENTITY_TYPE_COMPANY').'
'.GetMessage('USER_TYPE_CRM_ENTITY_TYPE_DEAL').'
'.GetMessage('USER_TYPE_CRM_ENTITY_TYPE_QUOTE_MSGVER_1').'
'; $dynamicTypes = \Bitrix\Crm\UserField\Types\ElementType::getUseInUserfieldTypes(); foreach ($dynamicTypes as $dynamicId => $dynamicTitle) { $dynamicTypeName = \CCrmOwnerType::ResolveName($dynamicId); $sVal .= ' '.Main\Text\HtmlFilter::encode($dynamicTitle).'
'; } if (\Bitrix\Crm\Settings\InvoiceSettings::getCurrent()->isSmartInvoiceEnabled()) { $sVal .= ' '.Main\Text\HtmlFilter::encode(\CCrmOwnerType::GetCategoryCaption(\CCrmOwnerType::SmartInvoice)).'
'; } $arFields[] = array( 'id' => 'ENTITY_TYPE', 'name' => GetMessage('CRM_FIELDS_TYPE_CRM_ELEMENT_ENTITY_TYPE'), 'type' => 'custom', 'value' => $sVal ); break; } return $arFields; }