mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-22 12:11:51 +08:00
Search: Prevented negated terms filling in UI inputs
Added test to cover.
This commit is contained in:
parent
cd84d08157
commit
966ff91386
|
@ -63,10 +63,20 @@ class SearchOptionSet
|
|||
}
|
||||
|
||||
/**
|
||||
* @return T[]
|
||||
* @return self<T>
|
||||
*/
|
||||
public function negated(): array
|
||||
public function negated(): self
|
||||
{
|
||||
return array_values(array_filter($this->options, fn (SearchOption $option) => $option->negated));
|
||||
$values = array_values(array_filter($this->options, fn (SearchOption $option) => $option->negated));
|
||||
return new self($values);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return self<T>
|
||||
*/
|
||||
public function nonNegated(): self
|
||||
{
|
||||
$values = array_values(array_filter($this->options, fn (SearchOption $option) => !$option->negated));
|
||||
return new self($values);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -244,9 +244,9 @@ class SearchOptions
|
|||
}
|
||||
|
||||
// Negated items
|
||||
array_push($options, ...$this->exacts->negated());
|
||||
array_push($options, ...$this->tags->negated());
|
||||
array_push($options, ...$this->filters->negated());
|
||||
array_push($options, ...$this->exacts->negated()->all());
|
||||
array_push($options, ...$this->tags->negated()->all());
|
||||
array_push($options, ...$this->filters->negated()->all());
|
||||
|
||||
return implode(' ', array_map(fn(SearchOption $o) => $o->toString(), $options));
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<h5>{{ trans('entities.search_advanced') }}</h5>
|
||||
|
||||
@php
|
||||
$filterMap = $options->filters->toValueMap();
|
||||
$filterMap = $options->filters->nonNegated()->toValueMap();
|
||||
@endphp
|
||||
<form method="get" action="{{ url('/search') }}">
|
||||
<h6>{{ trans('entities.search_terms') }}</h6>
|
||||
|
@ -30,10 +30,10 @@
|
|||
</div>
|
||||
|
||||
<h6>{{ trans('entities.search_exact_matches') }}</h6>
|
||||
@include('search.parts.term-list', ['type' => 'exact', 'currentList' => $options->exacts->toValueArray()])
|
||||
@include('search.parts.term-list', ['type' => 'exact', 'currentList' => $options->exacts->nonNegated()->toValueArray()])
|
||||
|
||||
<h6>{{ trans('entities.search_tags') }}</h6>
|
||||
@include('search.parts.term-list', ['type' => 'tags', 'currentList' => $options->tags->toValueArray()])
|
||||
@include('search.parts.term-list', ['type' => 'tags', 'currentList' => $options->tags->nonNegated()->toValueArray()])
|
||||
|
||||
@if(!user()->isGuest())
|
||||
<h6>{{ trans('entities.search_options') }}</h6>
|
||||
|
|
|
@ -577,6 +577,14 @@ class EntitySearchTest extends TestCase
|
|||
$this->withHtml($resp)->assertFieldHasValue('extras', '{updated_by:dan} {created_by:dan} -"dog" -[a=b] -{viewed_by_me}');
|
||||
}
|
||||
|
||||
public function test_negated_searches_dont_show_in_inputs()
|
||||
{
|
||||
$resp = $this->asEditor()->get('/search?term=' . urlencode('-{created_by:me} -[a=b] -"dog"'));
|
||||
$this->withHtml($resp)->assertElementNotExists('input[name="tags[]"][value="a=b"]');
|
||||
$this->withHtml($resp)->assertElementNotExists('input[name="exact[]"][value="dog"]');
|
||||
$this->withHtml($resp)->assertElementNotExists('input[name="filters[created_by]"][value="me"][checked="checked"]');
|
||||
}
|
||||
|
||||
public function test_searches_with_user_filters_using_me_adds_them_into_advanced_search_form()
|
||||
{
|
||||
$resp = $this->asEditor()->get('/search?term=' . urlencode('test {updated_by:me} {created_by:me}'));
|
||||
|
|
|
@ -123,7 +123,7 @@ class SearchOptionsTest extends TestCase
|
|||
|
||||
$options = SearchOptions::fromRequest($request);
|
||||
$this->assertCount(2, $options->tags->all());
|
||||
$this->assertEquals('b=c', $options->tags->negated()[0]->value);
|
||||
$this->assertEquals('b=c', $options->tags->negated()->all()[0]->value);
|
||||
$this->assertEquals('viewed_by_me', $options->filters->all()[0]->getKey());
|
||||
$this->assertTrue($options->filters->all()[0]->negated);
|
||||
$this->assertEquals('dino', $options->exacts->all()[0]->value);
|
||||
|
|
Loading…
Reference in New Issue
Block a user