import os # Define project structure and file contents project_files = { # ------------------ ROOT FILES ------------------ "install.php": """connect_error) { die("Connection failed: " . $conn->connect_error); } $conn->query("CREATE DATABASE IF NOT EXISTS skillzup"); $conn->select_db("skillzup"); // Create Tables $conn->query("CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), phone VARCHAR(20), email VARCHAR(100) UNIQUE, password VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); $conn->query("CREATE TABLE IF NOT EXISTS admin (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE, password VARCHAR(255))"); $conn->query("CREATE TABLE IF NOT EXISTS banners (id INT AUTO_INCREMENT PRIMARY KEY, image VARCHAR(255), link VARCHAR(255))"); $conn->query("CREATE TABLE IF NOT EXISTS courses (id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255), mrp DECIMAL(10,2), price DECIMAL(10,2), description TEXT, image VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); $conn->query("CREATE TABLE IF NOT EXISTS chapters (id INT AUTO_INCREMENT PRIMARY KEY, course_id INT, title VARCHAR(255))"); $conn->query("CREATE TABLE IF NOT EXISTS videos (id INT AUTO_INCREMENT PRIMARY KEY, chapter_id INT, title VARCHAR(255), filename VARCHAR(255))"); $conn->query("CREATE TABLE IF NOT EXISTS orders (id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, course_id INT, amount DECIMAL(10,2), status VARCHAR(20), razorpay_order_id VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); $conn->query("CREATE TABLE IF NOT EXISTS settings (id INT AUTO_INCREMENT PRIMARY KEY, app_name VARCHAR(100), razorpay_key VARCHAR(100), razorpay_secret VARCHAR(100), support_email VARCHAR(100), support_phone VARCHAR(20))"); // Default Admin $p = password_hash('123456', PASSWORD_BCRYPT); $conn->query("INSERT IGNORE INTO admin (id, username, password) VALUES (1, 'admin', '$p')"); $conn->query("INSERT IGNORE INTO settings (id, app_name, support_email, support_phone) VALUES (1, 'SkillzUp', 'support@skillzup.com', '1234567890')"); // Create Upload Folders @mkdir('uploads/banners', 0777, true); @mkdir('uploads/courses', 0777, true); @mkdir('uploads/videos', 0777, true); header("Location: login.php"); exit; ?>""", "common/config.php": """connect_error) { die("Database connection failed"); } $settings = $conn->query("SELECT * FROM settings WHERE id=1")->fetch_assoc(); define('APP_NAME', $settings['app_name'] ?? 'SkillzUp'); ?>""", "common/header.php": """ <?php echo APP_NAME; ?>
""", "common/bottom.php": """
""", "common/sidebar.php": """ """, "login.php": """real_escape_string($_POST['email']); $pass = $_POST['password']; $res = $conn->query("SELECT * FROM users WHERE email='$email'"); if($res->num_rows > 0) { $u = $res->fetch_assoc(); if(password_verify($pass, $u['password'])) { $_SESSION['user_id'] = $u['id']; $_SESSION['user_name'] = $u['name']; $_SESSION['user_email'] = $u['email']; echo json_encode(['status'=>'success']); exit; } } echo json_encode(['status'=>'error', 'msg'=>'Invalid Email or Password']); exit; } if($_POST['action'] === 'signup') { $name = $conn->real_escape_string($_POST['name']); $phone = $conn->real_escape_string($_POST['phone']); $email = $conn->real_escape_string($_POST['email']); $pass = password_hash($_POST['password'], PASSWORD_BCRYPT); if($conn->query("SELECT id FROM users WHERE email='$email'")->num_rows > 0) { echo json_encode(['status'=>'error', 'msg'=>'Email already registered']); exit; } if($conn->query("INSERT INTO users (name, phone, email, password) VALUES ('$name', '$phone', '$email', '$pass')")) { $_SESSION['user_id'] = $conn->insert_id; $_SESSION['user_name'] = $name; $_SESSION['user_email'] = $email; echo json_encode(['status'=>'success']); exit; } echo json_encode(['status'=>'error', 'msg'=>'Registration failed']); exit; } } ?> Login / Signup
""", "index.php": """query("SELECT * FROM banners"); $latest = $conn->query("SELECT * FROM courses ORDER BY id DESC LIMIT 5"); $all = $conn->query("SELECT * FROM courses ORDER BY id DESC"); ?>
num_rows > 0): ?>
fetch_assoc()): ?>

Latest Courses

View All
fetch_assoc()): ?>

Top Courses

fetch_assoc()): ?>

