Как скрыть поле Fivestar при редактировании комментария от другого пользователя?

Мои комментарии к статьям имеют обязательное поле рейтинга Fivestar, которое называется "Звезды", и я скрыл его с помощью следующего пользовательского модуля (см. https://drupal.stackexchange.com/questions/90629/how-to-hide-rating-field-when-adding-comment-to-own-node):

function hiderating_form_alter(&$form, &$form_state, $form_id) {
  global $user;
  if ($form_id == "comment_node_article_form") {
   if ($form['#node']->uid == $user->uid) { 
      unset($form['field_stars']);
    }
  }
}

Как администратор, я имею право редактировать комментарии других пользователей. Предположим, что пользователь прокомментировал свою статью. Это означает, что ему не нужно было устанавливать поле "Звезды" из-за кода выше. Но когда я пытаюсь отредактировать этот комментарий, мне нужно выбрать значение для "Звезд".

Как я могу предотвратить это? Достаточно проверить, что uid пользователя, написавшего комментарий, отличается от uid пользователя, который редактировал комментарий. Наконец, отметьте, что обязательство выбирать звезды, когда я оставляю новый комментарий сам, должно быть сохранено!


Изменить: я попробовал следующий код:

function hiderating_form_alter(&$form, &$form_state, $form_id) {
  global $user;
  $comment->uid = $form_state['values']['uid'];
  if ($form_id == "comment_node_article_form") {
   if ($comment->uid != $user->uid) { 
    unset($form['field_stars']);
    }
  }
}

По-видимому, $form_state['values'] не очень хорошо определен, потому что я получаю следующую ошибку:

Msgstr "Примечание: неопределенный индекс: значения в hiderating_form_alter()".

Какой правильный код?

1 ответ

Решение

Код в редакторе не работает, потому что $form_state['values'] нет перед отправкой. Это правильный код:

function hiderating_form_alter(&$form, &$form_state, $form_id) {
  global $user;
  if ($form_id == "comment_node_article_form") {
   if ($form['uid']['#value'] != $user->uid AND $form['uid']['#value'] != 0) { 
    unset($form['field_stars']);
   }
  }
}

С помощью dpm($form)Я обнаружил, что $form['uid']['#value'] возвращает идентификатор пользователя, написавшего комментарий. Значение отличается только от 0, если комментарий редактируется. Когда пользователь пишет новый комментарий, uid из формы равен 0. Поэтому AND во-вторых if является необходимым.

Другие вопросы по тегам