summaryrefslogtreecommitdiff
path: root/modules/field_ui
diff options
context:
space:
mode:
authorDavid Rothstein <drothstein@gmail.com>2013-01-27 16:21:18 -0500
committerDavid Rothstein <drothstein@gmail.com>2013-01-27 16:21:18 -0500
commitbd1dc1fdbb428bc745f26b1183e1052603cd1d6e (patch)
treea695ab119da16a609e7b7637bd882302a0230f30 /modules/field_ui
parent6a4df4adedc949f7441493e75e8ae73f847bfa10 (diff)
downloadbrdo-bd1dc1fdbb428bc745f26b1183e1052603cd1d6e.tar.gz
brdo-bd1dc1fdbb428bc745f26b1183e1052603cd1d6e.tar.bz2
Issue #1040790 by yched, swentel, geerlingguy, justin.randell, Berdir | catch: Fixed _field_info_collate_fields() memory usage.
Diffstat (limited to 'modules/field_ui')
-rw-r--r--modules/field_ui/field_ui.module23
-rw-r--r--modules/field_ui/field_ui.test6
2 files changed, 18 insertions, 11 deletions
diff --git a/modules/field_ui/field_ui.module b/modules/field_ui/field_ui.module
index 93cbcccc7..5f8bc45ef 100644
--- a/modules/field_ui/field_ui.module
+++ b/modules/field_ui/field_ui.module
@@ -332,23 +332,30 @@ function _field_ui_bundle_admin_path($entity_type, $bundle_name) {
* Identifies inactive fields within a bundle.
*/
function field_ui_inactive_instances($entity_type, $bundle_name = NULL) {
- if (!empty($bundle_name)) {
- $inactive = array($bundle_name => array());
- $params = array('bundle' => $bundle_name);
+ $params = array('entity_type' => $entity_type);
+
+ if (empty($bundle_name)) {
+ $active = field_info_instances($entity_type);
+ $inactive = array();
}
else {
- $inactive = array();
- $params = array();
+ // Restrict to the specified bundle. For consistency with the case where
+ // $bundle_name is NULL, the $active and $inactive arrays are keyed by
+ // bundle name first.
+ $params['bundle'] = $bundle_name;
+ $active = array($bundle_name => field_info_instances($entity_type, $bundle_name));
+ $inactive = array($bundle_name => array());
}
- $params['entity_type'] = $entity_type;
- $active_instances = field_info_instances($entity_type);
+ // Iterate on existing definitions, and spot those that do not appear in the
+ // $active list collected earlier.
$all_instances = field_read_instances($params, array('include_inactive' => TRUE));
foreach ($all_instances as $instance) {
- if (!isset($active_instances[$instance['bundle']][$instance['field_name']])) {
+ if (!isset($active[$instance['bundle']][$instance['field_name']])) {
$inactive[$instance['bundle']][$instance['field_name']] = $instance;
}
}
+
if (!empty($bundle_name)) {
return $inactive[$bundle_name];
}
diff --git a/modules/field_ui/field_ui.test b/modules/field_ui/field_ui.test
index d0a822a82..b67b70e2a 100644
--- a/modules/field_ui/field_ui.test
+++ b/modules/field_ui/field_ui.test
@@ -269,7 +269,7 @@ class FieldUIManageFieldsTestCase extends FieldUITestCase {
*/
function assertFieldSettings($bundle, $field_name, $string = 'dummy test string', $entity_type = 'node') {
// Reset the fields info.
- _field_info_collate_fields(TRUE);
+ field_info_cache_clear();
// Assert field settings.
$field = field_info_field($field_name);
$this->assertTrue($field['settings']['test_field_setting'] == $string, t('Field settings were found.'));
@@ -360,7 +360,7 @@ class FieldUIManageFieldsTestCase extends FieldUITestCase {
$this->fieldUIDeleteField($bundle_path1, $this->field_name, $this->field_label, $this->type);
// Reset the fields info.
- _field_info_collate_fields(TRUE);
+ field_info_cache_clear();
// Check that the field instance was deleted.
$this->assertNull(field_info_instance('node', $this->field_name, $this->type), t('Field instance was deleted.'));
// Check that the field was not deleted
@@ -370,7 +370,7 @@ class FieldUIManageFieldsTestCase extends FieldUITestCase {
$this->fieldUIDeleteField($bundle_path2, $this->field_name, $this->field_label, $type_name2);
// Reset the fields info.
- _field_info_collate_fields(TRUE);
+ field_info_cache_clear();
// Check that the field instance was deleted.
$this->assertNull(field_info_instance('node', $this->field_name, $type_name2), t('Field instance was deleted.'));
// Check that the field was deleted too.