![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/.cursor-server/data/User/History/-2d8041a4/ |
<?php
/**
* Vote for next track API endpoint
*/
session_start();
header('Content-Type: application/json');
require_once __DIR__ . '/../../../config/database.php';
$pdo = getDBConnection();
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['error' => 'Method not allowed']);
exit;
}
$data = json_decode(file_get_contents('php://input'), true);
if (!isset($data['track_id']) || !isset($data['stream_id'])) {
http_response_code(400);
echo json_encode(['error' => 'Missing required fields']);
exit;
}
$track_id = (int)$data['track_id'];
$stream_id = (int)$data['stream_id'];
// Verify stream is live
$stmt = $pdo->prepare("SELECT is_live FROM radio_streams WHERE id = ?");
$stmt->execute([$stream_id]);
$stream = $stmt->fetch();
if (!$stream || !$stream['is_live']) {
http_response_code(400);
echo json_encode(['error' => 'Stream is not live']);
exit;
}
// Verify track exists and is radio-enabled
$stmt = $pdo->prepare("SELECT id FROM music_tracks WHERE id = ? AND radio_enabled = 1");
$stmt->execute([$track_id]);
$track = $stmt->fetch();
if (!$track) {
http_response_code(404);
echo json_encode(['error' => 'Track not found or not available for radio']);
exit;
}
// Get or create user session
$user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null;
$user_ip = $_SERVER['REMOTE_ADDR'] ?? null;
$user_session = session_id();
// Check if user already voted for this track (prevent duplicate votes)
$stmt = $pdo->prepare("
SELECT id FROM radio_votes
WHERE stream_id = ? AND track_id = ?
AND (user_id = ? OR (user_session = ? AND user_ip = ?))
AND voted_at > DATE_SUB(NOW(), INTERVAL 1 HOUR)
LIMIT 1
");
$stmt->execute([$stream_id, $track_id, $user_id, $user_session, $user_ip]);
$existing_vote = $stmt->fetch();
if ($existing_vote) {
http_response_code(400);
echo json_encode(['error' => 'You have already voted for this track']);
exit;
}
// Record vote
$stmt = $pdo->prepare("
INSERT INTO radio_votes (stream_id, track_id, user_id, user_ip, user_session, voted_at)
VALUES (?, ?, ?, ?, ?, NOW())
");
$stmt->execute([$stream_id, $track_id, $user_id, $user_ip, $user_session]);
// Update or create queue entry
$stmt = $pdo->prepare("
SELECT id, vote_count FROM radio_stream_queue
WHERE stream_id = ? AND track_id = ? AND played_at IS NULL
LIMIT 1
");
$stmt->execute([$stream_id, $track_id]);
$queue_entry = $stmt->fetch();
if ($queue_entry) {
// Update existing queue entry
$stmt = $pdo->prepare("
UPDATE radio_stream_queue
SET vote_count = vote_count + 1
WHERE id = ?
");
$stmt->execute([$queue_entry['id']]);
$vote_count = $queue_entry['vote_count'] + 1;
} else {
// Create new queue entry
$stmt = $pdo->prepare("
INSERT INTO radio_stream_queue (stream_id, track_id, vote_count, queued_at)
VALUES (?, ?, 1, NOW())
");
$stmt->execute([$stream_id, $track_id]);
$vote_count = 1;
}
echo json_encode([
'success' => true,
'vote_count' => $vote_count,
'message' => 'Vote recorded successfully'
]);