Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions Controller/EditInPlaceController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Translation\Bundle\Exception\MessageValidationException;
use Translation\Bundle\Model\EditInPlaceMessage;
use Translation\Bundle\Service\StorageService;
use Translation\Common\Model\Message;

/**
* @author Damien Alexandre <dalexandre@jolicode.com>
Expand All @@ -34,15 +34,15 @@ class EditInPlaceController extends Controller
public function editAction(Request $request, $configName, $locale)
{
try {
$messages = $this->getMessages($request, ['Edit']);
$messages = $this->getMessages($request, $locale, ['Edit']);
} catch (MessageValidationException $e) {
return new Response($e->getMessage(), Response::HTTP_BAD_REQUEST);
}

/** @var StorageService $storage */
$storage = $this->get('php_translation.storage.'.$configName);
foreach ($messages as $message) {
$storage->update($message->convertToMessage($locale));
$storage->update($message);
}

$this->rebuildTranslations($locale);
Expand All @@ -63,6 +63,10 @@ private function rebuildTranslations($locale)
$filesystem = $this->get('filesystem');
$finder = new Finder();

if (!is_dir($translationDir)) {
mkdir($translationDir);
}

if (!is_writable($translationDir)) {
throw new \RuntimeException(sprintf('Unable to write in the "%s" directory', $translationDir));
}
Expand All @@ -74,20 +78,24 @@ private function rebuildTranslations($locale)
}

// Build them again
$this->get('translator')->warmUp($translationDir);
$translator = $this->get('translator');
if (method_exists($translator, 'warmUp')) {
$translator->warmUp($translationDir);
}
}

/**
* Get and validate messages from the request.
*
* @param Request $request
* @param string $locale
* @param array $validationGroups
*
* @return EditInPlaceMessage[]
* @return Message[]
*
* @throws MessageValidationException
*/
private function getMessages(Request $request, array $validationGroups = [])
private function getMessages(Request $request, $locale, array $validationGroups = [])
{
$json = $request->getContent();
$data = json_decode($json, true);
Expand All @@ -97,10 +105,11 @@ private function getMessages(Request $request, array $validationGroups = [])
foreach ($data as $key => $value) {
list($domain, $translationKey) = explode('|', $key);

$message = new EditInPlaceMessage();
$message = new Message();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on this PR it seems the common Message can be made immutable (by removing setters and adding constructor arguments). Am I right about this?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, for this use case.. But do we want it immutable? hm, maybe we do.

$message->setKey($translationKey);
$message->setMessage($value);
$message->setTranslation($value);
$message->setDomain($domain);
$message->setLocale($locale);

$errors = $validator->validate($message, null, $validationGroups);
if (count($errors) > 0) {
Expand Down
116 changes: 0 additions & 116 deletions Model/EditInPlaceMessage.php

This file was deleted.

74 changes: 74 additions & 0 deletions Tests/Functional/Controller/EditInPlaceControllerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?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 Translation\Bundle\Tests\Functional\Controller;

use Symfony\Component\HttpFoundation\Request;
use Translation\Bundle\Tests\Functional\BaseTestCase;

/**
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
class EditInPlaceControllerTest extends BaseTestCase
{
public static function setUpBeforeClass()
{
parent::setUpBeforeClass();

file_put_contents(__DIR__.'/../app/Resources/translations/messages.sv.xlf', <<<'XML'
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="fr-FR" trgLang="en-US">
<file id="messages.en_US">
<unit id="LCa0a2j">
<segment>
<source>key0</source>
<target>trans0</target>
</segment>
</unit>
<unit id="LCa0a2b">
<segment>
<source>key1</source>
<target>trans1</target>
</segment>
</unit>
</file>
</xliff>

XML
);
}

protected function setUp()
{
parent::setUp();
$this->kernel->addConfigFile(__DIR__.'/../app/config/normal_config.yml');
}

public function testEditAction()
{
$request = Request::create('/admin/_trans_edit_in_place/app/sv', 'POST', [], [], [], [], json_encode([
'messages|key0' => 'trans0',
'messages|key1' => 'trans1',
]));
$response = $this->kernel->handle($request);
$this->assertEquals(200, $response->getStatusCode());
}

public function testEditActionError()
{
$request = Request::create('/admin/_trans_edit_in_place/app/sv', 'POST', [], [], [], [], json_encode([
'messages|key0' => 'trans0',
'messages|' => 'trans1',
]));
$response = $this->kernel->handle($request);
$this->assertEquals(400, $response->getStatusCode());
}
}
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"symfony/intl": "^2.7 || ^3.0",

"php-translation/common": "^0.2.1",
"php-translation/symfony-storage": "^0.3.1",
"php-translation/symfony-storage": "^0.3.2",
"php-translation/extractor": "^1.2"
},
"require-dev": {
Expand Down