Issue #1534674 by plach, slowflyer: Fixed Comment field language is completely broken.

8.0.x
catch 2012-10-02 13:29:17 +01:00
parent 90b9f678d9
commit e8898ed3e5
7 changed files with 74 additions and 23 deletions

View File

@ -110,13 +110,14 @@ function comment_admin_overview($form, &$form_state, $arg) {
// Remove the first node title from the node_titles array and attach to
// the comment.
$comment->node_title = array_shift($node_titles);
$comment_body = field_get_items('comment', $comment, 'comment_body');
$options[$comment->cid] = array(
'subject' => array(
'data' => array(
'#type' => 'link',
'#title' => $comment->subject,
'#href' => 'comment/' . $comment->cid,
'#options' => array('attributes' => array('title' => truncate_utf8($comment->comment_body[LANGUAGE_NOT_SPECIFIED][0]['value'], 128)), 'fragment' => 'comment-' . $comment->cid),
'#options' => array('attributes' => array('title' => truncate_utf8($comment_body[0]['value'], 128)), 'fragment' => 'comment-' . $comment->cid),
),
),
'author' => theme('username', array('account' => $comment)),

View File

@ -1690,7 +1690,8 @@ function comment_preview(Comment $comment) {
$node = node_load($comment->nid);
if (!form_get_errors()) {
$comment->format = $comment->comment_body[LANGUAGE_NOT_SPECIFIED][0]['format'];
$comment_body = field_get_items('comment', $comment, 'comment_body');
$comment->format = $comment_body[0]['format'];
// Attach the user and time information.
if (!empty($comment->name)) {
$account = user_load_by_name($comment->name);

View File

@ -20,7 +20,6 @@ class CommentFormController extends EntityFormController {
*/
public function form(array $form, array &$form_state, EntityInterface $comment) {
global $user;
$language_content = language(LANGUAGE_TYPE_CONTENT);
$node = node_load($comment->nid);
$form_state['comment']['node'] = $node;
@ -174,16 +173,16 @@ class CommentFormController extends EntityFormController {
}
$form['node_type'] = array('#type' => 'value', '#value' => 'comment_node_' . $node->type);
// Make the comment inherit the node language unless specifically set.
$comment_langcode = $comment->langcode;
if ($comment_langcode == LANGUAGE_NOT_SPECIFIED) {
$comment_langcode = $language_content->langcode;
// Make the comment inherit the current content language unless specifically
// set.
if ($comment->isNew()) {
$language_content = language(LANGUAGE_TYPE_CONTENT);
$comment->langcode = $language_content->langcode;
}
// Uses the language of the content as comment language.
$form['langcode'] = array(
'#type' => 'value',
'#value' => $comment_langcode,
'#value' => $comment->langcode,
);
// Attach fields.
@ -294,7 +293,9 @@ class CommentFormController extends EntityFormController {
// 1) Filter it into HTML
// 2) Strip out all HTML tags
// 3) Convert entities back to plain-text.
$comment_body = $comment->comment_body[LANGUAGE_NOT_SPECIFIED][0];
$field = field_info_field('comment_body');
$langcode = field_is_translatable('comment', $field) ? $this->getFormLangcode($form_state) : LANGUAGE_NOT_SPECIFIED;
$comment_body = $comment->comment_body[$langcode][0];
if (isset($comment_body['format'])) {
$comment_text = check_markup($comment_body['value'], $comment_body['format']);
}

View File

@ -2,17 +2,17 @@
/**
* @file
* Definition of Drupal\locale\Tests\LocaleCommentLanguageTest.
* Definition of Drupal\locale\Tests\CommentLanguageTest.
*/
namespace Drupal\locale\Tests;
namespace Drupal\comment\Tests;
use Drupal\simpletest\WebTestBase;
/**
* Functional tests for comment language.
*/
class LocaleCommentLanguageTest extends WebTestBase {
class CommentLanguageTest extends WebTestBase {
/**
* Modules to enable.
@ -23,7 +23,7 @@ class LocaleCommentLanguageTest extends WebTestBase {
*
* @var array
*/
public static $modules = array('locale', 'language_test');
public static $modules = array('language', 'language_test', 'comment_test');
protected $profile = 'standard';
@ -31,7 +31,7 @@ class LocaleCommentLanguageTest extends WebTestBase {
return array(
'name' => 'Comment language',
'description' => 'Tests for comment language.',
'group' => 'Locale',
'group' => 'Comment',
);
}
@ -39,7 +39,7 @@ class LocaleCommentLanguageTest extends WebTestBase {
parent::setUp();
// Create and login user.
$admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer languages', 'access administration pages', 'administer content types', 'create article content'));
$admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer languages', 'access administration pages', 'administer content types', 'administer comments', 'create article content'));
$this->drupalLogin($admin_user);
// Add language.
@ -68,6 +68,12 @@ class LocaleCommentLanguageTest extends WebTestBase {
// French no matter what path prefix the URLs have.
$edit = array('preferred_langcode' => 'fr');
$this->drupalPost("user/{$admin_user->uid}/edit", $edit, t('Save'));
// Make comment body translatable.
$field = field_info_field('comment_body');
$field['translatable'] = TRUE;
field_update_field($field);
$this->assertTrue(field_is_translatable('comment', $field), 'Comment body is translatable.');
}
/**
@ -99,19 +105,36 @@ class LocaleCommentLanguageTest extends WebTestBase {
foreach (language_list() as $langcode => $language) {
// Post a comment with content language $langcode.
$prefix = empty($prefixes[$langcode]) ? '' : $prefixes[$langcode] . '/';
$edit = array("comment_body[$langcode_not_specified][0][value]" => $this->randomName());
$this->drupalPost("{$prefix}node/{$node->nid}", $edit, t('Save'));
$comment_values[$node_langcode][$langcode] = $this->randomName();
$edit = array(
'subject' => $this->randomName(),
"comment_body[$langcode][0][value]" => $comment_values[$node_langcode][$langcode],
);
$this->drupalPost("{$prefix}node/{$node->nid}", $edit, t('Preview'));
$this->drupalPost(NULL, $edit, t('Save'));
// Check that comment language matches the current content language.
$comment = db_select('comment', 'c')
->fields('c')
$cid = db_select('comment', 'c')
->fields('c', array('cid'))
->condition('nid', $node->nid)
->orderBy('cid', 'DESC')
->range(0, 1)
->execute()
->fetchObject();
->fetchField();
$comment = comment_load($cid);
$args = array('%node_language' => $node_langcode, '%comment_language' => $comment->langcode, '%langcode' => $langcode);
$this->assertEqual($comment->langcode, $langcode, t('The comment posted with content language %langcode and belonging to the node with language %node_language has language %comment_language', $args));
$this->assertEqual($comment->langcode, $langcode, format_string('The comment posted with content language %langcode and belonging to the node with language %node_language has language %comment_language', $args));
$this->assertEqual($comment->comment_body[$langcode][0]['value'], $comment_values[$node_langcode][$langcode], 'Comment body correctly stored.');
}
}
// Check that comment bodies appear in the administration UI.
$this->drupalGet('admin/content/comment');
foreach ($comment_values as $node_values) {
foreach ($node_values as $value) {
$this->assertRaw($value);
}
}
}
}

View File

@ -0,0 +1,8 @@
name = Comment test
description = Support module for Comment module testing.
package = Testing
version = VERSION
core = 8.x
hidden = TRUE
dependencies[] = comment

View File

@ -0,0 +1,17 @@
<?php
/**
* @file
* Dummy module implementing comment related hooks to test API interaction with
* the Comment module.
*/
/**
* Implements hook_entity_info_alter().
*/
function comment_test_entity_info_alter(&$info) {
if (language_multilingual()) {
// Enable language handling for comment fields.
$info['comment']['translation']['comment_test'] = TRUE;
}
}

View File

@ -301,7 +301,7 @@ function field_valid_language($langcode, $default = TRUE) {
*/
function field_language($entity_type, $entity, $field_name = NULL, $langcode = NULL) {
$display_langcodes = &drupal_static(__FUNCTION__, array());
$id = $entity->bundle();
$id = $entity->id();
$bundle = $entity->bundle();
$langcode = field_valid_language($langcode, FALSE);