diff --git a/Controller/EditInPlaceController.php b/Controller/EditInPlaceController.php index 30af0dd7..c64bba8a 100644 --- a/Controller/EditInPlaceController.php +++ b/Controller/EditInPlaceController.php @@ -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 @@ -34,7 +34,7 @@ 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); } @@ -42,7 +42,7 @@ public function editAction(Request $request, $configName, $locale) /** @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); @@ -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)); } @@ -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); @@ -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(); $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) { diff --git a/Model/EditInPlaceMessage.php b/Model/EditInPlaceMessage.php deleted file mode 100644 index 4da1db6b..00000000 --- a/Model/EditInPlaceMessage.php +++ /dev/null @@ -1,116 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Translation\Bundle\Model; - -use Symfony\Component\Validator\Constraints as Assert; -use Translation\Common\Model\Message; - -/** - * @author Damien Alexandre - */ -final class EditInPlaceMessage -{ - /** - * @var string - * @Assert\NotBlank(groups={"Create", "Edit", "Delete"}) - */ - private $key; - - /** - * @var string - * @Assert\NotBlank(groups={"Create", "Edit"}) - */ - private $message; - - /** - * @var string - * @Assert\NotBlank(groups={"Create", "Edit", "Delete"}) - */ - private $domain; - - /** - * Convert to a Common\Message. - * - * @param string $locale - * - * @return Message - */ - public function convertToMessage($locale) - { - return new Message( - $this->key, - $this->domain, - $locale, - $this->message - ); - } - - /** - * @return string - */ - public function getKey() - { - return $this->key; - } - - /** - * @param string $key - * - * @return EditInPlaceMessage - */ - public function setKey($key) - { - $this->key = $key; - - return $this; - } - - /** - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * @param string $message - * - * @return EditInPlaceMessage - */ - public function setMessage($message) - { - $this->message = $message; - - return $this; - } - - /** - * @return string - */ - public function getDomain() - { - return $this->domain; - } - - /** - * @param string $domain - * - * @return EditInPlaceMessage - */ - public function setDomain($domain) - { - $this->domain = $domain; - - return $this; - } -} diff --git a/Tests/Functional/Controller/EditInPlaceControllerTest.php b/Tests/Functional/Controller/EditInPlaceControllerTest.php new file mode 100644 index 00000000..51e4a4e6 --- /dev/null +++ b/Tests/Functional/Controller/EditInPlaceControllerTest.php @@ -0,0 +1,74 @@ + + * + * 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 + */ +class EditInPlaceControllerTest extends BaseTestCase +{ + public static function setUpBeforeClass() + { + parent::setUpBeforeClass(); + + file_put_contents(__DIR__.'/../app/Resources/translations/messages.sv.xlf', <<<'XML' + + + + + + key0 + trans0 + + + + + key1 + trans1 + + + + + +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()); + } +} diff --git a/composer.json b/composer.json index 3daa1a77..d7713c34 100644 --- a/composer.json +++ b/composer.json @@ -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": {