Revision 2088
Added by darkviper almost 11 years ago
search.php | ||
---|---|---|
31 | 31 |
|
32 | 32 |
// Include the WB functions file |
33 | 33 |
require_once(WB_PATH.'/framework/functions.php'); |
34 |
|
|
34 |
$oDb = WbDatabase::getInstance(); |
|
35 | 35 |
// Get search settings |
36 | 36 |
$table=TABLE_PREFIX.'search'; |
37 |
$query = $database->query("SELECT value FROM $table WHERE name = 'header' LIMIT 1"); |
|
38 |
$fetch_header = $query->fetchRow(); |
|
39 |
$query = $database->query("SELECT value FROM $table WHERE name = 'footer' LIMIT 1"); |
|
40 |
$fetch_footer = $query->fetchRow(); |
|
41 |
$query = $database->query("SELECT value FROM $table WHERE name = 'results_header' LIMIT 1"); |
|
42 |
$fetch_results_header = $query->fetchRow(); |
|
43 |
$query = $database->query("SELECT value FROM $table WHERE name = 'results_footer' LIMIT 1"); |
|
44 |
$fetch_results_footer = $query->fetchRow(); |
|
45 |
$query = $database->query("SELECT value FROM $table WHERE name = 'results_loop' LIMIT 1"); |
|
46 |
$fetch_results_loop = $query->fetchRow(); |
|
47 |
$query = $database->query("SELECT value FROM $table WHERE name = 'no_results' LIMIT 1"); |
|
48 |
$fetch_no_results = $query->fetchRow(); |
|
49 |
$query = $database->query("SELECT value FROM $table WHERE name = 'module_order' LIMIT 1"); |
|
50 |
if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value']='faqbaker,manual,wysiwyg'; } |
|
51 |
$search_module_order = $res['value']; |
|
52 |
$query = $database->query("SELECT value FROM $table WHERE name = 'max_excerpt' LIMIT 1"); |
|
53 |
if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = '15'; } |
|
54 |
$search_max_excerpt = (int)($res['value']); |
|
55 |
if(!is_numeric($search_max_excerpt)) { $search_max_excerpt = 15; } |
|
56 |
$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_show_description' LIMIT 1"); |
|
57 |
if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'true'; } |
|
58 |
if($res['value'] == 'false') { $cfg_show_description = false; } else { $cfg_show_description = true; } |
|
59 |
$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_search_description' LIMIT 1"); |
|
60 |
if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'true'; } |
|
61 |
if($res['value'] == 'false') { $cfg_search_description = false; } else { $cfg_search_description = true; } |
|
62 |
$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_search_keywords' LIMIT 1"); |
|
63 |
if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'true'; } |
|
64 |
if($res['value'] == 'false') { $cfg_search_keywords = false; } else { $cfg_search_keywords = true; } |
|
65 |
$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_enable_old_search' LIMIT 1"); |
|
66 |
if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'true'; } |
|
67 |
if($res['value'] == 'false') { $cfg_enable_old_search = false; } else { $cfg_enable_old_search = true; } |
|
68 |
$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_enable_flush' LIMIT 1"); |
|
69 |
if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'false'; } |
|
70 |
if($res['value'] == 'false') { $cfg_enable_flush = false; } else { $cfg_enable_flush = true; } |
|
71 |
$query = $database->query("SELECT value FROM $table WHERE name = 'time_limit' LIMIT 1"); // time-limit per module |
|
72 |
if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = '0'; } |
|
73 |
$search_time_limit = (int)($res['value']); |
|
74 |
if($search_time_limit < 1) $search_time_limit = 0; |
|
37 |
// set default values if needed |
|
38 |
$aSettings = array( 'search_module_order' => 'wysiwyg', |
|
39 |
'search_max_excerpt' => 15, |
|
40 |
'cfg_show_description' => true, |
|
41 |
'cfg_search_description'=> true, |
|
42 |
'cfg_search_keywords' => true, |
|
43 |
'cfg_enable_old_search' => true, |
|
44 |
'cfg_enable_flush' => true, |
|
45 |
'search_time_limit' => 0 |
|
46 |
); |
|
47 |
$sql = 'SELECT `name`, `value` FROM `'.$oDb->TablePrefix.'search`'; |
|
48 |
$oSearchSettings = $oDb->doQuery($sql); |
|
49 |
while ($aSettingsRecord = $oSearchSettings->fetchRow(MYSQL_ASSOC)) { |
|
50 |
// read settings and sanitize it |
|
51 |
switch ($aSettingsRecord['name']) { |
|
52 |
case 'header': |
|
53 |
case 'footer': |
|
54 |
case 'results_header': |
|
55 |
case 'results_footer': |
|
56 |
case 'results_loop': |
|
57 |
case 'no_results': |
|
58 |
$aSettings['fetch_'.$aSettingsRecord['name']] = $aSettingsRecord['value']; |
|
59 |
break; |
|
60 |
case 'module_order': |
|
61 |
$aSettings['search_module_order'] = ( $aSettingsRecord['value'] |
|
62 |
? $aSettingsRecord['value'] |
|
63 |
: 'wysiwyg' |
|
64 |
); |
|
65 |
break; |
|
66 |
case 'max_excerpt': |
|
67 |
$aSettings['search_max_excerpt'] = ( intval($aSettingsRecord['value']) |
|
68 |
? intval($aSettingsRecord['value']) |
|
69 |
: $aSettings['search_max_excerpt'] |
|
70 |
); |
|
71 |
break; |
|
72 |
case 'cfg_show_description': |
|
73 |
case 'cfg_search_description': |
|
74 |
case 'cfg_search_keywords': |
|
75 |
case 'cfg_enable_old_search': |
|
76 |
case 'cfg_enable_flush': |
|
77 |
$aSettings[$aSettingsRecord['name']] = (filter_var( $aSettingsRecord['value'], |
|
78 |
FILTER_VALIDATE_BOOLEAN, |
|
79 |
FILTER_NULL_ON_FAILURE |
|
80 |
) !== false); |
|
81 |
break; |
|
82 |
case 'time_limit': |
|
83 |
$aSettings['search_time_limit'] = ( intval($aSettingsRecord['value']) < 0 |
|
84 |
? 0 |
|
85 |
: intval($aSettingsRecord['value']) |
|
86 |
); |
|
87 |
break; |
|
88 |
default: |
|
89 |
break; |
|
90 |
} |
|
91 |
} |
|
75 | 92 |
|
76 | 93 |
// search-module-extension: get helper-functions |
77 | 94 |
require_once(WB_PATH.'/search/search_modext.php'); |
... | ... | |
273 | 290 |
// Replace vars in search settings with values |
274 | 291 |
$vars = array('[SEARCH_STRING]', '[WB_URL]', '[PAGE_EXTENSION]', '[TEXT_RESULTS_FOR]'); |
275 | 292 |
$values = array($search_display_string, WB_URL, PAGE_EXTENSION, $TEXT['RESULTS_FOR']); |
276 |
$search_footer = str_replace($vars, $values, ($fetch_footer['value']));
|
|
277 |
$search_results_header = str_replace($vars, $values, ($fetch_results_header['value']));
|
|
278 |
$search_results_footer = str_replace($vars, $values, ($fetch_results_footer['value']));
|
|
293 |
$search_footer = str_replace($vars, $values, ($aSettings['fetch_footer']));
|
|
294 |
$search_results_header = str_replace($vars, $values, ($aSettings['fetch_results_header']));
|
|
295 |
$search_results_footer = str_replace($vars, $values, ($aSettings['fetch_results_footer']));
|
|
279 | 296 |
|
280 | 297 |
// Do extra vars/values replacement |
281 | 298 |
$vars = array('[SEARCH_STRING]', '[WB_URL]', '[PAGE_EXTENSION]', '[TEXT_SEARCH]', '[TEXT_ALL_WORDS]', '[TEXT_ANY_WORDS]', '[TEXT_EXACT_MATCH]', '[TEXT_MATCH]', '[TEXT_MATCHING]', '[ALL_CHECKED]', '[ANY_CHECKED]', '[EXACT_CHECKED]', '[REFERRER_ID]', '[SEARCH_PATH]'); |
282 | 299 |
$values = array($search_display_string, WB_URL, PAGE_EXTENSION, $TEXT['SEARCH'], $TEXT['ALL_WORDS'], $TEXT['ANY_WORDS'], $TEXT['EXACT_MATCH'], $TEXT['MATCH'], $TEXT['MATCHING'], $all_checked, $any_checked, $exact_checked, REFERRER_ID, $search_path); |
283 |
$search_header = str_replace($vars, $values, ($fetch_header['value']));
|
|
300 |
$search_header = str_replace($vars, $values, ($aSettings['fetch_header']));
|
|
284 | 301 |
$vars = array('[TEXT_NO_RESULTS]'); |
285 | 302 |
$values = array($TEXT['NO_RESULTS']); |
286 |
$search_no_results = str_replace($vars, $values, ($fetch_no_results['value']));
|
|
303 |
$search_no_results = str_replace($vars, $values, ($aSettings['fetch_no_results']));
|
|
287 | 304 |
|
288 | 305 |
/* |
289 | 306 |
* Start of output |
... | ... | |
307 | 324 |
} |
308 | 325 |
} |
309 | 326 |
// sort module search-order |
310 |
// get the modules from $search_module_order first ...
|
|
327 |
// get the modules from $aSettings['search_module_order'] first ...
|
|
311 | 328 |
$sorted_modules = array(); |
312 | 329 |
$m = count($modules); |
313 |
$search_modules = explode(',', $search_module_order);
|
|
330 |
$search_modules = explode(',', $aSettings['search_module_order']);
|
|
314 | 331 |
foreach($search_modules AS $item) { |
315 | 332 |
$item = trim($item); |
316 | 333 |
for($i=0; $i < $m; $i++) { |
... | ... | |
346 | 363 |
'search_match' => $match, // match-type |
347 | 364 |
'search_url_array' => $search_url_array, // array of strings from the original search-string. ATTN: strings are not quoted! |
348 | 365 |
'search_entities_array' => $search_entities_array, // entities |
349 |
'results_loop_string' => $fetch_results_loop['value'],
|
|
350 |
'default_max_excerpt' => $search_max_excerpt,
|
|
351 |
'time_limit' => $search_time_limit, // time-limit in secs
|
|
366 |
'results_loop_string' => $aSettings['fetch_results_loop'],
|
|
367 |
'default_max_excerpt' => $aSettings['search_max_excerpt'],
|
|
368 |
'time_limit' => $aSettings['search_time_limit'], // time-limit in secs
|
|
352 | 369 |
'search_path' => $search_path // see docu |
353 | 370 |
); |
354 | 371 |
foreach($search_funcs['__before'] as $func) { |
... | ... | |
357 | 374 |
// now call module-based $search_funcs[] |
358 | 375 |
$seen_pages = array(); // seen pages per module. |
359 | 376 |
$pages_listed = array(); // seen pages. |
360 |
if($search_max_excerpt!=0) { // skip this search if $search_max_excerpt==0
|
|
377 |
if($aSettings['search_max_excerpt']!=0) { // skip this search if $aSettings['search_max_excerpt']==0
|
|
361 | 378 |
foreach($sorted_modules AS $module_name) { |
362 | 379 |
$start_time = time(); // get start-time to check time-limit; not very accurate, but ok |
363 | 380 |
$seen_pages[$module_name] = array(); |
... | ... | |
378 | 395 |
if($sections_query->numRows() > 0) { |
379 | 396 |
while($res = $sections_query->fetchRow()) { |
380 | 397 |
// check if time-limit is exceeded for this module |
381 |
if($search_time_limit > 0 && (time()-$start_time > $search_time_limit)) {
|
|
398 |
if($aSettings['search_time_limit'] > 0 && (time()-$start_time > $aSettings['search_time_limit'])) {
|
|
382 | 399 |
break; |
383 | 400 |
} |
384 | 401 |
// Only show this section if it is not "out of publication-date" |
... | ... | |
393 | 410 |
'section_id' => $res['section_id'], |
394 | 411 |
'page_title' => $res['page_title'], |
395 | 412 |
'page_menu_title' => $res['menu_title'], |
396 |
'page_description' => ($cfg_show_description?$res['description']:""),
|
|
413 |
'page_description' => ($aSettings['cfg_show_description']?$res['description']:""),
|
|
397 | 414 |
'page_keywords' => $res['keywords'], |
398 | 415 |
'page_link' => $res['link'], |
399 | 416 |
'page_modified_when' => $res['modified_when'], |
... | ... | |
403 | 420 |
'search_match' => $match, |
404 | 421 |
'search_url_array' => $search_url_array, // needed for url-string only |
405 | 422 |
'search_entities_array' => $search_entities_array, // entities |
406 |
'results_loop_string' => $fetch_results_loop['value'],
|
|
407 |
'default_max_excerpt' => $search_max_excerpt,
|
|
408 |
'enable_flush' => $cfg_enable_flush,
|
|
409 |
'time_limit' => $search_time_limit // time-limit in secs
|
|
423 |
'results_loop_string' => $aSettings['fetch_results_loop'],
|
|
424 |
'default_max_excerpt' => $aSettings['search_max_excerpt'],
|
|
425 |
'enable_flush' => $aSettings['cfg_enable_flush'],
|
|
426 |
'time_limit' => $aSettings['search_time_limit'] // time-limit in secs
|
|
410 | 427 |
); |
411 | 428 |
// Only show this page if we are allowed to see it |
412 | 429 |
if($admin->page_is_visible($res) == false) { |
... | ... | |
445 | 462 |
'search_match' => $match, // match-type |
446 | 463 |
'search_url_array' => $search_url_array, // array of strings from the original search-string. ATTN: strings are not quoted! |
447 | 464 |
'search_entities_array' => $search_entities_array, // entities |
448 |
'results_loop_string' => $fetch_results_loop['value'],
|
|
449 |
'default_max_excerpt' => $search_max_excerpt,
|
|
450 |
'time_limit' => $search_time_limit, // time-limit in secs
|
|
465 |
'results_loop_string' => $aSettings['fetch_results_loop'],
|
|
466 |
'default_max_excerpt' => $aSettings['search_max_excerpt'],
|
|
467 |
'time_limit' => $aSettings['search_time_limit'], // time-limit in secs
|
|
451 | 468 |
'search_path' => $search_path // see docu |
452 | 469 |
); |
453 | 470 |
foreach($search_funcs['__after'] as $func) { |
... | ... | |
475 | 492 |
'page_id' => $page['page_id'], |
476 | 493 |
'page_title' => $page['page_title'], |
477 | 494 |
'page_menu_title' => $page['menu_title'], |
478 |
'page_description' => ($cfg_show_description?$page['description']:""),
|
|
495 |
'page_description' => ($aSettings['cfg_show_description']?$page['description']:""),
|
|
479 | 496 |
'page_keywords' => $page['keywords'], |
480 | 497 |
'page_link' => $page['link'], |
481 | 498 |
'page_modified_when' => $page['modified_when'], |
... | ... | |
485 | 502 |
'search_match' => $match, |
486 | 503 |
'search_url_array' => $search_url_array, // needed for url-string only |
487 | 504 |
'search_entities_array' => $search_entities_array, // entities |
488 |
'results_loop_string' => $fetch_results_loop['value'],
|
|
505 |
'results_loop_string' => $aSettings['fetch_results_loop'],
|
|
489 | 506 |
'default_max_excerpt' => $max_excerpt_num, |
490 |
'enable_flush' => $cfg_enable_flush
|
|
507 |
'enable_flush' => $aSettings['cfg_enable_flush']
|
|
491 | 508 |
); |
492 | 509 |
// Only show this page if we are allowed to see it |
493 | 510 |
if($admin->page_is_visible($page) == false) { |
... | ... | |
502 | 519 |
} |
503 | 520 |
$text = $func_vars['page_title'].$divider |
504 | 521 |
.$func_vars['page_menu_title'].$divider |
505 |
.($cfg_search_description?$func_vars['page_description']:"").$divider
|
|
506 |
.($cfg_search_keywords?$func_vars['page_keywords']:"").$divider;
|
|
522 |
.($aSettings['cfg_search_description']?$func_vars['page_description']:"").$divider
|
|
523 |
.($aSettings['cfg_search_keywords']?$func_vars['page_keywords']:"").$divider;
|
|
507 | 524 |
$mod_vars = array( |
508 | 525 |
'page_link' => $func_vars['page_link'], |
509 | 526 |
'page_link_target' => "", |
... | ... | |
539 | 556 |
} |
540 | 557 |
} |
541 | 558 |
// sort module search-order |
542 |
// get the modules from $search_module_order first ...
|
|
559 |
// get the modules from $aSettings['search_module_order'] first ...
|
|
543 | 560 |
$sorted_modules = array(); |
544 | 561 |
$m = count($modules); |
545 |
$search_modules = explode(',', $search_module_order);
|
|
562 |
$search_modules = explode(',', $aSettings['search_module_order']);
|
|
546 | 563 |
foreach($search_modules AS $item) { |
547 | 564 |
$item = trim($item); |
548 | 565 |
for($i=0; $i < $m; $i++) { |
... | ... | |
558 | 575 |
$sorted_modules[] = $item; |
559 | 576 |
} |
560 | 577 |
|
561 |
if($cfg_enable_old_search) { // this is the old (wb <= 2.6.7) search-function
|
|
578 |
if($aSettings['cfg_enable_old_search']) { // this is the old (wb <= 2.6.7) search-function
|
|
562 | 579 |
$search_path_SQL = str_replace(' link ', ' '.TABLE_PREFIX.'pages.link ', $search_path_SQL); |
563 | 580 |
foreach($sorted_modules AS $module) { |
564 | 581 |
if(isset($seen_pages[$module['value']]) && count($seen_pages[$module['value']])>0) // skip modules handled by new search-func |
... | ... | |
686 | 703 |
$time = $TEXT['UNKNOWN'].' '.$TEXT['TIME']; |
687 | 704 |
} |
688 | 705 |
$excerpt=""; |
689 |
if($cfg_show_description == 0) {
|
|
706 |
if($aSettings['cfg_show_description'] == 0) {
|
|
690 | 707 |
$page['description'] = ""; |
691 | 708 |
} |
692 | 709 |
$values = array($link, $page['page_title'], $page['description'], $users[$page['modified_by']]['username'], $users[$page['modified_by']]['display_name'], $date, $time, $TEXT['LAST_UPDATED_BY'], strtolower($TEXT['ON']), $excerpt); |
693 | 710 |
// Show loop code with vars replaced by values |
694 |
echo str_replace($vars, $values, ($fetch_results_loop['value']));
|
|
711 |
echo str_replace($vars, $values, ($aSettings['fetch_results_loop']));
|
|
695 | 712 |
// Say that this page has been listed |
696 | 713 |
$seen_pages[$module_name][$page['page_id']] = true; |
697 | 714 |
$pages_listed[$page['page_id']] = true; |
Also available in: Unified diff
! search/search.php read settings optimized
! WbDatabase visibility of constructor corrected