mirror of
https://github.com/silverstripe/silverstripe-dms
synced 2024-10-22 12:05:56 +00:00
Merge pull request #141 from creative-commoners/pulls/2.0/doc-sets-modeladmin
NEW Add ModelAdmin interface for managing DMSDocumentSets
This commit is contained in:
commit
886fd217f2
@ -3,7 +3,8 @@
|
|||||||
class DMSDocumentAdmin extends ModelAdmin
|
class DMSDocumentAdmin extends ModelAdmin
|
||||||
{
|
{
|
||||||
private static $managed_models = array(
|
private static $managed_models = array(
|
||||||
'DMSDocument'
|
'DMSDocument',
|
||||||
|
'DMSDocumentSet'
|
||||||
);
|
);
|
||||||
|
|
||||||
private static $url_segment = 'documents';
|
private static $url_segment = 'documents';
|
||||||
@ -21,13 +22,34 @@ class DMSDocumentAdmin extends ModelAdmin
|
|||||||
{
|
{
|
||||||
/** @var CMSForm $form */
|
/** @var CMSForm $form */
|
||||||
$form = parent::getEditForm($id, $fields);
|
$form = parent::getEditForm($id, $fields);
|
||||||
|
$gridField = $form->Fields()->fieldByName($this->sanitiseClassName($this->modelClass));
|
||||||
|
return $this->modifyGridField($form, $gridField);
|
||||||
|
}
|
||||||
|
|
||||||
// See parent class
|
/**
|
||||||
$gridFieldName = $this->sanitiseClassName($this->modelClass);
|
* If the GridField is for DMSDocument then add a custom "add" button. If it's for DMSDocumentSet then
|
||||||
|
* update the display fields to include some extra columns that are only for this ModelAdmin, so cannot
|
||||||
|
* be added directly to the model's display fields.
|
||||||
|
*
|
||||||
|
* @param CMSForm $form
|
||||||
|
* @param GridField $gridField
|
||||||
|
* @return CMSForm
|
||||||
|
*/
|
||||||
|
protected function modifyGridField(CMSForm $form, GridField $gridField)
|
||||||
|
{
|
||||||
|
$gridFieldConfig = $gridField->getConfig();
|
||||||
|
|
||||||
$gridFieldConfig = $form->Fields()->fieldByName($gridFieldName)->getConfig();
|
if ($this->modelClass === 'DMSDocument') {
|
||||||
$gridFieldConfig->removeComponentsByType('GridFieldAddNewButton');
|
$gridFieldConfig->removeComponentsByType('GridFieldAddNewButton');
|
||||||
$gridFieldConfig->addComponent(new DMSGridFieldAddNewButton('buttons-before-left'), 'GridFieldExportButton');
|
$gridFieldConfig->addComponent(new DMSGridFieldAddNewButton('buttons-before-left'), 'GridFieldExportButton');
|
||||||
|
} elseif ($this->modelClass === 'DMSDocumentSet') {
|
||||||
|
$gridFieldConfig->removeComponentsByType('GridFieldAddNewButton');
|
||||||
|
|
||||||
|
$dataColumns = $gridFieldConfig->getComponentByType('GridFieldDataColumns');
|
||||||
|
$fields = $dataColumns->getDisplayFields($gridField);
|
||||||
|
$fields = array('Title' => 'Title', 'Page.Title' => 'Page') + $fields;
|
||||||
|
$dataColumns->setDisplayFields($fields);
|
||||||
|
}
|
||||||
|
|
||||||
return $form;
|
return $form;
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,21 @@
|
|||||||
|
|
||||||
class DMSDocumentAdminTest extends FunctionalTest
|
class DMSDocumentAdminTest extends FunctionalTest
|
||||||
{
|
{
|
||||||
|
protected static $fixture_file = 'DMSDocumentAdminTest.yml';
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->logInWithPermission('ADMIN');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that the default "add new" button is gone, and replaced with our customised version of it
|
* Check that the default "add new" button is gone, and replaced with our customised version of it
|
||||||
*/
|
*/
|
||||||
public function testGridFieldHasCustomisedAddNewButton()
|
public function testGridFieldHasCustomisedAddNewButton()
|
||||||
{
|
{
|
||||||
$modelAdmin = new DMSDocumentAdmin;
|
$modelAdmin = new DMSDocumentAdmin;
|
||||||
// SS < 3.3 doesn't have a response setter, this initialises it
|
|
||||||
$modelAdmin->handleRequest(new SS_HTTPRequest('GET', '/'), DataModel::inst());
|
|
||||||
$modelAdmin->init();
|
$modelAdmin->init();
|
||||||
|
|
||||||
$form = $modelAdmin->getEditForm();
|
$form = $modelAdmin->getEditForm();
|
||||||
@ -31,4 +38,32 @@ class DMSDocumentAdminTest extends FunctionalTest
|
|||||||
'Model admin for documents contains customised DMS add new button'
|
'Model admin for documents contains customised DMS add new button'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Quick check to ensure that the ModelAdmin endpoint is working
|
||||||
|
*/
|
||||||
|
public function testModelAdminEndpointWorks()
|
||||||
|
{
|
||||||
|
$this->assertEquals(200, $this->get('admin/documents')->getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check that the document sets GridField has had its "add new" button removed
|
||||||
|
*/
|
||||||
|
public function testDocumentSetsGridFieldHasNoAddButton()
|
||||||
|
{
|
||||||
|
$result = (string) $this->get('admin/documents/DMSDocumentSet')->getBody();
|
||||||
|
$this->assertNotContains('Add Document Set', $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check that the document sets GridField has a data column for the parent page title. Here we check for the
|
||||||
|
* Page title existing in the DOM, since "Page" is guaranteed to exist somewhere else.
|
||||||
|
*/
|
||||||
|
public function testDocumentSetsGridFieldHasParentPageColumn()
|
||||||
|
{
|
||||||
|
$result = (string) $this->get('admin/documents/DMSDocumentSet')->getBody();
|
||||||
|
$this->assertContains('Home Test Page', $result);
|
||||||
|
$this->assertContains('About Us Test Page', $result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
32
tests/cms/DMSDocumentAdminTest.yml
Normal file
32
tests/cms/DMSDocumentAdminTest.yml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
Page:
|
||||||
|
home:
|
||||||
|
Title: Home Test Page
|
||||||
|
URLSegment: home
|
||||||
|
about_us:
|
||||||
|
Title: About Us Test Page
|
||||||
|
URLSegment: About Us
|
||||||
|
|
||||||
|
DMSDocumentSet:
|
||||||
|
home_default:
|
||||||
|
Title: Home Default
|
||||||
|
Page: =>Page.home
|
||||||
|
home_alt:
|
||||||
|
Title: Home Alternative
|
||||||
|
Page: =>Page.home
|
||||||
|
about_default:
|
||||||
|
Title: About Default
|
||||||
|
Page: =>Page.about_us
|
||||||
|
|
||||||
|
DMSDocument:
|
||||||
|
h_d_1:
|
||||||
|
Title: Home Default 1
|
||||||
|
Filename: home-default-1
|
||||||
|
Sets: =>DMSDocumentSet.home_default
|
||||||
|
h_a_2:
|
||||||
|
Title: Home Default 2
|
||||||
|
Filename: home-default-2
|
||||||
|
Sets: =>DMSDocumentSet.home_alt
|
||||||
|
a_d_1:
|
||||||
|
Title: About Default 1
|
||||||
|
Filename: about-default-1
|
||||||
|
Sets: =>DMSDocumentSet.about_default
|
Loading…
x
Reference in New Issue
Block a user