Skip to content

Commit

Permalink
Merge pull request #226 from creative-commoners/pulls/1/form-sudo-mode
Browse files Browse the repository at this point in the history
NEW Disable form sudo mode
  • Loading branch information
GuySartorelli authored Feb 20, 2025
2 parents 9b79bc9 + 5aac6d9 commit f4bcad6
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions code/sudo-mode/MemberRelationsPageExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

namespace SilverStripe\FrameworkTest\SudoMode;

use RuntimeException;
use SilverStripe\Forms\Form;
use SilverStripe\Core\Extension;
use SilverStripe\Security\Member;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
use SilverStripe\ORM\ArrayList;

/**
* Extension that adds Member relations on a page to test that sudo-mode
* works on gridfields for relations
*
* @extends Extension<Form>
*/
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);
}
}
}

0 comments on commit f4bcad6

Please sign in to comment.