| 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 } |