/
StepList.php
151 lines (132 loc) · 2.53 KB
/
StepList.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
class StepList implements IteratorAggregate
{
/**
*
* @var integer
*/
protected $offset = 0;
/**
*
* @var array
*/
protected $steps = array();
/**
*
* @var array
*/
private $stepNames = [];
/**
*
* @param array $stepNames
*/
public function __construct(array $stepConfig)
{
foreach ($stepConfig as $key => $config) {
$this->stepNames[$key] = $config['name'];
$this->steps[$key] = new Step();
$this->steps[$key]->setName($config['name']);
$this->steps[$key]->setDisplayName($config['displayName']);
$this->steps[$key]->setControllerName($config['controllerClass']);
}
}
/**
*
* @return int
*/
public function getOffset()
{
return $this->offset;
}
/**
*
* @param int $offset
* @return StepList
*/
public function setOffset($offset)
{
$this->offset = $offset;
return $this;
}
/**
*
* @param string $stepName
* @return StepList
*/
public function setOffsetFromStepName($stepName)
{
$this->offset = (int) array_search($stepName, $this->stepNames);
return $this;
}
/**
*
* @param string $stepName
* @return int
*/
public function getOffsetFromStepName($stepName)
{
return (int) array_search($stepName, $this->stepNames);
}
/**
*
* @return Step[]
*/
public function getSteps()
{
return $this->steps;
}
/**
*
* @return Step
*/
public function current()
{
return $this->steps[$this->offset];
}
/**
*
* @return Step
*/
public function next()
{
if (array_key_exists($this->offset+1, $this->steps)) {
$this->offset++;
}
return $this;
}
/**
*
* @return Step
*/
public function previous()
{
if (array_key_exists($this->offset-1, $this->steps)) {
$this->offset--;
}
return $this;
}
/**
*
* @return boolean
*/
public function isFirstStep()
{
return 0 == $this->offset;
}
/**
*
* @return boolean
*/
public function isLastStep()
{
return $this->offset == count($this->steps) -1;
}
/**
*
* @return Traversable
*/
public function getIterator()
{
return new ArrayIterator($this->steps);
}
}