示例#1
0
function s4wp_search_results()
{
    $qry = filter_input(INPUT_GET, 'ssearch', FILTER_SANITIZE_STRING);
    $offset = filter_input(INPUT_GET, 'offset', FILTER_SANITIZE_STRING);
    $count = filter_input(INPUT_GET, 'count', FILTER_SANITIZE_STRING);
    $fq = filter_input(INPUT_GET, 'fq', FILTER_SANITIZE_STRING);
    $sort = filter_input(INPUT_GET, 'sort', FILTER_SANITIZE_STRING);
    $order = filter_input(INPUT_GET, 'order', FILTER_SANITIZE_STRING);
    $isdym = filter_input(INPUT_GET, 'isdym', FILTER_SANITIZE_STRING);
    $server = filter_input(INPUT_GET, 'server', FILTER_SANITIZE_STRING);
    $plugin_s4wp_settings = s4wp_get_option();
    $output_info = $plugin_s4wp_settings['s4wp_output_info'];
    $output_pager = $plugin_s4wp_settings['s4wp_output_pager'];
    $output_facets = $plugin_s4wp_settings['s4wp_output_facets'];
    $results_per_page = $plugin_s4wp_settings['s4wp_num_results'];
    $categoy_as_taxonomy = $plugin_s4wp_settings['s4wp_cat_as_taxo'];
    $out = array();
    $out['hits'] = "0";
    $qry = html_entity_decode($qry);
    $qry = trim($qry, '"');
    $qry = trim($qry, "'");
    if (!$qry) {
        $qry = '';
    }
    global $wpdb;
    //Sql Injection Prevention
    $qry = $wpdb->_real_escape(trim($qry));
    //if server value has been set lets set it up here
    // and add it to all the search urls henceforth
    $serverval = isset($server) ? '&server=' . $server : '';
    # set some default values
    if (!$offset) {
        $offset = 0;
    }
    # only use default if not specified in post information
    if (!$count) {
        $count = $results_per_page;
    }
    if (!$fq) {
        $fq = '';
    }
    if ($sort && $order) {
        $sortby = $sort;
    } else {
        $sortby = '';
        $order = '';
    }
    if (!$isdym) {
        $isdym = 0;
    }
    $fqstr = '';
    $fqitms = explode('||', $fq);
    $selectedfacets = array();
    foreach ($fqitms as $fqitem) {
        if ($fqitem && $fqitem !== 'any') {
            $splititm = explode(':', $fqitem);
            $selectedfacet = array();
            $selectedfacet['name'] = sprintf(__("%s:%s"), ucwords(preg_replace('/_str$/i', '', $splititm[0])), str_replace("^^", "/", $splititm[1]));
            $removelink = '';
            foreach ($fqitms as $fqitem2) {
                if ($fqitem2 && !($fqitem2 === $fqitem)) {
                    $splititm2 = explode(':', $fqitem2);
                    $removelink = $removelink . urlencode('||') . $splititm2[0] . ':' . urlencode($splititm2[1]);
                }
            }
            if ($removelink) {
                $selectedfacet['removelink'] = htmlspecialchars(sprintf(__("?ssearch=%s&fq=%s"), urlencode($qry), $removelink));
            } else {
                $selectedfacet['removelink'] = htmlspecialchars(sprintf(__("?ssearch=%s"), urlencode($qry)));
            }
            //if server is set add it on the end of the url
            $selectedfacet['removelink'] .= $serverval;
            $fqstr = $fqstr . urlencode('||') . $splititm[0] . ':' . urlencode($splititm[1]);
            $selectedfacets[] = $selectedfacet;
        }
    }
    if ($qry) {
        $results = s4wp_query($qry, $offset, $count, $fqitms, $sortby, $order, $server);
        if ($results) {
            $data = $results->getData();
            $response = $data['response'];
            $header = $data['responseHeader'];
            $teasers = $results->getHighlighting()->getResults();
            if ($output_info) {
                $out['hits'] = $response['numFound'];
                $out['qtime'] = sprintf(__("%.3f"), $header['QTime'] / 1000);
            } else {
                $out['hits'] = 0;
            }
            if ($output_pager) {
                # calculate the number of pages
                $numpages = ceil($response['numFound'] / $count);
                $currentpage = ceil($offset / $count) + 1;
                $pagerout = array();
                if ($numpages == 0) {
                    $numpages = 1;
                }
                foreach (range(1, $numpages) as $pagenum) {
                    if ($pagenum != $currentpage) {
                        $offsetnum = ($pagenum - 1) * $count;
                        $pageritm = array();
                        $pageritm['page'] = sprintf(__("%d"), $pagenum);
                        if (!isset($sortby) || $sortby == "") {
                            $pagersortby = "date";
                            $pagerorder = "desc";
                        } else {
                            $pagersortby = $sortby;
                            $pagerorder = $order;
                        }
                        $pagerlink = sprintf(__("?ssearch=%s&offset=%d&count=%d&sort=%s&order=%s"), urlencode($qry), $offsetnum, $count, $pagersortby, $pagerorder);
                        if ($fqstr) {
                            $pagerlink .= '&fq=' . $fqstr;
                        }
                        $pageritm['link'] = htmlspecialchars($pagerlink);
                        //if server is set add it on the end of the url
                        $pageritm['link'] .= isset($pageritm['link']) ? $serverval : '';
                        $pagerout[] = $pageritm;
                    } else {
                        $pageritm = array();
                        $pageritm['page'] = sprintf(__("%d"), $pagenum);
                        $pageritm['link'] = "";
                        $pagerout[] = $pageritm;
                    }
                }
                $out['pager'] = $pagerout;
            }
            if ($output_facets) {
                # handle facets
                $facetout = array();
                if ($results->getFacetSet()) {
                    foreach ($results->getFacetSet()->getFacets() as $facetfield => $facet) {
                        if (!get_object_vars($facet)) {
                            //continue;
                        }
                        $facetinfo = array();
                        $facetitms = array();
                        $facetinfo['name'] = ucwords(preg_replace('/_str$/i', '', $facetfield));
                        # categories is a taxonomy
                        if ($categoy_as_taxonomy && $facetfield == 'categories') {
                            # generate taxonomy and counts
                            $taxo = array();
                            foreach ($facet as $facetval => $facetcnt) {
                                $taxovals = explode('^^', rtrim($facetval, '^^'));
                                $taxo = s4wp_gen_taxo_array($taxo, $taxovals);
                            }
                            $facetitms = s4wp_get_output_taxo($facet, $taxo, '', $fqstr . $serverval, $facetfield);
                        } else {
                            foreach ($facet as $facetval => $facetcnt) {
                                $facetitm = array();
                                $facetitm['count'] = sprintf(__("%d"), $facetcnt);
                                $facetitm['link'] = htmlspecialchars(sprintf(__('?ssearch=%s&fq=%s:%s%s', 'solr4wp'), urlencode($qry), $facetfield, urlencode('"' . $facetval . '"'), $fqstr));
                                //if server is set add it on the end of the url
                                $facetitm['link'] .= $serverval;
                                $facetitm['name'] = $facetval;
                                $facetitms[] = $facetitm;
                            }
                        }
                        $facetinfo['items'] = $facetitms;
                        $facetout[$facetfield] = $facetinfo;
                    }
                }
                $facetout['selected'] = $selectedfacets;
                $out['facets'] = $facetout;
            }
            $resultout = array();
            if ($response['numFound'] != 0) {
                foreach ($response['docs'] as $doc) {
                    $resultinfo = array();
                    $docid = strval($doc['id']);
                    $resultinfo['permalink'] = $doc['permalink'];
                    $resultinfo['title'] = $doc['title'];
                    if (isset($doc['author'])) {
                        $resultinfo['author'] = $doc['author'];
                    }
                    if (isset($doc['author_s'])) {
                        $resultinfo['authorlink'] = htmlspecialchars($doc['author_s']);
                    }
                    $resultinfo['numcomments'] = $doc['numcomments'];
                    $resultinfo['date'] = $doc['displaydate'];
                    if ($doc['numcomments'] === 0) {
                        $resultinfo['comment_link'] = $doc['permalink'] . "#respond";
                    } else {
                        $resultinfo['comment_link'] = $doc['permalink'] . "#comments";
                    }
                    $resultinfo['score'] = $doc['score'];
                    $resultinfo['id'] = $docid;
                    $docteaser = $teasers[$docid];
                    $docteaser = $docteaser->getFields();
                    if ($docteaser) {
                        $resultinfo['teaser'] = sprintf(__("...%s..."), implode("...", $docteaser['content']));
                    } else {
                        $words = explode(' ', $doc['content']);
                        $teaser = implode(' ', array_slice($words, 0, 30));
                        $resultinfo['teaser'] = sprintf(__("%s..."), $teaser);
                    }
                    $resultout[] = $resultinfo;
                }
            }
            $out['results'] = $resultout;
        }
    } else {
        $out['hits'] = "0";
    }
    # pager and results count helpers
    $out['query'] = htmlspecialchars($qry);
    $out['offset'] = strval($offset);
    $out['count'] = strval($count);
    $out['firstresult'] = strval($offset + 1);
    $out['lastresult'] = strval(min($offset + $count, $out['hits']));
    // hits doesn't exist
    $out['sortby'] = $sortby;
    $out['order'] = $order;
    $out['sorting'] = array('scoreasc' => htmlspecialchars(sprintf('?ssearch=%s&fq=%s&sort=score&order=asc%s', urlencode($qry), stripslashes($fq), $serverval)), 'scoredesc' => htmlspecialchars(sprintf('?ssearch=%s&fq=%s&sort=score&order=desc%s', urlencode($qry), stripslashes($fq), $serverval)), 'dateasc' => htmlspecialchars(sprintf('?ssearch=%s&fq=%s&sort=date&order=asc%s', urlencode($qry), stripslashes($fq), $serverval)), 'datedesc' => htmlspecialchars(sprintf('?ssearch=%s&fq=%s&sort=date&order=desc%s', urlencode($qry), stripslashes($fq), $serverval)), 'modifiedasc' => htmlspecialchars(sprintf('?ssearch=%s&fq=%s&sort=modified&order=asc%s', urlencode($qry), stripslashes($fq), $serverval)), 'modifieddesc' => htmlspecialchars(sprintf('?ssearch=%s&fq=%s&sort=modified&order=desc%s', urlencode($qry), stripslashes($fq), $serverval)), 'commentsasc' => htmlspecialchars(sprintf('?ssearch=%s&fq=%s&sort=numcomments&order=asc%s', urlencode($qry), stripslashes($fq), $serverval)), 'commentsdesc' => htmlspecialchars(sprintf('?ssearch=%s&fq=%s&sort=numcomments&order=desc%s', urlencode($qry), stripslashes($fq), $serverval)));
    return $out;
}
function s4wp_apply_config_to_blog($blogid)
{
    syslog(LOG_ERR, "applying config to blog with id {$blogid}");
    if (!is_multisite()) {
        return;
    }
    wp_cache_flush();
    $plugin_s4wp_settings = s4wp_get_option();
    switch_to_blog($blogid);
    wp_cache_flush();
    s4wp_update_option($plugin_s4wp_settings);
    restore_current_blog();
    wp_cache_flush();
}
":</strong>
    <br />Hits:<?php 
                        echo esc_html($out['hits']);
                        ?>
    <br />Query Time:<?php 
                        echo esc_html($out['qtime']);
                        ?>
    </p></div>
