View source
<?php
function select2widget_process_callback($element) {
if ($element['#multiple']) {
$element['#attributes']['multiple'] = 'multiple';
$element['#attributes']['name'] = $element['#name'] . '[]';
}
else {
$required = $element['#required'];
if ($required && !isset($element['#default_value']) || isset($element['#empty_value']) || isset($element['#empty_option'])) {
$element += array(
'#empty_value' => '',
'#empty_option' => $required ? t('- Select -') : t('- None -'),
);
$empty_option = array(
$element['#empty_value'] => $element['#empty_option'],
);
$element['#options'] = $empty_option + $element['#options'];
}
}
$data['select2widget2']['elements'][$element['#id']] = array(
'id' => $element['#id'],
'multiple' => $element['#multiple'],
);
$element['#attached']['library'][] = array(
'select2widget',
'select2',
);
$element['#attached']['js'][] = array(
'type' => 'setting',
'data' => $data,
);
return $element;
}
function select2widget_field_widget_validate($element, &$form_state) {
if ($element['#required'] && $element['#value'] == '_none') {
form_error($element, t('@name field is required.', array(
'@name' => $element['#title'],
)));
}
$items = _options_form_to_storage($element);
form_set_value($element, $items, $form_state);
}
function _select2widget_options_properties($type, $multiple, $required, $has_value) {
$base = array(
'filter_xss' => FALSE,
'strip_tags' => FALSE,
'empty_option' => FALSE,
'optgroups' => FALSE,
'strip_tags_and_unescape' => FALSE,
);
$properties = array();
switch ($type) {
case 'select2widget':
$properties = array(
'strip_tags' => TRUE,
'strip_tags_and_unescape' => TRUE,
'optgroups' => TRUE,
);
if (!$multiple) {
if (!$required) {
$properties['empty_option'] = 'option_none';
}
elseif (!$has_value) {
$properties['empty_option'] = 'option_select';
}
}
break;
}
return $properties + $base;
}
function _select2widget_options_get_options($field, $instance, $properties, $entity_type, $entity) {
$options = (array) module_invoke($field['module'], 'options_list', $field, $instance, $entity_type, $entity);
_options_prepare_options($options, $properties);
if (!$properties['optgroups']) {
$options = options_array_flatten($options);
}
if ($properties['empty_option']) {
$label = theme('select2widget_options_none', array(
'instance' => $instance,
'option' => $properties['empty_option'],
));
$options = array(
'_none' => $label,
) + $options;
}
return $options;
}