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