#668386 by yched: Handle unavailable entity types or bundles.

merge-requests/26/head
Angie Byron 2010-02-07 05:12:35 +00:00
parent 3729441ace
commit 73c28090e3
3 changed files with 48 additions and 12 deletions

View File

@ -6396,7 +6396,12 @@ function entity_get_info($entity_type = NULL) {
} }
} }
return empty($entity_type) ? $entity_info : $entity_info[$entity_type]; if (empty($entity_type)) {
return $entity_info;
}
elseif (isset($entity_info[$entity_type])) {
return $entity_info[$entity_type];
}
} }
/** /**

View File

@ -823,6 +823,9 @@ function field_read_instance($obj_type, $field_name, $bundle, $include_additiona
* An array of instances matching the arguments. * An array of instances matching the arguments.
*/ */
function field_read_instances($params = array(), $include_additional = array()) { function field_read_instances($params = array(), $include_additional = array()) {
$include_inactive = isset($include_additional['include_inactive']) && $include_additional['include_inactive'];
$include_deleted = isset($include_additional['include_deleted']) && $include_additional['include_deleted'];
$query = db_select('field_config_instance', 'fci', array('fetch' => PDO::FETCH_ASSOC)); $query = db_select('field_config_instance', 'fci', array('fetch' => PDO::FETCH_ASSOC));
$query->join('field_config', 'fc', 'fc.id = fci.field_id'); $query->join('field_config', 'fc', 'fc.id = fci.field_id');
$query->fields('fci'); $query->fields('fci');
@ -831,12 +834,12 @@ function field_read_instances($params = array(), $include_additional = array())
foreach ($params as $key => $value) { foreach ($params as $key => $value) {
$query->condition('fci.' . $key, $value); $query->condition('fci.' . $key, $value);
} }
if (!isset($include_additional['include_inactive']) || !$include_additional['include_inactive']) { if (!$include_inactive) {
$query $query
->condition('fc.active', 1) ->condition('fc.active', 1)
->condition('fc.storage_active', 1); ->condition('fc.storage_active', 1);
} }
if (!isset($include_additional['include_deleted']) || !$include_additional['include_deleted']) { if (!$include_deleted) {
$query->condition('fc.deleted', 0); $query->condition('fc.deleted', 0);
$query->condition('fci.deleted', 0); $query->condition('fci.deleted', 0);
} }
@ -845,16 +848,21 @@ function field_read_instances($params = array(), $include_additional = array())
$results = $query->execute(); $results = $query->execute();
foreach ($results as $record) { foreach ($results as $record) {
$instance = unserialize($record['data']); // Filter out instances on unknown object types (for instance because the
$instance['id'] = $record['id']; // module exposing them was disabled).
$instance['field_id'] = $record['field_id']; $entity_info = entity_get_info($record['object_type']);
$instance['field_name'] = $record['field_name']; if ($include_inactive || $entity_info) {
$instance['object_type'] = $record['object_type']; $instance = unserialize($record['data']);
$instance['bundle'] = $record['bundle']; $instance['id'] = $record['id'];
$instance['deleted'] = $record['deleted']; $instance['field_id'] = $record['field_id'];
$instance['field_name'] = $record['field_name'];
$instance['object_type'] = $record['object_type'];
$instance['bundle'] = $record['bundle'];
$instance['deleted'] = $record['deleted'];
module_invoke_all('field_read_instance', $instance); module_invoke_all('field_read_instance', $instance);
$instances[] = $instance; $instances[] = $instance;
}
} }
return $instances; return $instances;
} }

View File

@ -1347,6 +1347,29 @@ class FieldInfoTestCase extends FieldTestCase {
} }
} }
/**
* Test that instances on disabled object types are filtered out.
*/
function testInstanceDisabledObjectType() {
// For this test the field type and the object type must be exposed by
// different modules.
$field_definition = array(
'field_name' => 'field',
'type' => 'test_field',
);
field_create_field($field_definition);
$instance_definition = array(
'field_name' => 'field',
'object_type' => 'comment',
'bundle' => 'comment_node_article',
);
field_create_instance($instance_definition);
// Disable coment module. This clears field_info cache.
module_disable(array('comment'));
$this->assertNull(field_info_instance('comment', 'field', 'comment_node_article'), t('No instances are returned on disabled object types.'));
}
/** /**
* Test that the field_info settings convenience functions work. * Test that the field_info settings convenience functions work.
*/ */