diff --git a/classes/Course.php b/classes/Course.php index 72968bf5a4..481670193f 100644 --- a/classes/Course.php +++ b/classes/Course.php @@ -208,7 +208,12 @@ public function __construct( $register_hooks = true ) { * * @since v.1.6.6 */ - add_action( 'deleted_post', array( new CourseModel(), 'delete_course_data' ) ); + add_action( + 'deleted_post', + function ( $post_id ) { + ( new CourseModel() )->delete_course_data( $post_id ); + } + ); /** * Delete course data after deleted course @@ -355,12 +360,12 @@ public function handle_password_submit() { * * @since 4.0.0 * - * @param bool $required Whether the password is required. - * @param WP_Post $post The post object. + * @param bool $required Whether the password is required. + * @param \WP_Post $post The post object. * * @return bool false if the current user is enrolled, original value otherwise. */ - public function bypass_password_for_enrolled( $required, $post ) { + public function bypass_password_for_enrolled( $required, \WP_Post $post ) { if ( ! $required ) { return $required; } @@ -1098,7 +1103,8 @@ public function ajax_update_course() { 'course_target_audience' => 'sanitize_textarea_field', 'course_material_includes' => 'sanitize_textarea_field', 'course_requirements' => 'sanitize_textarea_field', - ) + ), + true ); $course_id = (int) $params['course_id']; @@ -1254,13 +1260,16 @@ public function get_course_contents( $course_id ) { $topic_contents = tutor_utils()->get_course_contents_by_topic( $post->ID, -1 ); if ( $topic_contents->have_posts() ) { - foreach ( $topic_contents->get_posts() as $post ) { - if ( tutor()->quiz_post_type === $post->post_type ) { - $questions = tutor_utils()->get_questions_by_quiz( $post->ID ); - $post->total_question = is_array( $questions ) ? count( $questions ) : 0; + foreach ( $topic_contents->get_posts() as $content ) { + if ( tutor()->quiz_post_type === $content->post_type ) { + $questions = tutor_utils()->get_questions_by_quiz( $content->ID ); + $content = (object) array_merge( + (array) $content, + array( 'total_question' => is_array( $questions ) ? count( $questions ) : 0 ) + ); } - array_push( $current_topic['contents'], $post ); + array_push( $current_topic['contents'], $content ); } } @@ -1361,10 +1370,10 @@ public function ajax_course_details() { if ( $video_intro ) { $source = $video_intro['source'] ?? ''; if ( 'html5' === $source ) { - $poster_url = wp_get_attachment_url( $video['poster'] ?? 0 ); - $source_html5 = wp_get_attachment_url( $video['source_video_id'] ?? 0 ); - $video['poster_url'] = $poster_url; - $video['source_html5'] = $source_html5; + $poster_url = wp_get_attachment_url( $video_intro['poster'] ?? 0 ); + $source_html5 = wp_get_attachment_url( $video_intro['source_video_id'] ?? 0 ); + $video_intro['poster_url'] = $poster_url; + $video_intro['source_html5'] = $source_html5; } } @@ -1521,7 +1530,7 @@ public function localize_course_builder_data( $data ) { if ( isset( $default_data['current_user']['data']['id'] ) ) { $tutor_user = tutor_utils()->get_tutor_user( $default_data['current_user']['data']['id'] ); - $default_data['current_user']['data']['tutor_profile_photo_url'] = $tutor_user->tutor_profile_photo_url; + $default_data['current_user']['data']['tutor_profile_photo_url'] = is_object( $tutor_user ) ? $tutor_user->tutor_profile_photo_url : ''; } /** @@ -2212,7 +2221,7 @@ public function mark_course_complete() { } else { CourseModel::mark_course_as_completed( $course_id, $user_id ); // Set temporary identifier to show review pop up. - self::set_review_popup_data( $user_id, $course_id, $permalink ); + self::set_review_popup_data( $user_id, $course_id ); wp_safe_redirect( $permalink ); exit; @@ -2616,7 +2625,7 @@ public function enable_disable_course_progress_bar( $html ) { * @return string */ public function enable_disable_material_includes( $html ) { - $disable_option = ! (bool) get_tutor_option( 'enable_course_material', true, true ); + $disable_option = ! (bool) get_tutor_option( 'enable_course_material', true ); if ( $disable_option ) { return ''; } @@ -2752,9 +2761,9 @@ public function filter_product_in_shop_page() { if ( ! $hide_course_from_shop_page ) { return; } - add_action( 'woocommerce_product_query', array( $this, 'filter_woocommerce_product_query' ) ); - add_filter( 'edd_downloads_query', array( $this, 'filter_edd_downloads_query' ), 10, 2 ); - add_action( 'pre_get_posts', array( $this, 'filter_archive_meta_query' ), 1 ); + add_filter( 'woocommerce_product_query', array( $this, 'filter_woocommerce_product_query' ) ); + add_filter( 'edd_downloads_query', array( $this, 'filter_edd_downloads_query' ), 10 ); + add_filter( 'pre_get_posts', array( $this, 'filter_archive_meta_query' ), 1 ); } @@ -2888,7 +2897,7 @@ public static function get_course_completion_restrict_msg( $course_id = 0, $user } $completed_lessons = tutor_utils()->get_completed_lesson_count_by_course( $course_id, $user_id ); - $total_lessons = tutor_utils()->get_lesson_count_by_course( $course_id ); + $total_lessons = tutor_utils()->get_lesson_count_by_course( $course_id ); // @phpstan-ignore method.notFound if ( $completed_lessons < $total_lessons ) { return __( 'Complete all lessons to mark this course as complete', 'tutor' ); @@ -3108,7 +3117,7 @@ public function tutor_reset_course_progress() { * * @param integer $course_id course ID. * @param integer $user_id user ID. - * + * * @return void */ public function enroll_after_login_if_attempt( int $course_id, int $user_id ) { diff --git a/phpstan.neon b/phpstan.neon index 4314a54fb6..b58ac807f0 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,5 +1,8 @@ parameters: level: 3 + scanDirectories: + - ../tutor-pro + - ../woocommerce paths: - . excludePaths: