function entityreference_field_widget_form in Entity reference 7
Implements hook_field_widget_form().
File
- ./
entityreference.module, line 840 - Entityreference primary module file.
Code
function entityreference_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
// Ensure that the entity target type exists before displaying the widget.
$entity_info = entity_get_info($field['settings']['target_type']);
if (empty($entity_info)) {
return;
}
$entity_type = $instance['entity_type'];
$entity = isset($element['#entity']) ? $element['#entity'] : NULL;
$handler = entityreference_get_selection_handler($field, $instance, $entity_type, $entity);
if ($instance['widget']['type'] == 'entityreference_autocomplete' || $instance['widget']['type'] == 'entityreference_autocomplete_tags') {
if ($instance['widget']['type'] == 'entityreference_autocomplete') {
// We let the Field API handles multiple values for us, only take
// care of the one matching our delta.
if (isset($items[$delta])) {
$items = array(
$items[$delta],
);
}
else {
$items = array();
}
}
$entity_ids = array();
$entity_labels = array();
// Build an array of entities ID.
foreach ($items as $item) {
if (isset($item['target_id'])) {
$entity_ids[] = $item['target_id'];
}
}
// Load those entities and loop through them to extract their labels.
$entities = entity_load($field['settings']['target_type'], $entity_ids);
foreach ($entities as $entity_id => $entity_item) {
$label = $handler
->getLabel($entity_item);
$key = "{$label} ({$entity_id})";
// Labels containing commas or quotes must be wrapped in quotes.
if (strpos($key, ',') !== FALSE || strpos($key, '"') !== FALSE) {
$key = '"' . str_replace('"', '""', $key) . '"';
}
$entity_labels[] = $key;
}
// Prepare the autocomplete path.
if (!empty($instance['widget']['settings']['path'])) {
$autocomplete_path = $instance['widget']['settings']['path'];
}
else {
$autocomplete_path = $instance['widget']['type'] == 'entityreference_autocomplete' ? 'entityreference/autocomplete/single' : 'entityreference/autocomplete/tags';
}
$autocomplete_path .= '/' . $field['field_name'] . '/' . $instance['entity_type'] . '/' . $instance['bundle'] . '/';
// Use <NULL> as a placeholder in the URL when we don't have an entity.
// Most webservers collapse two consecutive slashes.
$id = 'NULL';
if ($entity) {
list($eid) = entity_extract_ids($entity_type, $entity);
if ($eid) {
$id = $eid;
}
}
$autocomplete_path .= $id;
if ($instance['widget']['type'] == 'entityreference_autocomplete') {
$element += array(
'#type' => 'textfield',
'#maxlength' => 1024,
'#default_value' => implode(', ', $entity_labels),
'#autocomplete_path' => $autocomplete_path,
'#size' => $instance['widget']['settings']['size'],
'#element_validate' => array(
'_entityreference_autocomplete_validate',
),
);
return array(
'target_id' => $element,
);
}
else {
$element += array(
'#type' => 'textfield',
'#maxlength' => 1024,
'#default_value' => implode(', ', $entity_labels),
'#autocomplete_path' => $autocomplete_path,
'#size' => $instance['widget']['settings']['size'],
'#element_validate' => array(
'_entityreference_autocomplete_tags_validate',
),
);
return $element;
}
}
}