mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #173 from chillu/gridfield-config-getcomponents
GridFieldConfig->getComponentsByType() and "default config" change
This commit is contained in:
commit
c2c0e1b4b6
@ -87,7 +87,7 @@ class GridField extends FormField {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!$config) {
|
if(!$config) {
|
||||||
$this->config = $this->getDefaultConfig();
|
$this->config = GridFieldConfig_Base::create();
|
||||||
} else {
|
} else {
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
}
|
}
|
||||||
@ -142,20 +142,6 @@ class GridField extends FormField {
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a default configuration for this GridField
|
|
||||||
*
|
|
||||||
* @return GridFieldConfig
|
|
||||||
*/
|
|
||||||
protected function getDefaultConfig() {
|
|
||||||
$config = GridFieldConfig::create();
|
|
||||||
$config->addComponent(new GridFieldSortableHeader());
|
|
||||||
$config->addComponent(new GridFieldFilter());
|
|
||||||
$config->addComponent(new GridFieldDefaultColumns());
|
|
||||||
$config->addComponent(new GridFieldPaginator());
|
|
||||||
return $config;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Require the default css styling
|
* Require the default css styling
|
||||||
*/
|
*/
|
||||||
|
@ -23,7 +23,7 @@ class GridFieldConfig {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
;
|
$this->components = new ArrayList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addComponent(GridFieldComponent $component) {
|
public function addComponent(GridFieldComponent $component) {
|
||||||
@ -32,8 +32,7 @@ class GridFieldConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* @return ArrayList Of GridFieldComponent
|
||||||
* @return ArrayList
|
|
||||||
*/
|
*/
|
||||||
public function getComponents() {
|
public function getComponents() {
|
||||||
if(!$this->components) {
|
if(!$this->components) {
|
||||||
@ -41,6 +40,32 @@ class GridFieldConfig {
|
|||||||
}
|
}
|
||||||
return $this->components;
|
return $this->components;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all components extending a certain class, or implementing a certain interface.
|
||||||
|
*
|
||||||
|
* @param String Class name or interface
|
||||||
|
* @return ArrayList Of GridFieldComponent
|
||||||
|
*/
|
||||||
|
public function getComponentsByType($type) {
|
||||||
|
$components = new ArrayList();
|
||||||
|
foreach($this->components as $component) {
|
||||||
|
if($component instanceof $type) $components->push($component);
|
||||||
|
}
|
||||||
|
return $components;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first available component with the given class or interface.
|
||||||
|
*
|
||||||
|
* @param String ClassName
|
||||||
|
* @return GridFieldComponent
|
||||||
|
*/
|
||||||
|
public function getComponentByType($type) {
|
||||||
|
foreach($this->components as $component) {
|
||||||
|
if($component instanceof $type) return $component;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GridFieldConfig_Base extends GridFieldConfig {
|
class GridFieldConfig_Base extends GridFieldConfig {
|
||||||
@ -60,8 +85,8 @@ class GridFieldConfig_Base extends GridFieldConfig {
|
|||||||
*/
|
*/
|
||||||
public function __construct($itemsPerPage=25) {
|
public function __construct($itemsPerPage=25) {
|
||||||
$this->addComponent(new GridFieldSortableHeader());
|
$this->addComponent(new GridFieldSortableHeader());
|
||||||
|
$this->addComponent(new GridFieldFilter());
|
||||||
$this->addComponent(new GridFieldDefaultColumns());
|
$this->addComponent(new GridFieldDefaultColumns());
|
||||||
$this->addComponent(new GridFieldAction_Edit());
|
|
||||||
$this->addComponent(new GridFieldPaginator($itemsPerPage));
|
$this->addComponent(new GridFieldPaginator($itemsPerPage));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
76
tests/forms/gridfield/GridFieldConfigTest.php
Normal file
76
tests/forms/gridfield/GridFieldConfigTest.php
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @package sapphire
|
||||||
|
* @subpackage tests
|
||||||
|
*/
|
||||||
|
|
||||||
|
class GridFieldConfigTest extends SapphireTest {
|
||||||
|
|
||||||
|
function testGetComponents() {
|
||||||
|
$config = GridFieldConfig::create();
|
||||||
|
$this->assertType('ArrayList', $config->getComponents());
|
||||||
|
$this->assertEquals($config->getComponents()->Count(), 0);
|
||||||
|
|
||||||
|
$config
|
||||||
|
->addComponent($c1 = new GridFieldConfigTest_MyComponent())
|
||||||
|
->addComponent($c2 = new GridFieldConfigTest_MyOtherComponent())
|
||||||
|
->addComponent($c3 = new GridFieldConfigTest_MyOtherComponent());
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
new ArrayList(array($c1, $c2, $c3)),
|
||||||
|
$config->getComponents()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testGetComponentsByType() {
|
||||||
|
$config = GridFieldConfig::create()
|
||||||
|
->addComponent($c1 = new GridFieldConfigTest_MyComponent())
|
||||||
|
->addComponent($c2 = new GridFieldConfigTest_MyOtherComponent())
|
||||||
|
->addComponent($c3 = new GridFieldConfigTest_MyOtherComponent());
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
new ArrayList(array($c1)),
|
||||||
|
$config->getComponentsByType('GridFieldConfigTest_MyComponent')
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
new ArrayList(array($c2, $c3)),
|
||||||
|
$config->getComponentsByType('GridFieldConfigTest_MyOtherComponent')
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
new ArrayList(array($c1, $c2, $c3)),
|
||||||
|
$config->getComponentsByType('GridField_URLHandler')
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
new ArrayList(),
|
||||||
|
$config->getComponentsByType('GridFieldConfigTest_UnknownComponent')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testGetComponentByType() {
|
||||||
|
$config = GridFieldConfig::create()
|
||||||
|
->addComponent($c1 = new GridFieldConfigTest_MyComponent())
|
||||||
|
->addComponent($c2 = new GridFieldConfigTest_MyOtherComponent())
|
||||||
|
->addComponent($c3 = new GridFieldConfigTest_MyOtherComponent());
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$c1,
|
||||||
|
$config->getComponentByType('GridFieldConfigTest_MyComponent')
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
$c2,
|
||||||
|
$config->getComponentByType('GridFieldConfigTest_MyOtherComponent')
|
||||||
|
);
|
||||||
|
$this->assertNull(
|
||||||
|
$config->getComponentByType('GridFieldConfigTest_UnknownComponent')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class GridFieldConfigTest_MyComponent implements GridField_URLHandler, TestOnly {
|
||||||
|
function getURLHandlers($gridField) {return array();}
|
||||||
|
}
|
||||||
|
|
||||||
|
class GridFieldConfigTest_MyOtherComponent implements GridField_URLHandler, TestOnly {
|
||||||
|
function getURLHandlers($gridField) {return array();}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user