/** * Set the status message displayed to the user for a quiz * @param integer $lesson_id ID of quiz lesson * @param integer $user_id ID of user * @param bool $is_lesson * @return array Status code and message */ public static function sensei_user_quiz_status_message($lesson_id = 0, $user_id = 0, $is_lesson = false) { global $current_user; if (intval($user_id) == 0) { $user_id = $current_user->ID; } $status = 'not_started'; $box_class = 'info'; $message = __("You have not taken this lesson's quiz yet", 'woothemes-sensei'); $extra = ''; if ($lesson_id > 0 && $user_id > 0) { // Prerequisite lesson $prerequisite = get_post_meta($lesson_id, '_lesson_prerequisite', true); // Course ID $course_id = absint(get_post_meta($lesson_id, '_lesson_course', true)); // Has user started course $started_course = Sensei_Utils::user_started_course($course_id, $user_id); // Has user completed lesson $user_lesson_status = Sensei_Utils::user_lesson_status($lesson_id, $user_id); $lesson_complete = Sensei_Utils::user_completed_lesson($user_lesson_status); // Quiz ID $quiz_id = Sensei()->lesson->lesson_quizzes($lesson_id); // Quiz grade $quiz_grade = 0; if ($user_lesson_status) { $quiz_grade = get_comment_meta($user_lesson_status->comment_ID, 'grade', true); } // Quiz passmark $quiz_passmark = absint(get_post_meta($quiz_id, '_quiz_passmark', true)); $quiz_passmark_float = (double) $quiz_passmark; // Pass required $pass_required = get_post_meta($quiz_id, '_pass_required', true); // Quiz questions $has_quiz_questions = get_post_meta($lesson_id, '_quiz_has_questions', true); if (!$started_course) { $status = 'not_started_course'; $box_class = 'info'; $message = sprintf(__('Please sign up for %1$sthe course%2$s before taking this quiz', 'woothemes-sensei'), '<a href="' . esc_url(get_permalink($course_id)) . '" title="' . esc_attr(__('Sign Up', 'woothemes-sensei')) . '">', '</a>'); } elseif (!is_user_logged_in()) { $status = 'login_required'; $box_class = 'info'; $message = __('You must be logged in to take this quiz', 'woothemes-sensei'); } elseif ($lesson_complete) { $status = 'passed'; $box_class = 'tick'; // Lesson status will be "complete" (has no Quiz) if (!$has_quiz_questions) { $message = sprintf(__('Congratulations! You have passed this lesson.', 'woothemes-sensei')); } elseif (empty($quiz_grade)) { $message = sprintf(__('Congratulations! You have completed this lesson.', 'woothemes-sensei')); } elseif (!empty($quiz_grade) && abs($quiz_grade) >= 0) { if ($is_lesson) { $message = sprintf(__('Congratulations! You have passed this lesson\'s quiz achieving %s%%', 'woothemes-sensei'), Sensei_Utils::round($quiz_grade)); } else { $message = sprintf(__('Congratulations! You have passed this quiz achieving %s%%', 'woothemes-sensei'), Sensei_Utils::round($quiz_grade)); } } // add next lesson button $nav_id_array = sensei_get_prev_next_lessons($lesson_id); $next_lesson_id = absint($nav_id_array['next_lesson']); // Output HTML if (0 < $next_lesson_id) { $message .= ' ' . '<a class="next-lesson" href="' . esc_url(get_permalink($next_lesson_id)) . '" rel="next"><span class="meta-nav"></span>' . __('Next Lesson', 'woothemes-sensei') . '</a>'; } } else { // Lesson/Quiz isn't "complete" instead it's ungraded (previously this "state" meant that it *was* complete) if (isset($user_lesson_status->comment_approved) && 'ungraded' == $user_lesson_status->comment_approved) { $status = 'complete'; $box_class = 'info'; if ($is_lesson) { $message = sprintf(__('You have completed this lesson\'s quiz and it will be graded soon. %1$sView the lesson quiz%2$s', 'woothemes-sensei'), '<a href="' . esc_url(get_permalink($quiz_id)) . '" title="' . esc_attr(get_the_title($quiz_id)) . '">', '</a>'); } else { $message = sprintf(__('You have completed this quiz and it will be graded soon. You require %1$s%% to pass.', 'woothemes-sensei'), Sensei_Utils::round($quiz_passmark)); } } elseif (isset($user_lesson_status->comment_approved) && 'failed' == $user_lesson_status->comment_approved) { $status = 'failed'; $box_class = 'alert'; if ($is_lesson) { $message = sprintf(__('You require %1$d%% to pass this lesson\'s quiz. Your grade is %2$s%%', 'woothemes-sensei'), Sensei_Utils::round($quiz_passmark), Sensei_Utils::round($quiz_grade)); } else { $message = sprintf(__('You require %1$d%% to pass this quiz. Your grade is %2$s%%', 'woothemes-sensei'), Sensei_Utils::round($quiz_passmark), Sensei_Utils::round($quiz_grade)); } } elseif ($pass_required) { $status = 'not_started'; $box_class = 'info'; if ($is_lesson) { $message = sprintf(__('You require %1$d%% to pass this lesson\'s quiz.', 'woothemes-sensei'), Sensei_Utils::round($quiz_passmark)); } else { $message = sprintf(__('You require %1$d%% to pass this quiz.', 'woothemes-sensei'), Sensei_Utils::round($quiz_passmark)); } } } } // Legacy filter $message = apply_filters('sensei_user_quiz_status_' . $status, $message); if ($is_lesson && !in_array($status, array('login_required', 'not_started_course'))) { $quiz_id = Sensei()->lesson->lesson_quizzes($lesson_id); $extra = '<p><a class="button" href="' . esc_url(get_permalink($quiz_id)) . '" title="' . __('View the lesson quiz', 'woothemes-sensei') . '">' . __('View the lesson quiz', 'woothemes-sensei') . '</a></p>'; } // Filter of all messages return apply_filters('sensei_user_quiz_status', array('status' => $status, 'box_class' => $box_class, 'message' => $message, 'extra' => $extra), $lesson_id, $user_id, $is_lesson); }