@@ -87,48 +87,47 @@ public function getMarking($subject)
87
87
*
88
88
* @param object $subject A subject
89
89
* @param string $transitionName A transition
90
+ * @param array $eventParameters
90
91
*
91
92
* @return bool true if the transition is enabled
92
93
*
93
- * @throws LogicException If the transition does not exist
94
94
*/
95
- public function can ($ subject , $ transitionName )
95
+ public function can ($ subject , $ transitionName, array $ eventParameters = array () )
96
96
{
97
97
$ transitions = $ this ->getTransitions ($ transitionName );
98
98
$ marking = $ this ->getMarking ($ subject );
99
99
100
- return null !== $ this ->getTransitionForSubject ($ subject , $ marking , $ transitions );
100
+ return null !== $ this ->getTransitionForSubject ($ subject , $ marking , $ transitions, $ eventParameters );
101
101
}
102
102
103
103
/**
104
104
* Fire a transition.
105
105
*
106
106
* @param object $subject A subject
107
107
* @param string $transitionName A transition
108
+ * @param array $eventParameters
108
109
*
109
110
* @return Marking The new Marking
110
111
*
111
- * @throws LogicException If the transition is not applicable
112
- * @throws LogicException If the transition does not exist
113
112
*/
114
- public function apply ($ subject , $ transitionName )
113
+ public function apply ($ subject , $ transitionName, array $ eventParameters = array () )
115
114
{
116
115
$ transitions = $ this ->getTransitions ($ transitionName );
117
116
$ marking = $ this ->getMarking ($ subject );
118
117
119
- if (null === $ transition = $ this ->getTransitionForSubject ($ subject , $ marking , $ transitions )) {
118
+ if (null === $ transition = $ this ->getTransitionForSubject ($ subject , $ marking , $ transitions, $ eventParameters )) {
120
119
throw new LogicException (sprintf ('Unable to apply transition "%s" for workflow "%s". ' , $ transitionName , $ this ->name ));
121
120
}
122
121
123
- $ this ->leave ($ subject , $ transition , $ marking );
122
+ $ this ->leave ($ subject , $ transition , $ marking, $ eventParameters );
124
123
125
- $ this ->transition ($ subject , $ transition , $ marking );
124
+ $ this ->transition ($ subject , $ transition , $ marking, $ eventParameters );
126
125
127
- $ this ->enter ($ subject , $ transition , $ marking );
126
+ $ this ->enter ($ subject , $ transition , $ marking, $ eventParameters );
128
127
129
128
$ this ->markingStore ->setMarking ($ subject , $ marking );
130
129
131
- $ this ->announce ($ subject , $ transition , $ marking );
130
+ $ this ->announce ($ subject , $ transition , $ marking, $ eventParameters );
132
131
133
132
return $ marking ;
134
133
}
@@ -174,13 +173,13 @@ public function getDefinition()
174
173
*
175
174
* @return bool|void boolean true if this transition is guarded, ie you cannot use it
176
175
*/
177
- private function guardTransition ($ subject , Marking $ marking , Transition $ transition )
176
+ private function guardTransition ($ subject , Marking $ marking , Transition $ transition, array $ eventParameters = array () )
178
177
{
179
178
if (null === $ this ->dispatcher ) {
180
179
return ;
181
180
}
182
181
183
- $ event = new GuardEvent ($ subject , $ marking , $ transition );
182
+ $ event = new GuardEvent ($ subject , $ marking , $ transition, $ eventParameters );
184
183
185
184
$ this ->dispatcher ->dispatch ('workflow.guard ' , $ event );
186
185
$ this ->dispatcher ->dispatch (sprintf ('workflow.%s.guard ' , $ this ->name ), $ event );
@@ -189,10 +188,10 @@ private function guardTransition($subject, Marking $marking, Transition $transit
189
188
return $ event ->isBlocked ();
190
189
}
191
190
192
- private function leave ($ subject , Transition $ transition , Marking $ marking )
191
+ private function leave ($ subject , Transition $ transition , Marking $ marking, array $ eventParameters = array () )
193
192
{
194
193
if (null !== $ this ->dispatcher ) {
195
- $ event = new Event ($ subject , $ marking , $ transition );
194
+ $ event = new Event ($ subject , $ marking , $ transition, $ eventParameters );
196
195
197
196
$ this ->dispatcher ->dispatch ('workflow.leave ' , $ event );
198
197
$ this ->dispatcher ->dispatch (sprintf ('workflow.%s.leave ' , $ this ->name ), $ event );
@@ -207,23 +206,23 @@ private function leave($subject, Transition $transition, Marking $marking)
207
206
}
208
207
}
209
208
210
- private function transition ($ subject , Transition $ transition , Marking $ marking )
209
+ private function transition ($ subject , Transition $ transition , Marking $ marking, array $ eventParameters = array () )
211
210
{
212
211
if (null === $ this ->dispatcher ) {
213
212
return ;
214
213
}
215
214
216
- $ event = new Event ($ subject , $ marking , $ transition );
215
+ $ event = new Event ($ subject , $ marking , $ transition, $ eventParameters );
217
216
218
217
$ this ->dispatcher ->dispatch ('workflow.transition ' , $ event );
219
218
$ this ->dispatcher ->dispatch (sprintf ('workflow.%s.transition ' , $ this ->name ), $ event );
220
219
$ this ->dispatcher ->dispatch (sprintf ('workflow.%s.transition.%s ' , $ this ->name , $ transition ->getName ()), $ event );
221
220
}
222
221
223
- private function enter ($ subject , Transition $ transition , Marking $ marking )
222
+ private function enter ($ subject , Transition $ transition , Marking $ marking, array $ eventParameters = array () )
224
223
{
225
224
if (null !== $ this ->dispatcher ) {
226
- $ event = new Event ($ subject , $ marking , $ transition );
225
+ $ event = new Event ($ subject , $ marking , $ transition, $ eventParameters );
227
226
228
227
$ this ->dispatcher ->dispatch ('workflow.enter ' , $ event );
229
228
$ this ->dispatcher ->dispatch (sprintf ('workflow.%s.enter ' , $ this ->name ), $ event );
@@ -238,13 +237,13 @@ private function enter($subject, Transition $transition, Marking $marking)
238
237
}
239
238
}
240
239
241
- private function announce ($ subject , Transition $ initialTransition , Marking $ marking )
240
+ private function announce ($ subject , Transition $ initialTransition , Marking $ marking, array $ eventParameters = array () )
242
241
{
243
242
if (null === $ this ->dispatcher ) {
244
243
return ;
245
244
}
246
245
247
- $ event = new Event ($ subject , $ marking , $ initialTransition );
246
+ $ event = new Event ($ subject , $ marking , $ initialTransition, $ eventParameters );
248
247
249
248
foreach ($ this ->definition ->getTransitions () as $ transition ) {
250
249
if (null !== $ this ->getTransitionForSubject ($ subject , $ marking , array ($ transition ))) {
@@ -281,10 +280,11 @@ private function getTransitions($transitionName)
281
280
* @param object $subject
282
281
* @param Marking $marking
283
282
* @param Transition[] $transitions
283
+ * @param array $eventParameters
284
284
*
285
- * @return Transition| null
285
+ * @return null|Transition
286
286
*/
287
- private function getTransitionForSubject ($ subject , Marking $ marking , array $ transitions )
287
+ private function getTransitionForSubject ($ subject , Marking $ marking , array $ transitions, array $ eventParameters = array () )
288
288
{
289
289
foreach ($ transitions as $ transition ) {
290
290
foreach ($ transition ->getFroms () as $ place ) {
@@ -293,7 +293,7 @@ private function getTransitionForSubject($subject, Marking $marking, array $tran
293
293
}
294
294
}
295
295
296
- if (true !== $ this ->guardTransition ($ subject , $ marking , $ transition )) {
296
+ if (true !== $ this ->guardTransition ($ subject , $ marking , $ transition, $ eventParameters )) {
297
297
return $ transition ;
298
298
}
299
299
}
0 commit comments