/**
  * {@inheritdoc}
  */
 public function validate(Form $form)
 {
     // first build the form
     $this->errorCollection->reset();
     $this->buildForm($form);
     $this->validated = false;
     // check pre conditions first
     if ($this->getTransition()->checkPreCondition($this->item, $this->context, $this->errorCollection)) {
         $this->validated = true;
         // validate form input now
         if ($this->isInputRequired()) {
             $this->validated = $this->getForm()->validate();
             if (!$this->validated) {
                 $this->errorCollection->addError('transition.validate.form.failed', array(), $form->getErrorCollection());
             }
         }
         // check conditions after validating the form so that context is setup
         if ($this->validated && !$this->getTransition()->checkCondition($this->item, $this->context, $this->errorCollection)) {
             $this->validated = false;
         }
     }
     // trigger the listener, no matter if validated so far
     $this->validated = $this->listener->onValidate($form, $this->validated, $this->workflow, $this->item, $this->context, $this->getTransition()->getName());
     return $this->validated;
 }
 /**
  * {@inheritdoc}
  */
 public function match(Transition $transition, Item $item, Context $context, ErrorCollection $errorCollection)
 {
     // workflow is not started, so no start step exists
     if (!$item->isWorkflowStarted()) {
         if ($this->allowStartTransition) {
             return true;
         }
         $errorCollection->addError('transition.condition.step.failed.not-started');
         return false;
     }
     $permission = $this->getStepPermission($transition, $item);
     if ($this->checkPermission($permission)) {
         return true;
     }
     $errorCollection->addError('transition.condition.step.failed', array($item->getCurrentStepName(), $permission ? (string) $permission : '-'));
     return false;
 }
 /**
  * {@inheritdoc}
  */
 public function match(Transition $transition, Item $item, Context $context, ErrorCollection $errorCollection)
 {
     $permission = $transition->getPermission();
     if ($this->checkPermission($permission)) {
         return true;
     }
     $errorCollection->addError('transition.condition.transition-permission', array((string) $permission));
     return false;
 }
예제 #4
0
 function it_does_not_match_if_one_child_does_not(Condition $conditionA, Condition $conditionB, Transition $transition, Item $item, Context $context, ErrorCollection $errorCollection)
 {
     $conditionA->match($transition, $item, $context, Argument::type(self::ERROR_COLLECTION_CLASS))->willReturn(true);
     $conditionB->match($transition, $item, $context, Argument::type(self::ERROR_COLLECTION_CLASS))->willReturn(false);
     $errorCollection->addError(Argument::cetera())->shouldBeCalled();
     $this->addCondition($conditionA);
     $this->addCondition($conditionB);
     $this->match($transition, $item, $context, $errorCollection)->shouldReturn(false);
 }
 function it_does_not_match_if_step_role_is_not_granted(Transition $transition, Item $item, Context $context, User $user, Permission $permission, ErrorCollection $errorCollection)
 {
     $item->isWorkflowStarted()->willReturn(true);
     $item->getCurrentStepName()->willReturn('step');
     $permission->__toString()->willReturn('workflow/permission');
     $user->hasPermission($permission)->willReturn(false);
     $errorCollection->addError(Argument::cetera())->shouldBeCalled();
     $this->match($transition, $item, $context, $errorCollection)->shouldReturn(false);
 }
예제 #6
0
 /**
  * {@inheritdoc}
  */
 public function match(Transition $transition, Item $item, Context $context, ErrorCollection $errorCollection)
 {
     $errors = new ErrorCollection();
     $success = true;
     foreach ($this->conditions as $condition) {
         if (!$condition->match($transition, $item, $context, $errors)) {
             $success = false;
         }
     }
     if (!$success) {
         $errorCollection->addError('transition.condition.and.failed', array(), $errors);
     }
     return $success;
 }
예제 #7
0
 /**
  * {@inheritdoc}
  */
 public function match(Transition $transition, Item $item, Context $context, ErrorCollection $errorCollection)
 {
     if (!$this->conditions) {
         return true;
     }
     $errors = new ErrorCollection();
     foreach ($this->conditions as $condition) {
         if ($condition->match($transition, $item, $context, $errors)) {
             return true;
         }
     }
     $errorCollection->addError('transition.condition.or.failed', array(), $errors);
     return false;
 }
 /**
  * {@inheritdoc}
  *
  * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  * @SuppressWarnings(PHPMD.EvalExpression)
  */
 public function match(Transition $transition, Item $item, Context $context, ErrorCollection $errorCollection)
 {
     if (!$this->compiled) {
         return false;
     }
     // Vars are created so that eval can access them.
     $entity = $item->getEntity();
     $entityId = $item->getEntityId();
     // @codingStandardsIgnoreStart
     if (eval($this->compiled)) {
         // @codingStandardsIgnoreEnd
         return true;
     }
     $errorCollection->addError($this->message, array($this->expression));
     return false;
 }
 /**
  * {@inheritdoc}
  */
 public function match(Transition $transition, Item $item, Context $context, ErrorCollection $errorCollection)
 {
     $value = $this->getEntityValue($item->getEntity());
     if (Comparison::compare($value, $this->value, $this->operator)) {
         return true;
     }
     $errorCollection->addError('transition.condition.property.failed', array($this->property, $value, $this->operator, $this->value));
     return false;
 }
 function it_does_not_match_if_transition_has_no_permission(Transition $transition, Item $item, Context $context, ErrorCollection $errorCollection)
 {
     $transition->getPermission()->willReturn(null);
     $errorCollection->addError(Argument::cetera())->shouldBeCalled();
     $this->match($transition, $item, $context, $errorCollection)->shouldReturn(false);
 }
예제 #11
0
 function it_catches_action_failed_exceptions_during_post_action_execution(Item $item, Context $context, ErrorCollection $errorCollection)
 {
     $this->addPostAction(new ThrowingAction());
     $errorCollection->addError(Argument::type('string'), Argument::type('array'))->shouldBeCalled();
     $context->getProperties()->willReturn(array());
     $this->executePostActions($item, $context, $errorCollection);
 }