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