#668386 by yched: Handle unavailable entity types or bundles.
parent
3729441ace
commit
73c28090e3
|
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -823,6 +823,9 @@ function field_read_instance($obj_type, $field_name, $bundle, $include_additiona
|
|||
* An array of instances matching the arguments.
|
||||
*/
|
||||
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->join('field_config', 'fc', 'fc.id = fci.field_id');
|
||||
$query->fields('fci');
|
||||
|
@ -831,12 +834,12 @@ function field_read_instances($params = array(), $include_additional = array())
|
|||
foreach ($params as $key => $value) {
|
||||
$query->condition('fci.' . $key, $value);
|
||||
}
|
||||
if (!isset($include_additional['include_inactive']) || !$include_additional['include_inactive']) {
|
||||
if (!$include_inactive) {
|
||||
$query
|
||||
->condition('fc.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('fci.deleted', 0);
|
||||
}
|
||||
|
@ -845,16 +848,21 @@ function field_read_instances($params = array(), $include_additional = array())
|
|||
$results = $query->execute();
|
||||
|
||||
foreach ($results as $record) {
|
||||
$instance = unserialize($record['data']);
|
||||
$instance['id'] = $record['id'];
|
||||
$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'];
|
||||
// Filter out instances on unknown object types (for instance because the
|
||||
// module exposing them was disabled).
|
||||
$entity_info = entity_get_info($record['object_type']);
|
||||
if ($include_inactive || $entity_info) {
|
||||
$instance = unserialize($record['data']);
|
||||
$instance['id'] = $record['id'];
|
||||
$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);
|
||||
$instances[] = $instance;
|
||||
module_invoke_all('field_read_instance', $instance);
|
||||
$instances[] = $instance;
|
||||
}
|
||||
}
|
||||
return $instances;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue