1 field.tokens.inc | _field_token_info($field_name = NULL) |
Fetch an array of field data used for tokens.
File
- core/
modules/ field/ field.tokens.inc, line 121 - Builds placeholder replacement tokens for field-related data.
Code
function _field_token_info($field_name = NULL) {
$info = &backdrop_static(__FUNCTION__);
$cache = cache('token');
if (!isset($info)) {
if ($cached = $cache->get('field:info')) {
$info = $cached->data;
}
else {
$info = array();
$fields = field_info_fields();
$instances = field_info_instances();
$type_info = field_info_field_types();
$entity_info = entity_get_info();
foreach ($fields as $field) {
$key = $field['field_name'];
if (!empty($field['bundles'])) {
foreach (array_keys($field['bundles']) as $entity_type) {
// Make sure a token type exists for this entity.
$token_type = $entity_info[$entity_type]['token type'];
if (empty($token_type)) {
continue;
}
$info[$key]['token types'][] = $token_type;
$info[$key] += array('labels' => array(), 'bundles' => array());
// Find which label is most commonly used.
foreach ($field['bundles'][$entity_type] as $bundle) {
// Field information will included fields attached to disabled
// bundles, so check that the bundle exists before provided a
// token for it.
// @see http://drupal.org/node/1252566
if (!isset($entity_info[$entity_type]['bundles'][$bundle])) {
continue;
}
$info[$key]['labels'][] = $instances[$entity_type][$bundle][$key]['label'];
$info[$key]['bundles'][$token_type][$bundle] = $entity_info[$entity_type]['bundles'][$bundle]['label'];
}
}
}
if (isset($info[$key])) {
$labels = array_count_values($info[$key]['labels']);
arsort($labels);
$info[$key]['label'] = check_plain(key($labels));
// Generate a description for the token.
$info[$key]['description'] = t('@type field.', array('@type' => $type_info[$field['type']]['label']));
if ($also_known_as = array_unique(array_diff($info[$key]['labels'], array($info[$key]['label'])))) {
$info[$key]['description'] .= ' ' . t('Also known as %labels.', array('%labels' => implode(', ', $also_known_as)));
}
}
}
backdrop_alter('token_field_info', $info);
$cache->set('field:info', $info);
}
}
if (isset($field_name)) {
return isset($info[$field_name]) ? $info[$field_name] : FALSE;
}
return $info;
}