aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRedMatrix <info@friendica.com>2014-11-18 08:49:54 +1100
committerRedMatrix <info@friendica.com>2014-11-18 08:49:54 +1100
commite59f7cc198fb038cd8344c2d403b423d57300a96 (patch)
treed0ea0a2e6f6854537c20b545a92e006848524b88
parentde1d24c80c54e4ba7045fd509bf0e4a260419bd9 (diff)
parentece9819b4d830296474c05bb89161266f6298405 (diff)
downloadvolse-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 ...
-rw-r--r--mod/dirsearch.php53
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();