public static function AddDocumentField($documentType, $arFields) { if (strpos($documentType, '_') === false) { $documentType .= '_0'; } $arDocumentID = self::GetDocumentInfo($documentType); if (empty($arDocumentID)) { throw new CBPArgumentNullException('documentId'); } if (strpos($arFields['type'], 'UF:') === 0) { $arFields['type'] = substr($arFields['type'], 3); } $arFieldsTmp = array('USER_TYPE_ID' => $arFields['type'], 'FIELD_NAME' => 'UF_CRM_' . strtoupper($arFields['code']), 'ENTITY_ID' => 'CRM_' . $arDocumentID['TYPE'], 'SORT' => 150, 'MULTIPLE' => $arFields['multiple'] == 'Y' ? 'Y' : 'N', 'MANDATORY' => $arFields['required'] == 'Y' ? 'Y' : 'N', 'SHOW_FILTER' => 'E'); $arFieldsTmp['EDIT_FORM_LABEL'][LANGUAGE_ID] = $arFields['name']; $arFieldsTmp['LIST_COLUMN_LABEL'][LANGUAGE_ID] = $arFields['name']; $arFieldsTmp['LIST_FILTER_LABEL'][LANGUAGE_ID] = $arFields['name']; if (array_key_exists('additional_type_info', $arFields)) { $arField['SETTINGS']['IBLOCK_ID'] = intval($arFields['additional_type_info']); } switch ($arFields['type']) { case 'select': case 'enumeration': $arFieldsTmp['USER_TYPE_ID'] = 'enumeration'; if (!is_array($arFieldsTmp['LIST'])) { $arFieldsTmp['LIST'] = array(); } $options = isset($arFields['options']) && is_array($arFields['options']) ? $arFields['options'] : array(); if (!empty($options)) { $i = 10; foreach ($options as $k => $v) { $arFieldsTmp['LIST']['n' . $i] = array('XML_ID' => $k, 'VALUE' => $v, 'DEF' => 'N', 'SORT' => $i); $i = $i + 10; } } break; case 'text': $arFieldsTmp['USER_TYPE_ID'] = 'string'; break; case 'iblock_section': case 'iblock_element': $options = isset($arFields['options']) && is_string($arFields['options']) ? $arFields['options'] : ''; if ($options !== '') { $arFieldsTmp['SETTINGS']['IBLOCK_ID'] = $options; } break; case 'crm_status': $options = isset($arFields['options']) && is_string($arFields['options']) ? $arFields['options'] : ''; if ($options !== '') { $arFieldsTmp['SETTINGS']['ENTITY_TYPE'] = $options; } break; case 'crm': $options = isset($arFields['options']) && is_array($arFields['options']) ? $arFields['options'] : array(); $arFieldsTmp['SETTINGS']['LEAD'] = isset($options['LEAD']) && strtoupper($options['LEAD']) === 'Y' ? 'Y' : 'N'; $arFieldsTmp['SETTINGS']['CONTACT'] = isset($options['CONTACT']) && strtoupper($options['CONTACT']) === 'Y' ? 'Y' : 'N'; $arFieldsTmp['SETTINGS']['COMPANY'] = isset($options['COMPANY']) && strtoupper($options['COMPANY']) === 'Y' ? 'Y' : 'N'; $arFieldsTmp['SETTINGS']['DEAL'] = isset($options['DEAL']) && strtoupper($options['DEAL']) === 'Y' ? 'Y' : 'N'; break; case 'employee': $arFieldsTmp['SHOW_FILTER'] = 'I'; break; } $crmFields = new CCrmFields($GLOBALS['USER_FIELD_MANAGER'], 'CRM_' . $arDocumentID['TYPE']); $crmFields->AddField($arFieldsTmp); $GLOBALS['CACHE_MANAGER']->ClearByTag('crm_fields_list_' . $arFieldsTmp['FIELD_NAME']); return $arFieldsTmp['FIELD_NAME']; }
$arField['SETTINGS']['DEAL'] = $_POST['ENTITY_TYPE_DEAL']; break; case 'employee': if ($arField['SHOW_FILTER'] !== 'N') { $arField['SHOW_FILTER'] = 'I'; // Force exact match for 'USER' field type } break; default: $arField['SHOW_FILTER'] = 'N'; break; } if (!$strError) { if ($arResult['NEW_FIELD']) { $arResult['FIELD_ID'] = $arField['FIELD_NAME'] = $CCrmFields->GetNextFieldId(); $res = $CCrmFields->AddField($arField); } else { $res = $CCrmFields->UpdateField($arResult['FIELD']['ID'], $arField); } if ($res) { //Save default value for 'SHOW_IN_LIST' if ($arResult['NEW_FIELD']) { $defaultShowInList = CUserOptions::GetOption('crm', 'uf_show_in_list', 'N'); if ($arField['SHOW_IN_LIST'] === 'N' && $defaultShowInList !== 'N') { CUserOptions::DeleteOption('crm', 'uf_show_in_list'); } elseif ($arField['SHOW_IN_LIST'] === 'Y' && $defaultShowInList !== 'Y') { CUserOptions::SetOption('crm', 'uf_show_in_list', 'Y'); } } //Register/Unregister fild in entity list --> $gridID = CCrmGridOptions::GetDefaultGrigID(CCrmOwnerType::ResolveIDByUFEntityID($arResult['ENTITY_ID']));