/** * @param string $workflowName * @param array $attributes * @param array $steps * @return Workflow */ protected function createWorkflow($workflowName, array $attributes = array(), array $steps = array()) { $workflow = new Workflow(); $workflow->setName($workflowName); foreach ($attributes as $name => $attribute) { $workflow->getAttributeManager()->getAttributes()->set($name, $attribute); } $workflow->getStepManager()->setSteps($steps); return $workflow; }
/** * @param string $workflowName * @param array $attributes * @param array $steps * @param string|null $relatedEntity * @return Workflow */ protected function createWorkflow($workflowName, array $attributes = array(), array $steps = array(), $relatedEntity = null) { $entityConnector = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Model\\EntityConnector')->disableOriginalConstructor()->getMock(); $aclManager = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Acl\\AclManager')->disableOriginalConstructor()->getMock(); $workflow = new Workflow($entityConnector, $aclManager); $workflow->setName($workflowName); foreach ($attributes as $name => $attribute) { $workflow->getAttributeManager()->getAttributes()->set($name, $attribute); } $workflow->getStepManager()->setSteps($steps); $definition = new WorkflowDefinition(); $definition->setRelatedEntity($relatedEntity); $workflow->setDefinition($definition); return $workflow; }
/** * @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())); } 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 \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; }