Exemplo n.º 1
0
 /**
  * @param Request $request
  * @return array
  * @Post(
  *  path="api/sms",
  *  name="api_sms_code"
  * )
  * @RequestParam(
  *     name="phone",
  *     description="Номер телефона"
  *  )
  * @RequestParam(
  *     name="mes",
  *     description="Сообщение"
  *  )
  * @ApiDoc(
  *     section     = "Движок",
  *     description = "Обработка входящей СМС",
  *     statusCodes = {
  *      200 = "Успешно",
  *      404 = "Нет игры"
  *     }
  * )
  */
 public function smsCodeAction(Request $request)
 {
     $phoneNum = $request->request->get('phone');
     $message = $request->request->get('mes');
     list($prefix, $taskId, $code) = explode(' ', $message) + [null, null, null];
     $user = $this->getDoctrine()->getRepository('sdUserBundle:User')->findOneBy(['phone' => $phoneNum]);
     if (!$user) {
         throw new NotFoundHttpException();
     }
     $task = $this->getDoctrine()->getRepository('sdGameBundle:Task')->find((int) $taskId);
     if (!$task) {
         throw new NotFoundHttpException();
     }
     $engineService = $this->get('sd.game.engineservice');
     $taskEntities = $engineService->getCurrentTasks($task->getGame(), $user);
     if (!($taskEntities['current']->getTask() === $task || $taskEntities['free']->contains($task))) {
         throw new NotFoundHttpException();
     }
     $codeEnter = new CodeEnter();
     $codeEnter->setUser($user);
     $codeEnter->setGame($task->getGame());
     $codeEnter->setTask($task);
     $codeEnter->setText($code);
     $codeEnter->setDate(new \DateTime());
     $result = $engineService->enterCode($codeEnter);
     return ['status' => 'ok', 'result' => $result];
 }
Exemplo n.º 2
0
 /**
  * @param CodeEnter $codeEnter
  * @return bool
  */
 public function enterCode(CodeEnter $codeEnter)
 {
     $task = $codeEnter->getTask();
     $oldCodes = $this->manager->getRepository('sdGameBundle:CodeEnter')->findBy(['game' => $codeEnter->getGame(), 'user' => $codeEnter->getUser()->getTeam()->getMembers()->toArray(), 'task' => $task], ['date' => 'desc']);
     $codeEnter->setIsCorrect(false);
     /** @var Code $code */
     foreach ($task->getCodes() as $code) {
         if (mb_strtolower(trim($codeEnter->getText()), 'utf8') == mb_strtolower(trim($code->getCode()), 'utf8')) {
             $codeEnter->setIsCorrect(true);
             $codeEnter->setCode($code);
             foreach ($oldCodes as $oldCodeEnter) {
                 if (mb_strtolower($codeEnter->getText(), 'utf8') == mb_strtolower($oldCodeEnter->getText(), 'utf8')) {
                     $codeEnter->setIsCorrect(false);
                 }
             }
             break;
         }
     }
     $this->manager->persist($codeEnter);
     $this->manager->flush();
     return $codeEnter->isCorrect();
 }
Exemplo n.º 3
0
 /**
  * @param  Request $request
  * @return array
  * @Post(
  *     path    = "game/code",
  *     name    = "post_code"
  * )
  * @RequestParam(
  *     name="taskId",
  *     description="ID задания"
  *  )
  * @RequestParam(
  *     name="code",
  *     description="Код"
  *  )
  * @ApiDoc(
  *     section     = "Движок",
  *     description = "Отправка кода",
  *     statusCodes = {
  *      200 = "Успешно",
  *      404 = "Нет игры"
  *     }
  * )
  */
 public function postCodeAction(Request $request)
 {
     $taskId = $request->request->get('taskId');
     $code = $request->request->get('code');
     /** @var User $user */
     $user = $this->getUser();
     $task = $this->getDoctrine()->getRepository('sdGameBundle:Task')->find($taskId);
     if (!$task) {
         throw new NotFoundHttpException();
     }
     $game = $task->getGame();
     if (!$game || !$game->isCanEnter() || !$user || !$user->getTeam() || !$game->getTeams()->contains($user->getTeam())) {
         throw new NotFoundHttpException();
     }
     $engineService = $this->get('sd.game.engineservice');
     $codeEnter = new CodeEnter();
     $codeEnter->setUser($user);
     $codeEnter->setGame($game);
     $codeEnter->setTask($task);
     $codeEnter->setText($code);
     $codeEnter->setDate(new \DateTime());
     $result = $engineService->enterCode($codeEnter);
     return ['result' => $result];
 }