Mercurial > hg > solrsearch
diff CopyOfsolrsearch_search.pages.OLD @ 0:a2b4f67e73dc default tip
initial
author | Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de> |
---|---|
date | Mon, 08 Jun 2015 10:21:54 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CopyOfsolrsearch_search.pages.OLD Mon Jun 08 10:21:54 2015 +0200 @@ -0,0 +1,128 @@ +<?php + +/** + * @file + * Provides the page callback for user defined search pages. + */ + +/** + * Returns search results on user defined search pages. + */ +function solrsearch_search_custom_page($page_id, $keys = '', $path_replacer = NULL) { + $search_page = solrsearch_search_page_load($page_id); + if (empty($search_page)) { + drupal_set_message(t('This search page cannot be found'), 'error'); + return drupal_not_found(); + } + // Add our replacement value in the conditions array + if (!empty($path_replacer)) { + $search_page['settings']['solrsearch_search_path_replacer'] = $path_replacer; + } + // Replace dynamic path with current path + $search_page['search_path'] = str_replace('%', $path_replacer, $search_page['search_path']); + // Retrieve the conditions that apply to this page + $conditions = solrsearch_search_conditions_default($search_page); + // Process our keys so they are clean + $keys = rawurldecode($keys); + // Retrieve the results of the search + $results = solrsearch_search_search_results($keys, $conditions, $search_page); + // Initiate our build array + $build = array(); + // Add a custom search form if required + if (!empty($search_page['settings']['solrsearch_search_search_box'])) { + // Adds the search form to the page. + $build['search_form'] = drupal_get_form('solrsearch_search_custom_page_search_form', $search_page, $keys); + } + // Build our page and allow modification. + $build_results = solrsearch_search_search_page_custom($results, $search_page, $build); + return $build_results; +} + +/** + * Search for placed on user defined search pages. + */ +function solrsearch_search_custom_page_search_form($form, &$form_state, $search_page, $keys = '') { + // Loads the core Search CSS file, use the core search module's classes. + drupal_add_css(drupal_get_path('module', 'search') . '/search.css'); + + $form = array(); + $form['#id'] = 'search-form'; + $form['#attributes']['class'][] = 'search-form'; + $form['#search_page'] = $search_page; + $form['basic'] = array( + '#type' => 'container', + '#attributes' => array('class' => array('container-inline')), + ); + $form['basic']['keys'] = array( + '#type' => 'textfield', + '#title' => t('Enter terms'), + '#default_value' => $keys, + '#size' => 20, + '#maxlength' => 255, + ); + $form['basic']['submit'] = array( + '#type' => 'submit', + '#value' => t('Search'), + ); + + $form['basic']['get'] = array( + '#type' => 'hidden', + '#default_value' => json_encode(array_diff_key($_GET, array('q' => 1, 'page' => 1, 'solrsort' => 1, 'retain-filters' => 1))), + ); + + $fq = NULL; + + if (solrsearch_has_searched($search_page['env_id'])) { + $query = solrsearch_current_query($search_page['env_id']); + // We use the presence of filter query params as a flag for the retain filters checkbox. + $fq = $query->getParam('fq'); + } + + if ($fq || isset($form_state['input']['retain-filters'])) { + $form['basic']['retain-filters'] = array( + '#type' => 'checkbox', + '#title' => t('Retain current filters'), + '#default_value' => (int) !empty($_GET['retain-filters']), + ); + } + + return $form; +} + +/** + * Processes solrsearch_search_custom_page_search_form submissions. + */ +function solrsearch_search_custom_page_search_form_submit(&$form, &$form_state) { + $search_page = $form['#search_page']; + $redirect = $search_page['search_path']; + + // Also encode slashes so we don't get akward situations when obtaining the + // search key. We can't use drupal_encode_path because for "aestetic" reasons + // they don't encode slashes... + $redirect_value = rawurlencode($form_state['values']['keys']); + + if (strlen($form_state['values']['keys'])) { + $redirect .= '/' . $redirect_value; + } + + $get = array(); + if (isset($form_state['values']['get'])) { + $get = json_decode($form_state['values']['get'], TRUE); + } + if (!empty($form_state['values']['retain-filters'])) { + // Add our saved values + $get['retain-filters'] = '1'; + } + else { + // Remove all filters + if (!empty($search_page['settings']['solrsearch_search_allow_user_input'])) { + unset($get['fq']); + } + if (module_exists('facetapi')) { + unset($get['f']); + } + } + + // Add the query values into the redirect. + $form_state['redirect'] = array($redirect, array('query' => $get)); +}