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()); }