gocodebox/lifterlms

View on GitHub
includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php

Summary

Maintainability
B
4 hrs
Test Coverage
F
58%
<?php
/**
 * LLMS_Admin_Reporting_Tab_Students class file
 *
 * @package LifterLMS/Admin/Reporting/Tabs/Classes
 *
 * @since 3.2.0
 * @version 5.9.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * Students Tab on Reporting Screen
 *
 * @since 3.2.0
 */
class LLMS_Admin_Reporting_Tab_Students {

    /**
     * Constructor
     *
     * @since 3.2.0
     *
     * @return void
     */
    public function __construct() {

        add_action( 'llms_reporting_content_students', array( $this, 'output' ) );
        add_action( 'llms_reporting_student_tab_breadcrumbs', array( $this, 'breadcrumbs' ) );

    }

    /**
     * Add breadcrumb links to the tab depending on current view
     *
     * @since 3.2.0
     * @since 3.35.0 Sanitize input data.
     *
     * @return void
     */
    public function breadcrumbs() {

        $links = array();

        // Single student.
        if ( isset( $_GET['student_id'] ) ) {
            $student = new LLMS_Student( absint( $_GET['student_id'] ) );
            $links[ LLMS_Admin_Reporting::get_stab_url( 'information' ) ] = $student->get_name();

            if ( isset( $_GET['stab'] ) && 'courses' === $_GET['stab'] ) {
                $links[ LLMS_Admin_Reporting::get_stab_url( 'courses' ) ] = __( 'All Courses', 'lifterlms' );

                if ( isset( $_GET['course_id'] ) ) {

                    $course_id     = llms_filter_input( INPUT_GET, 'course_id', FILTER_SANITIZE_NUMBER_INT );
                    $student_id    = llms_filter_input( INPUT_GET, 'student_id', FILTER_SANITIZE_NUMBER_INT );
                    $url           = LLMS_Admin_Reporting::get_current_tab_url(
                        array(
                            'stab'       => 'courses',
                            'student_id' => $student_id,
                            'course_id'  => $course_id,
                        )
                    );
                    $links[ $url ] = get_the_title( $course_id );

                    if ( isset( $_GET['quiz_id'] ) ) {
                        $quiz_id       = llms_filter_input( INPUT_GET, 'quiz_id', FILTER_SANITIZE_NUMBER_INT );
                        $url           = LLMS_Admin_Reporting::get_current_tab_url(
                            array(
                                'stab'       => 'courses',
                                'student_id' => $student_id,
                                'course_id'  => $course_id,
                                'quiz_id'    => $quiz_id,
                            )
                        );
                        $links[ $url ] = get_the_title( $quiz_id );

                    }
                }
            }
        }

        foreach ( $links as $url => $title ) {

            echo '<a href="' . esc_url( $url ) . '">' . $title . '</a>';

        }

    }

    /**
     * Output HTML for the current view within the students tab
     *
     * @since 3.2.0
     * @since 4.20.0 Added a report permission check and a user existence check.
     * @since 5.9.0 Stop using deprecated `FILTER_SANITIZE_STRING`.
     *
     * @return void
     */
    public function output() {

        // Single student.
        if ( isset( $_GET['student_id'] ) ) {

            $student_id = llms_filter_input( INPUT_GET, 'student_id', FILTER_SANITIZE_NUMBER_INT );
            if ( ! llms_current_user_can( 'view_lifterlms_reports', $student_id ) ) {
                wp_die( __( "You do not have permission to access this student's reports", 'lifterlms' ) );
            }
            $student = llms_get_student( $student_id );
            if ( ! $student ) {
                wp_die( __( "This student doesn't exist.", 'lifterlms' ) );
            }

            $tabs = apply_filters(
                'llms_reporting_tab_student_tabs',
                array(
                    'information'  => __( 'Information', 'lifterlms' ),
                    'courses'      => __( 'Courses', 'lifterlms' ),
                    'memberships'  => __( 'Memberships', 'lifterlms' ),
                    'achievements' => __( 'Achievements', 'lifterlms' ),
                    'certificates' => __( 'Certificates', 'lifterlms' ),
                )
            );

            llms_get_template(
                'admin/reporting/tabs/students/student.php',
                array(
                    'current_tab' => isset( $_GET['stab'] ) ? esc_attr( llms_filter_input_sanitize_string( INPUT_GET, 'stab' ) ) : 'information',
                    'tabs'        => $tabs,
                    'student'     => $student,
                )
            );

        } else {

            llms_get_template( 'admin/reporting/tabs/students/students.php' );

        }

    }

}
return new LLMS_Admin_Reporting_Tab_Students();