aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorredmatrix <mike@macgirvin.com>2016-09-28 20:55:15 -0700
committerredmatrix <mike@macgirvin.com>2016-09-28 20:55:15 -0700
commit5b6c2c32bff6c68ed5a35acf46f932aec6dad01d (patch)
treea715d586de0a256e82b58a9b0e560334eba1648e
parent245c2d4eed17a7c34c2b6d63f3db65b0f573b1f3 (diff)
downloadvolse-hubzilla-5b6c2c32bff6c68ed5a35acf46f932aec6dad01d.tar.gz
volse-hubzilla-5b6c2c32bff6c68ed5a35acf46f932aec6dad01d.tar.bz2
volse-hubzilla-5b6c2c32bff6c68ed5a35acf46f932aec6dad01d.zip
Bring the saved search feature in line with the spec, and publish the feature spec.
-rw-r--r--Zotlabs/Module/Search_ac.php95
-rw-r--r--doc/feature/saved_search.bb19
2 files changed, 76 insertions, 38 deletions
diff --git a/Zotlabs/Module/Search_ac.php b/Zotlabs/Module/Search_ac.php
index a3bc18054..24b724c5d 100644
--- a/Zotlabs/Module/Search_ac.php
+++ b/Zotlabs/Module/Search_ac.php
@@ -18,49 +18,68 @@ class Search_ac extends \Zotlabs\Web\Controller {
$search = $_REQUEST['query'];
}
+ $do_people = true;
+ $do_tags = true;
+
+ if(substr($search,0,1) === '@') {
+ $do_tags = false;
+ $search = substr($search,1);
+ }
+
+ if(substr($search,0,1) === '#') {
+ $do_people = false;
+ $search = substr($search,1);
+ }
+
// Priority to people searches
if ($search) {
- $people_sql_extra = protect_sprintf(" AND `xchan_name` LIKE '%". dbesc($search) . "%' ");
- $tag_sql_extra = protect_sprintf(" AND term LIKE '%". dbesc($search) . "%' ");
+ $people_sql_extra = protect_sprintf(" AND xchan_name LIKE '%" . dbesc($search) . "%' ");
+ $tag_sql_extra = protect_sprintf(" AND term LIKE '%" . dbesc($search) . "%' ");
}
-
-
- $r = q("SELECT `abook_id`, `xchan_name`, `xchan_photo_s`, `xchan_url`, `xchan_addr` FROM `abook` left join xchan on abook_xchan = xchan_hash WHERE abook_channel = %d
- $people_sql_extra
- ORDER BY `xchan_name` ASC ",
- intval(local_channel())
- );
-
- $results = array();
- if($r) {
- foreach($r as $g) {
- $results[] = array(
- "photo" => $g['xchan_photo_s'],
- "name" => '@'.$g['xchan_name'],
- "id" => $g['abook_id'],
- "link" => $g['xchan_url'],
- "label" => '',
- "nick" => '',
- );
+
+ $results = [];
+
+ if($do_people) {
+ $r = q("SELECT abook_id, xchan_name, xchan_photo_s, xchan_url, xchan_addr FROM abook
+ left join xchan on abook_xchan = xchan_hash WHERE abook_channel = %d
+ $people_sql_extra
+ ORDER BY xchan_name ASC ",
+ intval(local_channel())
+ );
+
+ if($r) {
+ foreach($r as $g) {
+ $results[] = [
+ 'photo' => $g['xchan_photo_s'],
+ 'name' => '@' . $g['xchan_name'],
+ 'id' => $g['abook_id'],
+ 'link' => $g['xchan_url'],
+ 'label' => '',
+ 'nick' => '',
+ ];
+ }
}
}
-
- $r = q("select distinct term, tid, url from term where ttype in ( %d, %d ) $tag_sql_extra group by term order by term asc",
- intval(TERM_HASHTAG),
- intval(TERM_COMMUNITYTAG)
- );
-
- if(count($r)) {
- foreach($r as $g) {
- $results[] = array(
- "photo" => z_root() . '/images/hashtag.png',
- "name" => '#'.$g['term'],
- "id" => $g['tid'],
- "link" => $g['url'],
- "label" => '',
- "nick" => '',
- );
+
+ if($do_tags) {
+ $r = q("select distinct term, tid, url from term
+ where ttype in ( %d, %d ) $tag_sql_extra group by term order by term asc",
+ intval(TERM_HASHTAG),
+ intval(TERM_COMMUNITYTAG)
+ );
+
+ if($r) {
+ foreach($r as $g) {
+ $results[] = [
+ 'photo' => z_root() . '/images/hashtag.png',
+ 'name' => '#' . $g['term'],
+ 'id' => $g['tid'],
+ 'link' => $g['url'],
+ 'label' => '',
+ 'nick' => '',
+ ];
+ }
}
}
@@ -72,7 +91,7 @@ class Search_ac extends \Zotlabs\Web\Controller {
);
echo json_encode($o);
- logger('search_ac: ' . print_r($x,true),LOGGER_ALL,LOG_INFO);
+ logger('search_ac: ' . print_r($x,true),LOGGER_DATA,LOG_INFO);
killme();
}
diff --git a/doc/feature/saved_search.bb b/doc/feature/saved_search.bb
new file mode 100644
index 000000000..160dad9e9
--- /dev/null
+++ b/doc/feature/saved_search.bb
@@ -0,0 +1,19 @@
+[h2]Saved Searches[/h2]
+
+In order to quickly find information, the 'saved search' widget may be used. This widget may be presented as a sidebar tool on your network page and possibly from your channel page. It is differentiated from the 'navigation bar' search tool in that it does not search the entire site, but only the subset of information available to your channel.
+
+Additionally the search terms you provide may activate a one-tme search or be saved in a list for re-use. Saving the search item also invokes the search in addition to adding it to the saved list (which is displayed below the search text entry box). Any item in the list may be discarded if it is no longer needed.
+
+The saved search widget will provide autocompletion of channels (the results are prefixed with '@'), and hashtags (prefixed with '#'). You do not need to enter these tags; although entering the desired tag will reduce the autocomplete results to only hold the relevant information. The behaviour maps as follows:
+
+[ul]
+
+[li]@name - search your network stream for posts or comments written by 'name'. This will also change the post editor permissions to include only 'name'; as if it was a privacy group.[/li]
+
+[li]#hashtag - search you network stream for posts containing #hashtag.[/li]
+
+[li]text - search your network stream for posts containing 'text'.[/li]
+
+
+[/li]
+