function partial_date_field_formatter_view in Partial Date 7
Implements hook_field_formatter_view().
This handles any text override options before passing the values onto the partial_date_render() or partial_date_render_range().
File
- ./
partial_date.module, line 447 - Defines a date element that allows for any combination of date granularity settings.
Code
function partial_date_field_formatter_view($object_type, $object, $field, $instance, $langcode, $items, $display) {
$has_range = strpos($field['type'], 'range');
$widget_settings = $instance['widget']['settings'];
$element = array();
foreach ($items as $delta => $item) {
$override = FALSE;
if (!is_array($item)) {
continue;
}
$item += array(
'txt_short' => NULL,
'txt_long' => NULL,
'check_approximate' => 0,
);
switch ($display['settings']['use_override']) {
case 'short':
if (strlen($item['txt_short'])) {
$override = $item['txt_short'];
}
break;
case 'long':
if (strlen($item['txt_long'])) {
$override = $item['txt_long'];
}
break;
case 'long_short':
if (strlen($item['txt_long'])) {
$override = $item['txt_long'];
}
elseif (strlen($item['txt_short'])) {
$override = $item['txt_short'];
}
case 'short_long':
if (strlen($item['txt_short'])) {
$override = $item['txt_short'];
}
elseif (strlen($item['txt_long'])) {
$override = $item['txt_long'];
}
break;
}
$output = FALSE;
$to = $from = FALSE;
// The additonal "Approximate only" checkbox.
$display['settings']['is_approximate'] = FALSE;
if (!empty($widget_settings['theme_overrides']['check_approximate'])) {
$display['settings']['is_approximate'] = !empty($item['check_approximate']);
}
if (isset($item['from'])) {
$from = partial_date_field_widget_reduce_date_components($item['from'], TRUE);
}
if (isset($item['to'])) {
$to = partial_date_field_widget_reduce_date_components($item['to'], FALSE);
}
$rendered_date = '';
if ($to && $from) {
$rendered_date = partial_date_render_range($from, $to, $display['settings']);
}
elseif ($to xor $from) {
$rendered_date = partial_date_render($from ? $from : $to, $display['settings']);
}
unset($display['settings']['is_approximate']);
$output = $override !== FALSE ? check_plain($override) : $rendered_date;
if ($output) {
$element[$delta] = array(
'#theme' => 'partial_date_markup',
'#markup' => $output,
'#rendered_date' => $rendered_date,
'#dates' => array(
'from' => $from,
'to' => $to,
),
'#item' => $item,
'#entity_type' => $object_type,
'#entity' => $object,
'#field' => $field,
'#instance' => $instance,
'#langcode' => $langcode,
'#display' => $display,
);
}
}
return $element;
}