ds_search.admin.inc in Display Suite 7.2
Administrative functions for Display Suite search.
File
modules/ds_search/includes/ds_search.admin.incView source
<?php
/**
* @file
* Administrative functions for Display Suite search.
*/
/**
* Menu callback: Display Suite search settings.
*/
function ds_search_settings($form, $form_state) {
$form['general'] = array(
'#type' => 'fieldset',
'#title' => t('General'),
);
$engine_options = array();
foreach (module_implements('search_info') as $module) {
if ($module != 'ds_search' && $module != 'user') {
$engine_options[$module] = drupal_ucfirst(str_replace('_', ' ', $module));
}
}
$form['general']['ds_search_type'] = array(
'#type' => 'select',
'#title' => t('Search engine'),
'#description' => t('Select the search engine as the query backend.'),
'#options' => $engine_options,
'#default_value' => variable_get('ds_search_type', 'node'),
);
$form['general']['ds_search_path'] = array(
'#type' => 'textfield',
'#title' => t('Search path'),
'#field_prefix' => 'search/',
'#description' => t('Make sure you don\'t override an existing search path.'),
'#default_value' => variable_get('ds_search_path', 'content'),
'#required' => TRUE,
);
$entity_view_modes = ds_entity_view_modes('node');
foreach ($entity_view_modes as $key => $view_mode) {
$view_mode_options[$key] = $view_mode['label'];
}
$form['general']['ds_search_view_mode'] = array(
'#type' => 'select',
'#title' => t('View mode'),
'#description' => 'Select another view mode in favor of the default search view mode.',
'#default_value' => variable_get('ds_search_view_mode', 'search_result'),
'#options' => $view_mode_options,
);
$form['general']['ds_search_file_render'] = array(
'#type' => 'checkbox',
'#title' => t('Use default search theming for files'),
'#description' => t('File/attachment results are best supported when the file entity module is enabled. Toggle the checkbox in case it is not available or you want to use default search theming.'),
'#default_value' => variable_get('ds_search_file_render', FALSE),
);
$form['general']['ds_search_variables'] = array(
'#type' => 'radios',
'#options' => array(
'none' => t('None'),
'search_totals' => t('Total results'),
'search_totals_plus_keywords' => t('Total results + keywords'),
'search_totals_from_to_end' => t('Totals + start to end'),
),
'#title' => t('Extra variables'),
'#description' => t('Choose an extra variable to display on the results screen.'),
'#default_value' => variable_get('ds_search_variables', 'none'),
);
$form['general']['ds_search_show_title'] = array(
'#type' => 'checkbox',
'#title' => t('Show title'),
'#description' => t('Display the "Search results" title.'),
'#default_value' => variable_get('ds_search_show_title'),
);
$form['general']['ds_search_language'] = array(
'#type' => 'checkbox',
'#title' => t('Language'),
'#description' => t('Search in the language the site is currently in. Enable this if you have at least 2 languages.'),
'#default_value' => variable_get('ds_search_language'),
);
$form['general']['ds_search_highlight'] = array(
'#type' => 'checkbox',
'#title' => t('Highlight search word'),
'#description' => t('Use jQuery to highlight the word in the results.'),
'#default_value' => variable_get('ds_search_highlight'),
);
$form['general']['ds_search_highlight_selector'] = array(
'#type' => 'textfield',
'#title' => t('HTML selector'),
'#description' => t('Enter the css selector, if not sure, leave this by default.'),
'#default_value' => variable_get('ds_search_highlight_selector', '.view-mode-search_result'),
'#states' => array(
'visible' => array(
'input[name="ds_search_highlight"]' => array(
'checked' => TRUE,
),
),
),
);
$form['general']['ds_search_group_by_type'] = array(
'#type' => 'checkbox',
'#title' => t('Group by type.'),
'#description' => t('Group the search results per page by type. Note that this only works if you only display nodes on the search result page.'),
'#default_value' => variable_get('ds_search_group_by_type'),
);
// Group by type order.
$form['ds_search_group_by_type_settings'] = array(
'#type' => 'fieldset',
'#title' => t('Group by type settings'),
'#description' => t('Set the order of the node types which can be grouped. Node types which are not enabled will be showed into a "Other group". Note that this does not work with Apache Solr multisite support.'),
'#theme' => 'ds_search_group_by_type_settings',
'#states' => array(
'visible' => array(
'input[name="ds_search_group_by_type"]' => array(
'checked' => TRUE,
),
),
),
);
$node_types = node_type_get_names();
$ds_search_group_by_type_settings = variable_get('ds_search_group_by_type_settings');
$wrapper_options = array(
'fieldset' => t('Fieldset'),
'markup' => t('Div with H3 headline'),
);
foreach ($node_types as $name => $label) {
$form['ds_search_group_by_type_settings'][$name]['name'] = array(
'#markup' => check_plain($label),
);
$form['ds_search_group_by_type_settings'][$name]['status'] = array(
'#type' => 'checkbox',
'#title' => t('Weight for @title', array(
'@title' => $label,
)),
'#title_display' => 'invisible',
'#default_value' => isset($ds_search_group_by_type_settings[$name]) ? $ds_search_group_by_type_settings[$name]['status'] : TRUE,
'#parents' => array(
'ds_search_group_by_type_settings',
$name,
'status',
),
);
$form['ds_search_group_by_type_settings'][$name]['label'] = array(
'#type' => 'textfield',
'#size' => 30,
'#title' => t('Group label for @title', array(
'@title' => $label,
)),
'#title_display' => 'invisible',
'#description' => t('Group label. The label will be translatable. Leave empty for no label.'),
'#default_value' => isset($ds_search_group_by_type_settings[$name]) ? $ds_search_group_by_type_settings[$name]['label'] : t('Results for @type', array(
'@type' => drupal_strtolower($node_types[$name]),
)),
'#parents' => array(
'ds_search_group_by_type_settings',
$name,
'label',
),
);
$form['ds_search_group_by_type_settings'][$name]['wrapper'] = array(
'#type' => 'select',
'#options' => $wrapper_options,
'#title' => t('Wrapper for @title', array(
'@title' => $label,
)),
'#title_display' => 'invisible',
'#default_value' => isset($ds_search_group_by_type_settings[$name]) ? $ds_search_group_by_type_settings[$name]['wrapper'] : 'fieldset',
'#parents' => array(
'ds_search_group_by_type_settings',
$name,
'wrapper',
),
);
$weight = isset($ds_search_group_by_type_settings[$name]) ? $ds_search_group_by_type_settings[$name]['weight'] : 0;
$form['ds_search_group_by_type_settings'][$name]['weight'] = array(
'#type' => 'weight',
'#title' => t('Weight for @title', array(
'@title' => $label,
)),
'#title_display' => 'invisible',
'#delta' => 30,
'#default_value' => $weight,
'#parents' => array(
'ds_search_group_by_type_settings',
$name,
'weight',
),
);
$form['ds_search_group_by_type_settings'][$name]['#weight'] = $weight;
}
$form['ds_search_group_by_type_settings']['ds_search_group_by_type_other'] = array(
'#type' => 'textfield',
'#title' => t('Other label'),
'#description' => t('The label of the other group. Leave empty for no label.'),
'#default_value' => variable_get('ds_search_group_by_type_other', 'Other'),
'#states' => array(
'visible' => array(
'input[name="ds_search_group_by_type"]' => array(
'checked' => TRUE,
),
),
),
);
$form['ds_search_group_by_type_settings']['ds_search_group_by_type_other_wrapper'] = array(
'#type' => 'select',
'#options' => $wrapper_options,
'#title' => t('Other wrapper'),
'#description' => t('The wrapper of the other group.'),
'#default_value' => variable_get('ds_search_group_by_type_other_wrapper', 'fieldset'),
'#states' => array(
'visible' => array(
'input[name="ds_search_group_by_type"]' => array(
'checked' => TRUE,
),
),
),
);
$form['node'] = array(
'#type' => 'fieldset',
'#title' => t('Drupal core'),
'#states' => array(
'visible' => array(
'select[name="ds_search_type"]' => array(
'value' => 'node',
),
),
),
);
$form['node']['ds_search_node_form_alter'] = array(
'#type' => 'checkbox',
'#title' => t('Advanced'),
'#description' => t('Enable the advanced search form.'),
'#default_value' => variable_get('ds_search_node_form_alter'),
);
$form['node']['ds_search_node_limit'] = array(
'#type' => 'textfield',
'#default_value' => variable_get('ds_search_node_limit', 10),
'#title' => t('Node search limit'),
'#description' => t('The number of items to display per page. Enter 0 for no limit.'),
);
if (module_exists('apachesolr')) {
$form['apachesolr_search'] = array(
'#type' => 'fieldset',
'#title' => t('Apache Solr'),
'#states' => array(
'visible' => array(
'select[name="ds_search_type"]' => array(
'value' => 'apachesolr_search',
),
),
),
);
$form['apachesolr_search']['ds_search_apachesolr_hide_current_filters'] = array(
'#type' => 'checkbox',
'#title' => t('Hide Retain filters'),
'#description' => t('Hide the "Retain current filters" checkbox on search results.'),
'#default_value' => variable_get('ds_search_apachesolr_hide_current_filters'),
);
$form['apachesolr_search']['ds_search_apachesolr_current_filters_default'] = array(
'#type' => 'checkbox',
'#title' => t('Remember filters'),
'#description' => t('Remember the filters when you hide the "Retain current filters" checkbox.'),
'#default_value' => variable_get('ds_search_apachesolr_current_filters_default'),
'#states' => array(
'visible' => array(
'input[name="ds_search_apachesolr_hide_current_filters"]' => array(
'checked' => TRUE,
),
),
),
);
$form['apachesolr_search']['ds_search_apachesolr_multisite'] = array(
'#type' => 'checkbox',
'#title' => t('Multisite support'),
'#description' => t('Enable this in case multiple sites share one index. Note that sometimes you need to make sure that your formatters are creating absolute paths for links or images. Implementing hook_url_outbound_alter() is a good option in which you can set $options[\'absolute\'] to TRUE.'),
'#default_value' => variable_get('ds_search_apachesolr_multisite'),
);
$form['apachesolr_search']['ds_search_apachesolr_multisite_boost'] = array(
'#type' => 'checkbox',
'#title' => t('Sort by site'),
'#description' => t('Enable this to rank the results of the current site first, than all the rest.'),
'#default_value' => variable_get('ds_search_apachesolr_multisite_boost'),
'#states' => array(
'visible' => array(
'input[name="ds_search_apachesolr_multisite"]' => array(
'checked' => TRUE,
),
),
),
);
$form['apachesolr_search']['ds_search_apachesolr_multisite_group'] = array(
'#type' => 'checkbox',
'#title' => t('Group results by site'),
'#default_value' => variable_get('ds_search_apachesolr_multisite_group'),
'#states' => array(
'visible' => array(
'input[name="ds_search_apachesolr_multisite"]' => array(
'checked' => TRUE,
),
),
),
);
$form['apachesolr_search']['ds_search_apachesolr_multisite_group_config'] = array(
'#type' => 'textarea',
'#title' => t('Group by site configuration'),
'#default_value' => variable_get('ds_search_apachesolr_multisite_group_config'),
'#description' => t('Enter sites line by line with following configuration: site-hash|label|wrapper. The <em>site-hash</em> is per site which you can get from Solr. The <em>label</em> is translatable per site. Use !total_per_site in this label for number of results per site. Depending on the number, you will either get "1 result" or "x results" which are translatable. The <em>wrapper</em> can either be "fieldset" or "div".'),
'#states' => array(
'visible' => array(
'input[name="ds_search_apachesolr_multisite_group"]' => array(
'checked' => TRUE,
),
'input[name="ds_search_apachesolr_multisite"]' => array(
'checked' => TRUE,
),
),
),
);
}
$active = variable_get('search_active_modules', array(
'node',
'user',
));
if (isset($active['user']) && $active['user'] !== 0) {
$form['user'] = array(
'#type' => 'fieldset',
'#title' => t('User search'),
);
$form['user']['ds_user_override_search_page'] = array(
'#type' => 'checkbox',
'#title' => t('Override user search page'),
'#description' => t('Toggle this checkbox if you want Display Suite to render user search results.'),
'#default_value' => variable_get('ds_user_override_search_page'),
);
}
$form = system_settings_form($form);
$form['#submit'][] = 'ds_search_settings_submit';
return $form;
}
/**
* Submit callback: Search settings submit.
*/
function ds_search_settings_submit($form, $form_state) {
// Rebuild the menu.
variable_set('menu_rebuild_needed', TRUE);
}
/**
* Returns HTML for the Group by type settings.
*/
function theme_ds_search_group_by_type_settings($variables) {
$element = $variables['element'];
// Type order (tabledrag).
$rows = array();
foreach (element_children($element, TRUE) as $name) {
if (!isset($element[$name]['name'])) {
continue;
}
$element[$name]['weight']['#attributes']['class'][] = 'type-order-weight';
$rows[] = array(
'data' => array(
drupal_render($element[$name]['name']),
drupal_render($element[$name]['status']),
drupal_render($element[$name]['label']),
drupal_render($element[$name]['wrapper']),
drupal_render($element[$name]['weight']),
),
'class' => array(
'draggable',
),
);
}
$header = array(
t('Type'),
t('Status'),
t('Group label'),
t('Wrapper'),
t('Weight'),
);
$output = drupal_render_children($element);
$output .= theme('table', array(
'header' => $header,
'rows' => $rows,
'attributes' => array(
'id' => 'group-by-order',
),
));
drupal_add_tabledrag('group-by-order', 'order', 'sibling', 'type-order-weight', NULL, NULL, TRUE);
return $output;
}
Functions
Name | Description |
---|---|
ds_search_settings | Menu callback: Display Suite search settings. |
ds_search_settings_submit | Submit callback: Search settings submit. |
theme_ds_search_group_by_type_settings | Returns HTML for the Group by type settings. |