/**
  * @param Workflow $workflow
  * @param string $currentStepName
  * @return WorkflowItem
  */
 protected function createWorkflowItem(Workflow $workflow, $currentStepName = null)
 {
     $result = new WorkflowItem();
     $result->setCurrentStepName($currentStepName);
     $result->setWorkflowName($workflow->getName());
     return $result;
 }
 /**
  * @param Workflow $workflow
  * @param string $attributeName
  * @return \Oro\Bundle\WorkflowBundle\Model\Attribute
  * @throws SerializerException If attribute not found
  */
 protected function getAttribute(Workflow $workflow, $attributeName)
 {
     $attribute = $workflow->getAttributeManager()->getAttribute($attributeName);
     if (!$attribute) {
         throw new SerializerException(sprintf('Workflow "%s" has no attribute "%s"', $workflow->getName(), $attributeName));
     }
     return $attribute;
 }
 /**
  * Returns EntityManager for entity.
  *
  * @param Workflow $workflow
  * @param Attribute $attribute
  * @return EntityManager
  * @throws SerializerException
  */
 protected function getEntityManager(Workflow $workflow, Attribute $attribute)
 {
     $entityClass = $attribute->getOption('class');
     $result = $this->registry->getManagerForClass($entityClass);
     if (!$result) {
         throw new SerializerException(sprintf('Attribute "%s" of workflow "%s" contains object of "%s", but it\'s not managed entity class', $attribute->getName(), $workflow->getName(), $entityClass));
     }
     return $result;
 }
 public function testBuildForm()
 {
     $builder = $this->getMock('Symfony\\Component\\Form\\Test\\FormBuilderInterface');
     $workflowItem = new WorkflowItem();
     $transitionName = 'test';
     $transition = $this->getMock('Oro\\Bundle\\WorkflowBundle\\Model\\Transition');
     $transition->expects($this->once())->method('getName')->will($this->returnValue($transitionName));
     $workflow = new Workflow();
     $workflow->getTransitionManager()->setTransitions(array($transition));
     $options = array('workflow' => $workflow, 'workflow_item' => $workflowItem, 'transition_name' => $transitionName);
     $this->type->buildForm($builder, $options);
 }
 /**
  * @param WorkflowDefinition $workflowDefinition
  * @param Workflow $workflow
  */
 protected function setEntityAcls(WorkflowDefinition $workflowDefinition, Workflow $workflow)
 {
     $entityAcls = array();
     foreach ($workflow->getAttributeManager()->getEntityAttributes() as $attribute) {
         foreach ($workflow->getStepManager()->getSteps() as $step) {
             $updatable = $attribute->isEntityUpdateAllowed() && $step->isEntityUpdateAllowed($attribute->getName());
             $deletable = $attribute->isEntityDeleteAllowed() && $step->isEntityDeleteAllowed($attribute->getName());
             if (!$updatable || !$deletable) {
                 $entityAcl = new WorkflowEntityAcl();
                 $entityAcl->setAttribute($attribute->getName())->setStep($workflowDefinition->getStepByName($step->getName()))->setEntityClass($attribute->getOption('class'))->setUpdatable($updatable)->setDeletable($deletable);
                 $entityAcls[] = $entityAcl;
             }
         }
     }
     $workflowDefinition->setEntityAcls($entityAcls);
 }
 /**
  * @param Workflow $workflow
  * @throws AssemblerException
  */
 protected function validateWorkflow(Workflow $workflow)
 {
     $startTransitions = $workflow->getTransitionManager()->getTransitions()->filter(function (Transition $transition) {
         return $transition->isStart();
     });
     if (!$startTransitions->count()) {
         throw new AssemblerException(sprintf('Workflow "%s" does not contains neither start step nor start transitions', $workflow->getName()));
     }
 }
