function matrix_table_process in Matrix field 6.2
Process the table type element before displaying the field.
Build the form element. When creating a form using FAPI #process, note that $element['#value'] is already set.
For CCK, $fields array is in $form['#field_info'][$element['#field_name']].
1 string reference to 'matrix_table_process'
- matrix_elements in ./
matrix.module - Implementation of hook_elements().
File
- ./
matrix.module, line 496 - Defines simple matrix field types.
Code
function matrix_table_process($element, $edit, &$form_state, $form) {
if (!is_array($element['#rows_elements'])) {
$element['#rows_elements'] = array();
}
//as this element can be used by non-cck modules, data needs to be optionally retrieved directly from the form element
$field = $form['#field_info'][$element['#field_name']];
if ($field) {
$rows = (array) unserialize(str_replace("\r", "", $field['rows_elements']));
$cols = (array) unserialize(str_replace("\r", "", $field['cols_elements']));
$mode = $field['mode'];
}
else {
$rows = (array) $element['#rows_elements'];
$cols = (array) $element['#cols_elements'];
$mode = $element['#mode'];
}
//generate column headers
$header[] = '';
//first must be blank
foreach ($cols as $col) {
if ($col['#required'] == TRUE) {
$header[] = $col['#title'] . '<span class="form-required" title="This field is required.">*</span>';
}
else {
$header[] = $col['#title'];
}
}
//generate first column
foreach ($rows as $row) {
if ($row['#required'] == TRUE) {
$first_col[] = $row['#title'] . '<span class="form-required" title="This field is required.">*</span>';
}
else {
$first_col[] = $row['#title'];
}
}
$processed_element = array(
'#tree' => TRUE,
'#theme' => 'matrix_table_form',
'#weight' => 0,
'#parents' => $element['#parents'],
'#title' => $element['#title'],
'#description' => $element['#description'],
'#field_name' => $element['#field_name'],
'#type_name' => $element['#type_name'],
'#delta' => $element['#delta'],
'#mode' => $element['#mode'],
'#element_validate' => $element['#element_validate'],
'#rows_elements' => $rows,
'#cols_elements' => $cols,
'#header' => $header,
'#first_col' => $first_col,
'#prefix' => '<div id="matrix-wrapper">' . $element['#prefix'],
'#suffix' => $element['#suffix'] . '</div>',
);
$f = $edit ? $element['#value'] : $form['#node']->{$element['#field_name']}[$element['#delta']];
switch ($element['#type']) {
case 'matrix_table':
//build out the appropriate form element
foreach ($cols as $col_id => $col) {
$processed_element[$col_id] = _matrix_process($col, isset($f[$col_id]) ? $f[$col_id] : NULL);
}
break;
case 'matrix_matrix':
//build out the appropriate form element
foreach ($rows as $row_id => $row) {
foreach ($cols as $col_id => $col) {
$processed_element[$row_id][$col_id] = _matrix_process($col, isset($f[$row_id][$col_id]) ? $f[$row_id][$col_id] : NULL);
}
}
break;
}
if ($element['#ahah_enabled']) {
$mode = $element['#mode'] == 'rows' ? t('columns') : t('rows');
$processed_element['matrix_more'] = array(
'#type' => 'button',
'#parents' => $element['#parents'],
'#value' => t('Add more @type', array(
'@type' => $mode,
)),
'#ahah' => array(
'path' => 'matrix/ahah',
'wrapper' => 'matrix-wrapper',
'method' => 'replace',
'effect' => 'fade',
),
);
}
// Each have its own type
foreach (array(
'#type',
) as $key) {
unset($element[$key]);
}
$element[] = $processed_element;
return $element;
}