コード例 #1
0
 /**
  * Process payment.
  *
  * @return array
  */
 public function process_payment($object_id, $user_id = 0, $payment_type = 'course', $atts = array())
 {
     if (!$user_id) {
         $user_id = get_current_user_id();
     }
     if (!$user_id) {
         return array('status' => '', 'redirect' => home_url('/'));
     }
     // Add payment.
     $payment = IB_Educator_Payment::get_instance();
     $payment->user_id = $user_id;
     $payment->payment_type = $payment_type;
     $payment->payment_status = 'complete';
     $payment->payment_gateway = $this->get_id();
     $payment->amount = 0.0;
     $payment->currency = ib_edu_get_currency();
     if ('course' == $payment_type) {
         $payment->course_id = $object_id;
         $payment->amount = ib_edu_get_course_price($object_id);
     } elseif ('membership' == $payment_type) {
         $payment->object_id = $object_id;
         $ms = IB_Educator_Memberships::get_instance();
         $payment->amount = $ms->get_price($object_id);
     }
     if (!empty($atts['ip'])) {
         $payment->ip = $atts['ip'];
     }
     if (0.0 == $payment->amount) {
         $payment->save();
         if ($payment->ID) {
             if ('course' == $payment->payment_type) {
                 // Setup course entry.
                 $entry = IB_Educator_Entry::get_instance();
                 $entry->course_id = $object_id;
                 $entry->user_id = $user_id;
                 $entry->payment_id = $payment->ID;
                 $entry->entry_status = 'inprogress';
                 $entry->entry_date = date('Y-m-d H:i:s');
                 $entry->save();
             } elseif ('membership' == $payment->payment_type) {
                 // Setup membership.
                 $ms->setup_membership($user_id, $object_id);
             }
         }
     }
     return array('status' => 'complete', 'redirect' => get_permalink($object_id), 'payment' => $payment);
 }
コード例 #2
0
 /**
  * Add course entry.
  */
 public function addEntry($data)
 {
     $payment = IB_Educator_Payment::get_instance($data['payment_id']);
     $entry = IB_Educator_Entry::get_instance();
     $entry->course_id = $data['course_id'];
     $entry->user_id = $payment->user_id;
     $entry->payment_id = $payment->ID;
     $entry->entry_status = $data['entry_status'];
     $entry->entry_date = date('Y-m-d H:i:s');
     $entry->save();
     return $entry->ID;
 }
コード例 #3
0
 /**
  * Prepare items.
  * Fetch and setup entries(items).
  */
 public function prepare_items()
 {
     $this->_column_headers = array($this->get_columns(), array(), $this->get_sortable_columns());
     $entries = null;
     $api = IB_Educator::get_instance();
     $statuses = IB_Educator_Entry::get_statuses();
     $args = array('per_page' => $this->get_items_per_page('entries_per_page', 10), 'page' => $this->get_pagenum());
     /**
      * Search by status.
      */
     if (!empty($_GET['status']) && array_key_exists($_GET['status'], $statuses)) {
         $args['entry_status'] = $_GET['status'];
     }
     // Search by ID.
     if (!empty($_GET['id'])) {
         $args['entry_id'] = $_GET['id'];
     }
     // Search by course id.
     if (!empty($_GET['course_id'])) {
         $args['course_id'] = $_GET['course_id'];
     }
     if (!empty($_GET['student'])) {
         $user = get_user_by('slug', $_GET['student']);
         if ($user) {
             $args['user_id'] = $user->ID;
         }
     }
     // Check capabilities.
     if (current_user_can('manage_educator')) {
         // Get all entries.
         $entries = $api->get_entries($args, 'ARRAY_A');
     } elseif (current_user_can('educator_edit_entries')) {
         // Get the entries for the current lecturer's courses only.
         $course_ids = $api->get_lecturer_courses(get_current_user_id());
         if (!empty($course_ids)) {
             if (empty($args['course_id']) || !in_array($args['course_id'], $course_ids)) {
                 $args['course_id'] = $course_ids;
             }
             $entries = $api->get_entries($args, 'ARRAY_A');
         }
     }
     if (!empty($entries)) {
         $this->set_pagination_args(array('total_items' => $entries['num_items'], 'per_page' => $args['per_page']));
         $this->items = $entries['rows'];
     }
 }
