diff --git a/changelog/fix-wpml-question-categories b/changelog/fix-wpml-question-categories new file mode 100644 index 0000000000..ef24c2c597 --- /dev/null +++ b/changelog/fix-wpml-question-categories @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix usage of question categories in translated quizzes diff --git a/config/psalm/psalm-baseline.xml b/config/psalm/psalm-baseline.xml index a4ab0a2a11..415fa3bc90 100644 --- a/config/psalm/psalm-baseline.xml +++ b/config/psalm/psalm-baseline.xml @@ -1422,7 +1422,7 @@ public $token; - + $class $classes $course @@ -1430,14 +1430,11 @@ $course_id $course_id $course_id - $course_id $excludes $excludes $message $query $query - $should_send - $user_id $user_id @@ -1885,11 +1882,9 @@ 'WP_Post' 'WP_User' - + ! isset( $lesson_id ) - - 1 !== $new_course -1 - -1 !== $new_complexity empty( $block['innerBlocks'][0]['attrs']['id'] ) ? null : wp_get_attachment_url( get_post_thumbnail_id( $block['innerBlocks'][0]['attrs']['id'] ) ) @@ -2080,12 +2075,10 @@ is_array( $question_data ) is_countable( $questions_array ) - + ! is_wp_error( $multiple_id ) $module_term $module_term - - 1 !== $new_course - -1 !== $new_complexity is_array( $data ) && count( $data ) > 0 is_array( $this->meta_fields ) isset( $this->meta_fields ) && is_array( $this->meta_fields ) @@ -2483,7 +2476,7 @@ public static function gap_fill_load_question_data( $question_data, $question_id, $quiz_id ) { public static function multiple_choice_load_question_data( $question_data, $question_id, $quiz_id ) { - + $id $lesson_id $lesson_id @@ -2501,8 +2494,6 @@ $lesson_id $lesson_id $lesson_id - $lesson_id - $lesson_id $question_id $question_id $question_id @@ -2726,9 +2717,6 @@ ! is_array( $new_value ) ! is_array( $old_value ) - - 'type' => 'email' - $include_milliseconds @@ -4736,9 +4724,8 @@ - + $comment->comment_post_ID - $lesson_id $comments @@ -5187,6 +5174,11 @@ Sensei_REST_API_Import_Controller + + + Sensei()->tour + + @@ -5422,6 +5414,11 @@ Sensei_REST_API_Theme_Controller + + + Sensei_REST_API_Tour_Controller + + $base @@ -5798,7 +5795,8 @@ - + + is_wp_error( $question_id ) is_wp_error( $question_id ) @@ -5818,14 +5816,4 @@ function wp_remote_request($url, $args = array()) - - - Sensei_REST_API_Tour_Controller - - - - - Sensei()->tour - - diff --git a/includes/class-sensei-course.php b/includes/class-sensei-course.php index 7940c06a07..d20557f934 100755 --- a/includes/class-sensei-course.php +++ b/includes/class-sensei-course.php @@ -1001,10 +1001,8 @@ public function meta_box_save( $post_id ) { if ( ! current_user_can( 'edit_page', $post_id ) ) { return $post_id; } - } else { - if ( ! current_user_can( 'edit_post', $post_id ) ) { + } elseif ( ! current_user_can( 'edit_post', $post_id ) ) { return $post_id; - } } // Save the post meta data fields @@ -1013,7 +1011,6 @@ public function meta_box_save( $post_id ) { $this->save_post_meta( $meta_key, $post_id ); } } - } /** @@ -1079,7 +1076,6 @@ private function save_post_meta( $post_key = '', $post_id = 0 ) { // Update meta field with the new value return update_post_meta( $post_id, $meta_key, $new_meta_value ); } - } /** @@ -1102,8 +1098,8 @@ public function course_lessons_meta_box_content() { $html = ''; $html .= ''; + . esc_attr( 'woo_' . $this->token . '_noonce' ) + . '" value="' . esc_attr( wp_create_nonce( plugin_basename( __FILE__ ) ) ) . '" />'; $course_id = ( 0 < $post->ID ) ? '&course_id=' . $post->ID : ''; $add_lesson_admin_url = admin_url( 'post-new.php?post_type=lesson' . $course_id ); @@ -1170,7 +1166,6 @@ public function course_lessons_meta_box_content() { * @access public * @return void */ - public function course_manage_meta_box_content() { global $post; @@ -1337,7 +1332,6 @@ public function course_query( $amount = 0, $type = 'default', $includes = [], $e } return $results_array; - } @@ -1362,10 +1356,8 @@ public function get_archive_query_args( $type = '', $amount = 0, $includes = [], if ( 0 == $amount && ( isset( Sensei()->settings->settings['course_archive_amount'] ) && 'usercourses' != $type && ( 0 < absint( Sensei()->settings->settings['course_archive_amount'] ) ) ) ) { $amount = absint( Sensei()->settings->settings['course_archive_amount'] ); - } else { - if ( 0 == $amount ) { + } elseif ( 0 == $amount ) { $amount = $wp_query->get( 'posts_per_page' ); - } } $stored_order = get_option( 'sensei_course_order', '' ); @@ -1584,7 +1576,6 @@ public function course_image( $course_id = 0, $width = '100', $height = '100', $ echo wp_kses_post( $html ); } - } @@ -1717,7 +1708,6 @@ function ( $lesson_1, $lesson_2 ) use ( $lesson_order ) { } return $lessons; - } /** @@ -1763,7 +1753,6 @@ public function course_quizzes( $course_id = 0, $boolean_check = false ) { public function course_lessons_completed( $course_id = 0, $post_status = 'publish' ) { return $this->course_lessons( $course_id, $post_status ); - } @@ -1790,7 +1779,6 @@ public function course_author_lesson_count( $author_id = 0, $course_id = 0 ) { $lessons_array = get_posts( $lesson_args ); $count = count( $lessons_array ); return $count; - } /** @@ -1816,7 +1804,6 @@ public function course_lesson_count( $course_id = 0 ) { $count = count( $lessons_array ); return $count; - } /** @@ -1850,7 +1837,6 @@ public function course_lesson_preview_count( $course_id = 0 ) { $count = count( $lessons_array ); return $count; - } /** @@ -2225,7 +2211,7 @@ public function load_user_courses_content( $user = false ) { ?> @@ -2337,7 +2323,6 @@ public function load_user_courses_content( $user = false ) { echo ob_get_clean(); do_action( 'sensei_after_learner_course_content', $user ); - } /** @@ -2368,7 +2353,6 @@ public static function get_all_courses() { * @return {WP_Post[]} Filtered courses. */ return apply_filters( 'sensei_get_all_courses', $wp_query_obj->posts ); - } /** @@ -2391,7 +2375,6 @@ public function get_progress_meter( $progress_percentage ) { esc_attr( $progress_percentage ) . '%">' . esc_html( round( $progress_percentage ) ) . '%'; return $progress_bar_html; - } /** @@ -2489,7 +2472,6 @@ public function the_progress_statement( $course_id = 0, $user_id = 0 ) { echo '
' . esc_html( $progress_statement ) . '
'; } - } /** @@ -2519,7 +2501,6 @@ public function the_progress_meter( $course_id = 0, $user_id = 0 ) { $percentage_completed = $this->get_completion_percentage( $course_id, $user_id ); echo wp_kses_post( $this->get_progress_meter( $percentage_completed ) ); - } /** @@ -2649,7 +2630,6 @@ public function course_notification_meta_box_content( $course ) { echo ''; echo ''; - } /** @@ -2674,7 +2654,6 @@ public function save_course_notification_meta_box( $course_id ) { } update_post_meta( $course_id, 'disable_notification', $new_val ); - } /** @@ -2800,7 +2779,6 @@ public static function add_course_user_status_class( $classes, $class, $course_i } return $classes; - } /** @@ -2962,7 +2940,6 @@ public static function course_query_filter( $query ) { } return $query; - } /** @@ -2989,7 +2966,7 @@ public static function get_course_loop_content_class() { } // increment the counter - $sensei_course_loop['counter']++; + ++$sensei_course_loop['counter']; $extra_classes = []; @@ -3020,7 +2997,6 @@ public static function get_course_loop_content_class() { * @return {array} Additional CSS classes. */ return apply_filters( 'sensei_course_loop_content_class', $extra_classes, get_post() ); - } /** @@ -3042,7 +3018,6 @@ public static function get_loop_number_of_columns() { * @return {int} Filtered number of columns. */ return apply_filters( 'sensei_course_loop_number_of_columns', 1 ); - } /** @@ -3169,7 +3144,6 @@ public static function course_archive_filters( $query ) { settings->settings['course_completed_page'] ) ? intval( Sensei()->settings->settings['course_completed_page'] ) : 0; - $url = $page_id ? get_permalink( $page_id ) : ''; - $url = $url && 0 < $course_id ? add_query_arg( 'course_id', $course_id, $url ) : ''; + + /** + * Filter the course completed page ID. + * + * @since $$next-version$$ + * + * @hook sensei_course_completed_page_id + * + * @param {int} $page_id Course completed page ID. + * @return {int} Course completed page ID. + */ + $page_id = apply_filters( 'sensei_course_completed_page_id', $page_id ); + + $url = $page_id ? get_permalink( $page_id ) : ''; + $url = $url && 0 < $course_id ? add_query_arg( 'course_id', $course_id, $url ) : ''; /** * Filter the course completed page URL. @@ -3464,7 +3451,6 @@ public static function archive_header( $query_type = '', $before_html = '', $aft } echo wp_kses_post( apply_filters( 'course_archive_title', $html ) ); - } @@ -3504,7 +3490,6 @@ public static function single_course_content( $content ) { } else { return '

' . get_post( get_the_ID() )->post_excerpt . '

'; } - } /** @@ -3566,7 +3551,6 @@ public static function the_course_lessons_title() { * @param string $lessons_title_html */ echo wp_kses_post( apply_filters( 'the_course_lessons_title', ob_get_clean() ) ); // output and filter the captured output and stop capturing. - } /** @@ -3649,7 +3633,6 @@ public static function load_single_course_lessons_query() { // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Used for lesson loop on single course page. Reset in hook to `sensei_single_course_lessons_after`. $wp_query = new WP_Query( $course_lesson_query_args ); - } /** @@ -3954,7 +3937,6 @@ public static function the_title() { '; echo wp_kses_post( apply_filters( 'course_category_title', $html, $term->term_id ) ); - } /** @@ -4010,7 +3991,6 @@ public static function alter_course_category_order( $query ) { } return $query; - } /** @@ -4070,7 +4050,6 @@ public static function is_prerequisite_complete( $course_id ) { * @return {bool} Whether the prerequisite is complete. */ return apply_filters( 'sensei_course_is_prerequisite_complete', $prerequisite_complete, $course_id ); - } /** @@ -4196,7 +4175,7 @@ public static function self_enrollment_not_allowed_message() { * * @return string The HTML. */ - public static function get_course_prerequisite_message( int $course_id ) : string { + public static function get_course_prerequisite_message( int $course_id ): string { $course_prerequisite_id = absint( get_post_meta( $course_id, '_course_prerequisite', true ) ); $course_title = get_the_title( $course_prerequisite_id ); $prerequisite_course_link = '