// Database configuration define('DB_HOST', 'localhost'); define('DB_NAME', 'blon3854_ai'); define('DB_USER', 'blon3854_ai'); define('DB_PASS', 'Matematika14$'); // Platform configuration define('SITE_URL', 'https://blockanta.com'); define('SITE_NAME', 'BLOCKANTA'); define('SITE_TAGLINE_EN', 'Craft Your Future Home in Immersive 3D'); define('SITE_TAGLINE_AR', 'صمم بيتك المستقبلي بتجربة ثلاثية الأبعاد غامرة'); define('DEFAULT_LANG', 'en'); // File upload configuration define('MAX_UPLOAD_SIZE', 50 * 1024 * 1024); // 50MB define('ALLOWED_3D_EXTENSIONS', ['gltf', 'glb', 'obj']); define('UPLOAD_DIR', __DIR__ . '/../uploads/'); define('MODEL_DIR', __DIR__ . '/../assets/models/'); // Security define('SESSION_TIMEOUT', 3600 * 24); // 24 hours define('BCRYPT_COST', 12); // 3D Render settings define('DEFAULT_QUALITY', 'medium'); define('MAX_FREE_MODELS', 5); define('MAX_PRO_MODELS', 9999); // Social Media (All unified as @blockanta) $social_media = [ 'instagram' => 'https://instagram.com/blockanta', 'twitter' => 'https://twitter.com/blockanta', 'facebook' => 'https://facebook.com/blockanta', 'linkedin' => 'https://linkedin.com/blockanta', 'youtube' => 'https://youtube.com/@blockanta', 'tiktok' => 'https://tiktok.com/@blockanta', 'telegram' => 'https://t.me/blockanta', 'discord' => 'https://discord.gg/blockanta', 'reddit' => 'https://reddit.com/r/blockanta', 'github' => 'https://github.com/blockanta' ]; // Start session session_start(); // Set default headers for CORS and UTF-8 header('Content-Type: text/html; charset=utf-8'); header('X-Frame-Options: DENY'); header('X-Content-Type-Options: nosniff'); // Error reporting (disable in production) error_reporting(E_ALL); ini_set('display_errors', 1); ?> require_once 'config.php'; class Database { private $pdo; private static $instance = null; private function __construct() { try { $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4"; $this->pdo = new PDO($dsn, DB_USER, DB_PASS); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (PDOException $e) { die("Database connection failed: " . $e->getMessage()); } } public static function getInstance() { if (self::$instance === null) { self::$instance = new Database(); } return self::$instance; } public function getConnection() { return $this->pdo; } // Prepared statement helper public function prepare($sql) { return $this->pdo->prepare($sql); } } // Authentication Class class Auth { private $db; public function __construct() { $this->db = Database::getInstance()->getConnection(); } public function register($userData) { $sql = "INSERT INTO users (username, email, password_hash, full_name, country, language) VALUES (:username, :email, :password_hash, :full_name, :country, :language)"; $stmt = $this->db->prepare($sql); $password_hash = password_hash($userData['password'], PASSWORD_BCRYPT, ['cost' => BCRYPT_COST]); return $stmt->execute([ ':username' => $userData['username'], ':email' => $userData['email'], ':password_hash' => $password_hash, ':full_name' => $userData['full_name'], ':country' => $userData['country'], ':language' => $userData['language'] ?? DEFAULT_LANG ]); } public function login($email, $password) { $sql = "SELECT * FROM users WHERE email = :email AND status = 'active'"; $stmt = $this->db->prepare($sql); $stmt->execute([':email' => $email]); $user = $stmt->fetch(); if ($user && password_verify($password, $user['password_hash'])) { // Update last login $update_sql = "UPDATE users SET last_login = NOW() WHERE id = :id"; $update_stmt = $this->db->prepare($update_sql); $update_stmt->execute([':id' => $user['id']]); // Set session $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['email'] = $user['email']; $_SESSION['role'] = $user['role']; $_SESSION['language'] = $user['language']; $_SESSION['subscription'] = $user['subscription']; $_SESSION['logged_in'] = true; return true; } return false; } public function logout() { session_destroy(); session_start(); } public function isLoggedIn() { return isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true; } public function isAdmin() { return $this->isLoggedIn() && $_SESSION['role'] === 'admin'; } public function getUser($id = null) { if (!$id && $this->isLoggedIn()) { $id = $_SESSION['user_id']; } $sql = "SELECT * FROM users WHERE id = :id"; $stmt = $this->db->prepare($sql); $stmt->execute([':id' => $id]); return $stmt->fetch(); } } ?>class Language { private $db; private $current_lang; private $translations = []; public function __construct() { $this->db = Database::getInstance()->getConnection(); $this->current_lang = $this->detectLanguage(); $this->loadTranslations(); } private function detectLanguage() { // Priority: 1. User preference, 2. Session, 3. Browser, 4. Default if (isset($_SESSION['language'])) { return $_SESSION['language']; } if (isset($_COOKIE['blockanta_lang'])) { return $_COOKIE['blockanta_lang']; } $browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); return in_array($browser_lang, ['en', 'ar']) ? $browser_lang : DEFAULT_LANG; } private function loadTranslations() { $sql = "SELECT content_key, content_en, content_ar FROM multilingual_content"; $stmt = $this->db->prepare($sql); $stmt->execute(); while ($row = $stmt->fetch()) { $this->translations[$row['content_key']] = [ 'en' => $row['content_en'], 'ar' => $row['content_ar'] ]; } } public function get($key, $params = []) { if (!isset($this->translations[$key])) { return "[$key]"; } $text = $this->translations[$key][$this->current_lang]; // Replace parameters foreach ($params as $param => $value) { $text = str_replace("{{$param}}", $value, $text); } return $text; } public function setLanguage($lang) { if (in_array($lang, ['en', 'ar'])) { $this->current_lang = $lang; $_SESSION['language'] = $lang; setcookie('blockanta_lang', $lang, time() + (365 * 24 * 60 * 60), '/'); // Update user preference if logged in if (isset($_SESSION['user_id'])) { $sql = "UPDATE users SET language = :lang WHERE id = :id"; $stmt = $this->db->prepare($sql); $stmt->execute([':lang' => $lang, ':id' => $_SESSION['user_id']]); } } } public function getCurrentLanguage() { return $this->current_lang; } public function isRTL() { return $this->current_lang === 'ar'; } public function getDirection() { return $this->isRTL() ? 'rtl' : 'ltr'; } // Generate language switcher HTML public function generateSwitcher() { $current = $this->current_lang; $other = $current === 'en' ? 'ar' : 'en'; $current_name = $current === 'en' ? 'English' : 'العربية'; $other_name = $other === 'en' ? 'English' : 'العربية'; return '
'; } } // Initialize language system $lang = new Language(); ?>