Beispiel #7
0
 /**
  * @param \DateTime $dateFrom
  * @param \DateTime $dateTo
  * @param Workflow  $workflow
  * @param AclHelper $aclHelper
  *
  * @return array
  */
 public function getFunnelChartData(\DateTime $dateFrom, \DateTime $dateTo, Workflow $workflow = null, AclHelper $aclHelper = null)
 {
     if (!$workflow) {
         return ['items' => [], 'nozzleSteps' => []];
     }
     $steps = $workflow->getStepManager()->getOrderedSteps();
     // regular and final steps should be calculated separately
     $regularSteps = [];
     $finalSteps = [];
     foreach ($steps as $step) {
         if (!in_array($step->getName(), $this->excludedSteps)) {
             if ($step->isFinal()) {
                 $finalSteps[] = $step->getName();
             } else {
                 $regularSteps[] = $step->getName();
             }
         }
     }
     // regular steps should be calculated for whole period, final steps - for specified period
     $regularStepsData = $this->getStepData($regularSteps, null, null, $aclHelper);
     $finalStepsData = $this->getStepData($finalSteps, $dateFrom, $dateTo, $aclHelper);
     // final calculation
     $data = [];
     foreach ($steps as $step) {
         $stepName = $step->getName();
         if (!in_array($stepName, $this->excludedSteps)) {
             if ($step->isFinal()) {
                 $stepValue = isset($finalStepsData[$stepName]) ? $finalStepsData[$stepName] : 0;
                 $data[] = ['label' => $step->getLabel(), 'value' => $stepValue, 'isNozzle' => true];
             } else {
                 $stepValue = isset($regularStepsData[$stepName]) ? $regularStepsData[$stepName] : 0;
                 $data[] = ['label' => $step->getLabel(), 'value' => $stepValue, 'isNozzle' => false];
             }
         }
     }
     return $data;
 }
 /**
  * @param Workflow $workflow
  * @throws AssemblerException
  */
 protected function validateWorkflow(Workflow $workflow)
 {
     $startTransitions = $workflow->getTransitionManager()->getTransitions()->filter(function (Transition $transition) {
         return $transition->isStart();
     });
     if (!$startTransitions->count()) {
         throw new AssemblerException(sprintf('Workflow "%s" does not contains neither start step nor start transitions', $workflow->getName()));
     }
     if ($workflow->getType() == Workflow::TYPE_ENTITY) {
         /** @var Step $step */
         foreach ($workflow->getStepManager()->getSteps() as $step) {
             if ($step->getFormOptions()) {
                 throw new AssemblerException(sprintf('Workflow "%s" has type "entity" and cannot support form options in step "%s"', $workflow->getName(), $step->getName()));
             }
         }
     }
 }
Beispiel #9
0
 /**
  * @param string|Workflow|WorkflowItem|WorkflowDefinition $workflowIdentifier
  */
 public function activateWorkflow($workflowIdentifier)
 {
     if ($workflowIdentifier instanceof WorkflowDefinition) {
         $entityClass = $workflowIdentifier->getRelatedEntity();
         $workflowName = $workflowIdentifier->getName();
     } else {
         $workflow = $this->getWorkflow($workflowIdentifier);
         $entityClass = $workflow->getDefinition()->getRelatedEntity();
         $workflowName = $workflow->getName();
     }
     $this->setActiveWorkflow($entityClass, $workflowName);
 }
 /**
  * @param null|string $workflowName
  * @return Workflow
  */
 protected function createWorkflow($workflowName = null)
 {
     $workflow = new Workflow();
     $workflow->setName($workflowName);
     return $workflow;
 }
Beispiel #11
0
 /**
  * Ensure that all database entities in workflow are still in Doctrine Unit of Work
  *
  * @param Workflow $workflow
  * @return Workflow
  * @throws WorkflowNotFoundException
  */
 protected function refreshWorkflow(Workflow $workflow)
 {
     $refreshedDefinition = $this->refreshWorkflowDefinition($workflow->getDefinition());
     $workflow->setDefinition($refreshedDefinition);
     return $workflow;
 }
Beispiel #12
0
 /**
  * @param string $workflowName
  * @param EntityConnector $entityConnector
  * @param AclManager $aclManager
  * @param AttributeManager $attributeManager
  * @param TransitionManager $transitionManager
  * @return Workflow
  */
 protected function createWorkflow($workflowName = null, $entityConnector = null, $aclManager = null, $attributeManager = null, $transitionManager = null)
 {
     if (!$entityConnector) {
         $entityConnector = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Model\\EntityConnector')->disableOriginalConstructor()->getMock();
     }
     if (!$aclManager) {
         $aclManager = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Acl\\AclManager')->disableOriginalConstructor()->getMock();
     }
     $workflow = new Workflow($entityConnector, $aclManager, null, $attributeManager, $transitionManager);
     $workflow->setName($workflowName);
     return $workflow;
 }
 /**
  * @param Workflow $workflow
  * @param Attribute $attribute
  * @param array $attributeOptions
  * @return array
  */
 protected function guessAttributeOptions(Workflow $workflow, Attribute $attribute, array $attributeOptions)
 {
     if (!empty($attributeOptions['form_type'])) {
         return $attributeOptions;
     }
     $relatedEntity = $workflow->getDefinition()->getRelatedEntity();
     $typeGuess = $this->attributeGuesser->guessClassAttributeForm($relatedEntity, $attribute);
     if (!$typeGuess) {
         return $attributeOptions;
     }
     $attributeOptions['form_type'] = $typeGuess->getType();
     $attributeOptions['options'] = array_merge_recursive($attributeOptions['options'], $typeGuess->getOptions());
     return $attributeOptions;
 }
 /**
  * @param Workflow $workflow
  * @param object $entity
  * @return null|Attribute
  */
 protected function getManagedEntityAttributeByEntity(Workflow $workflow, $entity)
 {
     $entityClass = $this->doctrineHelper->getEntityClass($entity);
     /** @var Attribute $attribute */
     foreach ($workflow->getAttributeManager()->getManagedEntityAttributes() as $attribute) {
         if ($attribute->getOption('class') == $entityClass) {
             return $attribute;
         }
     }
     return null;
 }