1 field.info.inc | _field_info_collate_types() |
Collates all information on field types, widget types and related structures.
Return value
An associative array containing::
- 'field types': Array of hook_field_info() results, keyed by field_type. Each element has the following components: label, description, settings, instance_settings, default_widget, default_formatter, and behaviors from hook_field_info(), as well as module, giving the module that exposes the field type.
- 'widget types': Array of hook_field_widget_info() results, keyed by widget_type. Each element has the following components: label, field types, settings, weight, and behaviors from hook_field_widget_info(), as well as module, giving the module that exposes the widget type.
- 'formatter types': Array of hook_field_formatter_info() results, keyed by formatter_type. Each element has the following components: label, field types, and behaviors from hook_field_formatter_info(), as well as module, giving the module that exposes the formatter type.
- 'storage types': Array of hook_field_storage_info() results, keyed by storage type names. Each element has the following components: label, description, and settings from hook_field_storage_info(), as well as module, giving the module that exposes the storage type.
- 'fieldable types': Array of hook_entity_info() results, keyed by entity_type. Each element has the following components: name, id key, revision key, bundle key, cacheable, and bundles from hook_entity_info(), as well as module, giving the module that exposes the entity type.
See also
_field_info_collate_types_reset()
Related topics
File
- core/
modules/ field/ field.info.inc, line 70 - Field Info API, providing information about available fields and field types.
Code
function _field_info_collate_types() {
global $language;
// Use the advanced backdrop_static() pattern, since this is called very often.
static $backdrop_static_fast;
if (!isset($backdrop_static_fast)) {
$backdrop_static_fast['field_info_collate_types'] = &backdrop_static(__FUNCTION__);
}
$info = &$backdrop_static_fast['field_info_collate_types'];
// The _info() hooks invoked below include translated strings, so each
// language is cached separately.
$langcode = $language->langcode;
if (!isset($info)) {
if ($cached = cache('field')->get("field_info_types:$langcode")) {
$info = $cached->data;
}
else {
$info = array(
'field types' => array(),
'widget types' => array(),
'formatter types' => array(),
'storage types' => array(),
);
// Populate field types.
foreach (module_implements('field_info') as $module) {
$field_types = (array) module_invoke($module, 'field_info');
foreach ($field_types as $name => $field_info) {
// Provide defaults.
$field_info += array(
'settings' => array(),
'instance_settings' => array(),
);
$info['field types'][$name] = $field_info;
$info['field types'][$name]['module'] = $module;
}
}
backdrop_alter('field_info', $info['field types']);
// Populate widget types.
foreach (module_implements('field_widget_info') as $module) {
$widget_types = (array) module_invoke($module, 'field_widget_info');
foreach ($widget_types as $name => $widget_info) {
// Provide defaults.
$widget_info += array(
'settings' => array(),
);
$info['widget types'][$name] = $widget_info;
$info['widget types'][$name]['module'] = $module;
}
}
backdrop_alter('field_widget_info', $info['widget types']);
backdrop_sort($info['widget types']);
// Populate formatter types.
foreach (module_implements('field_formatter_info') as $module) {
$formatter_types = (array) module_invoke($module, 'field_formatter_info');
foreach ($formatter_types as $name => $formatter_info) {
// Provide defaults.
$formatter_info += array(
'settings' => array(),
);
$info['formatter types'][$name] = $formatter_info;
$info['formatter types'][$name]['module'] = $module;
}
}
backdrop_alter('field_formatter_info', $info['formatter types']);
// Populate storage types.
foreach (module_implements('field_storage_info') as $module) {
$storage_types = (array) module_invoke($module, 'field_storage_info');
foreach ($storage_types as $name => $storage_info) {
// Provide defaults.
$storage_info += array(
'settings' => array(),
);
$info['storage types'][$name] = $storage_info;
$info['storage types'][$name]['module'] = $module;
}
}
backdrop_alter('field_storage_info', $info['storage types']);
// Set the cache only if we can acquire a lock.
if (lock_acquire("field_info_types:$langcode")) {
cache('field')->set("field_info_types:$langcode", $info);
lock_release("field_info_types:$langcode");
}
}
}
return $info;
}