summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/field/field.attach.inc2
-rw-r--r--modules/field/field.crud.inc20
-rw-r--r--modules/field/field.test13
-rw-r--r--modules/field_ui/field_ui.admin.inc2
-rw-r--r--modules/node/node.test50
5 files changed, 68 insertions, 19 deletions
diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc
index 4b5441904..01abd6f78 100644
--- a/modules/field/field.attach.inc
+++ b/modules/field/field.attach.inc
@@ -1328,7 +1328,7 @@ function field_attach_delete_bundle($bundle) {
// First, delete the instances themseves.
$instances = field_info_instances($bundle);
foreach ($instances as $instance) {
- field_delete_instance($instance['field_name'], $bundle);
+ field_delete_instance($instance);
}
// Clear the cache.
diff --git a/modules/field/field.crud.inc b/modules/field/field.crud.inc
index d9351cff7..487a44dfa 100644
--- a/modules/field/field.crud.inc
+++ b/modules/field/field.crud.inc
@@ -541,7 +541,8 @@ function field_delete_field($field_name) {
$field = field_info_field($field_name);
if (isset($field['bundles'])) {
foreach ($field['bundles'] as $bundle) {
- field_delete_instance($field_name, $bundle);
+ $instance = field_info_instance($field_name, $bundle);
+ field_delete_instance($instance);
}
}
@@ -832,24 +833,19 @@ function field_read_instances($params = array(), $include_additional = array())
* Mark a field instance for deletion, including all data associated with
* it.
*
- * @param $field_name
- * The name of the field whose instance will be deleted.
- * @param $bundle
- * The bundle for the instance which will be deleted.
+ * @param $instance
+ * An instance structure.
*/
-function field_delete_instance($field_name, $bundle) {
- // Save the instance for hook_field_delete_instance before it is deleted.
- $instance = field_info_instance($field_name, $bundle);
-
+function field_delete_instance($instance) {
// Mark the field instance for deletion.
db_update('field_config_instance')
->fields(array('deleted' => 1))
- ->condition('field_name', $field_name)
- ->condition('bundle', $bundle)
+ ->condition('field_name', $instance['field_name'])
+ ->condition('bundle', $instance['bundle'])
->execute();
// Mark instance data for deletion.
- $field = field_info_field($field_name);
+ $field = field_info_field($instance['field_name']);
module_invoke($field['storage']['module'], 'field_storage_delete_instance', $instance);
// Clear the cache.
diff --git a/modules/field/field.test b/modules/field/field.test
index fc0b9899f..cfb7655ad 100644
--- a/modules/field/field.test
+++ b/modules/field/field.test
@@ -2125,12 +2125,12 @@ class FieldInstanceCrudTestCase extends FieldTestCase {
field_create_instance($this->instance_definition);
$this->another_instance_definition = $this->instance_definition;
$this->another_instance_definition['bundle'] .= '_another_bundle';
- field_create_instance($this->another_instance_definition);
+ $instance = field_create_instance($this->another_instance_definition);
// Test that the first instance is not deleted, and then delete it.
$instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
$this->assertTrue(!empty($instance) && empty($instance['deleted']), t('A new field instance is not marked for deletion.'));
- field_delete_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+ field_delete_instance($instance);
// Make sure the instance is marked as deleted when the instance is
// specifically loaded.
@@ -2490,7 +2490,8 @@ class FieldBulkDeleteTestCase extends FieldTestCase {
$this->assertEqual(count($found['test_entity']), 10, 'Correct number of objects found before deleting');
// Delete the instance.
- field_delete_instance($field['field_name'], $bundle);
+ $instance = field_info_instance($field['field_name'], $bundle);
+ field_delete_instance($instance);
// The instance still exists, deleted.
$instances = field_read_instances(array('field_id' => $field['id'], 'deleted' => 1), array('include_deleted' => 1, 'include_inactive' => 1));
@@ -2522,7 +2523,8 @@ class FieldBulkDeleteTestCase extends FieldTestCase {
$field = reset($this->fields);
// Delete the instance.
- field_delete_instance($field['field_name'], $bundle);
+ $instance = field_info_instance($field['field_name'], $bundle);
+ field_delete_instance($instance);
// No field hooks were called.
$mem = field_test_memorize();
@@ -2577,7 +2579,8 @@ class FieldBulkDeleteTestCase extends FieldTestCase {
foreach ($this->bundles as $bundle) {
// Delete the instance.
- field_delete_instance($field['field_name'], $bundle);
+ $instance = field_info_instance($field['field_name'], $bundle);
+ field_delete_instance($instance);
// Purge the data.
field_purge_batch(10);
diff --git a/modules/field_ui/field_ui.admin.inc b/modules/field_ui/field_ui.admin.inc
index 419d772d0..6d2f8d7da 100644
--- a/modules/field_ui/field_ui.admin.inc
+++ b/modules/field_ui/field_ui.admin.inc
@@ -979,7 +979,7 @@ function field_ui_field_delete_form_submit($form, &$form_state) {
$bundle_label = $bundles[$bundle]['label'];
if (!empty($bundle) && $field && !$field['locked'] && $form_values['confirm']) {
- field_delete_instance($field['field_name'], $bundle);
+ field_delete_instance($instance);
// Delete the field if that was the last instance.
if (count($field['bundles'] == 1)) {
field_delete_field($field['field_name']);
diff --git a/modules/node/node.test b/modules/node/node.test
index f9af7e4cd..f1c296a76 100644
--- a/modules/node/node.test
+++ b/modules/node/node.test
@@ -857,6 +857,56 @@ class NodeTypeTestCase extends DrupalWebTestCase {
$this->drupalGet('node/add/' . str_replace('_', '-', $type->name));
$this->assertResponse(200, 'The new content type can be accessed at node/add.');
}
+
+ /**
+ * Test editing a node type using the UI.
+ */
+ function testNodeTypeEditing() {
+ $web_user = $this->drupalCreateUser(array('bypass node access', 'administer content types'));
+ $this->drupalLogin($web_user);
+
+ $instance = field_info_instance('body', 'page');
+ $this->assertEqual($instance['label'], 'Body', t('Body field was found.'));
+
+ // Verify that title and body fields are displayed.
+ $this->drupalGet('node/add/page');
+ $this->assertRaw('Title', t('Title field was found.'));
+ $this->assertRaw('Full text', t('Body field was found.'));
+
+ // Rename the title field and remove the body field.
+ $edit = array(
+ 'title_label' => 'Foo',
+ 'body_label' => '',
+ );
+ $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
+ field_info_cache_clear();
+
+ $this->assertFalse(field_info_instance('body', 'page'), t('Body field was removed.'));
+ $this->drupalGet('node/add/page');
+ $this->assertRaw('Foo', t('New title label was displayed.'));
+ $this->assertNoRaw('Title', t('Old title label was not displayed.'));
+ $this->assertNoRaw('Full text', t('Body field was not found.'));
+
+ // Add the body field again and change the name, machine name and description.
+ $edit = array(
+ 'name' => 'Bar',
+ 'type' => 'bar',
+ 'description' => 'Lorem ipsum.',
+ 'body_label' => 'Baz',
+ );
+ $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
+ field_info_cache_clear();
+
+ $instance = field_info_instance('body', 'bar');
+ $this->assertEqual($instance['label'], 'Baz', t('Body field was added.'));
+ $this->drupalGet('node/add');
+ $this->assertRaw('Bar', t('New name was displayed.'));
+ $this->assertRaw('Lorem ipsum', t('New description was displayed.'));
+ $this->clickLink('Bar');
+ $this->assertEqual(url('node/add/bar', array('absolute' => TRUE)), $this->getUrl(), t('New machine name was used in URL.'));
+ $this->assertRaw('Foo', t('Title field was found.'));
+ $this->assertRaw('Full text', t('Body field was found.'));
+ }
}
/**