Sindbad~EG File Manager
<?php
/**
* Class LP_Course_Item.
*
* @author ThimPress
* @package LearnPress/Classes
* @version 3.0.0
*/
use LearnPress\Models\CourseModel;
use LearnPress\Models\UserItems\UserCourseModel;
use LearnPress\Models\UserItems\UserItemModel;
use LearnPress\Models\UserModel;
defined( 'ABSPATH' ) || exit();
if ( ! class_exists( 'LP_Course_Item' ) ) {
/**
* Class LP_Course_Item.
*/
class LP_Course_Item extends LP_Abstract_Post_Data {
/**
* The icon maybe used somewhere.
*
* @var string
*/
protected $_icon_class = '';
/**
* The type of item.
*
* @var string
*/
protected $_item_type = '';
/**
* @var LP_Course
*/
protected $_course = null;
/**
* @var LP_Course_Section
*/
protected $_section = null;
/**
* @var null
*/
protected $_content = null;
/**
* @var bool
*/
protected $_preview = false;
/**
* LP_Course_Item constructor.
*
* @param $item mixed
* @param $args array
*/
public function __construct( $item, $args = null ) {
parent::__construct( $item, $args );
$this->add_support( 'comments', get_post_field( 'comment_status', $this->get_id() ) === 'open' );
}
/**
* Get type of item.
*
* @param string $context
*
* @return string
*/
public function get_item_type( $context = '' ) {
$post_type = $this->_item_type;
if ( $context === 'display' ) {
$post_type_object = get_post_type_object( $post_type );
if ( $post_type_object ) {
$post_type = $post_type_object->labels->singular_name;
}
}
return $post_type;
}
/**
* @return string
*/
public function get_icon_class() {
return $this->_icon_class;
}
/**
* Check lesson is preview
*
* @param string $context
*
* @return bool
*/
public function is_preview( $context = 'display' ): bool {
$item_id = $this->get_id();
$this->_preview = false;
if ( $item_id && LP_LESSON_CPT === $this->get_post_type() ) {
$is_lesson_preview = get_post_meta( $item_id, '_lp_preview', true );
$this->_preview = 'yes' === $is_lesson_preview;
}
return apply_filters( 'learnpress/course/item-preview', $this->_preview, $this->get_id() );
}
/**
* @param string $context
*
* @return string
*/
public function get_title( $context = '' ) {
return apply_filters( 'learn-press/course-item-title', parent::get_title( $context ), $this->get_id() );
}
/**
* Get format of Post
*
* @return bool|false|mixed|string
*/
public function get_format() {
$format = get_post_meta( $this->get_id(), 'post_format', true );
if ( ! $format ) {
$format = 'standard';
}
return $format;
}
/**
* Return true if item can be shown in course curriculum.
*
* @return mixed
* @deprecated 4.0.0
*/
public function is_visible() {
$show = true;
return apply_filters( 'learn-press/course-item-visible', $show, $this->get_item_type(), $this->get_id() );
}
/**
* Get class of item.
*
* @param $course_id
* @param $item_id
* @param $can_view_item
* @param $more
*
* @return array|mixed|null
* @since 4.1.4.2
* @version 1.0.1
*/
public function get_class_v2( $course_id, $item_id, $can_view_item, $more = array() ) {
$course = CourseModel::find( $course_id, true );
if ( ! $course ) {
return $more;
}
$defaults = array_merge(
array(
'course-item',
'course-item-' . $this->get_item_type(),
'course-item-' . $item_id,
),
(array) $more
);
$user_id = get_current_user_id();
$user = UserModel::find( $user_id, true );
$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );
$enrolled = $user && $userCourseModel && $userCourseModel->has_enrolled_or_finished();
$no_required_enroll = $course->has_no_enroll_requirement();
$post_format = $this->get_format();
if ( 'standard' !== $post_format && $post_format ) {
$defaults[] = 'course-item-type-' . $post_format;
}
if ( $no_required_enroll ) {
$defaults[] = 'item-free';
}
if ( ! $enrolled ) {
$defaults['item-locked'] = 'item-locked';
if ( $this->is_preview() ) {
$defaults['item-preview'] = 'item-preview';
$defaults['has-status'] = 'has-status';
unset( $defaults['item-locked'] );
}
} elseif ( ! $can_view_item->flag ) {
$defaults[] = 'item-locked';
} else {
$userItemModel = UserItemModel::find_user_item(
$user_id,
$item_id,
get_post_type( $item_id ),
$course_id,
LP_COURSE_CPT,
true
);
$item_status = $userItemModel ? $userItemModel->get_status() : '';
$item_grade = $userItemModel ? $userItemModel->get_graduation() : '';
if ( $item_status ) {
$defaults[] = 'has-status';
$defaults[] = 'status-' . $item_status;
}
switch ( $item_status ) {
case 'started':
break;
case 'completed':
$defaults[] = $item_grade;
break;
default:
if ( $this->is_preview() ) {
$defaults['item-preview'] = 'item-preview';
$defaults['has-status'] = 'has-status';
}
$item_class = apply_filters(
'learn-press/course-item-status-class',
$item_status,
$item_grade,
$this->get_item_type(),
$item_id,
$course_id
);
if ( $item_class ) {
$defaults[] = $item_class;
}
}
}
$classes = apply_filters(
'learn-press/course-item-class',
$defaults,
$this->get_item_type(),
$item_id,
$course_id
);
// Filter unwanted values.
$classes = is_array( $classes ) ? $classes : explode( ' ', $classes );
$classes = array_filter( $classes );
$classes = array_unique( $classes );
return $classes;
}
public function get_status_title() {
$course_id = get_the_ID();
$status_message = '';
$user = learn_press_get_current_user();
if ( $user->get_item_status( $this->get_id(), $course_id ) === 'completed' ) {
$item_grade = $user->get_item_grade( $this->get_id(), $course_id );
if ( $item_grade === 'failed' ) {
$status_message = _x( 'Failed', 'course item status title', 'learnpress' );
} elseif ( $item_grade === 'passed' ) {
$status_message = _x( 'Passed', 'course item status title', 'learnpress' );
} else {
$status_message = _x( 'Completed', 'course item status title', 'learnpress' );
}
} else {
$status_message = _x( 'Unread', 'course item status title', 'learnpress' );
}
return apply_filters(
'learn-press/course-item-status-title',
$status_message,
$this->get_id(),
$course_id
);
}
/**
* Get permalink of item inside course.
*
* @return string
*/
public function get_permalink() {
$link = false;
if ( $this->_course ) {
$link = $this->_course->get_item_link( $this->get_id() );
}
return apply_filters( 'learn-press/course-item-link', $link, $this );
}
/**
* Set course parent of this item.
*
* @param LP_Course|LP_Abstract_Course|int $course
*/
public function set_course( $course ) {
if ( is_numeric( $course ) ) {
$this->_course = learn_press_get_course( $course );
} else {
$this->_course = $course;
}
}
/**
* Return course.
*
* @return LP_Course
*/
public function get_course() {
return $this->_course;
}
public function get_course_id() {
$course = $this->get_course();
if ( $course ) {
return $course->get_id();
}
return false;
}
/**
* @param LP_Course_Section $section
*/
public function set_section( $section ) {
$this->_section = $section;
}
/**
* @return LP_Course_Section
*/
public function get_section() {
return $this->_section;
}
/**
* Get instance of an item from post
*
* @param int $item_id Item id.
* @param int $course_id .
*
* @return LP_Course_Item|false
* @Todo: tungnx - review - rewrite - set cache - check where call this function
* @editor tungnx
* @modify 4.1.3 - change cache
* @version 4.0.2
* @since 3.x.x
*/
public static function get_item( $item_id = 0, $course_id = 0 ) {
/*
$lp_course_cache = LP_Course_Cache::instance();
$key_cache = sprintf( '%d/item_id/%d', $course_id, $item_id );
$item = $lp_course_cache->get_cache( $key_cache );*/
$item = false;
if ( false === $item ) {
$item_post = get_post( $item_id );
if ( ! $item_post ) {
return false;
}
$item_type = $item_post->post_type;
if ( learn_press_is_support_course_item_type( $item_type ) ) {
$type = str_replace( 'lp_', '', $item_type );
switch ( $type ) {
case 'lesson':
$item = LP_Lesson::get_lesson( $item_id );
break;
case 'quiz':
$item = LP_Quiz::get_quiz( $item_id );
break;
default:
$class_name = apply_filters(
'learn-press/course-item-object-class',
array(),
$type,
$item_type,
$item_id
);
if ( ! empty( $class_name ) && isset( $class_name[ $type ] ) ) {
$class = $class_name[ $type ];
if ( is_string( $class ) && class_exists( $class ) ) {
$item = new $class( $item_id );
} elseif ( $class instanceof LP_Course_Item ) {
$item = $class;
}
}
break;
}
// Todo: don't know why when set course here, theme ivy still null course
/*if ( $item instanceof LP_Course_Item ) {
$item->set_course( $course_id );
}*/
// $lp_course_cache->set_cache( $key_cache, $item );
}
}
return $item;
}
/**
* Get template name of item.
*
* @return string
*/
public function get_template() {
$item_type = $this->get_item_type();
return apply_filters(
'learn-press/section-item-template',
'item-' . str_replace( 'lp_', '', $item_type ),
$item_type
);
}
/**
* To array.
*
* @return array
* @since 3.0.0
*/
public function to_array() {
$post = get_post( $this->get_id() );
return apply_filters(
'learn-press/item/to_array',
array(
'id' => $this->get_id(),
'type' => $this->get_item_type(),
'title' => $post->post_title,
'preview' => $this->is_preview(),
)
);
}
/**
* Create nonce for checking actions on an item.
*
* @param string $action
* @param int $course_id
* @param int $user_id
*
* @return string
*/
public function create_nonce( $action = '', $course_id = 0, $user_id = 0 ) {
if ( ! $course_id && $this->get_course() ) {
$course_id = $this->get_course()->get_id();
}
if ( ! $user_id ) {
$user_id = get_current_user_id();
}
$action = $this->get_nonce_action( $action, $course_id, $user_id );
return wp_create_nonce( $action );
}
/**
* Verify nonce for an action on item.
*
* @param string $nonce
* @param string $action
* @param int $course_id
* @param int $user_id
*
* @return false|int
*/
public function verify_nonce( $nonce, $action = '', $course_id = 0, $user_id = 0 ) {
if ( ! $course_id ) {
$course_id = $this->get_course()->get_id();
}
if ( ! $user_id ) {
$user_id = get_current_user_id();
}
$action = $this->get_nonce_action( $action, $course_id, $user_id );
return wp_verify_nonce( $nonce, $action );
}
/**
* @param $action
* @param $course_id
* @param $user_id
*
* @return string
*/
public function get_nonce_action( $action, $course_id, $user_id ) {
return sprintf( '%s-item-%d-%d-%d', $action, $user_id, $course_id, $this->get_id() );
}
/**
* @param int $question_id
*
* @return mixed
* @deprecated 4.1.7.2
*/
/*public function is_viewing_question( $question_id = 0 ) {
global $lp_quiz_question;
if ( $question_id ) {
$viewing = $lp_quiz_question && $lp_quiz_question->get_id() == $question_id;
} else {
$viewing = $lp_quiz_question ? $lp_quiz_question->get_id() : false;
}
return apply_filters( 'learn-press/quiz/is-viewing-question', $viewing, $question_id, $this->get_id() );
}*/
/**
* @param int $user_id
* @param int $course_id
*
* @return mixed
* @deprecated 4.1.7.2
*/
/*public function get_status_classes( $user_id = 0, $course_id = 0 ) {
$status_classes = array();
$course = learn_press_get_course( $course_id );
$user = learn_press_get_user( $user_id, ! $user_id );
if ( $course ) {
if ( $this->is_preview() ) {
$status_classes[] = 'item-preview';
} elseif ( $course->is_free() && $course->is_no_required_enroll() ) {
$status_classes[] = 'item-free';
}
}
if ( $user ) {
$item_status = $user->get_item_status( $this->get_id(), $course_id );
$item_grade = $user->get_item_grade( $this->get_id(), $course_id );
if ( $item_status ) {
$status_classes[] = 'course-item-status';
$status_classes[] = 'item-' . $item_status;
}
switch ( $item_status ) {
case 'started':
break;
case 'completed':
$status_classes[] = $item_grade;
}
}
return apply_filters(
'learn-press/item-status-classes',
$status_classes,
$this->get_id(),
$course_id,
$user_id
);
}*/
/**
* Get duration of quiz
*
* @return LP_Duration
*/
public function get_duration() {
$duration = $this->get_data( 'duration' );
if ( false === $duration || '' === $duration ) {
$duration = get_post_meta( $this->get_id(), '_lp_duration', true );
if ( $duration ) {
$duration = new LP_Duration( $duration );
} else {
$duration = new LP_Duration( 0 );
}
$this->_set_data( 'duration', $duration );
}
return apply_filters( 'learn-press/course-item-duration', $duration, $this->get_id() );
}
public function offsetExists( $offset ) {
}
public function offsetGet( $offset ) {
}
public function offsetSet( $offset, $value ) {
}
public function offsetUnset( $offset ) {
}
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists