diff options
author | Kevin Decherf <kevin@kdecherf.com> | 2020-04-26 15:39:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-26 15:39:57 +0200 |
commit | 0e8a0f77d0b643a884e6687bd9c463267852a970 (patch) | |
tree | 88c6761b4215637bba34b263015e87750c92a187 /src/Wallabag/CoreBundle/Controller | |
parent | 8a8a78a64c116caf81aaa4339906298bdc0e32e0 (diff) | |
parent | 71f7e58fbd84e1d15c7a405a3c5872adb937dc37 (diff) | |
download | wallabag-0e8a0f77d0b643a884e6687bd9c463267852a970.tar.gz wallabag-0e8a0f77d0b643a884e6687bd9c463267852a970.tar.zst wallabag-0e8a0f77d0b643a884e6687bd9c463267852a970.zip |
Merge pull request #4026 from wallabag/3760-ignorelist-db
Move Ignore Origin rules to database
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller')
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/ConfigController.php | 79 | ||||
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/IgnoreOriginInstanceRuleController.php | 138 |
2 files changed, 215 insertions, 2 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index 56efe82b..3efc7bb3 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php | |||
@@ -14,10 +14,13 @@ use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; | |||
14 | use Symfony\Component\Routing\Annotation\Route; | 14 | use Symfony\Component\Routing\Annotation\Route; |
15 | use Symfony\Component\Validator\Constraints\Locale as LocaleConstraint; | 15 | use Symfony\Component\Validator\Constraints\Locale as LocaleConstraint; |
16 | use Wallabag\CoreBundle\Entity\Config; | 16 | use Wallabag\CoreBundle\Entity\Config; |
17 | use Wallabag\CoreBundle\Entity\IgnoreOriginUserRule; | ||
18 | use Wallabag\CoreBundle\Entity\RuleInterface; | ||
17 | use Wallabag\CoreBundle\Entity\TaggingRule; | 19 | use Wallabag\CoreBundle\Entity\TaggingRule; |
18 | use Wallabag\CoreBundle\Form\Type\ChangePasswordType; | 20 | use Wallabag\CoreBundle\Form\Type\ChangePasswordType; |
19 | use Wallabag\CoreBundle\Form\Type\ConfigType; | 21 | use Wallabag\CoreBundle\Form\Type\ConfigType; |
20 | use Wallabag\CoreBundle\Form\Type\FeedType; | 22 | use Wallabag\CoreBundle\Form\Type\FeedType; |
23 | use Wallabag\CoreBundle\Form\Type\IgnoreOriginUserRuleType; | ||
21 | use Wallabag\CoreBundle\Form\Type\TaggingRuleImportType; | 24 | use Wallabag\CoreBundle\Form\Type\TaggingRuleImportType; |
22 | use Wallabag\CoreBundle\Form\Type\TaggingRuleType; | 25 | use Wallabag\CoreBundle\Form\Type\TaggingRuleType; |
23 | use Wallabag\CoreBundle\Form\Type\UserInformationType; | 26 | use Wallabag\CoreBundle\Form\Type\UserInformationType; |
@@ -173,6 +176,40 @@ class ConfigController extends Controller | |||
173 | return $this->redirect($this->generateUrl('config') . '#set5'); | 176 | return $this->redirect($this->generateUrl('config') . '#set5'); |
174 | } | 177 | } |
175 | 178 | ||
179 | // handle ignore origin rules | ||
180 | $ignoreOriginUserRule = new IgnoreOriginUserRule(); | ||
181 | $action = $this->generateUrl('config') . '#set6'; | ||
182 | |||
183 | if ($request->query->has('ignore-origin-user-rule')) { | ||
184 | $ignoreOriginUserRule = $this->getDoctrine() | ||
185 | ->getRepository('WallabagCoreBundle:IgnoreOriginUserRule') | ||
186 | ->find($request->query->get('ignore-origin-user-rule')); | ||
187 | |||
188 | if ($this->getUser()->getId() !== $ignoreOriginUserRule->getConfig()->getUser()->getId()) { | ||
189 | return $this->redirect($action); | ||
190 | } | ||
191 | |||
192 | $action = $this->generateUrl('config', [ | ||
193 | 'ignore-origin-user-rule' => $ignoreOriginUserRule->getId(), | ||
194 | ]) . '#set6'; | ||
195 | } | ||
196 | |||
197 | $newIgnoreOriginUserRule = $this->createForm(IgnoreOriginUserRuleType::class, $ignoreOriginUserRule, ['action' => $action]); | ||
198 | $newIgnoreOriginUserRule->handleRequest($request); | ||
199 | |||
200 | if ($newIgnoreOriginUserRule->isSubmitted() && $newIgnoreOriginUserRule->isValid()) { | ||
201 | $ignoreOriginUserRule->setConfig($config); | ||
202 | $em->persist($ignoreOriginUserRule); | ||
203 | $em->flush(); | ||
204 | |||
205 | $this->addFlash( | ||
206 | 'notice', | ||
207 | 'flashes.config.notice.ignore_origin_rules_updated' | ||
208 | ); | ||
209 | |||
210 | return $this->redirect($this->generateUrl('config') . '#set6'); | ||
211 | } | ||
212 | |||
176 | return $this->render('WallabagCoreBundle:Config:index.html.twig', [ | 213 | return $this->render('WallabagCoreBundle:Config:index.html.twig', [ |
177 | 'form' => [ | 214 | 'form' => [ |
178 | 'config' => $configForm->createView(), | 215 | 'config' => $configForm->createView(), |
@@ -181,6 +218,7 @@ class ConfigController extends Controller | |||
181 | 'user' => $userForm->createView(), | 218 | 'user' => $userForm->createView(), |
182 | 'new_tagging_rule' => $newTaggingRule->createView(), | 219 | 'new_tagging_rule' => $newTaggingRule->createView(), |
183 | 'import_tagging_rule' => $taggingRulesImportform->createView(), | 220 | 'import_tagging_rule' => $taggingRulesImportform->createView(), |
221 | 'new_ignore_origin_user_rule' => $newIgnoreOriginUserRule->createView(), | ||
184 | ], | 222 | ], |
185 | 'feed' => [ | 223 | 'feed' => [ |
186 | 'username' => $user->getUsername(), | 224 | 'username' => $user->getUsername(), |
@@ -448,6 +486,43 @@ class ConfigController extends Controller | |||
448 | } | 486 | } |
449 | 487 | ||
450 | /** | 488 | /** |
489 | * Deletes an ignore origin rule and redirect to the config homepage. | ||
490 | * | ||
491 | * @Route("/ignore-origin-user-rule/delete/{id}", requirements={"id" = "\d+"}, name="delete_ignore_origin_rule") | ||
492 | * | ||
493 | * @return RedirectResponse | ||
494 | */ | ||
495 | public function deleteIgnoreOriginRuleAction(IgnoreOriginUserRule $rule) | ||
496 | { | ||
497 | $this->validateRuleAction($rule); | ||
498 | |||
499 | $em = $this->getDoctrine()->getManager(); | ||
500 | $em->remove($rule); | ||
501 | $em->flush(); | ||
502 | |||
503 | $this->addFlash( | ||
504 | 'notice', | ||
505 | 'flashes.config.notice.ignore_origin_rules_deleted' | ||
506 | ); | ||
507 | |||
508 | return $this->redirect($this->generateUrl('config') . '#set6'); | ||
509 | } | ||
510 | |||
511 | /** | ||
512 | * Edit an ignore origin rule. | ||
513 | * | ||
514 | * @Route("/ignore-origin-user-rule/edit/{id}", requirements={"id" = "\d+"}, name="edit_ignore_origin_rule") | ||
515 | * | ||
516 | * @return RedirectResponse | ||
517 | */ | ||
518 | public function editIgnoreOriginRuleAction(IgnoreOriginUserRule $rule) | ||
519 | { | ||
520 | $this->validateRuleAction($rule); | ||
521 | |||
522 | return $this->redirect($this->generateUrl('config') . '?ignore-origin-user-rule=' . $rule->getId() . '#set6'); | ||
523 | } | ||
524 | |||
525 | /** | ||
451 | * Remove all annotations OR tags OR entries for the current user. | 526 | * Remove all annotations OR tags OR entries for the current user. |
452 | * | 527 | * |
453 | * @Route("/reset/{type}", requirements={"id" = "annotations|tags|entries"}, name="config_reset") | 528 | * @Route("/reset/{type}", requirements={"id" = "annotations|tags|entries"}, name="config_reset") |
@@ -659,10 +734,10 @@ class ConfigController extends Controller | |||
659 | /** | 734 | /** |
660 | * Validate that a rule can be edited/deleted by the current user. | 735 | * Validate that a rule can be edited/deleted by the current user. |
661 | */ | 736 | */ |
662 | private function validateRuleAction(TaggingRule $rule) | 737 | private function validateRuleAction(RuleInterface $rule) |
663 | { | 738 | { |
664 | if ($this->getUser()->getId() !== $rule->getConfig()->getUser()->getId()) { | 739 | if ($this->getUser()->getId() !== $rule->getConfig()->getUser()->getId()) { |
665 | throw $this->createAccessDeniedException('You can not access this tagging rule.'); | 740 | throw $this->createAccessDeniedException('You can not access this rule.'); |
666 | } | 741 | } |
667 | } | 742 | } |
668 | 743 | ||
diff --git a/src/Wallabag/CoreBundle/Controller/IgnoreOriginInstanceRuleController.php b/src/Wallabag/CoreBundle/Controller/IgnoreOriginInstanceRuleController.php new file mode 100644 index 00000000..ef1f0ed7 --- /dev/null +++ b/src/Wallabag/CoreBundle/Controller/IgnoreOriginInstanceRuleController.php | |||
@@ -0,0 +1,138 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Symfony\Component\HttpFoundation\Request; | ||
7 | use Symfony\Component\Routing\Annotation\Route; | ||
8 | use Wallabag\CoreBundle\Entity\IgnoreOriginInstanceRule; | ||
9 | |||
10 | /** | ||
11 | * IgnoreOriginInstanceRuleController controller. | ||
12 | * | ||
13 | * @Route("/ignore-origin-instance-rules") | ||
14 | */ | ||
15 | class IgnoreOriginInstanceRuleController extends Controller | ||
16 | { | ||
17 | /** | ||
18 | * Lists all IgnoreOriginInstanceRule entities. | ||
19 | * | ||
20 | * @Route("/", name="ignore_origin_instance_rules_index", methods={"GET"}) | ||
21 | */ | ||
22 | public function indexAction() | ||
23 | { | ||
24 | $rules = $this->get('wallabag_core.ignore_origin_instance_rule_repository')->findAll(); | ||
25 | |||
26 | return $this->render('WallabagCoreBundle:IgnoreOriginInstanceRule:index.html.twig', [ | ||
27 | 'rules' => $rules, | ||
28 | ]); | ||
29 | } | ||
30 | |||
31 | /** | ||
32 | * Creates a new ignore origin instance rule entity. | ||
33 | * | ||
34 | * @Route("/new", name="ignore_origin_instance_rules_new", methods={"GET", "POST"}) | ||
35 | * | ||
36 | * @return \Symfony\Component\HttpFoundation\Response | ||
37 | */ | ||
38 | public function newAction(Request $request) | ||
39 | { | ||
40 | $ignoreOriginInstanceRule = new IgnoreOriginInstanceRule(); | ||
41 | |||
42 | $form = $this->createForm('Wallabag\CoreBundle\Form\Type\IgnoreOriginInstanceRuleType', $ignoreOriginInstanceRule); | ||
43 | $form->handleRequest($request); | ||
44 | |||
45 | if ($form->isSubmitted() && $form->isValid()) { | ||
46 | $em = $this->getDoctrine()->getManager(); | ||
47 | $em->persist($ignoreOriginInstanceRule); | ||
48 | $em->flush(); | ||
49 | |||
50 | $this->get('session')->getFlashBag()->add( | ||
51 | 'notice', | ||
52 | $this->get('translator')->trans('flashes.ignore_origin_instance_rule.notice.added') | ||
53 | ); | ||
54 | |||
55 | return $this->redirectToRoute('ignore_origin_instance_rules_index'); | ||
56 | } | ||
57 | |||
58 | return $this->render('WallabagCoreBundle:IgnoreOriginInstanceRule:new.html.twig', [ | ||
59 | 'rule' => $ignoreOriginInstanceRule, | ||
60 | 'form' => $form->createView(), | ||
61 | ]); | ||
62 | } | ||
63 | |||
64 | /** | ||
65 | * Displays a form to edit an existing ignore origin instance rule entity. | ||
66 | * | ||
67 | * @Route("/{id}/edit", name="ignore_origin_instance_rules_edit", methods={"GET", "POST"}) | ||
68 | * | ||
69 | * @return \Symfony\Component\HttpFoundation\Response | ||
70 | */ | ||
71 | public function editAction(Request $request, IgnoreOriginInstanceRule $ignoreOriginInstanceRule) | ||
72 | { | ||
73 | $deleteForm = $this->createDeleteForm($ignoreOriginInstanceRule); | ||
74 | $editForm = $this->createForm('Wallabag\CoreBundle\Form\Type\IgnoreOriginInstanceRuleType', $ignoreOriginInstanceRule); | ||
75 | $editForm->handleRequest($request); | ||
76 | |||
77 | if ($editForm->isSubmitted() && $editForm->isValid()) { | ||
78 | $em = $this->getDoctrine()->getManager(); | ||
79 | $em->persist($ignoreOriginInstanceRule); | ||
80 | $em->flush(); | ||
81 | |||
82 | $this->get('session')->getFlashBag()->add( | ||
83 | 'notice', | ||
84 | $this->get('translator')->trans('flashes.ignore_origin_instance_rule.notice.updated') | ||
85 | ); | ||
86 | |||
87 | return $this->redirectToRoute('ignore_origin_instance_rules_index'); | ||
88 | } | ||
89 | |||
90 | return $this->render('WallabagCoreBundle:IgnoreOriginInstanceRule:edit.html.twig', [ | ||
91 | 'rule' => $ignoreOriginInstanceRule, | ||
92 | 'edit_form' => $editForm->createView(), | ||
93 | 'delete_form' => $deleteForm->createView(), | ||
94 | ]); | ||
95 | } | ||
96 | |||
97 | /** | ||
98 | * Deletes a site credential entity. | ||
99 | * | ||
100 | * @Route("/{id}", name="ignore_origin_instance_rules_delete", methods={"DELETE"}) | ||
101 | * | ||
102 | * @return \Symfony\Component\HttpFoundation\RedirectResponse | ||
103 | */ | ||
104 | public function deleteAction(Request $request, IgnoreOriginInstanceRule $ignoreOriginInstanceRule) | ||
105 | { | ||
106 | $form = $this->createDeleteForm($ignoreOriginInstanceRule); | ||
107 | $form->handleRequest($request); | ||
108 | |||
109 | if ($form->isSubmitted() && $form->isValid()) { | ||
110 | $this->get('session')->getFlashBag()->add( | ||
111 | 'notice', | ||
112 | $this->get('translator')->trans('flashes.ignore_origin_instance_rule.notice.deleted') | ||
113 | ); | ||
114 | |||
115 | $em = $this->getDoctrine()->getManager(); | ||
116 | $em->remove($ignoreOriginInstanceRule); | ||
117 | $em->flush(); | ||
118 | } | ||
119 | |||
120 | return $this->redirectToRoute('ignore_origin_instance_rules_index'); | ||
121 | } | ||
122 | |||
123 | /** | ||
124 | * Creates a form to delete a ignore origin instance rule entity. | ||
125 | * | ||
126 | * @param IgnoreOriginInstanceRule $ignoreOriginInstanceRule The ignore origin instance rule entity | ||
127 | * | ||
128 | * @return \Symfony\Component\Form\Form The form | ||
129 | */ | ||
130 | private function createDeleteForm(IgnoreOriginInstanceRule $ignoreOriginInstanceRule) | ||
131 | { | ||
132 | return $this->createFormBuilder() | ||
133 | ->setAction($this->generateUrl('ignore_origin_instance_rules_delete', ['id' => $ignoreOriginInstanceRule->getId()])) | ||
134 | ->setMethod('DELETE') | ||
135 | ->getForm() | ||
136 | ; | ||
137 | } | ||
138 | } | ||