MultistepController.php in Simple multi step form 8
File
src/MultistepController.php
View source
<?php
namespace Drupal\simple_multistep;
use Drupal\Core\Form\FormStateInterface;
class MultistepController extends FormStep {
public $stepIndicator;
public $formButton;
protected $storedValues;
protected $inputValues;
public function __construct(array &$form, FormStateInterface $form_state) {
parent::__construct($form, $form_state);
$this->inputValues = [];
$this->storedValues = [];
}
public function saveInputValues() {
$stored_input = $this->inputValues;
$stored_input[$this->currentStep] = $this->formState
->getUserInput();
$this->inputValues = $stored_input;
}
public function getInputValues() {
return $this->inputValues;
}
public function saveStoredValues() {
$stored_values = $this->storedValues;
$stored_values[$this->currentStep] = $this
->getStepValues($this->steps[$this->currentStep]);
$this->storedValues = $stored_values;
}
public function getStoredValues() {
return $this->storedValues;
}
public function rebuildForm(array &$form) {
$this->stepIndicator = new StepIndicator($form, $this->formState, $this->currentStep);
$this->stepIndicator
->render($form);
unset($form['actions']['next']['#limit_validation_errors']);
foreach ($this->steps as $key => $step) {
$all_children = $this
->getAllChildren($step);
if (!empty($all_children)) {
if ($key != $this->currentStep) {
foreach ($all_children as $child_id) {
if (isset($form[$child_id])) {
if ($this->currentStep != count($this->steps) - 1) {
unset($form[$child_id]);
}
else {
$form[$child_id]['#access'] = FALSE;
if ($child_id == 'account' && isset($form[$child_id]['pass'])) {
$form[$child_id]['pass']['#required'] = FALSE;
}
}
}
}
}
else {
foreach ($all_children as $child_id) {
if (isset($form[$child_id])) {
$form['actions']['next']['#limit_validation_errors'][] = [
$child_id,
];
}
}
}
}
}
if ($this->currentStep == count($this->steps) - 1) {
foreach ($form as $form_element) {
if (is_array($form_element) && isset($form_element['#type'])) {
if (isset($form['actions']['next']['#limit_validation_errors'])) {
unset($form['actions']['next']['#limit_validation_errors']);
}
}
}
}
$this->formButton = new FormButton($form, $this->formState, $this->currentStep);
$this->formButton
->render($form);
}
}