static function confirm_order($atts = null) { $atts = shortcode_atts(array('order_id' => !empty($_REQUEST['order_id']) ? intval($_REQUEST['order_id']) : 0), $atts); $order_id = null; extract($atts); ob_start(); $order = learn_press_get_order($order_id); if ($order) { learn_press_get_template('order/confirm.php', array('order' => $order)); } return ob_get_clean(); }
function trigger($order_id) { if (!$this->enable) { return; } $this->find['site_title'] = '{site_title}'; $this->find['course_name'] = '{course_name}'; $this->find['course_date'] = '{course_date}'; //$this->replace['site_title'] = $this->get_blogname(); //$this->replace['course_name'] = get_the_title( $course_id ); //$this->replace['course_date'] = get_the_date( null, $course_id ); $this->object = array('order' => $order_id); $return = $this->send($this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments()); LP_Debug::instance()->add(array('action' => learn_press_get_order($order_id))); return $return; }
function learn_press_get_order_status($order_id) { $order = learn_press_get_order($order_id); if ($order) { return $order->get_status(); } return false; }
static function profile() { global $wp_query, $wp; if (isset($wp_query->query['user'])) { $user = get_user_by('login', $wp_query->query['user']); } else { $user = get_user_by('id', get_current_user_id()); } $output = ''; ob_start(); if (!$user) { if (empty($wp_query->query['user'])) { learn_press_get_template('profile/private-area.php'); } else { learn_press_display_message(sprintf(__('The user %s in not available!', 'learn_press'), $wp_query->query['user']), 'error'); } } else { $user = LP_User::get_user($user->id); $tabs = learn_press_user_profile_tabs($user); if (!empty($wp->query_vars['view'])) { $current = $wp->query_vars['view']; } else { $tab_keys = array_keys($tabs); $current = reset($tab_keys); } if (!learn_press_current_user_can_view_profile_section($current, $user)) { learn_press_get_template('profile/private-area.php'); } else { if (!empty($tabs) && !empty($tabs[$current])) { learn_press_get_template('profile/index.php', array('user' => $user, 'tabs' => $tabs, 'current' => $current)); } else { if ($wp->query_vars['view'] == LP()->settings->get('profile_endpoints.profile-order-details')) { /* $current_user = wp_get_current_user(); if ( $wp_query->query_vars['user'] != $current_user->user_login ) { learn_press_get_template( 'profile/private-area.php' ); return; }*/ $order_id = 0; if (!empty($wp->query_vars['id'])) { $order_id = $wp->query_vars['id']; } $order = learn_press_get_order($order_id); if (!$order) { learn_press_display_message(__('Invalid order!', 'learn_press'), 'error'); } else { learn_press_get_template('profile/order-details.php', array('user' => $user, 'order' => $order)); } } } } } $output .= ob_get_clean(); return $output; }
function learn_press_clear_cart_after_payment() { global $wp; if (!empty($wp->query_vars['order-received'])) { $order_id = absint($wp->query_vars['order-received']); $order_key = isset($_GET['key']) ? $_GET['key'] : ''; if ($order_id > 0) { $order = learn_press_get_order($order_id); if ($order->order_key === $order_key) { LP()->cart->empty_cart(); } } } if (LP()->session->order_awaiting_payment > 0) { $order = learn_press_get_order(LP()->session->order_awaiting_payment); if ($order && $order->id > 0) { if (!$order->has_status(array('failed', 'pending', 'cancelled'))) { LP()->cart->empty_cart(); LP()->session->order_awaiting_payment = null; } } } }
/** * Creates temp new order if needed * * @return mixed|WP_Error * @throws Exception */ function create_order() { global $wpdb; // Third-party can be controls to create a order if ($order_id = apply_filters('learn_press_create_order', null, $this)) { return $order_id; } try { // Start transaction if available //$wpdb->query( 'START TRANSACTION' ); $order_data = array('status' => apply_filters('learn_press_default_order_status', 'pending'), 'user_id' => get_current_user_id(), 'user_note' => isset($_REQUEST['order_comments']) ? $_REQUEST['order_comments'] : '', 'created_via' => 'checkout'); // Insert or update the post data $order_id = absint(LP()->session->order_awaiting_payment); // Resume the unpaid order if its pending if ($order_id > 0 && ($order = learn_press_get_order($order_id)) && $order->has_status(array('pending', 'failed'))) { $order_data['ID'] = $order_id; $order = learn_press_update_order($order_data); if (is_wp_error($order)) { throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 401)); } else { $order->remove_order_items(); //do_action( 'learn_press_resume_order', $order_id ); } } else { $order = learn_press_create_order($order_data); if (is_wp_error($order)) { throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 400)); } else { $order_id = $order->id; do_action('learn_press_new_order', $order_id); } } // Store the line items to the new/resumed order foreach (LP()->cart->get_items() as $item) { if (empty($item['order_item_name']) && !empty($item['item_id']) && ($course = LP_Course::get_course($item['item_id']))) { $item['order_item_name'] = $course->get_title(); } else { throw new Exception(sprintf(__('Item does not exists!', 'learn_press'), 402)); } $item_id = $order->add_item($item); if (!$item_id) { throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 402)); } // Allow plugins to add order item meta do_action('learn_press_add_order_item_meta', $item_id, $item); } $order->set_payment_method($this->payment_method); // Update user meta if (!empty($this->user_id)) { if (apply_filters('learn_press_checkout_update_user_data', true, $this)) { // TODO: update user meta } do_action('learn_press_checkout_update_user_meta', $this->user_id, $_REQUEST); } // Third-party add meta data do_action('learn_press_checkout_update_order_meta', $order_id, $_REQUEST); //$wpdb->query( 'COMMIT' ); } catch (Exception $e) { // There was an error adding order data! $wpdb->query('ROLLBACK'); echo $e->getMessage(); return false; //$e->getMessage(); } return $order_id; }
/** * Render column data * */ function render_learn_press_order_columns($column) { global $post; $the_order = learn_press_get_order($post->ID); $order_items = learn_press_get_order_items($post->ID); //$status = get_post_meta($post->ID, '_learn_press_transaction_status', true); switch ($column) { case 'order_student': //$user = new LPR_User( $post->uID ); ?> <a href="user-edit.php?user_id=<?php echo $post->user_ID; ?> "><?php echo $post->user_display_name; ?> </a><?php break; case 'order_status': echo learn_press_get_order_status_label($post->ID); break; case 'order_date': $t_time = get_the_time('Y/m/d g:i:s a'); $m_time = $post->post_date; $time = get_post_time('G', true, $post); $time_diff = current_time('timestamp') - $time; if ($time_diff > 0 && $time_diff < DAY_IN_SECONDS) { $h_time = sprintf(__('%s ago', 'learn_press'), human_time_diff($time)); } else { $h_time = mysql2date('Y/m/d', $m_time); } echo '<abbr title="' . esc_attr($t_time) . '">' . esc_html(apply_filters('learn_press_order_column_time', $h_time, $the_order)) . '</abbr>'; break; case 'order_items': if ($products = learn_press_get_transition_products($post->ID)) { $links = array(); foreach ($products as $pro) { $links[] = '<a href="' . get_the_permalink($pro->ID) . '">' . get_the_title($pro->ID) . '</a>'; } echo join("<br />", $links); } else { _e("Course has been removed", 'learn_press'); } break; case 'order_total': echo learn_press_format_price(empty($order_items->total) ? 0 : $order_items->total, learn_press_get_currency_symbol($order_items->currency)); break; case 'order_title': $order_number = sprintf("%'.010d", $the_order->ID); ?> <div class="tips"> <a href="post.php?post=<?php echo $the_order->ID; ?> &action=edit"><strong><?php echo learn_press_transaction_order_number($order_number); ?> </strong></a> </div> <?php break; } }
/** * Displays order details in a table. * * @param mixed $order_id * * @subpackage Orders */ function learn_press_order_details_table($order_id) { if (!$order_id) { return; } learn_press_get_template('order/order-details.php', array('order' => learn_press_get_order($order_id))); }
/** * Order Detail * * @param String $order * * @return mixed */ function learn_press_order_details_table($order) { learn_press_get_template('order/order-details.php', array('order' => learn_press_get_order($order))); }
/** * Render column data * */ function columns_content($column) { global $post; $the_order = learn_press_get_order($post->ID); //print_r($the_order->get_items());die(); switch ($column) { case 'order_student': if ($the_order->user_id) { $user = learn_press_get_user($the_order->user_id); printf('<a href="user-edit.php?user_id=%d">%s (%s)</a>', $the_order->user_id, $user->user_login, $user->display_name); printf('<br /><span>%s</span>', $user->user_email); } else { _e('Guest', 'learn_press'); } break; case 'order_status': echo learn_press_get_order_status_label($post->ID); break; case 'order_date': $t_time = get_the_time('Y/m/d g:i:s a'); $m_time = $post->post_date; $time = get_post_time('G', true, $post); $time_diff = current_time('timestamp') - $time; if ($time_diff > 0 && $time_diff < DAY_IN_SECONDS) { $h_time = sprintf(__('%s ago', 'learn_press'), human_time_diff($time)); } else { $h_time = mysql2date('Y/m/d', $m_time); } echo '<abbr title="' . esc_attr($t_time) . '">' . esc_html(apply_filters('learn_press_order_column_time', $h_time, $the_order)) . '</abbr>'; break; case 'order_items': $links = array(); foreach ($the_order->get_items() as $item) { $links[] = '<a href="' . get_the_permalink($item['course_id']) . '">' . get_the_title($item['course_id']) . '</a>'; } echo join("<br />", $links); break; case 'order_total': echo learn_press_format_price($the_order->order_total, learn_press_get_currency_symbol($the_order->order_currency)); break; case 'order_title': $order_number = sprintf("%'.010d", $the_order->ID); ?> <div class="tips"> <a href="post.php?post=<?php echo $the_order->ID; ?> &action=edit"><strong><?php echo learn_press_transaction_order_number($order_number); ?> </strong></a> </div> <?php break; } }
function learn_press_update_order_items($order_id) { if (!($order = learn_press_get_order($order_id))) { return; } $subtotal = 0; $total = 0; if ($items = $order->get_items()) { /* [name] => What is LearnPress? [id] => 214 [course_id] => 650 [quantity] => 1 [subtotal] => 1.9 [total] => 1.9 */ foreach ($items as $item) { $subtotal += $item['subtotal']; $total += $item['total']; } } update_post_meta($order_id, '_order_currency', learn_press_get_currency()); update_post_meta($order_id, '_prices_include_tax', 'no'); //update_post_meta( $order_id, '_user_ip_address', learn_press_get_ip() ); //update_post_meta( $order_id, '_user_agent', isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '' ); //update_post_meta( $order_id, '_user_id', learn_press_get_current_user_id() ); update_post_meta($order_id, '_order_subtotal', $subtotal); update_post_meta($order_id, '_order_total', $total); update_post_meta($order_id, '_order_key', apply_filters('learn_press_generate_order_key', uniqid('order'))); update_post_meta($order_id, '_payment_method', ''); update_post_meta($order_id, '_payment_method_title', ''); update_post_meta($order_id, '_order_version', '1.0'); return array('subtotal' => $subtotal, 'total' => $total, 'currency' => learn_press_get_currency()); }
/** * Add new course to order */ static function add_item_to_order() { // ensure that user has permission if (!current_user_can('edit_lp_orders')) { die(__('Permission denied', 'learn_press')); } // verify nonce $nonce = learn_press_get_request('nonce'); if (!wp_verify_nonce($nonce, 'add_item_to_order')) { die(__('Check nonce failed', 'learn_press')); } // validate order $order_id = learn_press_get_request('order_id'); if (!is_numeric($order_id) || get_post_type($order_id) != 'lp_order') { die(__('Order invalid', 'learn_press')); } // validate item $item_id = learn_press_get_request('item_id'); $post = get_post($item_id); if (!$post || 'lp_course' !== $post->post_type) { die(__('Course invalid', 'learn_press')); } $course = learn_press_get_course($post->ID); $order = learn_press_get_order($order_id); $item = array('course_id' => $course->id, 'name' => $course->get_title(), 'quantity' => 1, 'subtotal' => $course->get_price(), 'total' => $course->get_price()); // Add item $item_id = learn_press_add_order_item($order_id, array('order_item_name' => $item['name'])); $item['id'] = $item_id; // Add item meta if ($item_id) { $item = apply_filters('learn_press_ajax_order_item', $item); learn_press_add_order_item_meta($item_id, '_course_id', $item['course_id']); learn_press_add_order_item_meta($item_id, '_quantity', $item['quantity']); learn_press_add_order_item_meta($item_id, '_subtotal', $item['subtotal']); learn_press_add_order_item_meta($item_id, '_total', $item['total']); do_action('learn_press_ajax_add_order_item_meta', $item); } $order_data = learn_press_update_order_items($order_id); $currency_symbol = learn_press_get_currency_symbol($order_data['currency']); $order_data['subtotal_html'] = learn_press_format_price($order_data['subtotal'], $currency_symbol); $order_data['total_html'] = learn_press_format_price($order_data['total'], $currency_symbol); ob_start(); include learn_press_get_admin_view('meta-boxes/order/order-item.php'); $item_html = ob_get_clean(); learn_press_send_json(array('result' => 'success', 'item_html' => $item_html, 'order_data' => $order_data)); }
_e('Status', 'learn_press'); ?> </th> <th><?php _e('Total', 'learn_press'); ?> </th> <th><?php _e('Action', 'learn_press'); ?> </th> </thead> <tbody> <?php foreach ($orders as $order) { $order = learn_press_get_order($order); ?> <tr> <td><?php echo $order->get_order_number(); ?> </td> <td><?php echo date_i18n(get_option('date_format'), strtotime($order->order_date)); ?> </td> <td><?php echo $order->get_order_status(); ?> </td> <td><?php