Completed
Push — wip/steps ( 21e01d...c8af11 )
by Romain
02:30
created

StepDispatchingMiddleware::initializeMiddleware()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
/*
3
 * 2017 Romain CANON <[email protected]>
4
 *
5
 * This file is part of the TYPO3 FormZ project.
6
 * It is free software; you can redistribute it and/or modify it
7
 * under the terms of the GNU General Public License, either
8
 * version 3 of the License, or any later version.
9
 *
10
 * For the full copyright and license information, see:
11
 * http://www.gnu.org/licenses/gpl-3.0.html
12
 */
13
14
namespace Romm\Formz\Middleware\Item\Step;
15
16
use Romm\Formz\Form\FormObject\FormObjectFactory;
17
use Romm\Formz\Middleware\Item\DefaultMiddleware;
18
use Romm\Formz\Middleware\Item\Step\Service\StepMiddlewareService;
19
use Romm\Formz\Middleware\Processor\PresetMiddlewareInterface;
20
21
/**
22
 * This middleware should be the last one called, as it is used to dispatch the
23
 * request to the next step, if there is one.
24
 */
25
class StepDispatchingMiddleware extends DefaultMiddleware implements PresetMiddlewareInterface
26
{
27
    /**
28
     * @var int
29
     */
30
    protected $priority = self::PRIORITY_STEP;
31
32
    /**
33
     * @var StepMiddlewareService
34
     */
35
    protected $service;
36
37
    /**
38
     * Inject the step service.
39
     */
40
    public function initializeMiddleware()
41
    {
42
        $this->service = StepMiddlewareService::get();
43
    }
44
45
    /**
46
     * @see StepDispatchingMiddleware
47
     */
48
    protected function process()
49
    {
50
        $formObject = $this->getFormObject();
51
52
        if (false === $formObject->getDefinition()->hasSteps()) {
53
            return;
54
        }
55
56
        $formResult = $formObject->getFormResult();
57
58
        if ($formObject->formWasSubmitted()
59
            && false === $formResult->hasErrors()
60
        ) {
61
            $currentStep = $this->getCurrentStep();
62
63
            if ($currentStep) {
64
                $stepService = FormObjectFactory::get()->getStepService($formObject);
65
66
                if ($currentStep->hasSubsteps()
67
                    && false === $stepService->lastSubstepWasValidated()
68
                ) {
69
                    return;
70
                }
71
72
                $this->service->redirectToNextStep($currentStep, $this->redirect());
73
            }
74
        }
75
    }
76
}
77