You are here

function matrix_field_widget_validate in Matrix field 8.2

Same name and namespace in other branches
  1. 7.2 matrix.module \matrix_field_widget_validate()

Form element validation handler. Respond to ajax requests and Reorder the data so that it is in the correct form for the fields api to save the data Each record gets its own delta. For multi-valued elements each value gets its own delta.

1 string reference to 'matrix_field_widget_validate'
matrix_field_widget_form in ./matrix.module
Implements hook_field_widget_form().

File

./matrix.module, line 638
Contains matrix.module.

Code

function matrix_field_widget_validate($element, &$form_state) {
  list($field_name, $value) = matrix_op($form_state);
  if (isset($form_state['values']['op'])) {
    $rows_count = $element['#matrix_rows'];
    $cols_count = $element['#matrix_cols'];
    $delta = 0;
    for ($row = 1; $row <= $rows_count; $row++) {
      for ($col = 1; $col <= $cols_count; $col++) {
        if (!isset($element['grid'][$row . '-' . $col]['#value'])) {

          //if value is not set
          $value = '';
        }
        elseif (is_array($element['grid'][$row . '-' . $col]['#value']) && empty($element['grid'][$row . '-' . $col]['#value'])) {

          //if array and value not set
          $value = '';
        }
        else {
          $value = $element['grid'][$row . '-' . $col]['#value'];

          //value set
        }
        if (is_array($value)) {
          foreach ($value as $v) {
            $items[$delta] = array(
              'row' => $row,
              'col' => $col,
              'value' => $v,
            );
            $delta++;
          }
        }
        else {
          $items[$delta] = array(
            'row' => $row,
            'col' => $col,
            'value' => $value,
          );
          $delta++;
        }
      }
    }
    $form_state
      ->setValueForElement($element, $items);
  }
  elseif ($field_name == $element['#field_name']) {

    // filter to this matrix (if there is more than 1 marix per form)
    if ($value == t('More columns')) {
      if (isset($form_state['storage'][$field_name]['cols'])) {
        $form_state['storage'][$field_name]['cols']++;
      }
      else {
        $form_state['storage'][$field_name]['cols'] = 1;
      }
    }
    if ($value == t('More rows')) {
      if (isset($form_state['storage'][$field_name]['rows'])) {
        $form_state['storage'][$field_name]['rows']++;
      }
      else {
        $form_state['storage'][$field_name]['rows'] = 1;
      }
    }
  }
}