Example #1
0
 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;
 }
Example #2
0
 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";
     }
 }
Example #3
0
 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;
     }
 }
Example #4
0
 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" => "&euro;", "GBP" => "&pound;", "JPY" => "&yen;", "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";
     }
 }
Example #5
0
 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";
     }
 }
Example #6
0
 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);
     }
 }