""", "course.php": """real_escape_string($_GET['search']) : ''; $sort = isset($_GET['sort']) ? $_GET['sort'] : 'latest'; $sql = "SELECT * FROM courses WHERE title LIKE '%$search%'"; if($sort === 'low') $sql .= " ORDER BY price ASC"; elseif($sort === 'high') $sql .= " ORDER BY price DESC"; else $sql .= " ORDER BY id DESC"; $res = $conn->query($sql); ?>
fetch_assoc()): $disc = round((($c['mrp'] - $c['price'])/$c['mrp'])*100); ?> 0): ?> % OFF

""", "course_detail.php": """query("SELECT * FROM courses WHERE id=$id")->fetch_assoc(); if(!$c) { die("Course not found"); } $purchased = false; if(isset($_SESSION['user_id'])) { $uid = $_SESSION['user_id']; $check = $conn->query("SELECT id FROM orders WHERE user_id=$uid AND course_id=$id AND status='Success'"); if($check->num_rows > 0) $purchased = true; } $disc = round((($c['mrp'] - $c['price'])/$c['mrp'])*100); ?>

0): ?> (% Off)

Course Details

""", "buy.php": """query("SELECT * FROM courses WHERE id=$course_id")->fetch_assoc(); $u = $conn->query("SELECT * FROM users WHERE id=$user_id")->fetch_assoc(); if(!$c) { die("Invalid Course"); } // Server-side cURL verification mechanism after checkout triggers this block via POST if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['razorpay_payment_id'])) { header('Content-Type: application/json'); $pay_id = $_POST['razorpay_payment_id']; $order_id = $_POST['razorpay_order_id']; $sig = $_POST['razorpay_signature']; $key_id = $settings['razorpay_key'] ?? ''; $secret = $settings['razorpay_secret'] ?? ''; // Server-side cURL Verification $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.razorpay.com/v1/payments/" . $pay_id); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERPWD, $key_id . ":" . $secret); $response = json_decode(curl_exec($ch), true); curl_close($ch); if(isset($response['status']) && $response['status'] === 'captured') { $amount = $c['price']; $conn->query("INSERT INTO orders (user_id, course_id, amount, status, razorpay_order_id) VALUES ($user_id, $course_id, $amount, 'Success', '$order_id')"); echo json_encode(['status' => 'success']); exit; } else { $conn->query("INSERT INTO orders (user_id, course_id, amount, status, razorpay_order_id) VALUES ($user_id, $course_id, 0, 'Failed', '$order_id')"); echo json_encode(['status' => 'failed']); exit; } } // Minimalistic Order Creation for Razorpay Checkouts $api_url = "https://api.razorpay.com/v1/orders"; $order_data = json_encode([ 'amount' => $c['price'] * 100, 'currency' => 'INR', 'receipt' => 'rcpt_' . time() ]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $order_data); curl_setopt($ch, CURLOPT_USERPWD, ($settings['razorpay_key'] ?? '') . ":" . ($settings['razorpay_secret'] ?? '')); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $rz_order = json_decode(curl_exec($ch), true); curl_close($ch); $rz_order_id = $rz_order['id'] ?? ''; ?> Checkout

Total Amount: ₹

""", "mycourses.php": """query("SELECT courses.* FROM orders JOIN courses ON orders.course_id = courses.id WHERE orders.user_id = $uid AND orders.status = 'Success'"); ?>

My Enrolled Courses

num_rows === 0): ?>

You haven't bought any courses yet.

fetch_assoc()): ?>
""", "watch.php": """query("SELECT id FROM orders WHERE user_id=$uid AND course_id=$course_id AND status='Success'"); if($chk->num_rows === 0) { die("Access Denied: Please purchase this course."); } $course = $conn->query("SELECT * FROM courses WHERE id=$course_id")->fetch_assoc(); $chapters = $conn->query("SELECT * FROM chapters WHERE course_id=$course_id"); // Custom Secure Stream Gateway Pipeline Endpoint Logic via Obfuscated Session Tokens if(isset($_GET['stream'])) { $vid_id = (int)$_GET['stream']; $v = $conn->query("SELECT filename FROM videos WHERE id=$vid_id")->fetch_assoc(); if($v) { $path = 'uploads/videos/' . $v['filename']; if(file_exists($path)) { header('Content-Type: video/mp4'); header('Content-Length: ' . filesize($path)); readfile($path); exit; } } exit; } ?> Watching: <?php echo $course['title']; ?>
Select a Video
00:00 00:00
fetch_assoc()): ?>
""", "profile.php": """real_escape_string($_POST['name']); $phone = $conn->real_escape_string($_POST['phone']); $email = $conn->real_escape_string($_POST['email']); $sql = "UPDATE users SET name='$name', phone='$phone', email='$email' WHERE id=$uid"; if($conn->query($sql)) { $_SESSION['user_name'] = $name; $_SESSION['user_email'] = $email; if(!empty($_POST['password'])) { $pass = password_hash($_POST['password'], PASSWORD_BCRYPT); $conn->query("UPDATE users SET password='$pass' WHERE id=$uid"); } $msg = "Profile updated successfully"; } } $u = $conn->query("SELECT * FROM users WHERE id=$uid")->fetch_assoc(); include 'common/header.php'; include 'common/sidebar.php'; ?>

