/**
  * Gets a user's downloadable products if they are logged in
  *
  * @return array Array of downloadable products
  */
 public static function get_downloadable_products()
 {
     global $wpdb;
     $downloads = array();
     if (is_user_logged_in()) {
         $jigoshop_orders = new jigoshop_orders();
         $jigoshop_orders->get_customer_orders(get_current_user_id());
         if ($jigoshop_orders->orders) {
             $user_info = get_userdata(get_current_user_id());
             foreach ($jigoshop_orders->orders as $order) {
                 if ($order->status == 'completed') {
                     $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}jigoshop_downloadable_product_permissions WHERE order_key = %s AND user_id = %d;", $order->order_key, get_current_user_id()));
                     if ($results) {
                         foreach ($results as $result) {
                             $_product = new jigoshop_product_variation($result->product_id);
                             $download_name = $_product->ID ? get_the_title($_product->ID) : get_the_title($result->product_id);
                             if (isset($_product->variation_data)) {
                                 $download_name .= ' (' . jigoshop_get_formatted_variation($_product, array(), true) . ')';
                             }
                             $downloads[] = array('download_url' => add_query_arg('download_file', $result->product_id, add_query_arg('order', $result->order_key, add_query_arg('email', $user_info->user_email, home_url()))), 'product_id' => $result->product_id, 'download_name' => $download_name, 'order_key' => $result->order_key, 'downloads_remaining' => $result->downloads_remaining);
                         }
                     }
                 }
             }
         }
     }
     return apply_filters('jigoshop_downloadable_products', $downloads);
 }
