mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #8621 from open-sausages/pulls/4.3/tweak-site-tree-search
FIX Explicity mark nodes when searching
This commit is contained in:
commit
84c8dace7d
@ -499,6 +499,17 @@ class TreeDropdownField extends FormField
|
||||
// Begin marking
|
||||
$markingSet->markPartialTree();
|
||||
|
||||
// Explicitely mark our search results if necessary
|
||||
foreach ($this->searchIds as $id => $marked) {
|
||||
if ($marked) {
|
||||
$object = $this->objectForKey($id);
|
||||
if (!$object) {
|
||||
continue;
|
||||
}
|
||||
$markingSet->markToExpose($object);
|
||||
}
|
||||
}
|
||||
|
||||
// Allow to pass values to be selected within the ajax request
|
||||
$value = $request->requestVar('forceValue') ?: $this->value;
|
||||
if ($value && ($values = preg_split('/,\s*/', $value))) {
|
||||
|
@ -9,12 +9,17 @@ use SilverStripe\Dev\CSSContentParser;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
use SilverStripe\Forms\TreeDropdownField;
|
||||
use SilverStripe\ORM\Tests\HierarchyTest\TestObject;
|
||||
|
||||
class TreeDropdownFieldTest extends SapphireTest
|
||||
{
|
||||
|
||||
protected static $fixture_file = 'TreeDropdownFieldTest.yml';
|
||||
|
||||
protected static $extra_dataobjects = [
|
||||
TestObject::class
|
||||
];
|
||||
|
||||
public function testSchemaStateDefaults()
|
||||
{
|
||||
$field = new TreeDropdownField('TestTree', 'Test tree', Folder::class);
|
||||
@ -97,6 +102,38 @@ class TreeDropdownFieldTest extends SapphireTest
|
||||
);
|
||||
}
|
||||
|
||||
public function testTreeSearchJsonFlatlistWithLowNodeThreshold()
|
||||
{
|
||||
// Initialise our TreeDropDownField
|
||||
$field = new TreeDropdownField('TestTree', 'Test tree', TestObject::class);
|
||||
$field->config()->set('node_threshold_total', 2);
|
||||
|
||||
// Search for all Test object matching our criteria
|
||||
$request = new HTTPRequest(
|
||||
'GET',
|
||||
'url',
|
||||
['search' => 'MatchSearchCriteria', 'format' => 'json', 'flatList' => '1']
|
||||
);
|
||||
$request->setSession(new Session([]));
|
||||
$response = $field->tree($request);
|
||||
$tree = json_decode($response->getBody(), true);
|
||||
$actualNodeIDs = array_column($tree['children'], 'id');
|
||||
|
||||
|
||||
// Get the list of expected node IDs from the YML Fixture
|
||||
$expectedNodeIDs = array_map(
|
||||
function ($key) {
|
||||
return $this->objFromFixture(TestObject::class, $key)->ID;
|
||||
},
|
||||
['zero', 'oneA', 'twoAi', 'three'] // Those are the identifiers of the object we expect our search to find
|
||||
);
|
||||
|
||||
sort($actualNodeIDs);
|
||||
sort($expectedNodeIDs);
|
||||
|
||||
$this->assertEquals($expectedNodeIDs, $actualNodeIDs);
|
||||
}
|
||||
|
||||
public function testTreeSearch()
|
||||
{
|
||||
$field = new TreeDropdownField('TestTree', 'Test tree', Folder::class);
|
||||
|
@ -8,6 +8,7 @@ SilverStripe\Assets\Folder:
|
||||
folder1-subfolder1:
|
||||
Name: FileTest-folder1-subfolder1
|
||||
ParentID: =>SilverStripe\Assets\Folder.folder1
|
||||
|
||||
SilverStripe\Assets\File:
|
||||
asdf:
|
||||
Filename: assets/FileTest.txt
|
||||
@ -24,3 +25,40 @@ SilverStripe\Assets\File:
|
||||
Filename: assets/FileTest-folder1/File1.txt
|
||||
Name: File1.txt
|
||||
ParentID: =>SilverStripe\Assets\Folder.folder1
|
||||
|
||||
SilverStripe\ORM\Tests\HierarchyTest\TestObject:
|
||||
zero:
|
||||
Title: Zero MatchSearchCriteria
|
||||
zeroA:
|
||||
Title: Child A of Zero
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.zero
|
||||
zeroB:
|
||||
Title: Child B of Zero
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.zero
|
||||
zeroC:
|
||||
Title: Child C of Zero
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.zero
|
||||
one:
|
||||
Title: One
|
||||
oneA:
|
||||
Title: Child A of One MatchSearchCriteria
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.one
|
||||
oneB:
|
||||
Title: Child B of One
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.one
|
||||
oneC:
|
||||
Title: Child C of One
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.one
|
||||
oneD:
|
||||
Title: Child C of One
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.one
|
||||
two:
|
||||
Title: Two
|
||||
twoA:
|
||||
Title: Child A of Two
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.two
|
||||
twoAi:
|
||||
Title: Grandchild i of Child A of Two MatchSearchCriteria
|
||||
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.twoA
|
||||
three:
|
||||
Title: Three MatchSearchCriteria
|
||||
|
Loading…
Reference in New Issue
Block a user