My Profile Settings

LOGOUT ACCOUNT
""", "help.php": """

Help & Support

Have any issues or questions regarding courses? Reach us instantly.

Email Support

Call Hotline

""", # ------------------ ADMIN PANEL ------------------ "admin/login.php": """real_escape_string($_POST['username']); $pass = $_POST['password']; $res = $conn->query("SELECT * FROM admin WHERE username='$user'"); if($res->num_rows > 0) { $a = $res->fetch_assoc(); if(password_verify($pass, $a['password'])) { $_SESSION['admin_id'] = $a['id']; header("Location: index.php"); exit; } } $err = "Invalid Credentials"; } ?> Admin Portal Login

Admin Panel

""", "admin/common/header.php": """ Console Admin Panel
ADMIN OPERATIONS
""", "admin/common/bottom.php": """
""", "admin/common/sidebar.php": """""", "admin/index.php": """query("SELECT count(id) as total FROM users")->fetch_assoc()['total']; $c_count = $conn->query("SELECT count(id) as total FROM courses")->fetch_assoc()['total']; $o_count = $conn->query("SELECT count(id) as total FROM orders WHERE status='Success'")->fetch_assoc()['total']; $rev = $conn->query("SELECT sum(amount) as total FROM orders WHERE status='Success'")->fetch_assoc()['total'] ?? 0; include 'common/header.php'; include 'common/sidebar.php'; ?>

Total Users

Net Revenue

Active Courses

Purchases

""", "admin/banner.php": """real_escape_string($_POST['link']); $ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION); $filename = time() . '.' . $ext; if(move_uploaded_file($_FILES['image']['tmp_tmp_name'] ?? $_FILES['image']['tmp_name'], '../uploads/banners/'.$filename)) { $conn->query("INSERT INTO banners (image, link) VALUES ('$filename', '$link')"); } } if(isset($_GET['del'])) { $id = (int)$_GET['del']; $b = $conn->query("SELECT image FROM banners WHERE id=$id")->fetch_assoc(); @unlink('../uploads/banners/'.$b['image']); $conn->query("DELETE FROM banners WHERE id=$id"); header("Location: banner.php"); exit; } $list = $conn->query("SELECT * FROM banners"); include 'common/header.php'; include 'common/sidebar.php'; ?>

Add Banner (16:9 Aspect Ratio)

fetch_assoc()): ?>
""", "admin/course.php": """real_escape_string($_POST['title']); $mrp = (float)$_POST['mrp']; $price = (float)$_POST['price']; $desc = $conn->real_escape_string($_POST['description']); $filename = ''; if(!empty($_FILES['thumbnail']['name'])) { $ext = pathinfo($_FILES['thumbnail']['name'], PATHINFO_EXTENSION); $filename = time() . '.' . $ext; move_uploaded_file($_FILES['thumbnail']['tmp_name'], '../uploads/courses/'.$filename); } $sql = "INSERT INTO courses (title, mrp, price, description, image) VALUES ('$title', $mrp, $price, '$desc', '$filename')"; if($conn->query($sql)) { echo json_encode(['status'=>'success']); } else { echo json_encode(['status'=>'error']); } exit; } if(isset($_GET['del'])) { $id = (int)$_GET['del']; $c = $conn->query("SELECT image FROM courses WHERE id=$id")->fetch_assoc(); @unlink('../uploads/courses/'.$c['image']); $conn->query("DELETE FROM courses WHERE id=$id"); header("Location: course.php"); exit; } $courses = $conn->query("SELECT * FROM courses ORDER BY id DESC"); include 'common/header.php'; include 'common/sidebar.php'; ?>

Add New Course