コード例 #4
0
 /**
  * Delete an entry.
  */
 public static function delete_entry()
 {
     // Verify nonce.
     if (!isset($_GET['_wpnonce']) || !wp_verify_nonce($_GET['_wpnonce'], 'edr_delete_entry')) {
         return;
     }
     // Check permissions.
     if (!current_user_can('manage_educator')) {
         return;
     }
     // Get entry.
     $entry_id = isset($_GET['entry_id']) ? intval($_GET['entry_id']) : 0;
     if (!$entry_id) {
         return;
     }
     $entry = IB_Educator_Entry::get_instance($entry_id);
     // Delete entry if it was found.
     if ($entry->ID && $entry->delete()) {
         wp_redirect(admin_url('admin.php?page=ib_educator_entries&edr-message=entry_deleted'));
         exit;
     }
 }
コード例 #5
0
 /**
  * Resume entry.
  */
 public static function resume_entry()
 {
     if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'ib_educator_resume_entry')) {
         return;
     }
     // Get the current user id.
     $user_id = get_current_user_id();
     if (!$user_id) {
         return;
     }
     // Get entry id.
     if (!isset($_POST['entry_id'])) {
         return;
     }
     $entry_id = $_POST['entry_id'];
     // Get entry.
     $entry = IB_Educator_Entry::get_instance($entry_id);
     if (!$entry) {
         return;
     }
     $ms = IB_Educator_Memberships::get_instance();
     // Check if there is an "inprogress" entry for this course.
     $api = IB_Educator::get_instance();
     $inprogress_entry = $api->get_entry(array('entry_status' => 'inprogress', 'course_id' => $entry->course_id, 'user_id' => $user_id));
     // Make sure that this entry belongs to the current user.
     // Make sure that the current membership gives access to this entry's course.
     if ($inprogress_entry || $entry->user_id != $user_id || !$ms->membership_can_access($entry->course_id, $user_id)) {
         return;
     }
     $entry->entry_status = 'inprogress';
     $entry->save();
     wp_safe_redirect(get_permalink());
 }
コード例 #6
0
ファイル: ib-educator.php プロジェクト: kptac/ibeducator
 /**
  * Setup payment item (e.g. course, membership).
  *
  * @param IB_Educator_Payment $payment
  */
 public function setup_payment_item($payment)
 {
     if ('course' == $payment->payment_type) {
         // Setup course entry.
         $entry = $this->get_entry(array('payment_id' => $payment->ID));
         if (!$entry) {
             $entry = IB_Educator_Entry::get_instance();
             $entry->course_id = $payment->course_id;
             $entry->user_id = $payment->user_id;
             $entry->payment_id = $payment->ID;
             $entry->entry_status = 'inprogress';
             $entry->entry_date = date('Y-m-d H:i:s');
             $entry->save();
             // Send notification email to the student.
             $student = get_user_by('id', $payment->user_id);
             $course = get_post($payment->course_id, OBJECT, 'display');
             if ($student && $course) {
                 ib_edu_send_notification($student->user_email, 'student_registered', array('course_title' => $course->post_title), array('student_name' => $student->display_name, 'course_title' => $course->post_title, 'course_excerpt' => $course->post_excerpt));
             }
         }
     } elseif ('membership' == $payment->payment_type) {
         // Setup membership.
         $ms = IB_Educator_Memberships::get_instance();
         $ms->setup_membership($payment->user_id, $payment->object_id);
         $student = get_user_by('id', $payment->user_id);
         $membership = $ms->get_membership($payment->object_id);
         if ($student && $membership) {
             $user_membership = $ms->get_user_membership($student->ID);
             $membership_meta = $ms->get_membership_meta($membership->ID);
             $expiration = $user_membership ? $user_membership['expiration'] : 0;
             ib_edu_send_notification($student->user_email, 'membership_register', array(), array('student_name' => $student->display_name, 'membership' => $membership->post_title, 'expiration' => $expiration ? date_i18n(get_option('date_format'), $expiration) : __('None', 'ibeducator'), 'price' => $ms->format_price($membership_meta['price'], $membership_meta['duration'], $membership_meta['period'], false)));
         }
     }
 }
