You are here

function matrix_widget in Matrix field 5

Same name and namespace in other branches
  1. 6.2 matrix.module \matrix_widget()
  2. 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;
  }
}