/**
  * Creates actions.
  *
  * @param string $comment Data
  *
  * @throws \InvalidArgumentException
  */
 protected function buildActions($comment)
 {
     $pattern = '/@WF\\\\action (([^\\@]*) \\@ )?(([a-zA-Z\\/]*)\\:\\:)?([a-zA-Z]*) > (.*)/';
     if (!preg_match_all($pattern, $comment, $tags, PREG_SET_ORDER)) {
         return;
     }
     $workflow = $this->factory->getWorkflow();
     foreach ($tags as $tag) {
         $stateName = defined($tag[6]) ? constant($tag[6]) : $tag[6];
         if (!($state = $workflow->getState($stateName))) {
             throw new \InvalidArgumentException('invalid state specified');
         }
         $action = $this->factory->createAction($tag[5], $state);
         $action->setLabel($tag[2]);
         if ($tag[4]) {
             $this->configureAction($action, $tag[4]);
         } else {
             foreach ($workflow->getStates() as $state) {
                 $state->addAction($action);
             }
         }
     }
 }
Exemple #2
0
<?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