コード例 #7
0
ファイル: edit-entry.php プロジェクト: kptac/ibeducator
$entry_id = isset($_GET['entry_id']) ? absint($_GET['entry_id']) : 0;
$entry = IB_Educator_Entry::get_instance($entry_id);
$who = '';
if (current_user_can('manage_educator')) {
    $who = 'admin';
} elseif ($entry->course_id && current_user_can('edit_ib_educator_course', $entry->course_id)) {
    $who = 'lecturer';
}
// Check capabilities.
if (empty($who)) {
    // Current user cannot create entries.
    echo '<p>' . __('Access denied', 'ibeducator') . '</p>';
    return;
}
$statuses = IB_Educator_Entry::get_statuses();
$origins = IB_Educator_Entry::get_origins();
$student = null;
$course = null;
$input = array('payment_id' => isset($_POST['payment_id']) ? $_POST['payment_id'] : $entry->payment_id, 'membership_id' => isset($_POST['membership_id']) ? $_POST['membership_id'] : $entry->object_id, 'entry_origin' => isset($_POST['entry_origin']) ? $_POST['entry_origin'] : $entry->entry_origin, 'entry_status' => isset($_POST['entry_status']) ? $_POST['entry_status'] : $entry->entry_status, 'grade' => isset($_POST['grade']) ? $_POST['grade'] : $entry->grade, 'entry_date' => isset($_POST['entry_date']) ? $_POST['entry_date'] : (!empty($entry->entry_date) ? $entry->entry_date : date('Y-m-d H:i:s')));
if ('admin' == $who && isset($_POST['student_id'])) {
    $student = get_user_by('id', $_POST['student_id']);
} elseif ($entry->ID) {
    $student = get_user_by('id', $entry->user_id);
}
if ('admin' == $who && isset($_POST['course_id'])) {
    $course = get_post($_POST['course_id']);
} elseif ($entry->ID) {
    $course = get_post($entry->course_id);
}
?>
<div class="wrap">
コード例 #8
0
ファイル: entry-progress.php プロジェクト: kptac/ibeducator
<?php

if (!defined('ABSPATH')) {
    exit;
}
$entry_id = isset($_GET['entry_id']) ? absint($_GET['entry_id']) : 0;
if (!$entry_id) {
    return;
}
$entry = IB_Educator_Entry::get_instance($entry_id);
if (!$entry->ID) {
    return;
}
// Verify capabilities.
if (!current_user_can('edit_ib_educator_course', $entry->course_id)) {
    echo '<p>' . __('Access denied', 'ibeducator') . '</p>';
    exit;
}
$api = IB_Educator::get_instance();
$quizzes = new WP_Query(array('post_type' => 'ib_educator_lesson', 'posts_per_page' => -1, 'meta_query' => array('relation' => 'AND', array('key' => '_ibedu_quiz', 'value' => 1, 'compare' => '='), array('key' => '_ibedu_course', 'value' => $entry->course_id, 'compare' => '=')), 'orderby' => 'menu_order', 'order' => 'ASC'));
$suggested_grade = 0;
$num_quizzes = $quizzes->found_posts;
$student = get_user_by('id', $entry->user_id);
$course = get_post($entry->course_id);
?>
<div id="ib-edu-progress" class="wrap">
	<h2><?php 
_e('Progress', 'ibeducator');
?>
</h2>
コード例 #9
0
 /**
  * Pause user's entries with origin of "membership".
  */
 public function testPauseMembershipEntries()
 {
     $entry = IB_Educator_Entry::get_instance();
     $entry->course_id = $this->courses[0];
     $entry->user_id = $this->users['student1'];
     $entry->payment_id = 0;
     $entry->entry_status = 'inprogress';
     $entry->entry_origin = 'membership';
     $entry->entry_date = date('Y-m-d H:i:s');
     $entry->save();
     $ms = IB_Educator_Memberships::get_instance();
     $ms->pause_membership_entries($this->users['student1']);
     $entry = IB_Educator_Entry::get_instance($entry->ID);
     $this->assertEquals('paused', $entry->entry_status);
 }
コード例 #10
0
 /**
  * AJAX: add grade for a quiz.
  */
 public static function quiz_grade()
 {
     global $wpdb;
     $api = IB_Educator::get_instance();
     $entry_id = isset($_POST['entry_id']) ? absint($_POST['entry_id']) : 0;
     $lesson_id = isset($_POST['lesson_id']) ? absint($_POST['lesson_id']) : 0;
     // Verify nonce.
     if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'ibedu_edit_progress_' . $entry_id)) {
         exit;
     }
     // Verify capabilities.
     if (!current_user_can('edit_ib_educator_lesson', $lesson_id)) {
         exit;
     }
     $quiz_grade = $api->get_quiz_grade($lesson_id, $entry_id);
     if (!$quiz_grade) {
         exit;
     }
     $grade = isset($_POST['grade']) ? floatval($_POST['grade']) : 0;
     $api->update_quiz_grade($quiz_grade->ID, array('grade' => $grade, 'status' => 'approved'));
     // Send notification email to the student.
     $entry = IB_Educator_Entry::get_instance($entry_id);
     $student = get_user_by('id', $entry->user_id);
     if ($student) {
         $lesson_title = get_the_title($lesson_id);
         ib_edu_send_notification($student->user_email, 'quiz_grade', array('lesson_title' => $lesson_title), array('student_name' => $student->display_name, 'lesson_title' => $lesson_title, 'grade' => ib_edu_format_grade($grade)));
     }
     echo json_encode(array('status' => 'success'));
     exit;
 }