1818use Symfony \Component \Intl \Intl ;
1919use Symfony \Component \Translation \MessageCatalogue ;
2020use Symfony \Component \Translation \Translator ;
21+ use Translation \Bundle \Exception \MessageValidationException ;
22+ use Translation \Bundle \Model \GuiMessageRepresentation ;
2123use Translation \Common \Exception \StorageException ;
2224use Translation \Symfony \Model \Message ;
2325
@@ -110,19 +112,19 @@ public function showAction($configName, $locale, $domain)
110112 */
111113 public function createAction (Request $ request , $ configName , $ locale , $ domain )
112114 {
113- $ json = $ request ->getContent ();
114- $ data = json_decode ($ json , true );
115- if (!isset ($ data ['key ' ]) || !isset ($ data ['message ' ])) {
116- throw new BadRequestHttpException ('Payload must contain "key" and "message". ' );
115+ $ storage = $ this ->get ('php_translation.storage.file. ' .$ configName );
116+ try {
117+ $ message = $ this ->getMessage ($ request , ['Create ' ]);
118+ } catch (MessageValidationException $ e ) {
119+ return new Response ($ e ->getMessage (), 400 );
117120 }
118121
119- $ storage = $ this ->get ('php_translation.storage.file. ' .$ configName );
120122 try {
121- $ storage ->set ($ locale , $ domain , $ data [ ' key ' ] , $ data [ ' message ' ] );
123+ $ storage ->set ($ locale , $ domain , $ message -> getKey () , $ message-> getMessage () );
122124 } catch (StorageException $ e ) {
123125 throw new BadRequestHttpException (sprintf (
124126 'Key "%s" does already exist for "%s" on domain "%s". ' ,
125- $ data [ ' key ' ] ,
127+ $ message -> getKey () ,
126128 $ locale ,
127129 $ domain
128130 ), $ e );
@@ -141,13 +143,13 @@ public function createAction(Request $request, $configName, $locale, $domain)
141143 */
142144 public function editAction (Request $ request , $ configName , $ locale , $ domain )
143145 {
144- $ json = $ request -> getContent ();
145- $ data = json_decode ( $ json , true );
146- if (! isset ( $ data [ ' key ' ]) || ! isset ( $ data [ ' message ' ]) ) {
147- throw new BadRequestHttpException ( ' Payload must contain "key" and "message". ' );
146+ try {
147+ $ message = $ this -> getMessage ( $ request , [ ' Edit ' ] );
148+ } catch ( MessageValidationException $ e ) {
149+ return new Response ( $ e -> getMessage (), 400 );
148150 }
149151
150- $ this ->get ('php_translation.storage.file. ' .$ configName )->update ($ locale , $ domain , $ data [ ' key ' ] , $ data [ ' message ' ] );
152+ $ this ->get ('php_translation.storage.file. ' .$ configName )->update ($ locale , $ domain , $ message -> getKey () , $ message-> getMessage () );
151153
152154 return new Response ('Translation updated ' );
153155 }
@@ -162,13 +164,13 @@ public function editAction(Request $request, $configName, $locale, $domain)
162164 */
163165 public function deleteAction (Request $ request , $ configName , $ locale , $ domain )
164166 {
165- $ json = $ request -> getContent ();
166- $ data = json_decode ( $ json , true );
167- if (! isset ( $ data [ ' key ' ]) ) {
168- throw new BadRequestHttpException ( ' Payload must contain "key". ' );
167+ try {
168+ $ message = $ this -> getMessage ( $ request , [ ' Delete ' ] );
169+ } catch ( MessageValidationException $ e ) {
170+ return new Response ( $ e -> getMessage (), 400 );
169171 }
170172
171- $ this ->get ('php_translation.storage.file. ' .$ configName )->delete ($ locale , $ domain , $ data [ ' key ' ] );
173+ $ this ->get ('php_translation.storage.file. ' .$ configName )->delete ($ locale , $ domain , $ message -> getKey () );
172174
173175 return new Response ('Message was deleted ' );
174176 }
@@ -194,4 +196,30 @@ private function getConfiguration(&$configName)
194196
195197 return $ config ;
196198 }
199+
200+ /**
201+ * @param Request $request
202+ * @param array $validationGroups
203+ *
204+ * @return GuiMessageRepresentation
205+ */
206+ private function getMessage (Request $ request , array $ validationGroups = [])
207+ {
208+ $ json = $ request ->getContent ();
209+ $ data = json_decode ($ json , true );
210+ $ message = new GuiMessageRepresentation ();
211+ if (isset ($ data ['key ' ])) {
212+ $ message ->setKey ($ data ['key ' ]);
213+ }
214+ if (isset ($ data ['message ' ])) {
215+ $ message ->setMessage ($ data ['message ' ]);
216+ }
217+
218+ $ errors = $ this ->get ('validator ' )->validate ($ message , null , $ validationGroups );
219+ if (count ($ errors ) > 0 ) {
220+ throw MessageValidationException::create ();
221+ }
222+
223+ return $ message ;
224+ }
197225}
0 commit comments