Если один из админов настраивает форму для всех, то не затираются настройки этой формы для других админов, настроивших форму для себя ранее. Тут не спасает даже галочка «для всех» в настроке формы, т.к. она меняет форму для всех пользователей, кроме тех админов, кто ее настроил ранее под себя.
Для этого нужно выполнить запрос:
DELETE FROM b_user_option WHERE CATEGORY = 'form' AND NAME = 'form_element_#ID#' AND COMMON = 'N'
и бахнуть кеш настроек.
global $CACHE_MANAGER;
$CACHE_MANAGER->cleanDir("user_option");
Проблема решается событием:
// очищаем настройки формы по-умолчанию для всех админов
AddEventHandler('main', 'OnEndBufferContent', function (&$content) {
if (count($_POST['p']) <= 0) {
return;
}
global $APPLICATION, $DB, $CACHE_MANAGER;
$pCfg = array_shift($_POST['p']);
if ($APPLICATION->GetCurPage() != '/bitrix/admin/user_options.php'
|| $pCfg['c'] != 'form' || $pCfg['d'] != 'Y'
|| !preg_match('#^form_((section)|(element))_[0-9]+$#', $pCfg['n'])
) {
return;
}
$DB->Query("DELETE FROM b_user_option WHERE CATEGORY = 'form' AND NAME = '" . $pCfg['n'] . "' AND COMMON = 'N'");
$CACHE_MANAGER->cleanDir("user_option");
});
