static function lesson_status($student_id, $lesson_id, $status) { global $wpdb, $user_ID; // security check $multiuser_access = 'all'; $multiuser_access = NamasteLMSMultiUser::check_access('students_access'); if ((!current_user_can('namaste_manage') or $multiuser_access == 'view') and $user_ID != $student_id) { wp_die(__("You cannot change someone else's status", 'namaste')); } // if status == -1 we have to remove the existing record if any if ($status == -1) { $wpdb->query($wpdb->prepare("DELETE FROM " . NAMASTE_STUDENT_LESSONS . " \n\t\t\t \tWHERE student_id = %d AND lesson_id = %d", $student_id, $lesson_id)); } // complete lesson - don't allow "completed" if there are unsatisfied requirements if ($status == 1) { if (!NamasteLMSLessonModel::is_ready($lesson_id, $student_id, true)) { return false; } NamasteLMSLessonModel::complete($lesson_id, $student_id); } // set as 'in progress' if ($status == 0) { // record exists? $exists = $wpdb->get_var($wpdb->prepare("SELECT id FROM " . NAMASTE_STUDENT_LESSONS . "\n\t\t\t \tWHERE student_id = %d AND lesson_id = %d", $student_id, $lesson_id)); if ($exists) { $wpdb->query($wpdb->prepare("UPDATE " . NAMASTE_STUDENT_LESSONS . " \n\t\t\t \t\t\tSET status=%d, completion_date = %s, completion_time=%s WHERE id=%d", $status, date("Y-m-d", current_time('timestamp')), current_time('mysql'), $exists)); } else { $wpdb->query($wpdb->prepare("INSERT INTO " . NAMASTE_STUDENT_LESSONS . " SET\n\t\t\t \t\t\tlesson_id = %d, student_id = %d, status = %d, completion_date = %s, completion_time=%s", $lesson_id, $student_id, $status, date("Y-m-d", current_time('timestamp')), current_time('mysql'))); } } return true; }
static function student_lessons($simplified = false, $ob = null, $dir = null, $in_shortcode = false) { global $wpdb, $user_ID; // student_id $student_id = (empty($_GET['student_id']) or !current_user_can('namaste_manage')) ? $user_ID : $_GET['student_id']; // select this student $student = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->users} WHERE ID=%d", $student_id)); // select this course $course = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE id=%d", $_GET['course_id'])); // am I enrolled? if (!current_user_can('namaste_manage') and !$in_shortcode) { $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')", $student_id, $course->ID)); if (!$enrolled) { _e("You must enroll in the course first before you can see the lessons", 'namaste'); return false; } } // end enrolled check // change student-lesson status? if (!empty($_POST['change_status'])) { $multiuser_access = 'all'; $multiuser_access = NamasteLMSMultiUser::check_access('students_access'); if ($multiuser_access == 'view') { wp_die(__('You are not allowed to do this.', 'namaste')); } $result = NamasteLMSStudentModel::lesson_status($student->ID, $_POST['lesson_id'], $_POST['status']); if (!$result) { $error = __('The lesson cannot be completed because there are unsatisfied requirements', 'namaste'); } } // select lessons $_lesson = new NamasteLMSLessonModel(); $select_ob = empty($ob) ? 'post_title' : $ob; $lessons = $_lesson->select($course->ID, 'array', null, $ob, $dir); $ids = array(0); foreach ($lessons as $lesson) { $ids[] = $lesson->ID; } $id_sql = implode(",", $ids); // select homeworks and match to lessons $homeworks = NamasteLMSHomeworkModel::select("WHERE lesson_id IN ({$id_sql})"); // using exams? select them too $use_exams = get_option('namaste_use_exams'); $exams_table = $use_exams == 'watu' ? $wpdb->prefix . 'watu_master' : $wpdb->prefix . 'watupro_master'; $shortcode = $use_exams == 'watu' ? 'WATU' : 'WATUPRO'; // select student-lesson relation so we can match status $student_lessons = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . NAMASTE_STUDENT_LESSONS . "\r\n\t\t\tWHERE student_id = %d", $student_id)); 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 ($use_exams) { $required_exam = get_post_meta($lesson->ID, 'namaste_required_exam', true); if ($required_exam) { $exam = $wpdb->get_row("SELECT tE.*, tP.id as post_id FROM {$exams_table} tE, {$wpdb->posts} tP\r\n\t\t\t\t\t\tWHERE tE.ID = {$required_exam} AND tP.post_content LIKE CONCAT('%[{$shortcode} ', tE.ID, ']%')\r\n\t\t\t\t\t\tAND tP.post_status='publish' AND post_title!=''"); $lessons[$cnt]->exam = $exam; } } // status $status = null; foreach ($student_lessons as $l) { if ($l->lesson_id == $lesson->ID) { $status = $l; } } if (empty($status->id)) { $lessons[$cnt]->status = __('Not started', 'namaste'); $lessons[$cnt]->statuscode = -1; } else { if ($status->status == 1) { $lessons[$cnt]->status = __('Completed on', 'namaste') . ' ' . date(get_option('date_format'), strtotime($status->completion_date)); $lessons[$cnt]->statuscode = 1; } else { // in progress $lessons[$cnt]->status = "<a href='#' onclick='namasteInProgress(" . $lesson->ID . ", " . $student_id . ");return false;'>" . __('In progress', 'namaste') . "</a>"; $lessons[$cnt]->statuscode = 0; } } // end defining status } // external reorder? if (empty($ob)) { $lessons = apply_filters('namaste-reorder-lessons', $lessons); } // enqueue thickbox 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/student-lessons.php')) { require get_stylesheet_directory() . '/namaste/student-lessons.php'; } else { require NAMASTE_PATH . "/views/student-lessons.php"; } }
static function manage() { global $wpdb, $user_ID; $_course = new NamasteLMSCourseModel(); $_lesson = new NamasteLMSLessonModel(); $multiuser_access = 'all'; $multiuser_access = NamasteLMSMultiUser::check_access('homework_access'); // select courses $courses = $_course->select(); $courses = apply_filters('namaste-homeworks-select-courses', $courses); // if course and lesson are selected, populate two variables for displaying titles etc if (!empty($_GET['course_id'])) { $this_course = $_course->select($_GET['course_id']); } if (!empty($_GET['lesson_id'])) { $this_lesson = $_lesson->select($_GET['course_id'], 'single', $_GET['lesson_id']); } switch (@$_GET['do']) { case 'add': // apply permissions from other plugins do_action('namaste-check-permissions', 'course', $_GET['course_id']); if (!empty($_POST['ok'])) { $wpdb->query($wpdb->prepare("INSERT INTO " . NAMASTE_HOMEWORKS . " SET\n\t\t\t\t\t\tcourse_id=%d, lesson_id=%d, title=%s, description=%s, accept_files=%d, \n\t\t\t\t\t\taward_points=%d, editor_id=%d", $_GET['course_id'], $_GET['lesson_id'], $_POST['title'], $_POST['description'], @$_POST['accept_files'], @$_POST['award_points'], $user_ID)); $id = $wpdb->insert_id; do_action('namaste_add_homework', $id); //$_SESSION['namaste_flash'] = __('Homework added', 'namaste'); namaste_redirect("admin.php?page=namaste_homeworks&course_id={$_GET['course_id']}&lesson_id={$_GET['lesson_id']}"); } if (@file_exists(get_stylesheet_directory() . '/namaste/homework.php')) { require get_stylesheet_directory() . '/namaste/homework.php'; } else { require NAMASTE_PATH . "/views/homework.php"; } break; case 'edit': // apply permissions from other plugins do_action('namaste-check-permissions', 'homework', $_GET['id']); if ($multiuser_access == 'own') { $homework = self::select($wpdb->prepare(' WHERE id=%d ', $_GET['id'])); $homework = $homework[0]; if ($homework->editor_id != $user_ID) { wp_die(__('You are not allowed to edit or delete this assignment', 'namaste')); } } if (!empty($_POST['del'])) { self::delete($_GET['id']); //$_SESSION['namaste_flash'] = __('Homework deleted', 'namaste'); namaste_redirect("admin.php?page=namaste_homeworks&course_id={$_GET['course_id']}&lesson_id={$_GET['lesson_id']}"); } if (!empty($_POST['ok'])) { $wpdb->query($wpdb->prepare("UPDATE " . NAMASTE_HOMEWORKS . " SET\n\t\t\t\t\t\tcourse_id=%d, lesson_id=%d, title=%s, description=%s, accept_files=%d, award_points=%d\n\t\t\t\t\t\tWHERE id=%d", $_GET['course_id'], $_GET['lesson_id'], $_POST['title'], $_POST['description'], @$_POST['accept_files'], @$_POST['award_points'], $_GET['id'])); do_action('namaste_save_homework', $_GET['id']); //$_SESSION['namaste_flash'] = __('Homework saved', 'namaste'); namaste_redirect("admin.php?page=namaste_homeworks&course_id={$_GET['course_id']}&lesson_id={$_GET['lesson_id']}"); } // select homework $homework = self::select($wpdb->prepare(' WHERE id=%d ', $_GET['id'])); $homework = $homework[0]; if (@file_exists(get_stylesheet_directory() . '/namaste/homework.php')) { require get_stylesheet_directory() . '/namaste/homework.php'; } else { require NAMASTE_PATH . "/views/homework.php"; } break; default: // if course is selected, find lessons if (!empty($_GET['course_id'])) { $lessons = $_lesson->select($_GET['course_id']); } // list existing homeworks if course and lesson are selected if (!empty($_GET['course_id']) and !empty($_GET['lesson_id'])) { // apply permissions from other plugins - this allows other plugins to die here if user can't access the course do_action('namaste-check-permissions', 'course', $_GET['course_id']); $own_sql = ''; if ($multiuser_access == 'own') { $own_sql = $wpdb->prepare(" AND tH.editor_id=%d ", $user_ID); } $homeworks = $wpdb->get_results($wpdb->prepare("SELECT tH.*, COUNT(tS.id) as solutions \n\t\t\t\t\t\tFROM " . NAMASTE_HOMEWORKS . " tH LEFT JOIN " . NAMASTE_STUDENT_HOMEWORKS . " tS ON tS.homework_id = tH.id\n\t\t\t\t\t\tWHERE tH.course_id=%d AND tH.lesson_id=%d\t{$own_sql} \n\t\t\t\t\t\tGROUP BY tH.id ORDER BY tH.title", $_GET['course_id'], $_GET['lesson_id'])); } if (@file_exists(get_stylesheet_directory() . '/namaste/homeworks.php')) { require get_stylesheet_directory() . '/namaste/homeworks.php'; } else { require NAMASTE_PATH . "/views/homeworks.php"; } break; } }
static function options() { global $wp_roles, $wp_rewrite; $is_admin = current_user_can('administrator'); $multiuser_access = 'all'; $multiuser_access = NamasteLMSMultiUser::check_access('settings_access'); if (!empty($_POST['namaste_options']) and check_admin_referer('save_options', 'nonce_options')) { $roles = $wp_roles->roles; foreach ($roles as $key => $r) { if ($key == 'administrator') { continue; } $role = get_role($key); // use Namaste! if (in_array($key, $_POST['use_roles'])) { if (!$role->has_cap('namaste')) { $role->add_cap('namaste'); } } else { $role->remove_cap('namaste'); } // manage Namaste! - allow only admin change this if ($is_admin) { if (@in_array($key, $_POST['manage_roles'])) { if (!$role->has_cap('namaste_manage')) { $role->add_cap('namaste_manage'); } } else { $role->remove_cap('namaste_manage'); } } // end if can_manage_options } // end foreach role update_option('namaste_show_courses_in_blog', @$_POST['show_courses_in_blog']); update_option('namaste_show_lessons_in_blog', @$_POST['show_lessons_in_blog']); $_POST['course_slug'] = preg_replace('/[^\\w\\-]/', '', $_POST['course_slug']); $_POST['lesson_slug'] = preg_replace('/[^\\w\\-]/', '', $_POST['lesson_slug']); update_option('namaste_course_slug', $_POST['course_slug']); update_option('namaste_lesson_slug', $_POST['lesson_slug']); $wp_rewrite->flush_rules(); } if (!empty($_POST['namaste_exam_options']) and check_admin_referer('save_exam_options', 'nonce_exam_options')) { update_option('namaste_use_exams', $_POST['use_exams']); update_option('namaste_cleanup_exams', @$_POST['cleanup_exams']); } if (!empty($_POST['namaste_payment_options']) and check_admin_referer('save_payment_options', 'nonce_payment_options')) { update_option('namaste_accept_other_payment_methods', $_POST['accept_other_payment_methods']); update_option('namaste_other_payment_methods', $_POST['other_payment_methods']); if (empty($_POST['currency'])) { $_POST['currency'] = $_POST['custom_currency']; } update_option('namaste_currency', $_POST['currency']); update_option('namaste_accept_paypal', $_POST['accept_paypal']); update_option('namaste_paypal_sandbox', @$_POST['paypal_sandbox']); update_option('namaste_paypal_id', $_POST['paypal_id']); update_option('namaste_paypal_return', $_POST['paypal_return']); update_option('namaste_accept_stripe', $_POST['accept_stripe']); update_option('namaste_stripe_public', $_POST['stripe_public']); update_option('namaste_stripe_secret', $_POST['stripe_secret']); } if (!empty($_POST['namaste_grade_options'])) { update_option('namaste_use_grading_system', @$_POST['use_grading_system']); update_option('namaste_grading_system', $_POST['grading_system']); update_option('namaste_use_points_system', @$_POST['use_points_system']); update_option('namaste_points_course', $_POST['points_course']); update_option('namaste_points_lesson', $_POST['points_lesson']); update_option('namaste_points_homework', $_POST['points_homework']); do_action('namaste_default_points_update'); } // select all roles in the system $roles = $wp_roles->roles; // what exams to use $use_exams = get_option('namaste_use_exams'); // see if watu/watuPRO are available and activate $current_plugins = get_option('active_plugins'); $watu_active = $watupro_active = false; if (in_array('watu/watu.php', $current_plugins)) { $watu_active = true; } if (in_array('watupro/watupro.php', $current_plugins)) { $watupro_active = true; } $accept_other_payment_methods = get_option('namaste_accept_other_payment_methods'); $accept_paypal = get_option('namaste_accept_paypal'); $accept_stripe = get_option('namaste_accept_stripe'); $currency = get_option('namaste_currency'); $currencies = array('USD' => '$', "EUR" => "€", "GBP" => "£", "JPY" => "¥", "AUD" => "AUD", "CAD" => "CAD", "CHF" => "CHF", "CZK" => "CZK", "DKK" => "DKK", "HKD" => "HKD", "HUF" => "HUF", "ILS" => "ILS", "INR" => "INR", "MXN" => "MXN", "NOK" => "NOK", "NZD" => "NZD", "PLN" => "PLN", "SEK" => "SEK", "SGD" => "SGD", "ZAR" => "ZAR"); $currency_keys = array_keys($currencies); $use_grading_system = get_option('namaste_use_grading_system'); $grading_system = stripslashes(get_option('namaste_grading_system')); if (empty($grading_system)) { $grading_system = "A, B, C, D, F"; } $use_points_system = get_option('namaste_use_points_system'); $payment_errors = get_option('namaste_errorlog'); // strip to reasonable length $payment_errors = substr($payment_errors, 0, 10000); $course_slug = get_option('namaste_course_slug'); if (empty($course_slug)) { $course_slug = 'namaste-course'; } $lesson_slug = get_option('namaste_lesson_slug'); if (empty($lesson_slug)) { $lesson_slug = 'namaste-lesson'; } if (@file_exists(get_stylesheet_directory() . '/namaste/options.php')) { require get_stylesheet_directory() . '/namaste/options.php'; } else { require NAMASTE_PATH . "/views/options.php"; } }
static function student_certificates() { global $wpdb, $user_ID; $certificate = $wpdb->get_row($wpdb->prepare("SELECT * FROM " . NAMASTE_CERTIFICATES . " WHERE id=%d", $_GET['id'])); $multiuser_access = 'all'; $multiuser_access = NamasteLMSMultiUser::check_access('certificates_access'); $_cert = new NamasteLMSCertificateModel(); if (!empty($_GET['approve'])) { // NYI, no such feature yet } if (!empty($_GET['delete'])) { $wpdb->query($wpdb->prepare("DELETE FROM " . NAMASTE_STUDENT_CERTIFICATES . " WHERE id=%d", $_GET['student_certificate_id'])); } // select users $users = $wpdb->get_results($wpdb->prepare("SELECT tSC.id as student_certificate_id, tU.user_nicename as user_nicename, \n\t\ttU.user_email as user_email, tSC.date as date, tU.id as student_id\n\t\tFROM " . NAMASTE_STUDENT_CERTIFICATES . " tSC JOIN {$wpdb->users} tU ON tSC.student_id = tU.ID \t\t\n\t\tWHERE tSC.certificate_id=%d\n\t\tORDER BY tSC.id DESC", $certificate->id)); $dateformat = get_option('date_format'); $is_admin = true; if (@file_exists(get_stylesheet_directory() . '/namaste/students-earned-certificate.html.php')) { require get_stylesheet_directory() . '/namaste/students-earned-certificate.html.php'; } else { require NAMASTE_PATH . "/views/students-earned-certificate.html.php"; } }
static function change_solution_status($lesson, $student_id = NULL) { global $wpdb, $user_ID; if (!current_user_can('namaste_manage')) { wp_die(__('You are not allowed to do this', 'namaste')); } $solution = $wpdb->get_row($wpdb->prepare("SELECT * FROM " . NAMASTE_STUDENT_HOMEWORKS . " WHERE id=%d", $_POST['solution_id'])); if (!$student_id) { $student_id = $solution->student_id; } $homework = $wpdb->get_row($wpdb->prepare("SELECT * FROM " . NAMASTE_HOMEWORKS . " WHERE id=%d", $solution->homework_id)); $multiuser_access = 'all'; $multiuser_access = NamasteLMSMultiUser::check_access('homework_access'); if ($multiuser_access == 'own' and $homework->editor_id != $user_ID) { wp_die(__('You are not allowed to see these solutions', 'namaste')); } $wpdb->query($wpdb->prepare("UPDATE " . NAMASTE_STUDENT_HOMEWORKS . " SET\n\t\t\tstatus=%s WHERE id=%d", $_POST['status'], $_POST['solution_id'])); do_action('namaste_change_solution_status', $student_id, $_POST['solution_id'], $_POST['status']); // insert in history $wpdb->query($wpdb->prepare("INSERT INTO " . NAMASTE_HISTORY . " SET\n\t\t\tuser_id=%d, date=CURDATE(), datetime=NOW(), action='solution_processed', value=%s, num_value=%d", $student_id, sprintf(__('Solution to assignment %s was %s', 'namaste'), $homework->title, $_POST['status']), $_POST['solution_id'])); // award points? if ($_POST['status'] == 'approved' and get_option('namaste_use_points_system')) { if ($homework->award_points) { NamastePoint::award($student_id, $homework->award_points, sprintf(__('Received %d points for completing assignment "%s".', 'namaste'), $homework->award_points, $homework->title, 'homework', $homework->id)); } } // maybe complete the lesson if the status is approved if ($_POST['status'] == 'approved' and NamasteLMSLessonModel::is_ready($lesson->ID, $student_id)) { NamasteLMSLessonModel::complete($lesson->ID, $student_id); } }