annotate modules/search/search.pages.inc @ 1:c1f4ac30525a 6.0

Drupal 6.0
author Franck Deroche <webmaster@defr.org>
date Tue, 23 Dec 2008 14:28:28 +0100
parents
children
rev   line source
webmaster@1 1 <?php
webmaster@1 2 // $Id: search.pages.inc,v 1.4 2007/12/06 09:51:01 goba Exp $
webmaster@1 3
webmaster@1 4 /**
webmaster@1 5 * @file
webmaster@1 6 * User page callbacks for the search module.
webmaster@1 7 */
webmaster@1 8
webmaster@1 9 /**
webmaster@1 10 * Menu callback; presents the search form and/or search results.
webmaster@1 11 */
webmaster@1 12 function search_view($type = 'node') {
webmaster@1 13 // Search form submits with POST but redirects to GET. This way we can keep
webmaster@1 14 // the search query URL clean as a whistle:
webmaster@1 15 // search/type/keyword+keyword
webmaster@1 16 if (!isset($_POST['form_id'])) {
webmaster@1 17 if ($type == '') {
webmaster@1 18 // Note: search/node can not be a default tab because it would take on the
webmaster@1 19 // path of its parent (search). It would prevent remembering keywords when
webmaster@1 20 // switching tabs. This is why we drupal_goto to it from the parent instead.
webmaster@1 21 drupal_goto('search/node');
webmaster@1 22 }
webmaster@1 23
webmaster@1 24 $keys = search_get_keys();
webmaster@1 25 // Only perform search if there is non-whitespace search term:
webmaster@1 26 $results = '';
webmaster@1 27 if (trim($keys)) {
webmaster@1 28 // Log the search keys:
webmaster@1 29 watchdog('search', '%keys (@type).', array('%keys' => $keys, '@type' => module_invoke($type, 'search', 'name')), WATCHDOG_NOTICE, l(t('results'), 'search/'. $type .'/'. $keys));
webmaster@1 30
webmaster@1 31 // Collect the search results:
webmaster@1 32 $results = search_data($keys, $type);
webmaster@1 33
webmaster@1 34 if ($results) {
webmaster@1 35 $results = theme('box', t('Search results'), $results);
webmaster@1 36 }
webmaster@1 37 else {
webmaster@1 38 $results = theme('box', t('Your search yielded no results'), search_help('search#noresults', drupal_help_arg()));
webmaster@1 39 }
webmaster@1 40 }
webmaster@1 41
webmaster@1 42 // Construct the search form.
webmaster@1 43 $output = drupal_get_form('search_form', NULL, $keys, $type);
webmaster@1 44 $output .= $results;
webmaster@1 45
webmaster@1 46 return $output;
webmaster@1 47 }
webmaster@1 48
webmaster@1 49 return drupal_get_form('search_form', NULL, empty($keys) ? '' : $keys, $type);
webmaster@1 50 }
webmaster@1 51
webmaster@1 52 /**
webmaster@1 53 * Process variables for search-results.tpl.php.
webmaster@1 54 *
webmaster@1 55 * The $variables array contains the following arguments:
webmaster@1 56 * - $results
webmaster@1 57 * - $type
webmaster@1 58 *
webmaster@1 59 * @see search-results.tpl.php
webmaster@1 60 */
webmaster@1 61 function template_preprocess_search_results(&$variables) {
webmaster@1 62 $variables['search_results'] = '';
webmaster@1 63 foreach ($variables['results'] as $result) {
webmaster@1 64 $variables['search_results'] .= theme('search_result', $result, $variables['type']);
webmaster@1 65 }
webmaster@1 66 $variables['pager'] = theme('pager', NULL, 10, 0);
webmaster@1 67 // Provide alternate search results template.
webmaster@1 68 $variables['template_files'][] = 'search-results-'. $variables['type'];
webmaster@1 69 }
webmaster@1 70
webmaster@1 71 /**
webmaster@1 72 * Process variables for search-result.tpl.php.
webmaster@1 73 *
webmaster@1 74 * The $variables array contains the following arguments:
webmaster@1 75 * - $result
webmaster@1 76 * - $type
webmaster@1 77 *
webmaster@1 78 * @see search-result.tpl.php
webmaster@1 79 */
webmaster@1 80 function template_preprocess_search_result(&$variables) {
webmaster@1 81 $result = $variables['result'];
webmaster@1 82 $variables['url'] = check_url($result['link']);
webmaster@1 83 $variables['title'] = check_plain($result['title']);
webmaster@1 84
webmaster@1 85 $info = array();
webmaster@1 86 if (!empty($result['type'])) {
webmaster@1 87 $info['type'] = check_plain($result['type']);
webmaster@1 88 }
webmaster@1 89 if (!empty($result['user'])) {
webmaster@1 90 $info['user'] = $result['user'];
webmaster@1 91 }
webmaster@1 92 if (!empty($result['date'])) {
webmaster@1 93 $info['date'] = format_date($result['date'], 'small');
webmaster@1 94 }
webmaster@1 95 if (isset($result['extra']) && is_array($result['extra'])) {
webmaster@1 96 $info = array_merge($info, $result['extra']);
webmaster@1 97 }
webmaster@1 98 // Check for existence. User search does not include snippets.
webmaster@1 99 $variables['snippet'] = isset($result['snippet']) ? $result['snippet'] : '';
webmaster@1 100 // Provide separated and grouped meta information..
webmaster@1 101 $variables['info_split'] = $info;
webmaster@1 102 $variables['info'] = implode(' - ', $info);
webmaster@1 103 // Provide alternate search result template.
webmaster@1 104 $variables['template_files'][] = 'search-result-'. $variables['type'];
webmaster@1 105 }
webmaster@1 106
webmaster@1 107 /**
webmaster@1 108 * As the search form collates keys from other modules hooked in via
webmaster@1 109 * hook_form_alter, the validation takes place in _submit.
webmaster@1 110 * search_form_validate() is used solely to set the 'processed_keys' form
webmaster@1 111 * value for the basic search form.
webmaster@1 112 */
webmaster@1 113 function search_form_validate($form, &$form_state) {
webmaster@1 114 form_set_value($form['basic']['inline']['processed_keys'], trim($form_state['values']['keys']), $form_state);
webmaster@1 115 }
webmaster@1 116
webmaster@1 117 /**
webmaster@1 118 * Process a search form submission.
webmaster@1 119 */
webmaster@1 120 function search_form_submit($form, &$form_state) {
webmaster@1 121 $keys = $form_state['values']['processed_keys'];
webmaster@1 122 if ($keys == '') {
webmaster@1 123 form_set_error('keys', t('Please enter some keywords.'));
webmaster@1 124 // Fall through to the drupal_goto() call.
webmaster@1 125 }
webmaster@1 126
webmaster@1 127 $type = $form_state['values']['module'] ? $form_state['values']['module'] : 'node';
webmaster@1 128 $form_state['redirect'] = 'search/'. $type .'/'. $keys;
webmaster@1 129 return;
webmaster@1 130 }