Fix bug where fields + note was not creating space, and therefore some regex where not working

This commit is contained in:
Bofh 2022-12-17 02:52:48 +01:00
parent 6be8bd5564
commit 959a26c8ba
2 changed files with 70 additions and 3 deletions

View File

@ -189,7 +189,7 @@ if (isset($_GET['profile']) && trim($_GET['profile']) != '')
if (gettype($a_fields) === 'array') if (gettype($a_fields) === 'array')
foreach ($a_fields as $field) foreach ($a_fields as $field)
$fields .= $field['name'].' '.$field['value'].' '; $fields .= $field['name'].' '.$field['value'].' ';
$a_note = trim($fields) . $a_note; $a_note = trim(trim($fields) . ' ' . $a_note);
if ($qt === 'empty') { if ($qt === 'empty') {
if ($a_note === '') { if ($a_note === '') {
@ -202,6 +202,8 @@ if (isset($_GET['profile']) && trim($_GET['profile']) != '')
continue; continue;
$matches = false; $matches = false;
$debug_search = (isset($_GET['debug_search']) && $account['id'] === trim($_GET['debug_search']));
if ($enable_caching && isset($match_data[$account['id']])) { if ($enable_caching && isset($match_data[$account['id']])) {
$matches = $match_data[$account['id']]; $matches = $match_data[$account['id']];
} else if ($qt === 'simple') { } else if ($qt === 'simple') {
@ -221,7 +223,7 @@ if (isset($_GET['profile']) && trim($_GET['profile']) != '')
} }
} }
} else if ($qt === 'expr') } else if ($qt === 'expr')
$matches = matches_comparing_expression($q, $a_note); $matches = matches_comparing_expression($q, $a_note, $debug_search);
if ($user_filter === 'remote' && $enable_caching) if ($user_filter === 'remote' && $enable_caching)
$match_data[$account['id']] = $matches; $match_data[$account['id']] = $matches;

View File

@ -453,11 +453,20 @@ function parse_comparing_expression($expr) {
]; ];
} }
function matches_comparing_expression($expr, $text) { function matches_comparing_expression($expr, $text, $debug=false) {
if (gettype($expr) === 'string') if (gettype($expr) === 'string')
$expr = parse_comparing_expression($expr); $expr = parse_comparing_expression($expr);
$result = $expr['original']; $result = $expr['original'];
if ($debug) {
echo '<h2>Original</h2>';
echo '<pre>'.$text.'</pre>';
}
$text = normalize_for_search($text); $text = normalize_for_search($text);
if ($debug) {
echo '<h2>Normalized</h2>';
echo '<pre>'.$text.'</pre>';
echo '<br><br>';
}
$text_words = explode(' ', $text); $text_words = explode(' ', $text);
foreach ($expr['parsed'] as $t) foreach ($expr['parsed'] as $t)
{ {
@ -479,6 +488,16 @@ function matches_comparing_expression($expr, $text) {
} }
} }
$bool = $hasall; $bool = $hasall;
if ($debug) {
echo '<br><br>';
echo '<h3>words</h3>';
echo '<pre>';
echo $content;
echo '</pre>';
echo '<br>Result: ';
var_dump($bool);
echo '<br>';
}
break; break;
case 'anyword': case 'anyword':
@ -492,6 +511,16 @@ function matches_comparing_expression($expr, $text) {
} }
} }
$bool = $hasany; $bool = $hasany;
if ($debug) {
echo '<br><br>';
echo '<h3>hasany</h3>';
echo '<pre>';
echo $content;
echo '</pre>';
echo '<br>Result: ';
var_dump($bool);
echo '<br>';
}
break; break;
case 'has': case 'has':
@ -499,7 +528,19 @@ function matches_comparing_expression($expr, $text) {
case 'contains': case 'contains':
$a = str_replace(' ', '', $text); $a = str_replace(' ', '', $text);
$b = str_replace(' ', '', normalize_for_search($content)); $b = str_replace(' ', '', normalize_for_search($content));
if ($debug) {
echo '<br><br>';
echo '<h3>contains</h3>';
echo '<pre>';
echo $content;
echo '</pre>';
}
$bool = strpos($a, $b) !== false; $bool = strpos($a, $b) !== false;
if ($debug) {
echo '<br>Result: ';
var_dump($bool);
echo '<br>';
}
unset($a); unset($b); unset($a); unset($b);
break; break;
@ -528,7 +569,19 @@ function matches_comparing_expression($expr, $text) {
$content = '^.*'.$content; $content = '^.*'.$content;
if ($content[strlen($content)-1] != '$') if ($content[strlen($content)-1] != '$')
$content .= '.*$'; $content .= '.*$';
if ($debug) {
echo '<br><br>';
echo '<h3>regex</h3>';
echo '<pre>';
echo $content;
echo '</pre>';
}
$bool = preg_match('#'.$content.'#', $text) === 1; $bool = preg_match('#'.$content.'#', $text) === 1;
if ($debug) {
echo '<br>Result: ';
var_dump($bool);
echo '<br>';
}
break; break;
} }
@ -539,7 +592,19 @@ function matches_comparing_expression($expr, $text) {
$result = str_replace('NOT ', '!', $result); $result = str_replace('NOT ', '!', $result);
$result = str_replace('NOT', '!', $result); $result = str_replace('NOT', '!', $result);
try { try {
if ($debug) {
echo '<br><hr>';
echo '<h3>Final result</h3>';
echo '<br>eval: ';
var_dump($result);
}
eval('$result = '.$result.';'); eval('$result = '.$result.';');
if ($debug) {
echo '<br>';
echo '<br>result: ';
var_dump($result);
die;
}
} catch (\Throwable $e) { } catch (\Throwable $e) {
return apiresult(['error' => 'Query contains errors, please correct it and try again.']); return apiresult(['error' => 'Query contains errors, please correct it and try again.']);
} }