public function testData() { $this->assertInstanceOf('Oro\\Bundle\\WorkflowBundle\\Model\\WorkflowData', $this->workflowItem->getData()); $data = new WorkflowData(); $data['foo'] = 'Bar'; $this->workflowItem->setData($data); $this->assertEquals($data, $this->workflowItem->getData()); }
/** * Serialize data of WorkflowItem * * @param WorkflowItem $workflowItem * @param UnitOfWork $uow */ protected function serialize(WorkflowItem $workflowItem, UnitOfWork $uow) { if ($workflowItem->getData()->isModified()) { $oldValue = $workflowItem->getSerializedData(); $this->serializer->setWorkflowName($workflowItem->getWorkflowName()); $serializedData = $this->serializer->serialize($workflowItem->getData(), $this->format); $workflowItem->setSerializedData($serializedData); $uow->propertyChanged($workflowItem, 'serializedData', $oldValue, $serializedData); } }
/** * @param WorkflowItem $workflowItem * @return WorkflowItem * @throws WorkflowException */ public function updateAclIdentities(WorkflowItem $workflowItem) { $workflow = $this->workflowRegistry->getWorkflow($workflowItem->getWorkflowName()); $definition = $workflowItem->getDefinition(); $currentStepName = $workflowItem->getCurrentStep()->getName(); $aclIdentities = array(); foreach ($definition->getEntityAcls() as $entityAcl) { if ($entityAcl->getStep()->getName() == $currentStepName) { $attributeName = $entityAcl->getAttribute(); $attribute = $workflow->getAttributeManager()->getAttribute($attributeName); $entity = $workflowItem->getData()->get($attributeName); if (!$entity) { continue; } if (!is_object($entity)) { throw new WorkflowException(sprintf('Value of attribute "%s" must be an object', $attributeName)); } $aclIdentity = new WorkflowEntityAclIdentity(); $aclIdentity->setAcl($entityAcl)->setEntityClass($attribute->getOption('class'))->setEntityId($this->doctrineHelper->getSingleEntityIdentifier($entity)); $aclIdentities[] = $aclIdentity; } } $workflowItem->setAclIdentities($aclIdentities); return $workflowItem; }
/** * Bind entities to workflow item * * @param WorkflowItem $workflowItem * @return bool Returns true if new entities were bound */ public function bindEntities(WorkflowItem $workflowItem) { $workflowData = $workflowItem->getData(); if (!$workflowData->isModified()) { return false; } $workflow = $this->workflowRegistry->getWorkflow($workflowItem->getWorkflowName()); $bindAttributeNames = $workflow->getAttributeManager()->getBindEntityAttributeNames(); $entitiesToBind = $workflowData->getValues($bindAttributeNames); return $workflowItem->syncBindEntities($this->createBindEntities($entitiesToBind)); }
/** * Create workflow item. * * @param object $entity * @param array $data * @return WorkflowItem */ public function createWorkflowItem($entity, array $data = array()) { $entityAttributeName = $this->attributeManager->getEntityAttribute()->getName(); $workflowItem = new WorkflowItem(); $workflowItem->setWorkflowName($this->getName())->setEntity($entity); if (array_key_exists($entityAttributeName, $data)) { unset($data[$entityAttributeName]); } $workflowItem->getData()->set($entityAttributeName, $entity)->setFieldsMapping($this->getAttributesMapping())->add($data); $workflowItem->setDefinition($this->getDefinition()); return $workflowItem; }
/** * @expectedException \Oro\Bundle\WorkflowBundle\Exception\WorkflowException * @expectedExceptionMessage Value of attribute "attribute" must be an object */ public function testUpdateAclIdentitiesNotAnObjectException() { $workflowName = 'test_workflow'; $step = new WorkflowStep(); $step->setName('step'); $attribute = new Attribute(); $attribute->setName('attribute')->setOption('class', 'TestEntity'); $entityAcl = new WorkflowEntityAcl(); $entityAcl->setStep($step)->setAttribute($attribute->getName()); $definition = new WorkflowDefinition(); $definition->setName($workflowName)->setSteps(array($step))->setEntityAcls(array($entityAcl)); $this->setWorkflow($workflowName, array($attribute)); $workflowItem = new WorkflowItem(); $workflowItem->setWorkflowName($workflowName)->setDefinition($definition)->setCurrentStep($step); $workflowItem->getData()->set($attribute->getName(), 'not_an_object'); $this->manager->updateAclIdentities($workflowItem); }
/** * Get transition form. * * @param WorkflowItem $workflowItem * @param Transition $transition * @return Form */ protected function getTransitionForm(WorkflowItem $workflowItem, Transition $transition) { return $this->createForm($transition->getFormType(), $workflowItem->getData(), array_merge($transition->getFormOptions(), array('workflow_item' => $workflowItem, 'transition_name' => $transition->getName()))); }
/** * @param WorkflowManager $workflowManager * @param WorkflowItem $workflowItem * @param string $transition * @param array $data */ protected function transit($workflowManager, $workflowItem, $transition, array $data) { foreach ($data as $key => $value) { $workflowItem->getData()->set($key, $value); } $workflow = $workflowManager->getWorkflow($workflowItem); /** @var EntityManager $em */ $workflow->transit($workflowItem, $transition); $workflowItem->setUpdated(); }
public function testStartWorkflow() { $entity = new \DateTime(); $transition = 'test_transition'; $workflowData = array('key' => 'value'); $workflowItem = new WorkflowItem(); $workflowItem->getData()->add($workflowData); $workflow = $this->createWorkflow(); $workflow->expects($this->once())->method('start')->with($entity, $workflowData, $transition)->will($this->returnValue($workflowItem)); $entityManager = $this->createEntityManager(); $entityManager->expects($this->once())->method('beginTransaction'); $entityManager->expects($this->once())->method('persist')->with($workflowItem); $entityManager->expects($this->once())->method('flush'); $entityManager->expects($this->once())->method('commit'); $this->registry->expects($this->once())->method('getManager')->will($this->returnValue($entityManager)); $actualWorkflowItem = $this->workflowManager->startWorkflow($workflow, $entity, $transition, $workflowData); $this->assertEquals($workflowItem, $actualWorkflowItem); $this->assertEquals($workflowData, $actualWorkflowItem->getData()->getValues()); }
/** * Serialize data of WorkflowItem * * @param WorkflowItem $workflowItem */ protected function serialize(WorkflowItem $workflowItem) { $this->serializer->setWorkflowName($workflowItem->getWorkflowName()); // Cloning workflow data instance to prevent changing of original data. $workflowData = clone $workflowItem->getData(); // entity attribute must not be serialized $workflowData->remove($workflowItem->getDefinition()->getEntityAttributeName()); $serializedData = $this->serializer->serialize($workflowData, $this->format); $workflowItem->setSerializedData($serializedData); $workflowItem->getData()->setModified(false); }
/** * Create workflow item. * * @param array $data * @return WorkflowItem * @throws \LogicException */ public function createWorkflowItem(array $data = array()) { $workflowItem = new WorkflowItem(); $workflowItem->setWorkflowName($this->getName()); $workflowItem->getData()->add($data); return $workflowItem; }