Example #2
0
    ?>
				<?php 
    if ($show_sku) {
        ?>
					<?php 
        printf(_x(' (#%s)', 'emails', 'jigoshop'), $product->sku);
        ?>
				<?php 
    }
    ?>
				<?php 
    if ($product instanceof \jigoshop_product_variation) {
        ?>
					<div class="variation">
						<?php 
        echo jigoshop_get_formatted_variation($product, $item['variation']);
        ?>
					</div>
				<?php 
    }
    ?>
				<?php 
    if (!empty($item['customization'])) {
        ?>
					<div class="customization">
						<?php 
        echo apply_filters('jigoshop_customized_product_label', __('Personal:', 'jigoshop'));
        ?>
<br/
						<?php 
        echo $item['customization'];
Example #3
0
</strong></td>
                <td><strong><?php 
echo jigoshop_cart::get_total();
?>
</strong></td>
            </tr>
        </tfoot>
        <tbody>
            <?php 
if (sizeof(jigoshop_cart::$cart_contents) > 0) {
    foreach (jigoshop_cart::$cart_contents as $item_id => $values) {
        $_product = $values['data'];
        if ($_product->exists() && $values['quantity'] > 0) {
            $variation = '';
            if ($_product instanceof jigoshop_product_variation && is_array($values['variation'])) {
                $variation = jigoshop_get_formatted_variation($values['variation']);
            }
            echo '
                            <tr>
                                <td class="product-name">' . $_product->get_title() . $variation . '</td>
								<td>' . $values['quantity'] . '</td>
								<td>' . jigoshop_price($_product->get_price_excluding_tax() * $values['quantity'], array('ex_tax_label' => 1)) . '</td>
							</tr>';
        }
    }
}
?>
		</tbody>
	</table>

	<div id="payment">
Example #4
0
 /**
  * Generates WorldPay form and redirects to WordPay with Order information
  */
 public function display_worldpay_redirect_form($order_id)
 {
     $order = new jigoshop_order($order_id);
     if ($this->testmode == 'yes') {
         $worldpay_url = "https://secure-test.worldpay.com/wcc/purchase";
         $testmode = (int) 100;
     } else {
         $worldpay_url = "https://secure.worldpay.com/wcc/purchase";
         $testmode = (int) 0;
     }
     $order_total = number_format($order->order_total, 2, '.', '');
     $worldpay_args = array('instId' => $this->installation_id, 'cartId' => $order_id, 'amount' => $order_total, 'currency' => $this->currency, 'testMode' => $testmode, 'email' => $order->billing_email, 'MC_invoice' => $order->order_key);
     // Send 'canned' name if testmode or full name if not testmode.
     if ($this->testmode == 'yes') {
         $worldpay_args['name'] = 'AUTHORISED';
     } else {
         $worldpay_args['name'] = $order->billing_first_name . ' ' . $order->billing_last_name;
     }
     // Address info
     $worldpay_args['address1'] = $order->billing_address_1;
     $worldpay_args['address2'] = $order->billing_address_2;
     $worldpay_args['town'] = $order->billing_city;
     $worldpay_args['region'] = $order->billing_state;
     $worldpay_args['postcode'] = $order->billing_postcode;
     $worldpay_args['country'] = $order->billing_country;
     $worldpay_args['fixContact'] = '';
     /* no address editing */
     // Setup the Dymanic URL properties using Jigoshop Request API
     $worldpay_args['MC_callback'] = $this->notify_url;
     $worldpay_args['MC_cancel_return'] = $order->get_cancel_order_url();
     // Cart Contents - Generate cart description
     $desc = '';
     if (sizeof($order->items) > 0) {
         foreach ($order->items as $item) {
             $_product = $order->get_product_from_item($item);
             if ($_product->exists() && $item['qty']) {
                 $title = $_product->get_title();
                 // if variation, insert variation details into product title
                 if ($_product instanceof jigoshop_product_variation) {
                     $title .= ' (' . jigoshop_get_formatted_variation($_product, $item['variation'], true) . ')';
                 }
                 $desc .= $item['qty'] . ' x ' . $title . '<br/>';
             }
         }
         // Add the description
         $worldpay_args['desc'] = $desc;
     }
     if ($this->fixed_currency == 'yes') {
         $worldpay_args['hideCurrency'] = '';
     }
     // MD5 hash the main parameters we are sending to WorldPay
     if ($this->md5_encrypt == 'yes' && !empty($this->secret_word)) {
         // Add the fields you are hashing
         $hash_fields = 'instId:cartId:amount:currency';
         $worldpay_args['signatureFields'] = $hash_fields;
         // Add the hash signature
         $hash_message = $this->secret_word . ':' . $this->installation_id . ':' . $order_id . ':' . $order_total . ':' . $this->currency;
         $worldpay_args['signature'] = md5($hash_message);
     }
     $worldpay_form_array = array();
     foreach ($worldpay_args as $key => $value) {
         if ($key == 'hideCurrency') {
             $worldpay_form_array[] = '<input type="hidden" name="' . $key . '" />';
             continue;
         }
         if ($key == 'fixContact') {
             $worldpay_form_array[] = '<input type="hidden" name="' . $key . '" />';
             continue;
         }
         $worldpay_form_array[] = '<input type="hidden" name="' . $key . '" value="' . $value . '" />';
     }
     return jigoshop_render_result('gateways/worldpay', array('url' => $worldpay_url, 'fields' => $worldpay_args));
 }
Example #5
0
 /**
  * Generate the paypal button link
  *
  * @param int $order_id
  * @return string
  */
 public function generate_paypal_form($order_id)
 {
     $order = new jigoshop_order($order_id);
     if ($this->testmode == 'yes') {
         $url = $this->testurl . '?test_ipn=1&';
     } else {
         $url = $this->liveurl . '?';
     }
     if (in_array($order->billing_country, array('US', 'CA'))) {
         $order->billing_phone = str_replace(array('(', '-', ' ', ')'), '', $order->billing_phone);
         $phone_args = array('night_phone_a' => substr($order->billing_phone, 0, 3), 'night_phone_b' => substr($order->billing_phone, 3, 3), 'night_phone_c' => substr($order->billing_phone, 6, 4), 'day_phone_a' => substr($order->billing_phone, 0, 3), 'day_phone_b' => substr($order->billing_phone, 3, 3), 'day_phone_c' => substr($order->billing_phone, 6, 4));
     } else {
         $phone_args = array('night_phone_b' => $order->billing_phone, 'day_phone_b' => $order->billing_phone);
     }
     // filter redirect page
     $checkout_redirect = apply_filters('jigoshop_get_checkout_redirect_page_id', jigoshop_get_page_id('thanks'));
     $paypal_args = array_merge(array('cmd' => '_cart', 'business' => $this->testmode == 'yes' ? $this->testemail : $this->email, 'no_note' => 1, 'currency_code' => Jigoshop_Base::get_options()->get('jigoshop_currency'), 'charset' => 'UTF-8', 'rm' => 2, 'upload' => 1, 'return' => add_query_arg('key', $order->order_key, add_query_arg('order', $order_id, get_permalink($checkout_redirect))), 'cancel_return' => $order->get_cancel_order_url(), 'custom' => $order_id, 'notify_url' => $this->notify_url, 'first_name' => $order->billing_first_name, 'last_name' => $order->billing_last_name, 'company' => $order->billing_company, 'address1' => $order->billing_address_1, 'address2' => $order->billing_address_2, 'city' => $order->billing_city, 'state' => $order->billing_state, 'zip' => $order->billing_postcode, 'country' => $order->billing_country, 'email' => $order->billing_email, 'invoice' => $order->get_order_number(), 'amount' => number_format((double) $order->order_total, $this->decimals), 'bn' => 'Jigoshop_SP'), $phone_args);
     if ($this->send_shipping == 'yes') {
         $paypal_args['no_shipping'] = 1;
         $paypal_args['address_override'] = 1;
         $paypal_args['first_name'] = $order->shipping_first_name;
         $paypal_args['last_name'] = $order->shipping_last_name;
         $paypal_args['address1'] = $order->shipping_address_1;
         $paypal_args['address2'] = $order->shipping_address_2;
         $paypal_args['city'] = $order->shipping_city;
         $paypal_args['state'] = $order->shipping_state;
         $paypal_args['zip'] = $order->shipping_postcode;
         $paypal_args['country'] = $order->shipping_country;
         // PayPal counts Puerto Rico as a US Territory, won't allow payment without it
         if ($paypal_args['country'] == 'PR') {
             $paypal_args['country'] = 'US';
             $paypal_args['state'] = 'PR';
         }
     } else {
         $paypal_args['no_shipping'] = 1;
         $paypal_args['address_override'] = 0;
     }
     // If prices include tax, send the whole order as a single item
     if (Jigoshop_Base::get_options()->get('jigoshop_prices_include_tax') == 'yes') {
         // Discount
         $paypal_args['discount_amount_cart'] = number_format((double) $order->order_discount, $this->decimals);
         // Don't pass items - PayPal breaks tax due to catalog prices include tax.
         // PayPal has no option for tax inclusive pricing.
         // Pass 1 item for the order items overall
         $item_names = array();
         foreach ($order->items as $item) {
             $_product = $order->get_product_from_item($item);
             $title = $_product->get_title();
             //if variation, insert variation details into product title
             if ($_product instanceof jigoshop_product_variation) {
                 $title .= ' (' . jigoshop_get_formatted_variation($_product, $item['variation'], true) . ')';
             }
             $item_names[] = $title . ' x ' . $item['qty'];
         }
         $paypal_args['item_name_1'] = sprintf(__('Order %s', 'jigoshop'), $order->get_order_number()) . ' - ' . implode(', ', $item_names);
         $paypal_args['quantity_1'] = 1;
         $paypal_args['amount_1'] = number_format($order->order_total - $order->order_shipping - $order->order_shipping_tax + $order->order_discount, $this->decimals, '.', '');
         if ($order->order_shipping + $order->order_shipping_tax > 0) {
             $paypal_args['item_name_2'] = __('Shipping cost', 'jigoshop');
             $paypal_args['quantity_2'] = '1';
             $paypal_args['amount_2'] = number_format($order->order_shipping + $order->order_shipping_tax, $this->decimals, '.', '');
         }
     } else {
         // Cart Contents
         $item_loop = 0;
         foreach ($order->items as $item) {
             $_product = $order->get_product_from_item($item);
             if ($_product->exists() && $item['qty']) {
                 $item_loop++;
                 $title = $_product->get_title();
                 //if variation, insert variation details into product title
                 if ($_product instanceof jigoshop_product_variation) {
                     $title .= ' (' . jigoshop_get_formatted_variation($_product, $item['variation'], true) . ')';
                 }
                 $paypal_args['item_name_' . $item_loop] = $title;
                 $paypal_args['quantity_' . $item_loop] = $item['qty'];
                 $paypal_args['amount_' . $item_loop] = number_format(apply_filters('jigoshop_paypal_adjust_item_price', $item['cost'], $item, 10, 2), $this->decimals);
                 //Apparently, Paypal did not like "28.4525" as the amount. Changing that to "28.45" fixed the issue.
             }
         }
         // Shipping Cost
         if (jigoshop_shipping::is_enabled() && $order->order_shipping > 0) {
             $item_loop++;
             $paypal_args['item_name_' . $item_loop] = __('Shipping cost', 'jigoshop');
             $paypal_args['quantity_' . $item_loop] = '1';
             $paypal_args['amount_' . $item_loop] = number_format((double) $order->order_shipping, $this->decimals);
         }
         $paypal_args['tax'] = $order->get_total_tax(false, false);
         // no currency sign or pricing options for separators
         $paypal_args['tax_cart'] = $order->get_total_tax(false, false);
         // no currency sign or pricing options for separators
         $paypal_args['discount_amount_cart'] = $order->order_discount;
         if ($this->force_payment == 'yes') {
             $sum = 0;
             for ($i = 1; $i < $item_loop; $i++) {
                 $sum += $paypal_args['amount_' . $i];
             }
             $item_loop++;
             if ($sum == 0 || $order->order_discount && $sum - $order->order_discount == 0) {
                 $paypal_args['item_name_' . $item_loop] = __('Force payment on free', 'jigoshop');
                 $paypal_args['quantity_' . $item_loop] = '1';
                 $paypal_args['amount_' . $item_loop] = 0.01;
                 // force payment
             }
         }
     }
     $paypal_args = apply_filters('jigoshop_paypal_args', $paypal_args);
     return jigoshop_render_result('gateways/paypal', array('url' => $url, 'fields' => $paypal_args));
 }
Example #6
0
function jigoshop_ga_ecommerce_tracking($order_id)
{
    $options = Jigoshop_Base::get_options();
    // Skip if disabled
    if ($options->get('jigoshop_ga_ecommerce_tracking_enabled') != 'yes') {
        return;
    }
    // Don't track the shop owners roaming
    if (current_user_can('manage_jigoshop')) {
        return;
    }
    $tracking_id = $options->get('jigoshop_ga_id');
    if (!$tracking_id) {
        return;
    }
    // Get the order and output tracking code
    $order = new jigoshop_order($order_id);
    ?>
	<script type="text/javascript">
		jigoshopGA('require', 'ecommerce');

		jigoshopGA('ecommerce:addTransaction', {
			'id': '<?php 
    echo $order->get_order_number();
    ?>
', // Transaction ID. Required.
			'affiliation': '<?php 
    bloginfo('name');
    ?>
', // Affiliation or store name.
			'revenue': '<?php 
    echo $order->order_total;
    ?>
', // Grand Total.
			'shipping': '<?php 
    echo $order->order_shipping;
    ?>
', // Shipping.
			'tax': '<?php 
    echo $order->get_total_tax();
    ?>
' // Tax.
		});

		<?php 
    foreach ($order->items as $item) {
        $_product = $order->get_product_from_item($item);
        ?>
		jigoshopGA('ecommerce:addItem', {
			'id': '<?php 
        echo $order->get_order_number();
        ?>
', // Transaction ID. Required.
			'name': '<?php 
        echo $item['name'];
        ?>
', // Product name. Required.
			'sku': '<?php 
        echo $_product->sku;
        ?>
', // SKU/code.
			'category': '<?php 
        if (isset($_product->variation_data)) {
            echo jigoshop_get_formatted_variation($_product, $item['variation'], true);
        }
        ?>
', // Category or variation.
			'price': '<?php 
        echo $item['cost'] / $item['qty'];
        ?>
', // Unit price.
			'quantity': '<?php 
        echo $item['qty'];
        ?>
' // Quantity.
		});
		<?php 
    }
    ?>

		jigoshopGA('ecommerce:send');
	</script>
	<?php 
}
Example #7
0
/**
 * Order items meta box
 *
 * Displays the order items meta box - for showing individual items in the order
 *
 * @since 		1.0
 */
function jigoshop_order_items_meta_box($post)
{
    $order_items = (array) maybe_unserialize(get_post_meta($post->ID, 'order_items', true));
    ?>
	<div class="jigoshop_order_items_wrapper">
		<table cellpadding="0" cellspacing="0" class="jigoshop_order_items">
			<thead>
				<tr>
                    <?php 
    do_action('jigoshop_admin_order_item_header_before_prod_id');
    ?>
					<th class="product-id"><?php 
    _e('ID', 'jigoshop');
    ?>
</th>
					<th class="variation-id"><?php 
    _e('Variation ID', 'jigoshop');
    ?>
</th>
					<th class="product-sku"><?php 
    _e('SKU', 'jigoshop');
    ?>
</th>
					<th class="name"><?php 
    _e('Name', 'jigoshop');
    ?>
</th>
					<th class="variation"><?php 
    _e('Variation', 'jigoshop');
    ?>
</th>
					<!--<th class="meta"><?php 
    _e('Order Item Meta', 'jigoshop');
    ?>
</th>-->
					<?php 
    do_action('jigoshop_admin_order_item_headers');
    ?>
					<th class="quantity"><?php 
    _e('Quantity', 'jigoshop');
    ?>
</th>
					<th class="cost"><?php 
    _e('Cost', 'jigoshop');
    ?>
</th>
					<th class="tax"><?php 
    _e('Tax Rate', 'jigoshop');
    ?>
</th>
					<th class="center" width="1%"><?php 
    _e('Remove', 'jigoshop');
    ?>
</th>
				</tr>
			</thead>
			<tbody id="order_items_list">

				<?php 
    if (sizeof($order_items) > 0 && isset($order_items[0]['id'])) {
        foreach ($order_items as $item_no => $item) {
            if (isset($item['variation_id']) && $item['variation_id'] > 0) {
                $_product = new jigoshop_product_variation($item['variation_id']);
                if (is_array($item['variation'])) {
                    $_product->set_variation_attributes($item['variation']);
                }
            } else {
                $_product = new jigoshop_product($item['id']);
            }
            ?>
					<tr class="item">
                        <?php 
            do_action('jigoshop_admin_order_item_before_prod_id', $item_no);
            ?>
                        <td class="product-id"><?php 
            echo $item['id'];
            ?>
</td>
                        <td class="variation-id"><?php 
            if (isset($item['variation_id'])) {
                echo $item['variation_id'];
            } else {
                echo '-';
            }
            ?>
</td>
                        <td class="product-sku"><?php 
            if ($_product->sku) {
                echo $_product->sku;
            }
            ?>
</td>
                        <td class="name"><a href="<?php 
            echo esc_url(admin_url('post.php?post=' . $_product->id . '&action=edit'));
            ?>
"><?php 
            echo $item['name'];
            ?>
</a>
                            <?php 
            if (!empty($item['customization'])) {
                $custom = $item['customization'];
                $label = apply_filters('jigoshop_customized_product_label', __(' Personal: ', 'jigoshop'));
                ?>
                                <div class="customization">
                                    <span class="customized_product_label"><?php 
                echo $label;
                ?>
</span>
                                    <span class="customized_product"><?php 
                echo $custom;
                ?>
</span>
                                </div>
                                <?php 
            }
            ?>
                        </td>
                        <td class="variation"><?php 
            if (isset($_product->variation_data)) {
                echo jigoshop_get_formatted_variation($_product, $item['variation'], true);
            } else {
                echo '-';
            }
            ?>
</td>
                        <?php 
            do_action('jigoshop_admin_order_item_values', $_product, $item, $post->ID);
            ?>
                        <td class="quantity">
                            <input type="text" name="item_quantity[]" placeholder="<?php 
            _e('Quantity e.g. 2', 'jigoshop');
            ?>
" value="<?php 
            echo esc_attr($item['qty']);
            ?>
" />
                        </td>
                        <td class="cost">
                            <input type="text" name="item_cost[]" placeholder="<?php 
            _e('Cost per unit ex. tax e.g. 2.99', 'jigoshop');
            ?>
" value="<?php 
            echo esc_attr($item['cost']);
            ?>
" />
                        </td>
                        <td class="tax">
                            <input type="text" name="item_tax_rate[]" placeholder="<?php 
            _e('Tax Rate e.g. 20.0000', 'jigoshop');
            ?>
" value="<?php 
            echo esc_attr($item['taxrate']);
            ?>
" />
                        </td>
                        <td class="center">
                            <input type="hidden" name="item_id[]" value="<?php 
            echo esc_attr($item['id']);
            ?>
" />
                            <input type="hidden" name="item_name[]" value="<?php 
            echo esc_attr($item['name']);
            ?>
" />
                            <input type="hidden" name="item_variation_id[]" value="<?php 
            if ($item['variation_id']) {
                echo $item['variation_id'];
            } else {
                echo '';
            }
            ?>
" />
                            <button type="button" class="remove_row button">&times;</button>
                        </td>
					</tr>
				<?php 
        }
    }
    ?>
			</tbody>
		</table>
	</div>
	<p class="buttons">
		<input type='text' class='item_id' name='order_product_select' id='order_product_select' value='' placeholder="<?php 
    _e('Choose a Product', 'jigoshop');
    ?>
" />
		<script type="text/javascript">
		/*<![CDATA[*/
			jQuery(function() {
				jQuery("#order_product_select").select2({
					minimumInputLength: 3,
					multiple: false,
					closeOnSelect: true,
					ajax: {
						url: "<?php 
    echo !is_ssl() ? str_replace('https', 'http', admin_url('admin-ajax.php')) : admin_url('admin-ajax.php');
    ?>
",
						dataType: 'json',
						quietMillis: 100,
						data: function(term, page) {
							return {
								term:       term,
								action:     'jigoshop_json_search_products_and_variations',
								security:   '<?php 
    echo wp_create_nonce("search-products");
    ?>
'
							};
						},
						results: function( data, page ) {
							return { results: data };
						}
					},
					initSelection: function( element, callback ) {
						var stuff = {
							action:     'jigoshop_json_search_products_and_variations',
							security:   '<?php 
    echo wp_create_nonce("search-products");
    ?>
',
							term:       element.val()
						};
						jQuery.ajax({
							type: 		'GET',
							url:        "<?php 
    echo !is_ssl() ? str_replace('https', 'http', admin_url('admin-ajax.php')) : admin_url('admin-ajax.php');
    ?>
",
							dataType: 	"json",
							data: 		stuff,
							success: 	function( result ) {
								callback( result );
							}
						});
					}
				});
			});
		/*]]>*/
		</script>

		<button type="button" class="button button-primary add_shop_order_item"><?php 
    _e('Add item', 'jigoshop');
    ?>
</button>
	</p>
	<p class="buttons buttons-alt">
		<button type="button" class="button button calc_totals"><?php 
    _e('Calculate totals', 'jigoshop');
    ?>
</button>
	</p>

	<div class="clear"></div>
	<?php 
}
 /** Output items for display in emails */
 public function email_order_items_list($show_download_links = false, $show_sku = false, $price_inc_tax = false)
 {
     $return = '';
     // validate if any item has cost less than 0. If that's the case, we can't use price including tax
     $use_inc_tax = $price_inc_tax;
     if ($price_inc_tax) {
         foreach ($this->items as $item) {
             $use_inc_tax = $item['cost_inc_tax'] >= 0;
             if (!$use_inc_tax) {
                 break;
             }
         }
     }
     foreach ($this->items as $item) {
         $_product = $this->get_product_from_item($item);
         $return .= $item['qty'] . ' x ' . html_entity_decode(apply_filters('jigoshop_order_product_title', $item['name'], $_product, $item), ENT_QUOTES, 'UTF-8');
         if ($show_sku && self::get_options()->get('jigoshop_enable_sku') == 'yes') {
             $return .= ' (#' . $_product->sku . ')';
         }
         if ($use_inc_tax && $item['cost_inc_tax'] >= 0) {
             $return .= ' - ' . html_entity_decode(strip_tags(jigoshop_price($item['cost_inc_tax'] * $item['qty'], array('ex_tax_label' => 0))), ENT_COMPAT, 'UTF-8');
         } else {
             $return .= ' - ' . html_entity_decode(strip_tags(jigoshop_price($item['cost'], array('ex_tax_label' => 1))), ENT_COMPAT, 'UTF-8');
         }
         if ($_product instanceof jigoshop_product_variation) {
             $return .= PHP_EOL . jigoshop_get_formatted_variation($_product, $item['variation'], true);
         }
         // Very hacky, used for GFORMS ADDONS -Rob
         if (!isset($_product->variation_data) && isset($item['variation'])) {
             if (!empty($item['variation'])) {
                 foreach ($item['variation'] as $variation) {
                     $return .= PHP_EOL . $variation['name'] . ': ' . $variation['value'];
                 }
             }
         }
         //  Check that this filter supplied by OptArt is in use before applying it.
         //  This filter in Jigoshop 1.3 is only used by Jigoshop Product Addons and should be revised because
         //  if that plugin is not active, emails will have a line item with 'Array' on each product description.
         //  TODO: Jigoshop never intends to use $item like this, a filter is incorrect. -JAP-
         global $wp_filter;
         if (isset($wp_filter['jigoshop_display_item_meta_data_email'])) {
             $meta_data = apply_filters('jigoshop_display_item_meta_data_email', $item);
             if ($meta_data != '') {
                 $return .= PHP_EOL . $meta_data;
             }
         }
         if (!empty($item['customization'])) {
             $return .= PHP_EOL . apply_filters('jigoshop_customized_product_label', __(' Personal: ', 'jigoshop')) . PHP_EOL . $item['customization'];
         }
         if ($show_download_links) {
             if ($_product->exists()) {
                 if ($_product->is_type('downloadable')) {
                     if ((bool) $item['variation_id']) {
                         $product_id = $_product->variation_id;
                     } else {
                         $product_id = $_product->ID;
                     }
                     if ($this->get_downloadable_file_url($product_id)) {
                         $return .= PHP_EOL . __('Your download link for this file is:', 'jigoshop');
                         $return .= PHP_EOL . ' - ' . apply_filters('downloadable_file_url', $this->get_downloadable_file_url($product_id), $_product, $this) . '';
                     }
                 }
             }
         }
         $return .= PHP_EOL;
     }
     return $return;
 }
Example #9
0
    /**
     *  Generate the futurepay payment iframe
     */
    protected function call_futurepay($order_id)
    {
        // Get the order
        $order = new jigoshop_order($order_id);
        $data = array('gmid' => $this->gmid, 'reference' => $order_id . '-' . uniqid(), 'email' => $order->billing_email, 'first_name' => $order->billing_first_name, 'last_name' => $order->billing_last_name, 'company' => $order->billing_company, 'address_line_1' => $order->billing_address_1, 'address_line_2' => $order->billing_address_2, 'city' => $order->billing_city, 'state' => $order->billing_state, 'country' => $order->billing_country, 'zip' => $order->billing_postcode, 'phone' => $order->billing_phone, 'shipping_address_line_1' => $order->shipping_address_1, 'shipping_address_line_2' => $order->shipping_address_2, 'shipping_city' => $order->shipping_city, 'shipping_state' => $order->shipping_state, 'shipping_country' => $order->shipping_country, 'shipping_zip' => $order->shipping_postcode, 'shipping_date' => date('Y/m/d g:i:s'));
        // for Jigoshop 1.7, FuturePay doesn't allow negative prices (or 0.00 ) which affects discounts
        // with FuturePay doing the calcs, so we will bundle all products into ONE line item with
        // a quantity of ONE and send it that way using the final order total after shipping
        // and discounts are applied
        // all product titles will be comma delimited with their quantities
        $item_names = array();
        if (sizeof($order->items) > 0) {
            foreach ($order->items as $item) {
                $_product = $order->get_product_from_item($item);
                $title = $_product->get_title();
                // if variation, insert variation details into product title
                if ($_product instanceof jigoshop_product_variation) {
                    $title .= ' (' . jigoshop_get_formatted_variation($_product, $item['variation'], true) . ')';
                }
                $item_names[] = $item['qty'] . ' x ' . $title;
            }
        }
        // now add the one line item to the necessary product field arrays
        $data['sku'][] = "Products";
        $data['price'][] = $order->order_total;
        // futurepay only needs final order amount
        $data['tax_amount'][] = 0;
        $data['description'][] = sprintf(__('Order %s', 'jigoshop'), $order->get_order_number()) . ' = ' . implode(', ', $item_names);
        $data['quantity'][] = 1;
        try {
            $response = wp_remote_post(self::$request_url . 'merchant-request-order-token', array('body' => http_build_query($data), 'sslverify' => false));
            // Convert error to exception
            if (is_wp_error($response)) {
                if (class_exists('WP_Exception') && $response instanceof WP_Exception) {
                    throw $response;
                } else {
                    jigoshop_log($response->get_error_message());
                    throw new Exception($response->get_error_message());
                }
            }
            // Fetch the body from the result, any errors should be caught before proceeding
            $response = trim(wp_remote_retrieve_body($response));
            // we need something to validate the response.  Valid transactions begin with 'FPTK'
            if (!strstr($response, 'FPTK')) {
                $error_message = isset(self::$futurepay_errorcodes[$response]) ? self::$futurepay_errorcodes[$response] : __('An unknown error has occured with code = ', 'jigoshop') . $response;
                $order->add_order_note(sprintf(__('FUTUREPAY: %s', 'jigoshop'), $error_message));
                jigoshop::add_error(sprintf(__('FUTUREPAY: %s.  Please try again or select another gateway for your Order.', 'jigoshop'), $error_message));
                wp_safe_redirect(get_permalink(jigoshop_get_page_id('checkout')));
                exit;
            }
            /**
             *  If we're good to go, haul in FuturePay's javascript and display the payment form
             *  so that the customer can enter his ID and password
             */
            echo '<div id="futurepay"></div>';
            echo '<script src="' . self::$request_url . 'cart-integration/' . $response . '"></script>';
            echo '<script type="text/javascript">
				/*<![CDATA[*/
				jQuery(window).load( function() {
					FP.CartIntegration();

					// Need to replace form html
					jQuery("#futurepay").html(FP.CartIntegration.getFormContent());
					FP.CartIntegration.displayFuturePay();
				});

				function FuturePayResponseHandler(response) {
					if (response.error) {
						// TODO: we need something better than this
						alert(response.code + " " + response.message);
					}
					else {
						window.location.replace("./?futurepay="+response.transaction_id);
					}

				}
				/*]]>*/
			</script>';
            echo '<input type="button" class="button alt" name="place_order" id="place_order" value="Place Order" onclick="FP.CartIntegration.placeOrder();" />';
        } catch (Exception $e) {
            echo '<div class="jigoshop_error">' . $e->getMessage() . '</div>';
            jigoshop_log('FUTUREPAY ERROR: ' . $e->getMessage());
        }
    }
Example #10
0
function jigoshop_order_tracking($atts)
{
    extract(shortcode_atts(array(), $atts));
    global $post;
    $jigoshop_options = Jigoshop_Base::get_options();
    if ($_POST) {
        $order = new jigoshop_order();
        $order->id = !empty($_POST['orderid']) ? $_POST['orderid'] : 0;
        if (isset($_POST['order_email']) && $_POST['order_email']) {
            $order_email = trim($_POST['order_email']);
        } else {
            $order_email = '';
        }
        if (!jigoshop::verify_nonce('order_tracking')) {
            echo '<p>' . __('You have taken too long. Please refresh the page and retry.', 'jigoshop') . '</p>';
        } elseif ($order->id && $order_email && $order->get_order(apply_filters('jigoshop_shortcode_order_tracking_order_id', $order->id))) {
            if ($order->billing_email == $order_email) {
                echo '<p>' . sprintf(__('Order %s which was made %s ago and has the status "%s"', 'jigoshop'), $order->get_order_number(), human_time_diff(strtotime($order->order_date), current_time('timestamp')), __($order->status, 'jigoshop'));
                if ($order->status == 'completed') {
                    $completed = (array) get_post_meta($order->id, '_js_completed_date', true);
                    if (!empty($completed)) {
                        $completed = $completed[0];
                    } else {
                        $completed = '';
                    }
                    // shouldn't happen, reset to be sure
                    echo sprintf(__(' was completed %s ago', 'jigoshop'), human_time_diff(strtotime($completed), current_time('timestamp')));
                }
                echo '.</p>';
                do_action('jigoshop_tracking_details_info', $order);
                ?>
				<?php 
                do_action('jigoshop_before_track_order_details', $order->id);
                ?>
				<h2><?php 
                _e('Order Details', 'jigoshop');
                ?>
</h2>
				<table class="shop_table">
					<thead>
						<tr>
							<th><?php 
                _e('ID/SKU', 'jigoshop');
                ?>
</th>
							<th><?php 
                _e('Title', 'jigoshop');
                ?>
</th>
							<th><?php 
                _e('Price', 'jigoshop');
                ?>
</th>
							<th><?php 
                _e('Quantity', 'jigoshop');
                ?>
</th>
						</tr>
					</thead>
					<tfoot>
                        <tr>
                            <?php 
                if ($jigoshop_options->get('jigoshop_calc_taxes') == 'yes' && $order->has_compound_tax() || $jigoshop_options->get('jigoshop_tax_after_coupon') == 'yes' && $order->order_discount > 0) {
                    ?>
                                <td colspan="3"><?php 
                    _e('Retail Price', 'jigoshop');
                    ?>
</td>
                            <?php 
                } else {
                    ?>
                                <td colspan="3"><?php 
                    _e('Subtotal', 'jigoshop');
                    ?>
</td>
                            <?php 
                }
                ?>
                                <td><?php 
                echo $order->get_subtotal_to_display();
                ?>
</td>
                        </tr>
                        <?php 
                if ($order->order_shipping > 0) {
                    ?>
                            <tr>
                                <td colspan="3"><?php 
                    _e('Shipping', 'jigoshop');
                    ?>
</td>
                                <td><?php 
                    echo $order->get_shipping_to_display();
                    ?>
</td>
                            </tr>
                            <?php 
                }
                do_action('jigoshop_processing_fee_after_shipping');
                if ($jigoshop_options->get('jigoshop_tax_after_coupon') == 'yes' && $order->order_discount > 0) {
                    ?>
                            <tr class="discount">
                                <td colspan="3"><?php 
                    _e('Discount', 'jigoshop');
                    ?>
</td>
                                <td>-<?php 
                    echo jigoshop_price($order->order_discount);
                    ?>
</td>
                            </tr>
                            <?php 
                }
                if ($jigoshop_options->get('jigoshop_calc_taxes') == 'yes' && $order->has_compound_tax() || $jigoshop_options->get('jigoshop_tax_after_coupon') == 'yes' && $order->order_discount > 0) {
                    ?>
                            <tr>
                                <td colspan="3"><?php 
                    _e('Subtotal', 'jigoshop');
                    ?>
</td>
                                <td><?php 
                    echo jigoshop_price($order->order_discount_subtotal);
                    ?>
</td>
                            </tr>
                            <?php 
                }
                if ($jigoshop_options->get('jigoshop_calc_taxes') == 'yes') {
                    foreach ($order->get_tax_classes() as $tax_class) {
                        if ($order->show_tax_entry($tax_class)) {
                            ?>
                                    <tr>
                                        <td colspan="3"><?php 
                            echo $order->get_tax_class_for_display($tax_class) . ' (' . (double) $order->get_tax_rate($tax_class) . '%):';
                            ?>
</td>
                                        <td><?php 
                            echo $order->get_tax_amount($tax_class);
                            ?>
</td>
                                    </tr>
                                    <?php 
                        }
                    }
                }
                ?>
						<?php 
                if ($jigoshop_options->get('jigoshop_tax_after_coupon') == 'no' && $order->order_discount > 0) {
                    ?>
<tr class="discount">
							<td colspan="3"><?php 
                    _e('Discount', 'jigoshop');
                    ?>
</td>
							<td>-<?php 
                    echo jigoshop_price($order->order_discount);
                    ?>
</td>
						</tr><?php 
                }
                ?>
						<tr>
							<td colspan="3"><strong><?php 
                _e('Grand Total', 'jigoshop');
                ?>
</strong></td>
							<td><strong><?php 
                echo jigoshop_price($order->order_total);
                ?>
</strong></td>
						</tr>
					</tfoot>
					<tbody>
						<?php 
                foreach ($order->items as $order_item) {
                    if (isset($order_item['variation_id']) && $order_item['variation_id'] > 0) {
                        $_product = new jigoshop_product_variation($order_item['variation_id']);
                    } else {
                        $_product = new jigoshop_product($order_item['id']);
                    }
                    echo '<tr>';
                    echo '<td>' . $_product->sku . '</td>';
                    echo '<td class="product-name">' . $_product->get_title();
                    if ($_product instanceof jigoshop_product_variation) {
                        echo jigoshop_get_formatted_variation($_product, $order_item['variation']);
                    }
                    do_action('jigoshop_display_item_meta_data', $order_item);
                    echo '</td>';
                    echo '<td>' . jigoshop_price($order_item['cost']) . '</td>';
                    echo '<td>' . $order_item['qty'] . '</td>';
                    echo '</tr>';
                }
                ?>
					</tbody>
				</table>
				<?php 
                do_action('jigoshop_after_track_order_details', $order->id);
                ?>

				<div style="width: 49%; float:left;">
					<h2><?php 
                _e('Billing Address', 'jigoshop');
                ?>
</h2>
					<p><?php 
                $address = $order->billing_first_name . ' ' . $order->billing_last_name . '<br/>';
                if ($order->billing_company) {
                    $address .= $order->billing_company . '<br/>';
                }
                $address .= $order->formatted_billing_address;
                echo $address;
                ?>
</p>
				</div>
				<div style="width: 49%; float:right;">
					<h2><?php 
                _e('Shipping Address', 'jigoshop');
                ?>
</h2>
					<p><?php 
                $address = $order->shipping_first_name . ' ' . $order->shipping_last_name . '<br/>';
                if ($order->shipping_company) {
                    $address .= $order->shipping_company . '<br/>';
                }
                $address .= $order->formatted_shipping_address;
                echo $address;
                ?>
</p>
				</div>
				<div class="clear"></div>
				<?php 
            } else {
                echo '<p>' . __('Sorry, we could not find that order id in our database. <a href="' . get_permalink($post->ID) . '">Want to retry?</a>', 'jigoshop') . '</p>';
            }
        } else {
            echo '<p>' . sprintf(__('Sorry, we could not find that order id in our database. <a href="%s">Want to retry?</a></p>', 'jigoshop'), get_permalink($post->ID));
        }
    } else {
        ?>
		<form action="<?php 
        echo esc_url(get_permalink($post->ID));
        ?>
" method="post" class="track_order">

			<p><?php 
        _e('To track your order please enter your Order ID and email address in the boxes below and press return. This was given to you on your receipt and in the confirmation email you should have received.', 'jigoshop');
        ?>
</p>

			<p class="form-row form-row-first"><label for="orderid"><?php 
        _e('Order ID', 'jigoshop');
        ?>
</label> <input class="input-text" type="text" name="orderid" id="orderid" placeholder="<?php 
        _e('Found in your order confirmation email.', 'jigoshop');
        ?>
" /></p>
			<p class="form-row form-row-last"><label for="order_email"><?php 
        _e('Billing Email', 'jigoshop');
        ?>
</label> <input class="input-text" type="text" name="order_email" id="order_email" placeholder="<?php 
        _e('Email you used during checkout.', 'jigoshop');
        ?>
" /></p>
			<div class="clear"></div>
			<p class="form-row"><input type="submit" class="button" name="track" value="<?php 
        _e('Track"', 'jigoshop');
        ?>
" /></p>
			<?php 
        jigoshop::nonce_field('order_tracking');
        ?>
		</form>
		<?php 
    }
}