| 139 |
* Implementation of hook_field_formatter(). |
* Implementation of hook_field_formatter(). |
| 140 |
*/ |
*/ |
| 141 |
function fieldreference_field_formatter($field, $item, $formatter, $node) { |
function fieldreference_field_formatter($field, $item, $formatter, $node) { |
| 142 |
// TODO: handle recursion !!! |
static $recursion_queue = array(); |
| 143 |
|
|
| 144 |
if (empty($item['nid']) || !is_numeric($item['nid']) || |
if (empty($item['nid']) || !is_numeric($item['nid']) || |
| 145 |
empty($item['field_name']) || |
empty($item['field_name']) || |
| 147 |
return ''; |
return ''; |
| 148 |
} |
} |
| 149 |
|
|
| 150 |
|
$field_id = $item['nid'] . ':' . $item['field_name'] . ':' . $item['delta']; |
| 151 |
|
if (in_array($field_id, $recursion_queue)) { |
| 152 |
|
drupal_set_message(t('circular field reference chain'), 'error'); |
| 153 |
|
return ''; |
| 154 |
|
} |
| 155 |
|
|
| 156 |
if ($formatter == 'default') { |
if ($formatter == 'default') { |
| 157 |
$context = $node->teaser ? 'teaser' : 'full'; |
$context = $node->teaser ? 'teaser' : 'full'; |
| 158 |
} |
} |
| 168 |
$referenced_type = content_types($node->type); |
$referenced_type = content_types($node->type); |
| 169 |
$referenced_field = $referenced_type['fields'][$item['field_name']]; |
$referenced_field = $referenced_type['fields'][$item['field_name']]; |
| 170 |
|
|
| 171 |
$referenced_formatter = isset($referenced_field['display_settings'][$context]['format']) ? $referenced_field['display_settings'][$context]['format'] : 'default'; |
if ($referenced_field['type'] == 'fieldreference') { |
| 172 |
|
$recursion_queue[] = $field_id; |
| 173 |
|
} |
| 174 |
|
else { |
| 175 |
|
$recursion_queue = array(); |
| 176 |
|
} |
| 177 |
|
|
| 178 |
|
$referenced_formatter = isset($referenced_field['display_settings'][$context]['format']) ? $referenced_field['display_settings'][$context]['format'] : 'default'; |
| 179 |
|
|
| 180 |
$referenced_items = $referenced_node->$item['field_name']; |
$referenced_items = $referenced_node->$item['field_name']; |
| 181 |
|
|
| 250 |
$storage = array(); |
$storage = array(); |
| 251 |
foreach($items['fields'] as $value) { |
foreach($items['fields'] as $value) { |
| 252 |
$value = explode(':', $value); |
$value = explode(':', $value); |
| 253 |
|
if (!$value) { |
| 254 |
|
continue; |
| 255 |
|
} |
| 256 |
$delta['nid'] = $value[0]; |
$delta['nid'] = $value[0]; |
| 257 |
$delta['field_name'] = $value[1]; |
$delta['field_name'] = $value[1]; |
| 258 |
$delta['delta'] = $value[2]; |
$delta['delta'] = $value[2]; |
| 264 |
} |
} |
| 265 |
else { |
else { |
| 266 |
$value = explode(':', $items['fields']); |
$value = explode(':', $items['fields']); |
| 267 |
|
if (!$value) { |
| 268 |
|
unset($items[0]); |
| 269 |
|
} |
| 270 |
$items[0]['nid'] = $value[0]; |
$items[0]['nid'] = $value[0]; |
| 271 |
$items[0]['field_name'] = $value[1]; |
$items[0]['field_name'] = $value[1]; |
| 272 |
$items[0]['delta'] = $value[2]; |
$items[0]['delta'] = $value[2]; |
| 377 |
unset($items[$delta]); |
unset($items[$delta]); |
| 378 |
} |
} |
| 379 |
} |
} |
| 380 |
|
unset($items[$delta]['field']); |
| 381 |
|
} |
| 382 |
|
else { |
| 383 |
|
unset($items[$delta]); |
| 384 |
} |
} |
|
unset($items[$delta]['field']); |
|
| 385 |
} |
} |
| 386 |
$items['fields'] = $fields; |
$items['fields'] = $fields; |
| 387 |
break; |
break; |
| 447 |
* Retrieve a pipe delimited string of autocomplete suggestions |
* Retrieve a pipe delimited string of autocomplete suggestions |
| 448 |
*/ |
*/ |
| 449 |
function fieldreference_autocomplete($field_name, $string = '') { |
function fieldreference_autocomplete($field_name, $string = '') { |
| 450 |
$fields = content_fields(); |
$field = content_fields($field_name); |
|
$field = $fields[$field_name]; |
|
| 451 |
$matches = array(); |
$matches = array(); |
| 452 |
|
|
| 453 |
foreach (_fieldreference_potential_references($field, $string) as $row) { |
foreach (_fieldreference_potential_references($field, $string) as $row) { |