public function finalizeDraft(Revision $revision, \Symfony\Component\Form\Form &$form = null, $username = null) { if ($revision->getDeleted()) { throw new \Exception("Can not finalized a deleted revision"); } if (null == $form) { if ($revision->getDatafield() == NULL) { $this->loadDataStructure($revision); } //Get the form from Factory $builder = $this->formFactory->createBuilder(RevisionType::class, $revision); $form = $builder->getForm(); } $this->lockRevision($revision, false, false, $username); $em = $this->doctrine->getManager(); /** @var RevisionRepository $repository */ $repository = $em->getRepository('AppBundle:Revision'); //TODO: test if draft and last version publish in if (!empty($revision->getAutoSave())) { throw new DataStateException('An auto save is pending, it can not be finalized.'); } $objectArray = $revision->getRawData(); if ($this->propagateDataToComputedField($revision->getDataField(), $objectArray, $revision->getContentType()->getName(), $revision->getOuuid())) { $objectArray = $this->mapping->dataFieldToArray($revision->getDataField()); $revision->setRawData($objectArray); } //Validation // if(!$form->isValid()){//Trying to work with validators if ($this->isValid($form)) { $config = ['index' => $revision->getContentType()->getEnvironment()->getAlias(), 'type' => $revision->getContentType()->getName(), 'body' => $objectArray]; if ($revision->getContentType()->getHavePipelines()) { $config['pipeline'] = $this->instanceId . $revision->getContentType()->getName(); } if (empty($revision->getOuuid())) { $status = $this->client->index($config); $revision->setOuuid($status['_id']); } else { $config['id'] = $revision->getOuuid(); $status = $this->client->index($config); $result = $repository->findByOuuidContentTypeAndEnvironnement($revision); /** @var Revision $item */ foreach ($result as $item) { $this->lockRevision($item, false, false, $username); $item->removeEnvironment($revision->getContentType()->getEnvironment()); $em->persist($item); } } $revision->addEnvironment($revision->getContentType()->getEnvironment()); $revision->getDataField()->propagateOuuid($revision->getOuuid()); $revision->setDraft(false); $em->persist($revision); $em->flush(); } else { $form->addError(new FormError("This Form is not valid!")); $this->session->getFlashBag()->add('error', 'The revision ' . $revision . ' can not be finalized'); } return $revision; }