You are here

function apachesolr_environment_edit_form in Apache Solr Search 6.3

Same name and namespace in other branches
  1. 8 apachesolr.admin.inc \apachesolr_environment_edit_form()
  2. 7 apachesolr.admin.inc \apachesolr_environment_edit_form()

Form builder for adding/editing a Solr environment used as a menu callback.

2 string references to 'apachesolr_environment_edit_form'
apachesolr_environment_settings_page in ./apachesolr.admin.inc
apachesolr_menu in ./apachesolr.module
Implements hook_menu().

File

./apachesolr.admin.inc, line 102
Administrative pages for the Apache Solr framework.

Code

function apachesolr_environment_edit_form(&$form_state, $environment = NULL) {
  if (empty($environment)) {
    $environment = array();
  }
  $environment += array(
    'env_id' => '',
    'name' => '',
    'url' => '',
    'service_class' => '',
    'conf' => array(
      'service_class_conf' => '',
    ),
  );
  $form['url'] = array(
    '#type' => 'textfield',
    '#title' => t('Solr server URL'),
    '#default_value' => $environment['url'],
    '#description' => t('Example: http://localhost:8983/solr'),
    '#required' => TRUE,
  );
  $is_default = $environment['env_id'] == apachesolr_default_environment();
  $form['make_default'] = array(
    '#type' => 'checkbox',
    '#title' => t('Make this Solr search environment the default'),
    '#default_value' => $is_default,
    '#disabled' => $is_default,
  );
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Description'),
    '#default_value' => $environment['name'],
    '#required' => TRUE,
  );
  if (empty($environment['env_id'])) {
    $key = '#default_value';
    $disabled = FALSE;
  }
  else {
    $key = '#value';
    $disabled = TRUE;
  }
  $form['env_id'] = array(
    '#type' => 'textfield',
    '#title' => t('Environment id'),
    '#description' => '',
    '#required' => TRUE,
    '#size' => 30,
    '#maxlength' => 32,
    '#disabled' => $disabled,
    // Cannot change it once set.
    $key => $environment['env_id'],
    '#description' => t('A unique machine-readable identifier for the search page configuration. It must only contain lowercase letters, numbers, and underscores.'),
  );
  $form['service_class'] = array(
    '#type' => 'value',
    '#value' => $environment['service_class'],
  );

  // D6 needs more info to load the class
  $service_class_info = isset($environment['conf']['service_class_info']) ? $environment['conf']['service_class_info'] : NULL;
  $form['service_class_info'] = array(
    '#type' => 'value',
    '#value' => $service_class_info,
  );
  $form['conf'] = array(
    '#tree' => TRUE,
  );
  $form['conf']['apachesolr_read_only'] = array(
    '#type' => 'radios',
    '#title' => t('Index write access'),
    '#default_value' => isset($environment['conf']['apachesolr_read_only']) ? $environment['conf']['apachesolr_read_only'] : APACHESOLR_READ_WRITE,
    '#options' => array(
      APACHESOLR_READ_WRITE => t('Read and write (normal)'),
      APACHESOLR_READ_ONLY => t('Read only'),
    ),
    '#description' => t('<em>Read only</em> stops this site from sending updates to this search environment. Useful for development sites.'),
  );
  $form['actions']['save'] = array(
    '#type' => 'submit',
    '#redirect' => 'admin/settings/apachesolr/settings',
    '#validate' => array(
      'apachesolr_environment_edit_validate',
    ),
    '#submit' => array(
      'apachesolr_environment_edit_submit',
    ),
    '#value' => t('Save'),
  );
  $form['actions']['save_edit'] = array(
    '#type' => 'submit',
    '#validate' => array(
      'apachesolr_environment_edit_validate',
    ),
    '#submit' => array(
      'apachesolr_environment_edit_submit',
    ),
    '#value' => t('Save and edit'),
  );
  $form['actions']['test'] = array(
    '#type' => 'submit',
    '#validate' => array(
      'apachesolr_environment_edit_validate',
    ),
    '#submit' => array(
      'apachesolr_environment_edit_test_submit',
    ),
    '#value' => t('Test connection'),
  );
  if (!empty($environment['env_id']) && !$is_default) {
    $form['actions']['delete'] = array(
      '#type' => 'submit',
      '#submit' => array(
        'apachesolr_environment_edit_delete_submit',
      ),
      '#value' => t('Delete'),
    );
  }
  $referer_uri = referer_uri();
  $request_uri = request_uri();

  // In case the API did not remove the query params, we remove it forcefully
  $request_uri = strtok($request_uri, '?');

  // Remove leading slash
  $request_uri = ltrim($request_uri, '/');
  $request_uri = url($request_uri, array(
    'absolute' => 'true',
  ));

  // Redirect cancel link to the search pages if the referer is the same page or
  // when there is no referer.
  if ($referer_uri == $request_uri || empty($referer_uri)) {
    $cancel_link = url('admin/settings/apachesolr/settings', array(
      'absolute' => TRUE,
    ));
  }
  else {
    $cancel_link = $referer_uri;
  }
  $form['actions']['cancel'] = array(
    '#type' => 'markup',
    '#value' => l(t('Cancel'), $cancel_link),
  );
  return $form;
}