From 420d607cdd10344ce8e1f34087e277d59dd07f13 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 6 Apr 2026 05:37:02 +0000 Subject: [PATCH] Autosave: 20260406-053702 --- admin.php | 30 ++++- admin_assignments.php | 250 ++++++++++++++++++++++++++++++++++++++++ admin_classes.php | 8 +- admin_integrations.php | 256 +++++++++++++++++++++++++++++++++++++++++ admin_subjects.php | 8 +- admin_teachers.php | 8 +- admin_thawani.php | 64 +++++++++++ admin_wablas.php | 54 +++++++++ assets/css/custom.css | 13 +++ mail/config.php | 18 +++ 10 files changed, 692 insertions(+), 17 deletions(-) create mode 100644 admin_assignments.php create mode 100644 admin_integrations.php create mode 100644 admin_thawani.php create mode 100644 admin_wablas.php diff --git a/admin.php b/admin.php index 1cd5fcc..f2662c9 100644 --- a/admin.php +++ b/admin.php @@ -104,11 +104,6 @@ render_head( -
  • > @@ -134,6 +129,29 @@ render_head(
  • +
  • + > + + +
  • + + + + + + @@ -246,6 +264,8 @@ render_head( + +
    diff --git a/admin_assignments.php b/admin_assignments.php new file mode 100644 index 0000000..24caf92 --- /dev/null +++ b/admin_assignments.php @@ -0,0 +1,250 @@ +exec("CREATE TABLE IF NOT EXISTS teacher_assignments ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + teacher_id INT NOT NULL, + class_id INT NOT NULL, + subject_id INT NOT NULL DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY unique_assignment (teacher_id, class_id, subject_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"); + +$action = $_GET['action'] ?? 'list'; +$id = (int)($_GET['id'] ?? 0); + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $post_action = $_POST['action'] ?? $action; + $post_id = (int)($_POST['id'] ?? $id); + + if ($post_action === 'delete' && $post_id > 0) { + $stmt = db()->prepare("DELETE FROM teacher_assignments WHERE id = ?"); + $stmt->execute([$post_id]); + header('Location: ' . app_url('admin.php', ['page' => 'assignments'])); + exit; + } + + if ($post_action === 'add') { + $teacher_id = (int)($_POST['teacher_id'] ?? 0); + $class_id = (int)($_POST['class_id'] ?? 0); + $subject_id = (int)($_POST['subject_id'] ?? 0); + + if ($teacher_id > 0 && $class_id > 0) { + try { + $stmt = db()->prepare("INSERT INTO teacher_assignments (teacher_id, class_id, subject_id) VALUES (?, ?, ?)"); + $stmt->execute([$teacher_id, $class_id, $subject_id]); + } catch (PDOException $e) { + // Ignore duplicate key error + } + } + header('Location: ' . app_url('admin.php', ['page' => 'assignments'])); + exit; + } +} + +// Fetch all for dropdowns +$teachers = db()->query("SELECT id, name FROM teachers ORDER BY name")->fetchAll(PDO::FETCH_ASSOC); +$classes = db()->query("SELECT id, name_en, name_ar FROM classes ORDER BY name_en")->fetchAll(PDO::FETCH_ASSOC); +$subjects = db()->query("SELECT id, title_en, title_ar, class_id FROM subjects ORDER BY title_en")->fetchAll(PDO::FETCH_ASSOC); + +// Fetch assignments for table +$search = $_GET['search'] ?? ''; +$page_num = max(1, (int)($_GET['p'] ?? 1)); +$limit = 10; +$offset = ($page_num - 1) * $limit; + +$where = ""; +$params = []; +if ($search !== '') { + $where = "WHERE t.name LIKE ? OR c.name_en LIKE ? OR s.title_en LIKE ?"; + $params[] = "%$search%"; + $params[] = "%$search%"; + $params[] = "%$search%"; +} + +$count_sql = " + SELECT COUNT(*) + FROM teacher_assignments ta + JOIN teachers t ON ta.teacher_id = t.id + JOIN classes c ON ta.class_id = c.id + LEFT JOIN subjects s ON ta.subject_id = s.id + $where +"; +$total_stmt = db()->prepare($count_sql); +$total_stmt->execute($params); +$total = $total_stmt->fetchColumn(); +$pages = ceil($total / $limit); + +$sql = " + SELECT ta.id, t.name as teacher_name, c.name_en as class_name_en, c.name_ar as class_name_ar, s.title_en as subject_title_en, s.title_ar as subject_title_ar, ta.subject_id + FROM teacher_assignments ta + JOIN teachers t ON ta.teacher_id = t.id + JOIN classes c ON ta.class_id = c.id + LEFT JOIN subjects s ON ta.subject_id = s.id + $where + ORDER BY ta.id DESC + LIMIT $limit OFFSET $offset +"; +$stmt = db()->prepare($sql); +$stmt->execute($params); +$items = $stmt->fetchAll(PDO::FETCH_ASSOC); +?> +
    +
    +

    +
    + +
    + +
    +
    + + + + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + 0): ?> + + + + +
    +
    +
    + + + +
    +
    +
    +
    + + 1): ?> + + + + + + + \ No newline at end of file diff --git a/admin_classes.php b/admin_classes.php index e1c3cb0..94e9f00 100644 --- a/admin_classes.php +++ b/admin_classes.php @@ -112,9 +112,9 @@ $items = $stmt->fetchAll(PDO::FETCH_ASSOC);