2012-03-06 22:48:09 +01:00
|
|
|
<?php
|
|
|
|
|
2016-06-15 06:03:16 +02:00
|
|
|
use SilverStripe\ORM\DataObject;
|
2016-08-19 00:51:35 +02:00
|
|
|
use SilverStripe\Dev\CSSContentParser;
|
|
|
|
use SilverStripe\Dev\FunctionalTest;
|
|
|
|
use SilverStripe\Dev\TestOnly;
|
|
|
|
use SilverStripe\Control\Controller;
|
|
|
|
use SilverStripe\Forms\HiddenField;
|
|
|
|
use SilverStripe\Forms\RequiredFields;
|
|
|
|
use SilverStripe\Forms\FieldList;
|
|
|
|
use SilverStripe\Forms\Form;
|
|
|
|
use SilverStripe\Forms\CheckboxField;
|
|
|
|
use SilverStripe\Forms\TextField;
|
|
|
|
use SilverStripe\Forms\GridField\GridFieldDetailForm;
|
|
|
|
use SilverStripe\Forms\GridField\GridField;
|
|
|
|
use SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest;
|
|
|
|
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
|
|
|
|
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
|
|
|
|
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
|
|
|
|
use SilverStripe\Forms\GridField\GridFieldViewButton;
|
|
|
|
use SilverStripe\Forms\GridField\GridFieldEditButton;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-15 06:03:16 +02:00
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
2012-03-09 00:54:02 +01:00
|
|
|
class GridFieldDetailFormTest extends FunctionalTest {
|
2014-01-11 03:40:48 +01:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
protected static $fixture_file = 'GridFieldDetailFormTest.yml';
|
2012-03-06 22:48:09 +01:00
|
|
|
|
|
|
|
protected $extraDataObjects = array(
|
2012-03-09 00:54:02 +01:00
|
|
|
'GridFieldDetailFormTest_Person',
|
2012-03-09 02:37:32 +01:00
|
|
|
'GridFieldDetailFormTest_PeopleGroup',
|
|
|
|
'GridFieldDetailFormTest_Category',
|
2012-03-06 22:48:09 +01:00
|
|
|
);
|
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
public function testValidator() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
|
|
|
|
$response = $this->get('GridFieldDetailFormTest_Controller');
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
2016-07-01 03:37:29 +02:00
|
|
|
$addlinkitem = $parser->getBySelector('.grid-field .new-link');
|
2014-01-11 03:40:48 +01:00
|
|
|
$addlink = (string) $addlinkitem[0]['href'];
|
|
|
|
|
|
|
|
$response = $this->get($addlink);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$addform = $parser->getBySelector('#Form_ItemEditForm');
|
|
|
|
$addformurl = (string) $addform[0]['action'];
|
|
|
|
|
|
|
|
$response = $this->post(
|
|
|
|
$addformurl,
|
|
|
|
array(
|
|
|
|
'FirstName' => 'Jeremiah',
|
|
|
|
'ajax' => 1,
|
|
|
|
'action_doSave' => 1
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$errors = $parser->getBySelector('span.required');
|
|
|
|
$this->assertEquals(1, count($errors));
|
|
|
|
|
|
|
|
$response = $this->post(
|
|
|
|
$addformurl,
|
|
|
|
array(
|
|
|
|
'ajax' => 1,
|
|
|
|
'action_doSave' => 1
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$errors = $parser->getBySelector('span.required');
|
|
|
|
$this->assertEquals(2, count($errors));
|
|
|
|
}
|
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testAddForm() {
|
2012-03-08 01:58:53 +01:00
|
|
|
$this->logInWithPermission('ADMIN');
|
2012-05-28 11:13:42 +02:00
|
|
|
$group = GridFieldDetailFormTest_PeopleGroup::get()
|
2012-04-10 07:05:29 +02:00
|
|
|
->filter('Name', 'My Group')
|
|
|
|
->sort('Name')
|
|
|
|
->First();
|
2012-03-06 22:48:09 +01:00
|
|
|
$count = $group->People()->Count();
|
|
|
|
|
2012-03-09 00:54:02 +01:00
|
|
|
$response = $this->get('GridFieldDetailFormTest_Controller');
|
2012-03-06 22:48:09 +01:00
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
2016-07-01 03:37:29 +02:00
|
|
|
$addlinkitem = $parser->getBySelector('.grid-field .new-link');
|
2012-03-06 22:48:09 +01:00
|
|
|
$addlink = (string) $addlinkitem[0]['href'];
|
|
|
|
|
|
|
|
$response = $this->get($addlink);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$addform = $parser->getBySelector('#Form_ItemEditForm');
|
|
|
|
$addformurl = (string) $addform[0]['action'];
|
|
|
|
|
|
|
|
$response = $this->post(
|
|
|
|
$addformurl,
|
|
|
|
array(
|
|
|
|
'FirstName' => 'Jeremiah',
|
|
|
|
'Surname' => 'BullFrog',
|
|
|
|
'action_doSave' => 1
|
|
|
|
)
|
|
|
|
);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
|
2012-05-28 11:13:42 +02:00
|
|
|
$group = GridFieldDetailFormTest_PeopleGroup::get()
|
2012-04-10 07:05:29 +02:00
|
|
|
->filter('Name', 'My Group')
|
|
|
|
->sort('Name')
|
|
|
|
->First();
|
|
|
|
$this->assertEquals($count + 1, $group->People()->Count());
|
2012-03-06 22:48:09 +01:00
|
|
|
}
|
|
|
|
|
2012-05-11 09:44:39 +02:00
|
|
|
public function testViewForm() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
|
|
|
|
$response = $this->get('GridFieldDetailFormTest_Controller');
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
|
|
|
|
$viewLink = $parser->getBySelector('.ss-gridfield-items .first .view-link');
|
|
|
|
$viewLink = (string) $viewLink[0]['href'];
|
|
|
|
|
|
|
|
$response = $this->get($viewLink);
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
|
|
|
|
$firstName = $parser->getBySelector('#Form_ItemEditForm_FirstName');
|
|
|
|
$surname = $parser->getBySelector('#Form_ItemEditForm_Surname');
|
|
|
|
|
|
|
|
$this->assertFalse($response->isError());
|
2012-07-06 12:42:04 +02:00
|
|
|
$this->assertEquals('Jane', (string) $firstName[0]);
|
|
|
|
$this->assertEquals('Doe', (string) $surname[0]);
|
2012-05-11 09:44:39 +02:00
|
|
|
}
|
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testEditForm() {
|
2012-03-08 01:58:53 +01:00
|
|
|
$this->logInWithPermission('ADMIN');
|
2012-05-28 11:13:42 +02:00
|
|
|
$group = GridFieldDetailFormTest_PeopleGroup::get()
|
2012-04-10 07:05:29 +02:00
|
|
|
->filter('Name', 'My Group')
|
|
|
|
->sort('Name')
|
|
|
|
->First();
|
2012-03-06 22:48:09 +01:00
|
|
|
$firstperson = $group->People()->First();
|
|
|
|
$this->assertTrue($firstperson->Surname != 'Baggins');
|
|
|
|
|
2012-03-09 00:54:02 +01:00
|
|
|
$response = $this->get('GridFieldDetailFormTest_Controller');
|
2012-03-06 22:48:09 +01:00
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$editlinkitem = $parser->getBySelector('.ss-gridfield-items .first .edit-link');
|
|
|
|
$editlink = (string) $editlinkitem[0]['href'];
|
|
|
|
|
|
|
|
$response = $this->get($editlink);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$editform = $parser->getBySelector('#Form_ItemEditForm');
|
|
|
|
$editformurl = (string) $editform[0]['action'];
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-03-06 22:48:09 +01:00
|
|
|
$response = $this->post(
|
|
|
|
$editformurl,
|
|
|
|
array(
|
|
|
|
'FirstName' => 'Bilbo',
|
|
|
|
'Surname' => 'Baggins',
|
|
|
|
'action_doSave' => 1
|
|
|
|
)
|
|
|
|
);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
|
2012-05-28 11:13:42 +02:00
|
|
|
$group = GridFieldDetailFormTest_PeopleGroup::get()
|
2012-04-10 07:05:29 +02:00
|
|
|
->filter('Name', 'My Group')
|
|
|
|
->sort('Name')
|
|
|
|
->First();
|
2012-04-16 04:30:13 +02:00
|
|
|
$this->assertDOSContains(array(array('Surname' => 'Baggins')), $group->People());
|
2012-03-06 22:48:09 +01:00
|
|
|
}
|
2012-03-08 23:56:28 +01:00
|
|
|
|
2015-09-22 15:46:57 +02:00
|
|
|
public function testEditFormWithManyMany() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
|
|
|
|
// Edit the first person
|
|
|
|
$response = $this->get('GridFieldDetailFormTest_CategoryController');
|
|
|
|
// Find the link to add a new favourite group
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$addLink = $parser->getBySelector('#Form_Form_testgroupsfield .new-link');
|
|
|
|
$addLink = (string) $addLink[0]['href'];
|
|
|
|
|
|
|
|
// Add a new favourite group
|
|
|
|
$response = $this->get($addLink);
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$addform = $parser->getBySelector('#Form_ItemEditForm');
|
|
|
|
$addformurl = (string) $addform[0]['action'];
|
|
|
|
|
|
|
|
$response = $this->post(
|
|
|
|
$addformurl,
|
|
|
|
array(
|
|
|
|
'Name' => 'My Favourite Group',
|
|
|
|
'ajax' => 1,
|
|
|
|
'action_doSave' => 1
|
|
|
|
)
|
|
|
|
);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
|
|
|
|
$person = GridFieldDetailFormTest_Person::get()->sort('FirstName')->First();
|
|
|
|
$favouriteGroup = $person->FavouriteGroups()->first();
|
|
|
|
|
|
|
|
$this->assertInstanceOf('GridFieldDetailFormTest_PeopleGroup', $favouriteGroup);
|
|
|
|
}
|
|
|
|
|
2012-11-08 01:26:38 +01:00
|
|
|
public function testEditFormWithManyManyExtraData() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
|
|
|
|
// Lists all categories for a person
|
|
|
|
$response = $this->get('GridFieldDetailFormTest_CategoryController');
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$editlinkitem = $parser->getBySelector('.ss-gridfield-items .first .edit-link');
|
|
|
|
$editlink = (string) $editlinkitem[0]['href'];
|
|
|
|
|
|
|
|
// Edit a single category, incl. manymany extrafields added manually
|
|
|
|
// through GridFieldDetailFormTest_CategoryController
|
|
|
|
$response = $this->get($editlink);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
$editform = $parser->getBySelector('#Form_ItemEditForm');
|
|
|
|
$editformurl = (string) $editform[0]['action'];
|
|
|
|
|
|
|
|
$manyManyField = $parser->getByXpath('//*[@id="Form_ItemEditForm"]//input[@name="ManyMany[IsPublished]"]');
|
|
|
|
$this->assertTrue((bool)$manyManyField);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2015-06-08 05:44:27 +02:00
|
|
|
// Test save of IsPublished field
|
2012-11-08 01:26:38 +01:00
|
|
|
$response = $this->post(
|
|
|
|
$editformurl,
|
|
|
|
array(
|
|
|
|
'Name' => 'Updated Category',
|
2015-06-08 05:44:27 +02:00
|
|
|
'ManyMany' => array(
|
|
|
|
'IsPublished' => 1,
|
|
|
|
'PublishedBy' => 'Richard'
|
|
|
|
),
|
2012-11-08 01:26:38 +01:00
|
|
|
'action_doSave' => 1
|
|
|
|
)
|
|
|
|
);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
|
|
|
|
$person = GridFieldDetailFormTest_Person::get()->sort('FirstName')->First();
|
|
|
|
$category = $person->Categories()->filter(array('Name' => 'Updated Category'))->First();
|
|
|
|
$this->assertEquals(
|
2015-06-08 05:44:27 +02:00
|
|
|
array(
|
|
|
|
'IsPublished' => 1,
|
|
|
|
'PublishedBy' => 'Richard'
|
|
|
|
),
|
|
|
|
$person->Categories()->getExtraData('', $category->ID)
|
|
|
|
);
|
2016-01-06 00:34:58 +01:00
|
|
|
|
2015-06-08 05:44:27 +02:00
|
|
|
// Test update of value with falsey value
|
|
|
|
$response = $this->post(
|
|
|
|
$editformurl,
|
|
|
|
array(
|
|
|
|
'Name' => 'Updated Category',
|
|
|
|
'ManyMany' => array(
|
|
|
|
'PublishedBy' => ''
|
|
|
|
),
|
|
|
|
'action_doSave' => 1
|
|
|
|
)
|
|
|
|
);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
|
|
|
|
$person = GridFieldDetailFormTest_Person::get()->sort('FirstName')->First();
|
|
|
|
$category = $person->Categories()->filter(array('Name' => 'Updated Category'))->First();
|
|
|
|
$this->assertEquals(
|
|
|
|
array(
|
|
|
|
'IsPublished' => 0,
|
|
|
|
'PublishedBy' => ''
|
|
|
|
),
|
2012-11-08 01:26:38 +01:00
|
|
|
$person->Categories()->getExtraData('', $category->ID)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testNestedEditForm() {
|
2012-03-08 23:56:28 +01:00
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
|
2012-03-09 02:37:32 +01:00
|
|
|
$group = $this->objFromFixture('GridFieldDetailFormTest_PeopleGroup', 'group');
|
2012-03-08 23:56:28 +01:00
|
|
|
$person = $group->People()->First();
|
|
|
|
$category = $person->Categories()->First();
|
|
|
|
|
|
|
|
// Get first form (GridField managing PeopleGroup)
|
2012-03-09 02:37:32 +01:00
|
|
|
$response = $this->get('GridFieldDetailFormTest_GroupController');
|
2012-03-08 23:56:28 +01:00
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
|
|
|
|
2012-09-26 23:34:00 +02:00
|
|
|
$groupEditLink = $parser->getByXpath('//tr[contains(@class, "ss-gridfield-item") and contains(@data-id, "'
|
|
|
|
. $group->ID . '")]//a');
|
2012-03-08 23:56:28 +01:00
|
|
|
$this->assertEquals(
|
2012-03-12 11:15:06 +01:00
|
|
|
'GridFieldDetailFormTest_GroupController/Form/field/testfield/item/' . $group->ID . '/edit',
|
2012-03-08 23:56:28 +01:00
|
|
|
(string)$groupEditLink[0]['href']
|
|
|
|
);
|
|
|
|
|
|
|
|
// Get second level form (GridField managing Person)
|
|
|
|
$response = $this->get((string)$groupEditLink[0]['href']);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
2012-09-26 23:34:00 +02:00
|
|
|
$personEditLink = $parser->getByXpath('//fieldset[@id="Form_ItemEditForm_People"]' .
|
2014-08-15 08:53:05 +02:00
|
|
|
'//tr[contains(@class, "ss-gridfield-item") and contains(@data-id, "' . $person->ID . '")]//a');
|
2012-03-08 23:56:28 +01:00
|
|
|
$this->assertEquals(
|
2012-09-26 23:34:00 +02:00
|
|
|
sprintf('GridFieldDetailFormTest_GroupController/Form/field/testfield/item/%d/ItemEditForm/field/People'
|
|
|
|
. '/item/%d/edit', $group->ID, $person->ID),
|
2012-03-08 23:56:28 +01:00
|
|
|
(string)$personEditLink[0]['href']
|
|
|
|
);
|
|
|
|
|
|
|
|
// Get third level form (GridField managing Category)
|
|
|
|
$response = $this->get((string)$personEditLink[0]['href']);
|
|
|
|
$this->assertFalse($response->isError());
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
2012-09-26 23:34:00 +02:00
|
|
|
$categoryEditLink = $parser->getByXpath('//fieldset[@id="Form_ItemEditForm_Categories"]'
|
2014-08-15 08:53:05 +02:00
|
|
|
. '//tr[contains(@class, "ss-gridfield-item") and contains(@data-id, "' . $category->ID . '")]//a');
|
2012-03-08 23:56:28 +01:00
|
|
|
$this->assertEquals(
|
2012-09-26 23:34:00 +02:00
|
|
|
sprintf('GridFieldDetailFormTest_GroupController/Form/field/testfield/item/%d/ItemEditForm/field/People'
|
|
|
|
. '/item/%d/ItemEditForm/field/Categories/item/%d/edit', $group->ID, $person->ID, $category->ID),
|
2012-03-08 23:56:28 +01:00
|
|
|
(string)$categoryEditLink[0]['href']
|
|
|
|
);
|
2012-03-12 11:15:06 +01:00
|
|
|
|
|
|
|
// Fourth level form would be a Category detail view
|
2012-03-08 23:56:28 +01:00
|
|
|
}
|
2012-04-30 12:31:17 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testCustomItemRequestClass() {
|
2012-12-17 00:46:51 +01:00
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
|
2012-04-30 12:31:17 +02:00
|
|
|
$component = new GridFieldDetailForm();
|
2016-08-19 00:51:35 +02:00
|
|
|
$this->assertEquals('SilverStripe\\Forms\\GridField\\GridFieldDetailForm_ItemRequest', $component->getItemRequestClass());
|
2012-04-30 12:31:17 +02:00
|
|
|
$component->setItemRequestClass('GridFieldDetailFormTest_ItemRequest');
|
|
|
|
$this->assertEquals('GridFieldDetailFormTest_ItemRequest', $component->getItemRequestClass());
|
|
|
|
}
|
2012-04-30 13:46:51 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testItemEditFormCallback() {
|
2012-12-17 00:46:51 +01:00
|
|
|
$this->logInWithPermission('ADMIN');
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-04-30 13:46:51 +02:00
|
|
|
$category = new GridFieldDetailFormTest_Category();
|
|
|
|
$component = new GridFieldDetailForm();
|
|
|
|
$component->setItemEditFormCallback(function($form, $component) {
|
|
|
|
$form->Fields()->push(new HiddenField('Callback'));
|
|
|
|
});
|
|
|
|
// Note: A lot of scaffolding to execute the tested logic,
|
|
|
|
// due to the coupling of form creation with request handling (and its context)
|
2016-08-19 00:51:35 +02:00
|
|
|
/** @skipUpgrade */
|
2012-04-30 13:46:51 +02:00
|
|
|
$request = new GridFieldDetailForm_ItemRequest(
|
|
|
|
GridField::create('Categories', 'Categories'),
|
|
|
|
$component,
|
|
|
|
$category,
|
|
|
|
new Controller(),
|
|
|
|
'Form'
|
|
|
|
);
|
|
|
|
$form = $request->ItemEditForm();
|
|
|
|
$this->assertNotNull($form->Fields()->fieldByName('Callback'));
|
|
|
|
}
|
2013-11-13 06:21:18 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Tests that a has-many detail form is pre-populated with the parent ID.
|
|
|
|
*/
|
|
|
|
public function testHasManyFormPrePopulated() {
|
|
|
|
$group = $this->objFromFixture(
|
|
|
|
'GridFieldDetailFormTest_PeopleGroup', 'group'
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
|
|
|
|
$response = $this->get('GridFieldDetailFormTest_Controller');
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
2016-07-01 03:37:29 +02:00
|
|
|
$addLink = $parser->getBySelector('.grid-field .new-link');
|
2013-11-13 06:21:18 +01:00
|
|
|
$addLink = (string) $addLink[0]['href'];
|
|
|
|
|
|
|
|
$response = $this->get($addLink);
|
|
|
|
$parser = new CSSContentParser($response->getBody());
|
2013-12-06 14:11:00 +01:00
|
|
|
$title = $parser->getBySelector('#Form_ItemEditForm_GroupID_Holder span');
|
|
|
|
$id = $parser->getBySelector('#Form_ItemEditForm_GroupID_Holder input');
|
2013-11-13 06:21:18 +01:00
|
|
|
|
|
|
|
$this->assertEquals($group->Name, (string) $title[0]);
|
|
|
|
$this->assertEquals($group->ID, (string) $id[0]['value']);
|
|
|
|
}
|
|
|
|
|
2012-03-06 22:48:09 +01:00
|
|
|
}
|
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
|
2012-03-09 00:54:02 +01:00
|
|
|
class GridFieldDetailFormTest_Person extends DataObject implements TestOnly {
|
2014-01-11 03:40:48 +01:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $db = array(
|
2012-03-06 22:48:09 +01:00
|
|
|
'FirstName' => 'Varchar',
|
|
|
|
'Surname' => 'Varchar'
|
|
|
|
);
|
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $has_one = array(
|
2012-03-09 00:54:02 +01:00
|
|
|
'Group' => 'GridFieldDetailFormTest_PeopleGroup'
|
2012-03-06 22:48:09 +01:00
|
|
|
);
|
2012-03-08 23:56:28 +01:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $many_many = array(
|
2015-09-22 15:46:57 +02:00
|
|
|
'Categories' => 'GridFieldDetailFormTest_Category',
|
|
|
|
'FavouriteGroups' => 'GridFieldDetailFormTest_PeopleGroup'
|
2012-03-08 23:56:28 +01:00
|
|
|
);
|
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $many_many_extraFields = array(
|
2012-11-08 01:26:38 +01:00
|
|
|
'Categories' => array(
|
2015-06-08 05:44:27 +02:00
|
|
|
'IsPublished' => 'Boolean',
|
|
|
|
'PublishedBy' => 'Varchar'
|
2012-11-08 01:26:38 +01:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
2013-04-02 13:33:14 +02:00
|
|
|
private static $default_sort = '"FirstName"';
|
2012-07-06 12:42:04 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function getCMSFields() {
|
2012-04-13 15:46:47 +02:00
|
|
|
$fields = parent::getCMSFields();
|
2012-03-08 23:56:28 +01:00
|
|
|
// TODO No longer necessary once FormScaffolder uses GridField
|
|
|
|
$fields->replaceField('Categories',
|
2012-04-04 16:59:30 +02:00
|
|
|
GridField::create('Categories', 'Categories',
|
2012-03-08 23:56:28 +01:00
|
|
|
$this->Categories(),
|
|
|
|
GridFieldConfig_RelationEditor::create()
|
|
|
|
)
|
|
|
|
);
|
2015-09-22 15:46:57 +02:00
|
|
|
$fields->replaceField('FavouriteGroups',
|
|
|
|
GridField::create('FavouriteGroups', 'Favourite Groups',
|
|
|
|
$this->FavouriteGroups(),
|
|
|
|
GridFieldConfig_RelationEditor::create()
|
|
|
|
)
|
|
|
|
);
|
2012-03-08 23:56:28 +01:00
|
|
|
return $fields;
|
|
|
|
}
|
2014-01-11 03:40:48 +01:00
|
|
|
|
|
|
|
public function getCMSValidator() {
|
|
|
|
return new RequiredFields(array(
|
|
|
|
'FirstName', 'Surname'
|
|
|
|
));
|
|
|
|
}
|
2012-03-06 22:48:09 +01:00
|
|
|
}
|
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
|
2012-03-09 00:54:02 +01:00
|
|
|
class GridFieldDetailFormTest_PeopleGroup extends DataObject implements TestOnly {
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $db = array(
|
2012-03-06 22:48:09 +01:00
|
|
|
'Name' => 'Varchar'
|
|
|
|
);
|
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $has_many = array(
|
2012-03-09 00:54:02 +01:00
|
|
|
'People' => 'GridFieldDetailFormTest_Person'
|
2012-03-06 22:48:09 +01:00
|
|
|
);
|
2012-07-06 12:42:04 +02:00
|
|
|
|
2015-09-22 15:46:57 +02:00
|
|
|
private static $belongs_many_many = array(
|
2016-09-05 06:58:36 +02:00
|
|
|
'FavouritePeople' => 'GridFieldDetailFormTest_Person'
|
2015-09-22 15:46:57 +02:00
|
|
|
);
|
|
|
|
|
2013-04-02 13:33:14 +02:00
|
|
|
private static $default_sort = '"Name"';
|
2012-07-06 12:42:04 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function getCMSFields() {
|
2012-04-13 15:46:47 +02:00
|
|
|
$fields = parent::getCMSFields();
|
2012-03-08 23:56:28 +01:00
|
|
|
// TODO No longer necessary once FormScaffolder uses GridField
|
|
|
|
$fields->replaceField('People',
|
2012-04-04 16:59:30 +02:00
|
|
|
GridField::create('People', 'People',
|
2012-03-08 23:56:28 +01:00
|
|
|
$this->People(),
|
|
|
|
GridFieldConfig_RelationEditor::create()
|
|
|
|
)
|
|
|
|
);
|
|
|
|
return $fields;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
|
2012-03-09 02:37:32 +01:00
|
|
|
class GridFieldDetailFormTest_Category extends DataObject implements TestOnly {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $db = array(
|
2012-03-08 23:56:28 +01:00
|
|
|
'Name' => 'Varchar'
|
|
|
|
);
|
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $belongs_many_many = array(
|
2012-03-09 02:37:32 +01:00
|
|
|
'People' => 'GridFieldDetailFormTest_Person'
|
2012-03-08 23:56:28 +01:00
|
|
|
);
|
|
|
|
|
2013-04-02 13:33:14 +02:00
|
|
|
private static $default_sort = '"Name"';
|
2012-07-06 12:42:04 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function getCMSFields() {
|
2012-04-13 15:46:47 +02:00
|
|
|
$fields = parent::getCMSFields();
|
2012-03-08 23:56:28 +01:00
|
|
|
// TODO No longer necessary once FormScaffolder uses GridField
|
|
|
|
$fields->replaceField('People',
|
2012-04-04 16:59:30 +02:00
|
|
|
GridField::create('People', 'People',
|
2012-03-08 23:56:28 +01:00
|
|
|
$this->People(),
|
|
|
|
GridFieldConfig_RelationEditor::create()
|
|
|
|
)
|
|
|
|
);
|
|
|
|
return $fields;
|
|
|
|
}
|
2012-03-06 22:48:09 +01:00
|
|
|
}
|
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
|
2012-03-09 00:54:02 +01:00
|
|
|
class GridFieldDetailFormTest_Controller extends Controller implements TestOnly {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-06-20 11:40:55 +02:00
|
|
|
private static $allowed_actions = array('Form');
|
|
|
|
|
2012-03-06 22:48:09 +01:00
|
|
|
protected $template = 'BlankPage';
|
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function Form() {
|
2012-05-28 11:13:42 +02:00
|
|
|
$group = GridFieldDetailFormTest_PeopleGroup::get()
|
2012-04-10 07:05:29 +02:00
|
|
|
->filter('Name', 'My Group')
|
|
|
|
->sort('Name')
|
|
|
|
->First();
|
2012-03-06 22:48:09 +01:00
|
|
|
|
|
|
|
$field = new GridField('testfield', 'testfield', $group->People());
|
2012-03-09 06:11:50 +01:00
|
|
|
$field->getConfig()->addComponent(new GridFieldToolbarHeader());
|
|
|
|
$field->getConfig()->addComponent(new GridFieldAddNewButton('toolbar-header-right'));
|
2012-05-11 09:44:39 +02:00
|
|
|
$field->getConfig()->addComponent(new GridFieldViewButton());
|
2012-03-09 06:11:50 +01:00
|
|
|
$field->getConfig()->addComponent(new GridFieldEditButton());
|
2016-08-19 00:51:35 +02:00
|
|
|
/** @skipUpgrade */
|
2012-03-09 00:54:02 +01:00
|
|
|
$field->getConfig()->addComponent($gridFieldForm = new GridFieldDetailForm($this, 'Form'));
|
|
|
|
$field->getConfig()->addComponent(new GridFieldEditButton());
|
2016-08-19 00:51:35 +02:00
|
|
|
/** @skipUpgrade */
|
2012-03-06 22:48:09 +01:00
|
|
|
return new Form($this, 'Form', new FieldList($field), new FieldList());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
|
2012-03-09 02:37:32 +01:00
|
|
|
class GridFieldDetailFormTest_GroupController extends Controller implements TestOnly {
|
2013-06-20 11:40:55 +02:00
|
|
|
|
|
|
|
private static $allowed_actions = array('Form');
|
|
|
|
|
2012-03-08 23:56:28 +01:00
|
|
|
protected $template = 'BlankPage';
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function Form() {
|
2012-05-28 11:13:42 +02:00
|
|
|
$field = new GridField('testfield', 'testfield', GridFieldDetailFormTest_PeopleGroup::get()->sort('Name'));
|
2016-08-19 00:51:35 +02:00
|
|
|
/** @skipUpgrade */
|
2012-03-09 04:37:25 +01:00
|
|
|
$field->getConfig()->addComponent($gridFieldForm = new GridFieldDetailForm($this, 'Form'));
|
2012-03-09 06:11:50 +01:00
|
|
|
$field->getConfig()->addComponent(new GridFieldToolbarHeader());
|
|
|
|
$field->getConfig()->addComponent(new GridFieldAddNewButton('toolbar-header-right'));
|
2012-03-09 04:37:25 +01:00
|
|
|
$field->getConfig()->addComponent(new GridFieldEditButton());
|
2016-08-19 00:51:35 +02:00
|
|
|
/** @skipUpgrade */
|
2012-03-08 23:56:28 +01:00
|
|
|
return new Form($this, 'Form', new FieldList($field), new FieldList());
|
|
|
|
}
|
|
|
|
}
|
2012-04-30 12:31:17 +02:00
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
|
2012-11-08 01:26:38 +01:00
|
|
|
class GridFieldDetailFormTest_CategoryController extends Controller implements TestOnly {
|
2013-06-20 11:40:55 +02:00
|
|
|
|
|
|
|
private static $allowed_actions = array('Form');
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-11-08 01:26:38 +01:00
|
|
|
protected $template = 'BlankPage';
|
|
|
|
|
|
|
|
public function Form() {
|
|
|
|
// GridField lists categories for a specific person
|
|
|
|
$person = GridFieldDetailFormTest_Person::get()->sort('FirstName')->First();
|
|
|
|
$detailFields = singleton('GridFieldDetailFormTest_Category')->getCMSFields();
|
2015-06-08 05:44:27 +02:00
|
|
|
$detailFields->addFieldsToTab('Root.Main', array(
|
|
|
|
new CheckboxField('ManyMany[IsPublished]'),
|
|
|
|
new TextField('ManyMany[PublishedBy]'))
|
|
|
|
);
|
2015-09-22 15:46:57 +02:00
|
|
|
$categoriesField = new GridField('testfield', 'testfield', $person->Categories());
|
2016-08-19 00:51:35 +02:00
|
|
|
$categoriesField->getConfig()->addComponent($gridFieldForm = new GridFieldDetailForm($this, 'SilverStripe\\Forms\\Form'));
|
2012-11-08 01:26:38 +01:00
|
|
|
$gridFieldForm->setFields($detailFields);
|
2015-09-22 15:46:57 +02:00
|
|
|
$categoriesField->getConfig()->addComponent(new GridFieldToolbarHeader());
|
|
|
|
$categoriesField->getConfig()->addComponent(new GridFieldAddNewButton('toolbar-header-right'));
|
|
|
|
$categoriesField->getConfig()->addComponent(new GridFieldEditButton());
|
|
|
|
|
|
|
|
$favGroupsField = new GridField('testgroupsfield', 'testgroupsfield', $person->FavouriteGroups());
|
2016-08-19 00:51:35 +02:00
|
|
|
/** @skipUpgrade */
|
2015-09-22 15:46:57 +02:00
|
|
|
$favGroupsField->getConfig()->addComponent(new GridFieldDetailForm($this, 'Form'));
|
|
|
|
$favGroupsField->getConfig()->addComponent(new GridFieldToolbarHeader());
|
|
|
|
$favGroupsField->getConfig()->addComponent(new GridFieldAddNewButton('toolbar-header-right'));
|
|
|
|
$favGroupsField->getConfig()->addComponent(new GridFieldEditButton());
|
|
|
|
|
|
|
|
$fields = new FieldList($categoriesField, $favGroupsField);
|
2016-08-19 00:51:35 +02:00
|
|
|
/** @skipUpgrade */
|
2015-09-22 15:46:57 +02:00
|
|
|
return new Form($this, 'Form', $fields, new FieldList());
|
2012-11-08 01:26:38 +01:00
|
|
|
}
|
2012-05-28 11:13:42 +02:00
|
|
|
}
|
2012-11-08 01:26:38 +01:00
|
|
|
|
2014-01-11 03:40:48 +01:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
2014-02-03 20:19:04 +01:00
|
|
|
class GridFieldDetailFormTest_ItemRequest extends GridFieldDetailForm_ItemRequest implements TestOnly { }
|