AnonSec Team
Server IP : 72.167.149.90  /  Your IP : 216.73.216.228
Web Server : Apache
System : Linux server.zoomride.app 4.18.0-553.158.1.el8_10.x86_64 #1 SMP Wed Aug 26 03:18:33 EDT 2026 x86_64
User : zoomride2022 ( 1001)
PHP Version : 8.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0700) :  /home/zoomride2022/.trash/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/zoomride2022/.trash/scorm_admin_ui_csv_export.zip
PKhyZ8O��admin-ui.php<?php
add_action('admin_menu', 'mst_lms_register_scorm_progress_menu');

function mst_lms_register_scorm_progress_menu() {
    add_menu_page(
        'SCORM Progress',
        'SCORM Progress',
        'manage_options',
        'scorm-progress',
        'mst_lms_render_scorm_progress_page',
        'dashicons-welcome-learn-more',
        30
    );
}

function mst_lms_render_scorm_progress_page() {
    if (isset($_GET['download_csv']) && $_GET['download_csv'] == 1) {
        mst_lms_download_scorm_csv();
        exit;
    }

    global $wpdb;

    $scorm_table = $wpdb->prefix . 'stm_lms_user_course_scorm';
    $user_courses_table = $wpdb->prefix . 'stm_lms_user_courses';
    $users_table = $wpdb->prefix . 'users';
    $posts_table = $wpdb->prefix . 'posts';

    $results = $wpdb->get_results("
        SELECT 
            uc.user_course_id,
            uc.user_id,
            uc.course_id,
            uc.progress_percent,
            uc.end_time,
            u.display_name,
            u.user_email,
            p.post_title,
            MAX(CASE WHEN sc.parameter = 'cmi.completion_status' THEN sc.value END) AS completion_status,
            MAX(CASE WHEN sc.parameter = 'cmi.success_status' THEN sc.value END) AS success_status
        FROM {$user_courses_table} uc
        LEFT JOIN {$users_table} u ON uc.user_id = u.ID
        LEFT JOIN {$posts_table} p ON uc.course_id = p.ID
        LEFT JOIN {$scorm_table} sc ON uc.user_course_id = sc.user_course_id
        GROUP BY uc.user_course_id
        HAVING completion_status IS NOT NULL OR success_status IS NOT NULL
    ");

    $export_url = esc_url(admin_url('admin.php?page=scorm-progress&download_csv=1'));

    echo '<div class="wrap"><h1>SCORM Course Progress</h1>';
    echo "<p><a href='{$export_url}' class='button button-primary'>Download as CSV</a></p>";
    echo '<table class="widefat fixed">';
    echo '<thead><tr><th>Student</th><th>Email</th><th>Course</th><th>Status</th><th>Progress %</th><th>Completed On</th><th>Certificate</th></tr></thead><tbody>';

    if ($results) {
        foreach ($results as $row) {
            $status = ucfirst($row->completion_status ?: 'incomplete');
            $percent = intval($row->progress_percent);
            $completed_date = ($row->end_time && $row->end_time > 0) ? date('Y-m-d', $row->end_time) : '-';
            $cert_link = ($row->success_status === 'passed')
                ? home_url("/certificate-page/?user={$row->user_id}&course={$row->course_id}")
                : '';

            echo "<tr>
                <td>{$row->display_name}</td>
                <td>{$row->user_email}</td>
                <td>{$row->post_title}</td>
                <td>{$status}</td>
                <td>{$percent}%</td>
                <td>{$completed_date}</td>
                <td>" . ($cert_link ? "<a href='{$cert_link}' target='_blank'>View Certificate</a>" : '-') . "</td>
            </tr>";
        }
    } else {
        echo '<tr><td colspan="7">No SCORM progress data found.</td></tr>';
    }

    echo '</tbody></table></div>';
}

function mst_lms_download_scorm_csv() {
    global $wpdb;

    $scorm_table = $wpdb->prefix . 'stm_lms_user_course_scorm';
    $user_courses_table = $wpdb->prefix . 'stm_lms_user_courses';
    $users_table = $wpdb->prefix . 'users';
    $posts_table = $wpdb->prefix . 'posts';

    $results = $wpdb->get_results("
        SELECT 
            uc.user_course_id,
            uc.user_id,
            uc.course_id,
            uc.progress_percent,
            uc.end_time,
            u.display_name,
            u.user_email,
            p.post_title,
            MAX(CASE WHEN sc.parameter = 'cmi.completion_status' THEN sc.value END) AS completion_status,
            MAX(CASE WHEN sc.parameter = 'cmi.success_status' THEN sc.value END) AS success_status
        FROM {$user_courses_table} uc
        LEFT JOIN {$users_table} u ON uc.user_id = u.ID
        LEFT JOIN {$posts_table} p ON uc.course_id = p.ID
        LEFT JOIN {$scorm_table} sc ON uc.user_course_id = sc.user_course_id
        GROUP BY uc.user_course_id
        HAVING completion_status IS NOT NULL OR success_status IS NOT NULL
    ");

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment;filename="scorm_progress.csv"');

    $output = fopen('php://output', 'w');
    fputcsv($output, ['Student', 'Email', 'Course', 'Status', 'Progress %', 'Completed On', 'Certificate Link']);

    foreach ($results as $row) {
        $cert_link = ($row->success_status === 'passed')
            ? home_url("/certificate-page/?user={$row->user_id}&course={$row->course_id}")
            : '';
        $completed_date = ($row->end_time && $row->end_time > 0) ? date('Y-m-d', $row->end_time) : '-';

        fputcsv($output, [
            $row->display_name,
            $row->user_email,
            $row->post_title,
            ucfirst($row->completion_status ?: 'incomplete'),
            intval($row->progress_percent) . '%',
            $completed_date,
            $cert_link
        ]);
    }

    fclose($output);
    exit;
}PKhyZ8O����admin-ui.phpPK:�

AnonSec - 2021