'; Csv_Export::button( 'enrollments', __( 'Export all enrollments (CSV)', 'accessnow-lms' ) ); Csv_Export::button( 'quiz_attempts', __( 'Export all quiz attempts (CSV)', 'accessnow-lms' ) ); echo '
'; echo '| ' . esc_html__( 'Course', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Enrolled', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Completed', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Avg Progress', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Actions', 'accessnow-lms' ) . ' | '; echo '
|---|---|---|---|---|
| %s | ', esc_html( $course->post_title ) ); printf( '%s | ', esc_html( number_format_i18n( (int) $active ) ) ); printf( '%s | ', esc_html( number_format_i18n( (int) $completed ) ) ); printf( '%s%% | ', esc_html( (int) $avg_progress ) ); printf( '%s | ', esc_url( $detail_url ), esc_html__( 'View Details', 'accessnow-lms' ) ); echo '
' . esc_html__( 'Course not found.', 'accessnow-lms' ) . '
'; return; } $back_url = add_query_arg( 'page', 'slms-reports', admin_url( 'admin.php' ) ); printf( '', esc_url( $back_url ), esc_html__( 'Back to Overview', 'accessnow-lms' ) ); printf( ''; Csv_Export::button( 'enrollments', __( 'Export enrollments (CSV)', 'accessnow-lms' ), $course_id ); Csv_Export::button( 'quiz_attempts', __( 'Export quiz attempts (CSV)', 'accessnow-lms' ), $course_id ); echo '
'; $enrollments = Enrollment::get_course_enrollments( $course_id ); echo '| ' . esc_html__( 'Student', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Status', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Progress', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Enrolled', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Details', 'accessnow-lms' ) . ' | '; echo '
|---|---|---|---|---|
| %s | ', esc_html( $user ? $user->display_name : '#' . $e->user_id ) ); printf( '%s | ', esc_html( ucfirst( $e->status ) ) ); printf( '%s%% | ', esc_html( (int) $progress ) ); printf( '%s | ', esc_html( $e->enrolled_at ) ); printf( '%s | ', esc_url( $detail_url ), esc_html__( 'View', 'accessnow-lms' ) ); echo '
' . esc_html__( 'Course not found.', 'accessnow-lms' ) . '
'; return; } $enrollment_id = isset( $_GET['enrollment_id'] ) ? absint( $_GET['enrollment_id'] ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only report filter. if ( ! $enrollment_id ) { $enrollment = Enrollment::get_enrollment( $user_id, $course_id ); $enrollment_id = $enrollment ? $enrollment->id : 0; } $back_url = add_query_arg( array( 'page' => 'slms-reports', 'course_id' => $course_id, ), admin_url( 'admin.php' ) ); printf( '', esc_url( $back_url ), esc_html__( 'Back to Course', 'accessnow-lms' ) ); printf( '%s: %s%%
', esc_html__( 'Overall Progress', 'accessnow-lms' ), esc_html( (int) $progress ) ); // Show lesson completion status $lesson_ids = Progress::get_course_lesson_ids( $course_id ); echo '| ' . esc_html__( 'Lesson', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Status', 'accessnow-lms' ) . ' | '; echo '
|---|---|
| %s | ', esc_html( get_the_title( $lid ) ) ); printf( '%s | ', $complete ? esc_html__( 'Complete', 'accessnow-lms' ) : esc_html__( 'Incomplete', 'accessnow-lms' ) ); echo '
| ' . esc_html__( 'Quiz', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Attempt', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Score', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Status', 'accessnow-lms' ) . ' | '; echo '' . esc_html__( 'Date', 'accessnow-lms' ) . ' | '; echo '
|---|---|---|---|---|
| %s | ', esc_html( get_the_title( $a->quiz_id ) ) ); printf( '#%s | ', esc_html( (int) $a->attempt_number ) ); printf( '%s%% | ', esc_html( $a->score ) ); printf( '%s | ', esc_html( Quiz_Engine::attempt_status_label( $a ) ) ); printf( '%s | ', esc_html( $a->completed_at ) ); echo '