function savedquest_options() { if (!current_user_can('manage_options')) { wp_die(__('You do not have sufficient permissions to access this page.')); } echo '<div class="wrap" style="background:#fff;">'; if (isset($_GET['tab'])) { $tab = $_GET['tab']; } else { $tab = ""; } saved_admin_tab($tab); if ($tab == "quiztaken" or $tab == "") { ?> <table class="wp-list-table widefat fixed striped pages" width="100%" style="border-spacing: 0; text-align:center;" > <tr> <th>Lesson ID</th> <th>Lesson Title</th> <th>Number Of Questions</th> <th>Question Answered</th> <th>Unanswered Question</th> <th>User</th> <th>User Id</th> <th>DATE And Time</th> </tr> <?php $svequiz = get_option('savequiz_list'); ?> <?php foreach ($svequiz as $quizdata) { ?> <tr> <td><?php echo $quizdata['lesson_id']; ?> </td> <td><?php echo $quizdata['lesson_title']; ?> </td> <td><?php echo $quizdata['total_questtion']; ?> </td> <td><?php echo $quizdata['question_answered']; ?> (<?php echo get_percentage($quizdata['total_questtion'], $quizdata['question_answered']) . "%"; ?> )</td> <td><?php echo $quizdata['remaining_question']; ?> (<?php echo 100 - get_percentage($quizdata['total_questtion'], $quizdata['question_answered']) . "%"; ?> )</td> <td><?php echo $quizdata['fullname']; ?> </td> <td><?php echo $quizdata['user_id']; ?> </td> <td><?php echo $quizdata['DATETIME']; ?> </td> </tr> <?php } ?> </table> <?php } elseif ($tab == "timesession") { $user_last_login_logout = get_option('user_last_login_logout'); ?> <br /><br/> <table class="wp-list-table widefat fixed striped pages" width="100%" style="border-spacing: 0; text-align:center;" > <tr> <th>User ID</th> <th>Full Name</th> <th>Last Login</th> <th>Last Logout</th> <th>Amout of Time Spent</th> <th>Role</th> </tr> <?php $svequiz = get_option('savequiz_list'); ?> <?php foreach ($user_last_login_logout as $last_login_logout) { ?> <?php if ($last_login_logout['user_id'] != "") { ?> <?php $user_info = get_userdata($last_login_logout['user_id']); ?> <tr> <td><?php echo $last_login_logout['user_id']; ?> </td> <td><?php echo $user_info->display_name; ?> </td> <td><?php echo gettime_st($last_login_logout['logintime']); ?> </td> <td><?php echo gettime_st($last_login_logout['logouttime']); ?> </td> <?php if ($last_login_logout['logouttime'] != "") { $date1 = date_create($last_login_logout['logintime']); $date2 = date_create($last_login_logout['logouttime']); $diff = date_diff($date1, $date2); $diftime = $diff->format("%h Hours %i Minute %s Seconds"); } else { $diftime = ""; } ?> <th><?php echo $diftime; ?> </th> <td><?php echo implode(', ', $user_info->roles); ?> </td> </tr> <?php } ?> <?php } ?> </table><br /><br /> <?php } elseif ($tab == "timequizecompleted") { global $woothemes_sensei, $post, $current_user, $wp_query, $learner_user; echo "<table class='wp-list-table widefat fixed striped pages'>"; $allUsers = get_users(); echo "<tr>\r\r\n\t\t\t\t<th>User</th>\r\r\n\t\t\t\t<th>Courses</th>\r\r\n\t\t\t\t<th>Percentage Incomplete</th>\r\r\n\t\t\t\t<th>Percentage Complete</th>\r\r\n\t\t\t\t<th>Percentage Competent</th>\r\r\n\t\t\t\t<th>Percentage Attempted</th>\r\r\n\t\t\t\t<th>Length of time Course Completed</th>\r\r\n\t\t\t </tr>"; foreach ($allUsers as $user) { $args = array('post_type' => 'course'); $courses = get_posts($args); $i = 1; foreach ($courses as $course) { $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($course->ID, $user->ID); $course_status = WooThemes_Sensei_Utils::user_course_status($course->ID, $user->ID); $course_status_update = get_comment_meta($course_status->comment_ID); if (!empty($course_status)) { $displayed_lessons = array(); $modules = Sensei()->modules->get_course_modules(intval($course->ID)); foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($course->ID), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); if (count($lessons) > 0) { $html .= '<h3>' . $module->name . '</h3>' . "\n"; $count = 0; foreach ($lessons as $lesson_item) { $lesson_grade = ' n/a'; $has_questions = get_post_meta($lesson_item->ID, '_quiz_has_questions', true); if ($has_questions) { $lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $user->ID); // Get user quiz grade $lesson_grade = get_comment_meta($lesson_status->comment_ID, 'grade', true); if ($lesson_grade) { $lesson_grade .= '%'; } $modulequizdata = get_comment_meta($lesson_status->comment_ID); //echo "<a href='".get_post_permalink($lesson_item->ID)."'>".$lesson_item->post_title."</a><br />"; $modulequestion_asked = count(explode(",", $modulequizdata['questions_asked'][0])); $moduleanswered_quiz = count(unserialize($modulequizdata['quiz_answers'][0])); //echo "number of questions:".$modulequestion_asked."<br />"; //echo "number of Answered:".$moduleanswered_quiz."<br />"; if ($course_status->comment_approved == "complete") { $attempted = "(100%)"; } else { if ($modulequizdata['grade'][0] == "") { if ($lesson_status->comment_approved == "passed") { $attempted = 'P/Q'; } else { if ($modulequestion_asked >= $moduleanswered_quiz) { if ($modulequizdata['quiz_answers'][0] == "") { $attempted = ""; } else { $attempted = "( " . get_percentage($modulequestion_asked, $moduleanswered_quiz) . "% ) Saved"; } } } } else { $attempted = "( " . get_percentage($modulequestion_asked, $moduleanswered_quiz) . "% )"; } //echo "<pre>"; //echo "Attempted:".$attempted."<br />"; //echo $user->user_email."<br />"; //echo $modulequizdata['grade'][0]."<br />"; //echo $modulequizdata['quiz_answers'][0]."<br />"; //print_r($lesson_status); //echo "</pre>"; } } $html .= '<a href="' . esc_url(get_permalink($lesson_item->ID)) . '" title="' . esc_attr(sprintf(__('Start %s', 'woothemes-sensei'), $lesson_item->post_title)) . '">' . esc_html(sprintf(__('%s', 'woothemes-sensei'), $lesson_item->post_title)) . '</a> ' . $attempted . '<br />'; $displayed_lessons[] = $lesson_item->ID; } } } $args = array('post_type' => 'lesson', 'posts_per_page' => -1, 'suppress_filters' => 0, 'meta_key' => '_order_' . $course->ID, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($course->ID))), 'post__not_in' => $displayed_lessons); $lessons = get_posts($args); //echo "Number of lesson in a course: ".count($lessons); if (0 < count($lessons)) { $html .= '<h3>' . __('Other Lessons', 'woothemes-sensei') . '</h3>' . "\n"; } if ($course_status_update['percent'][0] == 100) { $date1 = date_create($course_status_update['start'][0]); $date2 = date_create($course_status->comment_date); $diff = date_diff($date1, $date2); $diftime = $diff->format("%h Hours %i Minute %s Seconds"); } else { $diftime = "course not completed yet."; } $allcourseid[] = $course->ID; $incomplete = 100 - $course_status_update['percent'][0]; echo "<tr><td>"; echo $user->user_email; echo "</td>"; echo "<td>"; echo "<a href='" . get_post_permalink($course->ID) . "'>" . $course->post_title . "</a>"; echo "</td>"; echo "<td>"; echo $incomplete . "%"; echo "</td>"; echo "<td>"; echo $course_status_update['percent'][0] . "%"; echo "</td>"; echo "<td>"; echo $course_user_grade . "%"; echo "</td>"; echo "<td>"; echo $html; $html = ""; foreach ($lessons as $lesson_item) { $lesson_grade = 'n/a'; $has_questions = get_post_meta($lesson_item->ID, '_quiz_has_questions', true); if ($has_questions) { $lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $user->ID); // Get user quiz grade $lesson_grade = get_comment_meta($lesson_status->comment_ID, 'grade', true); if ($lesson_grade) { $lesson_grade .= '%'; } } $quizdata = get_comment_meta($lesson_status->comment_ID); //echo "<h1>Comment</h1>"; //print_r(get_comment_meta( $lesson_status->comment_ID )); //echo "<h1>LESSON STATUS</h1>"; //print_r($lesson_status); echo "<a href='" . get_post_permalink($lesson_item->ID) . "'>" . $lesson_item->post_title . "</a> "; //print_r($quizdata); $question_asked = count(explode(",", $quizdata['questions_asked'][0])); $answered_quiz = count(unserialize($quizdata['quiz_answers'][0])); if ($quizdata['grade'][0] == "") { if ($question_asked > $answered_quiz) { echo "( " . get_percentage($question_asked, $answered_quiz) . "% )"; } } else { echo "(100%)"; } echo '<br />'; } // End For Loop echo "</td>"; echo "<td>"; echo $diftime; echo "</td>"; echo "</tr>"; //echo $course->post_title." (".$course_status_update['percent'][0]."% Complete) (". $incomplete . "% incomplete) (". $course_user_grade . "% Competent)<br />"; $i++; } } } echo "</table>"; } elseif ($tab == "threshold") { //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submittreshold']) && ($_POST['submittreshold'] = "submit")) { // declare users and variables $allUsers = get_users(); $modules_completed = $_POST['completionpermonth']; $courseid = $_POST['course']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name ')); //user loop ----- loop user get the groups and course the course they take foreach ($allUsers as $user) { //declare course function calls $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->ID); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->ID); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->ID); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->ID); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); //get the user groups $useringroup = new Groups_User($user->ID); $user_groups = $useringroup->__get('groups'); $displayed_lessons = array(); //declare and get module values $modules = Sensei()->modules->get_course_modules(intval($courseid)); $modules_content = Sensei()->modules->course_module_content(intval($courseid)); //echo "<pre>"; //echo $user->user_email."<br />"; //echo "sensei_user_course_status_message: "; //print_r($course_status); //echo "<br />"; //echo "started_course: "."<br />"; $course_status_info['start'][0]; $datenow = date('Y-m-d h:i:s'); $date1 = date_create($course_status_info['start'][0]); $date2 = date_create($datenow); $diff = date_diff($date1, $date2); $diftime = $diff->format("%m"); if ($diftime < 1) { $diftime = 1; } //echo "</pre>"; //module loop per user foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($courseid), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); $num_of_lesson = count($lessons); //lessson loop per user foreach ($lessons as $lesson_item) { $is_lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_item->ID, $user->ID); if ($is_lesson_completed == 1) { $lesson_completed[] = $is_lesson_completed; } } //echo "lesson completed:". count($lesson_completed)."<br />"; if (count($lesson_completed) > 0) { if ($num_of_lesson == count($lesson_completed)) { $completed_modules_per_user[] = 1; $total_module_passed[] = 1; //echo "---Module completed <br />"; } else { //echo "---Module not completed <br />"; } } else { //echo "---Module not completed <br />"; } unset($lesson_completed); unset($completed_modules_per_user); } $overaalltotal_module_passed = count($total_module_passed); //echo $overaalltotal_module_passed . " module being passed"; //loop throughout the user group under a user if (is_array($user_groups)) { foreach ($user_groups as $user_group) { if ($user_group->group_id == $_POST['group']) { if (!empty($user_course_status)) { $modules_completed_from_groups = $user_group->description; if ($modules_completed == "") { $modules_completed = $modules_completed_from_groups; } $num_of_module_x_difftime = $modules_completed * $diftime; //echo "<br />num_of_module_x_difftime:".$num_of_module_x_difftime; if ($overaalltotal_module_passed >= $num_of_module_x_difftime) { $array_to_csv[] = array($user->display_name, $course_name); //$userid_within_group[$user->user_email] = $user->ID; } } } //echo $user_group->group_id."<br />"; } } unset($total_module_passed); } //echo "<pre>"; //echo $modules_completed; //print_r($array_to_csv); //echo "</pre>"; convert_to_csv($array_to_csv, 'report-' . md5(date('Y-m-d h:i:s')) . '.csv', ','); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_groups_group`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->group_id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div> <div> <label> How many modules should be completed by now? </label> <input type="text" name="completionpermonth" /> </div><br /><br /> <input type="submit" class="button button-primary" name="submittreshold" value="submit" /> </form> </div> <?php } elseif ($tab == "incremental-progress") { wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css'); //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submitincrenmental']) && ($_POST['submitincrenmental'] = "submit")) { // declare users and variables $allUsers = get_users(); $modules_completed = $_POST['completionpermonth']; $courseid = $_POST['course']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name ', 'Lesson Title')); //user loop ----- loop user get the groups and course the course they take foreach ($allUsers as $user) { //declare course function calls $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->ID); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->ID); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->ID); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->ID); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); //get the user groups $useringroup = new Groups_User($user->ID); $user_groups = $useringroup->__get('groups'); $displayed_lessons = array(); //declare and get module values $modules = Sensei()->modules->get_course_modules(intval($courseid)); $modules_content = Sensei()->modules->course_module_content(intval($courseid)); $course_status_info['start'][0]; $datenow = date('Y-m-d h:i:s'); $date1 = date_create($course_status_info['start'][0]); $date2 = date_create($datenow); $diff = date_diff($date1, $date2); $diftime = $diff->format("%m"); if ($diftime < 1) { $diftime = 1; } //echo "</pre>"; //module loop per user foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($courseid), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); $num_of_lesson = count($lessons); //lessson loop per user foreach ($lessons as $lesson_item) { $is_lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_item->ID, $user->ID); $lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $user->ID); $modulequizdata = get_comment_meta($lesson_status->comment_ID); if (!empty($lesson_status->comment_date)) { echo "<pre>"; //echo $lesson_status->comment_date."<br />"; //echo $_POST['date1']."<br />"; $lesson_completion_date = date("Y-m-d", strtotime($lesson_status->comment_date)); //echo "<br />"; //echo $_POST['date2']."<br />"; //echo "lesson is completed:".$is_lesson_completed."<br />"; //print_r($lesson_item); echo "</pre>"; } if ($is_lesson_completed == 1) { $date1 = strtotime($_POST['date1']); $date2 = strtotime($_POST['date2']); $lesson_completion_date_str = strtotime($lesson_completion_date); if ($lesson_completion_date_str > $date1 && $lesson_completion_date_str < $date2) { //echo "lesson is completed:".$is_lesson_completed."<br />"; //echo "user ".$user->display_name." pass this". $lesson_completion_date; $user_id_onrange[$user->ID] = $lesson_item->post_title; } } } //echo "lesson completed:". count($lesson_completed)."<br />"; } //loop throughout the user group under a user if (is_array($user_groups)) { foreach ($user_groups as $user_group) { if ($user_group->group_id == $_POST['group']) { if (!empty($user_course_status)) { if (array_key_exists($user->ID, $user_id_onrange)) { $array_to_csv[] = array($user->display_name, $course_name, $user_id_onrange[$user->ID]); } } } //echo $user_group->group_id."<br />"; } } } //print_r($user_id_onrange); //echo "<pre>"; //echo $modules_completed; //print_r($array_to_csv); //echo "</pre>"; convert_to_csv($array_to_csv, 'report-incremental-progress' . md5(date('Y-m-d h:i:s')) . '.csv', $headers); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_groups_group`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->group_id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div><br /> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div><br /> <div> <label> Date: </label> From<input type="text" id="date1" name="date1" /> to <input type="text" id="date2" name="date2" /> </div><br /><br /> <input type="submit" class="button button-primary" name="submitincrenmental" value="submit" /> </form> </div> <script> jQuery(document).ready(function() { jQuery('#date1').datepicker({ dateFormat : 'yy-mm-dd' }); jQuery('#date2').datepicker({ dateFormat : 'yy-mm-dd' }); }); </script> <?php } elseif ($tab == "total-progress") { //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submittotalprogress']) && ($_POST['submittotalprogress'] = "submit")) { // declare users and variables $allUsers = get_users(); $modules_completed = $_POST['completionpermonth']; $courseid = $_POST['course']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name', 'Lesson Title')); //user loop ----- loop user get the groups and course the course they take foreach ($allUsers as $user) { //declare course function calls $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->ID); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->ID); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->ID); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->ID); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); //get the user groups $useringroup = new Groups_User($user->ID); $user_groups = $useringroup->__get('groups'); $displayed_lessons = array(); //declare and get module values $modules = Sensei()->modules->get_course_modules(intval($courseid)); $modules_content = Sensei()->modules->course_module_content(intval($courseid)); //echo "<pre>"; //echo $user->user_email."<br />"; //echo "sensei_user_course_status_message: "; //print_r($course_status); //echo "<br />"; //echo "started_course: "."<br />"; $course_status_info['start'][0]; $datenow = date('Y-m-d h:i:s'); $date1 = date_create($course_status_info['start'][0]); $date2 = date_create($datenow); $diff = date_diff($date1, $date2); $diftime = $diff->format("%m"); if ($diftime < 1) { $diftime = 1; } //echo "</pre>"; //module loop per user foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($courseid), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); $num_of_lesson = count($lessons); //lessson loop per user foreach ($lessons as $lesson_item) { $is_lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_item->ID, $user->ID); if ($is_lesson_completed == 1) { $lesson_taken[$user->ID][] = $lesson_item->post_title; } } } $overaalltotal_module_passed = count($total_module_passed); //echo $overaalltotal_module_passed . " module being passed"; //loop throughout the user group under a user if (is_array($user_groups)) { foreach ($user_groups as $user_group) { if ($user_group->group_id == $_POST['group']) { if (!empty($user_course_status)) { $array_to_csv[] = array($user->display_name, $course_name, join("|", $lesson_taken[$user->ID])); //$userid_within_group[$user->user_email] = $user->ID; } } //echo $user_group->group_id."<br />"; } } //echo "<pre>"; //print_r($lesson_taken); //echo "<pre>"; unset($total_module_passed); unset($lesson_taken); } //echo "<pre>"; //echo $modules_completed; //print_r($array_to_csv); //echo "</pre>"; convert_to_csv($array_to_csv, 'report-total-progress' . md5(date('Y-m-d h:i:s')) . '.csv', ','); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_groups_group`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->group_id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div> <br /><br /> <input type="submit" class="button button-primary" name="submittotalprogress" value="submit" /> </form> </div> <?php } echo '</div>'; }
/** * Display the single course modules content * * @since 1.8.0 * @return void */ public function course_module_content() { global $post; $course_id = $post->ID; $modules = $this->get_course_modules($course_id); // Display each module foreach ($modules as $module) { echo '<article class="post module">'; // module title link $module_url = esc_url(add_query_arg('course_id', $course_id, get_term_link($module, $this->taxonomy))); echo '<header><h2><a href="' . esc_url($module_url) . '">' . $module->name . '</a></h2></header>'; echo '<section class="entry">'; $module_progress = false; if (is_user_logged_in()) { global $current_user; wp_get_current_user(); $module_progress = $this->get_user_module_progress($module->term_id, $course_id, $current_user->ID); } if ($module_progress && $module_progress > 0) { $status = __('Completed', 'woothemes-sensei'); $class = 'completed'; if ($module_progress < 100) { $status = __('In progress', 'woothemes-sensei'); $class = 'in-progress'; } echo '<p class="status module-status ' . esc_attr($class) . '">' . $status . '</p>'; } if ('' != $module->description) { echo '<p class="module-description">' . $module->description . '</p>'; } $lessons = $this->get_lessons($course_id, $module->term_id); if (count($lessons) > 0) { $lessons_list = ''; foreach ($lessons as $lesson) { $status = ''; $lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson->ID, get_current_user_id()); $title = esc_attr(get_the_title(intval($lesson->ID))); if ($lesson_completed) { $status = 'completed'; } $lessons_list .= '<li class="' . $status . '"><a href="' . esc_url(get_permalink(intval($lesson->ID))) . '" title="' . esc_attr(get_the_title(intval($lesson->ID))) . '">' . apply_filters('sensei_module_lesson_list_title', $title, $lesson->ID) . '</a></li>'; // Build array of displayed lesson for exclusion later $displayed_lessons[] = $lesson->ID; } ?> <section class="module-lessons"> <header> <h3><?php _e('Lessons', 'woothemes-sensei'); ?> </h3> </header> <ul> <?php echo $lessons_list; ?> </ul> </section> <?php } //end count lessons ?> </section> </article> <?php } // end each module }
function sensei_has_user_completed_lesson($post_id = 0, $user_id = 0) { _deprecated_function(__FUNCTION__, '1.7', "WooThemes_Sensei_Utils::user_completed_lesson()"); return WooThemes_Sensei_Utils::user_completed_lesson($post_id, $user_id); }
<?php do_action('sensei_lesson_image', $post->ID); ?> <?php do_action('sensei_lesson_single_title'); ?> <?php $view_lesson = true; wp_get_current_user(); $lesson_prerequisite = absint(get_post_meta($post->ID, '_lesson_prerequisite', true)); if ($lesson_prerequisite > 0) { // Check for prerequisite lesson completions $view_lesson = WooThemes_Sensei_Utils::user_completed_lesson($lesson_prerequisite, $current_user->ID); } $lesson_course_id = get_post_meta($post->ID, '_lesson_course', true); $user_taking_course = WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID); if (current_user_can('administrator')) { $view_lesson = true; $user_taking_course = true; } $is_preview = false; if (WooThemes_Sensei_Utils::is_preview_lesson($post->ID)) { $is_preview = true; $view_lesson = true; } if ($view_lesson) { ?>
/** * Checks how many lessons are completed * * @since 1.8.0 * * @param int $course_id * @param int $user_id * @return array $completed_lesson_ids */ public function get_completed_lesson_ids($course_id, $user_id = 0) { if (!intval($user_id) > 0) { $user_id = get_current_user_id(); } $completed_lesson_ids = array(); $course_lessons = $this->course_lessons($course_id); foreach ($course_lessons as $lesson) { $is_lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson->ID, $user_id); if ($is_lesson_completed) { $completed_lesson_ids[] = $lesson->ID; } } return $completed_lesson_ids; }
public function sensei_quiz_action_buttons() { global $post, $current_user, $woothemes_sensei; $lesson_id = (int) get_post_meta($post->ID, '_quiz_lesson', true); $lesson_course_id = (int) get_post_meta($lesson_id, '_lesson_course', true); $lesson_prerequisite = (int) get_post_meta($lesson_id, '_lesson_prerequisite', true); $show_actions = true; $user_lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_id, $current_user->ID); //setup quiz grade $user_quiz_grade = ''; if (!empty($user_lesson_status)) { $user_quiz_grade = get_comment_meta($user_lesson_status->comment_ID, 'grade', true); } if (intval($lesson_prerequisite) > 0) { // If the user hasn't completed the prereq then hide the current actions $show_actions = WooThemes_Sensei_Utils::user_completed_lesson($lesson_prerequisite, $current_user->ID); } if ($show_actions && is_user_logged_in() && WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID)) { // Get Reset Settings $reset_quiz_allowed = get_post_meta($post->ID, '_enable_quiz_reset', true); ?> <!-- Action Nonce's --> <input type="hidden" name="woothemes_sensei_complete_quiz_nonce" id="woothemes_sensei_complete_quiz_nonce" value="<?php echo esc_attr(wp_create_nonce('woothemes_sensei_complete_quiz_nonce')); ?> " /> <input type="hidden" name="woothemes_sensei_reset_quiz_nonce" id="woothemes_sensei_reset_quiz_nonce" value="<?php echo esc_attr(wp_create_nonce('woothemes_sensei_reset_quiz_nonce')); ?> " /> <input type="hidden" name="woothemes_sensei_save_quiz_nonce" id="woothemes_sensei_save_quiz_nonce" value="<?php echo esc_attr(wp_create_nonce('woothemes_sensei_save_quiz_nonce')); ?> " /> <!--#end Action Nonce's --> <?php //if ( '' == $user_quiz_grade) { ?> <span><input type="submit" name="quiz_complete" class="quiz-submit complete" value="<?php echo apply_filters('sensei_complete_quiz_text', __('Complete Quiz', 'woothemes-sensei')); ?> "/></span> <span><input type="submit" name="quiz_save" class="quiz-submit save" value="<?php echo apply_filters('sensei_save_quiz_text', __('Save Quiz', 'woothemes-sensei')); ?> "/></span> <?php php; ?> <?php php; ?> <span><input type="submit" name="quiz_reset" class="quiz-submit reset" value="<?php echo apply_filters('sensei_reset_quiz_text', __('Reset Quiz', 'woothemes-sensei')); ?> "/></span> <?php php; ?> <?php } }
/** * 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 * @return array Status code and message */ public static function sensei_user_quiz_status_message($lesson_id = 0, $user_id = 0, $is_lesson = false) { global $woothemes_sensei, $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 = WooThemes_Sensei_Utils::user_started_course($course_id, $user_id); // Has user completed lesson $user_lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_id, $user_id); $lesson_complete = WooThemes_Sensei_Utils::user_completed_lesson($user_lesson_status); // Quiz ID $quiz_id = $woothemes_sensei->post_types->lesson->lesson_quizzes($lesson_id); // Quiz grade $quiz_grade = false; 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'), WooThemes_Sensei_Utils::round($quiz_grade)); } else { $message = sprintf(__('Congratulations! You have passed this quiz achieving %s%%', 'woothemes-sensei'), WooThemes_Sensei_Utils::round($quiz_grade)); } } } 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'), WooThemes_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'), WooThemes_Sensei_Utils::round($quiz_passmark), WooThemes_Sensei_Utils::round($quiz_grade)); } else { $message = sprintf(__('You require %1$d%% to pass this quiz. Your grade is %2$s%%', 'woothemes-sensei'), WooThemes_Sensei_Utils::round($quiz_passmark), WooThemes_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'), WooThemes_Sensei_Utils::round($quiz_passmark)); } else { $message = sprintf(__('You require %1$d%% to pass this quiz.', 'woothemes-sensei'), WooThemes_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'))) { $extra = '<p><a class="button" href="' . esc_url(get_permalink($quiz_id)) . '" title="' . esc_attr(apply_filters('sensei_view_lesson_quiz_text', __('View the lesson quiz', 'woothemes-sensei'))) . '">' . apply_filters('sensei_view_lesson_quiz_text', __('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); }
$html .= '<span class="course-completion-rate">' . sprintf(__('Currently completed %1$s of %2$s in total', 'woothemes-sensei'), '######', $total_lessons) . '</span>'; $html .= '<div class="meter+++++"><span style="width: @@@@@%">@@@@@%</span></div>'; } // End If Statement $html .= '</header>'; $lesson_count = 1; $lessons_completed = 0; $show_lesson_numbers = false; foreach ($course_lessons as $lesson_item) { $single_lesson_complete = false; $post_classes = array('course', 'post'); $user_lesson_status = false; if (is_user_logged_in()) { // Check if Lesson is complete $user_lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $current_user->ID); $single_lesson_complete = WooThemes_Sensei_Utils::user_completed_lesson($user_lesson_status); if ($single_lesson_complete) { $lessons_completed++; $post_classes[] = 'lesson-completed'; } // End If Statement } // End If Statement // Get Lesson data $complexity_array = $woothemes_sensei->post_types->lesson->lesson_complexities(); $lesson_length = get_post_meta($lesson_item->ID, '_lesson_length', true); $lesson_complexity = get_post_meta($lesson_item->ID, '_lesson_complexity', true); if ('' != $lesson_complexity) { $lesson_complexity = $complexity_array[$lesson_complexity]; } $user_info = get_userdata(absint($lesson_item->post_author));
/** * This function set's up the data need for the quiz page * * This function hooks into sensei_complete_quiz and load the global data for the * current quiz. * * @since 1.7.4 * @access public * */ public function load_global_quiz_data() { global $woothemes_sensei, $post, $current_user; $this->data = new stdClass(); // Default grade $grade = 0; // Get Quiz Questions $lesson_quiz_questions = $woothemes_sensei->post_types->lesson->lesson_quiz_questions($post->ID); $quiz_lesson_id = absint(get_post_meta($post->ID, '_quiz_lesson', true)); // Get quiz grade type $quiz_grade_type = get_post_meta($post->ID, '_quiz_grade_type', true); // Get quiz pass setting $pass_required = get_post_meta($post->ID, '_pass_required', true); // Get quiz pass mark $quiz_passmark = abs(round(doubleval(get_post_meta($post->ID, '_quiz_passmark', true)), 2)); // Get latest quiz answers and grades $lesson_id = $woothemes_sensei->quiz->get_lesson_id($post->ID); $user_quizzes = $woothemes_sensei->quiz->get_user_answers($lesson_id, get_current_user_id()); $user_lesson_status = WooThemes_Sensei_Utils::user_lesson_status($quiz_lesson_id, $current_user->ID); $user_quiz_grade = 0; if (isset($user_lesson_status->comment_ID)) { $user_quiz_grade = get_comment_meta($user_lesson_status->comment_ID, 'grade', true); } if (!is_array($user_quizzes)) { $user_quizzes = array(); } // Check again that the lesson is complete $user_lesson_end = WooThemes_Sensei_Utils::user_completed_lesson($user_lesson_status); $user_lesson_complete = false; if ($user_lesson_end) { $user_lesson_complete = true; } // End If Statement $reset_allowed = get_post_meta($post->ID, '_enable_quiz_reset', true); //backwards compatibility if ('on' == $reset_allowed) { $reset_allowed = 1; } // Build frontend data object $this->data->user_quiz_grade = $user_quiz_grade; $this->data->quiz_passmark = $quiz_passmark; $this->data->quiz_lesson = $quiz_lesson_id; $this->data->quiz_grade_type = $quiz_grade_type; $this->data->user_lesson_end = $user_lesson_end; $this->data->user_lesson_complete = $user_lesson_complete; $this->data->lesson_quiz_questions = $lesson_quiz_questions; $this->data->reset_quiz_allowed = $reset_allowed; }
/** * Display the single course modules content with Collapse/Expand Toggle * * @since 1.8.0 * @return void */ public function course_module_collapse_content() { global $post; $course_id = $post->ID; $modules = Sensei()->modules->get_course_modules($course_id); // Display each module foreach ($modules as $module) { echo '<article class="post module">'; echo '<section class="entry">'; $module_progress = false; if (is_user_logged_in()) { global $current_user; wp_get_current_user(); $module_progress = Sensei()->modules->get_user_module_progress($module->term_id, $course_id, $current_user->ID); } if ($module_progress && $module_progress > 0) { $status = __('Completed', 'woothemes-sensei'); $class = 'completed'; if ($module_progress < 100) { $status = __('In progress', 'woothemes-sensei'); $class = 'in-progress'; } echo '<p class="status module-status ' . esc_attr($class) . '">' . $status . '</p>'; } if ('' != $module->description) { echo '<p class="module-description">' . $module->description . '</p>'; } $lessons = Sensei()->modules->get_lessons($course_id, $module->term_id); if (count($lessons) > 0) { $lessons_list = ''; foreach ($lessons as $lesson) { $status = ''; $lessons_time = ''; $lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson->ID, get_current_user_id()); $lesson_length = get_post_meta($lesson->ID, '_lesson_length', true); $title = esc_attr(get_the_title(intval($lesson->ID))); // Get lesson completed status if ($lesson_completed) { $status = 'completed'; } // Get lesson time and set variable if it exists if ('' != $lesson_length) { $lessons_time = '<span style="float:right" class="lesson-length"><i class="fa fa-clock-o"></i> ' . $lesson_length . __(' min', 'woothemes-sensei') . '</span>'; } $lessons_list .= '<li class="' . $status . '"><a href="' . esc_url(get_permalink(intval($lesson->ID))) . '" title="' . esc_attr(get_the_title(intval($lesson->ID))) . '">' . apply_filters('sensei_module_lesson_list_title', $title, $lesson->ID) . $lessons_time . '</a></li>'; // Build array of displayed lesson for exclusion later $displayed_lessons = array(); $displayed_lessons[] = $lesson->ID; } ?> <section class="module-lessons"> <ul > <header class="expList"> <?php // module title header with collapsing toggle // Module URL commented out as it is no linger used, uncomment if you want to use it // $module_url = esc_url(add_query_arg('course_id', $course_id, get_term_link($module, $this->taxonomy))); echo "<img class='expList' src='" . $this->assets_url . "img/collapse.png' ><h2 class='expList'> " . $module->name . "</h2>"; ?> </header> <li > <ul class="expList2" > <?php echo $lessons_list; ?> </ul> </li> </ul> </section> <?php } //end count lessons ?> </section> </article> <?php } // end each module }
/** * load_user_courses_content generates HTML for user's active & completed courses * @since 1.4.0 * @param object $user Queried user object * @param boolean $manage Whether the user has permission to manage the courses * @return string HTML displayng course data */ public function load_user_courses_content($user = false, $manage = false) { global $woothemes_sensei, $post, $wp_query, $course, $my_courses_page, $my_courses_section; // Build Output HTML $complete_html = $active_html = ''; if ($user) { $my_courses_page = true; // Allow action to be run before My Courses content has loaded do_action('sensei_before_my_courses', $user->ID); // Logic for Active and Completed Courses $per_page = 20; if (isset($woothemes_sensei->settings->settings['my_course_amount']) && 0 < absint($woothemes_sensei->settings->settings['my_course_amount'])) { $per_page = absint($woothemes_sensei->settings->settings['my_course_amount']); } $course_statuses = WooThemes_Sensei_Utils::sensei_check_for_activity(array('user_id' => $user->ID, 'type' => 'sensei_course_status'), true); // User may only be on 1 Course if (!is_array($course_statuses)) { $course_statuses = array($course_statuses); } $completed_ids = $active_ids = array(); foreach ($course_statuses as $course_status) { if (WooThemes_Sensei_Utils::user_completed_course($course_status, $user->ID)) { $completed_ids[] = $course_status->comment_post_ID; } else { $active_ids[] = $course_status->comment_post_ID; } } $active_count = $completed_count = 0; $active_courses = array(); if (0 < intval(count($active_ids))) { $my_courses_section = 'active'; $active_courses = $woothemes_sensei->post_types->course->course_query($per_page, 'usercourses', $active_ids); $active_count = count($active_ids); } // End If Statement $completed_courses = array(); if (0 < intval(count($completed_ids))) { $my_courses_section = 'completed'; $completed_courses = $woothemes_sensei->post_types->course->course_query($per_page, 'usercourses', $completed_ids); $completed_count = count($completed_ids); } // End If Statement $lesson_count = 1; $active_page = 1; if (isset($_GET['active_page']) && 0 < intval($_GET['active_page'])) { $active_page = $_GET['active_page']; } $completed_page = 1; if (isset($_GET['completed_page']) && 0 < intval($_GET['completed_page'])) { $completed_page = $_GET['completed_page']; } foreach ($active_courses as $course_item) { $course_lessons = $woothemes_sensei->post_types->course->course_lessons($course_item->ID); $lessons_completed = 0; foreach ($course_lessons as $lesson) { if (WooThemes_Sensei_Utils::user_completed_lesson($lesson->ID, $user->ID)) { ++$lessons_completed; } } // Get Course Categories $category_output = get_the_term_list($course_item->ID, 'course-category', '', ', ', ''); $active_html .= '<article class="' . esc_attr(join(' ', get_post_class(array('course', 'post'), $course_item->ID))) . '">'; // Image $active_html .= $woothemes_sensei->post_types->course->course_image(absint($course_item->ID)); // Title $active_html .= '<header>'; $active_html .= '<h2><a href="' . esc_url(get_permalink(absint($course_item->ID))) . '" title="' . esc_attr($course_item->post_title) . '">' . esc_html($course_item->post_title) . '</a></h2>'; $active_html .= '</header>'; $active_html .= '<section class="entry">'; $active_html .= '<p class="sensei-course-meta">'; // Author $user_info = get_userdata(absint($course_item->post_author)); if (isset($woothemes_sensei->settings->settings['course_author']) && $woothemes_sensei->settings->settings['course_author']) { $active_html .= '<span class="course-author">' . __('by ', 'woothemes-sensei') . '<a href="' . esc_url(get_author_posts_url(absint($course_item->post_author))) . '" title="' . esc_attr($user_info->display_name) . '">' . esc_html($user_info->display_name) . '</a></span>'; } // End If Statement // Lesson count for this author $lesson_count = $woothemes_sensei->post_types->course->course_lesson_count(absint($course_item->ID)); // Handle Division by Zero if (0 == $lesson_count) { $lesson_count = 1; } // End If Statement $active_html .= '<span class="course-lesson-count">' . $lesson_count . ' ' . apply_filters('sensei_lessons_text', __('Lessons', 'woothemes-sensei')) . '</span>'; // Course Categories if ('' != $category_output) { $active_html .= '<span class="course-category">' . sprintf(__('in %s', 'woothemes-sensei'), $category_output) . '</span>'; } // End If Statement $active_html .= '<span class="course-lesson-progress">' . sprintf(__('%1$d of %2$d lessons completed', 'woothemes-sensei'), $lessons_completed, $lesson_count) . '</span>'; $active_html .= '</p>'; $active_html .= '<p class="course-excerpt">' . apply_filters('get_the_excerpt', $course_item->post_excerpt) . '</p>'; $progress_percentage = abs(round(doubleval($lessons_completed) * 100 / $lesson_count, 0)); if (50 < $progress_percentage) { $class = ' green'; } elseif (25 <= $progress_percentage && 50 >= $progress_percentage) { $class = ' orange'; } else { $class = ' red'; } /* if ( 0 == $progress_percentage ) { $progress_percentage = 5; } */ $active_html .= '<div class="meter' . esc_attr($class) . '"><span style="width: ' . $progress_percentage . '%">' . $progress_percentage . '%</span></div>'; $active_html .= '</section>'; if ($manage) { $active_html .= '<section class="entry-actions">'; $active_html .= '<form method="POST" action="' . remove_query_arg(array('active_page', 'completed_page')) . '">'; $active_html .= '<input type="hidden" name="' . esc_attr('woothemes_sensei_complete_course_noonce') . '" id="' . esc_attr('woothemes_sensei_complete_course_noonce') . '" value="' . esc_attr(wp_create_nonce('woothemes_sensei_complete_course_noonce')) . '" />'; $active_html .= '<input type="hidden" name="course_complete_id" id="course-complete-id" value="' . esc_attr(absint($course_item->ID)) . '" />'; if (0 < absint(count($course_lessons)) && $woothemes_sensei->settings->settings['course_completion'] == 'complete') { $active_html .= '<span><input name="course_complete" type="submit" class="course-complete" value="' . apply_filters('sensei_mark_as_complete_text', __('Mark as Complete', 'woothemes-sensei')) . '"/></span>'; } // End If Statement $course_purchased = false; if (WooThemes_Sensei_Utils::sensei_is_woocommerce_activated()) { // Get the product ID $wc_post_id = get_post_meta(absint($course_item->ID), '_course_woocommerce_product', true); if (0 < $wc_post_id) { $course_purchased = WooThemes_Sensei_Utils::sensei_customer_bought_product($user->user_email, $user->ID, $wc_post_id); } // End If Statement } // End If Statement if (!$course_purchased) { $active_html .= '<span><input name="course_complete" type="submit" class="course-delete" value="' . apply_filters('sensei_delete_course_text', __('Delete Course', 'woothemes-sensei')) . '"/></span>'; } // End If Statement $active_html .= '</form>'; $active_html .= '</section>'; } $active_html .= '</article>'; } // Active pagination if ($active_count > $per_page) { $current_page = 1; if (isset($_GET['active_page']) && 0 < intval($_GET['active_page'])) { $current_page = $_GET['active_page']; } $active_html .= '<nav class="pagination woo-pagination">'; $total_pages = ceil($active_count / $per_page); $link = ''; if ($current_page > 1) { $prev_link = add_query_arg('active_page', $current_page - 1); $active_html .= '<a class="prev page-numbers" href="' . $prev_link . '">' . __('Previous', 'woothemes-sensei') . '</a> '; } for ($i = 1; $i <= $total_pages; $i++) { $link = add_query_arg('active_page', $i); if ($i == $current_page) { $active_html .= '<span class="page-numbers current">' . $i . '</span> '; } else { $active_html .= '<a class="page-numbers" href="' . $link . '">' . $i . '</a> '; } } if ($current_page < $total_pages) { $next_link = add_query_arg('active_page', $current_page + 1); $active_html .= '<a class="next page-numbers" href="' . $next_link . '">' . __('Next', 'woothemes-sensei') . '</a> '; } $active_html .= '</nav>'; } foreach ($completed_courses as $course_item) { $course = $course_item; // Get Course Categories $category_output = get_the_term_list($course_item->ID, 'course-category', '', ', ', ''); $complete_html .= '<article class="' . join(' ', get_post_class(array('course', 'post'), $course_item->ID)) . '">'; // Image $complete_html .= $woothemes_sensei->post_types->course->course_image(absint($course_item->ID)); // Title $complete_html .= '<header>'; $complete_html .= '<h2><a href="' . esc_url(get_permalink(absint($course_item->ID))) . '" title="' . esc_attr($course_item->post_title) . '">' . esc_html($course_item->post_title) . '</a></h2>'; $complete_html .= '</header>'; $complete_html .= '<section class="entry">'; $complete_html .= '<p class="sensei-course-meta">'; // Author $user_info = get_userdata(absint($course_item->post_author)); if (isset($woothemes_sensei->settings->settings['course_author']) && $woothemes_sensei->settings->settings['course_author']) { $complete_html .= '<span class="course-author">' . __('by ', 'woothemes-sensei') . '<a href="' . esc_url(get_author_posts_url(absint($course_item->post_author))) . '" title="' . esc_attr($user_info->display_name) . '">' . esc_html($user_info->display_name) . '</a></span>'; } // End If Statement // Lesson count for this author $complete_html .= '<span class="course-lesson-count">' . $woothemes_sensei->post_types->course->course_lesson_count(absint($course_item->ID)) . ' ' . apply_filters('sensei_lessons_text', __('Lessons', 'woothemes-sensei')) . '</span>'; // Course Categories if ('' != $category_output) { $complete_html .= '<span class="course-category">' . sprintf(__('in %s', 'woothemes-sensei'), $category_output) . '</span>'; } // End If Statement $complete_html .= '</p>'; $complete_html .= '<p class="course-excerpt">' . apply_filters('get_the_excerpt', $course_item->post_excerpt) . '</p>'; $complete_html .= '<div class="meter green"><span style="width: 100%">100%</span></div>'; if ($manage) { $has_quizzes = $woothemes_sensei->post_types->course->course_quizzes($course_item->ID, true); // Output only if there is content to display if (has_filter('sensei_results_links') || $has_quizzes) { $complete_html .= '<p class="sensei-results-links">'; $results_link = ''; if ($has_quizzes) { $results_link = '<a class="button view-results" href="' . $woothemes_sensei->course_results->get_permalink($course_item->ID) . '">' . apply_filters('sensei_view_results_text', __('View results', 'woothemes-sensei')) . '</a>'; } $complete_html .= apply_filters('sensei_results_links', $results_link); $complete_html .= '</p>'; } } $complete_html .= '</section>'; $complete_html .= '</article>'; } // Active pagination if ($completed_count > $per_page) { $current_page = 1; if (isset($_GET['completed_page']) && 0 < intval($_GET['completed_page'])) { $current_page = $_GET['completed_page']; } $complete_html .= '<nav class="pagination woo-pagination">'; $total_pages = ceil($completed_count / $per_page); $link = ''; if ($current_page > 1) { $prev_link = add_query_arg('completed_page', $current_page - 1); $complete_html .= '<a class="prev page-numbers" href="' . $prev_link . '">' . __('Previous', 'woothemes-sensei') . '</a> '; } for ($i = 1; $i <= $total_pages; $i++) { $link = add_query_arg('completed_page', $i); if ($i == $current_page) { $complete_html .= '<span class="page-numbers current">' . $i . '</span> '; } else { $complete_html .= '<a class="page-numbers" href="' . $link . '">' . $i . '</a> '; } } if ($current_page < $total_pages) { $next_link = add_query_arg('completed_page', $current_page + 1); $complete_html .= '<a class="next page-numbers" href="' . $next_link . '">' . __('Next', 'woothemes-sensei') . '</a> '; } $complete_html .= '</nav>'; } } // End If Statement if ($manage) { $no_active_message = apply_filters('sensei_no_active_courses_user_text', __('You have no active courses.', 'woothemes-sensei')); $no_complete_message = apply_filters('sensei_no_complete_courses_user_text', __('You have not completed any courses yet.', 'woothemes-sensei')); } else { $no_active_message = apply_filters('sensei_no_active_courses_learner_text', __('This learner has no active courses.', 'woothemes-sensei')); $no_complete_message = apply_filters('sensei_no_complete_courses_learner_text', __('This learner has not completed any courses yet.', 'woothemes-sensei')); } ob_start(); ?> <?php do_action('sensei_before_user_courses'); ?> <?php if ($manage && (!isset($woothemes_sensei->settings->settings['messages_disable']) || !$woothemes_sensei->settings->settings['messages_disable'])) { ?> <p class="my-messages-link-container"><a class="my-messages-link" href="<?php echo get_post_type_archive_link('sensei_message'); ?> " title="<?php _e('View & reply to private messages sent to your course & lesson teachers.', 'woothemes-sensei'); ?> "><?php _e('My Messages', 'woothemes-sensei'); ?> </a></p> <?php } ?> <div id="my-courses"> <ul> <li><a href="#active-courses"><?php echo apply_filters('sensei_active_courses_text', __('Active Courses', 'woothemes-sensei')); ?> </a></li> <li><a href="#completed-courses"><?php echo apply_filters('sensei_completed_courses_text', __('Completed Courses', 'woothemes-sensei')); ?> </a></li> </ul> <?php do_action('sensei_before_active_user_courses'); ?> <?php $course_page_id = intval($woothemes_sensei->settings->settings['course_page']); if (0 < $course_page_id) { $course_page_url = get_permalink($course_page_id); } elseif (0 == $course_page_id) { $course_page_url = get_post_type_archive_link('course'); } ?> <div id="active-courses"> <?php if ('' != $active_html) { echo $active_html; } else { ?> <div class="sensei-message info"><?php echo $no_active_message; ?> <a href="<?php echo $course_page_url; ?> "><?php apply_filters('sensei_start_a_course_text', _e('Start a Course!', 'woothemes-sensei')); ?> </a></div> <?php } // End If Statement ?> </div> <?php do_action('sensei_after_active_user_courses'); ?> <?php do_action('sensei_before_completed_user_courses'); ?> <div id="completed-courses"> <?php if ('' != $complete_html) { echo $complete_html; } else { ?> <div class="sensei-message info"><?php echo $no_complete_message; ?> </div> <?php } // End If Statement ?> </div> <?php do_action('sensei_after_completed_user_courses'); ?> </div> <?php do_action('sensei_after_user_courses'); ?> <?php return ob_get_clean(); }
function widget($args, $instance) { global $woothemes_sensei, $post, $current_user, $view_lesson, $user_taking_course; $allmodules = 'off'; if (isset($instance['allmodules'])) { $allmodules = $instance['allmodules']; } // If not viewing a lesson/quiz, don't display the widget if (!(is_singular('lesson') || is_singular('quiz'))) { return; } extract($args); if (is_singular('quiz')) { $current_lesson_id = absint(get_post_meta($post->ID, '_quiz_lesson', true)); } else { $current_lesson_id = $post->ID; } // get the course for the current lesson/quiz $lesson_course_id = get_post_meta($current_lesson_id, '_lesson_course', true); // Check if the user is taking the course $is_user_taking_course = WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID); //Check for preview lesson $is_preview = false; if (method_exists('WooThemes_Sensei_Utils', 'is_preview_lesson')) { $is_preview = WooThemes_Sensei_Utils::is_preview_lesson($post->ID); } $course_title = get_the_title($lesson_course_id); $course_url = get_the_permalink($lesson_course_id); $in_module = false; $lesson_module = ''; $lesson_array = array(); if (0 < $current_lesson_id) { // get an array of lessons in the module if there is one if (isset(Sensei()->modules) && has_term('', Sensei()->modules->taxonomy, $current_lesson_id)) { // Get all modules $course_modules = Sensei()->modules->get_course_modules($lesson_course_id); $lesson_module = Sensei()->modules->get_lesson_module($current_lesson_id); $in_module = true; $current_module_title = htmlspecialchars($lesson_module->name); // Display all modules if ('on' == $allmodules) { foreach ($course_modules as $module) { // get all lessons in the module $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($lesson_course_id), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . intval($module->term_id), 'orderby' => 'meta_value_num date', 'order' => 'ASC'); $lesson_array = array_merge($lesson_array, get_posts($args)); } } else { // Only display current module // get all lessons in the current module $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($lesson_course_id), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => $lesson_module)), 'meta_key' => '_order_module_' . intval($lesson_module->term_id), 'orderby' => 'meta_value_num date', 'order' => 'ASC'); $lesson_array = get_posts($args); } } else { // if there's no module, get all lessons in the course $lesson_array = Sensei()->course->course_lessons($lesson_course_id); } } echo $before_widget; ?> <header> <h2 class="course-title"><a href="<?php echo $course_url; ?> "><?php echo $course_title; ?> </a></h2> <?php if ($in_module && 'on' != $allmodules) { ?> <h3 class="module-title"><?php echo $current_module_title; ?> </h3> <?php } ?> </header> <?php $nav_id_array = sensei_get_prev_next_lessons($current_lesson_id); $previous_lesson_id = absint($nav_id_array['prev_lesson']); $next_lesson_id = absint($nav_id_array['next_lesson']); if (0 < $previous_lesson_id || 0 < $next_lesson_id) { ?> <ul class="course-progress-navigation"> <?php if (0 < $previous_lesson_id) { ?> <li class="prev"><a href="<?php echo esc_url(get_permalink($previous_lesson_id)); ?> " title="<?php echo get_the_title($previous_lesson_id); ?> "><span><?php _e('Previous', 'sensei-course-progress'); ?> </span></a></li><?php } ?> <?php if (0 < $next_lesson_id) { ?> <li class="next"><a href="<?php echo esc_url(get_permalink($next_lesson_id)); ?> " title="<?php echo get_the_title($next_lesson_id); ?> "><span><?php _e('Next', 'sensei-course-progress'); ?> </span></a></li><?php } ?> </ul> <?php } ?> <ul class="course-progress-lessons"> <?php $old_module = ''; foreach ($lesson_array as $lesson) { $lesson_id = $lesson->ID; $lesson_title = htmlspecialchars($lesson->post_title); $lesson_url = get_the_permalink($lesson_id); // add 'completed' class to completed lessons $classes = "not-completed"; if (WooThemes_Sensei_Utils::user_completed_lesson($lesson->ID, $current_user->ID)) { $classes = "completed"; } // Lesson Quiz Meta $lesson_quiz_id = Sensei()->lesson->lesson_quizzes($lesson_id); // add 'current' class on the current lesson/quiz if ($lesson_id == $post->ID || $lesson_quiz_id == $post->ID) { $classes .= " current"; } if (isset(Sensei()->modules) && 'on' == $allmodules) { $new_module = Sensei()->modules->get_lesson_module($lesson_id); if ($old_module != $new_module) { ?> <li class="course-progress-module"><h3><?php echo $new_module->name; ?> </h3></li> <?php $old_module = $new_module; } } ?> <li class="course-progress-lesson <?php echo $classes; ?> "> <?php if ($lesson->ID == $post->ID || $lesson_quiz_id == $post->ID) { echo '<span>' . $lesson_title . '</span>'; } else { echo '<a href="' . $lesson_url . '">' . $lesson_title . '</a>'; } ?> </li> <?php } ?> </ul> <?php echo $after_widget; }
function savedquest_options() { if (!current_user_can('manage_options')) { wp_die(__('You do not have sufficient permissions to access this page.')); } echo '<div class="wrap" style="background:#fff;">'; if (isset($_GET['tab'])) { $tab = $_GET['tab']; } else { $tab = ""; } saved_admin_tab($tab); if ($tab == "quiztaken" or $tab == "") { ?> <table class="wp-list-table widefat fixed striped pages" width="100%" style="border-spacing: 0; text-align:center;" > <tr> <th>Lesson ID</th> <th>Lesson Title</th> <th>Module</th> <th>Number Of Questions</th> <th>Question Answered</th> <th>Unanswered Question</th> <th>User</th> <th>User Id</th> <th>DATE And Time</th> </tr> <?php $svequiz = get_option('savequiz_list'); ?> <?php foreach ($svequiz as $quizdata) { ?> <tr> <td><?php echo $quizdata['lesson_id']; ?> </td> <td><?php echo $quizdata['lesson_title']; ?> </td> <td> <?php $terms = get_the_terms($quizdata['lesson_id'], 'module'); echo $terms[0]->name; //print_r($terms); ?> </td> <td><?php echo $quizdata['total_questtion']; ?> </td> <td><?php echo $quizdata['question_answered']; ?> (<?php echo get_percentage($quizdata['total_questtion'], $quizdata['question_answered']) . "%"; ?> )</td> <td><?php echo $quizdata['remaining_question']; ?> (<?php echo 100 - get_percentage($quizdata['total_questtion'], $quizdata['question_answered']) . "%"; ?> )</td> <td><?php echo $quizdata['fullname']; ?> </td> <td><?php echo $quizdata['user_id']; ?> </td> <td><?php echo $quizdata['DATETIME']; ?> </td> </tr> <?php } ?> </table> <?php } elseif ($tab == "timesession") { $user_last_login_logout = get_option('user_last_login_logout'); ?> <br /><br/> <table class="wp-list-table widefat fixed striped pages" width="100%" style="border-spacing: 0; text-align:center;" > <tr> <th>User ID</th> <th>Full Name</th> <th>Last Login</th> <th>Last Logout</th> <th>Amout of Time Spent</th> <th>Role</th> </tr> <?php $svequiz = get_option('savequiz_list'); ?> <?php foreach ($user_last_login_logout as $last_login_logout) { ?> <?php if ($last_login_logout['user_id'] != "") { ?> <?php $user_info = get_userdata($last_login_logout['user_id']); ?> <tr> <td><?php echo $last_login_logout['user_id']; ?> </td> <td><?php echo $user_info->display_name; ?> </td> <td><?php echo gettime_st($last_login_logout['logintime']); ?> </td> <td><?php echo gettime_st($last_login_logout['logouttime']); ?> </td> <?php if ($last_login_logout['logouttime'] != "") { $date1 = date_create($last_login_logout['logintime']); $date2 = date_create($last_login_logout['logouttime']); $diff = date_diff($date1, $date2); $diftime = $diff->format("%h Hours %i Minute %s Seconds"); } else { $diftime = ""; } ?> <th><?php echo $diftime; ?> </th> <td><?php echo implode(', ', $user_info->roles); ?> </td> </tr> <?php } ?> <?php } ?> </table><br /><br /> <?php } elseif ($tab == "timequizecompleted") { global $woothemes_sensei, $post, $current_user, $wp_query, $learner_user; echo "<table class='wp-list-table widefat fixed striped pages'>"; $allUsers = get_users(); echo "<tr>\n\n\t\t\t\t<th>User</th>\n\n\t\t\t\t<th>Courses</th>\n\n\t\t\t\t<th>Percentage Incomplete</th>\n\n\t\t\t\t<th>Percentage Complete</th>\n\n\t\t\t\t<th>Percentage Competent</th>\n\n\t\t\t\t<th>Percentage Attempted</th>\n\n\t\t\t\t<th>Length of time Course Completed</th>\n\n\t\t\t </tr>"; foreach ($allUsers as $user) { $args = array('post_type' => 'course'); $courses = get_posts($args); $i = 1; foreach ($courses as $course) { $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($course->ID, $user->ID); $course_status = WooThemes_Sensei_Utils::user_course_status($course->ID, $user->ID); $course_status_update = get_comment_meta($course_status->comment_ID); if (!empty($course_status)) { $displayed_lessons = array(); $modules = Sensei()->modules->get_course_modules(intval($course->ID)); foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($course->ID), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); if (count($lessons) > 0) { $html .= '<h3>' . $module->name . '</h3>' . "\n"; $count = 0; foreach ($lessons as $lesson_item) { $lesson_grade = ' n/a'; $has_questions = get_post_meta($lesson_item->ID, '_quiz_has_questions', true); if ($has_questions) { $lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $user->ID); // Get user quiz grade $lesson_grade = get_comment_meta($lesson_status->comment_ID, 'grade', true); if ($lesson_grade) { $lesson_grade .= '%'; } $modulequizdata = get_comment_meta($lesson_status->comment_ID); //echo "<a href='".get_post_permalink($lesson_item->ID)."'>".$lesson_item->post_title."</a><br />"; $modulequestion_asked = count(explode(",", $modulequizdata['questions_asked'][0])); $moduleanswered_quiz = count(unserialize($modulequizdata['quiz_answers'][0])); //echo "number of questions:".$modulequestion_asked."<br />"; //echo "number of Answered:".$moduleanswered_quiz."<br />"; //echo "<pre>"; //echo "<h1>".$user->user_email.$lesson_item->post_title."</h1>"; //print_r($course_status ); //echo $course_status->comment_approved; //echo $modulequestion_asked."------".$moduleanswered_quiz; //echo "</pre>"; if ($course_status->comment_approved == "complete") { $attempted = '<span style="color:green;">(100%)</span>'; } else { if ($lesson_status->comment_approved == "passed" || $lesson_status->comment_approved == "graded") { $attempted = '<span style="color:green;">(100%)</span>'; } else { $attempted = ""; } } //echo "<pre>"; //echo "Attempted:".$attempted."<br />"; //echo $user->user_email."<br />"; //echo $modulequizdata['grade'][0]."<br />"; //echo $modulequizdata['quiz_answers'][0]."<br />"; //print_r($lesson_status); //echo "</pre>"; } $html .= '<a href="' . esc_url(get_permalink($lesson_item->ID)) . '" title="' . esc_attr(sprintf(__('Start %s', 'woothemes-sensei'), $lesson_item->post_title)) . '">' . esc_html(sprintf(__('%s', 'woothemes-sensei'), $lesson_item->post_title)) . '</a> ' . $attempted . '<br />'; $displayed_lessons[] = $lesson_item->ID; } } } $args = array('post_type' => 'lesson', 'posts_per_page' => -1, 'suppress_filters' => 0, 'meta_key' => '_order_' . $course->ID, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($course->ID))), 'post__not_in' => $displayed_lessons); $lessons = get_posts($args); //echo "Number of lesson in a course: ".count($lessons); if (0 < count($lessons)) { $html .= '<h3>' . __('Other Lessons', 'woothemes-sensei') . '</h3>' . "\n"; } if ($course_status_update['percent'][0] == 100) { $date1 = date_create($course_status_update['start'][0]); $date2 = date_create($course_status->comment_date); $diff = date_diff($date1, $date2); $diftime = $diff->format("%h Hours %i Minute %s Seconds"); } else { $diftime = "course not completed yet."; } $allcourseid[] = $course->ID; $incomplete = 100 - $course_status_update['percent'][0]; echo "<tr><td>"; echo $user->user_email; echo "</td>"; echo "<td>"; echo "<a href='" . get_post_permalink($course->ID) . "'>" . $course->post_title . "</a>"; echo "</td>"; echo "<td>"; echo $incomplete . "%"; echo "</td>"; echo "<td>"; echo $course_status_update['percent'][0] . "%"; echo "</td>"; echo "<td>"; echo $course_user_grade . "%"; echo "</td>"; echo "<td>"; echo $html; $html = ""; foreach ($lessons as $lesson_item) { $lesson_grade = 'n/a'; $has_questions = get_post_meta($lesson_item->ID, '_quiz_has_questions', true); if ($has_questions) { $lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $user->ID); // Get user quiz grade $lesson_grade = get_comment_meta($lesson_status->comment_ID, 'grade', true); if ($lesson_grade) { $lesson_grade .= '%'; } } $quizdata = get_comment_meta($lesson_status->comment_ID); //echo "<h1>Comment</h1>"; //print_r(get_comment_meta( $lesson_status->comment_ID )); //echo "<h1>LESSON STATUS</h1>"; //print_r($lesson_status); echo "<a href='" . get_post_permalink($lesson_item->ID) . "'>" . $lesson_item->post_title . "</a> "; //print_r($quizdata); $question_asked = count(explode(",", $quizdata['questions_asked'][0])); $answered_quiz = count(unserialize($quizdata['quiz_answers'][0])); $lessonquestion_asked = count(explode(",", $quizdata['questions_asked'][0])); $lessonanswered_quiz = count(unserialize($quizdata['quiz_answers'][0])); if ($course_status->comment_approved == "complete") { echo $attempted = '<span style="color:green;">(100%)</span>'; } else { if ($lesson_status->comment_approved == "passed" || $lesson_status->comment_approved == "graded") { echo $attempted = '<span style="color:green;">(100%)</span>'; } else { echo $attempted = ""; } } /*if($quizdata ['grade'][0]==""){ if($lesson_status->comment_approved=="passed"){ echo $attempted = 'P/Q'; }else{ if($lessonquestion_asked>=$lessonanswered_quiz){ if($modulequizdata['quiz_answers'][0]==""){ $attempted = ""; }else{ echo $attempted = "( ". get_percentage($lessonquestion_asked, $lessonanswered_quiz)."% ) <span style='color:red;'>Saved</span>"; } } } }else{ if($lesson_status->comment_approved=="passed"){ echo $attempted = '100% <span style="color:red;">complete button</span>'; }else{ $percentage = get_percentage($lessonquestion_asked, $lessonanswered_quiz); if((int)$lessonquestion_asked>1){ } } }*/ echo '<br />'; } // End For Loop echo "</td>"; echo "<td>"; echo $diftime; echo "</td>"; echo "</tr>"; //echo $course->post_title." (".$course_status_update['percent'][0]."% Complete) (". $incomplete . "% incomplete) (". $course_user_grade . "% Competent)<br />"; $i++; } } } echo "</table>"; } elseif ($tab == "threshold") { //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submittreshold']) && ($_POST['submittreshold'] = "submit")) { // declare users and variables $completionpermonth = $_POST['completionpermonth']; $courseid = $_POST['course']; $group_id = $_POST['group']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name', 'Module(s)')); $userincourse = BuddyPress_Sensei_Groups::bp_sensei_get_course_members($courseid); //groups_get_groupmeta //echo $group_attached = groups_get_groupmeta( $group_id, 'bp_course_attached', true)."<br />---"; if ($completionpermonth == "") { $completionpermonth = groups_get_groupmeta($group_id, 'sensei_threshold', true); } /* echo "<pre>"; print_r($userincourse); echo "</pre>"; echo "<pre>"; print_r($user_in_groups); echo "</pre>"; */ $user_in_groups = $wpdb->get_results($wpdb->prepare("SELECT user_id FROM wp_bp_groups_members WHERE group_id = %d", $group_id)); //user loop ----- loop user get the groups and course the course they take foreach ($user_in_groups as $user) { //echo "user_id ".$user->user_id."<br />"; $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->user_id); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->user_id); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->user_id); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->user_id); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); $modules = Sensei()->modules->get_course_modules($courseid); //$modules_content = Sensei()->modules->course_module_content( $courseid ); foreach ($modules as $module) { $module_id = $module->term_id; $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array(array('taxonomy' => 'module', 'field' => 'id', 'terms' => $module_id)), 'meta_query' => array(array('key' => '_lesson_course', 'value' => $courseid)), 'fields' => 'ids'); $lessons = get_posts($args); $completed = false; $lesson_count = 0; $completed_count = 0; foreach ($lessons as $lesson_id) { $completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_id, $user->user_id); ++$lesson_count; if ($completed) { ++$completed_count; } } $module_progress = $completed_count / $lesson_count * 100; if ($module_progress == 100) { $module_passed[] = 1; $module_name[] = $module->name; } /* echo "<pre>"; echo $module_progress; echo "---<br />"; //print_r($modules_content); echo "</pre>"; */ } $course_status_info['start'][0]; $datenow = date('Y-m-d h:i:s'); $date1 = date_create($course_status_info['start'][0]); $date2 = date_create($datenow); $diff = date_diff($date1, $date2); $diftime = $diff->format("%m"); if ($diftime < 1) { $diftime = 1; } $num_of_module_x_difftime = $completionpermonth * $diftime; //echo "<br />num_of_module_x_difftime:".$num_of_module_x_difftime; //echo count($module_passed)." module passed<br />"; if (count($module_passed) >= $num_of_module_x_difftime) { $user_info = get_userdata($user->user_id); $array_to_csv[] = array($user_info->display_name, $course_name, join("|", $module_name)); //$userid_within_group[$user->user_email] = $user->ID; } unset($module_name); unset($module_passed); } /* echo "<pre>"; print_r($array_to_csv); echo "</pre>"; */ convert_to_csv($array_to_csv, 'report-' . md5(date('Y-m-d h:i:s')) . '.csv', ','); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_bp_groups`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div> <div> <label> How many modules should be completed by now? </label> <input type="text" name="completionpermonth" /> </div><br /><br /> <input type="submit" class="button button-primary" name="submittreshold" value="submit" /> </form> </div> <?php } elseif ($tab == "incremental-progress") { wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css'); //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submitincrenmental']) && ($_POST['submitincrenmental'] = "submit")) { // declare users and variables $courseid = $_POST['course']; $group_id = $_POST['group']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name', 'Percentage Completed', 'Percentage Competent', 'Email')); $userincourse = BuddyPress_Sensei_Groups::bp_sensei_get_course_members($courseid); $user_in_groups = $wpdb->get_results($wpdb->prepare("SELECT user_id FROM wp_bp_groups_members WHERE group_id = %d", $group_id)); //user loop ----- loop user get the groups and course the course they take foreach ($user_in_groups as $user) { //echo "user_id ".$user->user_id."<br />"; $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->user_id); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->user_id); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->user_id); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->user_id); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); $modules = Sensei()->modules->get_course_modules($courseid); //$modules_content = Sensei()->modules->course_module_content( $courseid ); foreach ($modules as $module) { $module_id = $module->term_id; $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array(array('taxonomy' => 'module', 'field' => 'id', 'terms' => $module_id)), 'meta_query' => array(array('key' => '_lesson_course', 'value' => $courseid)), 'fields' => 'ids'); $lessons = get_posts($args); $completed = false; $lesson_count = 0; $completed_count = 0; foreach ($lessons as $lesson_id) { $completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_id, $user->user_id); ++$lesson_count; if ($completed) { ++$completed_count; } } $module_progress = $completed_count / $lesson_count * 100; if ($module_progress == 100) { $module_passed[] = 1; } /* echo "<pre>"; echo $module_progress; echo "---<br />"; //print_r($modules_content); echo "</pre>"; */ } if ($course_status_info['percent'][0] != 0) { /* echo $user_course_status->comment_date."dsaddas"."<br />"; */ $date1 = strtotime($_POST['date1']); $date2 = strtotime($_POST['date2']); $lesson_completion_date_str = strtotime($user_course_status->comment_date); if ($lesson_completion_date_str > $date1 && $lesson_completion_date_str < $date2) { //echo "lesson is completed:".$is_lesson_completed."<br />"; //echo "user ".$user->display_name." pass this". $lesson_completion_date; $user_info = get_userdata($user->user_id); $array_to_csv[] = array($user_info->display_name, $course_name, $course_status_info['percent'][0] . '%', $course_user_grade . '%', $user_info->user_email); //$user_id_onrange[$user->ID] = $lesson_item->post_title; } } unset($module_passed); } /* echo "<pre>"; print_r($array_to_csv); echo "</pre>"; */ $daterange1 = $_POST['date1']; $daterange2 = $_POST['date2']; convert_to_csv($array_to_csv, 'report-inc-progress_' . $daterange1 . '_' . $daterange2 . '_group_' . $groupname . '_courseID_' . $courseid . '.csv', $headers); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post" id="incrementalval"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_bp_groups`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div><br /> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div><br /> <div> <label> Date: </label> From<input type="text" id="date1" name="date1" required /> to <input type="text" id="date2" name="date2" required /> </div><br /><br /> <input type="submit" class="button button-primary" name="submitincrenmental" value="submit" /> </form> </div> <script> jQuery(document).ready(function() { jQuery('#date1').datepicker({ dateFormat : 'yy-mm-dd' }); jQuery('#date2').datepicker({ dateFormat : 'yy-mm-dd' }); }); </script> <?php } elseif ($tab == "total-progress") { //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submittotalprogress']) && ($_POST['submittotalprogress'] = "submit")) { // declare users and variables $courseid = $_POST['course']; $group_id = $_POST['group']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name', 'Percentage Completed', 'Percentage Competent', 'Email')); $userincourse = BuddyPress_Sensei_Groups::bp_sensei_get_course_members($courseid); $user_in_groups = $wpdb->get_results($wpdb->prepare("SELECT user_id FROM wp_bp_groups_members WHERE group_id = %d", $group_id)); //user loop ----- loop user get the groups and course the course they take foreach ($user_in_groups as $user) { //echo "user_id ".$user->user_id."<br />"; $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->user_id); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->user_id); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->user_id); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->user_id); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); $modules = Sensei()->modules->get_course_modules($courseid); //$modules_content = Sensei()->modules->course_module_content( $courseid ); foreach ($modules as $module) { $module_id = $module->term_id; $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array(array('taxonomy' => 'module', 'field' => 'id', 'terms' => $module_id)), 'meta_query' => array(array('key' => '_lesson_course', 'value' => $courseid)), 'fields' => 'ids'); $lessons = get_posts($args); $completed = false; $lesson_count = 0; $completed_count = 0; foreach ($lessons as $lesson_id) { $completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_id, $user->user_id); ++$lesson_count; if ($completed) { ++$completed_count; } } $module_progress = $completed_count / $lesson_count * 100; if ($module_progress == 100) { $module_passed[] = 1; } } $user_info = get_userdata($user->user_id); if ($user->user_id != 1) { $percentcomplete = $course_status_info['percent'][0]; if ($percentcomplete == "") { $percentcomplete = '0'; } $array_to_csv[] = array($user_info->display_name, $course_name, $percentcomplete . '%', $course_user_grade . '%', $user_info->user_email); } } convert_to_csv($array_to_csv, 'report-total-progress_' . date('Y-m-d') . '_group_' . $groupname . '_courseID_' . $courseid . '.csv', ','); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_bp_groups`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div> <br /><br /> <input type="submit" class="button button-primary" name="submittotalprogress" value="submit" /> </form> </div> <?php } elseif ($tab == "master-report") { //declare the wpdb for custom query global $wpdb; global $woothemes_sensei, $post, $current_user, $wp_query, $learner_user; //check for submitted data if (isset($_POST['master-report']) && ($_POST['master-report'] = "submit")) { // declare users and variables $courseid = $_POST['course']; $group_id = $_POST['group']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name', 'Percentage Completed', 'Percentage Competent', 'Email')); $userincourse = BuddyPress_Sensei_Groups::bp_sensei_get_course_members($courseid); $user_in_groups = $wpdb->get_results($wpdb->prepare("SELECT user_id FROM wp_bp_groups_members WHERE group_id = %d", $group_id)); //user loop ----- loop user get the groups and course the course they take $maincontent = ""; $countloop_user = 0; $lesson_title = "<th align='center'>User</th>"; foreach ($user_in_groups as $user) { $maincontent .= "<tr>"; $user_info = get_userdata($user->user_id); $maincontent .= "<td>" . $user_info->display_name . "</td>"; $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->user_id); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->user_id); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->user_id); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->user_id); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); $modules = Sensei()->modules->get_course_modules($courseid); //$modules_content = Sensei()->modules->course_module_content( $courseid ); foreach ($modules as $module) { $module_id = $module->term_id; $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array(array('taxonomy' => 'module', 'field' => 'id', 'terms' => $module_id)), 'meta_query' => array(array('key' => '_lesson_course', 'value' => $courseid)), 'fields' => 'ids', 'order' => 'ASC'); $lessons = get_posts($args); $completed = false; $lesson_count = 0; $completed_count = 0; foreach ($lessons as $lesson_id) { if ($countloop_user != 1) { $lesson_title .= "<th style=\"font-size:10px;\">"; $lesson_title .= get_the_title($lesson_id); $lesson_title .= "</th>"; } // Get quiz pass setting $pass_required = get_post_meta($lesson_id, '_pass_required', true); // Get quiz pass mark $quiz_passmark = abs(round(doubleval(get_post_meta($lesson_id, '_quiz_passmark', true)), 2)); // Get latest quiz answers and grades //$lesson_id = $woothemes_sensei->quiz->get_lesson_id( $lesson_id ); $user_quizzes = $woothemes_sensei->quiz->get_user_answers($lesson_id, $user->user_id); $user_lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_id, $user->user_id); $user_quiz_grade = 0; if (isset($user_lesson_status->comment_ID)) { $user_quiz_grade = get_comment_meta($user_lesson_status->comment_ID, 'grade', true); } // Check again that the lesson is complete $user_lesson_end = WooThemes_Sensei_Utils::user_completed_lesson($user_lesson_status); $completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_id, $user->user_id); /* echo "<pre>"; echo get_the_title($lesson_id); echo 'pass_required:'."<br />"; print_r($pass_required); echo 'quiz_passmark:<br />'; print_r($quiz_passmark); echo 'user_quizzes:<br />'; print_r($user_quizzes); echo 'user_lesson_status:<br />'; print_r($user_lesson_status); echo 'Percent Competent:<br />'; print_r($user_quiz_grade); echo 'completed--:'.$completed."<br />"; echo 'user_lesson_end--:'.$user_lesson_end."<br />"; echo "_quiz_has_questions:".get_post_meta( $lesson_id, '_quiz_has_questions', true )."<br /><br />"; echo "this is the lersson info-----------------:"; print_r(get_comment_meta( $user_lesson_status->comment_ID )); $lessonquizdata = get_comment_meta( $user_lesson_status->comment_ID ); echo "lessonquizdata---:"; print_r(unserialize($lessonquizdata['quiz_answers'][0])); echo "</pre>"; */ $maincontent .= "<td>"; if ($completed == 1) { $percentcompleted = '100%'; } else { $lessonquizdata = get_comment_meta($user_lesson_status->comment_ID); $lessonquizdata_asked = count(explode(",", $lessonquizdata['questions_asked'][0])); $lessonquizdataanswered_quiz = count(unserialize($lessonquizdata['quiz_answers'][0])); $lquizcounter = 0; foreach ($lessonquizdataanswered_quiz as $lquiz) { if ($lquiz != "") { $lquizcounter++; } } /* echo "<pre>"; echo $lessonquizdata_asked."<br />"; print_r($lessonquizdata); print_r(unserialize($lessonquizdata['quiz_answers'][0])); echo "</pre>"; */ if ($user_lesson_status->comment_approved == "passed" || $user_lesson_status->comment_approved == "graded") { $percentcompleted = '100%'; } else { $percentcompleted = get_percentage($lessonquizdata_asked, $lquizcounter) . '%'; } } $maincontent .= '%S: ' . $percentcompleted . "<br />"; $maincontent .= '%C: ' . $user_quiz_grade . "%"; $maincontent .= "</td>"; ++$lesson_count; if ($completed) { ++$completed_count; } } $module_progress = $completed_count / $lesson_count * 100; if ($module_progress == 100) { $module_passed[] = 1; } } $countloop_user = 1; $user_info = get_userdata($user->user_id); $completionpermonth = groups_get_groupmeta($group_id, 'sensei_threshold', true); if (count($module_passed) >= $completionpermonth) { $ontract = "yes"; } else { $ontract = "no"; } $maincontent .= "<td>" . $ontract . "</td>"; if ($completed_course == 1) { $completed_course = $user_course_status->comment_date; } else { $completed_course = "No"; } $maincontent .= "<td>" . $completed_course . "</td>"; $maincontent .= "</tr>"; unset($module_passed); } echo '<table class="wp-list-table widefat fixed striped pages" style="width:500%; border-spacing: 0; text-align:center;" >'; echo "<tr>"; echo $lesson_title; echo "<td>On Track Or Not</td>"; echo "<td>Course Completed</td>"; echo "</tr>"; echo $maincontent; echo "</table>"; /* echo "<pre>"; print_r($array_to_csv); echo "</pre>"; */ //convert_to_csv($array_to_csv, 'report-total-progress_'.date('Y-m-d').'_group_'.$groupname.'_courseID_'.$courseid.'.csv', ','); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_bp_groups`'); ?> <select name="group" required> <option value="">- Select One -</option> <?php foreach ($groups as $group) { echo "<option value='" . $group->id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course" required> <option value="">- Select One -</option> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div> <br /><br /> <input type="submit" class="button button-primary" name="master-report" value="submit" /> </form> </div> <?php } //end master-report echo '</div>'; }
$html .= '<h2>' . apply_filters('sensei_lessons_text', __('Lessons', 'woothemes-sensei')) . '</h2>'; $html .= '</header>'; $lesson_count = 1; $lessons_completed = count(Sensei()->course->get_completed_lesson_ids($post->ID, $current_user->ID)); $show_lesson_numbers = false; foreach ($course_lessons as $lesson_item) { //skip lesson that are already in the modules if (false != Sensei()->modules->get_lesson_module($lesson_item->ID)) { continue; } $single_lesson_complete = false; $post_classes = array('course', 'post'); $user_lesson_status = false; if (is_user_logged_in()) { // Check if Lesson is complete $single_lesson_complete = WooThemes_Sensei_Utils::user_completed_lesson($lesson_item->ID, $current_user->ID); if ($single_lesson_complete) { $post_classes[] = 'lesson-completed'; } // End If Statement } // End If Statement // Get Lesson data $complexity_array = $woothemes_sensei->post_types->lesson->lesson_complexities(); $lesson_length = get_post_meta($lesson_item->ID, '_lesson_length', true); $lesson_complexity = get_post_meta($lesson_item->ID, '_lesson_complexity', true); if ('' != $lesson_complexity) { $lesson_complexity = $complexity_array[$lesson_complexity]; } $user_info = get_userdata(absint($lesson_item->post_author)); $is_preview = WooThemes_Sensei_Utils::is_preview_lesson($lesson_item->ID);
public function sensei_quiz_action_buttons() { global $post, $current_user, $woothemes_sensei; $lesson_id = (int) get_post_meta($post->ID, '_quiz_lesson', true); $lesson_course_id = (int) get_post_meta($lesson_id, '_lesson_course', true); $lesson_prerequisite = (int) get_post_meta($lesson_id, '_lesson_prerequisite', true); $show_actions = true; if (intval($lesson_prerequisite) > 0) { // If the user hasn't completed the prereq then hide the current actions $show_actions = WooThemes_Sensei_Utils::user_completed_lesson($lesson_prerequisite, $user_id); } if ($show_actions && is_user_logged_in() && WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID)) { // Get Reset Settings $reset_quiz_allowed = get_post_meta($post->ID, '_enable_quiz_reset', true); ?> <input type="hidden" name="<?php echo esc_attr('woothemes_sensei_complete_quiz_noonce'); ?> " id="<?php echo esc_attr('woothemes_sensei_complete_quiz_noonce'); ?> " value="<?php echo esc_attr(wp_create_nonce('woothemes_sensei_complete_quiz_noonce')); ?> " /> <?php if ('' == $this->data->user_quiz_grade) { ?> <span><input type="submit" name="quiz_complete" class="quiz-submit complete" value="<?php echo apply_filters('sensei_complete_quiz_text', __('Complete Quiz', 'woothemes-sensei')); ?> "/></span> <span><input type="submit" name="quiz_complete" class="quiz-submit save" value="<?php echo apply_filters('sensei_save_quiz_text', __('Save Quiz', 'woothemes-sensei')); ?> "/></span> <?php } // End If Statement ?> <?php if (isset($reset_quiz_allowed) && $reset_quiz_allowed) { ?> <span><input type="submit" name="quiz_complete" class="quiz-submit reset" value="<?php echo apply_filters('sensei_reset_quiz_text', __('Reset Quiz', 'woothemes-sensei')); ?> "/></span> <?php } ?> <?php } }
/** * check_user_permissions function. * * @access public * @param string $page (default: '') * @param array $data (default: array()) * @return void */ public function check_user_permissions($page = '', $data = array()) { // REFACTOR global $current_user, $post; if (!isset($current_user)) { return; } // Get User Meta get_currentuserinfo(); $user_allowed = false; switch ($page) { case 'course-single': // check for prerequisite course or lesson, $course_prerequisite_id = (int) get_post_meta($post->ID, '_course_prerequisite', true); $update_course = $this->woocommerce_course_update($post->ID); // Count completed lessons if (0 < absint($course_prerequisite_id)) { $prerequisite_complete = WooThemes_Sensei_Utils::user_completed_course($course_prerequisite_id, $current_user->ID); } else { $prerequisite_complete = true; } // End If Statement // Handles restrictions if (!$prerequisite_complete && 0 < absint($course_prerequisite_id)) { $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $course_link = '<a href="' . esc_url(get_permalink($course_prerequisite_id)) . '">' . __('course', 'woothemes-sensei') . '</a>'; $this->permissions_message['message'] = sprintf(__('Please complete the previous %1$s before taking this course.', 'woothemes-sensei'), $course_link); } else { $user_allowed = true; } // End If Statement break; case 'lesson-single': // Check for WC purchase $lesson_course_id = get_post_meta($post->ID, '_lesson_course', true); $update_course = $this->woocommerce_course_update($lesson_course_id); $is_preview = WooThemes_Sensei_Utils::is_preview_lesson($post->ID); if ($this->access_settings() && WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID)) { $user_allowed = true; } elseif ($this->access_settings() && false == $is_preview) { $user_allowed = true; } else { $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $course_link = '<a href="' . esc_url(get_permalink($lesson_course_id)) . '">' . __('course', 'woothemes-sensei') . '</a>'; $wc_post_id = get_post_meta($lesson_course_id, '_course_woocommerce_product', true); if (WooThemes_Sensei_Utils::sensei_is_woocommerce_activated() && 0 < $wc_post_id) { if ($is_preview) { $this->permissions_message['message'] = sprintf(__('This is a preview lesson. Please purchase the %1$s to access all lessons.', 'woothemes-sensei'), $course_link); } else { $this->permissions_message['message'] = apply_filters('sensei_please_purchase_course_text', sprintf(__('Please purchase the %1$s before starting this Lesson.', 'woothemes-sensei'), $course_link)); } } else { if ($is_preview) { $this->permissions_message['message'] = sprintf(__('This is a preview lesson. Please sign up for the %1$s to access all lessons.', 'woothemes-sensei'), $course_link); } else { /** This filter is documented in class-woothemes-sensei-frontend.php */ $this->permissions_message['message'] = apply_filters('sensei_please_sign_up_text', sprintf(__('Please sign up for the %1$s before starting the lesson.', 'woothemes-sensei'), $course_link)); } } // End If Statement } // End If Statement break; case 'quiz-single': $lesson_id = get_post_meta($post->ID, '_quiz_lesson', true); $lesson_course_id = get_post_meta($lesson_id, '_lesson_course', true); $update_course = $this->woocommerce_course_update($lesson_course_id); if ($this->access_settings() && WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID) || sensei_all_access()) { // Check for prerequisite lesson for this quiz $lesson_prerequisite_id = (int) get_post_meta($lesson_id, '_lesson_prerequisite', true); $user_lesson_prerequisite_complete = WooThemes_Sensei_Utils::user_completed_lesson($lesson_prerequisite_id, $current_user->ID); // Handle restrictions if (sensei_all_access()) { $user_allowed = true; } else { if (0 < absint($lesson_prerequisite_id) && !$user_lesson_prerequisite_complete) { $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $lesson_link = '<a href="' . esc_url(get_permalink($lesson_prerequisite_id)) . '">' . __('lesson', 'woothemes-sensei') . '</a>'; $this->permissions_message['message'] = sprintf(__('Please complete the previous %1$s before taking this Quiz.', 'woothemes-sensei'), $lesson_link); } else { $user_allowed = true; } // End If Statement } // End If Statement } elseif ($this->access_settings()) { // Check if the user has started the course if (is_user_logged_in() && !WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID) && (isset($this->settings->settings['access_permission']) && true == $this->settings->settings['access_permission'])) { $user_allowed = false; $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $course_link = '<a href="' . esc_url(get_permalink($lesson_course_id)) . '">' . __('course', 'woothemes-sensei') . '</a>'; $wc_post_id = get_post_meta($lesson_course_id, '_course_woocommerce_product', true); if (WooThemes_Sensei_Utils::sensei_is_woocommerce_activated() && 0 < $wc_post_id) { $this->permissions_message['message'] = sprintf(__('Please purchase the %1$s before starting this Quiz.', 'woothemes-sensei'), $course_link); } else { $this->permissions_message['message'] = sprintf(__('Please sign up for the %1$s before starting this Quiz.', 'woothemes-sensei'), $course_link); } // End If Statement } else { $user_allowed = true; } // End If Statement } else { $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $course_link = '<a href="' . esc_url(get_permalink(get_post_meta(get_post_meta($post->ID, '_quiz_lesson', true), '_lesson_course', true))) . '">' . __('course', 'woothemes-sensei') . '</a>'; $this->permissions_message['message'] = sprintf(__('Please sign up for the %1$s before taking this Quiz.', 'woothemes-sensei'), $course_link); } // End If Statement break; default: $user_allowed = true; break; } // End Switch Statement /** * filter the permissions message shown on sensei post types. * * @since 1.8.7 * * @param array $permissions_message{ * * @type string $title * @type string $message * * } * @param string $post_id */ $this->permissions_message = apply_filters('sensei_permissions_message', $this->permissions_message, $post->ID); if (sensei_all_access() || WooThemes_Sensei_Utils::is_preview_lesson($post->ID)) { $user_allowed = true; } return apply_filters('sensei_access_permissions', $user_allowed); }
?> <?php while (have_posts()) { the_post(); // Meta data $post_id = get_the_ID(); ?> <?php $single_lesson_complete = false; $user_lesson_status = false; if (is_user_logged_in()) { // Check if Lesson is complete $user_lesson_status = WooThemes_Sensei_Utils::user_lesson_status($post_id, $current_user->ID); if (WooThemes_Sensei_Utils::user_completed_lesson($user_lesson_status)) { $single_lesson_complete = true; } } // End If Statement $complexity_array = $woothemes_sensei->post_types->lesson->lesson_complexities(); $lesson_length = get_post_meta($post_id, '_lesson_length', true); $lesson_complexity = get_post_meta($post_id, '_lesson_complexity', true); if ('' != $lesson_complexity) { $lesson_complexity = $complexity_array[$lesson_complexity]; } $user_info = get_userdata(absint(get_the_author_meta('ID'))); $html = '<article class="' . esc_attr(join(' ', get_post_class(array('lesson', 'course', 'post'), $post_id))) . '">'; $html .= '<header>'; $html .= '<h2><a href="' . esc_url(get_permalink($post_id)) . '" title="' . esc_attr(sprintf(__('Start %s', 'woothemes-sensei'), get_the_title())) . '">'; if (apply_filters('sensei_show_lesson_numbers', false)) {