Example #1
0
 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;
 }