/** * Testing the is lesson pre-requisite completed function. * * @since 1.9.0 */ public function testIsPreRequisiteComplete() { // does this function add_user_data exist? $this->assertTrue(method_exists('WooThemes_Sensei_Lesson', 'is_prerequisite_complete'), 'The lesson class function `is_prerequisite_complete` does not exist '); // falsy state $user_id = 0; $lesson_id = 0; $this->assertFalse(WooThemes_Sensei_Lesson::is_prerequisite_complete($lesson_id, $user_id), 'None existing lesson or user should return false'); $test_user_id = wp_create_user('studentPrerequisite', 'studentPrerequisite', '*****@*****.**'); $test_lesson = $this->factory->get_lessons(); $test_lesson_id = $test_lesson[0]; // truthy state $course_id = $this->factory->get_random_course_id(); $lessons = $this->factory->get_lessons(); $test_lesson_prerequisite_id = $lessons[1]; // add lesson to random course update_post_meta($test_lesson_prerequisite_id, '_lesson_course', $course_id); update_post_meta($test_lesson_id, '_lesson_course', $course_id); // setup prerequisite update_post_meta($test_lesson_id, '_lesson_prerequisite', $test_lesson_prerequisite_id); Sensei_Utils::user_start_lesson($test_user_id, $test_lesson_prerequisite_id); $this->assertFalse(WooThemes_Sensei_Lesson::is_prerequisite_complete($test_lesson_id, $test_user_id), 'Users that has NOT completeded prerequisite should return false.'); Sensei_Utils::user_start_lesson($test_user_id, $test_lesson_prerequisite_id, true); $this->assertTrue(Sensei_Lesson::is_prerequisite_complete($test_lesson_id, $test_user_id), 'Users that has completeded prerequisite should return true.'); }
/** * Show a message telling the user to complete the previous message if they haven't done so yet * * @since 1.9.0 */ public static function prerequisite_complete_message() { $lesson_prerequisite = WooThemes_Sensei_Lesson::get_lesson_prerequisite_id(get_the_ID()); $lesson_has_pre_requisite = $lesson_prerequisite > 0; if (!WooThemes_Sensei_Lesson::is_prerequisite_complete(get_the_ID(), get_current_user_id()) && $lesson_has_pre_requisite) { $prerequisite_lesson_link = '<a href="' . esc_url(get_permalink($lesson_prerequisite)) . '" title="' . esc_attr(sprintf(__('You must first complete: %1$s', 'woothemes-sensei'), get_the_title($lesson_prerequisite))) . '">' . get_the_title($lesson_prerequisite) . '</a>'; echo sprintf(__('You must first complete %1$s before viewing this Lesson', 'woothemes-sensei'), $prerequisite_lesson_link); } }
/** * Template function to determine if the current user can * access the current lesson content being viewed. * * This function checks in the folowing order * - if the current user has all access based on their permissions * - If the access permission setting is enabled for this site, if not the user has accces * - if the lesson has a pre-requisite and if the user has completed that * - If it is a preview the user has access as well * * @since 1.9.0 * * @param string $lesson_id * @return bool */ function sensei_can_user_view_lesson($lesson_id = '', $user_id = '') { if (empty($lesson_id)) { $lesson_id = get_the_ID(); } if (empty($user_id)) { $user_id = get_current_user_id(); } // Check for prerequisite lesson completions $pre_requisite_complete = WooThemes_Sensei_Lesson::is_prerequisite_complete($lesson_id, $user_id); $lesson_course_id = get_post_meta($lesson_id, '_lesson_course', true); $user_taking_course = Sensei_Utils::user_started_course($lesson_course_id, $user_id); $is_preview = false; if (Sensei_Utils::is_preview_lesson($lesson_id)) { $is_preview = true; $pre_requisite_complete = true; } $user_can_access_lesson = false; if (is_user_logged_in() && $user_taking_course) { $user_can_access_lesson = true; } $access_permission = false; if (!Sensei()->settings->get('access_permission') || sensei_all_access()) { $access_permission = true; } $can_user_view_lesson = $access_permission || $user_can_access_lesson && $pre_requisite_complete || $is_preview; /** * Filter the can user view lesson function * * @since 1.9.0 * * @hooked Sensei_WC::alter_can_user_view_lesson * * @param bool $can_user_view_lesson * @param string $lesson_id * @param string $user_id */ return apply_filters('sensei_can_user_view_lesson', $can_user_view_lesson, $lesson_id, $user_id); }