diff --git a/docs/en/02_Developer_Guides/00_Model/11_Scaffolding.md b/docs/en/02_Developer_Guides/00_Model/11_Scaffolding.md index 6a9dc8e321d..2e855c72ea4 100644 --- a/docs/en/02_Developer_Guides/00_Model/11_Scaffolding.md +++ b/docs/en/02_Developer_Guides/00_Model/11_Scaffolding.md @@ -20,7 +20,6 @@ use SilverStripe\ORM\DataObject; class MyDataObject extends DataObject { - private static $db = [ 'IsActive' => 'Boolean', 'Title' => 'Varchar', @@ -105,8 +104,8 @@ use SilverStripe\ORM\DataObject; class MyDataObject extends DataObject { - private static $searchable_fields = [ + 'Name', 'BirthDate' => [ 'primary' => false ], @@ -149,7 +148,6 @@ use SilverStripe\ORM\DataObject; class MyDataObject extends DataObject { - private static $searchable_fields = [ 'Name' => 'PartialMatchFilter', 'ProductCode' => NumericField::class @@ -165,7 +163,6 @@ use SilverStripe\ORM\DataObject; class MyDataObject extends DataObject { - private static $searchable_fields = [ 'Name' => [ 'field' => TextField::class, diff --git a/docs/en/04_Changelogs/4.12.0.md b/docs/en/04_Changelogs/4.12.0.md index 6b873d147be..8a7f78f0a4d 100644 --- a/docs/en/04_Changelogs/4.12.0.md +++ b/docs/en/04_Changelogs/4.12.0.md @@ -32,8 +32,8 @@ use SilverStripe\ORM\DataObject; class MyDataObject extends DataObject { - private static $searchable_fields = [ + 'Name', 'BirthDate' => [ 'primary' => false ], diff --git a/lang/en.yml b/lang/en.yml index 37281cf191e..6c42399bb11 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -148,7 +148,7 @@ en: one: 'A Data Object' other: '{count} Data Objects' SINGULARNAME: 'Data Object' - GLOBALSEARCH: 'Global Search' + PRIMARYSEARCH: 'Primary Search' SilverStripe\ORM\FieldType\DBBoolean: ANY: Any NOANSWER: 'No' diff --git a/src/Forms/GridField/GridFieldFilterHeader.php b/src/Forms/GridField/GridFieldFilterHeader.php index d0077fffdc9..e6585b626ea 100755 --- a/src/Forms/GridField/GridFieldFilterHeader.php +++ b/src/Forms/GridField/GridFieldFilterHeader.php @@ -308,6 +308,7 @@ public function getSearchFieldSchema(GridField $gridField) $searchAction = GridField_FormAction::create($gridField, 'filter', false, 'filter', null); $clearAction = GridField_FormAction::create($gridField, 'reset', false, 'reset', null); $schema = [ + 'modelClass' => $gridField->getModelClass(), 'formSchemaUrl' => $schemaUrl, 'name' => $searchField, 'placeholder' => _t(__CLASS__ . '.Search', 'Search "{name}"', ['name' => $name]), diff --git a/src/ORM/Search/SearchContext.php b/src/ORM/Search/SearchContext.php index 721d2bf7428..f8e321bcad7 100644 --- a/src/ORM/Search/SearchContext.php +++ b/src/ORM/Search/SearchContext.php @@ -246,7 +246,7 @@ protected function individualFieldSearch(DataList $query, array $searchableField if ($filter = $this->getFilter($searchField)) { $filter->setModel($this->modelClass); $filter->setValue($searchTerms); - $searchableFieldSpec = $searchableFields[$searchField]; + $searchableFieldSpec = $searchableFields[$searchField] ?? []; return $query->alterDataQuery(function ($dataQuery) use ($filter, $searchableFieldSpec) { $this->applyFilter($filter, $dataQuery, $searchableFieldSpec); }); diff --git a/tests/php/Forms/GridField/GridFieldFilterHeaderTest.php b/tests/php/Forms/GridField/GridFieldFilterHeaderTest.php index 2c721927dc5..cd13e9bc14f 100644 --- a/tests/php/Forms/GridField/GridFieldFilterHeaderTest.php +++ b/tests/php/Forms/GridField/GridFieldFilterHeaderTest.php @@ -16,6 +16,7 @@ use SilverStripe\Forms\Tests\GridField\GridFieldFilterHeaderTest\TeamGroup; use SilverStripe\Forms\Tests\GridField\GridFieldFilterHeaderTest\TestController; use SilverStripe\ORM\DataList; +use SilverStripe\ORM\DataObject; class GridFieldFilterHeaderTest extends SapphireTest { @@ -89,9 +90,12 @@ public function testRenderHeaders() public function testSearchFieldSchema() { $searchSchema = json_decode($this->component->getSearchFieldSchema($this->gridField) ?? ''); + $modelClass = $searchSchema->modelClass; + /** @var DataObject $obj */ + $obj = new $modelClass(); $this->assertEquals('field/testfield/schema/SearchForm', $searchSchema->formSchemaUrl); - $this->assertEquals('Name', $searchSchema->name); + $this->assertEquals($obj->primarySearchFieldName(), $searchSchema->name); $this->assertEquals('Search "Teams"', $searchSchema->placeholder); $this->assertEquals(new \stdClass, $searchSchema->filters); @@ -110,9 +114,12 @@ public function testSearchFieldSchema() ); $this->gridField->setRequest($request); $searchSchema = json_decode($this->component->getSearchFieldSchema($this->gridField) ?? ''); + $modelClass = $searchSchema->modelClass; + /** @var DataObject $obj */ + $obj = new $modelClass(); $this->assertEquals('field/testfield/schema/SearchForm', $searchSchema->formSchemaUrl); - $this->assertEquals('Name', $searchSchema->name); + $this->assertEquals($obj->primarySearchFieldName(), $searchSchema->name); $this->assertEquals('Search "Teams"', $searchSchema->placeholder); $this->assertEquals('test', $searchSchema->filters->Search__Name); $this->assertEquals('place', $searchSchema->filters->Search__City);