From a346399fe6d35f9f2b3c854f515a7f302cda421b Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 20 Jul 2017 18:11:47 -0700 Subject: allow wildcard tag and category searches --- Zotlabs/Module/Channel.php | 4 ++-- Zotlabs/Module/Network.php | 4 ++-- include/taxonomy.php | 13 +++++++++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php index 98c1e1d61..430589579 100644 --- a/Zotlabs/Module/Channel.php +++ b/Zotlabs/Module/Channel.php @@ -325,8 +325,8 @@ class Channel extends \Zotlabs\Web\Controller { '$order' => '', '$list' => ((x($_REQUEST,'list')) ? intval($_REQUEST['list']) : 0), '$file' => '', - '$cats' => (($category) ? $category : ''), - '$tags' => (($hashtags) ? $hashtags : ''), + '$cats' => (($category) ? urlencode($category) : ''), + '$tags' => (($hashtags) ? urlencode($hashtags) : ''), '$mid' => $mid, '$verb' => '', '$dend' => $datequery, diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index f2ad77dd7..3a7123a12 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -325,8 +325,8 @@ class Network extends \Zotlabs\Web\Controller { '$xchan' => $xchan, '$order' => $order, '$file' => $file, - '$cats' => $category, - '$tags' => $hashtags, + '$cats' => urlencode($category), + '$tags' => urlencode($hashtags), '$dend' => $datequery, '$mid' => '', '$verb' => $verb, diff --git a/include/taxonomy.php b/include/taxonomy.php index dc0e439e2..46d661581 100644 --- a/include/taxonomy.php +++ b/include/taxonomy.php @@ -46,8 +46,16 @@ function term_query($table,$s,$type = TERM_UNKNOWN, $type2 = '') { function term_item_parent_query($uid,$table,$s,$type = TERM_UNKNOWN, $type2 = '') { + // Allow asterisks for wildcard search + // In theory this means '%' will also do a wildcard search, but there appear to be multiple escape + // issues with '%' in term names and trying to fix this with '\\%' here did not help. + // Ideally I think we want '*' to indicate wildcards and allow '%' literally in names, but that is being + // left for another developer on another day. + + $s = str_replace('*','%',$s); + if($type2) { - $r = q("select parent from item left join term on term.oid = item.id where term.ttype in (%d, %d) and term.term = '%s' and term.uid = %d and term.otype = 1", + $r = q("select parent from item left join term on term.oid = item.id where term.ttype in (%d, %d) and term.term like '%s' and term.uid = %d and term.otype = 1", intval($type), intval($type2), dbesc($s), @@ -55,12 +63,13 @@ function term_item_parent_query($uid,$table,$s,$type = TERM_UNKNOWN, $type2 = '' ); } else { - $r = q("select parent from item left join term on term.oid = item.id where term.ttype = %d and term.term = '%s' and term.uid = %d and term.otype = 1", + $r = q("select parent from item left join term on term.oid = item.id where term.ttype = %d and term.term like '%s' and term.uid = %d and term.otype = 1", intval($type), dbesc($s), intval($uid) ); } + if($r) { $str = ''; foreach($r as $rv) { -- cgit v1.2.3