From 8ee6e6ed92b82e51315881f7545dfca030a55c27 Mon Sep 17 00:00:00 2001 From: Rasmus Lerdorf Date: Sat, 16 Jul 2011 05:45:51 +0000 Subject: [PATCH] Do a web search from the manual-lookup page when a function is not found --- include/results.inc | 89 +++++++++++++++++++++++++++++++++++++++++++++ quickref.php | 17 +++++++++ results.php | 87 +++----------------------------------------- 3 files changed, 111 insertions(+), 82 deletions(-) create mode 100644 include/results.inc diff --git a/include/results.inc b/include/results.inc new file mode 100644 index 000000000..be518bdc7 --- /dev/null +++ b/include/results.inc @@ -0,0 +1,89 @@ +Showing results $disp_start_result to $disp_end_result of $results_count\n"; + echo '\n"; + if($show_attrib): + echo <<results by +EOB; + endif; + if($show_foot): + echo <<

Results Page:

+
    +EOB; + $start = 0; + for($z=1; $z < 11; $z++) { + if($start > $res['ResultSet']['totalResultsAvailable']) { + break; + } + printf('
  • %d
  • ', urlencode($q), $start, $profile, urlencode($l), $z); + $start += $per_page; + } + echo '
'; + endif; +} +?> diff --git a/quickref.php b/quickref.php index bc5f2e121..3d5a998a6 100644 --- a/quickref.php +++ b/quickref.php @@ -19,6 +19,7 @@ $_SERVER['BASE_PAGE'] = 'quickref.php'; include_once $_SERVER['DOCUMENT_ROOT'] . '/include/prepend.inc'; include_once $_SERVER['DOCUMENT_ROOT'] . '/include/errors.inc'; +include $_SERVER['DOCUMENT_ROOT'] . '/include/results.inc'; // Constant values for the display define("COLUMNS", 3); @@ -146,6 +147,22 @@ $notfound_enc = urlencode($notfound_sc); + 2): +$srch_rqst = "/ws.php?profile=local&q=".urlencode($notfound)."&lang=$LANG&results=5&start=0&mirror=".trim(substr($MYSITE,7),'/'); +$url = "http://www.php.net".$srch_rqst; +$data = fetch_contents($url); +if(!is_array($data)) { + $res = unserialize($data); + if(is_array($res) && $res['ResultSet']['totalResultsAvailable'] > 0) { + // Ok, we got some results from the search backend + echo "

Site Search Results

\n"; + search_results($res, $notfound, 'local', 10, 0, $LANG, false, false, false); + echo '
'; + } +} +endif; +?>

Other forms of search

diff --git a/results.php b/results.php index ee8135395..46eb2c138 100644 --- a/results.php +++ b/results.php @@ -2,6 +2,7 @@ // $Id$ $_SERVER['BASE_PAGE'] = 'results.php'; include $_SERVER['DOCUMENT_ROOT'] . '/include/prepend.inc'; +include $_SERVER['DOCUMENT_ROOT'] . '/include/results.inc'; #include $_SERVER['DOCUMENT_ROOT'] . '/include/loadavg.inc'; function exit_with_pretty_error($title, $header, $msg) { @@ -32,8 +33,8 @@ if ($MQ) { if(strlen($l)>2) $l = substr($l,0,2); // Just take the first 2 chars. eg. pt_BR = pt -$q = urlencode($q); -$l = urlencode($l); +$uq = urlencode($q); +$ul = urlencode($l); $s = (isset($_GET['start']) && is_numeric($_GET['start'])) ? (int)$_GET['start'] : 0; $profile = (isset($_GET['p']) && is_string($_GET['p'])) ? $_GET['p'] : 'all'; @@ -42,7 +43,7 @@ $per_page = 10; $valid_profiles = array('all', 'local', 'manual', 'news', 'bugs', 'pear', 'pecl', 'talks'); $scope = in_array($profile, $valid_profiles) ? $profile : 'all'; $srch_host = "www.php.net"; -$srch_rqst = "/ws.php?profile=$scope&q=$q&lang=$l&results=$per_page&start=$s&mirror=".trim(substr($MYSITE,7),'/'); +$srch_rqst = "/ws.php?profile=$scope&q=$uq&lang=$ul&results=$per_page&start=$s&mirror=".trim(substr($MYSITE,7),'/'); $url = "http://".$srch_host.$srch_rqst; $data = fetch_contents($url); @@ -66,85 +67,7 @@ if ($res['ResultSet']['totalResultsAvailable'] == 0) { exit; } -$start_result = $s; -$end_result = $s + $res['ResultSet']['totalResultsReturned'] -1; +search_results($res, $q, $scope, $per_page, $s, $l); -$results_count = ($res['ResultSet']['totalResultsAvailable'] < 100 ? $res['ResultSet']['totalResultsAvailable'] : 'more than 100'); - -$disp_start_result = $start_result + 1; -$disp_end_result = $end_result + 1; -echo <<Showing results $disp_start_result to $disp_end_result of $results_count -

    -EOB; -$pos = $res['ResultSet']['firstResultPosition']; - -$php_img_dir = 'http://static.php.net/www.php.net/images'; -$types = array( - 'pear' => '', - 'pecl' => '', - 'pecl4win' => '', - 'peclbugs' => '', - 'pearbugs' => '', - 'talks' => '', - 'snaps' => '', - 'cvsweb' => '', - 'viewcvs' => '', - 'news' => '', - 'php' => '', - 'doc' => '', - 'bugs' => '', - 'gtk' => '' -); - -foreach($res['ResultSet']['Result'] as $i => $hit) { - $cnt = $pos + $i; - - $d = date('j M Y', $hit['ModificationDate']); - $cachelink = ''; - if (isset($hit['Cache'])) { - $cachelink = " - Cached"; - } - - // rewrite mirrors urls (\w\w\d? or www, but not qa, doc, gtk and ~/user) - $real_url = preg_replace('@^http://(?!doc|qa|gtk)\w{2,3}\.php\.net(?!/~)(.*)$@', '$1', $hit['Url']); - $displayurl = preg_replace('@^http://(?:(?!doc|qa|php|gtk)\w{2,3}\.)?(.+[^/])/?$@', '$1', $hit['Url']); - $type = substr($displayurl,0,strpos($displayurl,'.')); - if($type=='pecl' && strstr($displayurl,"/bugs/")) $type = "peclbugs"; - if($type=='pear' && strstr($displayurl,"/bugs/")) $type = "pearbugs"; - if($type=='smarty') continue; - $display_title = str_replace(array('PHP:', '&'), array('', '&'), $hit['Title']); - - // Fall back to the PHP logo for unknown hits - if (!isset($types[$type])) { - $type = "php"; - } - - // Fix &gt; double escaping - $summary = str_replace('&', '&', $hit['Summary']); - echo << -

    {$types[$type]}{$display_title}

    -

    {$summary}

    -

    {$displayurl} - {$d} {$cachelink}

    - -EOB; -} -echo << -results by -

    Results Page:

    -
      -EOB; -$start = 0; -for($z=1; $z < 11; $z++) { - if($start > $res['ResultSet']['totalResultsAvailable']) { - break; - } - printf('
    • %d
    • ', $q, $start, $scope, $l, $z); - $start += $per_page; -} -echo '
    '; site_footer(); ?>