gocodebox/lifterlms

View on GitHub
includes/class.llms.post.handler.php

Summary

Maintainability
B
4 hrs
Test Coverage
F
0%
<?php
/**
 * Post Handler Class
 *
 * Main Handler for post management in LifterLMS
 *
 * @package LifterLMS/Classes
 *
 * @since 1.0.0
 * @version 5.7.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * LLMS_Post_Handler
 *
 * @since 1.0.0
 * @since 4.4.3 Deprecated the `LLMS_Post_Handler::create_lesson()` method with no replacement.
 * @since 5.7.0 Deprecated the `LLMS_Post_Handler::create_section()` method with no replacement.
 */
class LLMS_Post_Handler {

    /**
     * Create Post
     *
     * @param  string $type [optional: a post type]
     * @param  string $title [optional: a title for the post]
     * @return int [id of section]
     */
    public static function create( $type = 'post', $title = '', $excerpt = '' ) {

        if ( empty( $title ) ) {
            $title = 'Section 1';
        }

        // Create section post.
        $post_data = apply_filters(
            'lifterlms_new_post',
            array(
                'post_type'    => $type,
                'post_title'   => $title,
                'post_status'  => 'publish',
                'post_author'  => get_current_user_id(),
                'post_excerpt' => $excerpt,
            )
        );

        $post_id = wp_insert_post( $post_data, true );

        // Check for error in update.
        if ( is_wp_error( $post_id ) ) {
            // For now just log the error and set $post_id to 0 (false).
            llms_log( $post_id->get_error_message() );
            $post_id = 0;
        }

        return $post_id;

    }

    public static function update_title( $post_id, $title ) {

        $post_data = array(
            'ID'         => $post_id,
            'post_title' => $title,
        );

        // Update the post into the database.
        $updated_post_id = wp_update_post( $post_data );

        if ( $updated_post_id ) {
            return array(
                'id'    => $updated_post_id,
                'title' => $title,
            );
        }

    }

    public static function update_excerpt( $post_id, $excerpt ) {

        $post_data = array(
            'ID'           => $post_id,
            'post_excerpt' => $excerpt,
        );

        // Update the post into the database.
        $updated_post_id = wp_update_post( $post_data );

        if ( $updated_post_id ) {
            return array(
                'id'           => $updated_post_id,
                'post_excerpt' => $excerpt,
            );
        }

    }

    /**
     * Creates a new Section
     *
     * @since Unknown Introduced.
     * @deprecated 5.7.0 There is not a replacement.
     *
     * @param  int    $course_id The parent course id.
     * @param  string $title     An optional title for the section.
     * @return int Post id of the section.
     */
    public static function create_section( $course_id, $title = '' ) {

        llms_deprecated_function( __METHOD__, '5.7.0' );

        // No course id? no new section!.
        if ( ! isset( $course_id ) ) {
            return;
        }

        // Set the section_order variable.
        // Get the count of sections in the course and add 1.
        $course        = new LLMS_Course( $course_id );
        $sections      = $course->get_sections( 'posts' );
        $section_order = count( $sections ) + 1;

        $title = isset( $title ) ? $title : 'New Section';

        $post_id = self::create( 'section', $title );

        // If post created set parent course and order to order determined above.
        if ( $post_id ) {
            update_post_meta( $post_id, '_llms_order', $section_order );

            $section               = new LLMS_Section( $post_id );
            $updated_parent_course = $section->set_parent_course( $course_id );
        }

        return $post_id;
    }

    /**
     * Create lesson
     *
     * @since Unknown
     * @deprecated 4.4.3
     *
     * @param int    $course_id  WP_Post ID of the course.
     * @param int    $section_id WP_Post ID of the lesson's parent section.
     * @param string $title   Optional lesson title.
     * @param string $excerpt Option excerpt.
     * @return int WP_Post ID of the created lesson.
     */
    public static function create_lesson( $course_id, $section_id, $title = '', $excerpt = '' ) {

        // No course id or section id? no new lesson!.
        if ( ! isset( $course_id ) || ! isset( $course_id ) ) {
            return;
        }

        // Set the lesson_order variable.
        // Get the count of lessons in the section.
        $section      = new LLMS_Section( $section_id );
        $lesson_order = $section->get_next_available_lesson_order();

        $title = isset( $title ) ? $title : 'New Lesson';

        $post_id = self::create( 'lesson', $title, $excerpt );

        // If post created set parent section, parent course and order determined above.
        if ( $post_id ) {
            update_post_meta( $post_id, '_llms_order', $lesson_order );

            $lesson                 = new LLMS_Lesson( $post_id );
            $updated_parent_section = $lesson->set_parent_section( $section_id );
            $updated_parent_course  = $lesson->set_parent_course( $course_id );

        }

        return $post_id;
    }

    public static function get_posts( $type = 'post' ) {

        $args      = array(
            'posts_per_page'   => 1000,
            'post_type'        => $type,
            'nopaging'         => true,
            'post_status'      => 'publish',
            'orderby'          => 'post_title',
            'order'            => 'ASC',
            'suppress_filters' => true,
        );
        $postslist = get_posts( $args );

        if ( ! empty( $postslist ) ) {

            foreach ( $postslist as $key => $value ) {
                $value->edit_url = get_edit_post_link( $value->ID, false );
            }
        }

        return $postslist;

    }

    public static function get_lesson_options_for_select_list() {

        $lessons = self::get_posts( 'lesson' );

        $options = array();

        if ( ! empty( $lessons ) ) {

            foreach ( $lessons as $key => $value ) {

                // Get parent course if assigned.
                $parent_course = get_post_meta( $value->ID, '_llms_parent_course', true );

                if ( $parent_course ) {
                    $title = $value->post_title . ' ( ' . get_the_title( $parent_course ) . ' )';
                } else {
                    $title = $value->post_title . ' ( ' . __( 'unassigned', 'lifterlms' ) . ' )';
                }

                $options[ $value->ID ] = $title;

            }
        }

        return $options;

    }

    public static function get_prerequisite( $post_id ) {
        $post_type = get_post_type( $post_id );

        if ( 'course' === $post_type ) {
            $course = new LLMS_Course( $post_id );
            return $course->get_prerequisite();

        } elseif ( 'lesson' === $post_type ) {
            $lesson = new LLMS_Lesson( $post_id );
            return $lesson->get_prerequisite();
        }
    }

}