Making WordPress.org


Ignore:
Timestamp:
12/02/2022 01:31:25 AM (4 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.