public function applyStateMachineTransitionAction(Request $request)
{
$configuration = $this->requestConfigurationFactory->create($this->metadata, $request);
$this->isGrantedOr403($configuration, ResourceActions::UPDATE);
$resource = $this->findOr404($configuration);
$event = $this->eventDispatcher->dispatchPreEvent(ResourceActions::UPDATE, $configuration, $resource);
if ($event->isStopped() && !$configuration->isHtmlRequest()) {
throw new HttpException($event->getErrorCode(), $event->getMessage());
}
if ($event->isStopped()) {
$this->flashHelper->addFlashFromEvent($configuration, $event);
return $this->redirectHandler->redirectToResource($configuration, $resource);
}
if (!$this->stateMachine->can($configuration, $resource)) {
throw new BadRequestHttpException();
}
$this->stateMachine->apply($configuration, $resource);
$this->manager->flush();
$this->eventDispatcher->dispatchPostEvent(ResourceActions::UPDATE, $configuration, $resource);
if (!$configuration->isHtmlRequest()) {
return $this->viewHandler->handle($configuration, View::create($resource, Response::HTTP_OK));
}
$this->flashHelper->addSuccessFlash($configuration, ResourceActions::UPDATE, $resource);
return $this->redirectHandler->redirectToResource($configuration, $resource);
}