/** * @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())); } }
/** * @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())); } } } }
/** * @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; }
/** * 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; }
/** * @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; }