Your IP : 216.73.216.196


Current Path : /home/icmq6107/public_html/wp-content/plugins/sfwd-lms/includes/admin/
Upload File :
Current File : /home/icmq6107/public_html/wp-content/plugins/sfwd-lms/includes/admin/ld-course-builder-helpers.php

<?php
/**
 * Course Builder Helpers.
 *
 * Used to provide proper data to Course Builder app.
 *
 * @package LearnDash
 */

namespace LearnDash\Admin\CourseBuilderHelpers;

/**
 * Provide Course Data to Builder.
 *
 * @param Object $data The data passed down to front-end.
 * @return Object
 */
function get_course_data( $data ) {

	$course_id = isset( $_GET['course_id'] ) ? absint( $_GET['course_id'] ) : get_the_ID();
	$screen    = get_current_screen();

	// Skip course data if not required.
	if ( ! is_admin() ||
		( 'post' !== $screen->base && 'sfwd-courses_page_courses-builder' !== $screen->id ) ||
		( 'sfwd-courses' !== get_post_type( $course_id ) &&
		'sfwd-courses_page_courses-builder' !== $screen->id ) ) {
		return $data;
	}

	// Get a list of lessons to loop.
	$lessons        = learndash_get_course_lessons_list( $course_id, null, array( 'num' => 0 ) );
	$output_lessons = [];
	$lesson_topics  = [];

	if ( ( is_array( $lessons ) )  && ( ! empty( $lessons ) ) ) {
		// Loop course's lessons.
		foreach ( $lessons as $lesson ) {
			$post          = $lesson['post'];
			// Get lesson's topics.
			$topics        = learndash_topic_dots( $post->ID, false, 'array', null, $course_id );
			$output_topics = [];

			if ( ( is_array( $topics ) )  && ( ! empty( $topics ) ) ) {
				// Loop Topics.
				foreach ( $topics as $topic ) {
					// Get topic's quizzes.
					$topic_quizzes        = learndash_get_lesson_quiz_list( $topic->ID, null, $course_id );
					$output_topic_quizzes = [];

					if ( ( is_array( $topic_quizzes ) )  && ( ! empty( $topic_quizzes ) ) ) {
						// Loop Topic's Quizzes.
						foreach ( $topic_quizzes as $quiz ) {
							$quiz_post = $quiz['post'];

							$output_topic_quizzes[] = [
								'ID'         => $quiz_post->ID,
								'expanded'   => true,
								'post_title' => $quiz_post->post_title,
								'type'       => $quiz_post->post_type,
								'url'        => learndash_get_step_permalink( $quiz_post->ID, $course_id ),
								'edit_link'  => get_edit_post_link( $quiz_post->ID, '' ),
								'tree'       => [],
							];
						}
					}

					$output_topics[] = [
						'ID'         => $topic->ID,
						'expanded'   => true,
						'post_title' => $topic->post_title,
						'type'       => $topic->post_type,
						'url'        => learndash_get_step_permalink( $topic->ID, $course_id ),
						'edit_link'  => get_edit_post_link( $topic->ID, '' ),
						'tree'       => $output_topic_quizzes,
					];
				}
			}

			// Get lesson's quizzes.
			$quizzes        = learndash_get_lesson_quiz_list( $post->ID, null, $course_id );
			$output_quizzes = [];
			
			if ( ( is_array( $quizzes ) )  && ( ! empty( $quizzes ) ) ) {
				// Loop lesson's quizzes.
				foreach ( $quizzes as $quiz ) {
					$quiz_post = $quiz['post'];

					$output_quizzes[] = [
						'ID'         => $quiz_post->ID,
						'expanded'   => true,
						'post_title' => $quiz_post->post_title,
						'type'       => $quiz_post->post_type,
						'url'        => learndash_get_step_permalink( $quiz_post->ID, $course_id ),
						'edit_link'  => get_edit_post_link( $quiz_post->ID, '' ),
						'tree'       => [],
					];
				}
			}

			// Output lesson with child tree.
			$output_lessons[] = [
				'ID'         => $post->ID,
				'expanded'   => false,
				'post_title' => $post->post_title,
				'type'       => $post->post_type,
				'url'        => $lesson['permalink'],
				'edit_link'  => get_edit_post_link( $post->ID, '' ),
				'tree'       => array_merge( $output_topics, $output_quizzes ),
			];
		}
	}

	// Get a list of quizzes to loop.
	$quizzes        = learndash_get_course_quiz_list( $course_id );
	$output_quizzes = [];
	
	if ( ( is_array( $quizzes ) )  && ( ! empty( $quizzes ) ) ) {
		// Loop course's quizzes.
		foreach ( $quizzes as $quiz ) {
			$post = $quiz['post'];

			$output_quizzes[] = [
				'ID'         => $post->ID,
				'expanded'   => true,
				'post_title' => $post->post_title,
				'type'       => $post->post_type,
				'url'        => learndash_get_step_permalink( $post->ID, $course_id ),
				'edit_link'  => get_edit_post_link( $post->ID, '' ),
				'tree'       => [],
			];
		}
	}

	// Merge sections at Outline.
	$sections_raw = get_post_meta( $course_id, 'course_sections', true );
	$sections     = ! empty( $sections_raw ) ? json_decode( $sections_raw ) : [];

	foreach ( $sections as $section ) {
		array_splice( $output_lessons, (int) $section->order, 0, [ $section ] );
	}

	// Output data.
	$data['outline'] = [
		'lessons' => $output_lessons,
		'quizzes' => $output_quizzes,
		'sections' => $sections,
	];

	return $data;
}
add_filter( 'learndash_header_data', 'LearnDash\Admin\CourseBuilderHelpers\get_course_data', 100 );

/**
 * Checks if course builder should be enqueued.
 *
 * @return bool
 */
function should_enqueue_assets() {
	$screen        = get_current_screen();
	$course_id     = isset( $_GET['course_id'] ) ? absint( $_GET['course_id'] ) : get_the_ID();

	// Enqueue course builder assets only when required.
	if ( ( 'post' === $screen->base && 'sfwd-courses' === get_post_type( $course_id ) ) ||
		'sfwd-courses_page_courses-builder' === $screen->id ) {
		return true;
	}

	return false;
}