значения дельты cck: дельта с начальным пробелом = "исторические изменения", без начального пробела = "множественный выбор?"


На одном из наших сайтов периодически стала появляться ошибка, из-за которой пользователи пытались сохранить свои профили и получали сообщение об ошибке о недопустимом значении в одном из полей (поле cck для "отрасли", fwiw, которое мы отключили, удалив разрешения на редактирование для него месяц назад). Поле имеет несколько возможных значений в виде флажков, поэтому пользователи могли выбрать несколько значений, когда поле было доступно для редактирования, до того, как мы его отключили.

Мы отметили, что пользователи-администраторы можно было бы сохранить профили, и тогда они стали бы доступны для сохранения пользователями с обычными привилегиями.

Мы сосредоточились на таблице content_field_industry и начали просматривать обращения с различными пользователями, прежде чем мы, наконец, выяснили, что записи полей с несколькими дельтами иногда страдают от этой проблемы, но в других случаях этого не происходит. После дальнейших поисков мы, наконец, заметили, что:

  • Если в записи было более одного дельта-значения и значения в поле_industry_value в столбце было начальное пространство, запись не удалось бы сохранить для обычных пользователей

  • Если пользователь с правами администратора сохранит профиль пользователя, все разностные записи с начальным пробелом в столбце field_industry_value будут уничтожены, и профиль станет доступным для редактирования обычным пользователем

  • Если в записи было более одной дельты, а значения в столбце field_industry_value не имели пробелов в начале, обычные пользователи могли редактировать свои профили без ошибок

Мы не хочу терять данные, но мы также больше не хотим, чтобы их редактировали обычные пользователи, и мы не возражаем против мысли о потере бессмысленных дельт (тех, которые служат исторической цели, а не "это множественный выбор").

Есть ли безопасный способ устранить эту проблему, возможно, просто удалив дельты переднего пробела?

 1
Author: mph, 2011-11-22

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
  }
}
 1
Author: tecjam, 2011-11-22 21:28:55