LLMS_Section
LLMS_Section model class
Source Source
File: includes/models/model.llms.section.php
class LLMS_Section extends LLMS_Post_Model {
/**
* Post model properties.
*
* @var array
*/
protected $properties = array(
'order' => 'absint',
'parent_course' => 'absint',
);
/**
* Database post type name.
*
* @var string
*/
protected $db_post_type = 'section';
/**
* Model post type name.
*
* @var string
*/
protected $model_post_type = 'section';
/**
* Retrieve the total number of elements in the section
*
* @since 3.16.0
*
* @return int
*/
public function count_elements() {
return count( $this->get_lessons( 'ids' ) );
}
/**
* Retrieve an instance of LLMS_Course for the sections's parent course
*
* @since 3.6.0
*
* @return LLMS_Course|null|false Course object, `null` if `get_post()` fails, or `false` if LLMS_Course class isn't found.
*/
public function get_course() {
return llms_get_post( $this->get( 'parent_course' ) );
}
/**
* An array of default arguments to pass to $this->create() when creating a new section
*
* @since 3.13.0
*
* @param array $args Data to be passed to `wp_insert_post()`.
* @return array
*/
protected function get_creation_args( $args = null ) {
// Allow nothing to be passed in.
if ( empty( $args ) ) {
$args = array();
}
// Backwards compat to original 3.0.0 format when just a title was passed in.
if ( is_string( $args ) ) {
$args = array(
'post_title' => $args,
);
}
$args = wp_parse_args(
$args,
array(
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_author' => get_current_user_id(),
'post_content' => '',
'post_excerpt' => '',
'post_status' => 'publish',
'post_title' => '',
'post_type' => $this->get( 'db_post_type' ),
)
);
/**
* Filter arguments used to create a new section post
*
* @since 4.11.0
*
* @param array $args Data to be passed to `wp_insert_post()`.
* @param LLMS_Section $section Instance of the section object.
*/
return apply_filters( 'llms_section_get_creation_args', $args, $this );
}
/**
* Retrieve the previous section
*
* @since 3.13.0
* @since 3.24.0 Unknown.
*
* @return LLMS_Section|false
*/
public function get_next() {
$siblings = $this->get_siblings( 'ids' );
$index = array_search( $this->get( 'id' ), $siblings );
/**
* The `$index` var will be false if the current section isn't found and
* will equal the length of the array if it's the last one (and there is no next).
*/
if ( false === $index || count( $siblings ) - 1 === $index ) {
return false;
}
return llms_get_post( $siblings[ $index + 1 ] );
}
/**
* Retrieve section completion percentage
*
* @since 3.24.0
*
* @see LLMS_Student::get_progress()
*
* @param string $user_id Optional. WP_User ID, if none supplied uses current user (if exists). Default is empty string.
* @param bool $use_cache Optional. When true, uses results from from the wp object cache (if available). Default is `false`.
* @return float
*/
public function get_percent_complete( $user_id = '', $use_cache = true ) {
$student = llms_get_student( $user_id );
if ( ! $student ) {
/** This filter is documented in includes/models/model.llms.student.php */
return apply_filters( 'llms_student_get_progress', 0, $this->get( 'id' ), 'section', $user_id );
}
return $student->get_progress( $this->get( 'id' ), 'section', $use_cache );
}
/**
* Retrieve the previous section
*
* @since 3.13.0
*
* @return LLMS_Section|false
*/
public function get_previous() {
$siblings = $this->get_siblings( 'ids' );
$index = array_search( $this->get( 'id' ), $siblings );
/**
* The `$index` var will be `0` if we're on the first section and
* will be `false` if the current section isn't found.
*/
if ( $index ) {
return llms_get_post( $siblings[ $index - 1 ] );
}
return false;
}
/**
* Get all lessons in the section
*
* @since 3.3.0
* @since 3.24.0 Unknown.
*
* @param string $return Optional. Type of return [ids|posts|lessons]. Default is `lessons`.
* @return int[]|WP_Post[]|LLMS_Lesson[] Return ty depends on value of `$return` argument.
*/
public function get_lessons( $return = 'lessons' ) {
$query = new WP_Query(
array(
'meta_key' => '_llms_order',
'meta_query' => array(
array(
'key' => '_llms_parent_section',
'value' => $this->get( 'id' ),
),
),
'order' => 'ASC',
'orderby' => 'meta_value_num',
'post_type' => 'lesson',
'posts_per_page' => 500,
)
);
if ( 'ids' === $return ) {
$ret = wp_list_pluck( $query->posts, 'ID' );
} elseif ( 'posts' === $return ) {
$ret = $query->posts;
} else {
$ret = array_map( 'llms_get_post', $query->posts );
}
return $ret;
}
/**
* Get sibling sections
*
* @since 3.13.0
*
* @param string $return Optional. Type of return [ids|posts|sections]. Default is `sections`.
* @return int[]|WP_Post[]|LLMS_Section[] Return type depends on value of `$return` argument.
*/
public function get_siblings( $return = 'sections' ) {
$course = $this->get_course();
return $course->get_sections( $return );
}
/**
* Add data to the course model when converted to array
*
* Called before data is sorted and returned by $this->jsonSerialize().
*
* @since 3.3.0
* @since 3.24.0 Unknown.
*
* @param array $arr Data to be serialized.
* @return array
*/
public function toArrayAfter( $arr ) {
$arr['lessons'] = array();
foreach ( $this->get_lessons() as $lesson ) {
$arr['lessons'][] = $lesson->toArray();
}
return $arr;
}
}
Expand full source code Collapse full source code View on GitHub
Properties Properties
The following post and post meta properties are accessible for this class. See LLMS_Post_Model::get() and LLMS_Post_Model::set() for more information.
- $order
-
(int) The section's order within its parent course.
- $parent_course
-
(int) The WP_Post ID of the section's parent course.
- $title
-
(string) The title / display name of the section.
Methods Methods
- count_elements — Retrieve the total number of elements in the section
- get_course — Retrieve an instance of LLMS_Course for the sections's parent course
- get_creation_args — An array of default arguments to pass to $this->create() when creating a new section
- get_lessons — Get all lessons in the section
- get_next — Retrieve the previous section
- get_next_available_lesson_order — Get the next lesson order for assigning a lesson to a section — deprecated
- get_order — Retrieve the order of the section within the course — deprecated
- get_parent_course — Retrieve the post ID of the section's parent course — deprecated
- get_percent_complete — Retrieve section completion percentage
- get_previous — Retrieve the previous section
- get_siblings — Get sibling sections
- set_parent_course — Set parent course — deprecated
- toArrayAfter — Add data to the course model when converted to array
Changelog Changelog
| Version | Description |
|---|---|
| 6.0.0 | Removed deprecated items.
|
| 5.7.0 | Informed developers about the deprecated LLMS_Section::get_next_available_lesson_order() method. Informed developers about the deprecated LLMS_Section::get_order() method. Informed developers about the deprecated LLMS_Section::get_parent_course() method. Informed developers about the deprecated LLMS_Section::set_parent_course() method. |
| 4.0.0 | Remove deprecated class methods. |
| 1.0.0 | Introduced. |