LLMS_REST_Courses_Controller::update_additional_object_fields( LLMS_Course $course, WP_REST_Request $request, array $schema, array $prepared_item, bool $creating = true )
Updates a single llms course.
Parameters Parameters
- $course
-
(LLMS_Course) (Required) LLMS_Course instance.
- $request
-
(WP_REST_Request) (Required) Full details about the request.
- $schema
-
(array) (Required) The item schema.
- $prepared_item
-
(array) (Required) Array.
- $creating
-
(bool) (Optional) Whether we're in creation or update phase. Default true (create).
Default value: true
Return Return
(bool|WP_Error) True on success or false if nothing to update, WP_Error object if something went wrong during the update.
Source Source
File: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php
* if their values didn't really change, otherwise we'd get a WP_Error which the consumer cannot avoid having no direct control on those properties. * @since 1.0.0-beta.8 Call `set_bulk()` llms post method passing `true` as second parameter, * so to instruct it to return a WP_Error on failure. * @since 1.0.0-beta.9 Use `WP_Error::$errors` in place of `WP_Error::has_errors()` to support WordPress version prior to 5.1. * Also made sure course's `instructor` is at least set as the post author. * @since 1.0.0-beta.25 Allow updating meta with the same value as the stored one. * * @param LLMS_Course $course LLMS_Course instance. * @param WP_REST_Request $request Full details about the request. * @param array $schema The item schema. * @param array $prepared_item Array. * @param bool $creating Optional. Whether we're in creation or update phase. Default true (create). * @return bool|WP_Error True on success or false if nothing to update, WP_Error object if something went wrong during the update. */ protected function update_additional_object_fields( $course, $request, $schema, $prepared_item, $creating = true ) { $error = new WP_Error(); // Course catalog visibility. if ( ! empty( $schema['properties']['catalog_visibility'] ) && isset( $request['catalog_visibility'] ) ) { $course->get_product()->set_catalog_visibility( $request['catalog_visibility'] ); } // Instructors. if ( ! empty( $schema['properties']['instructors'] ) ) { $instructors = array(); if ( isset( $request['instructors'] ) ) { foreach ( $request['instructors'] as $instructor_id ) { $user_data = get_userdata( $instructor_id ); if ( ! empty( $user_data ) ) { $instructors[] = array( 'id' => $instructor_id, 'name' => $user_data->display_name, ); } } } // When creating always make sure the instructors are set. // Note: `$course->set_instructor( $instructors )` when `$instructors` is empty // will set the course's author as course's instructor. if ( $creating || ( ! $creating && isset( $request['instructors'] ) ) ) { $course->set_instructors( $instructors ); } } $to_set = array(); // Access dates. if ( ! empty( $schema['properties']['access_opens_date'] ) && isset( $request['access_opens_date'] ) ) { $access_opens_date = rest_parse_date( $request['access_opens_date'] ); $to_set['start_date'] = empty( $access_opens_date ) ? '' : date_i18n( 'Y-m-d H:i:s', $access_opens_date ); } if ( ! empty( $schema['properties']['access_closes_date'] ) && isset( $request['access_closes_date'] ) ) { $access_closes_date = rest_parse_date( $request['access_closes_date'] ); $to_set['end_date'] = empty( $access_closes_date ) ? '' : date_i18n( 'Y-m-d H:i:s', $access_closes_date ); } // Needed until the following will be implemented: https://github.com/gocodebox/lifterlms/issues/908. if ( ! empty( $to_set['start_date'] ) || ! empty( $to_set['end_date'] ) ) { $to_set['time_period'] = 'yes'; } else { $to_set['time_period'] = 'no'; } // Enrollment dates. if ( ! empty( $schema['properties']['enrollment_opens_date'] ) && isset( $request['enrollment_opens_date'] ) ) { $enrollment_opens_date = rest_parse_date( $request['enrollment_opens_date'] ); $to_set['enrollment_start_date'] = empty( $enrollment_opens_date ) ? '' : date_i18n( 'Y-m-d H:i:s', $enrollment_opens_date ); } if ( ! empty( $schema['properties']['enrollment_closes_date'] ) && isset( $request['enrollment_closes_date'] ) ) { $enrollment_closes_date = rest_parse_date( $request['enrollment_closes_date'] ); $to_set['enrollment_end_date'] = empty( $enrollment_closes_date ) ? '' : date_i18n( 'Y-m-d H:i:s', $enrollment_closes_date ); } // Needed until the following will be implemented: https://github.com/gocodebox/lifterlms/issues/908. if ( ! empty( $to_set['enrollment_start_date'] ) || ! empty( $to_set['enrollment_end_date'] ) ) { $to_set['enrollment_period'] = 'yes'; } else { $to_set['enrollment_period'] = 'no'; } // Prerequisite. if ( ! empty( $schema['properties']['prerequisite'] ) && isset( $request['prerequisite'] ) ) { // check if course exists. $prerequisite = llms_get_post( $request['prerequisite'] ); if ( is_a( $prerequisite, 'LLMS_Course' ) ) { $to_set['prerequisite'] = $request['prerequisite']; } else { $to_set['prerequisite'] = 0; } } // Prerequisite track. if ( ! empty( $schema['properties']['prerequisite_track'] ) && isset( $request['prerequisite_track'] ) ) { // check if the track exists. $track = new LLMS_Track( $request['prerequisite_track'] ); if ( $track->term ) { $to_set['prerequisite_track'] = $request['prerequisite_track']; } else { $to_set['prerequisite_track'] = 0; } } // Needed until the following will be implemented: https://github.com/gocodebox/lifterlms/issues/908. if ( ! empty( $to_set['prerequisite'] ) || ! empty( $to_set['prerequisite_track'] ) ) { $to_set['has_prerequisite'] = 'yes'; } else { $to_set['has_prerequisite'] = 'no'; } /** * The following properties have a default value that contains a placeholder ({{course_id}}) that can be "expanded" only * after the course has been created. */ // Access opens/closes messages. if ( ! empty( $schema['properties']['access_opens_message'] ) && isset( $request['access_opens_message'] ) ) { if ( is_string( $request['access_opens_message'] ) ) { $to_set['course_opens_message'] = $request['access_opens_message']; } elseif ( isset( $request['access_opens_message']['raw'] ) ) { $to_set['course_opens_message'] = $request['access_opens_message']['raw']; } } if ( ! empty( $schema['properties']['access_closes_message'] ) && isset( $request['access_closes_message'] ) ) { if ( is_string( $request['access_closes_message'] ) ) { $to_set['course_closed_message'] = $request['access_closes_message']; } elseif ( isset( $request['access_closes_message']['raw'] ) ) { $to_set['course_closed_message'] = $request['access_closes_message']['raw']; } } // Enrollments opens/closes messages. if ( ! empty( $schema['properties']['enrollment_opens_message'] ) && isset( $request['enrollment_opens_message'] ) ) { if ( is_string( $request['enrollment_opens_message'] ) ) { $to_set['enrollment_opens_message'] = $request['enrollment_opens_message']; } elseif ( isset( $request['enrollment_opens_message']['raw'] ) ) { $to_set['enrollment_opens_message'] = $request['enrollment_opens_message']['raw']; } } if ( ! empty( $schema['properties']['enrollment_closes_message'] ) && isset( $request['enrollment_closes_message'] ) ) { if ( is_string( $request['enrollment_closes_message'] ) ) { $to_set['enrollment_closed_message'] = $request['enrollment_closes_message']; } elseif ( isset( $request['enrollment_closes_message']['raw'] ) ) { $to_set['enrollment_closed_message'] = $request['enrollment_closes_message']['raw']; } } // Are we creating a course? // If so, replace the placeholder with the actual course id. if ( $creating ) { $_to_expand_props = array( 'course_opens_message', 'course_closed_message', 'enrollment_opens_message', 'enrollment_closed_message', ); $course_id = $course->get( 'id' ); foreach ( $_to_expand_props as $prop ) { if ( ! empty( $to_set[ $prop ] ) ) { $to_set[ $prop ] = str_replace( '{{course_id}}', $course_id, $to_set[ $prop ] ); } } } // Set bulk.
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
1.0.0-beta.9 | Use WP_Error::$errors in place of WP_Error::has_errors() to support WordPress version prior to 5.1. Also made sure course's instructor is at least set as the post author. |
1.0.0-beta.8 | Call set_bulk() llms post method passing true as second parameter, so to instruct it to return a WP_Error on failure. |
1.0.0-beta.7 | Allow prerequisite and prerequisite_track to be cleared (set to 0). Also:
|
1.0.0-beta.25 | Allow updating meta with the same value as the stored one. |
1.0.0-beta.1 | Introduced. |