mirror of
https://github.com/silverstripe/silverstripe-userforms.git
synced 2024-10-22 15:05:42 +00:00
Initial multi-page form
This commit is contained in:
parent
47c3df9c64
commit
d83a450307
@ -34,6 +34,8 @@ class UserFormFieldEditorExtension extends DataExtension {
|
|||||||
public function getFieldEditorGrid() {
|
public function getFieldEditorGrid() {
|
||||||
$fields = $this->owner->Fields();
|
$fields = $this->owner->Fields();
|
||||||
|
|
||||||
|
$this->createInitialFormStep();
|
||||||
|
|
||||||
$editableColumns = new GridFieldEditableColumns();
|
$editableColumns = new GridFieldEditableColumns();
|
||||||
$editableColumns->setDisplayFields(array(
|
$editableColumns->setDisplayFields(array(
|
||||||
'ClassName' => function($record, $column, $grid) {
|
'ClassName' => function($record, $column, $grid) {
|
||||||
@ -66,6 +68,30 @@ class UserFormFieldEditorExtension extends DataExtension {
|
|||||||
return $fieldEditor;
|
return $fieldEditor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A UserForm must have at least one step.
|
||||||
|
* If no steps exist, create an initial step, and put all fields inside it.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function createInitialFormStep() {
|
||||||
|
// If there's already an initial step, do nothing.
|
||||||
|
if ($this->owner->Fields()->filter('ClassName', 'EditableFormStep')->Count()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$step = EditableFormStep::create();
|
||||||
|
|
||||||
|
$step->ParentID = $this->owner->ID;
|
||||||
|
$step->write();
|
||||||
|
|
||||||
|
// Assign each field to the initial step.
|
||||||
|
foreach ($this->owner->Fields()->exclude('ID', $step->ID) as $field) {
|
||||||
|
$field->StepID = $step->ID;
|
||||||
|
$field->write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
@ -35,17 +35,41 @@ class UserForm extends Form {
|
|||||||
$this->extend('updateForm');
|
$this->extend('updateForm');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the form steps.
|
||||||
|
*
|
||||||
|
* @return ArrayList
|
||||||
|
*/
|
||||||
|
public function getFormSteps() {
|
||||||
|
$steps = new ArrayList();
|
||||||
|
|
||||||
|
foreach ($this->controller->Fields()->filter('ClassName', 'EditableFormStep') as $step) {
|
||||||
|
$steps->push(array(
|
||||||
|
'Title' => $step->Title,
|
||||||
|
'Fields' => $this->getFormFields($step)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $steps;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the form fields for the form on this page. Can modify this FieldSet
|
* Get the form fields for the form on this page. Can modify this FieldSet
|
||||||
* by using {@link updateFormFields()} on an {@link Extension} subclass which
|
* by using {@link updateFormFields()} on an {@link Extension} subclass which
|
||||||
* is applied to this controller.
|
* is applied to this controller.
|
||||||
*
|
*
|
||||||
|
* @param EditableFormStep $parent
|
||||||
|
*
|
||||||
* @return FieldList
|
* @return FieldList
|
||||||
*/
|
*/
|
||||||
public function getFormFields() {
|
public function getFormFields($parent = null) {
|
||||||
|
if(!$parent) {
|
||||||
|
$parent = $this->controller;
|
||||||
|
}
|
||||||
|
|
||||||
$fields = new FieldList();
|
$fields = new FieldList();
|
||||||
|
|
||||||
foreach($this->controller->Fields() as $editableField) {
|
foreach($parent->Fields() as $editableField) {
|
||||||
// get the raw form field from the editable version
|
// get the raw form field from the editable version
|
||||||
$field = $editableField->getFormField();
|
$field = $editableField->getFormField();
|
||||||
|
|
||||||
|
57
code/model/editableformfields/EditableFormStep.php
Normal file
57
code/model/editableformfields/EditableFormStep.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* A step in multi-page user form
|
||||||
|
*
|
||||||
|
* @package userforms
|
||||||
|
*/
|
||||||
|
class EditableFormStep extends EditableFormField {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @config
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private static $singular_name = 'Step';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @config
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private static $plural_name = 'Steps';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @config
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $has_many = array(
|
||||||
|
'Fields' => 'EditableFormField'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return FieldList
|
||||||
|
*/
|
||||||
|
public function getCMSFields() {
|
||||||
|
$fields = parent::getCMSFields();
|
||||||
|
|
||||||
|
$fields->removeByName('MergeField');
|
||||||
|
$fields->removeByName('StepID');
|
||||||
|
$fields->removeByName('Default');
|
||||||
|
$fields->removeByName('Validation');
|
||||||
|
$fields->removeByName('CustomRules');
|
||||||
|
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return FormField
|
||||||
|
*/
|
||||||
|
public function getFormField() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function showInReports() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
36
templates/UserForm.ss
Normal file
36
templates/UserForm.ss
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<% if $IncludeFormTag %>
|
||||||
|
<form $AttributesHTML>
|
||||||
|
<% end_if %>
|
||||||
|
|
||||||
|
<% if $Message %>
|
||||||
|
<p id="{$FormName}_error" class="message $MessageType">$Message</p>
|
||||||
|
<% else %>
|
||||||
|
<p id="{$FormName}_error" class="message $MessageType" style="display: none"></p>
|
||||||
|
<% end_if %>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<% if $Legend %><legend>$Legend</legend><% end_if %>
|
||||||
|
|
||||||
|
<% loop $FormSteps %>
|
||||||
|
<fieldset>
|
||||||
|
<h2>$Title</h2>
|
||||||
|
<% loop $Fields %>
|
||||||
|
$FieldHolder
|
||||||
|
<% end_loop %>
|
||||||
|
</fieldset>
|
||||||
|
<% end_loop %>
|
||||||
|
|
||||||
|
<div class="clear"><!-- --></div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<% if $Actions %>
|
||||||
|
<div class="Actions">
|
||||||
|
<% loop $Actions %>
|
||||||
|
$Field
|
||||||
|
<% end_loop %>
|
||||||
|
</div>
|
||||||
|
<% end_if %>
|
||||||
|
|
||||||
|
<% if $IncludeFormTag %>
|
||||||
|
</form>
|
||||||
|
<% end_if %>
|
Loading…
x
Reference in New Issue
Block a user