You are here

function views_bulk_operations_modify_action_validate in Views Bulk Operations (VBO) 7.3

Action form validate function.

Checks that the user selected at least one value to modify, validates properties and calls Field API to validate fields for each bundle.

File

actions/modify.action.inc, line 353
VBO action to modify entity values (properties and fields).

Code

function views_bulk_operations_modify_action_validate($form, &$form_state) {

  // The form structure for "Show" checkboxes is a bit bumpy.
  $search = array(
    'properties',
  );
  foreach ($form_state['entities'] as $bundle => $entity) {
    $search[] = 'bundle_' . $bundle;
  }
  $has_selected = FALSE;
  foreach ($search as $group) {

    // Store names of selected and appended entity values in a nicer format.
    $form_state['selected'][$group] = array();
    $form_state['append'][$group] = array();

    // This group has no values, move on.
    if (!isset($form_state['values'][$group])) {
      continue;
    }
    foreach ($form_state['values'][$group]['show_value'] as $key => $value) {
      if ($value) {
        $has_selected = TRUE;
        $form_state['selected'][$group][] = $key;
      }
      if (!empty($form_state['values'][$group]['_append::' . $key])) {
        $form_state['append'][$group][] = $key;
        unset($form_state['values'][$group]['_append::' . $key]);
      }
    }
    unset($form_state['values'][$group]['show_value']);
  }
  if (!$has_selected) {
    form_set_error('', t('You must select at least one value to modify.'));
    return;
  }

  // Use the wrapper to validate property values.
  if (!empty($form_state['selected']['properties'])) {

    // The entity used is irrelevant, and we can't rely on
    // $form_state['entities'] being non-empty, so a new one is created.
    $info = entity_get_info($form_state['entity_type']);
    $bundle_key = $info['entity keys']['bundle'];
    $default_values = array();

    // If the bundle key exists, it must always be set on an entity.
    if (!empty($bundle_key)) {
      $bundle_names = array_keys($info['bundles']);
      $bundle_name = reset($bundle_names);
      $default_values[$bundle_key] = $bundle_name;
    }
    $entity = entity_create($form_state['entity_type'], $default_values);
    $wrapper = entity_metadata_wrapper($form_state['entity_type'], $entity);
    $properties = _views_bulk_operations_modify_action_get_properties($form_state['entity_type']);
    foreach ($form_state['selected']['properties'] as $key) {
      $value = $form_state['values']['properties'][$key];
      if (!$wrapper->{$key}
        ->validate($value)) {
        $label = $properties[$key]['label'];
        form_set_error('properties][' . $key, t('%label contains an invalid value.', array(
          '%label' => $label,
        )));
      }
    }
  }
  foreach ($form_state['entities'] as $bundle_name => $entity) {
    field_attach_form_validate($form_state['entity_type'], $entity, $form['bundle_' . $bundle_name], $form_state);
  }
}