LLMS_REST_Lessons_Controller::prepare_item_for_database( WP_REST_Request $request )
Prepares a single lesson for create or update.
Parameters Parameters
- $request
-
(WP_REST_Request) (Required) Request object.
Return Return
(array|WP_Error) Array of lesson args or WP_Error.
Source Source
File: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php
protected function prepare_item_for_database( $request ) {
$prepared_item = parent::prepare_item_for_database( $request );
$schema = $this->get_item_schema();
// Lesson's audio embed URL.
if ( ! empty( $schema['properties']['audio_embed'] ) && isset( $request['audio_embed'] ) ) {
$prepared_item['audio_embed'] = $request['audio_embed'];
}
// Lesson's video embed URL.
if ( ! empty( $schema['properties']['video_embed'] ) && isset( $request['video_embed'] ) ) {
$prepared_item['video_embed'] = $request['video_embed'];
}
// Parent (section) id.
if ( ! empty( $schema['properties']['parent_id'] ) && isset( $request['parent_id'] ) ) {
$parent_section_id = absint( $request['parent_id'] );
// Retrieve the parent section.
$parent_section = $parent_section_id ? llms_get_post( $parent_section_id ) : null;
if ( $parent_section && is_a( $parent_section, 'LLMS_Section' ) ) {
$parent_course = $parent_section->get_course();
if ( ! current_user_can( 'edit_post', $parent_section_id ) ||
! $parent_course || ! is_a( $parent_course, 'LLMS_Course' ) ||
! current_user_can( 'edit_post', $parent_course->get( 'id' ) ) ) {
return llms_rest_authorization_required_error( __( 'Sorry, you are not allowed to create or move lessons into the requested section.', 'lifterlms' ) );
}
$prepared_item['parent_section'] = $parent_section_id;
$prepared_item['parent_course'] = $parent_course->get( 'id' );
} else {
// An empty or invalid parent_id denotes an "orphaned" lesson.
$prepared_item['parent_section'] = 0;
$prepared_item['parent_course'] = 0;
}
}
// Course id.
if ( ! empty( $schema['properties']['course_id'] ) && isset( $request['course_id'] ) ) {
$parent_course = llms_get_post( $request['course_id'] );
if ( ! $parent_course || ! is_a( $parent_course, 'LLMS_Course' ) ) {
return llms_rest_bad_request_error( __( 'Invalid course_id param. It must be a valid Course ID.', 'lifterlms' ) );
}
if ( ! current_user_can( 'edit_post', $parent_course->get( 'id' ) ) ) {
return llms_rest_authorization_required_error( __( 'Sorry, you are not allowed to create or move lessons into the requested course.', 'lifterlms' ) );
}
$prepared_item['parent_course'] = $request['course_id'];
}
// Order.
if ( ! empty( $schema['properties']['order'] ) && isset( $request['order'] ) ) {
// order must be > 0. It's sanitized as absint so it cannot come as negative value.
if ( 0 === $request['order'] ) {
return llms_rest_bad_request_error( __( 'Invalid order param. It must be greater than 0.', 'lifterlms' ) );
}
$prepared_item['order'] = $request['order'];
}
// Public (free lesson).
if ( ! empty( $schema['properties']['public'] ) && isset( $request['public'] ) ) {
$prepared_item['free_lesson'] = empty( $request['public'] ) ? 'no' : 'yes';
}
// Points.
if ( ! empty( $schema['properties']['points'] ) && isset( $request['points'] ) ) {
$prepared_item['points'] = $request['points'];
}
// Drip days.
if ( ! empty( $schema['properties']['drip_days'] ) && isset( $request['drip_days'] ) ) {
// drip_days must be > 0. It's sanitized as absint so it cannot come as negative value.
if ( 0 === $request['drip_days'] ) {
return llms_rest_bad_request_error( __( 'Invalid drip_days param. It must be greater than 0.', 'lifterlms' ) );
}
$prepared_item['days_before_available'] = $request['drip_days'];
}
// Drip date.
if ( ! empty( $schema['properties']['drip_date'] ) && isset( $request['drip_date'] ) ) {
$drip_date = rest_parse_date( $request['drip_date'] );
// Drip date is nullable.
if ( empty( $drip_date ) ) {
$prepared_item['date_available'] = '';
$prepared_item['time_available'] = '';
} else {
$prepared_item['date_available'] = date_i18n( 'Y-m-d', $drip_date );
$prepared_item['time_available'] = date_i18n( 'H:i:s', $drip_date );
}
}
// Drip method.
if ( ! empty( $schema['properties']['drip_method'] ) && isset( $request['drip_method'] ) ) {
$prepared_item['drip_method'] = 'none' === $request['drip_method'] ? '' : $request['drip_method'];
}
// Quiz enabled.
if ( ! empty( $schema['properties']['quiz']['properties']['enabled'] ) && isset( $request['quiz']['enabled'] ) ) {
$prepared_item['quiz_enabled'] = empty( $request['quiz']['enabled'] ) ? 'no' : 'yes';
}
// Quiz id.
if ( ! empty( $schema['properties']['quiz']['properties']['id'] ) && ! empty( $request['quiz']['id'] ) ) {
$quiz_id = absint( $request['quiz']['id'] );
// check if quiz exists.
$quiz = llms_get_post( $quiz_id );
if ( is_a( $quiz, 'LLMS_Quiz' ) ) {
if ( ! current_user_can( 'edit_post', $quiz_id ) ) {
return llms_rest_authorization_required_error( __( 'Sorry, you are not allowed to attach the requested quiz to this lesson.', 'lifterlms' ) );
}
$prepared_item['quiz'] = $quiz_id;
}
}
// Quiz progression.
if ( ! empty( $schema['properties']['quiz']['properties']['progression'] ) && isset( $request['quiz']['progression'] ) ) {
$prepared_item['require_passing_grade'] = 'complete' === $request['quiz']['progression'] ? 'no' : 'yes';
}
/**
* Filters a lesson before it is inserted via the REST API.
*
* @since 1.0.0-beta.7
*
* @param array $prepared_item Array of lesson item properties prepared for database.
* @param WP_REST_Request $request Full details about the request.
* @param array $schema The item schema.
*/
return apply_filters( 'llms_rest_pre_insert_lesson', $prepared_item, $request, $schema );
}
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
| Version | Description |
|---|---|
| 1.0.0-beta.7 | |
| 1.0.0-beta.25 | Remove now useless check on the existing parent course id when setting it automatically on parent section's id update. |
| 1.0.0-beta.23 | Replaced the call to the deprecated LLMS_Lesson::get_parent_course() method with LLMS_Lesson::get( 'parent_course' ). |
| 1.0.0-beta.15 | Introduced. |