Making WordPress.org


Ignore:
Timestamp:
12/02/2022 01:31:25 AM (3 years ago)
Author:
adamwood
Message:

Learn: Sync with git WordPress/learn@718f4f6

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-learn/inc/blocks.php

    r12276 r12289  
    55use Error;
    66use Sensei_Lesson;
     7use Sensei_Utils;
     8use Sensei_Reports_Overview_Service_Courses;
    79use function WordPressdotorg\Locales\get_locale_name_from_code;
    810use function WPOrg_Learn\{get_build_path, get_build_url, get_views_path};
     
    2729    register_lesson_plan_actions();
    2830    register_lesson_plan_details();
     31    register_course_data();
    2932    register_workshop_details();
    3033    register_workshop_application_form();
     
    139142    ob_start();
    140143    require get_views_path() . 'block-lesson-plan-details.php';
     144
     145    return ob_get_clean();
     146}
     147
     148/**
     149 * Register Course Data block type and related assets.
     150 *
     151 * @throws Error If the build files are not found.
     152 */
     153function register_course_data() {
     154    $script_asset_path = get_build_path() . 'course-data.asset.php';
     155    if ( ! is_readable( $script_asset_path ) ) {
     156        throw new Error(
     157            'You need to run `npm start` or `npm run build` for the "wporg-learn/course-data" block first.'
     158        );
     159    }
     160
     161    $script_asset = require $script_asset_path;
     162    wp_register_script(
     163        'course-data-editor-script',
     164        get_build_url() . 'course-data.js',
     165        $script_asset['dependencies'],
     166        $script_asset['version'],
     167        true,
     168    );
     169
     170    wp_register_style(
     171        'course-data-style',
     172        get_build_url() . 'style-course-data.css',
     173        array(),
     174        filemtime( get_build_path() . 'style-course-data.css' )
     175    );
     176
     177    register_block_type( 'wporg-learn/course-data', array(
     178        'editor_script'   => 'course-data-editor-script',
     179        'style'           => 'course-data-style',
     180        'render_callback' => __NAMESPACE__ . '\course_data_render_callback',
     181    ) );
     182}
     183
     184/**
     185 * Render the block content (html) on the frontend of the site.
     186 *
     187 * @param array  $attributes
     188 * @param string $content
     189 * @return string HTML output used by the block
     190 */
     191function course_data_render_callback( $attributes, $content ) {
     192    if ( get_post_type() !== 'course' ) {
     193        return;
     194    }
     195
     196    $course_service = new Sensei_Reports_Overview_Service_Courses();
     197    $post           = get_post();
     198    $course_id      = $post->ID;
     199
     200    // Get the total number of learners enrolled in the course
     201    $learners = Sensei_Utils::sensei_check_for_activity(
     202        array(
     203            'type'     => 'sensei_course_status',
     204            'status'   => 'in-progress',
     205            'post__in' => $course_id,
     206        )
     207    );
     208
     209    // Get the average grade scross all learners
     210    $average_grade = $course_service->get_courses_average_grade( array( $course_id ) );
     211
     212    // Get the average number of days it takes to complete a course
     213    $average_days = $course_service->get_average_days_to_completion( array( $course_id ) );
     214
     215    // Set up array of data to be used
     216    $data = array(
     217        'learners' => array(
     218            'label' => __( 'Number of learners', 'wporg-learn' ),
     219            'value' => $learners,
     220        ),
     221        'grade' => array(
     222            'label' => __( 'Average grade', 'wporg-learn' ),
     223            'value' => $average_grade,
     224        ),
     225        'days' => array(
     226            'label' => __( 'Average days to complete', 'wporg-learn' ),
     227            'value' => $average_days,
     228        ),
     229    );
     230
     231    ob_start();
     232    require get_views_path() . 'block-course-data.php';
    141233
    142234    return ob_get_clean();
Note: See TracChangeset for help on using the changeset viewer.