From 08f89ea4b546ee2fe011dac5eeedba8e81b68801 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Fri, 7 Aug 2020 12:30:21 +1200 Subject: [PATCH 1/3] FIX: Fixed handling of uneditable records in GridFieldEditableColumns Fixes #312 --- src/GridFieldEditableColumns.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/GridFieldEditableColumns.php b/src/GridFieldEditableColumns.php index 7dc89cf..cffba22 100644 --- a/src/GridFieldEditableColumns.php +++ b/src/GridFieldEditableColumns.php @@ -56,10 +56,6 @@ class GridFieldEditableColumns extends GridFieldDataColumns implements public function getColumnContent($grid, $record, $col) { - if (!$record->canEdit()) { - return parent::getColumnContent($grid, $record, $col); - } - $fields = $this->getForm($grid, $record)->Fields(); if (!$this->displayFields) { @@ -104,6 +100,10 @@ class GridFieldEditableColumns extends GridFieldDataColumns implements $field->setName($this->getFieldName($field->getName(), $grid, $record)); $field->setValue($value); + if (!$record->canEdit()) { + $field = $field->performReadonlyTransformation(); + } + if ($field instanceof HtmlEditorField) { return $field->FieldHolder(); } From 229a23a2f427b73d4074b0ec5e2a005161f9fa24 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Sun, 16 Aug 2020 15:21:54 +1200 Subject: [PATCH 2/3] FIX: Transfrom editable columns to readonly on a readonly gridfield also. --- src/GridFieldEditableColumns.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GridFieldEditableColumns.php b/src/GridFieldEditableColumns.php index cffba22..10d4cc1 100644 --- a/src/GridFieldEditableColumns.php +++ b/src/GridFieldEditableColumns.php @@ -100,7 +100,7 @@ class GridFieldEditableColumns extends GridFieldDataColumns implements $field->setName($this->getFieldName($field->getName(), $grid, $record)); $field->setValue($value); - if (!$record->canEdit()) { + if ($grid->isReadonly() || !$record->canEdit()) { $field = $field->performReadonlyTransformation(); } From 6becfc2f89e7db2995139950703ef9b343161011 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Sun, 16 Aug 2020 16:29:58 +1200 Subject: [PATCH 3/3] NEW: Add test for GridFieldEditableColumns Also adds a .gitignore to ignore files created by in-module testing. --- .gitignore | 5 ++ tests/GridFieldEditableColumnsTest.php | 94 ++++++++++++++++++++++++++ tests/Stub/StubUnorderable.php | 12 ++++ tests/Stub/TestController.php | 10 +++ 4 files changed, 121 insertions(+) create mode 100644 .gitignore create mode 100644 tests/GridFieldEditableColumnsTest.php create mode 100644 tests/Stub/TestController.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5f70f10 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +vendor/ +resources/ +composer.lock + +assets/ diff --git a/tests/GridFieldEditableColumnsTest.php b/tests/GridFieldEditableColumnsTest.php new file mode 100644 index 0000000..7cb6af3 --- /dev/null +++ b/tests/GridFieldEditableColumnsTest.php @@ -0,0 +1,94 @@ +setModelClass(StubUnorderable::class); + $grid->setList(StubUnorderable::get()); + return $grid; + } + + private function getMockRecord($id, $title) + { + $record = new StubUnorderable(); + $record->ID = $id; + $record->Title = $title; + return $record; + } + + public function testProvidesEditableFieldsInColumns() + { + $grid = $this->getMockGrid(); + $component = new GridFieldEditableColumns(); + $record = $this->getMockRecord(100, "foo"); + + $this->assertEquals( + [ 'Title' ], + $component->getColumnsHandled($grid) + ); + + $record->setCanEdit(true); + $column = $component->getColumnContent($grid, $record, 'Title'); + + $this->assertInstanceOf(DBHTMLText::class, $column); + $this->assertRegExp( + '/]*>/', + $column->getValue() + ); + } + + public function testProvidesReadonlyColumnsForNoneditableRecords() + { + $grid = $this->getMockGrid(); + $component = new GridFieldEditableColumns(); + $record = $this->getMockRecord(100, "testval"); + + $record->setCanEdit(false); + $column = $component->getColumnContent($grid, $record, 'Title'); + + $this->assertInstanceOf(DBHTMLText::class, $column); + $this->assertRegExp( + '/]*>\s*testval\s*<\/span>/', + $column->getValue() + ); + } + + public function testProvidesReadonlyColumnsForReadonlyGrids() + { + $grid = $this->getMockGrid(); + $component = new GridFieldEditableColumns(); + $record = $this->getMockRecord(100, "testval"); + + $record->setCanEdit(true); + $grid = $grid->performReadonlyTransformation(); + + if (!$grid instanceof GridField) { + $this->markTestSkipped('silverstripe/framework <4.2.2 doesn\'t support readonly GridFields'); + } + + $column = $component->getColumnContent($grid, $record, 'Title'); + + $this->assertInstanceOf(DBHTMLText::class, $column); + $this->assertRegExp( + '/]*>\s*testval\s*<\/span>/', + $column->getValue() + ); + } +} diff --git a/tests/Stub/StubUnorderable.php b/tests/Stub/StubUnorderable.php index a1969ab..abed5ec 100644 --- a/tests/Stub/StubUnorderable.php +++ b/tests/Stub/StubUnorderable.php @@ -12,4 +12,16 @@ class StubUnorderable extends DataObject implements TestOnly ]; private static $table_name = 'StubUnorderable'; + + private $canEdit = false; + + public function setCanEdit($canEdit) + { + $this->canEdit = $canEdit; + } + + public function canEdit($member = null) + { + return $this->canEdit; + } } diff --git a/tests/Stub/TestController.php b/tests/Stub/TestController.php new file mode 100644 index 0000000..0e5baeb --- /dev/null +++ b/tests/Stub/TestController.php @@ -0,0 +1,10 @@ +