1 entityreference.module | entityreference_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) |
Implements hook_field_widget_form().
File
- core/
modules/ entityreference/ entityreference.module, line 807 - 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') {
// Let the Field API handles multiple values, 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_multiple($field['settings']['target_type'], $entity_ids);
foreach ($entities as $entity_id => $entity_item) {
$label = $handler->getLabel($entity_item);
$key = $instance['widget']['settings']['hide_ids'] ? $label : "$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 there's no 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;
}
}
}