_field_info_collate_types

  1. drupal
    1. 8
    2. 7
Versions
7 _field_info_collate_types($reset = FALSE)
8 _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, 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

▾ 4 functions call _field_info_collate_types()

field_info_field_types in modules/field/field.info.inc
Returns information about field types from hook_field_info().
field_info_formatter_types in modules/field/field.info.inc
Returns information about field formatters from hook_field_formatter_info().
field_info_storage_types in modules/field/field.info.inc
Returns information about field storage from hook_field_storage_info().
field_info_widget_types in modules/field/field.info.inc
Returns information about field widgets from hook_field_widget_info().

Code

modules/field/field.info.inc, line 65

<?php
function _field_info_collate_types() {
  global $language;

  // Use the advanced drupal_static() pattern, since this is called very often.
  static $drupal_static_fast;

  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['field_info_collate_types'] = &drupal_static(__FUNCTION__);
  }
  $info = &$drupal_static_fast['field_info_collate_types'];

  // The _info() hooks invoked below include translated strings, so each
  // language is cached separately.
  $langcode = $language->language;

  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;
        }
      }
      drupal_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;
        }
      }
      drupal_alter('field_widget_info', $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;
        }
      }
      drupal_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;
        }
      }
      drupal_alter('field_storage_info', $info['storage types']);

      cache('field')->set("field_info_types:$langcode", $info);
    }
  }

  return $info;
}
?>