diff options
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller/ConfigController.php')
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/ConfigController.php | 83 |
1 files changed, 45 insertions, 38 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index 4f75511b..91cdcae5 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php | |||
@@ -11,7 +11,6 @@ use Wallabag\CoreBundle\Entity\Config; | |||
11 | use Wallabag\CoreBundle\Entity\TaggingRule; | 11 | use Wallabag\CoreBundle\Entity\TaggingRule; |
12 | use Wallabag\CoreBundle\Form\Type\ConfigType; | 12 | use Wallabag\CoreBundle\Form\Type\ConfigType; |
13 | use Wallabag\CoreBundle\Form\Type\ChangePasswordType; | 13 | use Wallabag\CoreBundle\Form\Type\ChangePasswordType; |
14 | use Wallabag\CoreBundle\Form\Type\NewUserType; | ||
15 | use Wallabag\CoreBundle\Form\Type\RssType; | 14 | use Wallabag\CoreBundle\Form\Type\RssType; |
16 | use Wallabag\CoreBundle\Form\Type\TaggingRuleType; | 15 | use Wallabag\CoreBundle\Form\Type\TaggingRuleType; |
17 | use Wallabag\CoreBundle\Form\Type\UserInformationType; | 16 | use Wallabag\CoreBundle\Form\Type\UserInformationType; |
@@ -106,7 +105,21 @@ class ConfigController extends Controller | |||
106 | 105 | ||
107 | // handle tagging rule | 106 | // handle tagging rule |
108 | $taggingRule = new TaggingRule(); | 107 | $taggingRule = new TaggingRule(); |
109 | $newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $this->generateUrl('config').'#set5']); | 108 | $action = $this->generateUrl('config').'#set5'; |
109 | |||
110 | if ($request->query->has('tagging-rule')) { | ||
111 | $taggingRule = $this->getDoctrine() | ||
112 | ->getRepository('WallabagCoreBundle:TaggingRule') | ||
113 | ->find($request->query->get('tagging-rule')); | ||
114 | |||
115 | if ($this->getUser()->getId() !== $taggingRule->getConfig()->getUser()->getId()) { | ||
116 | return $this->redirect($action); | ||
117 | } | ||
118 | |||
119 | $action = $this->generateUrl('config').'?tagging-rule='.$taggingRule->getId().'#set5'; | ||
120 | } | ||
121 | |||
122 | $newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $action]); | ||
110 | $newTaggingRule->handleRequest($request); | 123 | $newTaggingRule->handleRequest($request); |
111 | 124 | ||
112 | if ($newTaggingRule->isValid()) { | 125 | if ($newTaggingRule->isValid()) { |
@@ -122,45 +135,12 @@ class ConfigController extends Controller | |||
122 | return $this->redirect($this->generateUrl('config').'#set5'); | 135 | return $this->redirect($this->generateUrl('config').'#set5'); |
123 | } | 136 | } |
124 | 137 | ||
125 | // handle adding new user | ||
126 | $newUser = $userManager->createUser(); | ||
127 | // enable created user by default | ||
128 | $newUser->setEnabled(true); | ||
129 | $newUserForm = $this->createForm(NewUserType::class, $newUser, [ | ||
130 | 'validation_groups' => ['Profile'], | ||
131 | 'action' => $this->generateUrl('config').'#set6', | ||
132 | ]); | ||
133 | $newUserForm->handleRequest($request); | ||
134 | |||
135 | if ($newUserForm->isValid() && $this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) { | ||
136 | $userManager->updateUser($newUser, true); | ||
137 | |||
138 | $config = new Config($newUser); | ||
139 | $config->setTheme($this->getParameter('wallabag_core.theme')); | ||
140 | $config->setItemsPerPage($this->getParameter('wallabag_core.items_on_page')); | ||
141 | $config->setRssLimit($this->getParameter('wallabag_core.rss_limit')); | ||
142 | $config->setLanguage($this->getParameter('wallabag_core.language')); | ||
143 | $config->setReadingSpeed($this->getParameter('wallabag_core.reading_speed')); | ||
144 | |||
145 | $em->persist($config); | ||
146 | |||
147 | $em->flush(); | ||
148 | |||
149 | $this->get('session')->getFlashBag()->add( | ||
150 | 'notice', | ||
151 | $this->get('translator')->trans('flashes.config.notice.user_added', ['%username%' => $newUser->getUsername()]) | ||
152 | ); | ||
153 | |||
154 | return $this->redirect($this->generateUrl('config').'#set6'); | ||
155 | } | ||
156 | |||
157 | return $this->render('WallabagCoreBundle:Config:index.html.twig', [ | 138 | return $this->render('WallabagCoreBundle:Config:index.html.twig', [ |
158 | 'form' => [ | 139 | 'form' => [ |
159 | 'config' => $configForm->createView(), | 140 | 'config' => $configForm->createView(), |
160 | 'rss' => $rssForm->createView(), | 141 | 'rss' => $rssForm->createView(), |
161 | 'pwd' => $pwdForm->createView(), | 142 | 'pwd' => $pwdForm->createView(), |
162 | 'user' => $userForm->createView(), | 143 | 'user' => $userForm->createView(), |
163 | 'new_user' => $newUserForm->createView(), | ||
164 | 'new_tagging_rule' => $newTaggingRule->createView(), | 144 | 'new_tagging_rule' => $newTaggingRule->createView(), |
165 | ], | 145 | ], |
166 | 'rss' => [ | 146 | 'rss' => [ |
@@ -210,9 +190,7 @@ class ConfigController extends Controller | |||
210 | */ | 190 | */ |
211 | public function deleteTaggingRuleAction(TaggingRule $rule) | 191 | public function deleteTaggingRuleAction(TaggingRule $rule) |
212 | { | 192 | { |
213 | if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) { | 193 | $this->validateRuleAction($rule); |
214 | throw $this->createAccessDeniedException('You can not access this tagging rule.'); | ||
215 | } | ||
216 | 194 | ||
217 | $em = $this->getDoctrine()->getManager(); | 195 | $em = $this->getDoctrine()->getManager(); |
218 | $em->remove($rule); | 196 | $em->remove($rule); |
@@ -227,6 +205,34 @@ class ConfigController extends Controller | |||
227 | } | 205 | } |
228 | 206 | ||
229 | /** | 207 | /** |
208 | * Edit a tagging rule. | ||
209 | * | ||
210 | * @param TaggingRule $rule | ||
211 | * | ||
212 | * @Route("/tagging-rule/edit/{id}", requirements={"id" = "\d+"}, name="edit_tagging_rule") | ||
213 | * | ||
214 | * @return RedirectResponse | ||
215 | */ | ||
216 | public function editTaggingRuleAction(TaggingRule $rule) | ||
217 | { | ||
218 | $this->validateRuleAction($rule); | ||
219 | |||
220 | return $this->redirect($this->generateUrl('config').'?tagging-rule='.$rule->getId().'#set5'); | ||
221 | } | ||
222 | |||
223 | /** | ||
224 | * Validate that a rule can be edited/deleted by the current user. | ||
225 | * | ||
226 | * @param TaggingRule $rule | ||
227 | */ | ||
228 | private function validateRuleAction(TaggingRule $rule) | ||
229 | { | ||
230 | if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) { | ||
231 | throw $this->createAccessDeniedException('You can not access this tagging rule.'); | ||
232 | } | ||
233 | } | ||
234 | |||
235 | /** | ||
230 | * Retrieve config for the current user. | 236 | * Retrieve config for the current user. |
231 | * If no config were found, create a new one. | 237 | * If no config were found, create a new one. |
232 | * | 238 | * |
@@ -238,6 +244,7 @@ class ConfigController extends Controller | |||
238 | ->getRepository('WallabagCoreBundle:Config') | 244 | ->getRepository('WallabagCoreBundle:Config') |
239 | ->findOneByUser($this->getUser()); | 245 | ->findOneByUser($this->getUser()); |
240 | 246 | ||
247 | // should NEVER HAPPEN ... | ||
241 | if (!$config) { | 248 | if (!$config) { |
242 | $config = new Config($this->getUser()); | 249 | $config = new Config($this->getUser()); |
243 | } | 250 | } |