src/Controller/Slots/SlotsController.php line 71

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Slots;
  3. use App\Controller\BaseController;
  4. use Doctrine\DBAL\Connection;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  9. class SlotsController extends BaseController
  10. {
  11.     /**
  12.      * @Route("/api/slots/load", name="load_slots", methods={"GET"})
  13.      */
  14.     public function loadSlots(Request $requestSessionInterface $sessionConnection $db): JsonResponse
  15.     {
  16.         $page max(1, (int) $request->query->get('page'1));
  17.         $limit 60;
  18.         $offset = ($page 1) * $limit;
  19.         $query trim((string) $request->query->get('q'''));
  20.         $provider trim((string) $request->query->get('provider'''));
  21.         $sql "
  22.             SELECT id, title, provider
  23.             FROM slots
  24.             WHERE `show` = 1
  25.         ";
  26.         $params = [];
  27.         if ($query !== '') {
  28.             $sql .= " AND (title LIKE :q OR provider LIKE :q)";
  29.             $params['q'] = '%' $query '%';
  30.         }
  31.         if ($provider !== '') {
  32.             $sql .= " AND provider = :provider";
  33.             $params['provider'] = $provider;
  34.         }
  35.         $sql .= " ORDER BY priority DESC LIMIT $limit OFFSET $offset";
  36.         $slots $db->fetchAllAssociative($sql$params);
  37.         $slots array_map(function ($slot) {
  38.             $cleanTitle str_replace(' '''$slot['title']);
  39.             $slot['icon'] = "/assets/images/slots/{$cleanTitle}.jpg?v=6";
  40.             return $slot;
  41.         }, $slots);
  42.         return new JsonResponse([
  43.             'success' => true,
  44.             'data' => $slots
  45.         ]);
  46.     }
  47.     
  48.     /**
  49.      * @Route("/slots/play/{id}", name="play_slot", methods={"GET"})
  50.      */
  51.     public function playSlot(int $idSessionInterface $sessionConnection $dbRequest $request) {
  52.         $slot $db->fetchAssociative('SELECT * FROM slots WHERE id = :id', ['id' => $id]);
  53.         if (!$slot) {
  54.             throw $this->createNotFoundException('Слот не найден');
  55.         }
  56.         $hash $session->get('hash');
  57.         if (!$hash) {
  58.             return $this->redirectToRoute('main_page');
  59.         }
  60.         $user $db->fetchAssociative('SELECT * FROM users WHERE hash = :hash', ['hash' => $hash]);
  61.         if (!$user) {
  62.             return $this->redirectToRoute('main_page');
  63.         }
  64.         
  65.         $depositsTotal $db->fetchOne("
  66.             SELECT SUM(suma) 
  67.             FROM deposits 
  68.             WHERE user_id = ? 
  69.               AND status = 1 
  70.               AND STR_TO_DATE(data, '%d-%m-%Y %H:%i:%s') >= DATE_SUB(NOW(), INTERVAL 7 DAY)
  71.         ", [$user['id']]);
  72.         if ($depositsTotal 200 && !in_array($user['admin'], [13])) {
  73.             return $this->redirectToRoute('lobby_page', [
  74.                 'denied' => 'deposit'
  75.             ]);
  76.         } 
  77.         $userId $user['id'];
  78.         $game_id $slot['game_id'];
  79.         $agregator $slot['agregator'];
  80.         $alias $slot['alias'];
  81.         $provider $slot['provider'];
  82.         $authToken $user['auth_token'];
  83.         $currency $user['current_currency'];
  84.         $lang $user['lang'];
  85.         $yt = (int) $user['admin'];
  86.         $wager = (int) $user['wager'];
  87.             
  88.         $url '';
  89.         $spin null;
  90.         $db->beginTransaction();
  91.         try {
  92.             $spin $db->fetchAssociative("
  93.                 SELECT id, free_rounds, spin_amount, status
  94.                 FROM free_rounds
  95.                 WHERE user_id = :uid
  96.                   AND game_id = :gid
  97.                   AND status = 1
  98.                   AND activated_at >= NOW() - INTERVAL 1 DAY
  99.                 ORDER BY id
  100.                 LIMIT 1
  101.                 FOR UPDATE
  102.             ", [
  103.                 'uid' => $userId,
  104.                 'gid' => $game_id,
  105.             ]);
  106.             if (!$spin) {
  107.                 $spin $db->fetchAssociative("
  108.                     SELECT id, free_rounds, spin_amount, status
  109.                     FROM free_rounds
  110.                     WHERE user_id = :uid
  111.                       AND game_id = :gid
  112.                       AND status = 0
  113.                       AND (activated_at IS NULL OR activated_at >= NOW() - INTERVAL 1 DAY)
  114.                     ORDER BY id
  115.                     LIMIT 1
  116.                     FOR UPDATE
  117.                 ", [
  118.                     'uid' => $userId,
  119.                     'gid' => $game_id,
  120.                 ]);
  121.                 if ($spin) {
  122.                     $db->executeStatement("
  123.                         UPDATE free_rounds
  124.                         SET activated_at = NOW()
  125.                         WHERE id = :id
  126.                     ", ['id' => $spin['id']]);
  127.                 }
  128.             }
  129.             if ($spin) {
  130.                 $db->commit();
  131.             } else {
  132.                 $db->rollBack();
  133.             }
  134.         } catch (Exception $e) {
  135.             $db->rollBack();
  136.             throw $e;
  137.         }
  138.         $db->executeStatement("
  139.             UPDATE free_rounds
  140.             SET status = 2
  141.             WHERE activated_at < NOW() - INTERVAL 1 DAY
  142.               AND status IN (0, 1)
  143.         ");
  144.         
  145.         $fsline $spin '&freerounds_id=' $spin['id'] : '';
  146.         
  147.         $isMobile $request->headers->has('X-Mobile') || str_contains(strtolower($request->headers->get('User-Agent''')), 'mobile');
  148.         $mobileParam $isMobile 'true' 'false';
  149.         
  150.         $partner $yt == || $yt == 'so_yt11' 'cosmotank';
  151.         $url =   "https://pp.rmobule.games/games.start"
  152.                  "?partner.alias={$partner}&partner.session={$authToken}"
  153.                  "&game.provider={$provider}&game.alias={$alias}"
  154.                  "&lang={$lang}&lobby_url=https://flashbet.app/&currency={$currency}&mobile={$mobileParam}{$fsline}";
  155.         return $this->render('play.html.twig', [
  156.             'slot' => $slot,
  157.             'launch_url' => $url,
  158.         ]);
  159.     }
  160. }