diff options
author | RedMatrix <info@friendica.com> | 2014-11-18 08:49:54 +1100 |
---|---|---|
committer | RedMatrix <info@friendica.com> | 2014-11-18 08:49:54 +1100 |
commit | e59f7cc198fb038cd8344c2d403b423d57300a96 (patch) | |
tree | d0ea0a2e6f6854537c20b545a92e006848524b88 /mod | |
parent | de1d24c80c54e4ba7045fd509bf0e4a260419bd9 (diff) | |
parent | ece9819b4d830296474c05bb89161266f6298405 (diff) | |
download | volse-hubzilla-e59f7cc198fb038cd8344c2d403b423d57300a96.tar.gz volse-hubzilla-e59f7cc198fb038cd8344c2d403b423d57300a96.tar.bz2 volse-hubzilla-e59f7cc198fb038cd8344c2d403b423d57300a96.zip |
Merge pull request #697 from pafcu/master
Fix dirsearch parser to not get confused by logic terms in values and to ...
Diffstat (limited to 'mod')
-rw-r--r-- | mod/dirsearch.php | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/mod/dirsearch.php b/mod/dirsearch.php index dea34c566..52d953707 100644 --- a/mod/dirsearch.php +++ b/mod/dirsearch.php @@ -282,35 +282,38 @@ function dir_parse_query($s) { if($all) { foreach($all as $q) { - if($q === 'and') { - $curr['logic'] = 'and'; - continue; - } - if($q === 'or') { - $curr['logic'] = 'or'; - continue; - } - if($q === 'not') { - $curr['logic'] .= ' not'; - continue; - } - if(strpos($q,'=')) { - if(! isset($curr['logic'])) + if($quoted_string === false) { + if($q === 'and') { + $curr['logic'] = 'and'; + continue; + } + if($q === 'or') { $curr['logic'] = 'or'; - $curr['field'] = trim(substr($q,0,strpos($q,'='))); - $curr['value'] = trim(substr($q,strpos($q,'=')+1)); - if(strpos($curr['value'],'"') !== false) { - $quoted_string = true; - $curr['value'] = substr($curr['value'],strpos($curr['value'],'"')+1); + continue; } - else { - $ret[] = $curr; - $curr = array(); - $continue; + if($q === 'not') { + $curr['logic'] .= ' not'; + continue; + } + if(strpos($q,'=')) { + if(! isset($curr['logic'])) + $curr['logic'] = 'or'; + $curr['field'] = trim(substr($q,0,strpos($q,'='))); + $curr['value'] = trim(substr($q,strpos($q,'=')+1)); + if($curr['value'][0] == '"' && $curr['value'][strlen($curr['value'])-1] != '"') { + $quoted_string = true; + $curr['value'] = substr($curr['value'],1); + continue; + } + else { + $ret[] = $curr; + $curr = array(); + continue; + } } } - elseif($quoted_string) { - if(strpos($q,'"') !== false) { + else { + if($q[strlen($q)-1] == '"') { $curr['value'] .= ' ' . str_replace('"','',trim($q)); $ret[] = $curr; $curr = array(); |