/** * @Route("/{slug}-{name}/{page}", defaults={"page" = 1}, requirements={"page" = "\d+"}, name="uvs_view") * @Template() */ public function viewAction(Request $request, $slug, $name, $page = 1) { if (!$this->getUserLayer()->isUser()) { return $this->createAccessDeniedResponse(); } /** @var EntityManager $em */ $em = $this->getDoctrine()->getManager(); /** @var UV $uv */ $uv = $em->getRepository('EtuModuleUVBundle:UV')->findOneBy(array('slug' => $slug)); if (!$uv) { throw $this->createNotFoundException(sprintf('UV for slug %s not found', $slug)); } if (StringManipulationExtension::slugify($uv->getName()) != $name) { return $this->redirect($this->generateUrl('uvs_view', array('slug' => $uv->getSlug(), 'name' => StringManipulationExtension::slugify($uv->getName()))), 301); } $comment = new Comment(); $comment->setUv($uv)->setUser($this->getUser()); $commentForm = $this->createFormBuilder($comment)->add('body', 'redactor')->getForm(); if ($request->getMethod() == 'POST' && $commentForm->submit($request)->isValid()) { $em->persist($comment); $em->flush(); // Notify subscribers $notif = new Notification(); $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('uv_new_comment')->setAuthorId($this->getUser()->getId())->setEntityType('uv')->setEntityId($uv->getId())->addEntity($comment); $this->getNotificationsSender()->send($notif); $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'uvs.main.comment.confirm')); return $this->redirect($this->generateUrl('uvs_view', array('slug' => $slug, 'name' => $name))); } /** @var Review[] $results */ $results = $em->createQueryBuilder()->select('r, s')->from('EtuModuleUVBundle:Review', 'r')->leftJoin('r.sender', 's')->where('r.uv = :uv')->setParameter('uv', $uv->getId())->getQuery()->getResult(); $order = array(); // Order by semester: A13, P12, A12, P11, ... foreach ($results as $review) { $semester = (int) substr($review->getSemester(), 1); $season = substr($review->getSemester(), 0, 1) == 'A' ? 1 : 0; $order[] = $semester * 2 + $season; } array_multisort($order, SORT_DESC, SORT_NUMERIC, $results); $reviews = array(); $reviewsCount = 0; foreach ($results as $result) { if (!isset($reviews[$result->getSemester()]['count'])) { $reviews[$result->getSemester()]['count'] = 0; } if (!isset($reviews[$result->getSemester()]['validated'])) { $reviews[$result->getSemester()]['validated'] = array(); } if (!isset($reviews[$result->getSemester()]['pending'])) { $reviews[$result->getSemester()]['pending'] = array(); } $key = $result->getValidated() ? 'validated' : 'pending'; $reviews[$result->getSemester()][$key][] = $result; $reviews[$result->getSemester()]['count']++; $reviewsCount++; } $query = $em->createQueryBuilder()->select('c, u')->from('EtuModuleUVBundle:Comment', 'c')->leftJoin('c.user', 'u')->where('c.uv = :uv')->setParameter('uv', $uv->getId())->orderBy('c.createdAt', 'DESC')->getQuery(); $pagination = $this->get('knp_paginator')->paginate($query, $page, 10); return array('uv' => $uv, 'semesters' => $reviews, 'reviewsCount' => $reviewsCount, 'pagination' => $pagination, 'commentForm' => $commentForm->createView()); }
/** * @Route("/comment/{id}/delete", name="admin_uvs_comment_delete") * @Template() */ public function deleteCommentAction(Comment $comment) { if (!$this->getUserLayer()->isUser() || !$this->getUser()->hasPermission('uvs.admin')) { return $this->createAccessDeniedResponse(); } /** @var EntityManager $em */ $em = $this->getDoctrine()->getManager(); $comment->setDeletedAt(new \DateTime()); $em->persist($comment); $em->flush(); $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'uvs.admin.deleteComment.confirm')); return $this->redirect($this->generateUrl('admin_uvs_comments')); }