/** * Creates states for action. * * @param Workflow\WorkflowAction $action Workflow action to build states * @param string $comment Data */ protected function buildActionStates(Workflow\WorkflowAction $action, $comment) { $workflow = $this->factory->getWorkflow(); if (!preg_match_all('/@WF\\\\ifstate (.*)/', $comment, $tags, PREG_SET_ORDER)) { // add all possible states if not configured foreach ($workflow->getStates() as $state) { $state->addAction($action); } return; } foreach ($tags as $tag) { $stateName = defined($tag[1]) ? constant($tag[1]) : $tag[1]; if ($state = $workflow->getState($stateName)) { $state->addAction($action); } } }
<?php require_once 'bootstrap.php'; use DevelArts\Workflow; $factory = new Workflow\WorkflowFactory(); // define states $factory->addStates([OrderStatusEnum::PLACED => 'Placed', OrderStatusEnum::PROCESSING => 'Processing', OrderStatusEnum::SENT => 'Sent', OrderStatusEnum::COMPLETED => 'Completed', OrderStatusEnum::CANCELED => 'Canceled']); $workflow = $factory->getWorkflow(); // create action "Process" $action = $factory->createAction('process', $workflow->getState(OrderStatusEnum::PROCESSING), new OrderProcessAction()); $action->setLabel('Process'); $action->addConstraint(new OrderProcessingConstraint()); // add process to states $workflow->getState(OrderStatusEnum::PLACED)->addAction($action); $workflow->getState(OrderStatusEnum::CANCELED)->addAction($action); // create action "Cancel" $action = $factory->createAction('cancel', $workflow->getState(OrderStatusEnum::CANCELED)); $action->addObserver(new OrderCancelReasonObserver()); $action->setLabel('Cancel'); // add cancel to states $workflow->getState(OrderStatusEnum::PLACED)->addAction($action); $workflow->getState(OrderStatusEnum::PROCESSING)->addAction($action); // create action "Send" $action = $factory->createAction('send', $workflow->getState(OrderStatusEnum::SENT)); $action->setLabel('Send'); // add send to states $workflow->getState(OrderStatusEnum::PROCESSING)->addAction($action); // create "Complete" action $action = $factory->createAction('complete', $workflow->getState(OrderStatusEnum::COMPLETED)); $action->setLabel('Complete'); // add complete to states