/** * @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; }
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()); }