Revision 1094
Added by Matthias over 16 years ago
| search.php | ||
|---|---|---|
| 117 | 117 |
} |
| 118 | 118 |
} |
| 119 | 119 |
|
| 120 |
// Get search language |
|
| 120 |
// Get search language, used for special umlaut handling (DE: ß=ss, ...)
|
|
| 121 | 121 |
$search_lang = ''; |
| 122 | 122 |
if(isset($_REQUEST['search_lang'])) {
|
| 123 | 123 |
$search_lang = $_REQUEST['search_lang']; |
| ... | ... | |
| 143 | 143 |
$search_path_SQL = ''; |
| 144 | 144 |
$search_path = ''; |
| 145 | 145 |
if(isset($_REQUEST['search_path'])) {
|
| 146 |
$search_path = addslashes(htmlspecialchars(strip_tags($wb->strip_slashes($_REQUEST['search_path'])))); |
|
| 146 |
$search_path = addslashes(htmlspecialchars(strip_tags($wb->strip_slashes($_REQUEST['search_path'])), ENT_QUOTES));
|
|
| 147 | 147 |
if(!preg_match('~^%?[-a-zA-Z0-9_,/ ]+$~', $search_path))
|
| 148 | 148 |
$search_path = ''; |
| 149 | 149 |
if($search_path != '') {
|
| ... | ... | |
| 168 | 168 |
} |
| 169 | 169 |
} |
| 170 | 170 |
|
| 171 |
// use page_languages? |
|
| 172 |
if(PAGE_LANGUAGES) {
|
|
| 173 |
$table = TABLE_PREFIX."pages"; |
|
| 174 |
$search_language_SQL_t = "AND $table.`language` = '".LANGUAGE."'"; |
|
| 175 |
$search_language_SQL = "AND `language` = '".LANGUAGE."'"; |
|
| 176 |
} else {
|
|
| 177 |
$search_language_SQL_t = ''; |
|
| 178 |
$search_language_SQL = ''; |
|
| 179 |
} |
|
| 180 |
|
|
| 171 | 181 |
// Get the search type |
| 172 | 182 |
$match = ''; |
| 173 | 183 |
if(isset($_REQUEST['match'])) {
|
| ... | ... | |
| 236 | 246 |
} |
| 237 | 247 |
} |
| 238 | 248 |
// make an extra copy of search_normal_array for use in regex |
| 239 |
require_once(WB_PATH.'/search/search_convert.php');
|
|
| 249 |
require(WB_PATH.'/search/search_convert.php'); |
|
| 240 | 250 |
$search_words = array(); |
| 241 | 251 |
foreach($search_normal_array AS $str) {
|
| 242 | 252 |
$str = str_replace($string_ul_umlaut, $string_ul_regex, $str); |
| ... | ... | |
| 344 | 354 |
// now call module-based $search_funcs[] |
| 345 | 355 |
$seen_pages = array(); // seen pages per module. |
| 346 | 356 |
$pages_listed = array(); // seen pages. |
| 347 |
foreach($sorted_modules AS $module_name) {
|
|
| 348 |
$start_time = time(); // get start-time to check time-limit; not very accurate, but ok |
|
| 349 |
$seen_pages[$module_name] = array(); |
|
| 350 |
if(!isset($search_funcs[$module_name])) {
|
|
| 351 |
continue; // there is no search_func for this module |
|
| 352 |
} |
|
| 353 |
// get each section for $module_name |
|
| 354 |
$table_s = TABLE_PREFIX."sections"; |
|
| 355 |
$table_p = TABLE_PREFIX."pages"; |
|
| 356 |
$sections_query = $database->query("
|
|
| 357 |
SELECT s.section_id, s.page_id, s.module, s.publ_start, s.publ_end, |
|
| 358 |
p.page_title, p.menu_title, p.link, p.description, p.keywords, p.modified_when, p.modified_by, |
|
| 359 |
p.visibility, p.viewing_groups, p.viewing_users |
|
| 360 |
FROM $table_s AS s INNER JOIN $table_p AS p ON s.page_id = p.page_id |
|
| 361 |
WHERE s.module = '$module_name' AND p.visibility NOT IN ('none','deleted') AND p.searching = '1' $search_path_SQL
|
|
| 362 |
ORDER BY s.page_id, s.position ASC |
|
| 363 |
"); |
|
| 364 |
if($sections_query->numRows() > 0) {
|
|
| 365 |
while($res = $sections_query->fetchRow()) {
|
|
| 366 |
// check if time-limit is exceeded for this module |
|
| 367 |
if($search_time_limit > 0 && (time()-$start_time > $search_time_limit)) {
|
|
| 368 |
break; |
|
| 369 |
} |
|
| 370 |
// Only show this section if it is not "out of publication-date" |
|
| 371 |
$now = time(); |
|
| 372 |
if( !( $now<$res['publ_end'] && ($now>$res['publ_start'] || $res['publ_start']==0) || |
|
| 373 |
$now>$res['publ_start'] && $res['publ_end']==0) ) {
|
|
| 374 |
continue; |
|
| 375 |
} |
|
| 376 |
$search_func_vars = array( |
|
| 377 |
'database' => $database, |
|
| 378 |
'page_id' => $res['page_id'], |
|
| 379 |
'section_id' => $res['section_id'], |
|
| 380 |
'page_title' => $res['page_title'], |
|
| 381 |
'page_menu_title' => $res['menu_title'], |
|
| 382 |
'page_description' => ($cfg_show_description?$res['description']:""), |
|
| 383 |
'page_keywords' => $res['keywords'], |
|
| 384 |
'page_link' => $res['link'], |
|
| 385 |
'page_modified_when' => $res['modified_when'], |
|
| 386 |
'page_modified_by' => $res['modified_by'], |
|
| 387 |
'users' => $users, |
|
| 388 |
'search_words' => $search_words, // needed for preg_match |
|
| 389 |
'search_match' => $match, |
|
| 390 |
'search_url_array' => $search_url_array, // needed for url-string only |
|
| 391 |
'results_loop_string' => $fetch_results_loop['value'], |
|
| 392 |
'default_max_excerpt' => $search_max_excerpt, |
|
| 393 |
'enable_flush' => $cfg_enable_flush |
|
| 394 |
); |
|
| 395 |
// Only show this page if we are allowed to see it |
|
| 396 |
if($admin->page_is_visible($res) == false) {
|
|
| 397 |
if($res['visibility'] == 'registered') { // don't show excerpt
|
|
| 398 |
$search_func_vars['default_max_excerpt'] = 0; |
|
| 399 |
$search_func_vars['page_description'] = $TEXT['REGISTERED']; |
|
| 400 |
} else { // private
|
|
| 357 |
if($search_max_excerpt!=0) { // skip this search if $search_max_excerpt==0
|
|
| 358 |
foreach($sorted_modules AS $module_name) {
|
|
| 359 |
$start_time = time(); // get start-time to check time-limit; not very accurate, but ok |
|
| 360 |
$seen_pages[$module_name] = array(); |
|
| 361 |
if(!isset($search_funcs[$module_name])) {
|
|
| 362 |
continue; // there is no search_func for this module |
|
| 363 |
} |
|
| 364 |
// get each section for $module_name |
|
| 365 |
$table_s = TABLE_PREFIX."sections"; |
|
| 366 |
$table_p = TABLE_PREFIX."pages"; |
|
| 367 |
$sections_query = $database->query("
|
|
| 368 |
SELECT s.section_id, s.page_id, s.module, s.publ_start, s.publ_end, |
|
| 369 |
p.page_title, p.menu_title, p.link, p.description, p.keywords, p.modified_when, p.modified_by, |
|
| 370 |
p.visibility, p.viewing_groups, p.viewing_users |
|
| 371 |
FROM $table_s AS s INNER JOIN $table_p AS p ON s.page_id = p.page_id |
|
| 372 |
WHERE s.module = '$module_name' AND p.visibility NOT IN ('none','deleted') AND p.searching = '1' $search_path_SQL $search_language_SQL
|
|
| 373 |
ORDER BY s.page_id, s.position ASC |
|
| 374 |
"); |
|
| 375 |
if($sections_query->numRows() > 0) {
|
|
| 376 |
while($res = $sections_query->fetchRow()) {
|
|
| 377 |
// check if time-limit is exceeded for this module |
|
| 378 |
if($search_time_limit > 0 && (time()-$start_time > $search_time_limit)) {
|
|
| 379 |
break; |
|
| 380 |
} |
|
| 381 |
// Only show this section if it is not "out of publication-date" |
|
| 382 |
$now = time(); |
|
| 383 |
if( !( $now<$res['publ_end'] && ($now>$res['publ_start'] || $res['publ_start']==0) || |
|
| 384 |
$now>$res['publ_start'] && $res['publ_end']==0) ) {
|
|
| 401 | 385 |
continue; |
| 402 | 386 |
} |
| 387 |
$search_func_vars = array( |
|
| 388 |
'database' => $database, |
|
| 389 |
'page_id' => $res['page_id'], |
|
| 390 |
'section_id' => $res['section_id'], |
|
| 391 |
'page_title' => $res['page_title'], |
|
| 392 |
'page_menu_title' => $res['menu_title'], |
|
| 393 |
'page_description' => ($cfg_show_description?$res['description']:""), |
|
| 394 |
'page_keywords' => $res['keywords'], |
|
| 395 |
'page_link' => $res['link'], |
|
| 396 |
'page_modified_when' => $res['modified_when'], |
|
| 397 |
'page_modified_by' => $res['modified_by'], |
|
| 398 |
'users' => $users, |
|
| 399 |
'search_words' => $search_words, // needed for preg_match |
|
| 400 |
'search_match' => $match, |
|
| 401 |
'search_url_array' => $search_url_array, // needed for url-string only |
|
| 402 |
'results_loop_string' => $fetch_results_loop['value'], |
|
| 403 |
'default_max_excerpt' => $search_max_excerpt, |
|
| 404 |
'enable_flush' => $cfg_enable_flush, |
|
| 405 |
'time_limit' => $search_time_limit // time-limit in secs |
|
| 406 |
); |
|
| 407 |
// Only show this page if we are allowed to see it |
|
| 408 |
if($admin->page_is_visible($res) == false) {
|
|
| 409 |
if($res['visibility'] == 'registered') { // don't show excerpt
|
|
| 410 |
$search_func_vars['default_max_excerpt'] = 0; |
|
| 411 |
$search_func_vars['page_description'] = $TEXT['REGISTERED']; |
|
| 412 |
} else { // private
|
|
| 413 |
continue; |
|
| 414 |
} |
|
| 415 |
} |
|
| 416 |
$uf_res = call_user_func($search_funcs[$module_name], $search_func_vars); |
|
| 417 |
if($uf_res) {
|
|
| 418 |
$pages_listed[$res['page_id']] = true; |
|
| 419 |
$seen_pages[$module_name][$res['page_id']] = true; |
|
| 420 |
} else {
|
|
| 421 |
$seen_pages[$module_name][$res['page_id']] = true; |
|
| 422 |
} |
|
| 403 | 423 |
} |
| 404 |
$uf_res = call_user_func($search_funcs[$module_name], $search_func_vars); |
|
| 405 |
if($uf_res) {
|
|
| 406 |
$pages_listed[$res['page_id']] = true; |
|
| 407 |
$seen_pages[$module_name][$res['page_id']] = true; |
|
| 408 |
} else {
|
|
| 409 |
$seen_pages[$module_name][$res['page_id']] = true; |
|
| 410 |
} |
|
| 411 | 424 |
} |
| 412 | 425 |
} |
| 413 | 426 |
} |
| ... | ... | |
| 445 | 458 |
SELECT page_id, page_title, menu_title, link, description, keywords, modified_when, modified_by, |
| 446 | 459 |
visibility, viewing_groups, viewing_users |
| 447 | 460 |
FROM $table |
| 448 |
WHERE visibility NOT IN ('none','deleted') AND searching = '1' $search_path_SQL
|
|
| 461 |
WHERE visibility NOT IN ('none','deleted') AND searching = '1' $search_path_SQL $search_language_SQL
|
|
| 449 | 462 |
"); |
| 450 | 463 |
if($query_pages->numRows() > 0) {
|
| 451 | 464 |
while($page = $query_pages->fetchRow()) {
|
| ... | ... | |
| 602 | 615 |
} |
| 603 | 616 |
$prepared_query .= " ) ) ) ".$query_end; |
| 604 | 617 |
// Execute query |
| 605 |
$page_query = $database->query($prepared_query." ".$search_path_SQL); |
|
| 618 |
$page_query = $database->query($prepared_query." ".$search_path_SQL." ".$search_language_SQL_t);
|
|
| 606 | 619 |
|
| 607 | 620 |
// Loop through queried items |
| 608 | 621 |
if($page_query->numRows() > 0) {
|
Also available in: Unified diff
fixed some language bugs in search.php (Thanks to Thorn)