]> git.immae.eu Git - github/wallabag/wallabag.git/blame - src/Wallabag/CoreBundle/Controller/ConfigController.php
Update bundle & stock file
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Controller / ConfigController.php
CommitLineData
4d85d7e9
J
1<?php
2
3namespace Wallabag\CoreBundle\Controller;
4
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller;
0c83fd59 7use Symfony\Component\HttpFoundation\JsonResponse;
619cc453 8use Symfony\Component\HttpFoundation\Request;
4d85d7e9 9use Wallabag\CoreBundle\Entity\Config;
f19f9f62 10use Wallabag\CoreBundle\Entity\TaggingRule;
5c895a7f 11use Wallabag\CoreBundle\Form\Type\ConfigType;
d9085c63 12use Wallabag\CoreBundle\Form\Type\ChangePasswordType;
e4977b8a 13use Wallabag\CoreBundle\Form\Type\NewUserType;
0c83fd59 14use Wallabag\CoreBundle\Form\Type\RssType;
619cc453
JB
15use Wallabag\CoreBundle\Form\Type\TaggingRuleType;
16use Wallabag\CoreBundle\Form\Type\UserInformationType;
0c83fd59 17use Wallabag\CoreBundle\Tools\Utils;
619cc453 18use Wallabag\UserBundle\Entity\User;
4d85d7e9
J
19
20class ConfigController extends Controller
21{
22 /**
23 * @param Request $request
24 *
25 * @Route("/config", name="config")
4d85d7e9
J
26 */
27 public function indexAction(Request $request)
28 {
d9085c63 29 $em = $this->getDoctrine()->getManager();
4d85d7e9 30 $config = $this->getConfig();
fcb1fba5 31 $userManager = $this->container->get('fos_user.user_manager');
c0d9eba0 32 $user = $this->getUser();
4d85d7e9 33
32da2a70 34 // handle basic config detail (this form is defined as a service)
5c895a7f 35 $configForm = $this->createForm(ConfigType::class, $config, array('action' => $this->generateUrl('config')));
d9085c63 36 $configForm->handleRequest($request);
4d85d7e9 37
d9085c63 38 if ($configForm->isValid()) {
4d85d7e9
J
39 $em->persist($config);
40 $em->flush();
41
32da2a70
J
42 // switch active theme
43 $activeTheme = $this->get('liip_theme.active_theme');
44 $activeTheme->setName($config->getTheme());
45
4d85d7e9
J
46 $this->get('session')->getFlashBag()->add(
47 'notice',
c89d35e8 48 'Config saved. Some parameters will be considered after disconnection.'
4d85d7e9
J
49 );
50
51 return $this->redirect($this->generateUrl('config'));
52 }
53
d9085c63 54 // handle changing password
5c895a7f 55 $pwdForm = $this->createForm(ChangePasswordType::class, null, array('action' => $this->generateUrl('config').'#set4'));
d9085c63
J
56 $pwdForm->handleRequest($request);
57
58 if ($pwdForm->isValid()) {
fcb1fba5
NL
59 $user->setPlainPassword($pwdForm->get('new_password')->getData());
60 $userManager->updateUser($user, true);
d9085c63
J
61
62 $this->get('session')->getFlashBag()->add(
63 'notice',
64 'Password updated'
65 );
66
67 return $this->redirect($this->generateUrl('config'));
68 }
69
c0d9eba0 70 // handle changing user information
5c895a7f 71 $userForm = $this->createForm(UserInformationType::class, $user, array(
33fe61f9
JB
72 'validation_groups' => array('Profile'),
73 'action' => $this->generateUrl('config').'#set3',
74 ));
c0d9eba0
J
75 $userForm->handleRequest($request);
76
77 if ($userForm->isValid()) {
fcb1fba5 78 $userManager->updateUser($user, true);
c0d9eba0
J
79
80 $this->get('session')->getFlashBag()->add(
81 'notice',
82 'Information updated'
83 );
84
85 return $this->redirect($this->generateUrl('config'));
86 }
87
0c83fd59 88 // handle rss information
5c895a7f 89 $rssForm = $this->createForm(RssType::class, $config, array('action' => $this->generateUrl('config').'#set2'));
0c83fd59
J
90 $rssForm->handleRequest($request);
91
92 if ($rssForm->isValid()) {
93 $em->persist($config);
94 $em->flush();
95
96 $this->get('session')->getFlashBag()->add(
97 'notice',
98 'RSS information updated'
99 );
100
101 return $this->redirect($this->generateUrl('config'));
102 }
103
f19f9f62
KG
104 // handle tagging rule
105 $taggingRule = new TaggingRule();
5c895a7f 106 $newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, array('action' => $this->generateUrl('config').'#set5'));
f19f9f62
KG
107 $newTaggingRule->handleRequest($request);
108
109 if ($newTaggingRule->isValid()) {
110 $taggingRule->setConfig($config);
111 $em->persist($taggingRule);
112 $em->flush();
113
114 $this->get('session')->getFlashBag()->add(
115 'notice',
116 'Tagging rules updated'
117 );
118
119 return $this->redirect($this->generateUrl('config'));
120 }
121
e4977b8a 122 // handle adding new user
fcb1fba5 123 $newUser = $userManager->createUser();
0f30f48b
JB
124 // enable created user by default
125 $newUser->setEnabled(true);
5c895a7f 126 $newUserForm = $this->createForm(NewUserType::class, $newUser, array(
33fe61f9
JB
127 'validation_groups' => array('Profile'),
128 'action' => $this->generateUrl('config').'#set5',
129 ));
e4977b8a
J
130 $newUserForm->handleRequest($request);
131
fcb1fba5
NL
132 if ($newUserForm->isValid() && $this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) {
133 $userManager->updateUser($newUser, true);
0bd2cb1e
J
134
135 $config = new Config($newUser);
136 $config->setTheme($this->container->getParameter('theme'));
137 $config->setItemsPerPage($this->container->getParameter('items_on_page'));
371ac69a 138 $config->setRssLimit($this->container->getParameter('rss_limit'));
0bd2cb1e
J
139 $config->setLanguage($this->container->getParameter('language'));
140
141 $em->persist($config);
142
e4977b8a
J
143 $em->flush();
144
145 $this->get('session')->getFlashBag()->add(
146 'notice',
147 sprintf('User "%s" added', $newUser->getUsername())
148 );
149
150 return $this->redirect($this->generateUrl('config'));
151 }
152
4d85d7e9 153 return $this->render('WallabagCoreBundle:Config:index.html.twig', array(
0c83fd59
J
154 'form' => array(
155 'config' => $configForm->createView(),
156 'rss' => $rssForm->createView(),
157 'pwd' => $pwdForm->createView(),
158 'user' => $userForm->createView(),
159 'new_user' => $newUserForm->createView(),
f19f9f62 160 'new_tagging_rule' => $newTaggingRule->createView(),
0c83fd59
J
161 ),
162 'rss' => array(
163 'username' => $user->getUsername(),
164 'token' => $config->getRssToken(),
9744e971 165 ),
4d85d7e9
J
166 ));
167 }
168
0c83fd59
J
169 /**
170 * @param Request $request
171 *
172 * @Route("/generate-token", name="generate_token")
173 *
174 * @return JsonResponse
175 */
176 public function generateTokenAction(Request $request)
177 {
178 $config = $this->getConfig();
179 $config->setRssToken(Utils::generateToken());
180
181 $em = $this->getDoctrine()->getManager();
182 $em->persist($config);
183 $em->flush();
184
185 if ($request->isXmlHttpRequest()) {
186 return new JsonResponse(array('token' => $config->getRssToken()));
187 }
188
189 return $request->headers->get('referer') ? $this->redirect($request->headers->get('referer')) : $this->redirectToRoute('config');
190 }
191
52e423f3
KG
192 /**
193 * Deletes a tagging rule and redirect to the config homepage.
194 *
195 * @param TaggingRule $rule
196 *
197 * @Route("/tagging-rule/delete/{id}", requirements={"id" = "\d+"}, name="delete_tagging_rule")
198 *
199 * @return \Symfony\Component\HttpFoundation\RedirectResponse
200 */
201 public function deleteTaggingRule(TaggingRule $rule)
202 {
203 if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) {
204 throw $this->createAccessDeniedException('You can not access this tagging ryle.');
205 }
206
207 $em = $this->getDoctrine()->getManager();
208 $em->remove($rule);
209 $em->flush();
210
211 $this->get('session')->getFlashBag()->add(
212 'notice',
213 'Tagging rule deleted'
214 );
215
216 return $this->redirect($this->generateUrl('config'));
217 }
218
d9085c63
J
219 /**
220 * Retrieve config for the current user.
221 * If no config were found, create a new one.
222 *
223 * @return Wallabag\CoreBundle\Entity\Config
224 */
4d85d7e9
J
225 private function getConfig()
226 {
227 $config = $this->getDoctrine()
228 ->getRepository('WallabagCoreBundle:Config')
229 ->findOneByUser($this->getUser());
230
231 if (!$config) {
232 $config = new Config($this->getUser());
233 }
234
235 return $config;
236 }
237}