public function addTranslation(Request $request, $id)
{
$em = $this->get('em');
$translator = $this->get('translator');
$cacheService = $this->get('newscoop.cache');
$form = $this->createForm(new TopicTranslationType());
$form->handleRequest($request);
$response = array('status' => false, 'message' => $translator->trans('topics.error', array(), 'topics'));
if (!$this->get('form.csrf_provider')->isCsrfTokenValid('default', $request->get('_csrf_token'))) {
return new JsonResponse(array('status' => false, 'message' => $translator->trans('topics.csrfinvalid', array(), 'topics')), 403);
}
$node = $this->findOr404($id);
if (is_array($node)) {
return new JsonResponse($node, 404);
}
if ($form->isValid()) {
$data = $form->getData();
$locale = $data['locale'];
$language = $em->getRepository('Newscoop\\Entity\\Language')->findOneByCode($locale);
if (!$language) {
return new JsonResponse(array('status' => false, 'message' => $translator->trans('topics.alerts.languagenotfound', array('%locale%' => $locale), 'topics')), 404);
}
try {
$topicTranslation = new TopicTranslation($language->getCode(), 'title', $data['title']);
$node->addTranslation($topicTranslation);
$em->flush();
} catch (\Exception $e) {
return new JsonResponse(array('status' => false, 'message' => $translator->trans('topics.alerts.translationexists', array('%locale%' => $locale), 'topics')), 403);
}
$response = array('status' => true, 'message' => $translator->trans('topics.alerts.translationadded', array(), 'topics'), 'topicTranslationId' => $topicTranslation->getId(), 'topicTranslationTitle' => $topicTranslation->getContent(), 'topicTranslationLocale' => $topicTranslation->getLocale());
$cacheService->clearNamespace('topic');
}
return new JsonResponse($response);
}