@@ -388,13 +388,13 @@ function locale_languages_edit_form_validate($form, &$form_state) {
|
||||
form_set_error('prefix', t('Domain and path prefix values should not be set at the same time.'));
|
||||
}
|
||||
if (!empty($form_state['values']['domain']) && $duplicate = db_query("SELECT language FROM {languages} WHERE domain = :domain AND language <> :language", array(':domain' => $form_state['values']['domain'], ':language' => $form_state['values']['langcode']))->fetchField()) {
|
||||
form_set_error('domain', t('The domain (%domain) is already tied to a language (%language).', array('%domain' => $form_state['values']['domain'], '%language' => $duplicate->language)));
|
||||
form_set_error('domain', t('The domain (%domain) is already tied to a language (%language).', array('%domain' => $form_state['values']['domain'], '%language' => $duplicate)));
|
||||
}
|
||||
if (empty($form_state['values']['prefix']) && language_default('language') != $form_state['values']['langcode'] && empty($form_state['values']['domain'])) {
|
||||
form_set_error('prefix', t('Only the default language can have both the domain and prefix empty.'));
|
||||
}
|
||||
if (!empty($form_state['values']['prefix']) && $duplicate = db_query("SELECT language FROM {languages} WHERE prefix = :prefix AND language <> :language", array(':prefix' => $form_state['values']['prefix'], ':language' => $form_state['values']['langcode']))->fetchField()) {
|
||||
form_set_error('prefix', t('The prefix (%prefix) is already tied to a language (%language).', array('%prefix' => $form_state['values']['prefix'], '%language' => $duplicate->language)));
|
||||
form_set_error('prefix', t('The prefix (%prefix) is already tied to a language (%language).', array('%prefix' => $form_state['values']['prefix'], '%language' => $duplicate)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -6,8 +6,8 @@ core = 7.x
|
||||
files[] = locale.test
|
||||
configure = admin/config/regional/language
|
||||
|
||||
; Information added by drupal.org packaging script on 2013-03-07
|
||||
version = "7.21"
|
||||
; Information added by drupal.org packaging script on 2013-04-03
|
||||
version = "7.22"
|
||||
project = "drupal"
|
||||
datestamp = "1362616996"
|
||||
datestamp = "1365027012"
|
||||
|
||||
|
@@ -386,20 +386,53 @@ function locale_form_node_form_alter(&$form, &$form_state) {
|
||||
/**
|
||||
* Form submit handler for node_form().
|
||||
*
|
||||
* Checks if Locale is registered as a translation handler and handle possible
|
||||
* node language changes.
|
||||
*
|
||||
* This submit handler needs to run before entity_form_submit_build_entity()
|
||||
* is invoked by node_form_submit_build_node(), because it alters the values of
|
||||
* attached fields. Therefore, it cannot be a hook_node_submit() implementation.
|
||||
*/
|
||||
function locale_field_node_form_submit($form, &$form_state) {
|
||||
if (field_has_translation_handler('node', 'locale')) {
|
||||
$node = (object) $form_state['values'];
|
||||
$current_language = entity_language('node', $node);
|
||||
list(, , $bundle) = entity_extract_ids('node', $node);
|
||||
locale_field_entity_form_submit('node', $form, $form_state);
|
||||
}
|
||||
|
||||
foreach (field_info_instances('node', $bundle) as $instance) {
|
||||
/**
|
||||
* Implements hook_form_FORM_ID_alter().
|
||||
*/
|
||||
function locale_form_comment_form_alter(&$form, &$form_state, $form_id) {
|
||||
// If a content type has multilingual support we set the content language as
|
||||
// comment language.
|
||||
if ($form['language']['#value'] == LANGUAGE_NONE && locale_multilingual_node_type($form['#node']->type)) {
|
||||
global $language_content;
|
||||
$form['language']['#value'] = $language_content->language;
|
||||
$submit_callback = 'locale_field_comment_form_submit';
|
||||
array_unshift($form['actions']['preview']['#submit'], $submit_callback);
|
||||
array_unshift($form['#submit'], $submit_callback);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Form submit handler for comment_form().
|
||||
*
|
||||
* This submit handler needs to run before entity_form_submit_build_entity()
|
||||
* is invoked by comment_form_submit_build_comment(), because it alters the
|
||||
* values of attached fields.
|
||||
*/
|
||||
function locale_field_comment_form_submit($form, &$form_state) {
|
||||
locale_field_entity_form_submit('comment', $form, $form_state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles field language on submit for the given entity type.
|
||||
*
|
||||
* Checks if Locale is registered as a translation handler and handle possible
|
||||
* language changes.
|
||||
*/
|
||||
function locale_field_entity_form_submit($entity_type, $form, &$form_state ) {
|
||||
if (field_has_translation_handler($entity_type, 'locale')) {
|
||||
$entity = (object) $form_state['values'];
|
||||
$current_language = entity_language($entity_type, $entity);
|
||||
list(, , $bundle) = entity_extract_ids($entity_type, $entity);
|
||||
|
||||
foreach (field_info_instances($entity_type, $bundle) as $instance) {
|
||||
$field_name = $instance['field_name'];
|
||||
$field = field_info_field($field_name);
|
||||
$previous_language = $form[$field_name]['#language'];
|
||||
@@ -407,7 +440,7 @@ function locale_field_node_form_submit($form, &$form_state) {
|
||||
// Handle a possible language change: new language values are inserted,
|
||||
// previous ones are deleted.
|
||||
if ($field['translatable'] && $previous_language != $current_language) {
|
||||
$form_state['values'][$field_name][$current_language] = $node->{$field_name}[$previous_language];
|
||||
$form_state['values'][$field_name][$current_language] = $entity->{$field_name}[$previous_language];
|
||||
$form_state['values'][$field_name][$previous_language] = array();
|
||||
}
|
||||
}
|
||||
@@ -491,6 +524,9 @@ function locale_field_language_fallback(&$display_language, $entity, $langcode)
|
||||
*/
|
||||
function locale_entity_info_alter(&$entity_info) {
|
||||
$entity_info['node']['translation']['locale'] = TRUE;
|
||||
if (isset($entity_info['comment'])) {
|
||||
$entity_info['comment']['translation']['locale'] = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1060,15 +1096,3 @@ function locale_url_outbound_alter(&$path, &$options, $original_path) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_form_FORM_ID_alter().
|
||||
*/
|
||||
function locale_form_comment_form_alter(&$form, &$form_state, $form_id) {
|
||||
// If a content type has multilingual support we set the content language as
|
||||
// comment language.
|
||||
if ($form['language']['#value'] == LANGUAGE_NONE && locale_multilingual_node_type($form['#node']->type)) {
|
||||
global $language_content;
|
||||
$form['language']['#value'] = $language_content->language;
|
||||
}
|
||||
}
|
||||
|
@@ -2758,7 +2758,7 @@ class LocaleCommentLanguageFunctionalTest extends DrupalWebTestCase {
|
||||
parent::setUp('locale', 'locale_test');
|
||||
|
||||
// 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.
|
||||
@@ -2787,6 +2787,12 @@ class LocaleCommentLanguageFunctionalTest extends DrupalWebTestCase {
|
||||
// French no matter what path prefix the URLs have.
|
||||
$edit = array('language' => '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.');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2817,22 +2823,46 @@ class LocaleCommentLanguageFunctionalTest extends DrupalWebTestCase {
|
||||
foreach (language_list() as $langcode => $language) {
|
||||
// Post a comment with content language $langcode.
|
||||
$prefix = empty($language->prefix) ? '' : $language->prefix . '/';
|
||||
$edit = array("comment_body[$language_none][0][value]" => $this->randomName());
|
||||
$this->drupalPost("{$prefix}node/{$node->nid}", $edit, t('Save'));
|
||||
$comment_values[$node_langcode][$langcode] = $this->randomName();
|
||||
// Initially field form widgets have no language.
|
||||
$edit = array(
|
||||
'subject' => $this->randomName(),
|
||||
"comment_body[$language_none][0][value]" => $comment_values[$node_langcode][$langcode],
|
||||
);
|
||||
$this->drupalPost("{$prefix}node/{$node->nid}", $edit, t('Preview'));
|
||||
// After the first submit the submitted entity language is taken into
|
||||
// account.
|
||||
$edit = array(
|
||||
'subject' => $edit['subject'],
|
||||
"comment_body[$langcode][0][value]" => $comment_values[$node_langcode][$langcode],
|
||||
);
|
||||
$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);
|
||||
$comment_langcode = entity_language('comment', $comment);
|
||||
$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->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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -5,8 +5,8 @@ package = Testing
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by drupal.org packaging script on 2013-03-07
|
||||
version = "7.21"
|
||||
; Information added by drupal.org packaging script on 2013-04-03
|
||||
version = "7.22"
|
||||
project = "drupal"
|
||||
datestamp = "1362616996"
|
||||
datestamp = "1365027012"
|
||||
|
||||
|
Reference in New Issue
Block a user