2009-02-05 01:21:16 +00:00
|
|
|
<?php
|
2009-02-08 21:22:59 +00:00
|
|
|
// $Id$
|
2009-02-05 01:21:16 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @file
|
2009-05-01 15:28:13 +00:00
|
|
|
* Default 'implementations' of hook_field_*(): common field housekeeping.
|
2009-02-05 01:21:16 +00:00
|
|
|
*
|
|
|
|
* Those implementations are special, as field.module does not define any field
|
|
|
|
* types. Those functions take care of default stuff common to all field types.
|
2009-05-01 15:28:13 +00:00
|
|
|
* They are called through the _field_invoke_default() iterator, generally in
|
|
|
|
* the corresponding field_attach_[operation]() function.
|
2009-02-05 01:21:16 +00:00
|
|
|
*/
|
|
|
|
|
2009-08-22 00:58:55 +00:00
|
|
|
function field_default_extract_form_values($obj_type, $object, $field, $instance, $langcode, &$items, $form, &$form_state) {
|
2009-03-26 13:31:28 +00:00
|
|
|
$field_name = $field['field_name'];
|
2009-02-05 01:21:16 +00:00
|
|
|
|
2009-08-22 00:58:55 +00:00
|
|
|
if (isset($form_state['values'][$field_name][$langcode])) {
|
|
|
|
$items = $form_state['values'][$field_name][$langcode];
|
2009-02-05 01:21:16 +00:00
|
|
|
// Remove the 'value' of the 'add more' button.
|
2009-03-26 13:31:28 +00:00
|
|
|
unset($items[$field_name . '_add_more']);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-08-22 00:58:55 +00:00
|
|
|
function field_default_submit($obj_type, $object, $field, $instance, $langcode, &$items, $form, &$form_state) {
|
2009-03-26 13:31:28 +00:00
|
|
|
$field_name = $field['field_name'];
|
|
|
|
|
|
|
|
// Reorder items to account for drag-n-drop reordering.
|
|
|
|
if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_DEFAULT) {
|
|
|
|
$items = _field_sort_items($field, $items);
|
2009-02-05 01:21:16 +00:00
|
|
|
}
|
2009-03-26 13:31:28 +00:00
|
|
|
|
|
|
|
// Filter out empty values.
|
|
|
|
$items = field_set_empty($field, $items);
|
2009-02-05 01:21:16 +00:00
|
|
|
}
|
|
|
|
|
2009-05-01 15:28:13 +00:00
|
|
|
/**
|
|
|
|
* Default field 'insert' operation.
|
|
|
|
*
|
|
|
|
* Insert default value if no $object->$field_name entry was provided.
|
|
|
|
* This can happen with programmatic saves, or on form-based creation where
|
|
|
|
* the current user doesn't have 'edit' permission for the field.
|
|
|
|
*/
|
2009-08-22 00:58:55 +00:00
|
|
|
function field_default_insert($obj_type, $object, $field, $instance, $langcode, &$items) {
|
2009-05-01 15:28:13 +00:00
|
|
|
// _field_invoke() populates $items with an empty array if the $object has no
|
|
|
|
// entry for the field, so we check on the $object itself.
|
2009-08-22 00:58:55 +00:00
|
|
|
// We also check that the current field translation is actually defined before
|
|
|
|
// assigning it a default value. This way we ensure that only the intended
|
|
|
|
// languages get a default value. Otherwise we could have default values for
|
|
|
|
// not yet open languages.
|
2009-08-28 06:51:07 +00:00
|
|
|
if (empty($object) || !property_exists($object, $field['field_name']) ||
|
2009-08-22 00:58:55 +00:00
|
|
|
(isset($object->{$field['field_name']}[$langcode]) && count($object->{$field['field_name']}[$langcode]) == 0)) {
|
|
|
|
$items = field_get_default_value($obj_type, $object, $field, $instance, $langcode);
|
2009-05-01 15:28:13 +00:00
|
|
|
}
|
|
|
|
}
|
2009-08-22 00:58:55 +00:00
|
|
|
|
2009-02-05 01:21:16 +00:00
|
|
|
/**
|
2009-08-11 04:46:29 +00:00
|
|
|
* Default field 'view' operation.
|
2009-02-05 01:21:16 +00:00
|
|
|
*
|
2009-08-11 04:46:29 +00:00
|
|
|
* @see field_attach_view()
|
2009-02-05 01:21:16 +00:00
|
|
|
*/
|
2009-08-22 00:58:55 +00:00
|
|
|
function field_default_view($obj_type, $object, $field, $instance, $langcode, $items, $build_mode) {
|
2009-09-10 22:31:58 +00:00
|
|
|
list($id, $vid, $bundle) = field_extract_ids($obj_type, $object);
|
2009-02-05 01:21:16 +00:00
|
|
|
|
|
|
|
$addition = array();
|
2009-08-02 11:24:21 +00:00
|
|
|
$display = $instance['display'][$build_mode];
|
2009-02-05 01:21:16 +00:00
|
|
|
|
2009-08-02 11:24:21 +00:00
|
|
|
if ($display['type'] !== 'hidden') {
|
2009-02-05 01:21:16 +00:00
|
|
|
$theme = 'field_formatter_' . $display['type'];
|
|
|
|
$single = (field_behaviors_formatter('multiple values', $display) == FIELD_BEHAVIOR_DEFAULT);
|
|
|
|
|
|
|
|
$label_display = $display['label'];
|
2009-06-22 09:10:07 +00:00
|
|
|
if ($build_mode == 'search_index') {
|
2009-02-05 01:21:16 +00:00
|
|
|
$label_display = 'hidden';
|
|
|
|
}
|
|
|
|
|
|
|
|
$info = array(
|
|
|
|
'#field_name' => $field['field_name'],
|
|
|
|
'#bundle' => $bundle,
|
|
|
|
'#object' => $object,
|
|
|
|
'#object_type' => $obj_type,
|
|
|
|
);
|
|
|
|
|
|
|
|
$element = $info + array(
|
|
|
|
'#theme' => 'field',
|
2009-08-13 01:50:00 +00:00
|
|
|
'#weight' => $display['weight'],
|
2009-02-05 01:21:16 +00:00
|
|
|
'#title' => check_plain(t($instance['label'])),
|
|
|
|
'#access' => field_access('view', $field),
|
|
|
|
'#label_display' => $label_display,
|
2009-06-22 09:10:07 +00:00
|
|
|
'#build_mode' => $build_mode,
|
2009-08-22 00:58:55 +00:00
|
|
|
'#language' => $langcode,
|
2009-08-28 06:51:07 +00:00
|
|
|
'#formatter_single' => $single,
|
2009-02-05 01:21:16 +00:00
|
|
|
'items' => array(),
|
|
|
|
);
|
|
|
|
|
|
|
|
// Fill-in items.
|
|
|
|
foreach ($items as $delta => $item) {
|
|
|
|
$element['items'][$delta] = array(
|
|
|
|
'#item' => $item,
|
|
|
|
'#weight' => $delta,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Append formatter information either on each item ('single-value' formatter)
|
|
|
|
// or at the upper 'items' level ('multiple-value' formatter)
|
|
|
|
$format_info = $info + array(
|
2009-08-28 06:51:07 +00:00
|
|
|
'#theme' => $theme,
|
2009-02-05 01:21:16 +00:00
|
|
|
'#formatter' => $display['type'],
|
|
|
|
'#settings' => $display['settings'],
|
|
|
|
);
|
|
|
|
|
|
|
|
if ($single) {
|
|
|
|
foreach ($items as $delta => $item) {
|
|
|
|
$element['items'][$delta] += $format_info;
|
|
|
|
$element['items'][$delta]['#item']['#delta'] = $delta;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$element['items'] += $format_info;
|
|
|
|
}
|
|
|
|
|
2009-06-24 18:16:38 +00:00
|
|
|
$addition = array($field['field_name'] => $element);
|
2009-02-05 01:21:16 +00:00
|
|
|
}
|
2009-08-02 11:24:21 +00:00
|
|
|
|
2009-02-05 01:21:16 +00:00
|
|
|
return $addition;
|
|
|
|
}
|
|
|
|
|
2009-08-22 00:58:55 +00:00
|
|
|
function field_default_prepare_translation($obj_type, $object, $field, $instance, $langcode, &$items) {
|
2009-02-05 01:21:16 +00:00
|
|
|
$addition = array();
|
|
|
|
if (isset($object->translation_source->$field['field_name'])) {
|
|
|
|
$addition[$field['field_name']] = $object->translation_source->$field['field_name'];
|
|
|
|
}
|
|
|
|
return $addition;
|
2009-02-08 21:22:59 +00:00
|
|
|
}
|