aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/GroupBundle/Controller/ManageController.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag/GroupBundle/Controller/ManageController.php')
-rw-r--r--src/Wallabag/GroupBundle/Controller/ManageController.php184
1 files changed, 184 insertions, 0 deletions
diff --git a/src/Wallabag/GroupBundle/Controller/ManageController.php b/src/Wallabag/GroupBundle/Controller/ManageController.php
index 31a0c7b1..7214d899 100644
--- a/src/Wallabag/GroupBundle/Controller/ManageController.php
+++ b/src/Wallabag/GroupBundle/Controller/ManageController.php
@@ -2,6 +2,7 @@
2 2
3namespace Wallabag\GroupBundle\Controller; 3namespace Wallabag\GroupBundle\Controller;
4 4
5use Pagerfanta\Adapter\ArrayAdapter;
5use Pagerfanta\Adapter\DoctrineORMAdapter; 6use Pagerfanta\Adapter\DoctrineORMAdapter;
6use Pagerfanta\Exception\OutOfRangeCurrentPageException; 7use Pagerfanta\Exception\OutOfRangeCurrentPageException;
7use Pagerfanta\Pagerfanta; 8use Pagerfanta\Pagerfanta;
@@ -15,6 +16,7 @@ use Wallabag\GroupBundle\Entity\Group;
15use Wallabag\GroupBundle\Entity\UserGroup; 16use Wallabag\GroupBundle\Entity\UserGroup;
16use Wallabag\GroupBundle\Form\GroupType; 17use Wallabag\GroupBundle\Form\GroupType;
17use Wallabag\GroupBundle\Form\NewGroupType; 18use Wallabag\GroupBundle\Form\NewGroupType;
19use Wallabag\GroupBundle\Form\UserGroupType;
18use Wallabag\UserBundle\Entity\User; 20use Wallabag\UserBundle\Entity\User;
19 21
20/** 22/**
@@ -210,4 +212,186 @@ class ManageController extends Controller
210 } 212 }
211 throw $this->createAccessDeniedException(); 213 throw $this->createAccessDeniedException();
212 } 214 }
215
216 /**
217 * @Route("/join/{group}", name="group_join")
218 * @param Group $group
219 * @return Response
220 */
221 public function joinGroupAction(Group $group): Response
222 {
223 $em = $this->getDoctrine()->getManager();
224
225 if ($group->getAcceptSystem() === Group::ACCESS_PASSWORD) {
226 return $this->redirectToRoute('group_password', ['group' => $group->getId()]);
227 }
228 $this->getUser()->addAGroup($group, $group->getDefaultRole());
229
230 $em->flush();
231
232 return $this->redirect($this->generateUrl('group_index'), 302);
233 }
234
235 /**
236 * @Route("/manage/{group}/{page}", name="group-manage", defaults={"page" = "1"})
237 * @param Group $group
238 * @return Response
239 */
240 public function manageGroupUsersAction(Group $group, int $page): Response
241 {
242 if ($this->getUser()->getGroupRoleForUser($group) < Group::ROLE_MANAGE_USERS) {
243 $this->createAccessDeniedException();
244 }
245
246 $members = $this->get('wallabag_user.user_repository')->findGroupMembers($group->getId());
247
248 $pagerAdapter = new DoctrineORMAdapter($members->getQuery(), true, false);
249 $pagerFanta = new Pagerfanta($pagerAdapter);
250 $pagerFanta->setMaxPerPage(9);
251
252 try {
253 $pagerFanta->setCurrentPage($page);
254 } catch (OutOfRangeCurrentPageException $e) {
255 if ($page > 1) {
256 return $this->redirect($this->generateUrl('groups', ['page' => $pagerFanta->getNbPages()]), 302);
257 }
258 }
259
260 return $this->render('WallabagGroupBundle:Manage:manage.html.twig', [
261 'members' => $pagerFanta,
262 'group' => $group,
263 'currentPage' => $page,
264 ]);
265 }
266
267 /**
268 * @Route("/leave/{group}", name="group_leave")
269 * @param Group $group
270 * @return Response
271 */
272 public function leaveGroupAction(Group $group): Response
273 {
274 $logger = $this->get('logger');
275 $em = $this->getDoctrine()->getManager();
276 $removeGroup = false;
277
278 if ($this->getUser()->getGroupRoleForUser($group) == Group::ROLE_ADMIN) {
279 $logger->info('User ' . $this->getUser()->getUsername() . ' is the admin for group ' . $group->getName());
280 $newUser = $group->getUsers()->first();
281 $newUser->setGroupRole($group, Group::ROLE_ADMIN);
282 $logger->info('The new admin for group ' . $group->getName() . ' is user ' . $newUser->getUsername());
283 }
284
285 if ($group->getUsers()->count() <= 1) {
286 $logger->info('User ' . $this->getUser()->getUsername() . ' was the last one on the group ' . $group->getName() . ' so it will be deleted');
287 $removeGroup = true;
288 }
289
290 $logger->info('Removing user ' . $this->getUser()->getUsername() . ' from group ' . $group->getName());
291 $em->remove($this->getUser()->getUserGroupFromGroup($group));
292
293 if ($removeGroup) {
294 $logger->info("Removing group " . $group->getName() . " as it doesn't contains users anymore");
295 $em->remove($group);
296 }
297
298 $em->flush();
299 return $this->redirect($this->generateUrl('groups'), 302);
300 }
301
302 /**
303 * @Route("/requests/{group}/{page}", name="group-requests", defaults={"page" = "1"})
304 * @param Request $request
305 * @param int $page
306 * @return Response
307 */
308 public function showRequestsAction(Group $group, int $page): Response
309 {
310 if ($this->getUser()->getGroupRoleForUser($group) < Group::ROLE_MANAGE_USERS) {
311 $this->createAccessDeniedException();
312 }
313
314 $requests = $group->getRequests();
315 $pagerAdapter = new ArrayAdapter($requests->toArray());
316
317 $pagerFanta = new Pagerfanta($pagerAdapter);
318 $pagerFanta->setMaxPerPage(9);
319
320 try {
321 $pagerFanta->setCurrentPage($page);
322 } catch (OutOfRangeCurrentPageException $e) {
323 if ($page > 1) {
324 return $this->redirect($this->generateUrl('groups', ['page' => $pagerFanta->getNbPages()]), 302);
325 }
326 }
327
328 return $this->render('WallabagGroupBundle:Manage:requests.html.twig', [
329 'requests' => $pagerFanta,
330 'group' => $group,
331 'currentPage' => $page,
332 ]);
333 }
334
335 /**
336 * @Route("/activate/{group}/{user}/{accept}", name="group-activate", requirements={"accept" = "\d+"})
337 * @param Group $group
338 * @param User $user
339 * @param $accept
340 * @return Response
341 */
342 public function postRequestAction(Group $group, User $user, $accept): Response
343 {
344 if (!$this->getUser() < Group::ROLE_MANAGE_USERS) {
345 $this->createAccessDeniedException("You don't have the rights to do this");
346 }
347
348 $em = $this->getDoctrine()->getManager();
349
350 $accept = $accept == 1;
351 $user->getUserGroupFromGroup($group)->setAccepted($accept);
352 if (!$accept) {
353 $em->remove($user->getUserGroupFromGroup($group));
354 }
355
356 $em->flush();
357
358 return $this->redirectToRoute('group_index');
359 }
360
361 /**
362 * @Route("/user-edit/{group}/{user}", name="group-user-edit")
363 * @param Request $request
364 * @param Group $group
365 * @param User $user
366 * @return Response
367 */
368 public function editGroupUsersAction(Request $request, Group $group, User $user): Response
369 {
370 if ($this->getUser()->getGroupRoleForUser($group) < Group::ROLE_MANAGE_USERS) {
371 $this->createAccessDeniedException();
372 }
373
374 $groupUser = $user->getUserGroupFromGroup($group);
375 $editForm = $this->createForm(UserGroupType::class, $groupUser);
376 $editForm->handleRequest($request);
377
378 if ($editForm->isSubmitted() && $editForm->isValid()) {
379 $em = $this->getDoctrine()->getManager();
380 $em->persist($groupUser);
381 $em->flush();
382
383 $this->get('session')->getFlashBag()->add(
384 'notice',
385 $this->get('translator')->trans('flashes.group.notice.user.edited', ['%user%' => $user->getUsername(), '%group%' => $group->getName()])
386 );
387
388 return $this->redirectToRoute('group-manage', ['group' => $group->getId()]);
389 }
390
391 return $this->render('WallabagGroupBundle:Manage:edit_user.html.twig', array(
392 'user' => $user,
393 'group' => $group,
394 'edit_form' => $editForm->createView(),
395 ));
396 }
213} 397}