Fixed single word quoted search terms

Fixes #170
This commit is contained in:
Dan Brown 2016-08-25 17:17:26 +01:00
parent f2ceba978a
commit f83de5f834
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 17 additions and 7 deletions

View File

@ -167,7 +167,8 @@ class Entity extends Ownable
foreach ($terms as $key => $term) {
$term = htmlentities($term, ENT_QUOTES);
$term = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $term);
if (preg_match('/\s/', $term)) {
if (preg_match('/&quot;.*?&quot;/', $term)) {
$term = str_replace('&quot;', '', $term);
$exactTerms[] = '%' . $term . '%';
$term = '"' . $term . '"';
} else {
@ -206,5 +207,5 @@ class Entity extends Ownable
return $search->orderBy($orderBy, 'desc');
}
}

View File

@ -168,15 +168,16 @@ class EntityRepo
* @param $termString
* @return array
*/
protected function prepareSearchTerms($termString)
public function prepareSearchTerms($termString)
{
$termString = $this->cleanSearchTermString($termString);
preg_match_all('/"(.*?)"/', $termString, $matches);
preg_match_all('/(".*?")/', $termString, $matches);
$terms = [];
if (count($matches[1]) > 0) {
$terms = $matches[1];
foreach ($matches[1] as $match) {
$terms[] = $match;
}
$termString = trim(preg_replace('/"(.*?)"/', '', $termString));
} else {
$terms = [];
}
if (!empty($termString)) $terms = array_merge($terms, explode(' ', $termString));
return $terms;

View File

@ -76,6 +76,14 @@ class EntitySearchTest extends TestCase
->see('Chapter Search Results')->seeInElement('.entity-list', $chapter->name);
}
public function test_search_quote_term_preparation()
{
$termString = '"192" cat "dog hat"';
$repo = $this->app[\BookStack\Repos\EntityRepo::class];
$preparedTerms = $repo->prepareSearchTerms($termString);
$this->assertTrue($preparedTerms === ['"192"','"dog hat"', 'cat']);
}
public function test_books_search_listing()
{
$book = \BookStack\Book::all()->last();