gocodebox/lifterlms

View on GitHub
includes/functions/llms.functions.templates.achievements.php

Summary

Maintainability
A
1 hr
Test Coverage
D
65%
<?php
/**
 * Achievements & Related template functions
 *
 * @package LifterLMS/Functions
 *
 * @since 3.14.0
 * @version 7.2.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * Get the content of a single achievement
 *
 * @since 3.14.0
 *
 * @param LLMS_User_Achievement $achievement Instance of an LLMS_User_Achievement.
 * @return void
 */
function llms_get_achievement( $achievement ) {

    ob_start();

    llms_get_template(
        'achievements/template.php',
        array(
            'achievement' => $achievement,
        )
    );

    return ob_get_clean();

}

/**
 * Output the content of a single achievement
 *
 * @since 3.14.0
 *
 * @param LLMS_Achievement $achievement Instance of an LLMS_User_Achievement.
 * @return void
 */
function llms_the_achievement( $achievement ) {
    echo llms_get_achievement( $achievement );
}

/**
 * Retrieve the number of columns used in achievement loops
 *
 * @since 3.14.0
 *
 * @return int
 */
function llms_get_achievement_loop_columns() {
    return apply_filters( 'llms_achievement_loop_columns', 4 );
}


/**
 * Get template for achievements loop.
 *
 * @since 3.14.0
 * @since 3.14.1 Unknown.
 * @since 6.0.0 Updated to use the new signature of the {@see LLMS_Student::get_achievements()}.
 * @since 7.2.0 Made sure to always enqueue needed assets.
 *
 * @param LLMS_Student $student Optional. LLMS_Student (uses current if none supplied). Default is `null`.
 *                              The current student will be used if none supplied.
 * @param bool|int     $limit   Optional. Number of achievements to show or `false` to display all.
 * @param int          $columns Optional. Number of achievements columns. Default is `null`.
 *                              The default achievement loop columns will be used if none supplied. See `llms_get_achievement_loop_columns()`.
 * @return void
 */
if ( ! function_exists( 'lifterlms_template_achievements_loop' ) ) {
    function lifterlms_template_achievements_loop( $student = null, $limit = false, $columns = null ) {

        // Get the current student if none supplied.
        if ( ! $student ) {
            $student = llms_get_student();
        }

        // Don't proceed without a student.
        if ( ! $student ) {
            return;
        }

        llms()->assets->enqueue_style( 'llms-iziModal' );
        llms()->assets->enqueue_script( 'llms-iziModal' );

        $cols     = $columns ? $columns : llms_get_achievement_loop_columns();
        $per_page = $cols * 5;

        // Get achievements.
        $query        = $student->get_achievements(
            array(
                'page'     => max( 1, get_query_var( 'paged' ) ),
                'per_page' => $limit ? min( $limit, $per_page ) : $per_page,
            )
        );
        $achievements = $query->get_awards();

        /**
         * If no columns are specified and we have a specified limit
         * and results and the limit is less than the number of columns
         * force the columns to equal the limit.
         */
        if ( ! $columns && $limit && $limit < $cols && $query->get_number_results() ) {
            $cols = $limit;
        }

        $pagination = 'dashboard' === LLMS_Student_Dashboard::get_current_tab( 'slug' ) ? false : array(
            'total'   => $query->get_max_pages(),
            'context' => 'student_dashboard',
        );

        llms_get_template(
            'achievements/loop.php',
            compact( 'cols', 'achievements', 'pagination' )
        );

    }
}