| Server IP : 127.0.0.1 / Your IP : 216.73.216.48 Web Server : Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12 System : Windows NT DESKTOP-3H4FHQJ 10.0 build 19045 (Windows 10) AMD64 User : win 10 ( 0) PHP Version : 8.2.12 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : D:/xampp/htdocs-coblaa/Cinevaa/ |
Upload File : |
<?php
session_start();
include 'db.php';
if (!isset($_SESSION['my_id'])) {
header("Location: login.php");
exit();
}
$userID = $_SESSION['my_id'];
$checkSql = "SELECT subscription_status FROM cine_subscriptiontb
WHERE my_id = ?
AND subscription_status = 'active'
AND expiry_date > NOW()";
$stmt = $con->prepare($checkSql);
$stmt->bind_param("s", $userID);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows === 0) {
header("Location: plans.php?error=no_active_sub");
exit();
}
if(isset($_GET['mvSrc'])){
$mvSrc = htmlspecialchars($_GET['mvSrc']);
$mvTitle = htmlspecialchars($_GET['mvTitle']);
$mvThumb = isset($_GET['mvThumb']) ? htmlspecialchars($_GET['mvThumb']) : '';
} else {
header("Location: index.php");
exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CineStream | <?php echo $mvTitle ?></title>
<link rel="stylesheet" type="text/css" href="main_css/cine_player.css" />
<style>
.custom-player-container { position: relative; overflow: hidden; background: #000; width: 100%; height: 100%; }
.player-controls, .player-header {
transition: opacity 0.5s ease, visibility 0.5s;
opacity: 1;
visibility: visible;
z-index: 20;
}
.hide-interface { opacity: 0 !important; visibility: hidden !important; }
#mainVideo { width: 100%; height: auto; display: block; }
/* GOLD CENTER PLAY BUTTON */
.center-play-btn {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #D4AF37;
color: #000;
border: none;
border-radius: 50%;
width: 80px;
height: 80px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
z-index: 25;
box-shadow: 0 0 20px rgba(212, 175, 55, 0.6);
transition: opacity 0.3s, transform 0.2s;
}
.center-play-btn:active { transform: translate(-50%, -50%) scale(0.95); }
.center-play-btn.playing { opacity: 0; visibility: hidden; pointer-events: none; }
/* Volume Widget Styles */
.volume-widget { display: flex; align-items: center; margin-left: 10px; }
.volume-slider-box { width: 0; overflow: hidden; transition: width 0.3s; display: flex; align-items: center; }
.volume-widget:hover .volume-slider-box { width: 80px; margin-left: 5px; }
</style>
</head>
<body>
<div id="playerOverlay" class="video_overlay">
<div class="player_modal">
<div class="custom-player-container" id="videoWrapper">
<button class="center-play-btn" id="midPlayBtn" onclick="togglePlay()">
<svg width="40" height="40" fill="currentColor" viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></svg>
</button>
<!--div class="player-header" id="topHeader">
<h2 class="player-title"><?php echo $mvTitle ?></h2>
<button onclick="history.back()" class="close-btn">
<svg width="32" height="32" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg>
</button>
</div-->
<div class="player_div" id="">
<video id="mainVideo" poster="<?php echo $mvThumb; ?>" playsinline >
<source src="<?php echo $mvSrc; ?>">
</video></div>
<div class="player-controls" id="bottomControls">
<div class="seeker-container">
<input type="range" id="seeker" class="custom-range" value="0" min="0" step="0.01">
<div id="progressFill" class="progress-fill" style="width: 0%"></div>
</div>
<div class="controls-bar">
<div class="group-left">
<button id="playPauseBtn" class="btn-icon">
<svg id="playIcon" width="24" height="24" fill="currentColor" viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></svg>
<svg id="pauseIcon" style="display:none;" width="24" height="24" fill="currentColor" viewBox="0 0 24 24"><path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z"/></svg>
</button>
<div class="volume-widget">
<button id="muteBtn" class="btn-icon">
<svg id="volIcon" width="20" height="20" fill="currentColor" viewBox="0 0 24 24"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/></svg>
</button>
<div class="volume-slider-box">
<input type="range" id="volumeSlider" class="custom-range" min="0" max="1" step="0.05" value="1">
</div>
</div>
<span id="timeDisplay" class="time-text">00:00:00 / 00:00:00</span>
</div>
<div class="group-right">
<button id="fullscreenBtn" class="btn-icon">
<svg width="20" height="20" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg>
</button>
</div>
</div>
</div>
</div>
<div class="player-header" id="topHeader">
<h2 class="player-title"><?php echo $mvTitle ?></h2>
<!--button onclick="history.back()" class="close-btn">
<svg width="32" height="32" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg>
</button-->
</div>
<div class="external-back-nav">
<a href="javascript:history.back()" class="back-link">
<svg width="20" height="20" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
<path d="M10 19l-7-7m0 0l7-7m-7 7h18"></path>
</svg>
Return to Library
</a>
</div>
</div>
</div>
<script>
const video = document.getElementById('mainVideo');
const wrapper = document.getElementById('videoWrapper');
const header = document.getElementById('topHeader');
const controls = document.getElementById('bottomControls');
const midPlayBtn = document.getElementById('midPlayBtn');
const playIcon = document.getElementById('playIcon');
const pauseIcon = document.getElementById('pauseIcon');
const seeker = document.getElementById('seeker');
const progressFill = document.getElementById('progressFill');
const timeDisplay = document.getElementById('timeDisplay');
const volumeSlider = document.getElementById('volumeSlider');
const muteBtn = document.getElementById('muteBtn');
// Toggle Play/Pause
function togglePlay() {
if (video.paused) {
video.play();
updatePlayPauseUI(true);
} else {
video.pause();
updatePlayPauseUI(false);
}
}
function updatePlayPauseUI(isPlaying) {
if (isPlaying) {
playIcon.style.display = "none";
pauseIcon.style.display = "block";
midPlayBtn.classList.add('playing');
showControls();
} else {
playIcon.style.display = "block";
pauseIcon.style.display = "none";
midPlayBtn.classList.remove('playing');
}
}
// Volume Logic
volumeSlider.addEventListener('input', (e) => {
video.volume = e.target.value;
video.muted = (e.target.value == 0);
});
muteBtn.addEventListener('click', () => {
video.muted = !video.muted;
volumeSlider.value = video.muted ? 0 : video.volume;
});
// Time Formatting
function formatTime(seconds) {
if (isNaN(seconds)) return "00:00:00";
const h = Math.floor(seconds / 3600);
const m = Math.floor((seconds % 3600) / 60);
const s = Math.floor(seconds % 60);
return [h, m, s].map(v => v < 10 ? "0" + v : v).join(":");
}
video.addEventListener('timeupdate', () => {
timeDisplay.innerText = `${formatTime(video.currentTime)} / ${formatTime(video.duration)}`;
if (!seeker.matches(':active')) {
seeker.value = video.currentTime;
progressFill.style.width = (video.currentTime / video.duration * 100) + '%';
}
});
video.addEventListener('loadedmetadata', () => { seeker.max = video.duration; });
seeker.addEventListener('input', () => { video.currentTime = seeker.value; });
// Auto-Hide Logic
let hideTimeout;
function showControls() {
header.classList.remove('hide-interface');
controls.classList.remove('hide-interface');
clearTimeout(hideTimeout);
if (!video.paused) {
hideTimeout = setTimeout(() => {
header.classList.add('hide-interface');
controls.classList.add('hide-interface');
}, 3000);
}
}
// Listeners
document.getElementById('playPauseBtn').addEventListener('click', togglePlay);
video.addEventListener('click', togglePlay);
wrapper.addEventListener('mousemove', showControls);
wrapper.addEventListener('touchstart', showControls, {passive: true});
// Fullscreen
document.getElementById('fullscreenBtn').addEventListener('click', () => {
if (!document.fullscreenElement) wrapper.requestFullscreen();
else document.exitFullscreen();
});
// Heartbeat check
setInterval(() => {
fetch('check_subscription_ajax.php')
.then(r => r.json())
.then(data => {
if (data.status !== 'active') window.location.href = "plans.php?error=expired";
});
}, 60000);
</script>
</body>
</html>