Пример #1
0
 /**
  * @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());
 }
Пример #2
0
 /**
  * @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'));
 }