Completed
Push — wip/steps ( c05a56...a944ff )
by Romain
02:56
created

SkipMiddleware   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 8

Importance

Changes 0
Metric Value
wmc 14
lcom 0
cbo 8
dl 0
loc 66
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
C before() 0 60 14
1
<?php
2
declare(strict_types=1);
3
4
namespace Romm\Formz\Middleware\Item\Step;
5
6
use Romm\Formz\Middleware\Argument\Arguments;
7
use Romm\Formz\Middleware\Item\AbstractMiddleware;
8
use Romm\Formz\Middleware\Item\Begin\BeginSignal;
9
use Romm\Formz\Middleware\Signal\Before;
10
use TYPO3\CMS\Core\Utility\GeneralUtility;
11
12
class SkipMiddleware extends AbstractMiddleware implements Before, BeginSignal
13
{
14
    /**
15
     * @param Arguments $arguments
16
     */
17
    public function before(Arguments $arguments)
18
    {
19
        $request = $this->getRequest();
20
21
        if (!$request->hasArgument('skip')
22
            || !$request->getArgument('skip')
23
        ) {
24
            return;
25
        }
26
27
        $formName = $this->getFormObject()->getName();
28
29
        if (!$request->hasArgument($formName)) {
30
            return;
31
        }
32
33
        if (!$request->hasArgument('step')) {
34
            return;
35
        }
36
37
        $step = $request->getArgument('step');
38
        $definition = $this->getFormObject()->getDefinition();
39
40
        if (!$definition->hasSteps()
41
            || !$definition->getSteps()->hasEntry($step)
42
        ) {
43
            return;
44
        }
45
46
        $currentStep = $definition->getSteps()->getEntry($step);
47
48
        /** @var array $formArray */
49
        $formArray = $request->getArgument($formName);
50
51
        $skipSubsteps = [];
52
53
        if ($request->hasArgument('skipSubsteps')) {
54
            $skipSubsteps = GeneralUtility::trimExplode(',', $request->getArgument('skipSubsteps'));
55
        }
56
57
        if (empty($skipSubsteps)) {
58
            foreach ($currentStep->getSupportedFields() as $field) {
59
                unset($formArray[$field->getField()->getName()]);
60
            }
61
        } elseif ($currentStep->hasSubsteps()) {
62
            $substeps = $currentStep->getSubsteps();
63
64
            foreach ($skipSubsteps as $substep) {
65
                if (!$substeps->hasEntry($substep)) {
66
                    continue;
67
                }
68
69
                foreach ($substeps->getEntry($substep)->getSupportedFields() as $field) {
70
                    unset($formArray[$field->getField()->getName()]);
71
                }
72
            }
73
        }
74
75
        $request->setArgument($formName, $formArray);
76
    }
77
}
78