[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: group_game.php
<?php require_once '../config/database.php'; // Check if this is a public game or requires login $is_public = isset($_GET['public']) && $_GET['public'] == '1'; $competition_id = $_GET['competition'] ?? null; if (!$competition_id) { header('Location: ../index.php'); exit; } // Get competition details $stmt = $pdo->prepare(" SELECT c.*, g.name as grade_name, s.name as subject_name, u.full_name as teacher_name FROM competitions c JOIN grades g ON c.grade_id = g.id JOIN subjects s ON c.subject_id = s.id JOIN users u ON c.teacher_id = u.id WHERE c.id = ? AND c.competition_type = 'group' "); $stmt->execute([$competition_id]); $competition = $stmt->fetch(); if (!$competition) { header('Location: ../index.php'); exit; } // Check if public game is allowed if ($is_public && !$competition['is_public']) { header('Location: ../index.php'); exit; } // Get game data $groups = []; $selected_class_id = $_GET['class'] ?? null; if ($is_public && isset($_SESSION['public_game'])) { $game_data = $_SESSION['public_game']['game_data']; $groups = $game_data['groups'] ?? []; } else { // Get students from database for registered games if (!isLoggedIn()) { header('Location: ../auth/login.php'); exit; } // If no class selected, show class selection if (!$selected_class_id) { // Get available classes for this teacher and grade $classes_stmt = $pdo->prepare(" SELECT cl.*, COUNT(sl.id) as student_count FROM class_lists cl LEFT JOIN student_lists sl ON cl.id = sl.class_id WHERE cl.teacher_id = ? AND cl.grade_id = ? GROUP BY cl.id ORDER BY cl.class_name "); $classes_stmt->execute([$competition['teacher_id'], $competition['grade_id']]); $available_classes = $classes_stmt->fetchAll(); if (empty($available_classes)) { echo "<script>alert('لا توجد قوائم فصول لهذا الصف'); window.location.href='../teacher/manage_students.php';</script>"; exit; } // Show class selection page include 'select_class.php'; exit; } // Get students from selected class $students_stmt = $pdo->prepare(" SELECT student_name FROM student_lists WHERE teacher_id = ? AND grade_id = ? AND class_id = ? ORDER BY student_name "); $students_stmt->execute([$competition['teacher_id'], $competition['grade_id'], $selected_class_id]); $students = $students_stmt->fetchAll(PDO::FETCH_COLUMN); if (empty($students)) { echo "<script>alert('لا توجد قائمة طلاب لهذا الفصل'); window.location.href='../index.php';</script>"; exit; } // Get class info for grouping method $class_stmt = $pdo->prepare("SELECT * FROM class_lists WHERE id = ?"); $class_stmt->execute([$selected_class_id]); $class_info = $class_stmt->fetch(); // Shuffle and divide students into groups $grouping_method = $_GET['grouping'] ?? 'random'; if ($grouping_method == 'gender' && $class_info['gender_type'] == 'mixed') { // Separate by gender (assuming names ending with 'ة' or 'ا' are girls) $boys = []; $girls = []; foreach ($students as $student) { if (preg_match('/[ةا]$/', $student)) { $girls[] = $student; } else { $boys[] = $student; } } shuffle($boys); shuffle($girls); $num_groups = $competition['num_groups']; $groups_per_gender = ceil($num_groups / 2); // Create boys groups if (!empty($boys)) { $boys_per_group = ceil(count($boys) / $groups_per_gender); for ($i = 0; $i < $groups_per_gender && $i * $boys_per_group < count($boys); $i++) { $group_students = array_slice($boys, $i * $boys_per_group, $boys_per_group); if (!empty($group_students)) { $groups[] = [ 'name' => 'مجموعة البنين ' . ($i + 1), 'students' => $group_students ]; } } } // Create girls groups if (!empty($girls)) { $girls_per_group = ceil(count($girls) / $groups_per_gender); for ($i = 0; $i < $groups_per_gender && $i * $girls_per_group < count($girls); $i++) { $group_students = array_slice($girls, $i * $girls_per_group, $girls_per_group); if (!empty($group_students)) { $groups[] = [ 'name' => 'مجموعة البنات ' . ($i + 1), 'students' => $group_students ]; } } } } else { // Random grouping shuffle($students); $num_groups = $competition['num_groups']; $students_per_group = ceil(count($students) / $num_groups); for ($i = 0; $i < $num_groups; $i++) { $group_students = array_slice($students, $i * $students_per_group, $students_per_group); if (!empty($group_students)) { $groups[] = [ 'name' => 'المجموعة ' . ($i + 1), 'students' => $group_students ]; } } } } // Get questions and special cards $questions_stmt = $pdo->prepare("SELECT * FROM group_questions WHERE competition_id = ? ORDER BY RAND()"); $questions_stmt->execute([$competition_id]); $all_cards = $questions_stmt->fetchAll(); if (empty($all_cards)) { echo "<script>alert('لا توجد أسئلة في هذه المسابقة'); window.location.href='../index.php';</script>"; exit; } ?> <!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?= sanitize($competition['title']) ?> - مسابقة المجموعات</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet"> <link href="../assets/css/style.css" rel="stylesheet"> </head> <body class="game-container"> <!-- Timer --> <div class="timer-container" id="timerContainer" style="display: none;"> <i class="fas fa-clock me-2"></i> <span id="timerDisplay">00:30</span> </div> <!-- Game Header --> <div class="container-fluid py-3"> <div class="row align-items-center"> <div class="col-md-8"> <h2 class="text-white mb-0"><?= sanitize($competition['title']) ?></h2> <small class="text-white-50"> <?= sanitize($competition['subject_name']) ?> - <?= sanitize($competition['grade_name']) ?> <?php if ($is_public): ?> <span class="badge bg-warning ms-2">مسابقة عامة</span> <?php endif; ?> </small> </div> <div class="col-md-4 text-end"> <button class="btn btn-outline-light" onclick="confirmEndGame()"> <i class="fas fa-stop me-1"></i> إنهاء المسابقة </button> </div> </div> </div> <div class="container-fluid"> <div class="row"> <!-- Groups Panel --> <div class="col-lg-3"> <div class="card mb-4"> <div class="card-header"> <h5 class="mb-0"> <i class="fas fa-users me-2"></i> المجموعات </h5> </div> <div class="card-body p-0"> <?php foreach ($groups as $index => $group): ?> <div class="group-card" id="group-<?= $index ?>" data-group-index="<?= $index ?>"> <div class="d-flex justify-content-between align-items-center mb-2"> <h6 class="mb-0"><?= sanitize($group['name']) ?></h6> <div class="btn-group"> <button class="btn btn-sm btn-outline-success" onclick="manageBehaviorPoints(<?= $index ?>, 'add')" title="إضافة نقاط سلوك"> <i class="fas fa-plus"></i> </button> <button class="btn btn-sm btn-outline-danger" onclick="manageBehaviorPoints(<?= $index ?>, 'subtract')" title="خصم نقاط سلوك"> <i class="fas fa-minus"></i> </button> <button class="btn btn-sm btn-outline-primary" type="button" data-bs-toggle="collapse" data-bs-target="#students-<?= $index ?>" title="عرض الطلاب"> <i class="fas fa-eye"></i> </button> </div> </div> <div class="score-display" id="score-<?= $index ?>">0</div> <div class="collapse" id="students-<?= $index ?>"> <div class="mt-2 pt-2 border-top"> <small class="text-muted">الطلاب:</small> <ul class="list-unstyled mb-0"> <?php foreach ($group['students'] as $student): ?> <li><small><?= sanitize($student) ?></small></li> <?php endforeach; ?> </ul> </div> </div> </div> <?php endforeach; ?> </div> </div> <!-- Current Turn --> <div class="card"> <div class="card-header"> <h6 class="mb-0"> <i class="fas fa-play me-2"></i> الدور الحالي </h6> </div> <div class="card-body text-center"> <div id="currentGroup" class="mb-2"> <strong>المجموعة الأولى</strong> </div> <div class="student-selection"> <div class="selected-student" id="selectedStudent"> اختر بطاقة لبدء اللعب </div> </div> </div> </div> </div> <!-- Game Board --> <div class="col-lg-9"> <!-- Current Turn Display --> <div class="card mb-3 border-warning"> <div class="card-body py-3"> <div class="row align-items-center"> <div class="col-md-6"> <h4 class="mb-0 text-warning"> <i class="fas fa-play-circle me-2"></i> الدور الحالي: <span id="currentGroupDisplay">المجموعة الأولى</span> </h4> </div> <div class="col-md-6"> <div class="student-selection-top"> <div class="selected-student-top" id="selectedStudentTop"> <i class="fas fa-user-graduate me-2"></i> اختر بطاقة لبدء اللعب </div> </div> </div> </div> </div> </div> <!-- Cards Grid --> <div class="card-grid" id="cardsGrid"> <?php for ($i = 1; $i <= count($all_cards); $i++): ?> <div class="game-card" data-card-number="<?= $i ?>" onclick="selectCard(<?= $i ?>)"> <?= $i ?> </div> <?php endfor; ?> </div> <!-- Question Display --> <div class="question-card" id="questionCard" style="display: none;"> <div id="questionContent"></div> </div> </div> </div> </div> <!-- Steal Modal --> <div class="modal fade" id="stealModal" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">بطاقة السرقة</h5> </div> <div class="modal-body"> <p>اختر المجموعة التي تريد سرقة النقاط منها:</p> <div id="stealOptions"></div> </div> </div> </div> </div> <!-- Points Management Modal --> <div class="modal fade" id="pointsModal" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="pointsModalTitle">إدارة النقاط</h5> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <div class="modal-body"> <div class="mb-3"> <label for="pointsAmount" class="form-label">عدد النقاط</label> <input type="number" class="form-control" id="pointsAmount" min="1" max="50" value="5"> </div> <div class="mb-3"> <label for="pointsReason" class="form-label">السبب (اختياري)</label> <input type="text" class="form-control" id="pointsReason" placeholder="مثال: مشاركة ممتازة"> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إلغاء</button> <button type="button" class="btn btn-primary" id="confirmPointsAction">تأكيد</button> </div> </div> </div> </div> <!-- Game Data --> <script> const gameData = { competition_id: <?= $competition_id ?>, question_time: <?= intval($competition['question_time']) ?: 30 ?>, is_public: <?= $is_public ? 'true' : 'false' ?>, groups: <?= json_encode($groups) ?>, cards: <?= json_encode($all_cards) ?>, current_group: 0, used_cards: [], scores: <?= json_encode(array_fill(0, count($groups), 0)) ?>, timer: null, cards_disabled: false, current_points_action: null, current_points_group: null }; console.log('Game data initialized with timer:', gameData.question_time, 'seconds'); console.log('Groups:', gameData.groups.length); console.log('Cards:', gameData.cards.length); </script> <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <script src="../assets/js/main.js"></script> <script src="../assets/js/group_game.js"></script> </body> </html>
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium320.web-hosting.com
Server IP: 66.29.153.54
PHP Version: 8.2.29
Server Software: LiteSpeed
System: Linux premium320.web-hosting.com 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 76.87 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
No
git:
Yes
User Info
Username: aoneqssk
User ID (UID): 1285
Group ID (GID): 1290
Script Owner UID: 1285
Current Dir Owner: 1285