<?php 
                    }
                }
            }
        }
    }
}
$s4wp_settings = s4wp_get_option('plugin_s4wp_settings');
?>


<div class="wrap">
<h2><?php 
_e('Solr Power', 'solr4wp');
?>
</h2>


<h2 class="nav-tab-wrapper" id="solr-tabs">
	<a class="nav-tab nav-tab-active" id="solr_info-tab"
		   href="#top#solr_info">Info</a>
		<a class="nav-tab" id="solr_indexing-tab"
		   href="#top#solr_indexing">Indexing</a>
</strong></p></div>
<?php 
            } else {
                if (isset($_POST['s4wp_init_blogs']) and $_POST['s4wp_init_blogs']) {
                    s4wp_copy_config_to_all_blogs();
                } else {
                    if (isset($_POST['s4wp_query']) && $_POST['solrQuery']) {
                        $qry = filter_input(INPUT_POST, 'solrQuery', FILTER_SANITIZE_STRING);
                        $offset = null;
                        $count = null;
                        $fq = null;
                        $sortby = null;
                        $order = null;
                        $results = s4wp_query($qry, $offset, $count, $fq, $sortby, $order);
                        if (isset($results)) {
                            $plugin_s4wp_settings = s4wp_get_option();
                            $output_info = $plugin_s4wp_settings['s4wp_output_info'];
                            $data = $results->getData();
                            $response = $data['response'];
                            $header = $data['responseHeader'];
                            if ($output_info) {
                                $out['hits'] = $response['numFound'];
                                $out['qtime'] = sprintf(__("%.3f"), $header['QTime'] / 1000);
                            } else {
                                $out['hits'] = 0;
                                $out['qtime'] = 0;
                            }
                        } else {
                            $data = $results;
                        }
                        ?>