/** * Shortcode: educator_courses. * * @param array $atts * @param string $content * @return string */ function educator_courses_shortcode($atts, $content = null) { $atts = shortcode_atts(array('show_price' => 1, 'ids' => '', 'number' => 15, 'categories' => null), $atts); $output = '<div class="courses-carousel owl-carousel">'; $params = array('post_type' => 'ib_educator_course', 'orderby' => 'menu_order', 'posts_per_page' => intval($atts['number'])); if ($atts['ids']) { $ids = explode(' ', $atts['ids']); $params['post__in'] = array(); foreach ($ids as $id) { $params['post__in'][] = intval($id); } $params['posts_per_page'] = -1; $params['orderby'] = 'post__in'; } if ($atts['categories']) { $categories = explode(' ', $atts['categories']); foreach ($categories as $key => $term_id) { $categories[$key] = intval($term_id); } $params['tax_query'] = array(array('taxonomy' => 'ib_educator_category', 'field' => 'term_id', 'terms' => $categories)); } $query = new WP_Query($params); if ($query->have_posts()) { $course_id = 0; while ($query->have_posts()) { $query->the_post(); $course_id = get_the_ID(); $output .= '<article class="' . esc_attr(implode(' ', get_post_class('post-grid'))) . '">'; if (has_post_thumbnail()) { $output .= '<div class="post-thumb"><a href="' . esc_url(get_permalink()) . '">' . get_the_post_thumbnail($course_id, 'ib-educator-grid') . '</a></div>'; } $output .= '<div class="post-body">'; $output .= '<h2 class="entry-title"><a href="' . esc_url(get_permalink()) . '">' . the_title('', '', false) . '</a></h2>'; if (1 == $atts['show_price'] && 'closed' != ib_edu_registration($course_id)) { $output .= '<div class="price">' . ib_edu_format_course_price(ib_edu_get_course_price($course_id)) . '</div>'; } ob_start(); the_excerpt(); $output .= '<div class="post-excerpt">' . ob_get_clean() . '</div>'; $output .= '</div>'; if (function_exists('educator_course_meta')) { $output .= '<footer class="post-meta">' . educator_course_meta($course_id, array('num_lessons', 'difficulty')) . educator_share('menu') . '</footer>'; } $output .= '</article>'; } wp_reset_postdata(); } $output .= '</div>'; return $output; }
/** * 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); }
/** * Get payment info table. * * @param WP_Post $object * @param array $args * @return string */ public static function payment_info($object, $args = array()) { // Get price. if (!isset($args['price'])) { if ('ib_educator_course' == $object->post_type) { $args['price'] = ib_edu_get_course_price($object->ID); } elseif ('ib_edu_membership' == $object->post_type) { $args['price'] = IB_Educator_Memberships::get_instance()->get_price($object->ID); } } // Get tax data. $tax_enabled = ib_edu_get_option('enable', 'taxes'); if ($tax_enabled) { $edu_tax = IB_Educator_Tax::get_instance(); $tax_data = $edu_tax->calculate_tax($edu_tax->get_tax_class_for($object->ID), $args['price'], $args['country'], $args['state']); } else { $tax_data = array('taxes' => array(), 'subtotal' => $args['price'], 'tax' => 0.0, 'total' => $args['price']); } // Items list. $output = '<table class="edu-payment-table">'; $output .= '<thead><tr><th>' . __('Item', 'ibeducator') . '</th><th>' . __('Price', 'ibeducator') . '</th></tr></thead>'; if ('ib_educator_course' == $object->post_type) { $output .= '<tbody><tr><td>'; if (ib_edu_get_option('payment_lecturer', 'settings')) { $output .= sprintf(__('%s with %s', 'ibeducator'), '<a href="' . esc_url(get_permalink($object->ID)) . '" target="_blank">' . esc_html($object->post_title) . '</a>', esc_html(get_the_author_meta('display_name', $object->post_author))); } else { $output .= '<a href="' . esc_url(get_permalink($object->ID)) . '" target="_blank">' . esc_html($object->post_title) . '</a>'; } $output .= '<input type="hidden" id="payment-object-id" name="course_id" value="' . intval($object->ID) . '"></td>'; $output .= '<td>' . ib_edu_format_price($tax_data['subtotal'], false) . '</td></tr></tbody>'; } elseif ('ib_edu_membership' == $object->post_type) { $output .= '<tbody><tr><td>' . esc_html($object->post_title); $output .= '<input type="hidden" id="payment-object-id" name="membership_id" value="' . intval($object->ID) . '"></td>'; $ms = IB_Educator_Memberships::get_instance(); $membership_meta = $ms->get_membership_meta($object->ID); $output .= '<td>' . $ms->format_price($tax_data['subtotal'], $membership_meta['duration'], $membership_meta['period']) . '</td></tr></tbody>'; } $output .= '</table>'; // Summary. $output .= '<dl class="edu-payment-summary edu-dl">'; if ($tax_data['tax'] > 0.0) { $output .= '<dt class="payment-subtotal">' . __('Subtotal', 'ibeducator') . '</dt><dd>' . ib_edu_format_price($tax_data['subtotal'], false) . '</dd>'; foreach ($tax_data['taxes'] as $tax) { $output .= '<dt class="payment-tax">' . esc_html($tax->name) . '</dt><dd>' . ib_edu_format_price($tax->amount, false) . '</dd>'; } } $output .= '<dt class="payment-total">' . __('Total', 'ibeducator') . '</dt><dd>' . ib_edu_format_price($tax_data['total'], false) . '</dd>'; $output .= '</dl>'; return $output; }
/** * Add payment. */ public function addPayment($input) { $data = array('user_id' => $input['user_id'], 'payment_type' => $input['payment_type'], 'payment_gateway' => 'paypal', 'payment_status' => $input['payment_status'], 'currency' => 'USD'); if ('course' == $input['payment_type']) { $data['course_id'] = $input['course_id']; $data['amount'] = ib_edu_get_course_price($input['course_id']); } elseif ('membership' == $input['payment_type']) { $data['object_id'] = $input['object_id']; $ms = IB_Educator_Memberships::get_instance(); $data['amount'] = $ms->get_price($input['object_id']); } $payment = $this->api->add_payment($data); return $payment->ID; }
} elseif (!empty($billing['country'])) { $args['country'] = $billing['country']; } else { $args['country'] = ib_edu_get_location('country'); } // Get state. if (isset($_POST['billing_state'])) { $args['state'] = $_POST['billing_state']; } elseif (!empty($billing['state'])) { $args['state'] = $billing['state']; } else { $args['state'] = ib_edu_get_location('state'); } // Get price. if ('ib_educator_course' == $post->post_type) { $args['price'] = ib_edu_get_course_price($post->ID); } elseif ('ib_edu_membership' == $post->post_type) { $args['price'] = Edr_Memberships::get_instance()->get_price($post->ID); } // Output payment summary. echo '<div id="edu-payment-info" class="edu-payment-info">' . Edr_StudentAccount::payment_info($post, $args) . '</div>'; // Payment gateways. $gateways = IB_Educator_Main::get_gateways(); ?> <?php if ($args['price'] && !empty($gateways)) { ?> <div class="ib-edu-form-field<?php if (in_array('empty_payment_method', $error_codes)) { echo ' error';
the_post_thumbnail('ib-educator-grid'); ?> </a> </div> <?php } ?> <div class="post-body"> <?php the_title('<h2 class="entry-title"><a href="' . esc_url(get_permalink()) . '" rel="bookmark">', '</a></h2>'); ?> <div class="price"> <?php if ('closed' != ib_edu_registration($course_id)) { echo ib_edu_format_price(ib_edu_get_course_price($course_id)); } ?> </div> <div class="post-excerpt"><?php the_excerpt(); ?> </div> </div> <footer class="post-meta"> <?php echo educator_course_meta($course_id, array('num_lessons', 'difficulty')); echo educator_share('menu'); ?> </footer>
/** * Find out whether to collect billing data or not. * * @param mixed $object * @return bool */ function ib_edu_collect_billing_data($object) { if (is_numeric($object)) { $object = get_post($object); } $result = false; if ($object) { $price = null; if ('ib_edu_membership' == $object->post_type) { $price = IB_Educator_Memberships::get_instance()->get_price($object->ID); } elseif ('ib_educator_course' == $object->post_type) { $price = ib_edu_get_course_price($object->ID); } if ($price && ib_edu_get_option('enable', 'taxes')) { $result = true; } } return $result; }
<?php // Setup form object. require_once IBEDUCATOR_PLUGIN_DIR . 'includes/ib-educator-form.php'; $form = new IB_Educator_Form(); $form->default_decorators(); // Registration. $form->set_value('_ib_educator_register', get_post_meta($post->ID, '_ib_educator_register', true)); $form->add(array('type' => 'select', 'name' => '_ib_educator_register', 'label' => __('Registration', 'ibeducator'), 'options' => array('open' => __('Open', 'ibeducator'), 'closed' => __('Closed', 'ibeducator')), 'default' => 'open')); // Price. $form->set_value('_ibedu_price', ib_edu_get_course_price($post->ID)); $form->add(array('type' => 'text', 'name' => '_ibedu_price', 'class' => '', 'id' => 'ib-educator-price', 'label' => __('Price', 'ibeducator'), 'before' => esc_html(ib_edu_get_currency_symbol(ib_edu_get_currency())) . ' ')); // Tax Class. $edu_tax = IB_Educator_Tax::get_instance(); $form->set_value('_ib_educator_tax_class', $edu_tax->get_tax_class_for($post->ID)); $form->add(array('type' => 'select', 'name' => '_ib_educator_tax_class', 'label' => __('Tax Class', 'ibeducator'), 'options' => $edu_tax->get_tax_classes(), 'default' => 'default')); // Difficulty. $form->set_value('_ib_educator_difficulty', get_post_meta($post->ID, '_ib_educator_difficulty', true)); $form->add(array('type' => 'select', 'name' => '_ib_educator_difficulty', 'id' => 'ib-educator-difficulty', 'label' => __('Difficulty', 'ibeducator'), 'options' => array_merge(array('' => __('None', 'ibeducator')), ib_edu_get_difficulty_levels()))); // Prerequisite. $courses = array('' => __('None', 'ibeducator')); $tmp = get_posts(array('post_type' => 'ib_educator_course', 'post_status' => 'publish', 'posts_per_page' => -1)); foreach ($tmp as $course) { $courses[$course->ID] = $course->post_title; } $prerequisites = IB_Educator::get_instance()->get_prerequisites($post->ID); $form->set_value('_ib_educator_prerequisite', array_pop($prerequisites)); $form->add(array('type' => 'select', 'name' => '_ib_educator_prerequisite', 'id' => 'ib-educator-prerequisite', 'label' => __('Prerequisite', 'ibeducator'), 'options' => $courses)); wp_nonce_field('ib_educator_course_meta_box', 'ib_educator_course_meta_box_nonce'); $form->display();
/** * Get related courses. * * @param int $post_id * @return string */ function educator_related_courses($post_id) { $terms = get_the_terms($post_id, 'ib_educator_category'); if (!$terms || is_wp_error($terms)) { return; } $args = array('post_type' => 'ib_educator_course', 'posts_per_page' => 3, 'post__not_in' => array($post_id)); $terms_ids = array(); foreach ($terms as $term) { $terms_ids[] = $term->term_id; } $args['tax_query'] = array(array('taxonomy' => 'ib_educator_category', 'terms' => $terms_ids)); $query = new WP_Query($args); if ($query->have_posts()) { $output = '<section class="related-courses">'; $output .= '<h1>' . __('Related Courses', 'ib-educator') . '</h1>'; $api = IB_Educator::get_instance(); $course_id = 0; while ($query->have_posts()) { $query->the_post(); $course_id = get_the_ID(); $output .= '<article class="' . esc_attr(implode(' ', get_post_class('clearfix'))) . '">'; if (has_post_thumbnail()) { $output .= '<div class="post-thumb"><a href="' . esc_url(get_permalink()) . '">' . get_the_post_thumbnail($course_id, 'thumbnail') . '</a></div>'; } $output .= '<div class="post-summary">' . '<h2 class="entry-title"><a href="' . esc_url(get_permalink()) . '">' . the_title('', '', false) . '</a></h2>'; ob_start(); the_excerpt(); $output .= '<div class="post-excerpt">' . ob_get_clean() . '</div>'; $output .= '<div class="post-meta">'; if ('closed' != ib_edu_registration($course_id)) { $output .= '<span class="price">' . ib_edu_format_course_price(ib_edu_get_course_price($course_id)) . '</span>'; } $output .= educator_course_meta($course_id, array('num_lessons', 'difficulty')); $output .= '</div>'; $output .= '</div>'; $output .= '</article>'; } wp_reset_postdata(); $output .= '</section>'; return $output; } return ''; }
?> </a> <div class="ib-edu-course-price"> <?php if (ib_edu_get_course_price(get_the_ID()) == 0) { ?> <span class="label-free"><?php esc_html_e('Free', 'training'); ?> </span> <?php } else { ?> <span><?php echo ib_edu_format_price(ib_edu_get_course_price(get_the_ID())); ?> </span> <?php } ?> </div> </div> <?php } ?> <div class="course-inner"> <div class="course-header"> <h4><a href="<?php echo esc_url($link);
/** * Create payment. * * @param int $object_id ID of the object the payment is to be associated with. * @param int $user_id * @param string $payment_type * @return IB_Educator_Payment */ public function create_payment($object_id, $user_id, $payment_type, $atts = array()) { $payment = IB_Educator_Payment::get_instance(); $payment->user_id = $user_id; $payment->payment_type = $payment_type; $payment->payment_status = 'pending'; $payment->payment_gateway = $this->get_id(); $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; $payment->amount = IB_Educator_Memberships::get_instance()->get_price($object_id); } $tax_data = null; if (ib_edu_collect_billing_data($object_id)) { // Save billing data. $billing = get_user_meta($user_id, '_ib_educator_billing', true); if (!is_array($billing)) { $billing = array(); } $payment->first_name = get_user_meta($user_id, 'first_name', true); $payment->last_name = get_user_meta($user_id, 'last_name', true); $payment->address = isset($billing['address']) ? $billing['address'] : ''; $payment->address_2 = isset($billing['address_2']) ? $billing['address_2'] : ''; $payment->city = isset($billing['city']) ? $billing['city'] : ''; $payment->state = isset($billing['state']) ? $billing['state'] : ''; $payment->postcode = isset($billing['postcode']) ? $billing['postcode'] : ''; $payment->country = isset($billing['country']) ? $billing['country'] : ''; // Calculate tax. $edu_tax = IB_Educator_Tax::get_instance(); $tax_data = $edu_tax->calculate_tax($edu_tax->get_tax_class_for($object_id), $payment->amount, $payment->country, $payment->state); $payment->tax = $tax_data['tax']; $payment->amount = $tax_data['total']; } if (!empty($atts['ip'])) { $payment->ip = $atts['ip']; } $payment->save(); // Save tax data. if ($tax_data) { foreach ($tax_data['taxes'] as $tax) { $payment->update_line(array('object_id' => $tax->ID, 'line_type' => 'tax', 'amount' => $tax->amount, 'name' => $tax->name)); } } return $payment; }
the_title(); ?> </h1> <?php do_action('ib_educator_after_course_title'); ?> <div class="course-rating"> <?php if (function_exists('the_ratings')) { the_ratings(); } ?> </div> <?php $output = '<ul class="list">'; $price = ib_edu_get_course_price($course_id); $price = 0 == $price ? esc_html__('Free', 'training') : ib_edu_format_course_price($price); $register_url = ib_edu_get_endpoint_url('edu-course', $course_id, get_permalink(ib_edu_page_id('payment'))); $output .= '<li class="price"><i class="uicon icon-price"></i><span class="lab">' . esc_html__('Price: ', 'training') . '</span> <span class="val">' . $price . '</span></li>'; if (isset($options['duration']) && $options['duration']) { $output .= '<li class="price"><i class="uicon icon-duration"></i><span class="lab">' . esc_html__('Duration: ', 'training') . '</span> <span class="val">' . $options['duration'] . '</span></li>'; } if (isset($options['is_certificates'])) { $output .= '<li class="price hidden"><i class="uicon icon-certificates"></i><span class="lab">' . esc_html__('Certificates: ', 'training') . '</span> <span class="val">' . ($options['is_certificates'] ? esc_html__('Yes', 'training') : esc_html__('No', 'training')) . '</span></li>'; } $output .= '<li class="lesson"><i class="uicon icon-students"></i><span class="lab">' . esc_html__('Students: ', 'training') . '</span> <span class="val">' . count($students) . '</span></li>'; $output .= '<li class="lesson"><i class="uicon icon-lesson"></i><span class="lab">' . esc_html__('Lesson: ', 'training') . '</span> <span class="val">' . $api->get_num_lessons(get_the_id()) . '</span></li>'; $output .= '</ul>'; echo trim($output); ?>