| Server IP : 104.21.21.239 / Your IP : 216.73.216.25 Web Server : Apache/2.4.68 (Amazon Linux) OpenSSL/3.5.5 System : Linux ip-172-31-69-123.ec2.internal 6.1.176-223.369.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jul 24 13:34:27 UTC 2026 x86_64 User : ec2-user ( 1000) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/banners/public_html/leia/memorygame/ |
Upload File : |
<?php
require_once(__DIR__ . '/../.credentials.php');
require_once '/home/banners/public_html/bway/db/mysql_bootstrap.php';
header('Content-Type: application/json');
$action = $_POST['action'] ?? $_GET['action'] ?? '';
$response = [];
$statusCode = 200;
try {
switch ($action) {
// GET RANDOM IMAGES
case 'getImages':
$mode = $_GET['mode'] ?? 'leia';
$count = intval($_GET['count'] ?? 12);
$count = max(4, min(18, $count));
$dir = __DIR__ . '/../LeiaPics/';
$leiaImages = [];
$chewieImages = [];
foreach (glob($dir . '*.jpeg') as $file) {
$name = basename($file);
if (str_starts_with($name, 'leia')) {
$leiaImages[] = $name;
} elseif (str_starts_with($name, 'chewie')) {
$chewieImages[] = $name;
}
}
// Select pool based on mode
switch ($mode) {
case 'leia':
$pool = $leiaImages;
break;
case 'chewie':
$pool = $chewieImages;
break;
default:
$pool = array_merge($leiaImages, $chewieImages);
break;
}
shuffle($pool);
if ($count > count($pool)) {
$count = count($pool);
}
$response = array_slice($pool, 0, $count);
break;
// SAVE SCORE
case 'saveScore':
$playerName = substr(trim($_POST['playerName'] ?? ''), 0, 50);
$playerCookie = substr(trim($_POST['playerCookie'] ?? ''), 0, 64);
$gameMode = strtolower(trim($_POST['gameMode'] ?? ''));
$cardCount = intval($_POST['cardCount'] ?? 0);
$moves = intval($_POST['moves'] ?? 0);
$timeSeconds = floatval($_POST['timeSeconds'] ?? 0);
// Validation
if (strlen($playerName) === 0 || strlen($playerCookie) === 0) {
throw new Exception('Player name and ID are required.');
}
if (!in_array($gameMode, ['leia', 'chewie', 'both'])) {
throw new Exception('Invalid game mode.');
}
if ($cardCount < 8 || $cardCount > 36 || $cardCount % 2 !== 0) {
throw new Exception('Invalid card count.');
}
if ($timeSeconds < 1) {
throw new Exception('Invalid time.');
}
// Insert score
$pdo = new PDO('mysql:host=' . DB_WRITE_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS, mysqlPdoOptions([]));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('INSERT INTO leia_memorygame_scores (player_name, player_cookie, game_mode, card_count, moves, time_seconds) VALUES (?, ?, ?, ?, ?, ?)');
$stmt->execute([$playerName, $playerCookie, $gameMode, $cardCount, $moves, $timeSeconds]);
// Get rank
$pdoRead = new PDO('mysql:host=' . DB_READ_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS, mysqlPdoOptions([]));
$pdoRead->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdoRead->prepare('SELECT COUNT(*) + 1 AS scoreRank FROM leia_memorygame_scores WHERE game_mode = ? AND card_count = ? AND time_seconds < ?');
$stmt->execute([$gameMode, $cardCount, $timeSeconds]);
$rank = $stmt->fetchColumn();
// Check personal best
$stmt = $pdoRead->prepare('SELECT MIN(time_seconds) AS best_time FROM leia_memorygame_scores WHERE player_cookie = ? AND game_mode = ? AND card_count = ? AND time_seconds < ?');
$stmt->execute([$playerCookie, $gameMode, $cardCount, $timeSeconds]);
$bestTime = $stmt->fetchColumn();
$isPersonalBest = ($bestTime === false || $bestTime === null || floatval($bestTime) == 0);
$response = [
'success' => true,
'rank' => intval($rank),
'isPersonalBest' => $isPersonalBest
];
break;
// GET SCORES
case 'getScores':
$gameMode = $_GET['gameMode'] ?? '';
$cardCount = $_GET['cardCount'] ?? '';
$playerCookie = $_GET['playerCookie'] ?? '';
$tab = $_GET['tab'] ?? 'global';
$limit = min(intval($_GET['limit'] ?? 25), 100);
if ($limit < 1) $limit = 25;
$pdoRead = new PDO('mysql:host=' . DB_READ_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS, mysqlPdoOptions([]));
$pdoRead->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT player_name, game_mode, card_count, moves, time_seconds, DATE_FORMAT(completed_at, '%m/%d/%Y') AS completed_date FROM leia_memorygame_scores WHERE 1=1";
$params = [];
if (strlen(trim($gameMode)) > 0) {
$sql .= ' AND game_mode = ?';
$params[] = trim($gameMode);
}
if (intval($cardCount) > 0) {
$sql .= ' AND card_count = ?';
$params[] = intval($cardCount);
}
if ($tab === 'personal' && strlen(trim($playerCookie)) > 0) {
$sql .= ' AND player_cookie = ?';
$params[] = trim($playerCookie);
}
$sql .= ' ORDER BY time_seconds ASC LIMIT ' . $limit;
$stmt = $pdoRead->prepare($sql);
$stmt->execute($params);
$scores = [];
$scoreRank = 0;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$scoreRank++;
$scores[] = [
'rank' => $scoreRank,
'playerName' => $row['player_name'],
'gameMode' => $row['game_mode'],
'cardCount' => intval($row['card_count']),
'moves' => intval($row['moves']),
'timeSeconds' => floatval($row['time_seconds']),
'date' => $row['completed_date']
];
}
$response = $scores;
break;
default:
$response = ['error' => 'Unknown action'];
break;
}
} catch (Exception $e) {
$response = ['error' => $e->getMessage()];
$statusCode = 500;
}
http_response_code($statusCode);
echo json_encode($response);