You are here

function apachesolr_nan_nan_settings_form_submit in Apache Solr Not-A-Node 7

Same name and namespace in other branches
  1. 7.2 apachesolr_nan.admin.inc \apachesolr_nan_nan_settings_form_submit()

Submit form for admin page.

See also

apachesolr_nan_nan_settings_form().

apachesolr_nan_nan_settings_form_validate().

File

./apachesolr_nan.admin.inc, line 181
Administrative functions and form builders for Apache Solr NAN Search.

Code

function apachesolr_nan_nan_settings_form_submit($form, &$form_state) {
  $old_env = variable_get('apachesolr_nan_nan_env', apachesolr_default_environment());
  if ($form_state['values']['environment'] != $old_env) {

    // We switched environments so clean everything out of the other one.
    $ids = db_select('apachesolr_nan_index_paths', 'p')
      ->fields('p', array(
      'id',
    ))
      ->execute()
      ->fetchCol();
    if (!empty($ids)) {
      foreach ($ids as $id) {
        apachesolr_index_delete_entity_from_index($old_env, 'node', $id);
      }
    }
  }

  // Set the new environment.
  $env = $form_state['values']['environment'];
  variable_set('apachesolr_nan_nan_env', $env);
  if (!empty($form_state['items'])) {
    foreach ($form_state['values']['item'] as $key => $item) {
      unset($form_state['values']['item'][$key]['delete']);
    }
    $items = array_values($form_state['values']['item']);
  }
  else {
    $items = array();
  }

  // Set the items into the database;
  $paths = db_select('apachesolr_nan_index_paths', 'p')
    ->fields('p', array(
    'id',
    'path',
  ))
    ->execute()
    ->fetchAllKeyed();
  $new_paths = array();
  $saved = FALSE;
  foreach ($items as $item) {
    $new_paths[] = $item['path'];
    if ($key = array_search($item['path'], $paths)) {
      $record = $item + array(
        'id' => $key,
      );
      drupal_write_record('apachesolr_nan_index_paths', $record, array(
        'id',
      ));
      $saved = TRUE;
    }
    else {
      drupal_write_record('apachesolr_nan_index_paths', $item);
      $saved = TRUE;
    }
  }
  if ($saved) {
    drupal_set_message(t('Your paths have beed updated or added.'));
  }

  // Find the removed elements and delete them.
  $delete = array_diff($paths, $new_paths);
  $delete_keys = array_keys($delete);
  if (!empty($delete_keys)) {
    module_load_include('inc', 'apachesolr', 'apachesolr.index');
    foreach ($delete_keys as $key) {
      $id = (int) $key * -1;
      if (apachesolr_index_delete_entity_from_index($env, 'node', $id)) {
        watchdog('ApacheSolr NAN search', 'The apache solr non-node item %id was deleted', array(
          '%id' => $id,
        ));
      }
      else {
        drupal_set_message(t('There was a problem removing the page from the index.'), 'error');
        watchdog('ApacheSolr NAN search', 'The apache solr non-node item %id could not be deleted', array(
          '%id' => $id,
        ), WATCHDOG_ERROR);
      }
    }
  }
  if (!empty($delete_keys)) {
    $deleted = db_delete('apachesolr_nan_index_paths')
      ->condition('id', $delete_keys, 'IN')
      ->execute();
    if ($deleted > 0) {
      drupal_set_message(t('The following paths were deleted:'));
      foreach ($delete as $removed_path) {
        drupal_set_message($removed_path);
      }
    }
  }
}