import os import zipfile # Prepare directory structure base_dir = "/tmp/lms_smkn5" os.makedirs(base_dir, exist_ok=True) os.makedirs(os.path.join(base_dir, "config"), exist_ok=True) os.makedirs(os.path.join(base_dir, "uploads"), exist_ok=True) os.makedirs(os.path.join(base_dir, "includes"), exist_ok=True) # 1. Generate SQL File sql_content = """-- ========================================================= -- DATABASE SCHEME FOR LMS SMKN 5 KOTA JAMBI -- Target Database: MySQL / MariaDB (Hostinger Compatible) -- ========================================================= SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS attendance; DROP TABLE IF EXISTS quiz_results; DROP TABLE IF EXISTS quiz_questions; DROP TABLE IF EXISTS quizzes; DROP TABLE IF EXISTS submissions; DROP TABLE IF EXISTS assignments; DROP TABLE IF EXISTS materials; DROP TABLE IF EXISTS class_enrollments; DROP TABLE IF EXISTS classes; DROP TABLE IF EXISTS users; SET FOREIGN_KEY_CHECKS = 1; -- 1. USERS TABLE CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, full_name VARCHAR(100) NOT NULL, email VARCHAR(100) NULL, role ENUM('admin', 'guru', 'siswa', 'orangtua', 'pimpinan') NOT NULL DEFAULT 'siswa', nis_nip VARCHAR(30) NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 2. CLASSES TABLE CREATE TABLE classes ( id INT AUTO_INCREMENT PRIMARY KEY, class_name VARCHAR(100) NOT NULL, subject VARCHAR(100) NOT NULL, teacher_id INT NOT NULL, academic_year VARCHAR(20) NOT NULL DEFAULT '2025/2026', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (teacher_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 3. CLASS ENROLLMENTS TABLE CREATE TABLE class_enrollments ( id INT AUTO_INCREMENT PRIMARY KEY, class_id INT NOT NULL, student_id INT NOT NULL, enrolled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE CASCADE, FOREIGN KEY (student_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 4. MATERIALS TABLE (Manajemen Pembelajaran) CREATE TABLE materials ( id INT AUTO_INCREMENT PRIMARY KEY, class_id INT NOT NULL, title VARCHAR(150) NOT NULL, description TEXT NULL, file_path VARCHAR(255) NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 5. ASSIGNMENTS TABLE (Tugas) CREATE TABLE assignments ( id INT AUTO_INCREMENT PRIMARY KEY, class_id INT NOT NULL, title VARCHAR(150) NOT NULL, description TEXT NULL, due_date DATETIME NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 6. SUBMISSIONS TABLE (Penilaian Tugas) CREATE TABLE submissions ( id INT AUTO_INCREMENT PRIMARY KEY, assignment_id INT NOT NULL, student_id INT NOT NULL, file_path VARCHAR(255) NULL, submission_text TEXT NULL, score DECIMAL(5,2) NULL, feedback TEXT NULL, submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (assignment_id) REFERENCES assignments(id) ON DELETE CASCADE, FOREIGN KEY (student_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 7. QUIZZES TABLE (Kuis / Ujian) CREATE TABLE quizzes ( id INT AUTO_INCREMENT PRIMARY KEY, class_id INT NOT NULL, title VARCHAR(150) NOT NULL, duration_minutes INT NOT NULL DEFAULT 60, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 8. QUIZ QUESTIONS TABLE CREATE TABLE quiz_questions ( id INT AUTO_INCREMENT PRIMARY KEY, quiz_id INT NOT NULL, question_text TEXT NOT NULL, option_a VARCHAR(255) NOT NULL, option_b VARCHAR(255) NOT NULL, option_c VARCHAR(255) NOT NULL, option_d VARCHAR(255) NOT NULL, correct_option CHAR(1) NOT NULL, FOREIGN KEY (quiz_id) REFERENCES quizzes(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 9. QUIZ RESULTS TABLE CREATE TABLE quiz_results ( id INT AUTO_INCREMENT PRIMARY KEY, quiz_id INT NOT NULL, student_id INT NOT NULL, score DECIMAL(5,2) NOT NULL, completed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (quiz_id) REFERENCES quizzes(id) ON DELETE CASCADE, FOREIGN KEY (student_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 10. ATTENDANCE TABLE (Presensi) CREATE TABLE attendance ( id INT AUTO_INCREMENT PRIMARY KEY, class_id INT NOT NULL, student_id INT NOT NULL, date DATE NOT NULL, status ENUM('Hadir', 'Izin', 'Sakit', 'Alpa') NOT NULL DEFAULT 'Hadir', notes VARCHAR(255) NULL, FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE CASCADE, FOREIGN KEY (student_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- SEED INITIAL USERS -- Default Passwords: "password123" (hashed via SHA2 / PHP password_hash equivalent) INSERT INTO users (username, password, full_name, email, role, nis_nip) VALUES ('admin', '$2y$10$e0MYzXyjpJS7Pd0RVvHwHe11.758YxXjXvA0o5E55S/Rj3wD4i42i', 'Administrator SMKN 5', 'admin@smkn5kotajambi.sch.id', 'admin', 'ADMIN001'), ('guru1', '$2y$10$e0MYzXyjpJS7Pd0RVvHwHe11.758YxXjXvA0o5E55S/Rj3wD4i42i', 'Budi Santoso, S.Kom', 'budi@smkn5kotajambi.sch.id', 'guru', '198501012010011001'), ('siswa1', '$2y$10$e0MYzXyjpJS7Pd0RVvHwHe11.758YxXjXvA0o5E55S/Rj3wD4i42i', 'Indra Satria', 'indra@smkn5kotajambi.sch.id', 'siswa', '20241001'), ('pimpinan', '$2y$10$e0MYzXyjpJS7Pd0RVvHwHe11.758YxXjXvA0o5E55S/Rj3wD4i42i', 'Kepala Sekolah SMKN 5', 'kepsek@smkn5kotajambi.sch.id', 'pimpinan', '197001011995031002'); """ with open(os.path.join(base_dir, "database.sql"), "w", encoding="utf-8") as f: f.write(sql_content) # 2. Config File db_config = """""" with open(os.path.join(base_dir, "config", "database.php"), "w", encoding="utf-8") as f: f.write(db_config) # 3. Header & Footer Includes header_inc = """
Learning Management System (LMS)