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