silverstripe-frameworktest/code/multiform/TestMultiForm.php
2022-10-19 12:00:04 +13:00

93 lines
2.6 KiB
PHP

<?php
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\LiteralField;
use SilverStripe\Control\Session;
use SilverStripe\Control\Director;
use SilverStripe\Control\HTTPResponse;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\TextField;
class TestMultiForm extends MultiForm
{
public static $start_step = 'TestMultiFormStepOne';
public function finish(array $data, Form $form): HTTPResponse
{
parent::finish($data, $form);
$savedSteps = $this->getSavedSteps();
$savedData = array();
foreach ($savedSteps as $step) {
$savedData = array_merge($savedData, $step->loadData());
}
$fields = new FieldList();
$fields->push(new LiteralField("Heading", "<h3>You have submitted the following information:</h3>"));
foreach ($savedData as $key=>$value) {
$fields->push(new LiteralField($key . '_copy', "<p><strong>$key</strong> $value</p>"));
}
Session::set("MultiFormMessage", "Your information has been submitted.");
return $this->Controller()->redirect(Director::BaseURL() . $this->Controller()->URLSegment);
}
}
class TestMultiFormStepOne extends MultiFormStep
{
public static $next_steps = 'TestMultiFormStepTwo';
public function getFields()
{
return new FieldList(
new TextField('FirstName', 'First name'),
new TextField('Surname', 'Surname')
);
}
}
class TestMultiFormStepTwo extends MultiFormStep
{
public static $next_steps = 'TestMultiFormStepThree';
public function getFields()
{
return new FieldList(
new TextField('Email', 'Email'),
new TextField('Address', 'Address')
);
}
}
class TestMultiFormStepThree extends MultiFormStep
{
public static $is_final_step = true;
public function getFields()
{
$form = $this->getForm();
$savedSteps = $form->getSavedSteps();
$savedData = array();
foreach ($savedSteps as $step) {
$savedData = array_merge($savedData, $step->loadData());
}
$fields = new FieldList();
$fields->push(new LiteralField("Heading", "<h3>You have submitted the following information:</h3>"));
foreach ($savedData as $key=>$value) {
if (preg_match("/_copy$/", $key ?? '')) {
continue;
}
$fields->push(new LiteralField($key . '_copy', "<p><strong>$key</strong> $value</p>"));
}
return $fields;
}
}