From d161dae2d0ac75da6c70cf2f88d212b036a661a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien=20Decre=CC=82me?= Date: Thu, 16 Mar 2017 01:53:56 +0100 Subject: [PATCH 1/2] [Workflow] Allow transition when many froms --- .../Component/Workflow/Tests/WorkflowTest.php | 5 +++-- src/Symfony/Component/Workflow/Workflow.php | 20 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Component/Workflow/Tests/WorkflowTest.php b/src/Symfony/Component/Workflow/Tests/WorkflowTest.php index 712e50fb17ef1..d287eb857d852 100644 --- a/src/Symfony/Component/Workflow/Tests/WorkflowTest.php +++ b/src/Symfony/Component/Workflow/Tests/WorkflowTest.php @@ -313,8 +313,9 @@ public function testGetEnabledTransitions() $subject->marking = array('c' => 1, 'e' => 1); $transitions = $workflow->getEnabledTransitions($subject); - $this->assertCount(1, $transitions); - $this->assertSame('t5', $transitions[0]->getName()); + $this->assertCount(2, $transitions); + $this->assertSame('t2', $transitions[0]->getName()); + $this->assertSame('t5', $transitions[1]->getName()); } public function testGetEnabledTransitionsWithSameNameTransition() diff --git a/src/Symfony/Component/Workflow/Workflow.php b/src/Symfony/Component/Workflow/Workflow.php index 6397b9147e784..39a08a725b93d 100644 --- a/src/Symfony/Component/Workflow/Workflow.php +++ b/src/Symfony/Component/Workflow/Workflow.php @@ -186,19 +186,25 @@ public function getDefinition() return $this->definition; } + /** + * Check if this marking has at least one place in the froms transition + * Check also if the transition is guarded for this marking + * + * @param object $subject + * @param Marking $marking + * @param Transition $transition + * + * @return bool + */ private function doCan($subject, Marking $marking, Transition $transition) { foreach ($transition->getFroms() as $place) { - if (!$marking->has($place)) { - return false; + if ($marking->has($place) && true !== $this->guardTransition($subject, $marking, $transition)) { + return true; } } - if (true === $this->guardTransition($subject, $marking, $transition)) { - return false; - } - - return true; + return false; } /** From deef5ead20250a8036b45922af3df26097d0c798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien=20Decre=CC=82me?= Date: Thu, 16 Mar 2017 02:09:00 +0100 Subject: [PATCH 2/2] cs --- src/Symfony/Component/Workflow/Workflow.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Workflow/Workflow.php b/src/Symfony/Component/Workflow/Workflow.php index 39a08a725b93d..759282d8b512f 100644 --- a/src/Symfony/Component/Workflow/Workflow.php +++ b/src/Symfony/Component/Workflow/Workflow.php @@ -187,8 +187,8 @@ public function getDefinition() } /** - * Check if this marking has at least one place in the froms transition - * Check also if the transition is guarded for this marking + * Check if this marking has at least one place in the froms transition. + * Check also if the transition is guarded for this marking. * * @param object $subject * @param Marking $marking