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']; }
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('crm')) { return false; } $arEntityIds = CCrmFields::GetEntityTypes(); $arEntity = array(); foreach ($arEntityIds as $key => $ar) { $arEntity[$key] = $ar['NAME']; } $arComponentParameters = array('GROUPS' => array(), 'PARAMETERS' => array('FIELS_ENTITY_ID' => array('PARENT' => 'ADDITIONAL_SETTINGS', 'NAME' => GetMessage('CRM_FIELS_EDIT_ENTITY_ID'), 'TYPE' => 'LIST', 'VALUES' => $arEntity, 'DEFAULT' => 'CRM_LEAD', 'REFRESH' => 'Y'), 'FIELS_FIELD_ID' => array('PARENT' => 'ADDITIONAL_SETTINGS', 'NAME' => GetMessage('CRM_FIELS_EDIT_FIELD_ID'), 'TYPE' => 'STRING', "DEFAULT" => '={$_REQUEST["field_id"]}'), 'ENTITY_LIST_URL' => array('PARENT' => 'URL_TEMPLATES', 'NAME' => GetMessage('CRM_ENTITY_LIST_URL'), 'TYPE' => 'STRING', 'DEFAULT' => 'field.php'), 'FIELDS_LIST_URL' => array('PARENT' => 'URL_TEMPLATES', 'NAME' => GetMessage('CRM_FIELDS_LIST_URL'), 'TYPE' => 'STRING', 'DEFAULT' => 'field.list.php?entity_id=#entity_id#'), 'FIELD_EDIT_URL' => array('PARENT' => 'URL_TEMPLATES', 'NAME' => GetMessage('CRM_FIELD_EDIT_URL'), 'TYPE' => 'STRING', 'DEFAULT' => 'field.edit.php?entity_id=#entity_id#&field_id=#field_id#')));
$fields['SETTINGS']['DEFAULT_VALUE']['VALUE'] = $data['DT_DEFAULT_VALUE']; } if (isset($data['DT_TYPE']) && $data['DT_TYPE'] !== '') { $fields['SETTINGS']['DEFAULT_VALUE']['TYPE'] = $data['DT_TYPE']; } break; } $fields['EDIT_FORM_LABEL'] = array(); $fields['LIST_COLUMN_LABEL'] = array(); $fields['LIST_FILTER_LABEL'] = array(); $langDbResult = CLanguage::GetList($by = '', $order = ''); while ($lang = $langDbResult->Fetch()) { $lid = $lang['LID']; $fields['EDIT_FORM_LABEL'][$lid] = $fields['LIST_COLUMN_LABEL'][$lid] = $fields['LIST_FILTER_LABEL'][$lid] = $formLabel; } global $USER_FIELD_MANAGER; $crmFields = new CCrmFields($USER_FIELD_MANAGER, $entityID); $fieldName = $fields['FIELD_NAME'] = $crmFields->GetNextFieldId(); $userField = new CUserTypeEntity(); $fieldID = $userField->Add($fields); if ($fieldID > 0) { CCrmGridOptions::AddVisibleColumn(CCrmGridOptions::GetDefaultGrigID(CCrmOwnerType::ResolveIDByUFEntityID($entityID)), $fieldName); //Clear components cache $GLOBALS['CACHE_MANAGER']->ClearByTag("crm_fields_list_{$entityID}"); __CrmConfigFieldEditEndResonse(array('RESULT' => array('ID' => $fieldID, 'FIELD_NAME' => $fieldName))); } else { __CrmConfigFieldEditEndResonse(array('ERROR' => "Could not create user feld.")); } } else { __CrmConfigFieldEditEndResonse(array('ERROR' => "Action '{$action}' is not supported in current context.")); }
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('crm')) { ShowError(GetMessage('CRM_MODULE_NOT_INSTALLED')); return; } $CrmPerms = new CCrmPerms($USER->GetID()); if (!$CrmPerms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'WRITE')) { ShowError(GetMessage('CRM_PERMISSION_DENIED')); return; } $arTypes = CCrmFields::GetEntityTypes(); foreach ($arTypes as $key => $ar) { $arResult['ROWS'][$ar['ID']] = $ar; $arResult['ROWS'][$ar['ID']]['LINK_LIST'] = str_replace('#entity_id#', $ar['ID'], $arParams['~FIELDS_LIST_URL']); $arResult['ROWS'][$ar['ID']]['LINK_ADD'] = str_replace(array('#entity_id#', '#field_id#'), array($ar['ID'], 0), $arParams['~FIELD_EDIT_URL']); } $this->IncludeComponentTemplate(); $APPLICATION->AddChainItem(GetMessage('CRM_FIELDS_ENTITY_LIST'), $arResult['~ENTITY_LIST_URL']);
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('crm')) { ShowError(GetMessage('CRM_MODULE_NOT_INSTALLED')); return; } $CrmPerms = new CCrmPerms($USER->GetID()); if (!$CrmPerms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'WRITE')) { ShowError(GetMessage('CRM_PERMISSION_DENIED')); return; } $arResult['ENTITY_ID'] = isset($_REQUEST['entity_id']) ? $_REQUEST['entity_id'] : $arParams['FIELS_ENTITY_ID']; $arResult['FIELD_ID'] = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : $arParams['FIELS_FIELD_ID']; global $USER_FIELD_MANAGER; $CCrmFields = new CCrmFields($USER_FIELD_MANAGER, $arResult['ENTITY_ID']); if ($CCrmFields->CheckError()) { $ex = $APPLICATION->GetException(); ShowError($ex->GetString()); return; } $arResult['DISABLE_MULTIPLE'] = false; $arResult['NEW_FIELD'] = false; if (!$arResult['FIELD_ID']) { $arResult['NEW_FIELD'] = true; } $arResult['FIELD'] = array(); if (!$arResult['NEW_FIELD'] && !($arResult['FIELD'] = $CCrmFields->GetByName($arResult['FIELD_ID']))) { ShowError(GetMessage('CRM_FIELDS_EDIT_WRONG_FIELD')); return; }
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('crm')) { ShowError(GetMessage('CRM_MODULE_NOT_INSTALLED')); return; } $CrmPerms = new CCrmPerms($USER->GetID()); if (!$CrmPerms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'WRITE')) { ShowError(GetMessage('CRM_PERMISSION_DENIED')); return; } $arResult['ENTITY_ID'] = isset($_REQUEST['entity_id']) ? $_REQUEST['entity_id'] : $arParams['FIELS_ENTITY_ID']; global $USER_FIELD_MANAGER; $CCrmFields = new CCrmFields($USER_FIELD_MANAGER, $arResult['ENTITY_ID']); if ($CCrmFields->CheckError()) { $ex = $APPLICATION->GetException(); ShowError($ex->GetString()); return; } $arEntityIds = CCrmFields::GetEntityTypes(); $arResult['ENTITY_NAME'] = $arEntityIds[$arResult['ENTITY_ID']]['NAME']; $arResult['GRID_ID'] = 'fields_list'; $arResult['~ENTITY_LIST_URL'] = $arParams['~ENTITY_LIST_URL']; $arResult['ENTITY_LIST_URL'] = htmlspecialcharsbx($arResult['~ENTITY_LIST_URL']); $arResult['~FIELDS_LIST_URL'] = str_replace('#entity_id#', $arResult['ENTITY_ID'], $arParams['~FIELDS_LIST_URL']); $arResult['FIELDS_LIST_URL'] = htmlspecialcharsbx($arResult['~FIELDS_LIST_URL']); $arResult['~FIELD_EDIT_URL'] = str_replace(array('#entity_id#', '#field_id#'), array($arResult['ENTITY_ID'], '0'), $arParams['~FIELD_EDIT_URL']); $arResult['FIELD_EDIT_URL'] = htmlspecialcharsbx($arResult['~FIELD_EDIT_URL']); $APPLICATION->SetTitle(GetMessage('CRM_FIELDS_LIST_TITLE_EDIT', array('#NAME#' => $arResult['ENTITY_NAME'])));
function UnInstallDB($arParams = array()) { global $DB, $APPLICATION, $stackCacheManager, $USER_FIELD_MANAGER; $this->errors = false; if (!array_key_exists('savedata', $arParams) || $arParams['savedata'] != 'Y') { // delete extra fields for all entities require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/crm/include.php'; $arEntityIds = CCrmFields::GetEntityTypes(); foreach ($arEntityIds as $entityId => $ar) { $CCrmFields = new CCrmFields($USER_FIELD_MANAGER, $entityId); $arFields = $CCrmFields->GetFields(); foreach ($arFields as $arField) { $CCrmFields->DeleteField($arField['ID']); } } $this->errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/crm/install/db/' . strtolower($DB->type) . '/uninstall.sql'); if (CModule::IncludeModule('socialnetwork')) { $dbRes = CSocNetLog::GetList(array(), array("ENTITY_TYPE" => CCrmLiveFeedEntity::GetAll()), false, false, array("ID")); if ($dbRes) { while ($arRes = $dbRes->Fetch()) { CSocNetLog::Delete($arRes["ID"]); } } } } $stackCacheManager->Clear('b_crm_status'); $stackCacheManager->Clear('b_crm_perms'); COption::RemoveOption('crm'); UnRegisterModuleDependences('mail', 'OnGetFilterList', 'crm', 'CCrmEMail', 'OnGetFilterList'); UnRegisterModuleDependences('main', 'OnUserTypeBuildList', 'crm', 'CUserTypeCrm', 'GetUserTypeDescription'); UnRegisterModuleDependences('main', 'OnUserTypeBuildList', 'crm', 'CUserTypeCrmStatus', 'GetUserTypeDescription'); UnRegisterModuleDependences('search', 'OnReindex', 'crm', 'CCrmSearch', 'OnSearchReindex'); UnRegisterModuleDependences('search', 'OnSearchCheckPermissions', 'crm', 'CCrmSearch', 'OnSearchCheckPermissions'); UnRegisterModuleDependences('report', 'OnReportAdd', 'crm', 'CCrmReportHelper', 'clearMenuCache'); UnRegisterModuleDependences('report', 'OnReportUpdate', 'crm', 'CCrmReportHelper', 'clearMenuCache'); UnRegisterModuleDependences('report', 'OnReportDelete', 'crm', 'CCrmReportHelper', 'clearMenuCache'); UnRegisterModuleDependences('iblock', 'OnIBlockDelete', 'crm', 'CCrmCatalog', 'OnIBlockDelete'); UnRegisterModuleDependences('iblock', 'OnAfterIBlockElementDelete', 'crm', 'CAllCrmProduct', 'OnIBlockElementDelete'); UnRegisterModuleDependences('iblock', 'OnAfterIBlockElementDelete', 'crm', 'CCrmProduct', 'OnIBlockElementDelete'); UnRegisterModuleDependences("socialnetwork", "OnFillSocNetLogEvents", "crm", "CCrmExternalSaleImport", "OnFillSocNetLogEvents"); UnRegisterModuleDependences('tasks', 'OnBeforeTaskAdd', 'crm', 'CAllCrmActivity', 'OnBeforeTaskAdd'); UnRegisterModuleDependences('tasks', 'OnTaskAdd', 'crm', 'CAllCrmActivity', 'OnTaskAdd'); UnRegisterModuleDependences('tasks', 'OnTaskUpdate', 'crm', 'CAllCrmActivity', 'OnTaskUpdate'); UnRegisterModuleDependences('tasks', 'OnTaskDelete', 'crm', 'CAllCrmActivity', 'OnTaskDelete'); UnRegisterModuleDependences('webdav', 'OnFileDelete', 'crm', 'CCrmWebDavHelper', 'OnWebDavFileDelete'); UnRegisterModuleDependences('subscribe', 'BeforePostingSendMail', 'crm', 'CCrmEMail', 'BeforeSendMail'); UnRegisterModuleDependences('calendar', 'OnAfterCalendarEventEdit', 'crm', 'CAllCrmActivity', 'OnCalendarEventEdit'); UnRegisterModuleDependences('calendar', 'OnAfterCalendarEventDelete', 'crm', 'CAllCrmActivity', 'OnCalendarEventDelete'); UnRegisterModuleDependences('crm', 'OnCrmStatusGetList', 'crm', 'CCrmStatusInvoice', 'getStatusList'); UnRegisterModuleDependences('crm', 'OnGetEntityTypes', 'crm', 'CCrmStatusInvoice', 'onGetEntityTypes'); UnRegisterModuleDependences('crm', 'OnBeforeCrmStatusCreate', 'crm', 'CCrmStatusInvoice', 'createCrmStatus'); UnRegisterModuleDependences('rest', 'onRestServiceBuildDescription', 'crm', 'CCrmRestService', 'onRestServiceBuildDescription'); UnRegisterModuleDependences('socialnetwork', 'OnFillSocNetAllowedSubscribeEntityTypes', 'crm', 'CCrmLiveFeed', 'OnFillSocNetAllowedSubscribeEntityTypes'); UnRegisterModuleDependences('socialnetwork', 'OnFillSocNetLogEvents', 'crm', 'CCrmLiveFeed', 'OnFillSocNetLogEvents'); UnRegisterModuleDependences('socialnetwork', 'OnFillSocNetLogFields', 'crm', 'CCrmLiveFeed', 'OnFillSocNetLogFields'); UnRegisterModuleDependences('socialnetwork', 'OnBuildSocNetLogFilter', 'crm', 'CCrmLiveFeed', 'OnBuildSocNetLogFilter'); UnRegisterModuleDependences('socialnetwork', 'OnBuildSocNetLogOrder', 'crm', 'CCrmLiveFeed', 'OnBuildSocNetLogOrder'); UnRegisterModuleDependences('socialnetwork', 'OnSocNetLogFormatDestination', 'crm', 'CCrmLiveFeed', 'OnSocNetLogFormatDestination'); UnRegisterModuleDependences('socialnetwork', 'OnBuildSocNetLogPerms', 'crm', 'CCrmLiveFeed', 'OnBuildSocNetLogPerms'); UnRegisterModuleDependences('socialnetwork', 'OnBeforeSocNetLogRightsAdd', 'crm', 'CCrmLiveFeed', 'OnBeforeSocNetLogRightsAdd'); UnRegisterModuleDependences('socialnetwork', 'OnBeforeSocNetLogCommentCounterIncrement', 'crm', 'CCrmLiveFeed', 'OnBeforeSocNetLogCommentCounterIncrement'); UnRegisterModuleDependences('socialnetwork', 'OnAfterSocNetLogEntryCommentAdd', 'crm', 'CCrmLiveFeed', 'OnAfterSocNetLogEntryCommentAdd'); UnRegisterModuleDependences('socialnetwork', 'OnBeforeSocNetLogEntryGetRights', 'crm', 'CCrmLiveFeed', 'OnBeforeSocNetLogEntryGetRights'); UnRegisterModuleDependences("socialnetwork", "OnSendMentionGetEntityFields", "crm", "CCrmLiveFeed", "OnSendMentionGetEntityFields"); UnRegisterModuleDependences('main', 'OnAddRatingVote', 'crm', 'CCrmLiveFeed', 'OnAddRatingVote'); UnRegisterModuleDependences('forum', 'OnAfterCommentAdd', 'crm', 'CCrmLiveFeed', 'onAfterCommentAdd'); UnRegisterModuleDependences('disk', 'onAfterDeleteFile', 'crm', '\\Bitrix\\Crm\\Integration\\DiskManager', 'OnDiskFileDelete'); if (CModule::IncludeModule('search')) { CSearch::DeleteIndex('crm'); } UnRegisterModule('crm'); if ($this->errors !== false) { $APPLICATION->ThrowException(implode('<br />', $this->errors)); return false; } return true; }