diff --git a/modules/comment/comment.module b/modules/comment/comment.module index 0fc38f8ddaeade6f147fc87d9cdf1897840a0756..e69d07fc5f9e42849b5f3c0f01240089cad0f223 100644 --- a/modules/comment/comment.module +++ b/modules/comment/comment.module @@ -1488,7 +1488,7 @@ function comment_save($comment) { db_ignore_slave(); // Update the {node_comment_statistics} table prior to executing hooks. - _comment_update_node_statistics($comment->nid); + _comment_update_node_statistics($comment->nid); field_attach_update('comment', $comment); // Allow modules to respond to the updating of a comment. @@ -1928,11 +1928,9 @@ function comment_form($form, &$form_state, $comment) { '#default_value' => $author, '#maxlength' => 60, '#size' => 30, + '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))), + '#autocomplete_path' => 'user/autocomplete', ); - // If the comment is by a registered user, allow to autocomplete username. - if ($comment->registered_name != '') { - $form['author']['name']['#autocomplete_path'] = 'user/autocomplete'; - } } elseif ($user->uid) { $form['author']['_author'] = array( @@ -2113,18 +2111,21 @@ function comment_form_validate($form, &$form_state) { entity_form_field_validate('comment', $form, $form_state); if (!empty($form_state['values']['cid'])) { + // Verify the name in case it is being changed from being anonymous. + $account = user_load_by_name($form_state['values']['name']); + $form_state['values']['uid'] = $account ? $account->uid : 0; + if ($form_state['values']['date'] && strtotime($form_state['values']['date']) === FALSE) { form_set_error('date', t('You have to specify a valid date.')); } - if ($form_state['values']['name'] && !$form_state['values']['is_anonymous'] && !$account = user_load_by_name($form_state['values']['name'])) { + if ($form_state['values']['name'] && !$form_state['values']['is_anonymous'] && !$account) { form_set_error('name', t('You have to specify a valid author.')); } } - - // Validate anonymous comment author fields (if given). - if ($form_state['values']['is_anonymous']) { - // If the (original) author of this comment was an anonymous user, verify - // that no registered user with this name exists. + elseif ($form_state['values']['is_anonymous']) { + // Validate anonymous comment author fields (if given). If the (original) + // author of this comment was an anonymous user, verify that no registered + // user with this name exists. if ($form_state['values']['name']) { $query = db_select('users', 'u'); $query->addField('u', 'uid', 'uid'); diff --git a/modules/comment/comment.test b/modules/comment/comment.test index 26e9b283e8691a5f6615e1c550eb2415a3d213be..770e01d4a5fe49f1ab92f7e62f246ea3a3bf855b 100644 --- a/modules/comment/comment.test +++ b/modules/comment/comment.test @@ -307,6 +307,26 @@ class CommentInterfaceTest extends CommentHelperCase { $this->drupalLogin($this->admin_user); $this->setCommentSubject(TRUE); $this->setCommentPreview(DRUPAL_OPTIONAL); + + // Test changing the comment author to "Anonymous". + $this->drupalGet('comment/' . $comment->id . '/edit'); + $comment = $this->postComment(NULL, $comment->comment, $comment->subject, array('name' => '')); + $comment_loaded = comment_load($comment->id); + $this->assertTrue(empty($comment_loaded->name) && $comment_loaded->uid == 0, t('Comment author successfully changed to anonymous.')); + + // Test changing the comment author to an unverified user. + $random_name = $this->randomName(); + $this->drupalGet('comment/' . $comment->id . '/edit'); + $comment = $this->postComment(NULL, $comment->comment, $comment->subject, array('name' => $random_name)); + $this->drupalGet('node/' . $this->node->nid); + $this->assertText($random_name . ' (' . t('not verified') . ')', t('Comment author successfully changed to an unverified user.')); + + // Test changing the comment author to a verified user. + $this->drupalGet('comment/' . $comment->id . '/edit'); + $comment = $this->postComment(NULL, $comment->comment, $comment->subject, array('name' => $this->web_user->name)); + $comment_loaded = comment_load($comment->id); + $this->assertTrue($comment_loaded->name == $this->web_user->name && $comment_loaded->uid == $this->web_user->uid, t('Comment author successfully changed to a registered user.')); + $this->drupalLogout(); // Reply to comment #2 creating comment #3 with optional preview and no