static function enroll($is_manager) { global $wpdb, $user_ID, $user_email; $_course = new NamasteLMSCourseModel(); $message = ''; // enroll in course $course = $_course->select($_POST['course_id']); // course fee? $fee = get_post_meta($course->ID, 'namaste_fee', true); // When fee is paid, enrollment is automatic so this is just fine here if (!empty($fee)) { $fee = apply_filters('namaste-coupon-applied', $fee); } // coupon code from other plugin? if ($fee > 0 and !$is_manager) { wp_die("You can't enroll yourself in a course when there is a fee"); } $enroll_mode = get_post_meta($course->ID, 'namaste_enroll_mode', true); // if already enrolled, just skip this altogether if (!NamasteLMSStudentModel::is_enrolled($user_ID, $course->ID)) { // depending on mode, status will be either 'pending' or 'enrolled' $status = $enroll_mode == 'free' ? 'enrolled' : 'pending'; $_course->enroll($user_ID, $course->ID, $status); if ($enroll_mode == 'free') { $message = sprintf(__('You enrolled in "%s"', 'namaste'), $course->post_title); } else { $message = __('Thank you for your interest in enrolling this course. A manager will review your application.', 'namaste'); } } else { $message = __('You have already enrolled in this course', 'namaste'); } return $message; }
private static function enroll($userId, $courseId) { $_course = new NamasteLMSCourseModel(); // enroll in course $course = $_course->select($courseId); $enroll_mode = get_post_meta($course->ID, 'namaste_enroll_mode', true); // if already enrolled, just skip this altogether $_course->enroll($userId, $course->ID, 'enrolled'); }
function student_certificates($student_id) { global $wpdb; $certificates = $wpdb->get_results($wpdb->prepare("SELECT tC.*, tM.id as my_id, tM.date as date \n\t\t\tFROM " . NAMASTE_CERTIFICATES . " tC JOIN " . NAMASTE_STUDENT_CERTIFICATES . " tM ON tM.certificate_id = tC.id\n\t\t\tWHERE tM.student_id=%d ORDER BY tM.date DESC", $student_id)); // select courses to match to certificates $_course = new NamasteLMSCourseModel(); $courses = $_course->select(); foreach ($certificates as $cnt => $certificate) { $c_courses = array(); foreach ($courses as $course) { if (strstr($certificate->course_ids, "|" . $course->ID . "|")) { $c_courses[] = "<a href='" . get_permalink($course->ID) . "' target='_blank'>" . $course->post_title . "</a>"; } } $certificates[$cnt]->courses = implode(", ", $c_courses); } return $certificates; }
static function manage() { global $wpdb; $_course = new NamasteLMSCourseModel(); $multiuser_access = 'all'; $multiuser_access = NamasteLMSMultiUser::check_access('students_access'); // select all courses $courses = $_course->select(); $courses = apply_filters('namaste-homeworks-select-courses', $courses); // if course selected, select lessons and enrolled students if (!empty($_GET['course_id'])) { do_action('namaste-check-permissions', 'course', $_GET['course_id']); // cleanup student record if (!empty($_GET['cleanup'])) { if ($multiuser_access == 'view') { wp_die(__('You are not allowed to do this.', 'namaste')); } self::cleanup($_GET['course_id'], $_GET['student_id']); //namaste_redirect("admin.php?page=namaste_students&course_id=$_GET[course_id]&status=$_GET[status]"); } // enroll student if (!empty($_GET['enroll'])) { if ($multiuser_access == 'view') { wp_die(__('You are not allowed to do this.', 'namaste')); } // find the user $error = false; if (strstr($_GET['email'], '@')) { $student = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->users} WHERE user_email=%s", $_GET['email'])); } else { $student = get_user_by('login', $_GET['email']); } // user exists? if (empty($student->ID)) { $error = __('Sorry, I cannot find user with this email or user handle.', 'namaste'); } // allowed to use Namaste!? if (!$error and !user_can($student->ID, 'administrator') and !user_can($student->ID, 'namaste')) { $error = __("This user's role does not allow them to use Namaste! LMS. You'll have either to change their role or allow the role work with the LMS from the Settings page", 'namaste'); } // already enrolled? if (!$error) { $is_enrolled = $wpdb->get_var($wpdb->prepare("SELECT id FROM " . NAMASTE_STUDENT_COURSES . "\n\t\t\t\t\t\t \tWHERE user_id = %d AND course_id = %d", $student->ID, $_GET['course_id'])); if ($is_enrolled) { $error = __('This user is already enrolled in the course', 'namaste'); } } // finally, enroll if (empty($error)) { $wpdb->query($wpdb->prepare("INSERT INTO " . NAMASTE_STUDENT_COURSES . " SET\n\t\t\t\t\t \t\t\tcourse_id = %d, user_id = %d, status = 'enrolled', \n\t\t\t\t\t \t\t\tenrollment_date = %s, completion_date = '1900-01-01', enrollment_time=%s, comments=''", $_GET['course_id'], $student->ID, date("Y-m-d", current_time('timestamp')), current_time('mysql'))); $success = __('User successfully enrolled in the course', 'namaste'); // insert in history $course = get_post($_GET['course_id']); $wpdb->query($wpdb->prepare("INSERT INTO " . NAMASTE_HISTORY . " SET\n\t\t\t\t\t\t\t\tuser_id=%d, date=CURDATE(), datetime=NOW(), action='enrolled_course', value=%s, num_value=%d", $student->ID, sprintf(__('Enrolled in course %s. Status: %s', 'namaste'), $course->post_title, 'enrolled'), $_GET['course_id'])); // do_action('namaste_enrolled_course', $student->ID, $_GET['course_id'], true); } } // change student status if (!empty($_GET['change_status'])) { if ($multiuser_access == 'view') { wp_die(__('You are not allowed to do this.', 'namaste')); } $wpdb->query($wpdb->prepare("UPDATE " . NAMASTE_STUDENT_COURSES . " SET\n\t\t\t\t\t \t\t\tstatus=%s, completion_date=%s, completion_time=%s \n\t\t\t\t\t \t\t\tWHERE user_id=%d AND course_id=%d", $_GET['status'], date("Y-m-d", current_time('timestamp')), current_time('mysql'), $_GET['student_id'], $_GET['course_id'])); $course = get_post($_GET['course_id']); if ($_GET['status'] == 'enrolled') { do_action('namaste_enrollment_approved', $_GET['student_id'], $_GET['course_id']); $history_msg = sprintf(__('Enrollment in %s has been approved.', 'namaste'), $course->post_title); } else { do_action('namaste_enrollment_rejected', $_GET['student_id'], $_GET['course_id']); $history_msg = sprintf(__('Enrollment in %s has been rejected.', 'namaste'), $course->post_title); } // insert in history $wpdb->query($wpdb->prepare("INSERT INTO " . NAMASTE_HISTORY . " SET\n\t\t\t\t\t\t\t\tuser_id=%d, date=CURDATE(), datetime=NOW(), action='enrolled_course', value=%s, num_value=%d", $_GET['student_id'], $history_msg, $_GET['course_id'])); namaste_redirect("admin.php?page=namaste_students&course_id={$_GET['course_id']}"); } // select lessons $_lesson = new NamasteLMSLessonModel(); $lessons = $_lesson->select($_GET['course_id']); $lids = array(0); foreach ($lessons as $lesson) { $lids[] = $lesson->ID; } // select students $page_limit = 20; $offset = empty($_GET['offset']) ? 0 : intval($_GET['offset']); $status_sql = ''; if (!empty($_GET['status']) and $_GET['status'] != 'any') { $status_sql = $wpdb->prepare(" AND tS.status=%s", $_GET['status']); } $students = $wpdb->get_results($wpdb->prepare("SELECT SQL_CALC_FOUND_ROWS tU.*, tS.status as namaste_status \n\t\t\t \t\tFROM {$wpdb->users} tU JOIN " . NAMASTE_STUDENT_COURSES . " tS \n\t\t\t \t\tON tS.user_id = tU.ID AND tS.course_id=%d {$status_sql}\n\t\t\t \t\tORDER BY user_nicename LIMIT %d, %d", $_GET['course_id'], $offset, $page_limit)); $count = $wpdb->get_var("SELECT FOUND_ROWS()"); // select student - to - lesson relations $completed_lessons = $wpdb->get_results("SELECT * FROM " . NAMASTE_STUDENT_LESSONS . "\n\t\t \t\t\tWHERE lesson_id IN (" . implode(',', $lids) . ")"); // match to students foreach ($students as $cnt => $student) { $student_completed_lessons = $student_incomplete_lessons = array(); foreach ($completed_lessons as $lesson) { if ($lesson->student_id == $student->ID) { if ($lesson->status) { $student_completed_lessons[] = $lesson->lesson_id; } else { $student_incomplete_lessons[] = $lesson->lesson_id; } } } $students[$cnt]->completed_lessons = $student_completed_lessons; $students[$cnt]->incomplete_lessons = $student_incomplete_lessons; } } // end if course selected wp_enqueue_script('thickbox', null, array('jquery')); wp_enqueue_style('thickbox.css', '/' . WPINC . '/js/thickbox/thickbox.css', null, '1.0'); if (@file_exists(get_stylesheet_directory() . '/namaste/manage-students.php')) { require get_stylesheet_directory() . '/namaste/manage-students.php'; } else { require NAMASTE_PATH . "/views/manage-students.php"; } }
static function restrict_visible_comments($comments) { global $post, $wpdb, $user_ID; if (!is_singular() or is_admin() or $post->post_type != 'namaste_lesson' or current_user_can('namaste_manage')) { return $comments; } if (!is_user_logged_in()) { return null; } // logged in, but is he enrolled in the course? $_course = new NamasteLMSCourseModel(); $course_id = get_post_meta($post->ID, 'namaste_course', true); $course = $_course->select($course_id); $enrolled = $wpdb->get_var($wpdb->prepare("SELECT id FROM " . NAMASTE_STUDENT_COURSES . " WHERE user_id = %d AND course_id = %d AND (status = 'enrolled' OR status='completed')", $user_ID, $course_id)); if (!$enrolled) { return null; } return $comments; }
static function full_select($id) { global $wpdb; $_course = new NamasteLMSCourseModel(); $_lesson = new NamasteLMSLessonModel(); // select this homework and lesson $homework = $wpdb->get_row($wpdb->prepare("SELECT * FROM " . NAMASTE_HOMEWORKS . "\n\t\t\tWHERE id=%d", $id)); // select course $course = $_course->select($homework->course_id); // select lesson $lesson = $_lesson->select($course->ID, 'single', $homework->lesson_id); return array($homework, $course, $lesson); }
static function view_certificate() { global $wpdb, $user_ID; if (!current_user_can('namaste_manage') and $_GET['student_id'] != $user_ID) { wp_die(__('You are not allowed to access this certificate', 'namaste')); } // select certificate $certificate = $wpdb->get_row($wpdb->prepare("SELECT tC.*, tS.date as date, tS.id as stid \n\t\t\tFROM " . NAMASTE_CERTIFICATES . " tC JOIN " . NAMASTE_STUDENT_CERTIFICATES . " tS On tC.id = tS.certificate_id \n\t\t\tWHERE tS.student_id = %d AND tC.id=%d\n\t\t\tAND tS.id=%d", $_GET['student_id'], $_GET['id'], $_GET['my_id'])); $output = wpautop(stripslashes($certificate->content)); $user_info = get_userdata($_GET['student_id']); $name = (empty($user_info->first_name) or empty($user_info->last_name)) ? $user_info->display_name : $user_info->first_name . " " . $user_info->last_name; // if $name is still empty, output username if (empty($name)) { $name = $user_info->user_login; } $output = str_replace("{{name}}", $name, $output); $output = str_replace("{{id}}", sprintf('%08d', $certificate->stid), $output); if (strstr($output, "{{courses}}") or strstr($output, "{{courses-extended}}")) { $_course = new NamasteLMSCourseModel(); $courses = $_course->select(); $c_courses = array(); foreach ($courses as $course) { if (strstr($certificate->course_ids, "|" . $course->ID . "|")) { if (strstr($output, "{{courses-extended}}")) { $c_courses[] = "<h2>" . stripslashes($course->post_title) . "</h2>" . wpautop(stripslashes($course->post_excerpt)); } else { $c_courses[] = stripslashes($course->post_title); } } } $courses_str = implode(", ", $c_courses); $output = str_replace("{{courses}}", $courses_str, $output); $output = str_replace("{{courses-extended}}", $courses_str, $output); } $date = date(get_option('date_format'), strtotime($certificate->date)); $output = str_replace("{{date}}", $date, $output); if (get_option('namaste_generate_pdf_certificates') == "1") { $output = '<html> <head><title>' . $certificate->title . '</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head> <body><!--namaste-certificate-id-' . $certificate->id . '-namaste-certificate-id-->' . $output . '</body> </html>'; // die($output); $content = apply_filters('pdf-bridge-convert', $output); echo $content; exit; } // else output HTML ?> <html> <head><title><?php echo $certificate->title; ?> </title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head> <body><?php echo apply_filters('the_content', $output); ?> </body> </html> <?php exit; }
static function my_gradebook() { global $wpdb, $user_ID; $_course = new NamasteLMSCourseModel(); $_lesson = new NamasteLMSLessonModel(); // select my courses $courses = $wpdb->get_results($wpdb->prepare("SELECT tC.* FROM {$wpdb->posts} tC\n\t\tJOIN " . NAMASTE_STUDENT_COURSES . " tSC ON tSC.course_id = tC.ID AND (tSC.status = 'enrolled' OR tSC.status = 'completed')\n\t\tAND tSC.user_id=%d\r\n\t\tWHERE post_type = 'namaste_course' AND (post_status='publish' OR post_status='draft')\r\n\t\tORDER BY post_title", $user_ID)); $cids = array(); foreach ($courses as $course) { $cids[] = $course->ID; } // make sure we are only passing course_id in which user is enrolled if (!empty($_GET['course_id']) and in_array($_GET['course_id'], $cids)) { $this_course = $_course->select($_GET['course_id']); $lessons = $wpdb->get_results($wpdb->prepare("SELECT tP.*, tSL.grade as grade FROM {$wpdb->posts} tP\r\n\t\t\tJOIN {$wpdb->postmeta} tM ON tM.post_id = tP.ID AND tM.meta_key = 'namaste_course'\r\n\t\t\tAND tM.meta_value = %d\n\t\t\tLEFT JOIN " . NAMASTE_STUDENT_LESSONS . " tSL ON tSL.student_id=%d AND tSL.lesson_id=tP.ID\r\n\t\t\tWHERE post_type = 'namaste_lesson' AND (post_status='publish' OR post_status='draft') \r\n\t\t\tORDER BY post_title", $_GET['course_id'], $user_ID)); // select all assignments $homeworks = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . NAMASTE_HOMEWORKS . " WHERE course_id=%d ORDER BY id", $this_course->ID)); $hids = array(0); foreach ($homeworks as $homework) { $hids[] = $homework->id; } // select all my solutions $solutions = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . NAMASTE_STUDENT_HOMEWORKS . " \n\t\t\t\tWHERE student_id=%d AND homework_id IN (" . implode(',', $hids) . ") ORDER BY id DESC", $user_ID)); // match solutions to assignments foreach ($homeworks as $cnt => $homework) { $homework_solutions = array(); foreach ($solutions as $solution) { if ($homework->id == $solution->homework_id) { $homework_solutions[] = $solution; } } $homeworks[$cnt]->solutions = $solutions; } // match assignments to my lessons foreach ($lessons as $cnt => $lesson) { $lesson_homeworks = array(); foreach ($homeworks as $homework) { if ($homework->lesson_id == $lesson->ID) { $lesson_homeworks[] = $homework; } } $lessons[$cnt]->homeworks = $lesson_homeworks; } } if (@file_exists(get_stylesheet_directory() . '/namaste/my-gradebook.htm.php')) { require get_stylesheet_directory() . '/namaste/my-gradebook.html.php'; } else { require NAMASTE_PATH . "/views/my-gradebook.html.php"; } }
<?php get_header(); ?> <div class="full_width"> <div class="full_width_inner"> <?php global $user_ID; $is_manager = current_user_can('namaste_manage'); $_course = new NamasteLMSCourseModel(); // select all courses $_course->register_course_type(); $courses = $_course->select(); ?> <h1><?php _e('My Courses', 'namaste'); ?> </h1> <?php if (!sizeof($courses)) { ?> <p><?php _e('No courses are available at this time.', 'namaste'); ?> </p> <?php return false;