Пример #1
0
 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;
}
Пример #3
0
$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
Пример #4
0
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>';
}
Пример #5
0
 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;
 }
Пример #6
0
    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);
 }
Пример #8
0
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;
}
Пример #9
0
    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;
 }