Пример #1
0
 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;
 }
Пример #5
0
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;
 }
Пример #7
0
        /**
         * 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)));
 }
Пример #10
0
        /**
         * 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;
            }
        }
Пример #11
0
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));
 }
Пример #13
0
    _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