- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_component_helper.php
- Класс: \CCrmComponentHelper
- Вызов: CCrmComponentHelper::SynchronizeFormSettings
static function SynchronizeFormSettings($formID, $userFieldEntityID, $options = array())
{
$formID = strval($formID);
$userFieldEntityID = strval($userFieldEntityID);
$options = is_array($options) ? $options : array();
if($formID === '')
{
return;
}
$arOptions = CUserOptions::GetOption('main.interface.form', $formID, array());
if(isset($arOptions['settings_disabled'])
&& $arOptions['settings_disabled'] === 'Y'
|| !(isset($arOptions['tabs']) && is_array($arOptions['tabs'])))
{
return;
}
$changed = false;
$normalizeTabs = isset($options['NORMALIZE_TABS']) ? $options['NORMALIZE_TABS'] : array();
if(!empty($normalizeTabs))
{
if(COption::GetOptionString('crm', mb_strtolower($formID).'_normalized', 'N') !== 'Y')
{
foreach($arOptions['tabs'] as &$tab)
{
if(!in_array($tab['id'], $normalizeTabs, true))
{
continue;
}
$tabName = $tab['name'];
// remove counter from tab name
$tabName = preg_replace('/\s\(\d+\)$/', '', $tabName);
if($tabName !== $tab['name'])
{
$tab['name'] = $tabName;
if(!$changed)
{
$changed = true;
}
}
}
unset($tab);
reset($arOptions['tabs']);
if($changed)
{
CUserOptions::SetOption('main.interface.form', $formID, $arOptions);
$changed = false;
}
COption::SetOptionString('crm', mb_strtolower($formID).'_normalized', 'Y');
}
}
if($userFieldEntityID === '')
{
return;
}
$bRemoveFields = (isset($options['REMOVE_FIELDS']) && is_array($options['REMOVE_FIELDS']));
$bAddFields = (isset($options['ADD_FIELDS']) && is_array($options['ADD_FIELDS']));
if ($bRemoveFields)
{
foreach($arOptions['tabs'] as &$tab)
{
if (is_array($tab) && isset($tab['id']) && isset($tab['fields']) && is_array($tab['fields'])
&& isset($options['REMOVE_FIELDS'][$tab['id']]) && is_array($options['REMOVE_FIELDS'][$tab['id']]))
{
foreach($tab['fields'] as $key => $item)
{
if (is_array($item) && isset($item['id']))
{
if (in_array($item['id'], $options['REMOVE_FIELDS'][$tab['id']]))
{
unset($tab['fields'][$key]);
$changed = true;
}
}
}
}
}
}
if ($bAddFields)
{
foreach($arOptions['tabs'] as &$tab)
{
if (is_array($tab) && isset($tab['id']) && isset($tab['fields']) && is_array($tab['fields'])
&& isset($options['ADD_FIELDS'][$tab['id']]) && is_array($options['ADD_FIELDS'][$tab['id']]))
{
$addFieldsNames = array();
foreach ($options['ADD_FIELDS'][$tab['id']] as $key => $item)
{
if (is_array($item) && isset($item['id']))
$addFieldsNames[$item['id']] = $key;
}
unset($key, $item);
$addIndex = array();
$removeIndex = array();
foreach($tab['fields'] as $key => $item)
{
if (is_array($item) && isset($item['id']))
{
if (isset($options['ADD_FIELDS'][$tab['id']][$item['id']]))
$addIndex[$item['id']] = $key;
if ($addFieldsNames[$item['id']])
$removeIndex[] = $addFieldsNames[$item['id']];
}
}
unset($key, $item);
foreach ($removeIndex as $key)
unset($addIndex[$key]);
unset($key);
if (count($addIndex) > 0)
{
foreach ($addIndex as $key => $index)
{
array_splice(
$tab['fields'], $index + 1, 0,
array($index + 1 => $options['ADD_FIELDS'][$tab['id']][$key])
);
$changed = true;
}
unset($key, $index);
}
}
}
}
global $USER_FIELD_MANAGER;
$arUserFields = $USER_FIELD_MANAGER->GetUserFields($userFieldEntityID);
if(is_array($arUserFields) && count($arUserFields) > 0)
{
foreach($arOptions['tabs'] as &$tab)
{
if(!(isset($tab['fields']) && is_array($tab['fields'])))
{
continue;
}
$arJunkKeys = array();
foreach($tab['fields'] as $itemKey => $item)
{
$itemID = isset($item['id'])? mb_strtoupper($item['id']) : '';
if(mb_strpos($itemID, 'UF_CRM_') === 0 && !isset($arUserFields[$itemID]))
{
$arJunkKeys[] = $itemKey;
}
}
if(count($arJunkKeys) > 0)
{
if(!$changed)
{
$changed = true;
}
foreach($arJunkKeys as $key)
{
unset($tab['fields'][$key]);
}
}
}
unset($tab);
}
if($changed)
{
CUserOptions::SetOption('main.interface.form', $formID, $arOptions);
}
}