Ejemplo n.º 1
0
 public function publish(Revision $revision, Environment $environment)
 {
     if (!$this->authorizationChecker->isGranted($revision->getContentType()->getEditRole())) {
         $this->session->getFlashBag()->add('warning', 'You are not allowed to publish the object ' . $revision);
         return;
     }
     $user = $this->userService->getCurrentUser();
     if (!empty($environment->getCircles()) && !$this->authorizationChecker->isGranted('ROLE_ADMIN') && empty(array_intersect($environment->getCircles(), $user->getCircles()))) {
         $this->session->getFlashBag()->add('warning', 'You are not allowed to publish in the environment ' . $environment);
         return;
     }
     if ($revision->getContentType()->getEnvironment() == $environment && !empty($revision->getEndTime())) {
         $this->session->getFlashBag()->add('warning', 'You can\'t publish in the default environment of the content type something else than the last revision: ' . $revision);
         return;
     }
     $this->dataService->lockRevision($revision, $environment);
     $result = $this->revRepository->findByOuuidContentTypeAndEnvironnement($revision, $environment);
     $em = $this->doctrine->getManager();
     $already = false;
     /** @var Revision $item */
     foreach ($result as $item) {
         if ($item == $revision) {
             $already = true;
             $this->session->getFlashBag()->add('warning', 'The revision ' . $revision . ' is already specified as published in ' . $environment);
         } else {
             $this->dataService->lockRevision($item);
             $item->removeEnvironment($environment);
             $em->persist($item);
         }
     }
     $status = $this->client->index(['id' => $revision->getOuuid(), 'index' => $environment->getAlias(), 'type' => $revision->getContentType()->getName(), 'body' => $revision->getRawData()]);
     if (!$already) {
         $revision->addEnvironment($environment);
         $em->persist($revision);
         $em->flush();
         $this->session->getFlashBag()->add('notice', 'Revision ' . $revision . ' has been published in ' . $environment);
     }
     $this->auditService->auditLog('PublishService:publish', $revision->getRawData(), $environment->getName());
 }