function multiselect_widget in Multiselect 5
Same name and namespace in other branches
- 5.2 multiselect.module \multiselect_widget()
- 6 multiselect.module \multiselect_widget()
Implementation of hook_widget @todo Temporary 'print_r's need removing @todo Is the if ($field['widget']['type'] == 'multiselect_select' necessary? @todo Doesn't seem to populate list when in 'preview'
File
- ./
multiselect.module, line 61 - Allows users to select multiple items in an easier way than the normal node-reference widget
Code
function multiselect_widget($op, &$node, $field, &$node_field) {
print_r("op = {$op}. field['widget']['type'] = " . $field['widget']['type'] . "<br/>\n");
//necessary to get list of nodes that can be included in this nodereference
include_once drupal_get_path('module', 'content') . '/nodereference.module';
if ($field['widget']['type'] == 'multiselect_select') {
switch ($op) {
case 'prepare form values':
//puts node_field (original) values into a temporary bit of the array called default nids
$node_field_transposed = content_transpose_array_rows_cols($node_field);
$node_field['default nids'] = $node_field_transposed['nid'];
break;
case 'form':
//generates form object
$form = array();
$selectedoptions = array();
$notselectedoptions = array();
//gets list of all nodes we can reference
$options = _nodereference_potential_references($field, true);
//for each node, check if it's already selected. If it is, add it to the selected list
foreach ($options as $key => $value) {
$inarray = FALSE;
if (is_array($node_field['default nids'])) {
foreach ($node_field['default nids'] as $n => $nid) {
if ($nid == $key) {
$inarray = TRUE;
}
}
}
if ($inarray) {
$selectedoptions[$key] = _nodereference_item($field, $value);
}
else {
$notselectedoptions[$key] = _nodereference_item($field, $value);
}
}
//useful variables
$fieldname = $field['field_name'];
$addbutton = $fieldname . "_add";
$removebutton = $fieldname . "_remove";
$selfield = $fieldname . "_sel";
$unselfield = $fieldname . "_unsel";
//call methods to create prefix (ie the non-selected table, etc)
$prefix = "<div class='container-inline'>";
$prefix .= _html_for_notselected_box($notselectedoptions, $unselfield, $fieldname);
$prefix .= _html_for_buttons($fieldname);
//create the form item
$form[$fieldname] = array(
'#tree' => TRUE,
);
$form[$fieldname]['nids'] = array(
'#type' => 'select',
'#options' => $selectedoptions,
'#size' => 10,
'#prefix' => $prefix,
'#suffix' => "\n</div>\n",
'#multiple' => TRUE,
'#attributes' => array(
'class' => "{$selfield} multiselect_sel",
'id' => $fieldname,
),
'#default_value' => $node_field['default nids'],
);
//return the form array
return $form;
case 'process form values':
//Replace the node values
$node_field = content_transpose_array_rows_cols(array(
'nid' => $node_field['nids'],
));
break;
case 'submit':
break;
}
}
}