You are here

function field_weight_display_overview_form_submit in Field display weights (per node) 7.2

Same name and namespace in other branches
  1. 7 field_weight.module \field_weight_display_overview_form_submit()
1 string reference to 'field_weight_display_overview_form_submit'
field_weight_display_overview_form in ./field_weight.module
Admin form displayed at node/%/display.

File

./field_weight.module, line 248
Field display weight module.

Code

function field_weight_display_overview_form_submit($form, &$form_state) {
  $node = $form_state['#node'];
  $values = $form_state['values']['field_weight'];

  // This is a good enough check. The fact we are here means enough other
  // stuff is true.
  $revision_mode = arg(2) === 'revisions' ? TRUE : FALSE;
  if ($revision_mode) {
    $form_state['redirect'] = "node/{$node->nid}/revisions/{$node->vid}/view";
  }
  else {
    $form_state['redirect'] = 'node/' . $node->nid;
  }
  $instances = _field_weight_field_info_instances('node', $node->type);
  $weights = array();
  foreach ($instances as $field => $instance) {
    $weights[$field] = array(
      'weight' => $values[$field]['weight'],
      'hidden' => $values[$field]['hidden'],
    );
  }

  // If all weights are 0 (unchanged) will return empty.
  $empty_check = array_filter($weights);
  if (!empty($empty_check)) {
    db_merge('field_weight')
      ->key(array(
      'vid' => $node->vid,
    ))
      ->fields(array(
      'nid' => $node->nid,
      'vid' => $node->vid,
      'type' => $node->type,
      'field_weights' => serialize($weights),
    ))
      ->execute();
  }
  elseif (empty($empty_check)) {

    // Remove entry if user manually sets all weights to 0.
    _field_weight_remove_weights($form, $form_state);
  }
}