<?php
/*
* This file is part of the PHP Translation package.
*
* (c) PHP Translation team <tobias.nyholm@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Controller\Admin;
use Translation\Bundle\Controller\WebUIController as BaseController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\Intl\Intl;
use Symfony\Component\Translation\MessageCatalogue;
use Translation\Bundle\Exception\MessageValidationException;
use Translation\Bundle\Service\StorageService;
use Translation\Common\Exception\StorageException;
use Translation\Bundle\Model\CatalogueMessage;
use Translation\Common\Model\Message;
use Translation\Common\Model\MessageInterface;
/**
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
class WebUIController extends BaseController
{
/**
* @param Request $request
* @param string $configName
* @param string $locale
* @param string $domain
*
* @return Response
*/
public function editAction(Request $request, $configName, $locale, $domain)
{
if (!$this->getParameter('php_translation.webui.enabled')) {
return new Response('You are not allowed here. Check you config. ', 400);
}
try {
$message = $this->getMessageFromRequest($request);
$message = $message->withDomain($domain);
$message = $message->withLocale($locale);
$this->validateMessage($message, ['Edit']);
} catch (MessageValidationException $e) {
return new Response($e->getMessage(), 400);
}
/** @var StorageService $storage */
$storage = $this->get('php_translation.storage_manager')->getStorage($configName);
$storage->update($message);
$cacheClearer = $this->get('php_translation.cache_clearer');
$cacheClearer->clearAndWarmUp($locale);
return new Response('Translation updated');
}
/**
* @param Request $request
*
* @return MessageInterface
*/
private function getMessageFromRequest(Request $request)
{
$json = $request->getContent();
$data = json_decode($json, true);
$message = new Message($data['key']);
if (isset($data['message'])) {
$message = $message->withTranslation($data['message']);
}
return $message;
}
/**
* @param MessageInterface $message
* @param array $validationGroups
*
* @throws MessageValidationException
*/
private function validateMessage(MessageInterface $message, array $validationGroups)
{
$errors = $this->get('validator')->validate($message, null, $validationGroups);
if (count($errors) > 0) {
throw MessageValidationException::create();
}
}
}