function matrix_widget in Matrix field 5
Same name and namespace in other branches
- 6.2 matrix.module \matrix_widget()
- 6 matrix.module \matrix_widget()
Implementation of hook_widget().
File
- ./
matrix.module, line 138
Code
function matrix_widget($op, &$node, $field, &$node_field) {
if ($field['rows'] && $field['cols']) {
$rows = trim($field['rows']);
$cols = trim($field['cols']);
$rows = explode("\n", $rows);
$cols = explode("\n", $cols);
}
switch ($op) {
case 'form':
$form = array();
if ($field['required']) {
$label = '<label for="' . form_clean_id($field['field_name']) . '">' . t($field['widget']['label']);
$label .= '<span class="form-required" title="This field is required.">*</span>';
$label .= '</label>';
}
else {
$label = '<label for="' . form_clean_id($field['field_name']) . '">' . t($field['widget']['label']) . '</label>';
}
$form[$field['field_name']] = array(
'#tree' => TRUE,
'#weight' => $field['widget']['weight'],
'#theme' => 'matrix_table_form',
'#value' => $label,
'#prefix' => '<div class="form-item matrix_field">',
'#suffix' => '</div>',
);
if ($cols) {
$header = array_merge(array(
'',
), $cols);
}
$first_col = $rows;
$i = 0;
foreach ($rows as $row) {
if ($row) {
$j = 0;
foreach ($cols as $col) {
if ($col) {
$form[$field['field_name']][$i][$j] = array(
'#type' => 'textfield',
'#size' => $field['size'],
'#default_value' => isset($node_field[$i][$j]) ? $node_field[$i][$j] : $field['widget']['default_value'][$i][$j],
);
$j++;
}
}
$i++;
}
}
$form[$field['field_name']]['header'] = array(
'#value' => $header,
);
$form[$field['field_name']]['first_col'] = array(
'#value' => $first_col,
);
return $form;
case 'validate':
if ($field['required']) {
$i = 0;
foreach ($rows as $row) {
if ($row) {
$j = 0;
foreach ($cols as $col) {
if ($col) {
if (!$node_field[$i][$j]) {
form_set_error('', t('%title is required', array(
'%title' => t($field['widget']['label']),
)));
}
$j++;
}
}
}
$i++;
}
}
break;
}
}