public function format_option_for_display($item) { $options = Jigoshop_Base::get_options(); if (!isset($item['id'])) { return ''; } // ensure we have an id to work with $display = ""; // each item builds it's output into this and it's returned for echoing $class = ""; if (isset($item['class'])) { $class = $item['class']; } // display a tooltip if there is one in it's own table data element before the item to display $display .= '<td class="jigoshop-tooltips">'; if (!empty($item['tip'])) { $display .= '<a href="#" tip="' . esc_attr($item['tip']) . '" class="tips" tabindex="99"></a>'; } $display .= '</td><td class="forminp">'; $disabled = ''; $disabledItems = array(); if (isset($item['extra']) && isset($item['extra']['disabled'])) { if ($item['extra']['disabled'] === true) { $disabled = ' disabled'; } else { if (is_array($item['extra']['disabled'])) { $disabledItems = $item['extra']['disabled']; } } } /* * work off the option type and format output for display for each type */ switch ($item['type']) { case 'user_defined': if (isset($item['display'])) { if (is_callable($item['display'], true)) { $display .= call_user_func($item['display']); } } break; case 'default_gateway': $id = $item['id']; $display .= '<select id="' . $id . '" class="jigoshop-input jigoshop-select ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $id . ']"' . $disabled . ' >'; $gateways = jigoshop_payment_gateways::get_available_payment_gateways(); foreach ($gateways as $slug => $gateway) { $display .= '<option value="' . esc_attr($slug) . '" ' . selected($options->get($id), $slug, false) . disabled(in_array($id, $disabledItems, false)) . ' />' . $gateway->title . '</option>'; } $display .= '</select>'; ?> <script type="text/javascript"> /*<![CDATA[*/ jQuery(function($){ $("#<?php echo $id; ?> ").select2({ width: '250px' }); }); /*]]>*/ </script> <?php break; case 'gateway_options': foreach (jigoshop_payment_gateways::payment_gateways() as $gateway) { $gateway->admin_options(); } break; case 'shipping_options': foreach (jigoshop_shipping::get_all_methods() as $shipping_method) { $shipping_method->admin_options(); } break; case 'tax_rates': $display .= $this->format_tax_rates_for_display($item); break; case 'single_select_page': $page_setting = (int) $options->get($item['id']); $args = array('name' => JIGOSHOP_OPTIONS . '[' . $item['id'] . ']', 'id' => $item['id'], 'sort_order' => 'ASC', 'echo' => 0, 'selected' => $page_setting); if (isset($item['extra'])) { $args = wp_parse_args($item['extra'], $args); } $display .= wp_dropdown_pages($args); $parts = explode('<select', $display); $id = $item['id']; $display = $parts[0] . '<select id="' . $id . '" class="' . $class . '"' . $parts[1]; ?> <script type="text/javascript"> /*<![CDATA[*/ jQuery(function($){ $("#<?php echo $id; ?> ").select2({ width: '250px' }); }); /*]]>*/ </script> <?php break; case 'single_select_country': $country_setting = (string) $options->get($item['id']); $add_empty = false; if (isset($item['options']['add_empty']) && $item['options']['add_empty']) { $add_empty = true; } if (strstr($country_setting, ':')) { $temp = explode(':', $country_setting); $country = current($temp); $state = end($temp); } else { $country = $country_setting; $state = '*'; } $id = $item['id']; $display .= '<select id="' . $id . '" class="single_select_country ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']"' . $disabled . '>'; $display .= jigoshop_countries::country_dropdown_options($country, $state, true, false, false, $add_empty); $display .= '</select>'; ?> <script type="text/javascript"> /*<![CDATA[*/ jQuery(function($){ $("#<?php echo $id; ?> ").select2({ width: '500px' }); }); /*]]>*/ </script> <?php break; case 'multi_select_countries': $countries = jigoshop_countries::get_countries(); $selections = (array) $options->get($item['id']); $display .= '<select multiple="multiple" id="' . $item['id'] . '" class="jigoshop-input jigoshop-select ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . '][]"' . $disabled . '>'; foreach ($countries as $key => $val) { $display .= '<option value="' . esc_attr($key) . '" ' . selected(in_array($key, $selections), true, false) . disabled(in_array($key, $disabledItems, false)) . ' />' . $val . '</option>'; } $display .= '</select>'; $id = $item['id']; ?> <script type="text/javascript"> /*<![CDATA[*/ jQuery(function($){ $("#<?php echo $id; ?> ").select2({ width: '500px' }); }); /*]]>*/ </script> <?php break; case 'button': if (isset($item['extra'])) { $display .= '<a id="' . $item['id'] . '" class="button ' . $class . '" href="' . esc_attr($item['extra']) . '">' . esc_attr($item['desc']) . '</a>'; } $item['desc'] = ''; // temporarily remove it so it doesn't display twice break; case 'decimal': // decimal numbers are positive or negative 0-9 inclusive, may include decimal $display .= '<input id="' . $item['id'] . '" class="jigoshop-input jigoshop-text ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" type="number" step="any" size="20" value="' . esc_attr($options->get($item['id'])) . '"' . $disabled . ' />'; break; case 'integer': // integer numbers are positive or negative 0-9 inclusive // integer numbers are positive or negative 0-9 inclusive case 'natural': // natural numbers are positive 0-9 inclusive $display .= '<input id="' . $item['id'] . '" class="jigoshop-input jigoshop-text ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" type="number" size="20" value="' . esc_attr($options->get($item['id'])) . '"' . $disabled . ' />'; break; case 'text': // any character sequence $display .= '<input id="' . $item['id'] . '" class="jigoshop-input jigoshop-text ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" type="text" size="20" value="' . esc_attr($options->get($item['id'])) . '"' . $disabled . ' />'; break; case 'midtext': $display .= '<input id="' . $item['id'] . '" class="jigoshop-input jigoshop-text ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" type="text" size="40" value="' . esc_attr($options->get($item['id'])) . '"' . $disabled . ' />'; break; case 'longtext': $display .= '<input id="' . $item['id'] . '" class="jigoshop-input jigoshop-text ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" type="text" size="80" value="' . esc_attr($options->get($item['id'])) . '"' . $disabled . ' />'; break; case 'email': $display .= '<input id="' . $item['id'] . '" class="jigoshop-input jigoshop-text jigoshop-email ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" type="text" size="40" value="' . esc_attr($options->get($item['id'])) . '"' . $disabled . ' />'; break; case 'codeblock': case 'textarea': $cols = '60'; if (isset($item['choices'])) { $ta_options = $item['choices']; if (isset($ta_options['cols'])) { $cols = $ta_options['cols']; } } $ta_value = stripslashes($options->get($item['id'])); $display .= '<textarea id="' . $item['id'] . '" class="jigoshop-input jigoshop-textarea ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" cols="' . $cols . '" rows="4"' . $disabled . '>' . esc_textarea($ta_value) . '</textarea>'; break; case "radio": // default to horizontal display of choices ( 'horizontal' may or may not be defined ) if (!isset($item['extra']) || !in_array('vertical', $item['extra'])) { $display .= '<div class="jigoshop-radio-horz">'; foreach ($item['choices'] as $option => $name) { $display .= '<input class="jigoshop-input jigoshop-radio ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" id="' . $item['id'] . '[' . $option . ']" type="radio" value="' . $option . '" ' . checked($options->get($item['id']), $option, false) . disabled(in_array($option, $disabledItems), true, false) . ' /><label for="' . $item['id'] . '[' . $option . ']">' . $name . '</label>'; } $display .= '</div>'; } else { if (isset($item['extra']) && in_array('vertical', $item['extra'])) { $display .= '<ul class="jigoshop-radio-vert">'; foreach ($item['choices'] as $option => $name) { $display .= '<li><input class="jigoshop-input jigoshop-radio ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" id="' . $item['id'] . '[' . $option . ']" type="radio" value="' . $option . '" ' . checked($options->get($item['id']), $option, false) . disabled(in_array($option, $disabledItems), true, false) . ' /><label for="' . $item['id'] . '[' . $option . ']">' . $name . '</label></li>'; } $display .= '</ul>'; } } break; case 'checkbox': $display .= '<span class="jigoshop-container"><input id="' . $item['id'] . '" type="checkbox" class="jigoshop-input jigoshop-checkbox ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" ' . checked($options->get($item['id']), 'yes', false) . $disabled . ' /><label for="' . $item['id'] . '">' . $item['name'] . '</label></span>'; break; case 'multicheck': $multi_stored = $options->get($item['id']); // default to horizontal display of choices ( 'horizontal' may or may not be defined ) if (!isset($item['extra']) || !in_array('vertical', $item['extra'])) { $display .= '<div class="jigoshop-multi-checkbox-horz ' . $class . '">'; foreach ($item['choices'] as $key => $option) { $display .= '<input id="' . $item['id'] . '_' . $key . '" class="jigoshop-input" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . '][' . $key . ']" type="checkbox" ' . checked($multi_stored[$key], true, false) . disabled(in_array($key, $disabledItems, false)) . ' /> <label for="' . $item['id'] . '_' . $key . '">' . $option . '</label>'; } $display .= '</div>'; } else { if (isset($item['extra']) && in_array('vertical', $item['extra'])) { $display .= '<ul class="jigoshop-multi-checkbox-vert ' . $class . '">'; foreach ($item['choices'] as $key => $option) { $display .= '<li><input id="' . $item['id'] . '_' . $key . '" class="jigoshop-input" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . '][' . $key . ']" type="checkbox" ' . checked($multi_stored[$key], true, false) . disabled(in_array($key, $disabledItems, false)) . ' /> <label for="' . $item['id'] . '_' . $key . '">' . $option . '</label></li>'; } $display .= '</ul>'; } } break; case 'range': $display .= '<input id="' . $item['id'] . '" class="jigoshop-input jigoshop-range ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" type="range" min="' . $item['extra']['min'] . '" max="' . $item['extra']['max'] . '" step="' . $item['extra']['step'] . '" value="' . $options->get($item['id']) . '"' . $disabled . ' />'; break; case 'number': $display .= '<input id="' . $item['id'] . '" class="jigoshop-input ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']" type="number" value="' . $options->get($item['id']) . '"'; if (isset($item['extra']['min'])) { $display .= ' min="' . $item['extra']['min'] . '"'; } if (isset($item['extra']['max'])) { $display .= ' max="' . $item['extra']['max'] . '"'; } if (isset($item['extra']['step'])) { $display .= ' step="' . $item['extra']['step'] . '"'; } $display .= $disabled . ' />'; break; case 'select': $multiple = !empty($item['multiple']) && $item['multiple'] == true ? 'multiple="multiple"' : ""; $brckt = ""; $width = 250; $selections = (array) $options->get($item['id']); if ($item['multiple']) { $brckt = "[]"; $width = 500; } $display .= '<select id="' . $item['id'] . '" class="jigoshop-input jigoshop-select ' . $class . '" name="' . JIGOSHOP_OPTIONS . '[' . $item['id'] . ']' . $brckt . '"' . $multiple . $disabled . ' >'; foreach ($item['choices'] as $value => $label) { if (is_array($label)) { $display .= '<optgroup label="' . $value . '">'; foreach ($label as $subValue => $subLabel) { $display .= '<option value="' . esc_attr($subValue) . '" ' . selected(in_array(esc_attr($subValue), $selections), true, false) . disabled(in_array($subValue, $disabledItems), true, false) . ' />' . $subLabel . '</option>'; } $display .= '</optgroup>'; } else { $display .= '<option value="' . esc_attr($value) . '" ' . selected(in_array(esc_attr($value), $selections), true, false) . disabled(in_array($value, $disabledItems), true, false) . ' />' . $label . '</option>'; } } $display .= '</select>'; $id = $item['id']; ?> <script type="text/javascript"> /*<![CDATA[*/ jQuery(function($){ $("#<?php echo $id; ?> ").select2({ width: '<?php echo $width; ?> px' }); }); /*]]>*/ </script> <?php break; default: jigoshop_log("UNKOWN _type_ in Options parsing"); jigoshop_log($item); } if ($item['type'] != 'tab') { if (empty($item['desc'])) { $explain_value = ''; } else { $explain_value = $item['desc']; } $display .= '<div class="jigoshop-explain"><small>' . $explain_value . '</small></div></td>'; } return $display; }
<td>'.$_product->get_title().'</td> <td>'.$values['quantity'].'</td> <td>'.jigoshop_price($_product->get_price_excluding_tax()*$values['quantity'], array('ex_tax_label' => 1)).'</td> </tr>'; endif; endforeach; endif; ?> </tbody> </table> <div id="payment"> <?php if (jigoshop_cart::needs_payment()) : ?> <ul class="payment_methods methods"> <?php $available_gateways = jigoshop_payment_gateways::get_available_payment_gateways(); if ($available_gateways) : // Chosen Method if (sizeof($available_gateways)) current($available_gateways)->set_current(); foreach ($available_gateways as $gateway ) : ?> <li> <input type="radio" id="payment_method_<?php echo $gateway->id; ?>" class="input-radio" name="payment_method" value="<?php echo $gateway->id; ?>" <?php if ($gateway->chosen) echo 'checked="checked"'; ?> /> <label for="payment_method_<?php echo $gateway->id; ?>"><?php echo $gateway->title; ?> <?php echo apply_filters('gateway_icon', $gateway->icon(), $gateway->id); ?></label> <?php if ($gateway->has_fields || $gateway->description) : echo '<div class="payment_box payment_method_'.$gateway->id.'" style="display:none;">'; $gateway->payment_fields(); echo '</div>'; endif; ?>
/** * Outputs the pay page - payment gateways can hook in here to show payment forms etc **/ function jigoshop_pay() { if ( isset($_GET['pay_for_order']) && isset($_GET['order']) && isset($_GET['order_id']) ) : // Pay for existing order $order_key = urldecode( $_GET['order'] ); $order_id = (int) $_GET['order_id']; $order = &new jigoshop_order( $order_id ); if ($order->id == $order_id && $order->order_key == $order_key && $order->status=='pending') : // Set customer location to order location if ($order->billing_country) jigoshop_customer::set_country( $order->billing_country ); if ($order->billing_state) jigoshop_customer::set_state( $order->billing_state ); if ($order->billing_postcode) jigoshop_customer::set_postcode( $order->billing_postcode ); // Pay form was posted - process payment if (isset($_POST['pay']) && jigoshop::verify_nonce('pay')) : // Update payment method if ($order->order_total > 0 ) : $payment_method = jigowatt_clean($_POST['payment_method']); $data = (array) maybe_unserialize( get_post_meta( $order_id, 'order_data', true ) ); $data['payment_method'] = $payment_method; update_post_meta( $order_id, 'order_data', $data ); $available_gateways = jigoshop_payment_gateways::get_available_payment_gateways(); $result = $available_gateways[$payment_method]->process_payment( $order_id ); // Redirect to success/confirmation/payment page if ($result['result']=='success') : wp_safe_redirect( $result['redirect'] ); exit; endif; else : // No payment was required for order $order->payment_complete(); wp_safe_redirect( get_permalink(get_option('jigoshop_thanks_page_id')) ); exit; endif; endif; // Show messages jigoshop::show_messages(); // Show form jigoshop_pay_for_existing_order( $order ); elseif ($order->status!='pending') : jigoshop::add_error( __('Your order has already been paid for. Please contact us if you need assistance.', 'jigoshop') ); jigoshop::show_messages(); else : jigoshop::add_error( __('Invalid order.', 'jigoshop') ); jigoshop::show_messages(); endif; else : // Pay for order after checkout step if (isset($_GET['order'])) $order_id = $_GET['order']; else $order_id = 0; if (isset($_GET['key'])) $order_key = $_GET['key']; else $order_key = ''; if ($order_id > 0) : $order = &new jigoshop_order( $order_id ); if ($order->order_key == $order_key && $order->status=='pending') : ?> <ul class="order_details"> <li class="order"> <?php _e('Order:', 'jigoshop'); ?> <strong># <?php echo $order->id; ?></strong> </li> <li class="date"> <?php _e('Date:', 'jigoshop'); ?> <strong><?php echo date(get_option('date_format'), strtotime($order->order_date)); ?></strong> </li> <li class="total"> <?php _e('Total:', 'jigoshop'); ?> <strong><?php echo jigoshop_price($order->order_total); ?></strong> </li> <li class="method"> <?php _e('Payment method:', 'jigoshop'); ?> <strong><?php $gateways = jigoshop_payment_gateways::payment_gateways(); if (isset($gateways[$order->payment_method])) echo $gateways[$order->payment_method]->title; else echo $order->payment_method; ?></strong> </li> </ul> <?php do_action( 'receipt_' . $order->payment_method, $order_id ); ?> <div class="clear"></div> <?php else : wp_safe_redirect( get_permalink(get_option('jigoshop_myaccount_page_id')) ); exit; endif; else : wp_safe_redirect( get_permalink(get_option('jigoshop_myaccount_page_id')) ); exit; endif; endif; }
function jigoshop_pay_action() { if (!is_jigoshop_single_page(JIGOSHOP_PAY)) { return; } if (isset($_GET['pay_for_order']) && isset($_GET['order']) && isset($_GET['order_id'])) { // Pay for existing order $order_key = urldecode($_GET['order']); $order_id = (int) $_GET['order_id']; $order = new jigoshop_order($order_id); if ($order->id == $order_id && $order->order_key == $order_key && $order->status == 'pending') { // Set customer location to order location if ($order->billing_country) { jigoshop_customer::set_country($order->billing_country); } if ($order->billing_state) { jigoshop_customer::set_state($order->billing_state); } if ($order->billing_postcode) { jigoshop_customer::set_postcode($order->billing_postcode); } // Pay form was posted - process payment if (isset($_POST['pay']) && jigoshop::verify_nonce('pay')) { // Update payment method if ($order->order_total > 0) { $payment_method = jigowatt_clean($_POST['payment_method']); $data = (array) maybe_unserialize(get_post_meta($order_id, 'order_data', true)); $data['payment_method'] = $payment_method; update_post_meta($order_id, 'order_data', $data); $available_gateways = jigoshop_payment_gateways::get_available_payment_gateways(); $result = $available_gateways[$payment_method]->process_payment($order_id); // Redirect to success/confirmation/payment page if ($result['result'] == 'success') { wp_safe_redirect($result['redirect']); exit; } } else { // No payment was required for order $order->payment_complete(); // filter redirect page $checkout_redirect = apply_filters('jigoshop_get_checkout_redirect_page_id', jigoshop_get_page_id('thanks')); wp_safe_redirect(get_permalink($checkout_redirect)); exit; } } } elseif ($order->status != 'pending') { jigoshop::add_error(__('Your order has already been paid for. Please contact us if you need assistance.', 'jigoshop')); } else { jigoshop::add_error(__('Invalid order.', 'jigoshop')); } } else { // Pay for order after checkout step if (isset($_GET['order'])) { $order_id = $_GET['order']; } else { $order_id = 0; } if (isset($_GET['key'])) { $order_key = $_GET['key']; } else { $order_key = ''; } if ($order_id > 0) { $order = new jigoshop_order($order_id); if ($order->order_key != $order_key || $order->status != 'pending') { wp_safe_redirect(apply_filters('jigoshop_get_myaccount_page_id', get_permalink(jigoshop_get_page_id('myaccount')))); exit; } } else { wp_safe_redirect(apply_filters('jigoshop_get_myaccount_page_id', get_permalink(jigoshop_get_page_id('myaccount')))); exit; } } }
/** * Coupon data meta box * * Displays the meta box */ function jigoshop_coupon_data_box($post) { global $jigoshop; wp_nonce_field('jigoshop_save_data', 'jigoshop_meta_nonce'); $coupon_code = ''; $coupon_code .= "<p class='form-field'>"; $coupon_code .= "<label>" . __('Coupon Code', 'jigoshop') . "</label>"; $coupon_code .= "<span><strong>" . $post->post_name . "</strong></span>"; $coupon_code .= '<span class="description">' . __('Will not appear until coupon is saved. This is the front end code for use on the Cart.', 'jigoshop') . '</span>'; $coupon_code .= "</p>"; // disable the permalink slug display ?> <style type="text/css">#edit-slug-box { display:none }</style> <div id="coupon_options" class="panel jigoshop_options_panel"> <div class="options_group"> <?php // The coupon code from the title after 'sanitize_title' echo $coupon_code; // Coupon Types $args = array('id' => 'type', 'label' => __('Coupon Type', 'jigoshop'), 'options' => JS_Coupons::get_coupon_types()); echo Jigoshop_Forms::select($args); // Amount $args = array('id' => 'amount', 'label' => __('Coupon Amount', 'jigoshop'), 'type' => 'number', 'min' => 0, 'desc' => __('Enter an amount e.g. 9.99.', 'jigoshop'), 'tip' => __('Amount this coupon is worth. If it is a percentange, just include the number without the percentage sign.', 'jigoshop'), 'placeholder' => '0.00'); echo Jigoshop_Forms::input($args); // Date From $coupon_date_from = get_post_meta($post->ID, 'date_from', true); $args = array('id' => 'date_from', 'label' => __('Date From', 'jigoshop'), 'desc' => __('yyyy-mm-dd', 'jigoshop'), 'tip' => __('Choose between which dates this coupon is enabled. Leave empty for any date.', 'jigoshop'), 'class' => 'short date-pick', 'placeholder' => __('Any date', 'jigoshop'), 'value' => $coupon_date_from != '' ? date('Y-m-d', $coupon_date_from) : ''); echo Jigoshop_Forms::input($args); // Date To $coupon_date_to = get_post_meta($post->ID, 'date_to', true); $args = array('id' => 'date_to', 'label' => __('Date To', 'jigoshop'), 'desc' => __('yyyy-mm-dd', 'jigoshop'), 'tip' => __('Choose between which dates this coupon is enabled. Leave empty for any date.', 'jigoshop'), 'class' => 'short date-pick', 'placeholder' => __('Any date', 'jigoshop'), 'value' => $coupon_date_to != '' ? date('Y-m-d', $coupon_date_to) : ''); echo Jigoshop_Forms::input($args); // Usage limit $usage = get_post_meta($post->ID, 'usage', true); $args = array('id' => 'usage_limit', 'label' => __('Usage Limit', 'jigoshop'), 'type' => 'number', 'desc' => sprintf(__('Times used: %s', 'jigoshop'), !empty($usage) ? $usage : '0'), 'tip' => __('Control how many times this coupon may be used.', 'jigoshop'), 'placeholder' => '0'); echo Jigoshop_Forms::input($args); // Individual use $args = array('id' => 'individual_use', 'label' => __('Individual Use', 'jigoshop'), 'desc' => __('Prevent other coupons from being used while this one is applied to the Cart.', 'jigoshop'), 'value' => false); echo Jigoshop_Forms::checkbox($args); // Free shipping $args = array('id' => 'free_shipping', 'label' => __('Free shipping', 'jigoshop'), 'desc' => __('Show the Free Shipping method on the Checkout with this enabled.', 'jigoshop'), 'value' => false); echo Jigoshop_Forms::checkbox($args); ?> </div><div class="options_group"> <?php // Order total minimum $args = array('id' => 'order_total_min', 'label' => __('Order total min', 'jigoshop'), 'type' => 'number', 'desc' => __('Set the required minimum subtotal for this coupon to be valid on an order.', 'jigoshop'), 'placeholder' => __('No min', 'jigoshop')); echo Jigoshop_Forms::input($args); // Order total maximum $args = array('id' => 'order_total_max', 'label' => __('Order total max', 'jigoshop'), 'type' => 'number', 'desc' => __('Set the required maximum subtotal for this coupon to be valid on an order.', 'jigoshop'), 'placeholder' => __('No max', 'jigoshop')); echo Jigoshop_Forms::input($args); ?> </div><div class="options_group"> <?php // Include product ID's $selected = get_post_meta($post->ID, 'include_products', true); $selected = implode(',', (array) $selected); $args = array('id' => 'include_products', 'type' => 'hidden', 'class' => 'long', 'label' => __('Include Products', 'jigoshop'), 'desc' => __('Control which products this coupon can apply to.', 'jigoshop'), 'value' => $selected); echo Jigoshop_Forms::input($args); // Exclude product ID's $selected = get_post_meta($post->ID, 'exclude_products', true); $selected = implode(',', (array) $selected); $args = array('id' => 'exclude_products', 'type' => 'hidden', 'class' => 'long', 'label' => __('Exclude Products', 'jigoshop'), 'desc' => __('Control which products this coupon cannot be applied to.', 'jigoshop'), 'value' => $selected); echo Jigoshop_Forms::input($args); ?> </div><div class="options_group"> <?php // Include Categories $categories = get_terms('product_cat', array('hide_empty' => false)); $coupon_cats = array(); foreach ($categories as $category) { $coupon_cats[$category->term_id] = $category->name; } $args = array('id' => 'include_categories', 'label' => __('Include Categories', 'jigoshop'), 'desc' => __('Control which product categories this coupon can apply to.', 'jigoshop'), 'multiple' => true, 'placeholder' => __('Any category', 'jigoshop'), 'options' => $coupon_cats); echo Jigoshop_Forms::select($args); // Exclude Categories $args = array('id' => 'exclude_categories', 'label' => __('Exclude Categories', 'jigoshop'), 'desc' => __('Control which product categories this coupon cannot be applied to.', 'jigoshop'), 'multiple' => true, 'placeholder' => __('No exclusions', 'jigoshop'), 'options' => $coupon_cats); echo Jigoshop_Forms::select($args); ?> </div><div class="options_group"> <?php // Payment methods $payment_methods = array(); $available_gateways = jigoshop_payment_gateways::get_available_payment_gateways(); if (!empty($available_gateways)) { foreach ($available_gateways as $id => $info) { $payment_methods[$id] = $info->title; } } $args = array('id' => 'pay_methods', 'label' => __('Payment Methods', 'jigoshop'), 'desc' => __('Control which payment methods are allowed for this coupon to be effective.', 'jigoshop'), 'multiple' => true, 'placeholder' => __('Any method', 'jigoshop'), 'options' => $payment_methods); echo Jigoshop_Forms::select($args); // javascript for product includes and excludes -- need to move this ?> <script type="text/javascript"> /*<![CDATA[*/ jQuery(document).ready(function($) { $('#date_from').datepicker( {dateFormat: 'yy-mm-dd', gotoCurrent: true} ); $('#date_to').datepicker( {dateFormat: 'yy-mm-dd', gotoCurrent: true} ); // allow searching of products to use on a coupon $("#include_products").select2({ minimumInputLength: 3, multiple: true, closeOnSelect: true, placeholder: "<?php _e('Any product', 'jigoshop'); ?> ", 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() }; var data = []; $.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 ); } }); } }); // allow searching of products to exclude on a coupon $("#exclude_products").select2({ minimumInputLength: 3, multiple: true, closeOnSelect: true, placeholder: "<?php _e('No exclusions', 'jigoshop'); ?> ", 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() }; $.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> </div></div> <?php }
/** * Order totals meta box * * Displays the order totals meta box * * @since 1.0 */ function jigoshop_order_totals_meta_box($post) { $_order = new jigoshop_order($post->ID); $coupons = array(); $order_discount_coupons = (array) $_order->_fetch('order_discount_coupons'); if (!empty($order_discount_coupons)) { foreach ($order_discount_coupons as $coupon) { $coupons[] = isset($coupon['code']) ? $coupon['code'] : ''; } } ?> <ul class="totals"> <li class="left"> <label><?php _e('Subtotal:', 'jigoshop'); ?> </label> <input type="text" id="order_subtotal" name="order_subtotal" placeholder="0.00 <?php _e('(ex. tax)', 'jigoshop'); ?> " value="<?php echo esc_attr($_order->_fetch('order_subtotal')); ?> " class="first" /> </li> <li class="right"> <label><?php _e('Discount: ', 'jigoshop'); ?> <span class="applied-coupons-values"><?php echo implode(',', $coupons); ?> </span></label> <input type="text" id="order_discount" name="order_discount" placeholder="0.00" value="<?php echo esc_attr($_order->_fetch('order_discount')); ?> " /> </li> <?php $shipping_methods = jigoshop_shipping::get_all_methods(); $shipping_select = "<select id='shipping_method' name='shipping_method' class='last' data-placeholder=" . __('Choose', 'jigoshop') . ">"; $shipping_select .= "<option></option>"; if (!empty($shipping_methods)) { foreach ($shipping_methods as $index => $method) { $mark = ''; if ($_order->_fetch('shipping_method') == $method->id) { $mark = 'selected="selected"'; } $shipping_select .= "<option value='{$method->id}' {$mark}>{$method->title}</option>"; } } $shipping_select .= "</select>"; ?> <li> <label><?php _e('Shipping:', 'jigoshop'); ?> </label> <input type="text" id="order_shipping" name="order_shipping" placeholder="0.00 <?php _e('(ex. tax)', 'jigoshop'); ?> " value="<?php echo esc_attr($_order->_fetch('order_shipping')); ?> " class="first" /> <?php echo $shipping_select; ?> <script type="text/javascript"> /*<![CDATA[*/ jQuery(function() { jQuery("#shipping_method").select2({ width: '120px' }); }); /*]]>*/ </script> </li> <li class="left"> <label><?php _e('Total Tax:', 'jigoshop'); ?> </label> <input type="text" id="order_tax" name="order_tax_total" placeholder="0.00" value="<?php echo esc_attr($_order->get_total_tax()); ?> " class="first" /> </li> <li class="right"> <label><?php _e('Shipping Tax:', 'jigoshop'); ?> </label> <input type="text" id="order_shipping_tax" name="order_shipping_tax" placeholder="0.00" value="<?php echo esc_attr($_order->_fetch('order_shipping_tax')); ?> " class="first" /> </li> <?php $payment_methods = jigoshop_payment_gateways::get_available_payment_gateways(); $payment_select = "<select id='payment_method' name='payment_method' class='last' data-placeholder=" . __('Choose', 'jigoshop') . ">"; $payment_select .= "<option></option>"; if (!empty($payment_methods)) { foreach ($payment_methods as $index => $method) { $mark = ''; if ($_order->_fetch('payment_method') == $method->id) { $mark = 'selected="selected"'; } $payment_select .= "<option value='{$method->id}' {$mark}>{$method->title}</option>"; } } $payment_select .= "</select>"; ?> <?php do_action('jigoshop_admin_order_totals_after_shipping', $post->ID); ?> <li> <label><?php _e('Total:', 'jigoshop'); ?> </label> <input type="text" id="order_total" name="order_total" placeholder="0.00" value="<?php echo esc_attr($_order->_fetch('order_total')); ?> " class="first" /> <?php echo $payment_select; ?> <script type="text/javascript"> /*<![CDATA[*/ jQuery(function() { jQuery("#payment_method").select2({ width: '120px' }); }); /*]]>*/ </script> </li> </ul> <div class="clear"></div> <?php }
function jigoshop_process_shop_order_meta($post_id) { $jigoshop_options = Jigoshop_Base::get_options(); $jigoshop_errors = array(); $order = new jigoshop_order($post_id); // Get old data + attributes $data = (array) maybe_unserialize(get_post_meta($post_id, 'order_data', true)); //Get old order items $old_order_items = (array) maybe_unserialize(get_post_meta($post_id, 'order_items', true)); // Add/Replace data to array $customerDetails = array('billing_first_name', 'billing_last_name', 'billing_company', 'billing_euvatno', 'billing_address_1', 'billing_address_2', 'billing_city', 'billing_postcode', 'billing_country', 'billing_state', 'billing_email', 'billing_phone', 'shipping_first_name', 'shipping_last_name', 'shipping_company', 'shipping_address_1', 'shipping_address_2', 'shipping_city', 'shipping_postcode', 'shipping_country', 'shipping_state'); $order_fields = array('shipping_method', 'shipping_service', 'payment_method', 'order_subtotal', 'order_discount_subtotal', 'order_shipping', 'order_discount', 'order_discount_coupons', 'order_tax_total', 'order_shipping_tax', 'order_total', 'order_total_prices_per_tax_class_ex_tax'); /* Pre-fill the customer addresses */ foreach ($customerDetails as $key) { $order_fields[] = $key; /* Checks if this is a new order from "Add Order" button */ if (!empty($_POST['auto_draft']) && !empty($_POST['customer_user']) && empty($_POST[$key])) { $data[$key] = get_user_meta($_POST['customer_user'], $key, true); } } //Check EUVAT Field if (!empty($data['billing_euvatno']) && !empty($data['billing_country'])) { $data['billing_euvatno'] = str_replace(' ', '', $data['billing_euvatno']); } //run stripslashes on all valid fields foreach ($order_fields as $field_name) { if (isset($_POST[$field_name])) { $data[$field_name] = stripslashes($_POST[$field_name]); } } // Sanitize numeric values $data['order_total'] = jigoshop_sanitize_num($data['order_total']); $data['order_subtotal'] = jigoshop_sanitize_num($data['order_subtotal']); // if a shipping or payment methods has changed, update the method title for pretty display if (isset($_POST['shipping_method'])) { $data['shipping_service'] = ''; $shipping_methods = jigoshop_shipping::get_all_methods(); if (!empty($shipping_methods)) { foreach ($shipping_methods as $method) { if ($_POST['shipping_method'] == $method->id) { $data['shipping_service'] = $method->title; } } } } if (isset($_POST['payment_method'])) { $data['payment_method_title'] = ''; $payment_methods = jigoshop_payment_gateways::get_available_payment_gateways(); if (!empty($payment_methods)) { foreach ($payment_methods as $method) { if ($_POST['payment_method'] == $method->id) { $data['payment_method_title'] = $method->title; } } } } // if total tax has been modified from order tax, then create a customized tax array // just for the order. At this point, we no longer know about multiple tax classes. // Even if we used the old tax array data, we still don't know how to break down // the amounts since they're customized. if (isset($data['order_tax_total']) && $order->get_total_tax() != $data['order_tax_total']) { $new_tax = $data['order_tax_total']; $data['order_tax'] = jigoshop_tax::create_custom_tax($data['order_total'] - $data['order_tax_total'], $data['order_tax_total'], $data['order_shipping_tax'], isset($data['order_tax_divisor']) ? $data['order_tax_divisor'] : null); } // Customer update_post_meta($post_id, 'customer_user', (int) $_POST['customer_user']); // Order items $order_items = array(); if (isset($_POST['item_id'])) { $item_id = $_POST['item_id']; $item_variation = $_POST['item_variation_id']; $item_name = $_POST['item_name']; $item_quantity = $_POST['item_quantity']; $item_cost = $_POST['item_cost']; $item_tax_rate = $_POST['item_tax_rate']; for ($i = 0; $i < count($item_id); $i++) { if (!isset($item_id[$i]) || !isset($item_name[$i]) || !isset($item_quantity[$i]) || !isset($item_cost[$i]) || !isset($item_tax_rate[$i])) { continue; } $variation_id = ''; $variation = ''; if (!empty($item_variation[$i])) { $variation_id = (int) $item_variation[$i]; // if this is a variation, we should check if it is an old one // and copy the 'variation' field describing details of variation foreach ($old_order_items as $old_item_index => $old_item) { if ($old_item['variation_id'] == $variation_id) { $variation = $old_item['variation']; unset($old_order_items[$old_item_index]); break; } } // override variation with values from $_POST if (isset($_POST['order_attributes'][$i]) && is_array($_POST['order_attributes'][$i])) { foreach ($_POST['order_attributes'][$i] as $var_key => $var_value) { $variation[$var_key] = $var_value; } } } $cost_inc_tax = $jigoshop_options->get('jigoshop_prices_include_tax') == 'yes' ? number_format((double) jigowatt_clean($item_cost[$i]), 2, '.', '') : -1; $order_items[] = apply_filters('update_order_item', array('id' => htmlspecialchars(stripslashes($item_id[$i])), 'variation_id' => $variation_id, 'variation' => $variation, 'name' => htmlspecialchars(stripslashes($item_name[$i])), 'qty' => (int) $item_quantity[$i], 'cost' => number_format((double) jigowatt_clean($item_cost[$i]), 2, '.', ''), 'cost_inc_tax' => $cost_inc_tax, 'taxrate' => number_format((double) jigowatt_clean($item_tax_rate[$i]), 4, '.', ''))); } } // Process custom attributes added with "jigoshop_order_data_panels" $data = apply_filters("jigoshop_order_data_save", $data, $post_id); // Save update_post_meta($post_id, 'order_data', $data); update_post_meta($post_id, 'order_items', $order_items); // Order status $order->update_status($_POST['order_status']); // Handle button actions if (isset($_POST['reduce_stock']) && $_POST['reduce_stock'] && count($order_items) > 0) { $order->add_order_note(__('Manually reducing stock.', 'jigoshop')); foreach ($order_items as $order_item) { $_product = $order->get_product_from_item($order_item); if ($_product->exists) { if ($_product->managing_stock()) { $old_stock = $_product->stock; $new_quantity = $_product->reduce_stock($order_item['qty']); $order->add_order_note(sprintf(__('Item #%s stock reduced from %s to %s.', 'jigoshop'), $order_item['id'], $old_stock, $new_quantity)); if ($new_quantity < 0) { if ($old_stock < 0) { $backorder_qty = $order_item['qty']; } else { $backorder_qty = $old_stock - $order_item['qty']; } do_action('jigoshop_product_on_backorder_notification', $post_id, $_product, $backorder_qty); } // stock status notifications if ($jigoshop_options->get('jigoshop_notify_no_stock') == 'yes' && $jigoshop_options->get('jigoshop_notify_no_stock_amount') >= 0 && $jigoshop_options->get('jigoshop_notify_no_stock_amount') >= $new_quantity) { do_action('jigoshop_no_stock_notification', $_product); } else { if ($jigoshop_options->get('jigoshop_notify_low_stock') == 'yes' && $jigoshop_options->get('jigoshop_notify_low_stock_amount') >= $new_quantity) { do_action('jigoshop_low_stock_notification', $_product); } } } } else { $order->add_order_note(sprintf(__('Item %s %s not found, skipping.', 'jigoshop'), $order_item['id'], $order_item['name'])); } } $order->add_order_note(__('Manual stock reduction complete.', 'jigoshop')); } else { if (isset($_POST['restore_stock']) && $_POST['restore_stock'] && sizeof($order_items) > 0) { $order->add_order_note(__('Manually restoring stock.', 'jigoshop')); foreach ($order_items as $order_item) { $_product = $order->get_product_from_item($order_item); if ($_product->exists) { if ($_product->managing_stock()) { $old_stock = $_product->stock; $new_quantity = $_product->increase_stock($order_item['qty']); $order->add_order_note(sprintf(__('Item #%s stock increased from %s to %s.', 'jigoshop'), $order_item['id'], $old_stock, $new_quantity)); } } else { $order->add_order_note(sprintf(__('Item %s %s not found, skipping.', 'jigoshop'), $order_item['id'], $order_item['name'])); } } $order->add_order_note(__('Manual stock restore complete.', 'jigoshop')); } else { if (isset($_POST['invoice']) && $_POST['invoice']) { // Mail link to customer jigoshop_send_customer_invoice($order->id); } } } // Error Handling if (count($jigoshop_errors) > 0) { $jigoshop_options->set('jigoshop_errors', $jigoshop_errors); } }
/** Process the checkout after the confirm order button is pressed */ function process_checkout() { global $wpdb; do_action('jigoshop_before_checkout_process'); if (isset($_POST) && $_POST && !isset($_POST['login'])) : jigoshop_cart::calculate_totals(); jigoshop::verify_nonce('process_checkout'); if (sizeof(jigoshop_cart::$cart_contents)==0) : jigoshop::add_error( sprintf(__('Sorry, your session has expired. <a href="%s">Return to homepage →</a>','jigoshop'), home_url()) ); endif; // Checkout fields $this->posted['shiptobilling'] = isset($_POST['shiptobilling']) ? jigowatt_clean($_POST['shiptobilling']) : ''; $this->posted['payment_method'] = isset($_POST['payment_method']) ? jigowatt_clean($_POST['payment_method']) : ''; $this->posted['shipping_method'] = isset($_POST['shipping_method']) ? jigowatt_clean($_POST['shipping_method']) : ''; $this->posted['order_comments'] = isset($_POST['order_comments']) ? jigowatt_clean($_POST['order_comments']) : ''; $this->posted['terms'] = isset($_POST['terms']) ? jigowatt_clean($_POST['terms']) : ''; $this->posted['createaccount'] = isset($_POST['createaccount']) ? jigowatt_clean($_POST['createaccount']) : ''; $this->posted['account-username'] = isset($_POST['account-username']) ? jigowatt_clean($_POST['account-username']) : ''; $this->posted['account-password'] = isset($_POST['account-password']) ? jigowatt_clean($_POST['account-password']) : ''; $this->posted['account-password-2'] = isset($_POST['account-password-2']) ? jigowatt_clean($_POST['account-password-2']) : ''; if (jigoshop_cart::ship_to_billing_address_only()) $this->posted['shiptobilling'] = 'true'; // Billing Information foreach ($this->billing_fields as $field) : $this->posted[$field['name']] = isset($_POST[$field['name']]) ? jigowatt_clean($_POST[$field['name']]) : ''; // Format if (isset($field['format'])) switch ( $field['format'] ) : case 'postcode' : $this->posted[$field['name']] = strtolower(str_replace(' ', '', $this->posted[$field['name']])); break; endswitch; // Required if ( isset($field['required']) && $field['required'] && empty($this->posted[$field['name']]) ) jigoshop::add_error( $field['label'] . __(' (billing) is a required field.','jigoshop') ); // Validation if (isset($field['validate']) && !empty($this->posted[$field['name']])) switch ( $field['validate'] ) : case 'phone' : if (!jigoshop_validation::is_phone( $this->posted[$field['name']] )) : jigoshop::add_error( $field['label'] . __(' (billing) is not a valid number.','jigoshop') ); endif; break; case 'email' : if (!jigoshop_validation::is_email( $this->posted[$field['name']] )) : jigoshop::add_error( $field['label'] . __(' (billing) is not a valid email address.','jigoshop') ); endif; break; case 'postcode' : if (!jigoshop_validation::is_postcode( $this->posted[$field['name']], $_POST['billing-country'] )) : jigoshop::add_error( $field['label'] . __(' (billing) is not a valid postcode/ZIP.','jigoshop') ); else : $this->posted[$field['name']] = jigoshop_validation::format_postcode( $this->posted[$field['name']], $_POST['billing-country'] ); endif; break; endswitch; endforeach; // Shipping Information if (jigoshop_cart::needs_shipping() && !jigoshop_cart::ship_to_billing_address_only() && empty($this->posted['shiptobilling'])) : foreach ($this->shipping_fields as $field) : if (isset( $_POST[$field['name']] )) $this->posted[$field['name']] = jigowatt_clean($_POST[$field['name']]); else $this->posted[$field['name']] = ''; // Format if (isset($field['format'])) switch ( $field['format'] ) : case 'postcode' : $this->posted[$field['name']] = strtolower(str_replace(' ', '', $this->posted[$field['name']])); break; endswitch; // Required if ( isset($field['required']) && $field['required'] && empty($this->posted[$field['name']]) ) jigoshop::add_error( $field['label'] . __(' (shipping) is a required field.','jigoshop') ); // Validation if (isset($field['validate']) && !empty($this->posted[$field['name']])) switch ( $field['validate'] ) : case 'postcode' : if (!jigoshop_validation::is_postcode( $this->posted[$field['name']], $this->posted['shipping-country'] )) : jigoshop::add_error( $field['label'] . __(' (shipping) is not a valid postcode/ZIP.','jigoshop') ); else : $this->posted[$field['name']] = jigoshop_validation::format_postcode( $this->posted[$field['name']], $this->posted['shipping-country'] ); endif; break; endswitch; endforeach; endif; if (is_user_logged_in()) : $this->creating_account = false; elseif (isset($this->posted['createaccount']) && $this->posted['createaccount']) : $this->creating_account = true; elseif ($this->must_create_account) : $this->creating_account = true; else : $this->creating_account = false; endif; if ($this->creating_account && !$user_id) : if ( empty($this->posted['account-username']) ) jigoshop::add_error( __('Please enter an account username.','jigoshop') ); if ( empty($this->posted['account-password']) ) jigoshop::add_error( __('Please enter an account password.','jigoshop') ); if ( $this->posted['account-password-2'] !== $this->posted['account-password'] ) jigoshop::add_error( __('Passwords do not match.','jigoshop') ); // Check the username if ( !validate_username( $this->posted['account-username'] ) ) : jigoshop::add_error( __('Invalid email/username.','jigoshop') ); elseif ( username_exists( $this->posted['account-username'] ) ) : jigoshop::add_error( __('An account is already registered with that username. Please choose another.','jigoshop') ); endif; // Check the e-mail address if ( email_exists( $this->posted['billing-email'] ) ) : jigoshop::add_error( __('An account is already registered with your email address. Please login.','jigoshop') ); endif; endif; // Terms if (!isset($_POST['update_totals']) && empty($this->posted['terms']) && get_option('jigoshop_terms_page_id')>0 ) jigoshop::add_error( __('You must accept our Terms & Conditions.','jigoshop') ); if (jigoshop_cart::needs_shipping()) : // Shipping Method $available_methods = jigoshop_shipping::get_available_shipping_methods(); if (!isset($available_methods[$this->posted['shipping_method']])) : jigoshop::add_error( __('Invalid shipping method.','jigoshop') ); endif; endif; if (jigoshop_cart::needs_payment()) : // Payment Method $available_gateways = jigoshop_payment_gateways::get_available_payment_gateways(); if (!isset($available_gateways[$this->posted['payment_method']])) : jigoshop::add_error( __('Invalid payment method.','jigoshop') ); else : // Payment Method Field Validation $available_gateways[$this->posted['payment_method']]->validate_fields(); endif; endif; if (!isset($_POST['update_totals']) && jigoshop::error_count()==0) : $user_id = get_current_user_id(); while (1) : // Create customer account and log them in if ($this->creating_account && !$user_id) : $reg_errors = new WP_Error(); do_action('register_post', $this->posted['billing-email'], $this->posted['billing-email'], $reg_errors); $errors = apply_filters( 'registration_errors', $reg_errors, $this->posted['billing-email'], $this->posted['billing-email'] ); // if there are no errors, let's create the user account if ( !$reg_errors->get_error_code() ) : $user_pass = $this->posted['account-password']; $user_id = wp_create_user( $this->posted['account-username'], $user_pass, $this->posted['billing-email'] ); if ( !$user_id ) { jigoshop::add_error( sprintf(__('<strong>ERROR</strong>: Couldn’t register you... please contact the <a href="mailto:%s">webmaster</a> !', 'jigoshop'), get_option('admin_email'))); break; } // Change role wp_update_user( array ('ID' => $user_id, 'role' => 'customer') ) ; // send the user a confirmation and their login details wp_new_user_notification( $user_id, $user_pass ); // set the WP login cookie $secure_cookie = is_ssl() ? true : false; wp_set_auth_cookie($user_id, true, $secure_cookie); else : jigoshop::add_error( $reg_errors->get_error_message() ); break; endif; endif; // Get shipping/billing if ( !empty($this->posted['shiptobilling']) ) : $shipping_first_name = $this->posted['billing-first_name']; $shipping_last_name = $this->posted['billing-last_name']; $shipping_company = $this->posted['billing-company']; $shipping_address_1 = $this->posted['billing-address']; $shipping_address_2 = $this->posted['billing-address-2']; $shipping_city = $this->posted['billing-city']; $shipping_state = $this->posted['billing-state']; $shipping_postcode = $this->posted['billing-postcode']; $shipping_country = $this->posted['billing-country']; elseif ( jigoshop_cart::needs_shipping() ) : $shipping_first_name = $this->posted['shipping-first_name']; $shipping_last_name = $this->posted['shipping-last_name']; $shipping_company = $this->posted['shipping-company']; $shipping_address_1 = $this->posted['shipping-address']; $shipping_address_2 = $this->posted['shipping-address-2']; $shipping_city = $this->posted['shipping-city']; $shipping_state = $this->posted['shipping-state']; $shipping_postcode = $this->posted['shipping-postcode']; $shipping_country = $this->posted['shipping-country']; endif; // Save billing/shipping to user meta fields if ($user_id>0) : update_user_meta( $user_id, 'billing-first_name', $this->posted['billing-first_name'] ); update_user_meta( $user_id, 'billing-last_name', $this->posted['billing-last_name'] ); update_user_meta( $user_id, 'billing-company', $this->posted['billing-company'] ); update_user_meta( $user_id, 'billing-email', $this->posted['billing-email'] ); update_user_meta( $user_id, 'billing-address', $this->posted['billing-address'] ); update_user_meta( $user_id, 'billing-address-2', $this->posted['billing-address-2'] ); update_user_meta( $user_id, 'billing-city', $this->posted['billing-city'] ); update_user_meta( $user_id, 'billing-postcode', $this->posted['billing-postcode'] ); update_user_meta( $user_id, 'billing-country', $this->posted['billing-country'] ); update_user_meta( $user_id, 'billing-state', $this->posted['billing-state'] ); update_user_meta( $user_id, 'billing-phone', $this->posted['billing-phone'] ); if ( empty($this->posted['shiptobilling']) && jigoshop_cart::needs_shipping() ) : update_user_meta( $user_id, 'shipping-first_name', $this->posted['shipping-first_name'] ); update_user_meta( $user_id, 'shipping-last_name', $this->posted['shipping-last_name'] ); update_user_meta( $user_id, 'shipping-company', $this->posted['shipping-company'] ); update_user_meta( $user_id, 'shipping-address', $this->posted['shipping-address'] ); update_user_meta( $user_id, 'shipping-address-2', $this->posted['shipping-address-2'] ); update_user_meta( $user_id, 'shipping-city', $this->posted['shipping-city'] ); update_user_meta( $user_id, 'shipping-postcode', $this->posted['shipping-postcode'] ); update_user_meta( $user_id, 'shipping-country', $this->posted['shipping-country'] ); update_user_meta( $user_id, 'shipping-state', $this->posted['shipping-state'] ); elseif ( $this->posted['shiptobilling'] && jigoshop_cart::needs_shipping() ) : update_user_meta( $user_id, 'shipping-first_name', $this->posted['billing-first_name'] ); update_user_meta( $user_id, 'shipping-last_name', $this->posted['billing-last_name'] ); update_user_meta( $user_id, 'shipping-company', $this->posted['billing-company'] ); update_user_meta( $user_id, 'shipping-address', $this->posted['billing-address'] ); update_user_meta( $user_id, 'shipping-address-2', $this->posted['billing-address-2'] ); update_user_meta( $user_id, 'shipping-city', $this->posted['billing-city'] ); update_user_meta( $user_id, 'shipping-postcode', $this->posted['billing-postcode'] ); update_user_meta( $user_id, 'shipping-country', $this->posted['billing-country'] ); update_user_meta( $user_id, 'shipping-state', $this->posted['billing-state'] ); endif; endif; // Create Order (send cart variable so we can record items and reduce inventory). Only create if this is a new order, not if the payment was rejected last time. $_tax = new jigoshop_tax(); $order_data = array( 'post_type' => 'shop_order', 'post_title' => 'Order – '.date('F j, Y @ h:i A'), 'post_status' => 'publish', 'post_excerpt' => $this->posted['order_comments'], 'post_author' => 1 ); // Order meta data $data = array(); $data['billing_first_name'] = $this->posted['billing-first_name']; $data['billing_last_name'] = $this->posted['billing-last_name']; $data['billing_company'] = $this->posted['billing-company']; $data['billing_address_1'] = $this->posted['billing-address']; $data['billing_address_2'] = $this->posted['billing-address-2']; $data['billing_city'] = $this->posted['billing-city']; $data['billing_postcode'] = $this->posted['billing-postcode']; $data['billing_country'] = $this->posted['billing-country']; $data['billing_state'] = $this->posted['billing-state']; $data['billing_email'] = $this->posted['billing-email']; $data['billing_phone'] = $this->posted['billing-phone']; $data['shipping_first_name'] = $shipping_first_name; $data['shipping_last_name'] = $shipping_last_name; $data['shipping_company'] = $shipping_company; $data['shipping_address_1'] = $shipping_address_1; $data['shipping_address_2'] = $shipping_address_2; $data['shipping_city'] = $shipping_city; $data['shipping_postcode'] = $shipping_postcode; $data['shipping_country'] = $shipping_country; $data['shipping_state'] = $shipping_state; $data['shipping_method'] = $this->posted['shipping_method']; $data['payment_method'] = $this->posted['payment_method']; $data['order_subtotal'] = number_format(jigoshop_cart::$subtotal_ex_tax, 2, '.', ''); $data['order_shipping'] = number_format(jigoshop_cart::$shipping_total, 2, '.', ''); $data['order_discount'] = number_format(jigoshop_cart::$discount_total, 2, '.', ''); $data['order_tax'] = number_format(jigoshop_cart::$tax_total, 2, '.', ''); $data['order_shipping_tax'] = number_format(jigoshop_cart::$shipping_tax_total, 2, '.', ''); $data['order_total'] = number_format(jigoshop_cart::$total, 2, '.', ''); // Cart items $order_items = array(); foreach (jigoshop_cart::$cart_contents as $item_id => $values) : $_product = $values['data']; // Calc item tax to store $rate = ''; if ( $_product->is_taxable()) : $rate = $_tax->get_rate( $_product->data['tax_class'] ); endif; $order_items[] = array( 'id' => $item_id, 'name' => $_product->get_title(), 'qty' => (int) $values['quantity'], 'cost' => $_product->get_price_excluding_tax(), 'taxrate' => $rate ); // Check stock levels if ($_product->managing_stock()) : if (!$_product->is_in_stock() || !$_product->has_enough_stock( $values['quantity'] )) : jigoshop::add_error( sprintf(__('Sorry, we do not have enough "%s" in stock to fulfill your order. Please edit your cart and try again. We apologise for any inconvenience caused.', 'jigoshop'), $_product->get_title() ) ); break; endif; else : if (!$_product->is_in_stock()) : jigoshop::add_error( sprintf(__('Sorry, we do not have enough "%s" in stock to fulfill your order. Please edit your cart and try again. We apologise for any inconvenience caused.', 'jigoshop'), $_product->get_title() ) ); break; endif; endif; endforeach; if (jigoshop::error_count()>0) break; // Insert or update the post data if (isset($_SESSION['order_awaiting_payment']) && $_SESSION['order_awaiting_payment'] > 0) : $order_id = (int) $_SESSION['order_awaiting_payment']; $order_data['ID'] = $order_id; wp_update_post( $order_data ); else : $order_id = wp_insert_post( $order_data ); if (is_wp_error($order_id)) : jigoshop::add_error( 'Error: Unable to create order. Please try again.' ); break; endif; endif; // Update post meta update_post_meta( $order_id, 'order_data', $data ); update_post_meta( $order_id, 'order_key', uniqid('order_') ); update_post_meta( $order_id, 'customer_user', (int) $user_id ); update_post_meta( $order_id, 'order_items', $order_items ); wp_set_object_terms( $order_id, 'pending', 'shop_order_status' ); $order = &new jigoshop_order($order_id); // Inserted successfully do_action('jigoshop_new_order', $order_id); if (jigoshop_cart::needs_payment()) : // Store Order ID in session so it can be re-used after payment failure $_SESSION['order_awaiting_payment'] = $order_id; // Process Payment $result = $available_gateways[$this->posted['payment_method']]->process_payment( $order_id ); // Redirect to success/confirmation/payment page if ($result['result']=='success') : if (is_ajax()) : ob_clean(); echo json_encode($result); exit; else : wp_safe_redirect( $result['redirect'] ); exit; endif; endif; else : // No payment was required for order $order->payment_complete(); // Empty the Cart jigoshop_cart::empty_cart(); // Redirect to success/confirmation/payment page if (is_ajax()) : ob_clean(); echo json_encode( array('redirect' => get_permalink(get_option('jigoshop_thanks_page_id'))) ); exit; else : wp_safe_redirect( get_permalink(get_option('jigoshop_thanks_page_id')) ); exit; endif; endif; // Break out of loop break; endwhile; endif; // If we reached this point then there were errors if (is_ajax()) : ob_clean(); jigoshop::show_messages(); exit; else : jigoshop::show_messages(); endif; endif; }
function jigoshop_admin_option_display($options) { if (empty($options)) { return false; } $counter = 1; foreach ($options as $value) { switch ($value['type']) { case 'string': ?> <tr> <th scope="row"><?php echo $value['name']; ?> </th> <td><?php echo $value['desc']; ?> </td> </tr><?php break; case 'tab': ?> <div id="<?php echo $value['type'] . $counter; ?> " class="panel"> <table class="form-table"><?php break; case 'title': ?> <thead> <tr> <th scope="col" colspan="2"> <h3 class="title"><?php echo $value['name']; ?> </h3> <?php if (!empty($value['desc'])) { ?> <p><?php echo $value['desc']; ?> </p> <?php } ?> </th> </tr> </thead><?php break; case 'button': ?> <tr> <th scope="row"<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <?php if (!empty($value['tip'])) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99" ></a> <?php } ?> <?php if (!empty($value['name'])) { ?> <label for="<?php echo esc_attr($value['id']); ?> "><?php echo $value['name']; ?> </label> <?php } ?> </th> <td<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <a id="<?php echo esc_attr($value['id']); ?> " class="button <?php if (!empty($value['class'])) { echo esc_attr($value['class']); } ?> " style="<?php if (!empty($value['css'])) { echo esc_attr($value['css']); } ?> " href="<?php if (!empty($value['href'])) { echo esc_attr($value['href']); } ?> " ><?php if (!empty($value['desc'])) { echo $value['desc']; } ?> </a> </td> </tr><?php break; case 'checkbox': ?> <tr> <th scope="row"<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <?php if (!empty($value['tip'])) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99" ></a> <?php } ?> <?php if (!empty($value['name'])) { ?> <label for="<?php echo esc_attr($value['id']); ?> "><?php echo $value['name']; ?> </label> <?php } ?> </th> <td<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <input id="<?php echo esc_attr($value['id']); ?> " type="checkbox" class="jigoshop-input jigoshop-checkbox <?php if (!empty($value['class'])) { echo esc_attr($value['class']); } ?> " style="<?php if (!empty($value['css'])) { echo esc_attr($value['css']); } ?> " name="<?php echo esc_attr($value['id']); ?> " <?php if (get_option($value['id']) !== false && get_option($value['id']) !== null) { echo checked(get_option($value['id']), 'yes', false); } else { if (isset($value['std'])) { echo checked($value['std'], 'yes', false); } } ?> /> <label for="<?php echo esc_attr($value['id']); ?> "><?php if (!empty($value['desc'])) { echo $value['desc']; } ?> </label> </td> </tr><?php break; case 'text': case 'number': ?> <tr> <th scope="row"<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <?php if (!empty($value['tip'])) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99"></a> <?php } ?> <?php if (!empty($value['name'])) { ?> <label for="<?php echo esc_attr($value['id']); ?> "><?php echo $value['name']; ?> </label> <?php } ?> </th> <td<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <input name="<?php echo esc_attr($value['id']); ?> " id="<?php echo esc_attr($value['id']); ?> " type="<?php echo $value['type']; ?> " <?php if ($value['type'] == 'number' && !empty($value['restrict']) && is_array($value['restrict'])) { ?> min="<?php echo isset($value['restrict']['min']) ? $value['restrict']['min'] : ''; ?> " max="<?php echo isset($value['restrict']['max']) ? $value['restrict']['max'] : ''; ?> " step="<?php echo isset($value['restrict']['step']) ? $value['restrict']['step'] : 'any'; ?> " <?php } ?> class="regular-text <?php if (!empty($value['class'])) { echo esc_attr($value['class']); } ?> " style="<?php if (!empty($value['css'])) { echo esc_attr($value['css']); } ?> " placeholder="<?php if (!empty($value['placeholder'])) { echo esc_attr($value['placeholder']); } ?> " value="<?php if (get_option($value['id']) !== false && get_option($value['id']) !== null) { echo esc_attr(get_option($value['id'])); } else { if (isset($value['std'])) { echo esc_attr($value['std']); } } ?> " /> <?php if (!empty($value['desc']) && (!empty($value['name']) && empty($value['group']))) { ?> <br /><small><?php echo $value['desc']; ?> </small> <?php } elseif (!empty($value['desc'])) { ?> <?php echo $value['desc']; ?> <?php } ?> </td> </tr><?php break; case 'select': ?> <tr> <th scope="row"<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <?php if (!empty($value['tip'])) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99"></a> <?php } ?> <?php if (!empty($value['name'])) { ?> <label for="<?php echo esc_attr($value['id']); ?> "><?php echo $value['name']; ?> </label> <?php } ?> </th> <td> <select name="<?php echo esc_attr($value['id']); ?> " id="<?php echo esc_attr($value['id']); ?> " style="<?php if (isset($value['css'])) { echo esc_attr($value['css']); } ?> " class="<?php if (!empty($value['class'])) { echo esc_attr($value['class']); } ?> " <?php if (!empty($value['multiple'])) { echo 'multiple="multiple"'; } ?> <?php if (!empty($value['class']) && $value['class'] == 'chzn-select' && !empty($value['placeholder'])) { ?> data-placeholder="<?php _e(esc_attr($value['placeholder'])); ?> " <?php } ?> > <?php $selected = get_option($value['id']); $selected = !empty($selected) ? $selected : $value['std']; ?> <?php foreach ($value['options'] as $key => $val) { ?> <option value="<?php echo esc_attr($key); ?> " <?php if (!is_array($selected) && $selected == $key || is_array($selected) && in_array($key, $selected)) { ?> selected="selected" <?php } ?> > <?php echo ucfirst($val); ?> </option> <?php } ?> </select> <?php if (!empty($value['desc']) && (!empty($value['name']) && empty($value['group']))) { ?> <br /><small><?php echo $value['desc']; ?> </small> <?php } elseif (!empty($value['desc'])) { ?> <?php echo $value['desc']; ?> <?php } ?> </td> </tr><?php break; case 'radio': ?> <tr> <th scope="row"<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <?php if (!empty($value['tip'])) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99"></a> <?php } ?> <?php echo $value['name']; ?> </th> <td<?php if (empty($value['name'])) { ?> style="padding-top:0px;"<?php } ?> > <?php foreach ($value['options'] as $key => $val) { ?> <label class="radio"> <input type="radio" name="<?php echo esc_attr($value['id']); ?> " id="<?php echo esc_attr($key); ?> " value="<?php echo esc_attr($key); ?> " class="<?php if (!empty($value['class'])) { echo esc_attr($value['class']); } ?> " <?php if (get_option($value['id']) == $key) { ?> checked="checked" <?php } ?> > <?php echo esc_attr(ucfirst($val)); ?> </label><br /> <?php } ?> </td> </tr><?php break; case 'image_size': $sizes = array('jigoshop_shop_tiny' => 'jigoshop_use_wordpress_tiny_crop', 'jigoshop_shop_thumbnail' => 'jigoshop_use_wordpress_thumbnail_crop', 'jigoshop_shop_small' => 'jigoshop_use_wordpress_catalog_crop', 'jigoshop_shop_large' => 'jigoshop_use_wordpress_featured_crop'); $altSize = $sizes[$value['id']]; ?> <tr> <th scope="row"><?php echo $value['name']; ?> </label></th> <td valign="top" style="line-height:25px;height:25px;"> <input name="<?php echo esc_attr($value['id']); ?> _w" id="<?php echo esc_attr($value['id']); ?> _w" type="number" min="0" style="width:60px;" placeholder=<?php if (!empty($value['placeholder'])) { echo $value['placeholder']; } ?> value="<?php if ($size = get_option($value['id'] . '_w')) { echo $size; } else { echo $value['std']; } ?> " /> <label for="<?php echo esc_attr($value['id']); ?> _h">x</label> <input name="<?php echo esc_attr($value['id']); ?> _h" id="<?php echo esc_attr($value['id']); ?> _h" type="number" min="0" style="width:60px;" placeholder=<?php if (!empty($value['placeholder'])) { echo $value['placeholder']; } ?> value="<?php if ($size = get_option($value['id'] . '_h')) { echo $size; } else { echo $value['std']; } ?> " /> <input id="<?php echo esc_attr($altSize); ?> " type="checkbox" class="jigoshop-input jigoshop-checkbox" name="<?php echo esc_attr($altSize); ?> " <?php if (get_option($altSize) !== false && get_option($altSize) !== null) { echo checked(get_option($altSize), 'yes', false); } ?> /> <label for="<?php echo esc_attr($altSize); ?> "> <?php echo __('Crop', 'jigoshop'); ?> </label> <br /><small><?php echo $value['desc']; ?> </small> </td> </tr><?php break; case 'textarea': ?> <tr> <th scope="row"><?php if ($value['tip']) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99"></a><?php } ?> <label for="<?php echo esc_attr($value['id']); ?> "><?php echo $value['name']; ?> </label></th> <td> <textarea <?php if (isset($value['args'])) { echo $value['args'] . ' '; } ?> name="<?php echo esc_attr($value['id']); ?> " id="<?php echo esc_attr($value['id']); ?> " class="large-text <?php if (!empty($value['class'])) { echo esc_attr($value['class']); } ?> " style="<?php echo esc_attr($value['css']); ?> " placeholder="<?php if (!empty($value['placeholder'])) { echo esc_attr($value['placeholder']); } ?> " ><?php echo esc_textarea(get_option($value['id']) ? stripslashes(get_option($value['id'])) : $value['std']); ?> </textarea> <br /><small><?php echo $value['desc']; ?> </small> </td> </tr><?php break; case 'tabend': ?> </table></div><?php $counter = $counter + 1; break; case 'single_select_page': $args = array('name' => $value['id'], 'id' => $value['id'] . '" style="width: 200px;', 'sort_column' => 'menu_order', 'sort_order' => 'ASC', 'selected' => (int) get_option($value['id'])); if (!empty($value['args'])) { $args = wp_parse_args($value['args'], $args); } ?> <tr class="single_select_page"> <th scope="row"><?php if ($value['tip']) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99"></a><?php } ?> <label for="<?php echo esc_attr($value['id']); ?> "><?php echo $value['name']; ?> </label></th> <td> <?php wp_dropdown_pages($args); ?> <br /><small><?php echo $value['desc']; ?> </small> </td> </tr><?php break; case 'single_select_country': $countries = jigoshop_countries::$countries; $country_setting = (string) get_option($value['id']); if (strstr($country_setting, ':')) { $country = current(explode(':', $country_setting)); $state = end(explode(':', $country_setting)); } else { $country = $country_setting; $state = '*'; } ?> <tr class="multi_select_countries"> <th scope="row"><?php if ($value['tip']) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99"></a><?php } ?> <label for="<?php echo esc_attr($value['id']); ?> "><?php echo $value['name']; ?> </label></th> <td> <select id="<?php echo esc_attr($value['id']); ?> " name="<?php echo esc_attr($value['id']); ?> " title="Country" style="width: 150px;"> <?php $show_all = $value['id'] != 'jigoshop_default_country'; echo jigoshop_countries::country_dropdown_options($country, $state, false, $show_all); ?> </select> </td> </tr><?php if (!$show_all && jigoshop_countries::country_has_states($country) && $state == '*') { jigoshop_countries::base_country_notice(); } break; case 'multi_select_countries': $countries = jigoshop_countries::$countries; asort($countries); $selections = (array) get_option($value['id']); ?> <tr class="multi_select_countries"> <th scope="row"><?php if ($value['tip']) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99"></a><?php } ?> <label><?php echo $value['name']; ?> </label></th> <td> <div class="multi_select_countries"> <ul><?php if ($countries) { foreach ($countries as $key => $val) { ?> <li><label> <input type="checkbox" name="<?php echo esc_attr($value['id']) . '[]'; ?> " value="<?php echo esc_attr($key); ?> " <?php if (in_array($key, $selections)) { ?> checked="checked" <?php } ?> /> <?php echo $val; ?> </label></li><?php } } ?> </ul> </div> </td> </tr><?php break; case 'coupons': _deprecated_argument('jigoshop_admin_option_display', '1.3', 'The coupons type has no alternative. Use the new custom post Coupons Menu item under Jigoshop.'); $coupons = new jigoshop_coupons(); $coupon_codes = $coupons->get_coupons(); ?> <style> table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} .table{width:100%;margin-bottom:18px;} .table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} .table thead th{vertical-align:bottom;} .table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} .table tbody+tbody{border-top:2px solid #dddddd;} .table-condensed th,.table-condensed td{padding:4px 5px;} .coupon-table th,.coupon-table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:0px;} </style> <tr><td><a href="#" class="add button" id="add_coupon"><?php _e('+ Add Coupon', 'jigoshop'); ?> </a></td></tr> <table class="coupons table"> <thead> <tr> <th>Coupon</th> <th>Type</th> <th>Amount</th> <th>Usage</th> <th>Controls</th> </tr> </thead> <tbody> <?php /* Payment methods. */ $payment_methods = array(); $available_gateways = jigoshop_payment_gateways::get_available_payment_gateways(); if (!empty($available_gateways)) { foreach ($available_gateways as $id => $info) { $payment_methods[$id] = $info->title; } } /* Coupon types. */ $discount_types = jigoshop_coupons::get_coupon_types(); /* Product categories. */ $categories = get_terms('product_cat', array('hide_empty' => false)); $coupon_cats = array(); foreach ($categories as $category) { $coupon_cats[$category->term_id] = $category->name; } $i = -1; if ($coupon_codes && is_array($coupon_codes) && sizeof($coupon_codes) > 0) { foreach ($coupon_codes as $coupon) { $i++; ?> <tr> <td style="width:500px;"> <table class="coupon-table form-table" id="coupons_table_<?php echo $i; ?> "> <?php echo $coupon['code']; ?> <tbody class="couponDisplay" id="coupons_rows_<?php echo $i; ?> "> <?php $selected_type = ''; foreach ($discount_types as $type => $label) { if ($coupon['type'] == $type) { $selected_type = $type; } } $options3 = array(array('name' => __('Code', 'jigoshop'), 'tip' => __('The coupon code a customer enters on the cart or checkout page.', 'jigoshop'), 'id' => 'coupon_code[' . esc_attr($i) . ']', 'css' => 'width:150px;', 'class' => 'coupon_code', 'type' => 'text', 'std' => esc_attr($coupon['code'])), array('name' => __('Type', 'jigoshop'), 'tip' => __('Cart - Applies to whole cart<br/>Product - Applies to individual products only. You must specify individual products.', 'jigoshop'), 'id' => 'coupon_type[' . esc_attr($i) . ']', 'css' => 'width:200px;', 'type' => 'select', 'std' => $selected_type, 'options' => $discount_types), array('name' => __('Amount', 'jigoshop'), 'tip' => __('Amount this coupon is worth. If it is a percentange, just include the number without the percentage sign.', 'jigoshop'), 'id' => 'coupon_amount[' . esc_attr($i) . ']', 'css' => 'width:60px;', 'type' => 'number', 'restrict' => array('min' => 0), 'std' => esc_attr($coupon['amount'])), array('name' => __('Usage limit', 'jigoshop'), 'desc' => __(sprintf('Times used: %s', !empty($coupon['usage']) ? $coupon['usage'] : '0'), 'jigoshop'), 'placeholder' => __('No limit', 'jigoshop'), 'tip' => __('Control how many times this coupon may be used.', 'jigoshop'), 'id' => 'usage_limit[' . esc_attr($i) . ']', 'css' => 'width:60px;', 'type' => 'number', 'restrict' => array('min' => 0), 'std' => !empty($coupon['usage_limit']) ? $coupon['usage_limit'] : ''), array('name' => __('Order subtotal', 'jigoshop'), 'placeholder' => __('No min', 'jigoshop'), 'desc' => __('Min', 'jigoshop'), 'tip' => __('Set the required subtotal for this coupon to be valid on an order.', 'jigoshop'), 'id' => 'order_total_min[' . esc_attr($i) . ']', 'css' => 'width:60px;', 'type' => 'number', 'restrict' => array('min' => 0), 'std' => !empty($coupon['order_total_min']) ? $coupon['order_total_min'] : '', 'group' => true), array('desc' => __('Max', 'jigoshop'), 'placeholder' => __('No max', 'jigoshop'), 'id' => 'order_total_max[' . esc_attr($i) . ']', 'css' => 'width:60px;', 'type' => 'number', 'restrict' => array('min' => 0), 'std' => !empty($coupon['order_total_max']) ? $coupon['order_total_max'] : '', 'group' => true), array('name' => __('Payment methods', 'jigoshop'), 'tip' => __('Which payment methods are allowed for this coupon to be effective?', 'jigoshop'), 'id' => 'coupon_pay_methods[' . esc_attr($i) . '][]', 'css' => 'width:200px;', 'class' => 'chzn-select', 'type' => 'select', 'placeholder' => 'Any method', 'multiple' => true, 'std' => !empty($coupon['coupon_pay_methods']) ? $coupon['coupon_pay_methods'] : '', 'options' => $payment_methods)); jigoshop_admin_option_display($options3); ?> <tr> <th scope="row"> <a href="#" tip="<?php _e('Control which products this coupon can apply to.', 'jigoshop'); ?> " class="tips" tabindex="99"></a> <label for="product_ids_<?php echo esc_attr($i); ?> "><?php _e('Products', 'jigoshop'); ?> </label> </th> <td> <select id="product_ids_<?php echo esc_attr($i); ?> " style="width:200px;" name="product_ids[<?php echo esc_attr($i); ?> ][]" style="width:100px" class="ajax_chosen_select_products_and_variations" multiple="multiple" data-placeholder="<?php _e('Any product', 'jigoshop'); ?> "> <?php $product_ids = $coupon['products']; if ($product_ids) { foreach ($product_ids as $product_id) { $title = get_the_title($product_id); $sku = get_post_meta($product_id, '_sku', true); if (!$title) { continue; } if (isset($sku) && $sku) { $sku = ' (SKU: ' . $sku . ')'; } echo '<option value="' . $product_id . '" selected="selected">' . $title . $sku . '</option>'; } } ?> </select> <?php _e('Include', 'jigoshop'); ?> </td> </tr> <tr> <th scope="row"></th> <td style="padding-top:0px;"> <select id="exclude_product_ids_<?php echo esc_attr($i); ?> " style="width:200px;" name="exclude_product_ids[<?php echo esc_attr($i); ?> ][]" style="width:100px" class="ajax_chosen_select_products_and_variations" multiple="multiple" data-placeholder="<?php _e('Any product', 'jigoshop'); ?> "> <?php if (!empty($coupon['exclude_products'])) { foreach ($coupon['exclude_products'] as $product_id) { $title = get_the_title($product_id); $sku = get_post_meta($product_id, '_sku', true); if (!$title) { continue; } if (isset($sku) && $sku) { $sku = ' (SKU: ' . $sku . ')'; } echo '<option value="' . $product_id . '" selected="selected">' . $title . $sku . '</option>'; } } ?> </select> <?php _e('Exclude', 'jigoshop'); ?> </td> </tr> <?php $options2 = array(array('name' => __('Categories', 'jigoshop'), 'desc' => __('Include', 'jigoshop'), 'tip' => __('Control which categories this coupon can apply to.', 'jigoshop'), 'id' => 'coupon_category[' . esc_attr($i) . '][]', 'type' => 'select', 'multiple' => true, 'std' => !empty($coupon['coupon_category']) ? $coupon['coupon_category'] : '', 'options' => $coupon_cats, 'class' => 'chzn-select', 'css' => 'width:200px;', 'placeholder' => 'Any category', 'group' => true), array('desc' => __('Exclude', 'jigoshop'), 'id' => 'exclude_categories[' . esc_attr($i) . '][]', 'type' => 'select', 'multiple' => true, 'std' => !empty($coupon['exclude_categories']) ? $coupon['exclude_categories'] : '', 'options' => $coupon_cats, 'class' => 'chzn-select', 'css' => 'width:200px;', 'placeholder' => 'Any category', 'group' => true), array('name' => __('Dates allowed', 'jigoshop'), 'desc' => __('From', 'jigoshop'), 'placeholder' => __('Any date', 'jigoshop'), 'tip' => __('Choose between which dates this coupon is enabled.', 'jigoshop'), 'id' => 'coupon_date_from[' . esc_attr($i) . ']', 'css' => 'width:150px;', 'type' => 'text', 'class' => 'date-pick', 'std' => !empty($coupon['date_from']) ? date('Y-m-d', $coupon['date_from']) : '', 'group' => true), array('desc' => __('To', 'jigoshop'), 'placeholder' => __('Any date', 'jigoshop'), 'id' => 'coupon_date_to[' . esc_attr($i) . ']', 'css' => 'width:150px;', 'type' => 'text', 'class' => 'date-pick', 'std' => !empty($coupon['date_to']) ? date('Y-m-d', $coupon['date_to']) : '', 'group' => true), array('name' => __('Misc. settings', 'jigoshop'), 'desc' => 'Prevent other coupons', 'tip' => __('Prevent other coupons from being used while this one is applied to a cart.', 'jigoshop'), 'id' => 'individual[' . esc_attr($i) . ']', 'type' => 'checkbox', 'std' => isset($coupon['individual_use']) && $coupon['individual_use'] == 'yes' ? 'yes' : 'no'), array('desc' => 'Free shipping', 'tip' => __('Show the Free Shipping method on checkout with this enabled.', 'jigoshop'), 'id' => 'coupon_free_shipping[' . esc_attr($i) . ']', 'type' => 'checkbox', 'std' => isset($coupon['coupon_free_shipping']) && $coupon['coupon_free_shipping'] == 'yes' ? 'yes' : 'no')); jigoshop_admin_option_display($options2); ?> </tbody> </table> <script type="text/javascript"> /* <![CDATA[ */ jQuery(function() { jQuery("select#product_ids_<?php echo esc_attr($i); ?> ").ajaxChosen({ method: 'GET', url: '<?php echo !is_ssl() ? str_replace('https', 'http', admin_url('admin-ajax.php')) : admin_url('admin-ajax.php'); ?> ', dataType: 'json', afterTypeDelay: 100, data: { action: 'jigoshop_json_search_products_and_variations', security: '<?php echo wp_create_nonce("search-products"); ?> ' } }, function (data) { var terms = {}; jQuery.each(data, function (i, val) { terms[i] = val; }); return terms; }); jQuery("select#exclude_product_ids_<?php echo esc_attr($i); ?> ").ajaxChosen({ method: 'GET', url: '<?php echo !is_ssl() ? str_replace('https', 'http', admin_url('admin-ajax.php')) : admin_url('admin-ajax.php'); ?> ', dataType: 'json', afterTypeDelay: 100, data: { action: 'jigoshop_json_search_products_and_variations', security: '<?php echo wp_create_nonce("search-products"); ?> ' } }, function (data) { var terms = {}; jQuery.each(data, function (i, val) { terms[i] = val; }); return terms; }); jQuery('.date-pick').datepicker( {dateFormat: 'yy-mm-dd', gotoCurrent: true} ); }); /* ]]> */ </script> </td> <td><?php echo $discount_types[$selected_type]; ?> </td> <td><?php echo !empty($coupon['amount']) ? $coupon['amount'] : ''; ?> </td> <td><?php echo !empty($coupon['usage']) ? $coupon['usage'] : '0'; ?> </td> <td> <a class="toggleCoupon" href="#coupons_rows_<?php echo $i; ?> "><?php _e('Show', 'jigoshop'); ?> </a> / <a href="#" id="remove_coupon_<?php echo esc_attr($i); ?> " class="remove_coupon" title="<?php _e('Delete this Coupon', 'jigoshop'); ?> "><?php _e('Delete', 'jigoshop'); ?> </a> </td> </tr> <?php } } ?> <script type="text/javascript"> jQuery('.couponDisplay').hide(); /* <![CDATA[ */ jQuery(function() { function toggle_coupons() { jQuery('a.toggleCoupon').click(function(e) { e.preventDefault(); jQuery(this).text(jQuery(this).text() == '<?php _e('Show', 'jigoshop'); ?> ' ? '<?php _e('Hide', 'jigoshop'); ?> ' : '<?php _e('Show', 'jigoshop'); ?> '); var id = jQuery(this).attr('href').substr(1); jQuery('#' + id).toggle('slow'); }); } toggle_coupons(); jQuery('#add_coupon').live('click', function(e){ e.preventDefault(); var size = jQuery('.couponDisplay').size(); var new_coupon = '\ <table class="coupon-table form-table" id="coupons_table_' + size + '">\ <tbody class="couponDisplay" id="coupons_rows_[' + size + ']">\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('The coupon code a customer enters on the cart or checkout page.', 'jigoshop'); ?> "\ class="tips" tabindex="99"></a>\ <label for="coupon_code[' + size + ']"><?php _e('Code', 'jigoshop'); ?> </label>\ </th>\ <td>\ <input name="coupon_code[' + size + ']" id="coupon_code[' + size + ']" type="text" class="regular-text coupon_code"\ style="width:150px;" placeholder="" value="" />\ <br />\ <small></small>\ </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Cart - Applies to whole cart<br/>Product - Applies to individual products only. You must specify individual products.', 'jigoshop'); ?> "\ class="tips" tabindex="99"></a>\ <label for="coupon_type[' + size + ']"><?php _e('Type', 'jigoshop'); ?> </label>\ </th>\ <td>\ <select name="coupon_type[' + size + ']" id="coupon_type[' + size + ']" style="width:150px;">\ <option value="fixed_cart"><?php _e('Cart Discount', 'jigoshop'); ?> </option>\ <option value="percent"><?php _e('Cart % Discount', 'jigoshop'); ?> </option>\ <option value="fixed_product"><?php _e('Product Discount', 'jigoshop'); ?> </option>\ <option value="percent_product"><?php _e('Product % Discount', 'jigoshop'); ?> </option>\ </select>\ <br />\ <small></small>\ </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Amount this coupon is worth. If it is a percentange, just include the number without the percentage sign.', 'jigoshop'); ?> "\ class="tips" tabindex="99"></a>\ <label for="coupon_amount[' + size + ']"><?php _e('Amount', 'jigoshop'); ?> </label>\ </th>\ <td>\ <input name="coupon_amount[' + size + ']" id="coupon_amount[' + size + ']" type="number" min="0"\ max="" class="regular-text " style="width:60px;" value=""\ />\ <br />\ <small></small>\ </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Control how many times this coupon may be used.', 'jigoshop'); ?> " class="tips"\ tabindex="99"></a>\ <label for="usage_limit[' + size + ']"><?php _e('Usage limit', 'jigoshop'); ?> </label>\ </th>\ <td>\ <input name="usage_limit[' + size + ']" id="usage_limit[' + size + ']" type="number" min="0"\ max="" class="regular-text " style="width:60px;" placeholder="<?php _e('No limit', 'jigoshop'); ?> "\ value="" />\ </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Set the required subtotal for this coupon to be valid on an order.', 'jigoshop'); ?> "\ class="tips" tabindex="99"></a>\ <label for="order_total_min[' + size + ']"><?php _e('Order subtotal', 'jigoshop'); ?> </label>\ </th>\ <td>\ <input name="order_total_min[' + size + ']" id="order_total_min[' + size + ']" type="number"\ min="0" max="" class="regular-text " style="width:60px;" placeholder="<?php _e('No min', 'jigoshop'); ?> "\ value="" /><?php _e('Min', 'jigoshop'); ?> </td>\ </tr>\ <tr>\ <th scope="row" style="padding-top:0px;"></th>\ <td style="padding-top:0px;">\ <input name="order_total_max[' + size + ']" id="order_total_max[' + size + ']" type="number"\ min="0" max="" class="regular-text " style="width:60px;" placeholder="<?php _e('No max', 'jigoshop'); ?> "\ value="" /><?php _e('Max', 'jigoshop'); ?> </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Which payment methods are allowed for this coupon to be effective?', 'jigoshop'); ?> "\ class="tips" tabindex="99"></a>\ <label for="coupon_pay_methods[' + size + '][]"><?php _e('Payment methods', 'jigoshop'); ?> </label>\ </th>\ <td>\ <select name="coupon_pay_methods[' + size + '][]" id="coupon_pay_methods[' + size + '][]" style="width:200px;"\ class="chzn-select" multiple="multiple">\ <?php foreach ($payment_methods as $id => $label) { echo '<option value="' . $id . '">' . $label . '</option>'; } ?> \ </select>\ <br />\ <small></small>\ </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Control which products this coupon can apply to.', 'jigoshop'); ?> " class="tips"\ tabindex="99"></a>\ <label for="product_ids_' + size + '"><?php _e('Products', 'jigoshop'); ?> </label>\ </th>\ <td>\ <select id="product_ids_' + size + '" style="width:200px;" name="product_ids[' + size + '][]"\ style="width:100px" class="ajax_chosen_select_products_and_variations"\ multiple="multiple" data-placeholder="<?php _e('Any product', 'jigoshop'); ?> "></select><?php _e('Include', 'jigoshop'); ?> </td>\ </tr>\ <tr>\ <th scope="row"></th>\ <td style="padding-top:0px;">\ <select id="exclude_product_ids_' + size + '" style="width:200px;" name="exclude_product_ids[' + size + '][]"\ style="width:100px" class="ajax_chosen_select_products_and_variations"\ multiple="multiple" data-placeholder="<?php _e('Any product', 'jigoshop'); ?> "></select><?php _e('Exclude', 'jigoshop'); ?> </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Control which categories this coupon can apply to.', 'jigoshop'); ?> " class="tips"\ tabindex="99"></a>\ <label for="coupon_category[' + size + '][]"><?php _e('Categories', 'jigoshop'); ?> </label>\ </th>\ <td>\ <select name="coupon_category[' + size + '][]" id="coupon_category_' + size + '" style="width:200px;"\ class="chzn-select" multiple="multiple">\ <?php $categories = get_terms('product_cat', array('hide_empty' => false)); foreach ($categories as $category) { echo '<option value="' . $category->term_id . '">' . $category->name . '</option>'; } ?> \ </select><?php _e('Include', 'jigoshop'); ?> </td>\ </tr>\ <tr>\ <th scope="row">\ <label for="exclude_categories[' + size + '][]"></label>\ </th>\ <td>\ <select name="exclude_categories[' + size + '][]" id="exclude_categories_' + size + '" style="width:200px;"\ class="chzn-select" multiple="multiple">\ <?php $categories = get_terms('product_cat', array('hide_empty' => false)); foreach ($categories as $category) { echo '<option value="' . $category->term_id . '">' . $category->name . '</option>'; } ?> \ </select><?php _e('Exclude', 'jigoshop'); ?> </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Choose between which dates this coupon is enabled.', 'jigoshop'); ?> " class="tips"\ tabindex="99"></a>\ <label for="coupon_date_from[' + size + ']"><?php _e('Dates allowed', 'jigoshop'); ?> </label>\ </th>\ <td>\ <input name="coupon_date_from[' + size + ']" id="coupon_date_from[' + size + ']" type="text"\ class="regular-text date-pick" style="width:150px;" placeholder="<?php _e('Any date', 'jigoshop'); ?> "\ value="" /><?php _e('From', 'jigoshop'); ?> </td>\ </tr>\ <tr>\ <th scope="row" style="padding-top:0px;"></th>\ <td style="padding-top:0px;">\ <input name="coupon_date_to[' + size + ']" id="coupon_date_to[' + size + ']" type="text" class="regular-text date-pick"\ style="width:150px;" placeholder="<?php _e('Any date', 'jigoshop'); ?> " value="" /><?php _e('To', 'jigoshop'); ?> </td>\ </tr>\ <tr>\ <th scope="row">\ <a href="#" tip="<?php _e('Prevent other coupons from being used while this one is applied to a cart.', 'jigoshop'); ?> "\ class="tips" tabindex="99"></a>\ <label for="individual[' + size + ']"><?php _e('Misc. settings', 'jigoshop'); ?> </label>\ </th>\ <td>\ <input id="individual[' + size + ']" type="checkbox" class="jigoshop-input jigoshop-checkbox "\ style="" name="individual[' + size + ']" />\ <label for="individual[' + size + ']"><?php _e('Prevent other coupons', 'jigoshop'); ?> </label>\ </td>\ </tr>\ <tr>\ <th scope="row" style="padding-top:0px;">\ <a href="#" tip="<?php _e('Show the Free Shipping method on checkout with this enabled.', 'jigoshop'); ?> "\ class="tips" tabindex="99"></a>\ </th>\ <td style="padding-top:0px;">\ <input id="coupon_free_shipping[' + size + ']" type="checkbox" class="jigoshop-input jigoshop-checkbox "\ style="" name="coupon_free_shipping[' + size + ']" />\ <label for="coupon_free_shipping[' + size + ']"><?php _e('Free shipping', 'jigoshop'); ?> </label>\ </td>\ </tr>\ </tbody>\ </table>\ '; /* Add the table */ jQuery('.coupons.table').before(new_coupon); jQuery('#coupons_table_' + size).hide().fadeIn('slow'); jQuery("select#product_ids_" + size).ajaxChosen({ method: 'GET', url: '<?php echo !is_ssl() ? str_replace('https', 'http', admin_url('admin-ajax.php')) : admin_url('admin-ajax.php'); ?> ', dataType: 'json', afterTypeDelay: 100, data: { action: 'jigoshop_json_search_products_and_variations', security: '<?php echo wp_create_nonce("search-products"); ?> ' } }, function (data) { var terms = {}; jQuery.each(data, function (i, val) { terms[i] = val; }); return terms; }); jQuery("select#exclude_product_ids_" + size).ajaxChosen({ method: 'GET', url: '<?php echo !is_ssl() ? str_replace('https', 'http', admin_url('admin-ajax.php')) : admin_url('admin-ajax.php'); ?> ', dataType: 'json', afterTypeDelay: 100, data: { action: 'jigoshop_json_search_products_and_variations', security: '<?php echo wp_create_nonce("search-products"); ?> ' } }, function (data) { var terms = {}; jQuery.each(data, function (i, val) { terms[i] = val; }); return terms; }); jQuery('a[href="#coupons_rows_'+size+'"]').click(function(e) { e.preventDefault(); jQuery('#coupons_rows_'+size).toggle('slow', function() { // Stuff later? }); }); jQuery(".chzn-select").chosen(); jQuery(".tips").tooltip(); jQuery('.date-pick').datepicker( {dateFormat: 'yy-mm-dd', gotoCurrent: true} ); return false; }); jQuery('a.remove_coupon').live('click', function(){ var answer = confirm("<?php _e('Delete this coupon?', 'jigoshop'); ?> ") if (answer) { jQuery('input', jQuery(this).parent().parent().children()).val(''); jQuery(this).parent().parent().fadeOut(); } return false; }); }); /* ]]> */ </script> <?php break; case 'tax_rates': $_tax = new jigoshop_tax(); $tax_classes = $_tax->get_tax_classes(); $tax_rates = get_option('jigoshop_tax_rates'); $applied_all_states = array(); ?> <tr> <th><?php if ($value['tip']) { ?> <a href="#" tip="<?php echo $value['tip']; ?> " class="tips" tabindex="99"></a><?php } ?> <label><?php echo $value['name']; ?> </label></th> <td id="tax_rates"> <div class="taxrows"> <?php $i = -1; if ($tax_rates && is_array($tax_rates) && sizeof($tax_rates) > 0) { function array_find($needle, $haystack) { foreach ($haystack as $key => $val) { if ($needle == array("label" => $val['label'], "compound" => $val['compound'], 'rate' => $val['rate'], 'shipping' => $val['shipping'], 'is_all_states' => $val['is_all_states'], 'class' => $val['class'])) { return $key; } } return false; } function array_compare($tax_rates) { $after = array(); foreach ($tax_rates as $key => $val) { $first_two = array("label" => $val['label'], "compound" => $val['compound'], 'rate' => $val['rate'], 'shipping' => $val['shipping'], 'is_all_states' => $val['is_all_states'], 'class' => $val['class']); $found = array_find($first_two, $after); if ($found !== false) { $combined = $after[$found]["state"]; $combined2 = $after[$found]["country"]; $combined = !is_array($combined) ? array($combined) : $combined; $combined2 = !is_array($combined2) ? array($combined2) : $combined2; $after[$found] = array_merge($first_two, array("state" => array_merge($combined, array($val['state'])), "country" => array_merge($combined2, array($val['country'])))); } else { $after = array_merge($after, array(array_merge($first_two, array("state" => $val['state'], "country" => $val['country'])))); } } return $after; } $tax_rates = array_compare($tax_rates); foreach ($tax_rates as $rate) { if ($rate['is_all_states'] && in_array(get_all_states_key($rate), $applied_all_states)) { continue; } $i++; // increment counter after check for all states having been applied echo '<p class="taxrow"> <select name="tax_classes[' . esc_attr($i) . ']" title="Tax Classes"> <option value="*">' . __('Standard Rate', 'jigoshop') . '</option>'; if ($tax_classes) { foreach ($tax_classes as $class) { echo '<option value="' . sanitize_title($class) . '"'; if ($rate['class'] == sanitize_title($class)) { echo 'selected="selected"'; } echo '>' . $class . '</option>'; } } echo '</select> <input type="text" class="text" value="' . esc_attr($rate['label']) . '" name="tax_label[' . esc_attr($i) . ']" title="' . __('Online Label', 'jigoshop') . '" placeholder="' . __('Online Label', 'jigoshop') . '" maxlength="15" />'; echo '<select name="tax_country[' . esc_attr($i) . '][]" title="Country" multiple="multiple" style="width:250px;">'; if ($rate['is_all_states']) { if (is_array($applied_all_states) && !in_array(get_all_states_key($rate), $applied_all_states)) { $applied_all_states[] = get_all_states_key($rate); jigoshop_countries::country_dropdown_options($rate['country'], '*'); //all-states } else { continue; } } else { jigoshop_countries::country_dropdown_options($rate['country'], $rate['state']); } echo '</select> <input type="text" class="text" value="' . esc_attr($rate['rate']) . '" name="tax_rate[' . esc_attr($i) . ']" title="' . __('Rate', 'jigoshop') . '" placeholder="' . __('Rate', 'jigoshop') . '" maxlength="8" />% <label><input type="checkbox" name="tax_shipping[' . esc_attr($i) . ']" '; if (isset($rate['shipping']) && $rate['shipping'] == 'yes') { echo 'checked="checked"'; } echo ' /> ' . __('Apply to shipping', 'jigoshop') . '</label> <label><input type="checkbox" name="tax_compound[' . esc_attr($i) . ']" '; if (isset($rate['compound']) && $rate['compound'] == 'yes') { echo 'checked="checked"'; } echo ' /> ' . __('Compound', 'jigoshop') . '</label> <a href="#" class="remove button">×</a></p>'; } } ?> </div> <p><a href="#" class="add button"><?php _e('+ Add Tax Rule', 'jigoshop'); ?> </a></p> </td> </tr> <script type="text/javascript"> /* <![CDATA[ */ jQuery(function() { jQuery('#tax_rates a.add').live('click', function(){ var size = jQuery('.taxrows .taxrow').size(); // Add the row jQuery('<p class="taxrow"> \ <select name="tax_classes[' + size + ']" title="Tax Classes"> \ <option value="*"><?php _e('Standard Rate', 'jigoshop'); ?> </option><?php $tax_classes = $_tax->get_tax_classes(); if ($tax_classes) { foreach ($tax_classes as $class) { echo '<option value="' . sanitize_title($class) . '">' . $class . '</option>'; } } ?> </select><input type="text" class="text" name="tax_label[' + size + ']" title="<?php _e('Online Label', 'jigoshop'); ?> " placeholder="<?php _e('Online Label', 'jigoshop'); ?> " maxlength="15" />\ </select><select name="tax_country[' + size + '][]" title="Country" multiple="multiple"><?php jigoshop_countries::country_dropdown_options('', '', true); ?> </select><input type="text" class="text" name="tax_rate[' + size + ']" title="<?php _e('Rate', 'jigoshop'); ?> " placeholder="<?php _e('Rate', 'jigoshop'); ?> " maxlength="8" />%\ <label><input type="checkbox" name="tax_shipping[' + size + ']" /> <?php _e('Apply to shipping', 'jigoshop'); ?> </label>\ <label><input type="checkbox" name="tax_compound[' + size + ']" /> <?php _e('Compound', 'jigoshop'); ?> </label><a href="#" class="remove button">×</a>\ </p>').appendTo('#tax_rates div.taxrows'); return false; }); jQuery('#tax_rates a.remove').live('click', function(){ var answer = confirm("<?php _e('Delete this rule?', 'jigoshop'); ?> "); if (answer) { jQuery('input', jQuery(this).parent()).val(''); jQuery(this).parent().hide(); } return false; }); }); /* ]]> */ </script> <?php break; case "shipping_options": foreach (jigoshop_shipping::get_all_methods() as $method) { $method->admin_options(); } break; case "gateway_options": foreach (jigoshop_payment_gateways::payment_gateways() as $gateway) { $gateway->admin_options(); } break; } } }