fetch_assoc()): ?>
""", "admin/chapter.php": """real_escape_string($_POST['title']); $conn->query("INSERT INTO chapters (course_id, title) VALUES ($course_id, '$title')"); } if(isset($_GET['del'])) { $id = (int)$_GET['del']; $conn->query("DELETE FROM chapters WHERE id=$id"); header("Location: chapter.php?course_id=$course_id"); exit; } $chapters = $conn->query("SELECT * FROM chapters WHERE course_id=$course_id"); include 'common/header.php'; include 'common/sidebar.php'; ?>

Add Chapter To Course

fetch_assoc()): ?>
""", "admin/video.php": """real_escape_string($_POST['title']); $ext = pathinfo($_FILES['video']['name'], PATHINFO_EXTENSION); if(strtolower($ext) !== 'mp4') { echo json_encode(['status'=>'error','msg'=>'Only MP4 allowed']); exit; } $filename = time() . '.' . $ext; if(move_uploaded_file($_FILES['video']['tmp_name'], '../uploads/videos/'.$filename)) { $conn->query("INSERT INTO videos (chapter_id, title, filename) VALUES ($chapter_id, '$title', '$filename')"); echo json_encode(['status'=>'success']); } else { echo json_encode(['status'=>'error','msg'=>'Upload failed']); } exit; } if(isset($_GET['del'])) { $id = (int)$_GET['del']; $v = $conn->query("SELECT filename FROM videos WHERE id=$id")->fetch_assoc(); @unlink('../uploads/videos/'.$v['filename']); $conn->query("DELETE FROM videos WHERE id=$id"); header("Location: video.php?chapter_id=$chapter_id"); exit; } $videos = $conn->query("SELECT * FROM videos WHERE chapter_id=$chapter_id"); include 'common/header.php'; include 'common/sidebar.php'; ?>

Upload Chapter Video (MP4)

fetch_assoc()): ?>
""", "admin/users.php": """query("SELECT * FROM users ORDER BY id DESC"); include 'common/header.php'; include 'common/sidebar.php'; ?>

Registered Users Registry

fetch_assoc()): ?>

Email: | Phone:

Purchases: query("SELECT courses.title FROM orders JOIN courses ON orders.course_id=courses.id WHERE orders.user_id=".$u['id']." AND orders.status='Success'"); if($p->num_rows == 0) echo 'None'; while($o = $p->fetch_assoc()) { echo ''.$o['title'].''; } ?>
""", "admin/orders.php": """query("SELECT orders.*, users.name as uname, courses.title as ctitle FROM orders JOIN users ON orders.user_id=users.id JOIN courses ON orders.course_id=courses.id ORDER BY orders.id DESC"); include 'common/header.php'; include 'common/sidebar.php'; ?>

Order Purchases Audit Logs

fetch_assoc()): ?>

Course:

Date:
""", "admin/payments.php": """query("SELECT orders.*, users.name as uname FROM orders JOIN users ON orders.user_id=users.id ORDER BY orders.id DESC"); include 'common/header.php'; include 'common/sidebar.php'; ?>

Razorpay Transaction Telemetry Ledger

fetch_assoc()): ?>
ID: #

Order Ref:

User Handle: []

""", "admin/settings.php": """real_escape_string($_POST['app_name']); $rz_key = $conn->real_escape_string($_POST['razorpay_key']); $rz_sec = $conn->real_escape_string($_POST['razorpay_secret']); $email = $conn->real_escape_string($_POST['support_email']); $phone = $conn->real_escape_string($_POST['support_phone']); $sql = "UPDATE settings SET app_name='$app_name', razorpay_key='$rz_key', razorpay_secret='$rz_sec', support_email='$email', support_phone='$phone' WHERE id=1"; if($conn->query($sql)) { $msg = "Settings updated successfully System-Wide"; } } $st = $conn->query("SELECT * FROM settings WHERE id=1")->fetch_assoc(); include 'common/header.php'; include 'common/sidebar.php'; ?>

Global App Configuration

""" } # Generate directories and files structurally base_directory = "skillzup" print(f"[*] Starting compilation payload deployment inside directory: {base_directory}/") for relative_path, file_content in project_files.items(): full_path = os.path.join(base_directory, relative_path) directory_name = os.path.dirname(full_path) if not os.path.exists(directory_name): os.makedirs(directory_name, exist_ok=True) with open(full_path, "w", encoding="utf-8") as file_handle: file_handle.write(file_content.strip()) print("[+] Build Complete! All application codes, security mechanisms, forms, and custom players are generated.") print("[!] Run 'install.php' on your local PHP environment (e.g. XAMPP) to deploy the database.")

Comments

Popular posts from this blog