Issue #1947814 by vijaycs85, Gábor Hojtsy, tim.plunkett: Fixed New config entities often save as langcode: und incorrectly.

8.0.x
Alex Pott 2013-04-09 13:04:07 +01:00
parent a6ef010633
commit e97a786c05
16 changed files with 49 additions and 6 deletions

View File

@ -284,6 +284,9 @@ class ConfigStorageController implements EntityStorageControllerInterface {
public function create(array $values) { public function create(array $values) {
$class = $this->entityInfo['class']; $class = $this->entityInfo['class'];
// Set default language to site default if not provided.
$values += array('langcode' => language_default()->langcode);
$entity = new $class($values, $this->entityType); $entity = new $class($values, $this->entityType);
// Mark this entity as new, so isNew() returns TRUE. This does not check // Mark this entity as new, so isNew() returns TRUE. This does not check
// whether a configuration entity with the same ID (if any) already exists. // whether a configuration entity with the same ID (if any) already exists.

View File

@ -80,6 +80,15 @@ class EntityFormController implements EntityFormControllerInterface {
if (!empty($info['fieldable'])) { if (!empty($info['fieldable'])) {
field_attach_form($entity, $form, $form_state, $this->getFormLangcode($form_state)); field_attach_form($entity, $form, $form_state, $this->getFormLangcode($form_state));
} }
if (!isset($form['langcode'])) {
// If the form did not specify otherwise, default to keeping the existing
// language of the entity or defaulting to the site default language for
// new entities.
$form['langcode'] = array(
'#type' => 'value',
'#value' => !$entity->isNew() ? $entity->langcode : language_default()->langcode,
);
}
return $form; return $form;
} }

View File

@ -2,3 +2,4 @@ id: basic
label: Basic block label: Basic block
revision: '0' revision: '0'
description: A basic block contains a title and a body. description: A basic block contains a title and a body.
langcode: en

View File

@ -64,6 +64,10 @@ class CustomBlockTypeTest extends CustomBlockTestBase {
$this->drupalPost('admin/structure/custom-blocks/add', $edit, t('Save')); $this->drupalPost('admin/structure/custom-blocks/add', $edit, t('Save'));
$block_type = entity_load('custom_block_type', 'foo'); $block_type = entity_load('custom_block_type', 'foo');
$this->assertTrue($block_type, 'The new block type has been created.'); $this->assertTrue($block_type, 'The new block type has been created.');
// Check that the block type was created in site default language.
$default_langcode = language_default()->langcode;
$this->assertEqual($block_type->langcode, $default_langcode);
} }
/** /**

View File

@ -104,7 +104,7 @@ class BlockStorageUnitTest extends DrupalUnitTestBase {
'cache' => '1', 'cache' => '1',
'admin_label' => t('Test block html id'), 'admin_label' => t('Test block html id'),
), ),
'langcode' => LANGUAGE_NOT_SPECIFIED, 'langcode' => language_default()->langcode,
); );
$this->assertIdentical($actual_properties, $expected_properties, 'The block properties are exported correctly.'); $this->assertIdentical($actual_properties, $expected_properties, 'The block properties are exported correctly.');

View File

@ -35,13 +35,14 @@ class ConfigEntityTest extends WebTestBase {
*/ */
function testCRUD() { function testCRUD() {
$manifest_name = 'manifest.config_test.dynamic'; $manifest_name = 'manifest.config_test.dynamic';
$default_langcode = language_default()->langcode;
// Verify default properties on a newly created empty entity. // Verify default properties on a newly created empty entity.
$empty = entity_create('config_test', array()); $empty = entity_create('config_test', array());
$this->assertIdentical($empty->id, NULL); $this->assertIdentical($empty->id, NULL);
$this->assertTrue($empty->uuid); $this->assertTrue($empty->uuid);
$this->assertIdentical($empty->label, NULL); $this->assertIdentical($empty->label, NULL);
$this->assertIdentical($empty->style, NULL); $this->assertIdentical($empty->style, NULL);
$this->assertIdentical($empty->langcode, LANGUAGE_NOT_SPECIFIED); $this->assertIdentical($empty->langcode, $default_langcode);
// Verify ConfigEntity properties/methods on the newly created empty entity. // Verify ConfigEntity properties/methods on the newly created empty entity.
$this->assertIdentical($empty->isNew(), TRUE); $this->assertIdentical($empty->isNew(), TRUE);
@ -55,7 +56,7 @@ class ConfigEntityTest extends WebTestBase {
$this->assertTrue($empty->get('uuid')); $this->assertTrue($empty->get('uuid'));
$this->assertIdentical($empty->get('label'), NULL); $this->assertIdentical($empty->get('label'), NULL);
$this->assertIdentical($empty->get('style'), NULL); $this->assertIdentical($empty->get('style'), NULL);
$this->assertIdentical($empty->get('langcode'), LANGUAGE_NOT_SPECIFIED); $this->assertIdentical($empty->get('langcode'), $default_langcode);
// Verify Entity properties/methods on the newly created empty entity. // Verify Entity properties/methods on the newly created empty entity.
$this->assertIdentical($empty->isNewRevision(), FALSE); $this->assertIdentical($empty->isNewRevision(), FALSE);
@ -97,7 +98,7 @@ class ConfigEntityTest extends WebTestBase {
$this->assertNotEqual($config_test->uuid, $empty->uuid); $this->assertNotEqual($config_test->uuid, $empty->uuid);
$this->assertIdentical($config_test->label, $expected['label']); $this->assertIdentical($config_test->label, $expected['label']);
$this->assertIdentical($config_test->style, $expected['style']); $this->assertIdentical($config_test->style, $expected['style']);
$this->assertIdentical($config_test->langcode, LANGUAGE_NOT_SPECIFIED); $this->assertIdentical($config_test->langcode, $default_langcode);
// Verify methods on the newly created entity. // Verify methods on the newly created entity.
$this->assertIdentical($config_test->isNew(), TRUE); $this->assertIdentical($config_test->isNew(), TRUE);

View File

@ -110,7 +110,7 @@ class ConfigImportTest extends DrupalUnitTestBase {
'label' => 'New', 'label' => 'New',
'style' => '', 'style' => '',
'status' => '1', 'status' => '1',
'langcode' => 'und', 'langcode' => language_default()->langcode,
'protected_property' => '', 'protected_property' => '',
); );
$staging->write($dynamic_name, $original_dynamic_data); $staging->write($dynamic_name, $original_dynamic_data);

View File

@ -61,7 +61,7 @@ class ConfigImportUITest extends WebTestBase {
'label' => 'New', 'label' => 'New',
'style' => '', 'style' => '',
'status' => '1', 'status' => '1',
'langcode' => 'und', 'langcode' => language_default()->langcode,
'protected_property' => '', 'protected_property' => '',
); );
$staging->write($dynamic_name, $original_dynamic_data); $staging->write($dynamic_name, $original_dynamic_data);

View File

@ -3,3 +3,4 @@ label: 'Website feedback'
recipients: [] recipients: []
reply: '' reply: ''
weight: '0' weight: '0'
langcode: en

View File

@ -82,6 +82,11 @@ class ContactSitewideTest extends WebTestBase {
$this->addCategory($id = drupal_strtolower($this->randomName(16)), $label = $this->randomName(16), implode(',', array($recipients[0])), '', TRUE); $this->addCategory($id = drupal_strtolower($this->randomName(16)), $label = $this->randomName(16), implode(',', array($recipients[0])), '', TRUE);
$this->assertRaw(t('Category %label has been added.', array('%label' => $label))); $this->assertRaw(t('Category %label has been added.', array('%label' => $label)));
// Check that the category was created in site default language.
$langcode = config('contact.category.' . $id)->get('langcode');
$default_langcode = language_default()->langcode;
$this->assertEqual($langcode, $default_langcode);
// Make sure the newly created category is included in the list of categories. // Make sure the newly created category is included in the list of categories.
$this->assertNoUniqueText($label, 'New category included in categories list.'); $this->assertNoUniqueText($label, 'New category included in categories list.');

View File

@ -169,6 +169,11 @@ function filter_admin_format_form($form, &$form_state, $format) {
'#disabled' => !empty($format->format), '#disabled' => !empty($format->format),
'#weight' => -20, '#weight' => -20,
); );
// @todo Remove once moved to FilterFormatFormController.
$form['langcode'] = array(
'#type' => 'value',
'#value' => !$format->isNew() ? $format->langcode : language_default()->langcode,
);
// Add user role access selection. // Add user role access selection.
$form['roles'] = array( $form['roles'] = array(

View File

@ -84,6 +84,7 @@ class FilterCrudTest extends WebTestBase {
*/ */
function verifyTextFormat($format) { function verifyTextFormat($format) {
$t_args = array('%format' => $format->name); $t_args = array('%format' => $format->name);
$default_langcode = language_default()->langcode;
// Verify filter_format_load(). // Verify filter_format_load().
$filter_format = filter_format_load($format->format); $filter_format = filter_format_load($format->format);
@ -91,6 +92,8 @@ class FilterCrudTest extends WebTestBase {
$this->assertEqual($filter_format->name, $format->name, format_string('filter_format_load: Proper title for text format %format.', $t_args)); $this->assertEqual($filter_format->name, $format->name, format_string('filter_format_load: Proper title for text format %format.', $t_args));
$this->assertEqual($filter_format->cache, $format->cache, format_string('filter_format_load: Proper cache indicator for text format %format.', $t_args)); $this->assertEqual($filter_format->cache, $format->cache, format_string('filter_format_load: Proper cache indicator for text format %format.', $t_args));
$this->assertEqual($filter_format->weight, $format->weight, format_string('filter_format_load: Proper weight for text format %format.', $t_args)); $this->assertEqual($filter_format->weight, $format->weight, format_string('filter_format_load: Proper weight for text format %format.', $t_args));
// Check that the filter was created in site default language.
$this->assertEqual($format->langcode, $default_langcode, format_string('filter_format_load: Proper language code for text format %format.', $t_args));
// Verify the 'cache' text format property according to enabled filters. // Verify the 'cache' text format property according to enabled filters.
$filter_info = filter_get_filters(); $filter_info = filter_get_filters();

View File

@ -1,3 +1,4 @@
id: anonymous id: anonymous
label: Anonymous user label: Anonymous user
weight: 0 weight: 0
langcode: en

View File

@ -1,3 +1,4 @@
id: authenticated id: authenticated
label: Authenticated user label: Authenticated user
weight: 1 weight: 1
langcode: en

View File

@ -32,6 +32,7 @@ class UserRoleAdminTest extends WebTestBase {
*/ */
function testRoleAdministration() { function testRoleAdministration() {
$this->drupalLogin($this->admin_user); $this->drupalLogin($this->admin_user);
$default_langcode = language_default()->langcode;
// Test adding a role. (In doing so, we use a role name that happens to // Test adding a role. (In doing so, we use a role name that happens to
// correspond to an integer, to test that the role administration pages // correspond to an integer, to test that the role administration pages
@ -43,6 +44,9 @@ class UserRoleAdminTest extends WebTestBase {
$role = entity_load('user_role', $role_name); $role = entity_load('user_role', $role_name);
$this->assertTrue(is_object($role), 'The role was successfully retrieved from the database.'); $this->assertTrue(is_object($role), 'The role was successfully retrieved from the database.');
// Check that the role was created in site default language.
$this->assertEqual($role->langcode, $default_langcode);
// Try adding a duplicate role. // Try adding a duplicate role.
$this->drupalPost(NULL, $edit, t('Add role')); $this->drupalPost(NULL, $edit, t('Add role'));
$this->assertRaw(t('The machine-readable name is already in use. It must be unique.'), 'Duplicate role warning displayed.'); $this->assertRaw(t('The machine-readable name is already in use. It must be unique.'), 'Duplicate role warning displayed.');

View File

@ -1004,6 +1004,11 @@ function user_admin_role($form, $form_state, $role) {
'source' => array('role', 'label'), 'source' => array('role', 'label'),
), ),
); );
// @todo Remove once moved to RoleFormController.
$form['role']['langcode'] = array(
'#type' => 'value',
'#value' => !$role->isNew() ? $role->langcode : language_default()->langcode,
);
$form['role']['weight'] = array( $form['role']['weight'] = array(
'#type' => 'value', '#type' => 'value',
'#value' => $role->weight, '#value' => $role->weight,