значения дельты cck: дельта с начальным пробелом = "исторические изменения", без начального пробела = "множественный выбор?"
На одном из наших сайтов периодически стала появляться ошибка, из-за которой пользователи пытались сохранить свои профили и получали сообщение об ошибке о недопустимом значении в одном из полей (поле cck для "отрасли", fwiw, которое мы отключили, удалив разрешения на редактирование для него месяц назад). Поле имеет несколько возможных значений в виде флажков, поэтому пользователи могли выбрать несколько значений, когда поле было доступно для редактирования, до того, как мы его отключили.
Мы отметили, что пользователи-администраторы можно было бы сохранить профили, и тогда они стали бы доступны для сохранения пользователями с обычными привилегиями.
Мы сосредоточились на таблице content_field_industry и начали просматривать обращения с различными пользователями, прежде чем мы, наконец, выяснили, что записи полей с несколькими дельтами иногда страдают от этой проблемы, но в других случаях этого не происходит. После дальнейших поисков мы, наконец, заметили, что:
Если в записи было более одного дельта-значения и значения в поле_industry_value в столбце было начальное пространство, запись не удалось бы сохранить для обычных пользователей
Если пользователь с правами администратора сохранит профиль пользователя, все разностные записи с начальным пробелом в столбце field_industry_value будут уничтожены, и профиль станет доступным для редактирования обычным пользователем
Если в записи было более одной дельты, а значения в столбце field_industry_value не имели пробелов в начале, обычные пользователи могли редактировать свои профили без ошибок
Мы не хочу терять данные, но мы также больше не хотим, чтобы их редактировали обычные пользователи, и мы не возражаем против мысли о потере бессмысленных дельт (тех, которые служат исторической цели, а не "это множественный выбор").
Есть ли безопасный способ устранить эту проблему, возможно, просто удалив дельты переднего пробела?
1 answers
Используйте пользовательский модуль и отмените настройку элементов полей с помощью функции hook_form_alter() или сделайте это в своих темах template.php .
/**
* Implements hook_form_alter().
*/
function YOUR_THEME_form_alter(&$form, &$form_state) {
if ( $form_id= 'YOUR_FORM_ID' ) {
unset($form['YOUR_FORM_FIELD']);
// ... ADD MORE
}
}