1
0
Fork 0
mirror of https://github.com/wallabag/wallabag.git synced 2025-07-22 17:18:37 +00:00

Displays an error with an annotation with a too long quote

Fix #2762
This commit is contained in:
adev 2017-05-07 17:21:30 +02:00
parent a687c8d915
commit 2c3e148b00
23 changed files with 272 additions and 28 deletions

View file

@ -7,6 +7,8 @@ use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Wallabag\AnnotationBundle\Entity\Annotation;
use Wallabag\AnnotationBundle\Form\EditAnnotationType;
use Wallabag\AnnotationBundle\Form\NewAnnotationType;
use Wallabag\CoreBundle\Entity\Entry;
class WallabagAnnotationController extends FOSRestController
@ -49,25 +51,25 @@ class WallabagAnnotationController extends FOSRestController
$data = json_decode($request->getContent(), true);
$em = $this->getDoctrine()->getManager();
$annotation = new Annotation($this->getUser());
$annotation->setText($data['text']);
if (array_key_exists('quote', $data)) {
$annotation->setQuote($data['quote']);
}
if (array_key_exists('ranges', $data)) {
$annotation->setRanges($data['ranges']);
}
$annotation->setEntry($entry);
$em->persist($annotation);
$em->flush();
$form = $this->get('form.factory')->createNamed('', NewAnnotationType::class, $annotation, [
'csrf_protection' => false,
'allow_extra_fields' => true,
]);
$form->submit($data);
$json = $this->get('serializer')->serialize($annotation, 'json');
if ($form->isValid()) {
$em->persist($annotation);
$em->flush();
return (new JsonResponse())->setJson($json);
$json = $this->get('serializer')->serialize($annotation, 'json');
return JsonResponse::fromJsonString($json);
}
return $form;
}
/**
@ -86,16 +88,23 @@ class WallabagAnnotationController extends FOSRestController
{
$data = json_decode($request->getContent(), true);
if (!is_null($data['text'])) {
$annotation->setText($data['text']);
$form = $this->get('form.factory')->createNamed('', EditAnnotationType::class, $annotation, [
'csrf_protection' => false,
'allow_extra_fields' => true,
]);
$form->submit($data);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($annotation);
$em->flush();
$json = $this->get('serializer')->serialize($annotation, 'json');
return JsonResponse::fromJsonString($json);
}
$em = $this->getDoctrine()->getManager();
$em->flush();
$json = $this->get('serializer')->serialize($annotation, 'json');
return (new JsonResponse())->setJson($json);
return $form;
}
/**

View file

@ -8,6 +8,7 @@ use JMS\Serializer\Annotation\Exclude;
use JMS\Serializer\Annotation\VirtualProperty;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use Wallabag\UserBundle\Entity\User;
use Wallabag\CoreBundle\Entity\Entry;
@ -56,7 +57,11 @@ class Annotation
/**
* @var string
*
* @ORM\Column(name="quote", type="string")
* @Assert\Length(
* max = 10000,
* maxMessage = "validator.quote_length_too_high"
* )
* @ORM\Column(name="quote", type="text")
*
* @Groups({"entries_for_user", "export_all"})
*/

View file

@ -0,0 +1,18 @@
<?php
namespace Wallabag\AnnotationBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class EditAnnotationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('text', null, [
'empty_data' => '',
])
;
}
}

View file

@ -0,0 +1,35 @@
<?php
namespace Wallabag\AnnotationBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Wallabag\AnnotationBundle\Entity\Annotation;
class NewAnnotationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('text', null, [
'empty_data' => '',
])
->add('quote', null, [
'empty_data' => null,
])
->add('ranges', CollectionType::class, [
'entry_type' => RangeType::class,
'allow_add' => true,
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Annotation::class,
]);
}
}

View file

@ -0,0 +1,19 @@
<?php
namespace Wallabag\AnnotationBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class RangeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('start')
->add('startOffset')
->add('end')
->add('endOffset')
;
}
}

View file

@ -4,3 +4,4 @@ validator:
# password_wrong_value: 'Wrong value for your current password'
# item_per_page_too_high: 'This will certainly kill the app'
# rss_limit_too_high: 'This will certainly kill the app'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: 'Falscher Wert für dein aktuelles Kennwort'
item_per_page_too_high: 'Dies wird die Anwendung möglicherweise beenden'
rss_limit_too_high: 'Dies wird die Anwendung möglicherweise beenden'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: 'Wrong value for your current password'
item_per_page_too_high: 'This will certainly kill the app'
rss_limit_too_high: 'This will certainly kill the app'
quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: 'Entrada equivocada para su contraseña actual'
item_per_page_too_high: 'Esto matará la aplicación'
rss_limit_too_high: 'Esto matará la aplicación'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: 'رمز فعلی را اشتباه وارد کرده‌اید'
item_per_page_too_high: 'با این تعداد برنامه به فنا می‌رود'
rss_limit_too_high: 'با این تعداد برنامه به فنا می‌رود'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: "Votre mot de passe actuel est faux"
item_per_page_too_high: "Ça ne va pas plaire à lapplication"
rss_limit_too_high: "Ça ne va pas plaire à lapplication"
quote_length_too_high: "La citation est trop longue. Elle doit avoir au maximum {{ limit }} caractères."

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: 'Valore inserito per la password corrente errato'
item_per_page_too_high: 'Questo valore è troppo alto'
rss_limit_too_high: 'Questo valore è troppo alto'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: 'Vòstre senhal actual es pas bon'
item_per_page_too_high: "Aquò li agradarà pas a l'aplicacion"
rss_limit_too_high: "Aquò li agradarà pas a l'aplicacion"
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: 'Twoje obecne hasło jest błędne'
item_per_page_too_high: 'To może spowodować problemy z aplikacją'
rss_limit_too_high: 'To może spowodować problemy z aplikacją'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
password_wrong_value: 'A senha atual informada está errada'
item_per_page_too_high: 'Certamente isso pode matar a aplicação'
rss_limit_too_high: 'Certamente isso pode matar a aplicação'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
# password_wrong_value: 'Wrong value for your current password'
# item_per_page_too_high: 'This will certainly kill the app'
# rss_limit_too_high: 'This will certainly kill the app'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'

View file

@ -4,3 +4,4 @@ validator:
# password_wrong_value: 'Wrong value for your current password'
# item_per_page_too_high: 'This will certainly kill the app'
# rss_limit_too_high: 'This will certainly kill the app'
# quote_length_too_high: 'The quote is too long. It should have {{ limit }} characters or less.'