function calculate_course_progress($course_id) { $user_id = get_current_user_id(); $progress = 'progress' . $course_id; $curriculum = bp_course_get_curriculum_units($course_id); $base = count($curriculum); foreach ($curriculum as $key => $unit) { $check = get_user_meta($user_id, $unit, true); if (!isset($check) || !$check) { break; } } if (!$base) { $base = 1; } $course_progress = round(100 * ($key / $base), 0); update_user_meta($user_id, $progress, $course_progress); return $course_progress; }
function bp_get_course_check_course_complete($args = NULL) { // AUTO EVALUATION FOR COURSE global $post; $defaults = array('id' => $post->ID, 'user_id' => get_current_user_id()); $r = wp_parse_args($args, $defaults); extract($r, EXTR_SKIP); $return = '<div class="course_finish">'; $course_curriculum = bp_course_get_curriculum_units($id); //vibe_sanitize(get_post_meta($id,'vibe_course_curriculum',false)); if (isset($course_curriculum) && count($course_curriculum)) { $flag = 0; foreach ($course_curriculum as $unit_id) { //if(is_numeric($unit_id)){ $unittaken = get_user_meta($user_id, $unit_id, true); if (!isset($unittaken) || !$unittaken) { $flag = $unit_id; break; } //} } $flag = apply_filters('wplms_finish_course_check', $flag, $course_curriculum); if (!$flag) { $course_id = $id; $auto_eval = get_post_meta($id, 'vibe_course_auto_eval', true); if (vibe_validate($auto_eval)) { // AUTO EVALUATION $curriculum = bp_course_get_curriculum_units($id); //vibe_sanitize(get_post_meta($id,'vibe_course_curriculum',false)); $total_marks = $student_marks = 0; foreach ($curriculum as $c) { if (is_numeric($c)) { if (get_post_type($c) == 'quiz') { $k = get_post_meta($c, $user_id, true); $student_marks += $k; //Current user is the Student here $questions = vibe_sanitize(get_post_meta($c, 'quiz_questions' . $user_id, false)); if (!isset($questions) || !is_array($questions)) { $questions = vibe_sanitize(get_post_meta($c, 'vibe_quiz_questions', false)); } $total_marks += array_sum($questions['marks']); } } } do_action('wplms_submit_course', $post->ID, $user_id); // Apply Filters on Auto Evaluation $student_marks = apply_filters('wplms_course_student_marks', $student_marks, $id, $user_id); $total_marks = apply_filters('wplms_course_maximum_marks', $total_marks, $id, $user_id); if (!$total_marks) { $total_marks = $student_marks = 1; } // Avoid the Division by Zero Error $marks = round($student_marks * 100 / $total_marks); $return .= '<div class="message" class="updated"><p>' . __('COURSE EVALUATED ', 'vibe') . '</p></div>'; $badge_per = get_post_meta($id, 'vibe_course_badge_percentage', true); $passing_cert = get_post_meta($id, 'vibe_course_certificate', true); // Certificate Enable $passing_per = get_post_meta($id, 'vibe_course_passing_percentage', true); // Certificate Passing Percentage //finish bit for student 1.8.4 update_user_meta($user_id, 'course_status' . $id, 3); //end finish bit do_action('wplms_evaluate_course', $id, $marks, $user_id, 1); $badge_filter = 0; if (isset($badge_per) && $badge_per && $marks >= $badge_per) { $badge_filter = 1; } $badge_filter = apply_filters('wplms_course_student_badge_check', $badge_filter, $course_id, $user_id, $marks, $badge_per); if ($badge_filter) { $badges = array(); $badges = vibe_sanitize(get_user_meta($user_id, 'badges', false)); if (isset($badges) && is_array($badges)) { $badges[] = $id; } else { $badges = array($id); } update_user_meta($user_id, 'badges', $badges); $b = bp_get_course_badge($id); $badge = wp_get_attachment_info($b); $badge_url = wp_get_attachment_image_src($b); if (isset($badge) && is_numeric($b)) { $return .= '<div class="congrats_badge">' . __('Congratulations ! You\'ve earned the ', 'vibe') . ' <strong>' . get_post_meta($id, 'vibe_course_badge_title', true) . '</strong> ' . __('Badge', 'vibe') . '<a class="tip ajax-badge" data-course="' . get_the_title($id) . '" title="' . get_post_meta($id, 'vibe_course_badge_title', true) . '"><img src="' . $badge_url[0] . '" title="' . $badge['title'] . '"/></a></div>'; } do_action('wplms_badge_earned', $id, $badges, $user_id, $badge_filter); } $passing_filter = 0; if (vibe_validate($passing_cert) && isset($passing_per) && $passing_per && $marks >= $passing_per) { $passing_filter = 1; } $passing_filter = apply_filters('wplms_course_student_certificate_check', $passing_filter, $course_id, $user_id, $marks, $passing_per); if ($passing_filter) { $pass = array(); $pass = vibe_sanitize(get_user_meta($user_id, 'certificates', false)); if (isset($pass) && is_array($pass)) { $pass[] = $id; } else { $pass = array($id); } update_user_meta($user_id, 'certificates', $pass); $return .= '<div class="congrats_certificate">' . __('Congratulations ! You\'ve successfully passed the course and earned the Course Completion Certificate !', 'vibe') . '<a href="' . bp_get_course_certificate('user_id=' . $user_id . '&course_id=' . $id) . '" class="ajax-certificate right"><span>' . __('View Certificate', 'vibe') . '</span></a></div>'; do_action('wplms_certificate_earned', $id, $pass, $user_id, $passing_filter); } update_post_meta($id, $user_id, $marks); $course_end_status = apply_filters('wplms_course_status', 4); update_user_meta($user_id, 'course_status' . $id, $course_end_status); //EXCEPTION $message = sprintf(__('You\'ve obtained %s in course %s ', 'vibe'), apply_filters('wplms_course_marks', $marks . '/100'), ' <a href="' . get_permalink($id) . '">' . get_the_title($id) . '</a>'); $return .= '<div class="congrats_message">' . $message . '</div>'; } else { $return .= '<div class="message" class="updated"><p>' . __('COURSE SUBMITTED FOR EVALUATION', 'vibe') . '</p></div>'; bp_course_update_user_course_status($user_id, $id, 2); // 2 determines Course is Complete do_action('wplms_submit_course', $post->ID, $user_id); } // Show the Generic Course Submission $content = get_post_meta($id, 'vibe_course_message', true); $return .= apply_filters('the_content', $content); $return = apply_filters('wplms_course_finished', $return); } else { $type = get_post_type($flag); switch ($type) { case 'unit': $type = __('UNIT', 'vibe'); break; case 'assignment': $type = __('ASSIGNMENT', 'vibe'); break; case 'quiz': $type = __('QUIZ', 'vibe'); break; } //Default for other customized options $message = __('PLEASE COMPLETE THE ', 'vibe') . $type . ' : ' . get_the_title($flag); $return .= '<div class="message"><p>' . apply_filters('wplms_unfinished_unit_quiz_message', $message, $flag) . '</p></div>'; } } else { $retun .= __('COURSE CURRICULUM NOT SET', 'vibe'); } $return .= '</div>'; return $return; }
$user_id = get_current_user_id(); $user_courses = get_posts('post_type=course&numberposts=999&meta_key=' . $user_id); echo '<ul id="userstats">'; foreach ($user_courses as $course) { $course_complete_status = get_user_meta($user_id, 'course_status' . $course->ID, true); $user_course_status = get_user_meta($user_id, $course->ID, true); $cavg = get_post_meta($course->ID, 'average', true); if (!$cavg) { $cavg = __('N/A', 'vibe'); } echo '<li> <div class="course_avatar">' . bp_course_get_avatar("id={$course->ID}&size=thumbnail") . '</div> <h4>' . bp_course_get_course_title("id={$course->ID}") . '</a><span><br />' . __('AVERAGE PERCENTAGE : ', 'vibe') . '<span>' . $cavg . '</span></span></h4>'; if ($course_complete_status > 3) { //$curriculum=vibe_sanitize(get_post_meta($course->ID,'vibe_course_curriculum',false)); $curriculum = bp_course_get_curriculum_units($course->ID); $average = array(); echo '<a class="showhide_indetails"><i class="icon-plus-1"></i></a>'; $retakes = apply_filters('wplms_course_retake_count', get_post_meta($course->ID, 'vibe_course_retakes', true), $course->ID, $user_id); if (isset($retakes) && $retakes) { global $bp; $table_name = $bp->activity->table_name; $course_retakes = $wpdb->get_results($wpdb->prepare("\n\t\t\t\t\t\tSELECT activity.content FROM {$table_name} AS activity\n\t\t\t\t\t\tWHERE \tactivity.component \t= 'course'\n\t\t\t\t\t\tAND \tactivity.type \t= 'retake_course'\n\t\t\t\t\t\tAND \tuser_id = %d\n\t\t\t\t\t\tAND \titem_id = %d\n\t\t\t\t\t\tORDER BY date_recorded DESC\n\t\t\t\t\t", $user_id, $course->ID)); if ($retakes - count($course_retakes) > 0) { echo '<form method="post" action="' . get_permalink($course->ID) . '">'; echo '<a class="retake_submit tip" title="' . __('Number of retakes remaining', 'vibe') . ' : ' . ($retakes - count($course_retakes)) . __(' out of ', 'vibe') . $retakes . '"><i class="icon-reload"></i></a>'; wp_nonce_field('retake' . $user_id, 'security'); echo '</form>'; } } // END Retakes
function wplms_course_progressbar($course_id, $unit_id) { $user_id = get_current_user_id(); $course_progressbar = vibe_get_option('course_progressbar'); if (!isset($course_progressbar) || !$course_progressbar) { return; } $units = bp_course_get_curriculum_units($course_id); $total_units = count($units); $key = array_search($unit_id, $units); $meta = get_user_meta($user_id, $unit_id, true); if (isset($meta) && $meta) { $key++; } if (!$total_units) { $total_units = 1; } $percentage = round($key / $total_units * 100); // Indexes are less than the count value if ($percentage > 100) { $percentage = 100; } $unit_increase = round(1 / $total_units * 100); echo "<script>\n jQuery(document).ready(function(\$){\n \$('.course_progressbar').each(function(){\n var cookie_id = 'course_progress'+" . $course_id . ";\n if(\$.cookie(cookie_id)!= null){\n \$(this).attr('data-value',\$.cookie(cookie_id));\n \$(this).find('.bar').css('width',\$.cookie(cookie_id)+'%');\n \$(this).find('.bar span').text(\$.cookie(cookie_id)+'%');\n }\n });\n });\n </script>"; echo '<div class="progress course_progressbar" data-increase-unit="' . $unit_increase . '" data-value="' . $percentage . '"> <div class="bar animate cssanim stretchRight load" style="width: ' . $percentage . '%;"><span>' . $percentage . '%</span></div> </div>'; }
function unit_key($key, $unit_id, $course_id) { if ($unit_id == $_POST['load_unit']) { $units = bp_course_get_curriculum_units($course_id); $key = array_search($unit_id, $units); $key++; } return $key; }
function get_unit_content() { $course_id = $_POST['course_id']; $unit_id = $_POST['unit_id']; ?> <div id="unit_load<?php echo $unit_id; ?> "> <?php if (!is_numeric($unit_id) || !is_numeric($course_id)) { _e('Invalid Course or Unit ID'); echo '</div>'; die; } $curriculum = bp_course_get_curriculum_units($course_id); if (!in_Array($unit_id, $curriculum)) { _e('Unit not found in Course'); echo '</div>'; die; } $course_unit_content = get_post_meta($course_id, 'vibe_course_unit_content', true); if (vibe_validate($course_unit_content)) { $post = get_post($unit_id); if ($post->post_type == 'unit') { ?> <div class="content"> <h2><?php echo $post->post_title; ?> </h2> <h5><?php echo get_post_meta($post->ID, 'vibe_subtitle', true); ?> </h5> <?php echo apply_filters('the_content', $post->post_content); ?> </div> <?php } } ?> </div> <?php die; }
function student_quiz_retake($args = NULL) { $defaults = array('quiz_id' => get_the_ID(), 'user_id' => get_current_user_id()); $params = wp_parse_args($args, $defaults); extract($params, EXTR_SKIP); if (!isset($user_id) || !$user_id) { wp_die(__(' Incorrect User selected.', 'vibe'), __('Security Error', 'vibe'), array('back_link' => true)); } delete_user_meta($user_id, $quiz_id); delete_post_meta($quiz_id, $user_id); // Optional validates that user can retake the quiz $questions = vibe_sanitize(get_post_meta($quiz_id, 'quiz_questions' . $user_id, false)); if (!isset($questions) || !is_array($questions)) { // Fallback for Older versions $questions = vibe_sanitize(get_post_meta($quiz_id, 'vibe_quiz_questions', false)); } else { delete_post_meta($quiz_id, 'quiz_questions' . $user_id); } foreach ($questions['ques'] as $question) { global $wpdb; $wpdb->query($wpdb->prepare("UPDATE {$wpdb->comments} SET comment_approved='trash' WHERE comment_post_ID=%d AND user_id=%d", $question, $user_id)); } $course_id = get_post_meta($quiz_id, 'vibe_quiz_course', true); if (!empty($course_id)) { // Course progressbar fix for single quiz $curriculum = bp_course_get_curriculum_units($course_id); $per = round(100 / count($curriculum), 2); $progress = get_user_meta($user_id, 'progress' . $course_id, true); if (empty($progress)) { $progress = 0; } $new_progress = $progress - $per; if ($new_progress < 0) { $new_progress = 0; } update_user_meta($user_id, 'progress' . $course_id, $new_progress); setcookie('course_progress' . $course_id, $new_progress, 3600, '/'); } do_action('wplms_quiz_retake', $quiz_id, $user_id); }
function incourse_submit_quiz() { $quiz_id = $_POST['quiz_id']; if (!isset($_POST['security']) || !wp_verify_nonce($_POST['security'], 'security') || !is_numeric($quiz_id)) { _e('Security check Failed. Contact Administrator.', 'vibe'); die; } $user_id = get_current_user_id(); $access = get_user_meta($user_id, $quiz_id, true); if (!isset($access) || !is_numeric($access)) { _e('Invalid submission time.', 'vibe'); die; } $get_questions = vibe_sanitize(get_post_meta($quiz_id, 'quiz_questions' . $user_id, false)); if (!is_array($get_questions) || !is_array($get_questions['ques']) || !is_array($get_questions['marks'])) { _e('Questions not set.', 'vibe'); die; } $answers = json_decode(stripslashes($_POST['answers'])); foreach ($answers as $answer) { $data = apply_filters('wplms_add_in_quiz_question_answer', array('comment_post_ID' => $answer->id, 'comment_content' => $answer->value, 'comment_type' => '', 'user_id' => $user_id, 'comment_approved' => 1)); wp_insert_comment($data); } update_user_meta($user_id, $quiz_id, time()); update_post_meta($quiz_id, $user_id, 0); do_action('wplms_submit_quiz', $quiz_id, $user_id); bp_course_quiz_auto_submit($quiz_id, $user_id); $get_message = trim(get_post_meta($quiz_id, 'vibe_quiz_message', true)); $course_id = get_post_meta($quiz_id, 'vibe_quiz_course', true); $nextunit_access = vibe_get_option('nextunit_access'); $flag = apply_filters('wplms_next_unit_access', true, $quiz_id); if (is_numeric($course_id) && $nextunit_access && $flag) { $curriculum = bp_course_get_curriculum_units($course_id); $key = array_search($quiz_id, $curriculum); if ($key <= count($curriculum) - 1) { // Check if not the last unit $key++; echo $curriculum[$key] . '##'; } } echo ' '; echo apply_filters('the_content', $get_message); die; }
function wplms_course_progressbar($course_id, $unit_id) { $user_id = get_current_user_id(); $course_progressbar = vibe_get_option('course_progressbar'); if (!isset($course_progressbar) || !$course_progressbar) { return; } $key = 'course_progressbar' . $course_id; $percentage = get_user_meta($user_id, $key, true); if (empty($percentage)) { $units = bp_course_get_curriculum_units($course_id); $total_units = count($units); $key = array_search($unit_id, $units); $meta = get_user_meta($user_id, $unit_id, true); if (isset($meta) && $meta) { $key++; } if (!$total_units) { $total_units = 1; } $percentage = round($key / $total_units * 100, 2); // Indexes are less than the count value } if ($percentage > 100) { $percentage = 100; } $unit_increase = round(1 / $total_units * 100, 2); echo '<div class="progress course_progressbar" data-increase-unit="' . $unit_increase . '" data-value="' . $percentage . '"> <div class="bar animate cssanim stretchRight load" style="width: ' . $percentage . '%;"><span>' . $percentage . '%</span></div> </div>'; }
function submit_quiz() { $quiz_id = $_POST['quiz_id']; $user_id = get_current_user_id(); $access = get_user_meta($user_id, $quiz_id, true); if (!isset($access) || !is_numeric($access)) { _e('Invalid submission time.', 'vibe'); die; } $get_questions = vibe_sanitize(get_post_meta($quiz_id, 'quiz_questions' . $user_id, false)); if (!is_array($get_questions) || !is_array($get_questions['ques']) || !is_array($get_questions['marks'])) { _e('Questions not set.', 'vibe'); die; } $answers = json_decode(stripslashes($_POST['answers'])); $flag = apply_filters('bp_course_quiz_insert_query', 1, $quiz_id, $answers); if ($flag && !empty($answers)) { $values = ''; foreach ($answers as $answer) { $values .= "(" . $answer->id . ",'" . $answer->value . "'," . $user_id . ",1),"; } $finalvalues = rtrim($values, ','); global $wpdb; $wpdb->query("INSERT INTO {$wpdb->comments}(comment_post_ID,comment_content,user_id,comment_approved) VALUES {$finalvalues}"); } update_user_meta($user_id, $quiz_id, time()); update_post_meta($quiz_id, $user_id, 0); do_action('wplms_submit_quiz', $quiz_id, $user_id); $course_id = get_post_meta($quiz_id, 'vibe_quiz_course', true); if (!empty($course_id)) { // Course progressbar fix for single quiz $curriculum = bp_course_get_curriculum_units($course_id); $per = round(100 / count($curriculum), 2); $progress = get_user_meta($user_id, 'progress' . $course_id, true); if (empty($progress)) { $progress = 0; } $new_progress = $progress + $per; if ($new_progress > 100) { $new_progress = 100; } update_user_meta($user_id, 'progress' . $course_id, $new_progress); echo '<script>jQuery(document).ready(function(){jQuery.cookie("course_progress' . $course_id . '","' . $new_progress . '", { expires: 1 ,path: "/"});});</script>'; } bp_course_quiz_auto_submit($quiz_id, $user_id); die; }