Exemplo n.º 1
0
 /**
  * @Route("/answer", requirements={}, defaults={}, name="api_v1_add_answer")
  * @Method({"POST"})
  * @param Request $request
  * @return Response
  */
 public function addAnswerAction(Request $request)
 {
     $r = array('error' => 'Unknown', 'data' => array());
     $response = new JsonResponse();
     $translator = $this->get('translator');
     do {
         if (!$this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
             $r['error'] = $translator->trans('improv.error.not_logged_in');
             break;
         }
         if (mb_strlen($content = trim($request->request->get('answer')), 'UTF-8') > 140) {
             $r['error'] = $translator->trans('improv.error.answer_too_long');
             break;
         } elseif (mb_strlen($content, 'UTF-8') < 3) {
             $r['error'] = $translator->trans('improv.error.answer_too_short');
             break;
         }
         if (($room = (int) trim($request->request->get('room'))) && ($room = $this->getDoctrine()->getRepository('MmdImprovBundle:Room')->find($room))) {
             if (($subject = (int) trim($request->request->get('subject'))) && $room->getSubject()->getId() === $subject) {
                 unset($subject);
                 // ok
             } else {
                 $r['error'] = $translator->trans('improv.error.invalid_room_subject');
                 break;
             }
         } else {
             $r['error'] = $translator->trans('improv.error.invalid_room');
             break;
         }
         $uid = $this->getUser()->getUsername();
         $answer = new Answer();
         $answer->setLocale($request->getLocale());
         $answer->setUid($uid);
         $answer->setContent($content);
         $answer->setSubject($room->getSubject());
         $repository = $this->getDoctrine()->getRepository('MmdImprovBundle:Answer');
         if (!$repository->findOneBy(array('hash' => $answer->getHash()))) {
             if ($this->getDoctrine()->getManager()->createQueryBuilder()->select('count(a.id)')->from('MmdImprovBundle:Answer', 'a')->where('a.subject = :subject AND a.uid = :uid AND a.created >= :created')->setParameter('subject', $room->getSubject())->setParameter('uid', $uid)->setParameter('created', new \DateTime('-1 minutes'))->getQuery()->getSingleScalarResult() >= $this->container->getParameter('improv.user_max_answers_per_minute')) {
                 $r['error'] = $translator->trans('improv.error.user_subject_answer_limit_reached');
                 break;
             }
             $this->getDoctrine()->getManager()->persist($answer);
             $this->getDoctrine()->getManager()->flush();
         }
         $r['error'] = null;
         $r['data']['message'] = $translator->trans('improv.success.answer_added');
     } while (false);
     $response->setData($r);
     return $response;
 }
Exemplo n.º 2
0
 private function getAnswerArray(Answer $answer)
 {
     return array('id' => $answer->getId(), 'content' => $answer->getContent(), 'vote_avg' => $answer->getVoteAvg(), 'vote_minus' => $answer->getVoteMinus(), 'vote_plus' => $answer->getVotePlus());
 }