You are here

function matrix_process in Matrix field 6

Process the matrix type element before displaying the field.

Build the form element. When creating a form using FAPI #process, note that $element['#value'] is already set.

The $fields array is in $form['#field_info'][$element['#field_name']].

1 string reference to 'matrix_process'
matrix_elements in ./matrix.module
Implementation of hook_elements().

File

./matrix.module, line 210
Defines simple matrix field types.

Code

function matrix_process($element, $edit, $form_state, $form) {
  $field = $form['#field_info'][$element['#field_name']];
  if ($field['rows'] && $field['cols']) {
    $rows = trim($field['rows']);
    $cols = trim($field['cols']);
    $rows = explode("\n", $rows);
    $cols = explode("\n", $cols);
  }
  $processed_element = array(
    '#tree' => TRUE,
    '#weight' => $field['widget']['weight'],
    '#theme' => 'matrix_table_form',
    '#prefix' => '<div class="form-item matrix_field">',
    '#suffix' => '</div>',
    '#parents' => $element['#parents'],
    '#title' => $element['#title'],
    '#description' => $element['#description'],
    '#required' => $element['#required'],
    '#field_name' => $element['#field_name'],
    '#type_name' => $element['#type_name'],
    '#delta' => $element['#delta'],
    '#columns' => $element['#columns'],
  );
  if ($cols) {
    $header = array_merge(array(
      '',
    ), $cols);
  }
  $first_col = $rows;
  $rows = (array) $rows;
  $i = 0;
  foreach ($rows as $row) {
    if ($row) {
      $j = 0;
      foreach ($cols as $col) {
        if ($col) {
          $processed_element[$i][$j] = array(
            '#type' => 'textfield',
            '#size' => $field['size'],
            '#default_value' => isset($edit[$i][$j]) ? $edit[$i][$j] : $element['#default_value'][$i][$j],
            '#attributes' => array(
              'class' => "matrix-column-{$i} matrix-row-{$j} matrix-cell-{$i}-{$j}",
            ),
          );
          $j++;
        }
      }
      $i++;
    }
  }
  $processed_element['header'] = array(
    '#value' => $header,
  );
  $processed_element['first_col'] = array(
    '#value' => $first_col,
  );
  return $processed_element;
}