Вход Регистрация
Файл: qa-include/qa-app-search.php
Строк: 134
<?php

/*
    Question2Answer (c) Gideon Greenspan

    http://www.question2answer.org/

    
    File: qa-include/qa-app-search.php
    Version: See define()s at top of qa-include/qa-base.php
    Description: Wrapper functions and utilities for search modules


    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    More about this license: http://www.question2answer.org/license.php
*/

    
if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
        
header('Location: ../');
        exit;
    }

    
    function 
qa_get_search_results($query$start$count$userid$absoluteurls$fullcontent)
/*
    Returns $count search results for $query performed by $userid, starting at offset $start. Set $absoluteurls to true
    to get absolute URLs for the results and $fullcontent if the results should include full post content. This calls
    through to the chosen search module, and performs all the necessary post-processing to supplement the results for
    display online or in an RSS feed.
*/
    
{

    
//    Identify which search module should be used
                
        
$searchmodules=qa_load_modules_with('search''process_search');
        
        if (!
count($searchmodules))
            
qa_fatal_error('No search engine is available');
            
        
$module=reset($searchmodules); // use first one by default
        
        
if (count($searchmodules)>1) {
            
$tryname=qa_opt('search_module'); // use chosen one if it's available
            
            
if (isset($searchmodules[$tryname]))
                
$module=$searchmodules[$tryname];
        }
        
    
//    Get the results
    
        
$results=$module->process_search($query$start$count$userid$absoluteurls$fullcontent);
    
    
//    Work out what additional information (if any) we need to retrieve for the results
    
        
$keypostidgetfull=array();
        
$keypostidgettype=array();
        
$keypostidgetquestion=array();
        
$keypageidgetpage=array();
    
        foreach (
$results as $result) {
            if (isset(
$result['question_postid']) && !isset($result['question']))
                
$keypostidgetfull[$result['question_postid']]=true;
                
            if (isset(
$result['match_postid'])) {
                if (!( (isset(
$result['question_postid'])) || (isset($result['question'])) ))
                    
$keypostidgetquestion[$result['match_postid']]=true// we can also get $result['match_type'] from this

                
elseif (!isset($result['match_type']))
                    
$keypostidgettype[$result['match_postid']]=true;
            }
            
            if (isset(
$result['page_pageid']) && !isset($result['page']))
                
$keypageidgetpage[$result['page_pageid']]=true;
        }
        
    
//    Perform the appropriate database queries
    
        
@list($postidfull$postidtype$postidquestion$pageidpage)=qa_db_select_with_pending(
            
count($keypostidgetfull) ? qa_db_posts_selectspec($useridarray_keys($keypostidgetfull), $fullcontent) : null,
            
count($keypostidgettype) ? qa_db_posts_basetype_selectspec(array_keys($keypostidgettype)) : null,
            
count($keypostidgetquestion) ? qa_db_posts_to_qs_selectspec($useridarray_keys($keypostidgetquestion), $fullcontent) : null,
            
count($keypageidgetpage) ? qa_db_pages_selectspec(nullarray_keys($keypageidgetpage)) : null
        
);
    
    
//    Supplement the results as appropriate
    
        
foreach ($results as $key => $result) {
            if (isset(
$result['question_postid']) && !isset($result['question']))
                if (@
$postidfull[$result['question_postid']]['basetype']=='Q')
                    
$result['question']=@$postidfull[$result['question_postid']];

            if (isset(
$result['match_postid'])) {
                if (!( (isset(
$result['question_postid'])) || (isset($result['question'])) )) {
                    
$result['question']=@$postidquestion[$result['match_postid']];
                    
                    if (!isset(
$result['match_type']))
                        
$result['match_type']=@$result['question']['obasetype'];

                } elseif (!isset(
$result['match_type']))
                    
$result['match_type']=@$postidtype[$result['match_postid']];
            }
            
            if (isset(
$result['question']) && !isset($result['question_postid']))
                
$result['question_postid']=$result['question']['postid'];
                    
            if (isset(
$result['page_pageid']) && !isset($result['page']))
                 
$result['page']=@$pageidpage[$result['page_pageid']];
                
            if (!isset(
$result['title'])) {
                if (isset(
$result['question']))
                    
$result['title']=$result['question']['title'];
                elseif (isset(
$result['page']))
                    
$result['title']=$result['page']['heading'];
            }
            
            if (!isset(
$result['url'])) {
                if (isset(
$result['question']))
                    
$result['url']=qa_q_path($result['question']['postid'], $result['question']['title'],
                        
$absoluteurls, @$result['match_type'], @$result['match_postid']);
                elseif (isset(
$result['page']))
                    
$result['url']=qa_path($result['page']['tags'], nullqa_opt('site_url'));
            }
                    
            
$results[$key]=$result;
        }
    
    
//    Return the results
    
        
return $results;
    }
    

/*
    Omit PHP closing tag to help avoid accidental output
*/
Онлайн: 0
Реклама