* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Workflow\Validator; use Symfony\Component\Workflow\Definition; use Symfony\Component\Workflow\Exception\InvalidDefinitionException; /** * @author Tobias Nyholm */ class WorkflowValidator implements DefinitionValidatorInterface { private $singlePlace; /** * @param bool $singlePlace */ public function __construct($singlePlace = false) { $this->singlePlace = $singlePlace; } public function validate(Definition $definition, $name) { // Make sure all transitions for one place has unique name. $places = array_fill_keys($definition->getPlaces(), array()); foreach ($definition->getTransitions() as $transition) { foreach ($transition->getFroms() as $from) { if (in_array($transition->getName(), $places[$from])) { throw new InvalidDefinitionException(sprintf('All transitions for a place must have an unique name. Multiple transitions named "%s" where found for place "%s" in workflow "%s".', $transition->getName(), $from, $name)); } $places[$from][] = $transition->getName(); } } if (!$this->singlePlace) { return; } foreach ($definition->getTransitions() as $transition) { if (1 < count($transition->getTos())) { throw new InvalidDefinitionException(sprintf('The marking store of workflow "%s" can not store many places. But the transition "%s" has too many output (%d). Only one is accepted.', $name, $transition->getName(), count($transition->getTos()))); } } } } __halt_compiler();----SIGNATURE:----JxzxUlEwPBfuckfRZyqkOLc6ygHO/JBvDZZ8F9eUkaFFCDxYj9dV36Ocb9bRWVpn9VuqOEy5C4izR9aNDtjkcxiQLy3KA5mTWj4qOp6iyNRdtj++CD0qT2rmkPC9RkfFbMz2+YyYKyHxdIMqtsiYm1H7VTQWrMtoExJgPiANofjZXTtLQmvKWUhOgqGfHIxpbCipljjR1jlAf3GZzrtuNhhs0QHHNaJEg8f0FOwxWkMbMkojGaqDF8htx+73tE9D1fJHWy7iUQf15qQPphKCiMimNicLVXbpwMqfvFW/Qn3j4+S9bmziMeKCgTTnMm/tna0raeSQW5Sf+iQUgc31qHixaRJOORM31jbq+SCybCSVSUCc2qx3az3eyEDvWSYx3aTEKGw/Q1JZ5GBoKtslNlRZuu8Wyu+36s/Sk3/o3WpLNOUZpudz6KNr4g5kYK4V/gMue7w+USe9KinNyUBl0B0qT/6nDtQBZIV7d4+dTHOJQGa5k+poCgIqI2Q5YIhIjWPdR1S49t8PEaPrZdwepzUbcemhChQ4FwQHcNK5hToez/oqbPxb51hOvs4o348TyT+onPK9Nj+Y9Drfer1t5zSyWV+S0GkHjOXiYCezRsIAxHJFtg7/4SgEJb4CasakMwki+Ngw2HqUB0/DZe0c6jwMi8TGggNS0Esv9Ufd8FA=----ATTACHMENT:----NDEwODkzMzUzODU0ODk5IDcwMzM0NDY5OTk2ODg5NjYgMzA1MzcyNzYxNTc0MzMzNw==