/**
  * @Route("/question/random", name="skyeng_tt_question_random", requirements={ "_method" : "GET" })
  * @Template()
  */
 public function randomAction()
 {
     $request = $this->container->get('request_stack')->getCurrentRequest();
     $userId = $request->getSession()->get(Tool::ANONIMOUS_USER_ID);
     if ($userId) {
         $doctrine = $this->getDoctrine();
         $usersRepository = $doctrine->getRepository('SkyengTTSkyengTTBundle:AnonymousUsers');
         $user = $usersRepository->find($userId);
         if ($user) {
             return Tool::json(array('success' => true, 'score' => $user->getScore(), 'next' => Tool::getNextQuestion($request, $doctrine)));
         }
     }
     return Tool::json404(array('info' => 'Empty username'));
 }
 /**
  * @Route("/appuser/create", name="skyeng_tt_appuser_create", requirements={ "_method" : "POST" })
  * @Template()
  */
 public function createAction()
 {
     $request = $this->container->get('request_stack')->getCurrentRequest();
     $username = $request->get('username');
     if ($username) {
         $doctrine = $this->getDoctrine();
         $em = $doctrine->getEntityManager();
         $user = new AnonymousUsers();
         $user->setName($username);
         $user->setTimestamp(time());
         $user->setScore(0);
         $em->persist($user);
         $em->flush();
         $request->getSession()->set(Tool::ANONIMOUS_USER_ID, $user->getId());
         $request->getSession()->set(Tool::CURRENT_QUESTION, 0);
         $request->getSession()->set(Tool::WRONG_ANSWER_COUNT, 0);
         $request->getSession()->set(Tool::LAST_QUESTIONS, array());
         return Tool::json(array('id' => $user->getId()));
     }
     return Tool::json404(array('info' => 'empty username'));
 }
 /**
  * Добавление ответа на вопрос
  * @Route("/answer/add/{questionId}", name="skyeng_tt_answer_add", requirements={ "_method" : "POST" })
  * @Template()
  * @param int $question_id идентификатор вопроса, на который отправлен ответ
  */
 public function addAction($questionId)
 {
     $questionId = intval($questionId);
     if ($questionId) {
         $request = $this->container->get('request_stack')->getCurrentRequest();
         $anonymousAppUserId = $request->getSession()->get(Tool::ANONIMOUS_USER_ID);
         if (!$anonymousAppUserId) {
             return Tool::json404(array('info' => 'Lost session'));
         }
         $answerId = $request->get('answer_id');
         if (!$answerId) {
             return Tool::json404(array('info' => 'Empty answer!'));
         }
         $doctrine = $this->getDoctrine();
         $em = $doctrine->getEntityManager();
         $repository = $doctrine->getRepository('SkyengTTSkyengTTBundle:Vocabulary');
         $question = $repository->find($questionId);
         if (!$question) {
             return Tool::json404(array('info' => 'Question #' . $questionId . ' not found!'));
         }
         $answer = null;
         if ($question->getAnswerId() == $answerId) {
             $answer = $question;
         } else {
             $collection = $repository->findBy(array('answer_id' => $answerId));
             if ($collection) {
                 $answer = current($collection);
             }
         }
         if (!$answer) {
             return Tool::json404(array('info' => 'Answer #' . $answerId . ' not found!'));
         }
         //В базе есть вопрос и ответ с такими номерами, значит можно записать результат
         if ($question->getAnswerId() == $answerId) {
             $usersRepository = $doctrine->getRepository('SkyengTTSkyengTTBundle:AnonymousUsers');
             $user = $usersRepository->find($anonymousAppUserId);
             $user->setScore($user->getScore() + 1);
             //TODO получать из конфига
             $em->persist($user);
             $em->flush();
             return Tool::json(array('success' => true, 'score' => $user->getScore(), 'next' => Tool::getNextQuestion($request, $doctrine)));
         } else {
             $statisticRepository = $doctrine->getRepository('SkyengTTSkyengTTBundle:ErrorStat');
             $collection = $statisticRepository->findBy(array('quest_id' => $questionId, 'answer_id' => $answerId));
             $statModel = null;
             if (!count($collection)) {
                 $statModel = new ErrorStat();
                 $statModel->setQuestId($questionId);
                 $statModel->setAnswerId($answerId);
                 $statModel->setQuantity(0);
             } else {
                 $statModel = current($collection);
             }
             $statModel->setQuantity($statModel->getQuantity() + 1);
             $em->persist($statModel);
             $em->flush();
             $data = array('success' => false);
             $session = $request->getSession();
             $wrong = $session->get(Tool::WRONG_ANSWER_COUNT, 0);
             $wrong++;
             if ($wrong >= Tool::WRONG_ANSWER_LIMIT) {
                 $data['gameover'] = true;
                 $wrong = 0;
             }
             $session->set(Tool::WRONG_ANSWER_COUNT, $wrong);
             return Tool::json($data);
         }
     }
     return Tool::json404(array('info' => 'Question #' . $questionId . ' not found!'));
 }