You are here

function draggableviews_handler_fieldapi::set in DraggableViews 7.2

Save weight value.

Parameters

$form_state: Array of form state of the form. View object $form_state['values']['view'].

Overrides draggableviews_handler::set

File

handlers/draggableviews_handler_fieldapi.inc, line 86

Class

draggableviews_handler_fieldapi

Code

function set($form_state) {
  $fv = $form_state['values'];
  $view = $form_state['build_info']['args'][0];
  $view_name = $view->name;
  $view_display = $view->current_display;

  // View arguments.
  $arguments = $view->args;
  if (isset($view->exposed_raw_input)) {
    $arguments += $view->exposed_raw_input;
    ksort($arguments);

    // Redirect view to the same page with exposed filters set.
    $form_state['redirect'] = array(
      current_path(),
      array(
        'query' => $view->exposed_raw_input,
      ),
    );
  }
  $base_table = $view->field['draggableviews']->table;
  $entity_info_all = entity_get_info();
  $entity_type = '';
  foreach ($entity_info_all as $entity_name_key => $entity_info) {
    if ($entity_info['base table'] == $base_table) {
      $entity_type = $entity_name_key;
      break;
    }
  }
  $options_field = $view->field['draggableviews']->options['draggableviews']['draggableviews_handler_fieldapi']['field'];
  list($field_table, $field_column) = explode(':', $options_field);

  // Remove '_value' from column name to get field name.
  $field_name = drupal_substr($field_column, 0, drupal_strlen($field_column) - 6);

  // Give other modules a chance to alter saved arguments.
  drupal_alter('draggableviews_handler_fieldapi_arguments', $fv['draggableviews'], $view);

  // Reorder the items by weight.
  uasort($fv['draggableviews'], 'drupal_sort_weight');

  // Save the values of the field.
  foreach ($fv['draggableviews'] as $item) {
    if (isset($item['id']) && isset($item['weight'])) {
      $entity_wrapper = entity_metadata_wrapper($entity_type, $item['id']);
      $entity_wrapper->{$field_name} = $item['weight'];
      $entity_wrapper
        ->save();
    }
  }
}