You are here

function finder_views_form_finder_admin_edit_alter in Finder 7

Same name and namespace in other branches
  1. 6 modules/finder_views/finder_views.module \finder_views_form_finder_admin_edit_alter()

Implements hook_form_FORM_ID_alter().

See also

hook_form_FORM_ID_alter()

File

modules/finder_views/finder_views.module, line 57
The finder views module.

Code

function finder_views_form_finder_admin_edit_alter(&$form, $form_state) {
  $finder =& $form_state['storage']['finder'];
  if ($finder->base == 'views') {
    $form['settings']['advanced']['pager']['#description'] .= ' ' . t('For the results pager to work properly, ensure your Views display has "Items per page" set to "unlimited".');
    $form['settings']['views'] = array(
      '#type' => 'fieldset',
      '#title' => t('Views'),
      '#weight' => 80,
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
    );
    if ($views = finder_views_get_views()) {
      $form['settings']['views']['view'] = array(
        '#type' => 'select',
        '#title' => t('Find items from this view'),
        '#default_value' => $finder->settings['views']['view'] ? $finder->settings['views']['view'] : '',
        '#options' => $views,
        '#required' => TRUE,
        '#weight' => 10,
      );
      $form['settings']['views']['displays'] = array(
        '#type' => 'fieldset',
        '#title' => t('Views displays'),
        '#weight' => 20,
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,
        '#description' => t('Leaving these set to "Defaults" is perfectly suitable in most cases.'),
      );
      $displays = finder_views_get_displays($finder->settings['views']['view']);
      $form['settings']['views']['displays']['query'] = array(
        '#type' => 'select',
        '#title' => t('Query display'),
        '#default_value' => $finder->settings['views']['displays']['query'] ? $finder->settings['views']['displays']['query'] : 'default',
        '#options' => $displays,
        '#required' => TRUE,
        '#weight' => 10,
        '#description' => t('Allows you to use a specific display to calculate results, you can use this to add sort/filter settings via Views that do not affect the element choices.'),
      );
      $form['settings']['views']['displays']['output'] = array(
        '#type' => 'select',
        '#title' => t('Output display'),
        '#default_value' => $finder->settings['views']['displays']['output'] ? $finder->settings['views']['displays']['output'] : 'default',
        '#options' => $displays,
        '#required' => TRUE,
        '#weight' => 20,
        '#description' => t('Allows you to use a specific display to output the results page, you can use this to change output settings via Views that do not affect the element choices.'),
      );
      if (count($displays) === 1) {
        $form['settings']['views']['displays']['query']['#disabled'] = TRUE;
        $form['settings']['views']['displays']['output']['#disabled'] = TRUE;
      }
      $form['settings']['views']['results'] = array(
        '#type' => 'radios',
        '#title' => t('Results page'),
        '#default_value' => $finder->settings['views']['results'] ? $finder->settings['views']['results'] : 0,
        '#weight' => 40,
        '#description' => t('"Output display" is configured under the "Views displays" fieldset above.  Custom results page can be themed using theme_finder_views_results().'),
        '#options' => array(
          0 => t('Build results page from "Output display".'),
          1 => t('Build custom results page.'),
        ),
      );
      $relationships = finder_view_get_relationships($finder);
      if (!empty($relationships)) {
        $form['settings']['views']['relationships'] = array(
          '#type' => 'fieldset',
          '#title' => t('Relationships'),
          '#weight' => 70,
          '#collapsible' => TRUE,
          '#collapsed' => TRUE,
          '#description' => t('If any fields in your finder rely on relationships, here is where you inform finder of this.'),
        );
        $fields = finder_views_finder_fields($finder, 0);
        foreach ($relationships as $rel_key => $rel_label) {
          $form['settings']['views']['relationships'][$rel_key] = array(
            '#type' => 'select',
            '#title' => $rel_label,
            '#default_value' => isset($finder->settings['views']['relationships'][$rel_key]) ? $finder->settings['views']['relationships'][$rel_key] : array(),
            '#options' => $fields,
            '#multiple' => TRUE,
            '#size' => min(count($fields) + 1, 20),
            '#description' => t('Select the fields that use the relationship %rel.  You do not need to select fields that are not used in this finder.', array(
              '%rel' => $rel_label,
            )),
          );
        }
      }
      $form['settings']['views']['views_args'] = array(
        '#type' => 'fieldset',
        '#title' => t('Views arguments'),
        '#weight' => 80,
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,
        '#description' => t('Restrict results using arguments.  These arguments will not apply to element choices - use with caution.'),
      );
      $form['settings']['views']['views_args']['args'] = finder_php_setting(array(
        '#type' => 'textarea',
        '#default_value' => isset($finder->settings['views']['views_args']['args']) ? $finder->settings['views']['views_args']['args'] : '',
        '#title' => t('Arguments'),
        '#rows' => 1,
        '#description' => t('
            You can provide a list of arguments seperated by a delimiter.
            e.g: <em>term_1/term_2</em>.<br />Or insert PHP code to generate the
            list of arguments. e.g: <em>term_1/&lt;?php print "term_x/term_y";
            ?&gt;/term_2</em>.'),
      ), array(
        'finder' => t('Object containing data about this finder.'),
      ));
      $form['settings']['views']['views_args']['delimiter'] = array(
        '#type' => 'textfield',
        '#default_value' => isset($finder->settings['views']['views_args']['delimiter']) ? $finder->settings['views']['views_args']['delimiter'] : '/',
        '#title' => t('Delimiter'),
        '#size' => 5,
        '#maxlength' => 10,
        '#description' => t('This is the character used to split multiple arguments above.'),
        '#required' => TRUE,
      );
      $form['settings']['views']['empty_text'] = array(
        '#type' => 'checkbox',
        '#title' => t('Show view display when there are no results'),
        '#default_value' => $finder->settings['views']['empty_text'],
        '#weight' => 50,
        '#description' => t("Use the view display's empty text instead of finder's no results output."),
      );
    }
    else {
      $form['settings']['views']['no_view'] = array(
        '#value' => t("<em>There are currently no views to choose from.</em>"),
        '#weight' => 10,
      );
    }
  }
}