@@ -404,10 +404,20 @@ private function registerWorkflowConfiguration(array $workflows, ContainerBuilde
404404 $ registryDefinition = $ container ->getDefinition ('workflow.registry ' );
405405
406406 foreach ($ workflows as $ name => $ workflow ) {
407+ $ type = $ workflow ['type ' ];
408+
407409 $ definitionDefinition = new Definition (Workflow \Definition::class);
408410 $ definitionDefinition ->addMethodCall ('addPlaces ' , array ($ workflow ['places ' ]));
409411 foreach ($ workflow ['transitions ' ] as $ transitionName => $ transition ) {
410- $ definitionDefinition ->addMethodCall ('addTransition ' , array (new Definition (Workflow \Transition::class, array ($ transitionName , $ transition ['from ' ], $ transition ['to ' ]))));
412+ if ($ type === 'workflow ' ) {
413+ $ definitionDefinition ->addMethodCall ('addTransition ' , array (new Definition (Workflow \Transition::class, array ($ transitionName , $ transition ['from ' ], $ transition ['to ' ]))));
414+ } elseif ($ type === 'state_machine ' ) {
415+ foreach ($ transition ['from ' ] as $ from ) {
416+ foreach ($ transition ['to ' ] as $ to ) {
417+ $ definitionDefinition ->addMethodCall ('addTransition ' , array (new Definition (Workflow \Transition::class, array ($ transitionName , $ from , $ to ))));
418+ }
419+ }
420+ }
411421 }
412422
413423 if (isset ($ workflow ['marking_store ' ]['type ' ])) {
@@ -419,13 +429,21 @@ private function registerWorkflowConfiguration(array $workflows, ContainerBuilde
419429 $ markingStoreDefinition = new Reference ($ workflow ['marking_store ' ]['service ' ]);
420430 }
421431
422- $ workflowDefinition = new DefinitionDecorator ('workflow.abstract ' );
432+ $ definitionDefinition ->addTag ('workflow.definition ' , array (
433+ 'name ' => $ name ,
434+ 'type ' => $ type ,
435+ 'marking_store ' => isset ($ workflow ['marking_store ' ]['type ' ]) ? $ workflow ['marking_store ' ]['type ' ] : null ,
436+ ));
437+ $ definitionDefinition ->setPublic (false );
438+
439+ $ workflowDefinition = new DefinitionDecorator (sprintf ('%s.abstract ' , $ type ));
423440 $ workflowDefinition ->replaceArgument (0 , $ definitionDefinition );
424441 $ workflowDefinition ->replaceArgument (1 , $ markingStoreDefinition );
425442 $ workflowDefinition ->replaceArgument (3 , $ name );
426443
427- $ workflowId = ' workflow. ' . $ name ;
444+ $ workflowId = sprintf ( ' %s.%s ' , $ type , $ name) ;
428445
446+ $ container ->setDefinition (sprintf ('%s.definition ' , $ workflowId ), $ definitionDefinition );
429447 $ container ->setDefinition ($ workflowId , $ workflowDefinition );
430448
431449 foreach ($ workflow ['supports ' ] as $ supportedClass ) {
0 commit comments