<?php
namespace App\Controller\Slots;
use App\Controller\BaseController;
use Doctrine\DBAL\Connection;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class SlotsController extends BaseController
{
/**
* @Route("/api/slots/load", name="load_slots", methods={"GET"})
*/
public function loadSlots(Request $request, SessionInterface $session, Connection $db): JsonResponse
{
$page = max(1, (int) $request->query->get('page', 1));
$limit = 60;
$offset = ($page - 1) * $limit;
$query = trim((string) $request->query->get('q', ''));
$provider = trim((string) $request->query->get('provider', ''));
$sql = "
SELECT id, title, provider
FROM slots
WHERE `show` = 1
";
$params = [];
if ($query !== '') {
$sql .= " AND (title LIKE :q OR provider LIKE :q)";
$params['q'] = '%' . $query . '%';
}
if ($provider !== '') {
$sql .= " AND provider = :provider";
$params['provider'] = $provider;
}
$sql .= " ORDER BY id DESC LIMIT $limit OFFSET $offset";
$slots = $db->fetchAllAssociative($sql, $params);
$slots = array_map(function ($slot) {
$cleanTitle = str_replace(' ', '', $slot['title']);
$slot['icon'] = "/assets/images/slots/{$cleanTitle}.jpg?v=2";
return $slot;
}, $slots);
return new JsonResponse([
'success' => true,
'data' => $slots
]);
}
/**
* @Route("/slots/play/{id}", name="play_slot", methods={"GET"})
*/
public function playSlot(int $id, SessionInterface $session, Connection $db) {
$slot = $db->fetchAssociative('SELECT * FROM slots WHERE id = :id', ['id' => $id]);
if (!$slot) {
throw $this->createNotFoundException('Слот не найден');
}
$hash = $session->get('hash');
if (!$hash) {
return $this->redirectToRoute('main_page');
}
$user = $db->fetchAssociative('SELECT * FROM users WHERE hash = :hash', ['hash' => $hash]);
if (!$user) {
return $this->redirectToRoute('main_page');
}
$depositsTotal = $db->fetchOne("
SELECT SUM(suma)
FROM deposits
WHERE user_id = ?
AND status = 1
AND STR_TO_DATE(data, '%d-%m-%Y %H:%i:%s') >= DATE_SUB(NOW(), INTERVAL 7 DAY)
", [$user['id']]);
if ($depositsTotal < 100 && !in_array($user['admin'], [1, 3])) {
return $this->redirectToRoute('lobby_page', [
'denied' => 'deposit'
]);
}
$userId = $user['id'];
$game_id = $slot['game_id'];
$agregator = $slot['agregator'];
$alias = $slot['alias'];
$provider = $slot['provider'];
$authToken = $user['auth_token'];
$currency = $user['current_currency'];
$lang = $user['lang'];
$yt = (int) $user['admin'];
$wager = (int) $user['wager'];
$url = '';
if ($agregator === 'b2b') {
if ($yt == 1 || $yt == 3) {
/* if (in_array($currency, ['USD', 'EUR', 'CAD']) && !in_array($userId, [42837])) {
$lang = 'en';
}
if ($currency == 'EUR' && in_array($userId, [42837, 1])) {
$lang = 'de';
}
if ($userId == 47002) $lang = 'pl';
if ($userId == 47004) $lang = 'de';
if ($userId == 51697) $lang = 'tr';
if (in_array($userId, [47073, 43315, 47680, 48881, 51099, 51928])) $lang = 'en'; */
$url = "https://int.apichannel.cloud/gamesbycode/{$game_id}.gamecode"
. "?operator_id=40093&language={$lang}&user_id={$userId}"
. "&auth_token={$authToken}¤cy={$currency}&home_url=https://candy3.win";
} else {
$realCurrency = $wager > 1 ? 'BON' : 'RUB';
$url = "https://int.apichannel.cloud/gamesbycode/{$game_id}.gamecode"
. "?operator_id=40092&language=ru&user_id={$userId}"
. "&auth_token={$authToken}¤cy={$realCurrency}&home_url=https://candy3.win";
}
} else {
$partner = $yt == 1 || $yt == 3 ? 'so_yt2' : 'yourluckcasino';
$url = "https://pp.mobule.games/games.start"
. "?partner.alias={$partner}&partner.session={$authToken}"
. "&game.provider={$provider}&game.alias={$alias}"
. "&lang={$lang}&lobby_url=https://candy3.win/¤cy={$currency}&mobile=false";
}
return $this->render('play.html.twig', [
'slot' => $slot,
'launch_url' => $url,
]);
}
}