Skip to content

Commit 23ee7b4

Browse files
Merge branch '1' into 2
2 parents 7cbb50e + f4bcad6 commit 23ee7b4

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace SilverStripe\FrameworkTest\SudoMode;
4+
5+
use RuntimeException;
6+
use SilverStripe\Forms\Form;
7+
use SilverStripe\Core\Extension;
8+
use SilverStripe\Security\Member;
9+
use SilverStripe\Forms\GridField\GridField;
10+
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
11+
use SilverStripe\ORM\ArrayList;
12+
13+
/**
14+
* Extension that adds Member relations on a page to test that sudo-mode
15+
* works on gridfields for relations
16+
*
17+
* @extends Extension<Form>
18+
*/
19+
class MemberRelationsPageExtension extends Extension
20+
{
21+
private static $has_many = [
22+
'HasManyMembers' => Member::class
23+
];
24+
25+
private static $many_many = [
26+
'ManyManyMembers' => Member::class
27+
];
28+
29+
public function updateCMSFields(&$fields)
30+
{
31+
$gridField = new GridField('HasManyMembers', 'HasManyMembers', $this->owner->HasManyMembers());
32+
$config = GridFieldConfig_RecordEditor::create();
33+
$gridField->setConfig($config);
34+
$fields->insertAfter('Title', $gridField);
35+
// Intentionally using an ArrayList here to check that the gridfield can handle it
36+
$list = new ArrayList($this->owner->ManyManyMembers()->toArray());
37+
$gridField = new GridField('ManyManyMembers', 'ManyManyMembers', $list);
38+
$config = GridFieldConfig_RecordEditor::create();
39+
$gridField->setConfig($config);
40+
$fields->insertAfter('Title', $gridField);
41+
return $fields;
42+
}
43+
44+
protected function onBeforeWrite()
45+
{
46+
$member = Member::get()->first();
47+
if (!$member) {
48+
throw new RuntimeException('No Member record found, create one in your test setup');
49+
}
50+
if ($this->owner->HasManyMembers()->count() === 0) {
51+
$this->owner->HasManyMembers()->add($member);
52+
}
53+
if ($this->owner->ManyManyMembers()->count() === 0) {
54+
$this->owner->ManyManyMembers()->add($member);
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)