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);
     }
 }
Exemple #3
0
 /**
  * @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));
 }
Exemple #5
0
 /**
  * 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;
 }
Exemple #6
0
 /**
  * @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())));
 }
Exemple #8
0
 /**
  * @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;
 }