Skip to content

Commit

Permalink
MNT Object for Nested GridField testing
Browse files Browse the repository at this point in the history
  • Loading branch information
Sabina Talipova committed May 24, 2024
1 parent 3b2b4c6 commit 9e4a484
Show file tree
Hide file tree
Showing 7 changed files with 176 additions and 0 deletions.
13 changes: 13 additions & 0 deletions _config/extensions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,19 @@ SilverStripe\FrameworkTest\Model\Employee:
extensions:
- SilverStripe\FrameworkTest\Extension\TestDataObjectExtension

SilverStripe\FrameworkTest\Fields\NestedGridField\RootNode:
extensions:
- SilverStripe\FrameworkTest\Extension\TestDataObjectExtension
SilverStripe\FrameworkTest\Fields\NestedGridField\BranchNode:
extensions:
- SilverStripe\FrameworkTest\Extension\TestDataObjectExtension
SilverStripe\FrameworkTest\Fields\NestedGridField\LeafNode:
extensions:
- SilverStripe\FrameworkTest\Extension\TestDataObjectExtension
SilverStripe\FrameworkTest\Fields\NestedGridField\NonRelationalData:
extensions:
- SilverStripe\FrameworkTest\Extension\TestDataObjectExtension

SilverStripe\ORM\DatabaseAdmin:
extensions:
- SilverStripe\FrameworkTest\GridFieldArbitraryData\DatabaseBuildExtension
Expand Down
38 changes: 38 additions & 0 deletions code/fields/NestedGridField/BranchNode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace SilverStripe\FrameworkTest\Fields\NestedGridField;

use SilverStripe\Forms\GridField\GridFieldConfig;
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
use SilverStripe\ORM\DataObject;
use Symbiote\GridFieldExtensions\GridFieldNestedForm;

class BranchNode extends DataObject
{
private static $table_name = 'NestedGridField_BranchNode';

private static $db = [
'Name' => 'Varchar(50)',
'Category' => 'Varchar(50)',
];

private static $has_one = [
'RootNode' => RootNode::class,
];

private static $has_many = [
'LeafNodes' => LeafNode::class,
];

private static $summary_fields = [
'Name',
'Category',
];

public function getNestedConfig(): GridFieldConfig
{
$config = new GridFieldConfig_RecordEditor();
$config->addComponent(GridFieldNestedForm::create()->setRelationName('LeafNodes'));
return $config;
}
}
24 changes: 24 additions & 0 deletions code/fields/NestedGridField/LeafNode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace SilverStripe\FrameworkTest\Fields\NestedGridField;

use SilverStripe\ORM\DataObject;

class LeafNode extends DataObject
{
private static $table_name = 'NestedGridField_LeafNode';

private static $db = [
'Name' => 'Varchar(50)',
'Category'=>'Varchar(255)',
];

private static $has_one = [
'BranchNode' => BranchNode::class,
];

private static $summary_fields = [
'Name',
'Category',
];
}
40 changes: 40 additions & 0 deletions code/fields/NestedGridField/NestedGridFieldAdmin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace SilverStripe\FrameworkTest\Fields\NestedGridField;

use RuntimeException;
use SilverStripe\Admin\ModelAdmin;
use SilverStripe\Forms\GridField\GridFieldConfig;
use Symbiote\GridFieldExtensions\GridFieldNestedForm;

class NestedGridFieldAdmin extends ModelAdmin
{
private static string $url_segment = 'nested-gridfield-section';
private static string $menu_title = 'Nested GridField Section';
private static string $menu_icon_class = 'font-icon-block-banner';

private static array $managed_models = [
'root-nodes' => [
'title' => 'Root Nodes',
'dataClass' => RootNode::class,
],
'non-relational-data' => [
'title' => 'Non-Relational Data',
'dataClass' => NonRelationalData::class,
],
];

protected function getGridFieldConfig(): GridFieldConfig
{
$config = parent::getGridFieldConfig();
if ($this->modelClass === RootNode::class) {
$config->addComponent(GridFieldNestedForm::create()->setRelationName('BranchNodes'));
} else if ($this->modelClass === NonRelationalData::class) {
$config->addComponent(GridFieldNestedForm::create()->setRelationName('getList'));
} else {
throw new RuntimeException("Unexpected Model name: {$this->tab}");
}

return $config;
}
}
26 changes: 26 additions & 0 deletions code/fields/NestedGridField/NonRelationalData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace SilverStripe\FrameworkTest\Fields\NestedGridField;

use SilverStripe\FrameworkTest\Model\Company;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject;

class NonRelationalData extends DataObject
{
private static $table_name = 'NestedGridField_NonRelationalData';

private static $db = [
'Name' => 'Varchar(50)',
];

public function getList() {
$list = ArrayList::create();
$data = Company::get()->byIDs([1,2,3,4,5]);
foreach ($data as $value) {
$list->push($value);
}

return $list;
}
}
18 changes: 18 additions & 0 deletions code/fields/NestedGridField/RootNode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace SilverStripe\FrameworkTest\Fields\NestedGridField;

use SilverStripe\ORM\DataObject;

class RootNode extends DataObject
{
private static $table_name = 'NestedGridField_RootNode';

private static $db = [
'Name' => 'Varchar(50)',
];

private static $has_many = [
'BranchNodes' => BranchNode::class,
];
}
17 changes: 17 additions & 0 deletions code/fields/NestedGridField/SecurityAdminExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace SilverStripe\FrameworkTest\Fields\NestedGridField;

use SilverStripe\Core\Extension;
use SilverStripe\Security\Group;
use Symbiote\GridFieldExtensions\GridFieldNestedForm;

class SecurityAdminExtension extends Extension
{
public function updateGridFieldConfig($config)
{
if ($this->owner->getModelClass() === Group::class) {
$config->addComponent(GridFieldNestedForm::create()->setRelationName('Members'));
}
}
}

0 comments on commit 9e4a484

Please sign in to comment.