From 0bede65a6b26826158703a0a6a164c2e0dac9851 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 19 Jul 2015 13:23:01 +0200 Subject: [PATCH] Use local search --- mod/dirfind.php | 65 ++++++++++++++++++++++++++++------- view/templates/match.tpl | 2 +- view/templates/peoplefind.tpl | 2 +- 3 files changed, 54 insertions(+), 15 deletions(-) diff --git a/mod/dirfind.php b/mod/dirfind.php index 0c6d79480f..c49d37e48d 100644 --- a/mod/dirfind.php +++ b/mod/dirfind.php @@ -16,11 +16,13 @@ function dirfind_init(&$a) { function dirfind_content(&$a) { + $local = true; + $search = notags(trim($_REQUEST['search'])); if(strpos($search,'@') === 0) $search = substr($search,1); - + $o = ''; $o .= replace_macros(get_markup_template("section_title.tpl"),array( @@ -29,16 +31,53 @@ function dirfind_content(&$a) { if($search) { - $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : ''); - - if(strlen(get_config('system','directory_submit_url'))) - $x = fetch_url('http://dir.friendica.com/lsearch?f=' . $p . '&search=' . urlencode($search)); + if ($local) { + + $perpage = 80; + $startrec = (($a->pager['page']) * $perpage) - $perpage; + + $count = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `network` IN ('%s', '%s', '%s') AND + (`url` REGEXP '%s' OR `name` REGEXP '%s' OR `location` REGEXP '%s' OR + `about` REGEXP '%s' OR `keywords` REGEXP '%s')", + dbesc(NETWORK_DFRN), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DIASPORA), + dbesc(escape_tags($search)), dbesc(escape_tags($search)), dbesc(escape_tags($search)), + dbesc(escape_tags($search)), dbesc(escape_tags($search))); + + $results = q("SELECT `url`, `name`, `photo`, `keywords` FROM `gcontact`WHERE `network` IN ('%s', '%s', '%s') AND + (`url` REGEXP '%s' OR `name` REGEXP '%s' OR `location` REGEXP '%s' OR `about` REGEXP '%s' OR + `keywords` REGEXP '%s') ORDER BY `name` ASC LIMIT %d, %d", + dbesc(NETWORK_DFRN), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DIASPORA), + dbesc(escape_tags($search)), dbesc(escape_tags($search)), dbesc(escape_tags($search)), + dbesc(escape_tags($search)), dbesc(escape_tags($search)), + intval($startrec), intval($perpage)); + + $j = new stdClass(); + $j->total = $count[0]["total"]; + $j->items_page = $perpage; + $j->page = $a->pager['page']; + foreach ($results AS $result) { + if ($result["name"] == "") { + $urlparts = parse_url($result["url"]); + $result["name"] = end(explode("/", $urlparts["path"])); + } + + $objresult = new stdClass(); + $objresult->name = $result["name"]; + $objresult->url = $result["url"]; + $objresult->photo = $result["photo"]; + $objresult->tags = $result["keywords"]; + + $j->results[] = $objresult; + } + } else { + + $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : ''); -//TODO fallback local search if global dir not available. -// else -// $x = post_url($a->get_baseurl() . '/lsearch', $params); + if(strlen(get_config('system','directory_submit_url'))) + $x = fetch_url('http://dir.friendica.com/lsearch?f=' . $p . '&search=' . urlencode($search)); - $j = json_decode($x); + $j = json_decode($x); + } if($j->total) { $a->set_pager_total($j->total); @@ -46,21 +85,21 @@ function dirfind_content(&$a) { } if(count($j->results)) { - + $tpl = get_markup_template('match.tpl'); foreach($j->results as $jj) { - + $o .= replace_macros($tpl,array( '$url' => zrl($jj->url), '$name' => $jj->name, - '$photo' => $jj->photo, + '$photo' => proxy_url($jj->photo), '$tags' => $jj->tags )); } } else { info( t('No matches') . EOL); - } + } } diff --git a/view/templates/match.tpl b/view/templates/match.tpl index f4bbc3c1bb..32f046e6aa 100644 --- a/view/templates/match.tpl +++ b/view/templates/match.tpl @@ -2,7 +2,7 @@
diff --git a/view/templates/peoplefind.tpl b/view/templates/peoplefind.tpl index de8cd011b4..45c4c0b622 100644 --- a/view/templates/peoplefind.tpl +++ b/view/templates/peoplefind.tpl @@ -2,7 +2,7 @@

{{$findpeople}}

{{$desc}}
-
+
-- 2.39.5