2014-02-09 3 views
0

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

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']); 
    } 
    } 
} 

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

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


Edit: Я попытался следующий код:

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'] не определена, потому что я получаю следующее сообщение об ошибке:

"Notice: Undefined index: values in hiderating_form_alter()".

Что правильно код?

+0

'$ form_state ['values']' присутствует только после отправки. Не следует отметить, хотите ли вы удалить поле 'field_stars', если пользователь является владельцем комментария или администратором (как определено« любым пользователем, имеющим роль администратора »)? – bishop

+0

@bishop: 'field_stars' не должен отображаться, когда uid от пользователя, который написал комментарий, отличается от uid пользователя, который редактирует комментарий. Вышесказанное достаточно, потому что единственными пользователями, которые могут редактировать комментарии других пользователей, являются те, у которых есть роль администратора. – Jeroen

+0

Таким образом, проблема сводится к необходимости использования объекта комментария. Я не рядом со своей рабочей станцией, чтобы что-то попробовать, поэтому я не хочу давать правильный ответ, который я не могу проверить. У вас есть доступ к '$ form ['# node'] -> comment'? Если нет, можете ли вы сбросить и отправить '$ form'? – bishop

ответ

0

Код в редакции не работает, потому что $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.