diff --git a/code/sudo-mode/MemberRelationsPageExtension.php b/code/sudo-mode/MemberRelationsPageExtension.php new file mode 100644 index 0000000..3a576eb --- /dev/null +++ b/code/sudo-mode/MemberRelationsPageExtension.php @@ -0,0 +1,57 @@ + + */ +class MemberRelationsPageExtension extends Extension +{ + private static $has_many = [ + 'HasManyMembers' => Member::class + ]; + + private static $many_many = [ + 'ManyManyMembers' => Member::class + ]; + + public function updateCMSFields(&$fields) + { + $gridField = new GridField('HasManyMembers', 'HasManyMembers', $this->owner->HasManyMembers()); + $config = GridFieldConfig_RecordEditor::create(); + $gridField->setConfig($config); + $fields->insertAfter('Title', $gridField); + // Intentionally using an ArrayList here to check that the gridfield can handle it + $list = new ArrayList($this->owner->ManyManyMembers()->toArray()); + $gridField = new GridField('ManyManyMembers', 'ManyManyMembers', $list); + $config = GridFieldConfig_RecordEditor::create(); + $gridField->setConfig($config); + $fields->insertAfter('Title', $gridField); + return $fields; + } + + protected function onBeforeWrite() + { + $member = Member::get()->first(); + if (!$member) { + throw new RuntimeException('No Member record found, create one in your test setup'); + } + if ($this->owner->HasManyMembers()->count() === 0) { + $this->owner->HasManyMembers()->add($member); + } + if ($this->owner->ManyManyMembers()->count() === 0) { + $this->owner->ManyManyMembers()->add($member); + } + } +}