require_once($_SERVER['DOCUMENT_ROOT'].'/db.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/globals.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/includes_shared.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/header.php'); // Assuming header.php builds navigation etc. // Determine login status based solely on $_SESSION['user']->id $user_is_logged_in = isset($_SESSION['user']->id); // Define domain for URLs $domain = 'https://casino.watch'; $slug = isset($_GET['slug']) ? $_GET['slug'] : 'hala-chimanimani-resort-casino'; $langauge = isset($_GET['lang']) ? $_GET['language'] : $base_language; $casino = null; $stmt = mysqli_prepare($con, "SELECT * FROM casinos WHERE casino_slug = ? LIMIT 1"); if (!$stmt) { die("DB_ERROR: Failed to prepare casino statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); // Added file/line for better debugging } mysqli_stmt_bind_param($stmt, "s", $slug); if (!mysqli_stmt_execute($stmt)) { die("DB_ERROR: Failed to execute casino statement: " . mysqli_stmt_error($stmt) . " in " . __FILE__ . " on line " . __LINE__); // Added file/line } $result = mysqli_stmt_get_result($stmt); if (!$result) { die("DB_ERROR: Failed to get result for casino statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); // Added file/line } if (mysqli_num_rows($result) > 0) { $casino = mysqli_fetch_object($result); } mysqli_stmt_close($stmt); if (!$casino) { http_response_code(404); die("Casino not found."); } $master_casino_id = !empty($casino->parent_id) ? $casino->parent_id : $casino->casino_id; $json = json_decode($casino->api_json1); // Check for JSON decode errors (non-fatal, but good to log) if (json_last_error() !== JSON_ERROR_NONE) { error_log("JSON Decode Error for casino ID {$master_casino_id}: " . json_last_error_msg() . " in " . __FILE__ . " on line " . __LINE__); // Optionally: die("CRITICAL_ERROR: Invalid JSON data for casino."); } function get_json_property($obj, $path, $default = null) { if (!is_object($obj)) return $default; $keys = explode('->', $path); $current = $obj; foreach ($keys as $key) { if (!isset($current->$key)) return $default; $current = $current->$key; } return $current; } function get_youtube_id($url) { parse_str(parse_url($url, PHP_URL_QUERY), $vars); return $vars['v'] ?? null; } // --- DYNAMIC DATA FETCHING FOR ALL SECTIONS --- $db_reviews = []; $stmt_reviews = mysqli_prepare($con, "SELECT * FROM casinos_reviews WHERE casino_id = ? ORDER BY id DESC LIMIT 10"); if(!$stmt_reviews) { die("DB_ERROR: Failed to prepare reviews statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_reviews, "i", $master_casino_id); if (!mysqli_stmt_execute($stmt_reviews)) { die("DB_ERROR: Failed to execute reviews statement: " . mysqli_stmt_error($stmt_reviews) . " in " . __FILE__ . " on line " . __LINE__); } $result_reviews = mysqli_stmt_get_result($stmt_reviews); if (!$result_reviews) { die("DB_ERROR: Failed to get result for reviews statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } while ($row = mysqli_fetch_object($result_reviews)) { $db_reviews[] = $row; } mysqli_stmt_close($stmt_reviews); $up_votes = 0; $down_votes = 0; $live_events = []; $stmt_events = mysqli_prepare($con, "SELECT * FROM events WHERE casino_id = ? ORDER BY id DESC LIMIT 3"); if (!$stmt_events) { die("DB_ERROR: Failed to prepare events statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_events, "i", $master_casino_id); if (!mysqli_stmt_execute($stmt_events)) { die("DB_ERROR: Failed to execute events statement: " . mysqli_stmt_error($stmt_events) . " in " . __FILE__ . " on line " . __LINE__); } $result_events = mysqli_stmt_get_result($stmt_events); if (!$result_events) { die("DB_ERROR: Failed to get result for events statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } while ($row = mysqli_fetch_object($result_events)) { $live_events[] = $row; } mysqli_stmt_close($stmt_events); $live_jobs = []; $stmt_jobs = mysqli_prepare($con, "SELECT * FROM jobs WHERE casino_id = ? ORDER BY id DESC LIMIT 3"); if (!$stmt_jobs) { die("DB_ERROR: Failed to prepare jobs statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_jobs, "i", $master_casino_id); if (!mysqli_stmt_execute($stmt_jobs)) { die("DB_ERROR: Failed to execute jobs statement: " . mysqli_stmt_error($stmt_jobs) . " in " . __FILE__ . " on line " . __LINE__); } $result_jobs = mysqli_stmt_get_result($stmt_jobs); if (!$result_jobs) { die("DB_ERROR: Failed to get result for jobs statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } while ($row = mysqli_fetch_object($result_jobs)) { $live_jobs[] = $row; } mysqli_stmt_close($stmt_jobs); $promo_banner = null; $banner_result = mysqli_query($con, "SELECT id, headline, description, cta, image_name, link FROM banners WHERE status = 'Active' AND moderated = 'Yes' ORDER BY RAND() LIMIT 1"); if (!$banner_result) { die("DB_ERROR: Failed to query banners: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } if (mysqli_num_rows($banner_result) > 0) { $promo_banner = mysqli_fetch_object($banner_result); // Impression logging, if it has a database interaction, should also be handled carefully. // Example: $impression_sql = "INSERT INTO analytics_impressions (...) VALUES (...)"; // $stmt_imp = mysqli_prepare($con, $impression_sql); if (!$stmt_imp) { error_log(...); } // ... then execute and close. No die() for non-critical logging. $impression_sql = "INSERT INTO analytics_impressions (item_id, variation_id, user_id, page_url, ip_address, type, user_agent) VALUES (?, ?, ?, ?, ?, ?, ?)"; $stmt_imp = mysqli_prepare($con, $impression_sql); if($stmt_imp) { $user_id_for_analytics = $_SESSION['user']->id ?? null; $visitor_type = get_impression_type($con, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']); mysqli_stmt_bind_param($stmt_imp, 'iiissss', $promo_banner->id, $promo_banner->id, $user_id_for_analytics, $_SERVER['REQUEST_URI'], $_SERVER['REMOTE_ADDR'], $visitor_type, $_SERVER['HTTP_USER_AGENT']); mysqli_stmt_execute($stmt_imp); // No die() here, logging is not critical for page load mysqli_stmt_close($stmt_imp); } else { error_log("DB_ERROR: Failed to prepare analytics impression statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } } $images = []; $stmt_img = mysqli_prepare($con, "SELECT * FROM casino_latest_images WHERE casino_id = ?"); if(!$stmt_img) { die("DB_ERROR: Failed to prepare images statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_img, "i", $casino->parent_id); if (!mysqli_stmt_execute($stmt_img)) { die("DB_ERROR: Failed to execute images statement: " . mysqli_stmt_error($stmt_img) . " in " . __FILE__ . " on line " . __LINE__); } $result_img = mysqli_stmt_get_result($stmt_img); if (!$result_img) { die("DB_ERROR: Failed to get result for images statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } while ($row = mysqli_fetch_object($result_img)) { $images[] = $row; } mysqli_stmt_close($stmt_img); $profile_image_url = !empty($images) ? rtrim($domain, '/') . '/assets/casino/' . htmlspecialchars($images[0]->casino_id) . '/' . htmlspecialchars($images[0]->filename) : 'https://placehold.co/208x208'; $gallery_images_for_alpine = []; if (!empty($images)) { foreach ($images as $img) { $gallery_images_for_alpine[] = ['src' => rtrim($domain, '/') . '/assets/casino/' . htmlspecialchars($img->casino_id) . '/' . htmlspecialchars($img->filename), 'alt' => htmlspecialchars($img->description)]; } } $latitude = get_json_property($json, 'casino->location->coordinates->latitude'); $longitude = get_json_property($json, 'casino->location->coordinates->longitude'); $address = get_json_property($json, 'casino->location->address'); $highlights = []; if (($val = get_json_property($json, 'casino->features->gaming->slots->totalMachines')) > 0) { $highlights[] = ['icon' => '', 'value' => number_format($val).'+', 'label' => 'Slot Machines']; } if (($val = get_json_property($json, 'casino->features->gaming->tableGames->list')) && !empty($val)) { $highlights[] = ['icon' => '', 'value' => count($val).'+ Types', 'label' => 'Table Games']; } if (($val = get_json_property($json, 'casino->dining->restaurants')) && !empty($val)) { $highlights[] = ['icon' => '', 'value' => count($val), 'label' => 'Restaurants']; } if ($casino->casino_always_open == '1') { $highlights[] = ['icon' => '', 'value' => 'Open 24/7', 'label' => 'Hours']; } $social_profiles = []; $stmt_profiles = mysqli_prepare($con, "SELECT * FROM casinos_profiles WHERE casino_id = ? ORDER BY name ASC"); if(!$stmt_profiles) { die("DB_ERROR: Failed to prepare profiles statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_profiles, "i", $master_casino_id); if (!mysqli_stmt_execute($stmt_profiles)) { die("DB_ERROR: Failed to execute profiles statement: " . mysqli_stmt_error($stmt_profiles) . " in " . __FILE__ . " on line " . __LINE__); } $result_profiles = mysqli_stmt_get_result($stmt_profiles); if (!$result_profiles) { die("DB_ERROR: Failed to get result for profiles statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } while ($row = mysqli_fetch_object($result_profiles)) { $social_profiles[] = $row; } mysqli_stmt_close($stmt_profiles); // ** NEW: Fetch ratings, followers, and offers ** $ratings_sql = "SELECT (SELECT COUNT(id) FROM casinos_ratings WHERE casino_id = ? AND vote_direction = 'up') as up_votes, (SELECT COUNT(id) FROM casinos_ratings WHERE casino_id = ? AND vote_direction = 'down') as down_votes"; $stmt_ratings = mysqli_prepare($con, $ratings_sql); if(!$stmt_ratings) { die("DB_ERROR: Failed to prepare ratings count statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_ratings, "ii", $master_casino_id, $master_casino_id); if (!mysqli_stmt_execute($stmt_ratings)) { die("DB_ERROR: Failed to execute ratings count statement: " . mysqli_stmt_error($stmt_ratings) . " in " . __FILE__ . " on line " . __LINE__); } $ratings = mysqli_fetch_assoc(mysqli_stmt_get_result($stmt_ratings)); mysqli_stmt_close($stmt_ratings); // Close statement for counts $up_votes = $ratings['up_votes'] ?? 0; $down_votes = $ratings['down_votes'] ?? 0; $user_vote = null; $user_id = $_SESSION['user']->id ?? null; // Use current user_id from session if($user_id) { $vote_sql = "SELECT vote_direction FROM casinos_ratings WHERE casino_id = ? AND user_id = ?"; $stmt_uv = mysqli_prepare($con, $vote_sql); if(!$stmt_uv) { die("DB_ERROR: Failed to prepare user vote statement (user): " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_uv, "ii", $master_casino_id, $user_id); } else { $session_id = session_id(); // Ensure session_id is defined $vote_sql = "SELECT vote_direction FROM casinos_ratings WHERE casino_id = ? AND session_id = ?"; $stmt_uv = mysqli_prepare($con, $vote_sql); if(!$stmt_uv) { die("DB_ERROR: Failed to prepare user vote statement (session): " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_uv, "is", $master_casino_id, $session_id); } if (!mysqli_stmt_execute($stmt_uv)) { die("DB_ERROR: Failed to execute user vote statement: " . mysqli_stmt_error($stmt_uv) . " in " . __FILE__ . " on line " . __LINE__); } $user_vote = mysqli_fetch_assoc(mysqli_stmt_get_result($stmt_uv))['vote_direction'] ?? null; mysqli_stmt_close($stmt_uv); $is_following = false; if($user_id) { $follow_sql = "SELECT id FROM casinos_followers WHERE casino_id = ? AND user_id = ?"; $stmt_f = mysqli_prepare($con, $follow_sql); if(!$stmt_f) { die("DB_ERROR: Failed to prepare follow statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_f, "ii", $master_casino_id, $user_id); if (!mysqli_stmt_execute($stmt_f)) { die("DB_ERROR: Failed to execute follow statement: " . mysqli_stmt_error($stmt_f) . " in " . __FILE__ . " on line " . __LINE__); } if(mysqli_stmt_get_result($stmt_f)->num_rows > 0) { $is_following = true; } mysqli_stmt_close($stmt_f); } // ** NEW: Fetch Videos ** $live_videos = []; // Initialize array $stmt_videos = mysqli_prepare($con, "SELECT * FROM videos WHERE casino_id = ? ORDER BY rand() DESC LIMIT 10"); if(!$stmt_videos) { die("DB_ERROR: Failed to prepare videos statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } mysqli_stmt_bind_param($stmt_videos, "i", $master_casino_id); if (!mysqli_stmt_execute($stmt_videos)) { die("DB_ERROR: Failed to execute videos statement: " . mysqli_stmt_error($stmt_videos) . " in " . __FILE__ . " on line " . __LINE__); } $result_videos = mysqli_stmt_get_result($stmt_videos); if (!$result_videos) { die("DB_ERROR: Failed to get result for videos statement: " . mysqli_error($con) . " in " . __FILE__ . " on line " . __LINE__); } while ($row = mysqli_fetch_object($result_videos)) { $live_videos[] = $row; } mysqli_stmt_close($stmt_videos); // --- 2. SET HEADER VARIABLES --- $page_title = "Casino Profile - " . htmlspecialchars($casino->casino_name); $meta_description = htmlspecialchars(get_json_property($json, 'casino->seo->metaDescription', '')); // --- 3. INCLUDE HEADER --- // This was moved up already. ?>


Warning: Undefined variable $casino in /var/www/casino.watch/casino-profile.php on line 311

Warning: Attempt to read property "casino_name" on null in /var/www/casino.watch/casino-profile.php on line 311

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/casino.watch/casino-profile.php on line 311


Warning: Undefined variable $casino in /var/www/casino.watch/casino-profile.php on line 312

Warning: Attempt to read property "casino_location_country_city" on null in /var/www/casino.watch/casino-profile.php on line 312

Warning: Undefined variable $casino in /var/www/casino.watch/casino-profile.php on line 312

Warning: Attempt to read property "casino_location_country_state" on null in /var/www/casino.watch/casino-profile.php on line 312
,