diff --git a/assets/js/admin/meta-boxes.js b/assets/js/admin/meta-boxes.js index d30a6791412..99064b2235e 100644 --- a/assets/js/admin/meta-boxes.js +++ b/assets/js/admin/meta-boxes.js @@ -309,12 +309,12 @@ jQuery( function($){ $('#woocommerce-order-totals').on( 'change input', '.order_taxes_amount, .order_taxes_shipping_amount, .shipping_cost, #_order_discount', function() { var $this = $(this); - var fields = $this.closest('.totals_group').find('input[type=number], .wc_input_decimal'); + var fields = $this.closest('.totals_group').find('input[type=number], .wc_input_price'); var total = 0; fields.each(function(){ if ( $(this).val() ) - total = total + parseFloat( $(this).val() ); + total = total + accounting.unformat( $(this).val(), woocommerce_admin.mon_decimal_point ); }); if ( $this.is('.order_taxes_amount') || $this.is('.order_taxes_shipping_amount') ) { @@ -385,9 +385,9 @@ jQuery( function($){ order_shipping = 0; - $('#shipping_rows').find('input[type=number], .wc_input_decimal').each(function(){ + $('#shipping_rows').find('input[type=number], .wc_input_price').each(function(){ cost = $(this).val() || '0'; - cost = accounting.unformat( cost.replace(',', '.') ); + cost = accounting.unformat( cost, woocommerce_admin.mon_decimal_point ); order_shipping = order_shipping + parseFloat( cost ); }); @@ -449,15 +449,15 @@ jQuery( function($){ order_discount = accounting.unformat( order_discount.replace(',', '.') ); - $('#shipping_rows').find('input[type=number], .wc_input_decimal').each(function(){ + $('#shipping_rows').find('input[type=number], .wc_input_price').each(function(){ cost = $(this).val() || '0'; - cost = accounting.unformat( cost.replace(',', '.') ); + cost = accounting.unformat( cost, woocommerce_admin.mon_decimal_point ); shipping = shipping + parseFloat( cost ); }); - $('#tax_rows').find('input[type=number], .wc_input_decimal').each(function(){ + $('#tax_rows').find('input[type=number], .wc_input_price').each(function(){ cost = $(this).val() || '0'; - cost = accounting.unformat( cost.replace(',', '.') ); + cost = accounting.unformat( cost, woocommerce_admin.mon_decimal_point ); tax = tax + parseFloat( cost ); }); @@ -471,7 +471,7 @@ jQuery( function($){ tax = parseFloat( accounting.toFixed( tax, woocommerce_admin_meta_boxes.rounding_precision ) ); // Set Total - $('#_order_total').val( parseFloat( accounting.toFixed( line_totals + tax + shipping - order_discount, woocommerce_admin_meta_boxes.currency_format_num_decimals ) ) ).change(); + $('#_order_total').val( accounting.formatNumber( line_totals + tax + shipping - order_discount, woocommerce_admin_meta_boxes.currency_format_num_decimals, '', woocommerce_admin.mon_decimal_point ) ).change(); } $('#woocommerce-order-totals').unblock(); diff --git a/assets/js/admin/meta-boxes.min.js b/assets/js/admin/meta-boxes.min.js index cf7f5331a7f..739502cd31a 100644 --- a/assets/js/admin/meta-boxes.min.js +++ b/assets/js/admin/meta-boxes.min.js @@ -1 +1 @@ -jQuery(function(e){function t(){var t=e("select#product-type").val(),n=e("input#_virtual:checked").size(),r=e("input#_downloadable:checked").size(),i=".hide_if_downloadable, .hide_if_virtual",s=".show_if_downloadable, .show_if_virtual, .show_if_external";e.each(woocommerce_admin_meta_boxes.product_types,function(e,t){i=i+", .hide_if_"+t;s=s+", .show_if_"+t});e(i).show();e(s).hide();r&&e(".show_if_downloadable").show();n&&e(".show_if_virtual").show();e(".show_if_"+t).show();r&&e(".hide_if_downloadable").hide();n&&e(".hide_if_virtual").hide();e(".hide_if_"+t).hide();e("input#_manage_stock").change()}function i(){e(".product_attributes .woocommerce_attribute").each(function(t,n){e(".attribute_position",n).val(parseInt(e(n).index(".product_attributes .woocommerce_attribute")))})}e("#titlediv #title").keyup(function(t){var n=t.keyCode||t.which;if(n=="9"&&e("#woocommerce-coupon-description").size()>0){t.stopPropagation();e("#woocommerce-coupon-description").focus();return!1}});e("select#discount_type").change(function(){var t=e(this).val();t=="fixed_product"||t=="percent_product"?e(".limit_usage_to_x_items_field").show():e(".limit_usage_to_x_items_field").hide()}).change();e(function(){e('[id$="-all"] > ul.categorychecklist').each(function(){var t=e(this),n=t.find(":checked").first();if(!n.length)return;var r=t.find("input").position().top,i=n.position().top;t.closest(".tabs-panel").scrollTop(i-r+5)})});e("#upsell_product_data").bind("keypress",function(e){if(e.keyCode==13)return!1});e(".type_box").appendTo("#woocommerce-product-data h3.hndle span");e(function(){e("#woocommerce-product-data h3.hndle").unbind("click.postboxes");jQuery("#woocommerce-product-data").on("click","h3.hndle",function(t){if(e(t.target).filter("input, option, label, select").length)return;e("#woocommerce-product-data").toggleClass("closed")})});e("#order-emails a.show-order-emails").click(function(){if(e("#order-emails-select").is(":hidden")){e("#order-emails-select").slideDown("fast");e(this).hide()}return!1});e("#order-emails a.hide-order-emails").click(function(){e('input[name="order_email[]"]').each(function(){e(this).attr("checked",!1)});if(e("#order-emails-select").is(":visible")){e("#order-emails-select").slideUp("fast");e("#order-emails a.show-order-emails").show()}return!1});e("#catalog-visibility .edit-catalog-visibility").click(function(){if(e("#catalog-visibility-select").is(":hidden")){e("#catalog-visibility-select").slideDown("fast");e(this).hide()}return!1});e("#catalog-visibility .save-post-visibility").click(function(){e("#catalog-visibility-select").slideUp("fast");e("#catalog-visibility .edit-catalog-visibility").show();var t=e("input[name=_visibility]:checked").val(),n=e("input[name=_visibility]:checked").attr("data-label");if(e("input[name=_featured]").is(":checked")){n=n+", "+woocommerce_admin_meta_boxes.featured_label;e("input[name=_featured]").attr("checked","checked")}e("#catalog-visibility-display").text(n);return!1});e("#catalog-visibility .cancel-post-visibility").click(function(){e("#catalog-visibility-select").slideUp("fast");e("#catalog-visibility .edit-catalog-visibility").show();var t=e("#current_visibility").val(),n=e("#current_featured").val();e("input[name=_visibility]").removeAttr("checked");e("input[name=_visibility][value="+t+"]").attr("checked","checked");var r=e("input[name=_visibility]:checked").attr("data-label");if(n=="yes"){r=r+", "+woocommerce_admin_meta_boxes.featured_label;e("input[name=_featured]").attr("checked","checked")}else e("input[name=_featured]").removeAttr("checked");e("#catalog-visibility-display").text(r);return!1});e("ul.wc-tabs").show();e("div.panel-wrap").each(function(){e(this).find("div.panel:not(:first)").hide()});e("ul.wc-tabs a").click(function(){var t=e(this).closest("div.panel-wrap");e("ul.wc-tabs li",t).removeClass("active");e(this).parent().addClass("active");e("div.panel",t).hide();e(e(this).attr("href")).show();return!1});jQuery("select.chosen_select").chosen();jQuery("select.chosen_select_nostd").chosen({allow_single_deselect:"true"});jQuery("select.ajax_chosen_select_products").ajaxChosen({method:"GET",url:woocommerce_admin_meta_boxes.ajax_url,dataType:"json",afterTypeDelay:100,data:{action:"woocommerce_json_search_products",security:woocommerce_admin_meta_boxes.search_products_nonce}},function(t){var n={};e.each(t,function(e,t){n[e]=t});return n});jQuery("select.ajax_chosen_select_products_and_variations").ajaxChosen({method:"GET",url:woocommerce_admin_meta_boxes.ajax_url,dataType:"json",afterTypeDelay:100,data:{action:"woocommerce_json_search_products_and_variations",security:woocommerce_admin_meta_boxes.search_products_nonce}},function(t){var n={};e.each(t,function(e,t){n[e]=t});return n});jQuery("#woocommerce-order-actions input, #woocommerce-order-actions a").click(function(){window.onbeforeunload=""});e("a.edit_address").click(function(t){e(this).hide();e(this).closest(".order_data_column").find("div.address").hide();e(this).closest(".order_data_column").find("div.edit_address").show();t.preventDefault()});e("#order_items_list").on("init_row","tr.item",function(){var t=e(this),n=t.find("input.quantity"),r=n.val(),i=t.find("input.line_subtotal").val(),s=t.find("input.line_total").val(),o=t.find("input.line_tax").val(),u=t.find("input.line_subtotal_tax").val();if(r){unit_subtotal=parseFloat(accounting.toFixed(i/r,woocommerce_admin_meta_boxes.rounding_precision));unit_subtotal_tax=parseFloat(accounting.toFixed(u/r,woocommerce_admin_meta_boxes.rounding_precision));unit_total=parseFloat(accounting.toFixed(s/r,woocommerce_admin_meta_boxes.rounding_precision));unit_total_tax=parseFloat(accounting.toFixed(o/r,woocommerce_admin_meta_boxes.rounding_precision))}else unit_subtotal=unit_subtotal_tax=unit_total=unit_total_tax=0;n.attr("data-o_qty",r);t.attr("data-unit_subtotal",unit_subtotal);t.attr("data-unit_subtotal_tax",unit_subtotal_tax);t.attr("data-unit_total",unit_total);t.attr("data-unit_total_tax",unit_total_tax)});e("#order_items_list tr.item").each(function(){e(this).trigger("init_row");e(this).find(".edit").hide()});e("#order_items_list").on("click","a.edit_order_item",function(){e(this).closest("tr").find(".view").hide();e(this).closest("tr").find(".edit").show();e(this).hide();return!1});e("#order_items_list").on("change","input.quantity",function(){var t=e(this).closest("tr.item"),n=e(this).val(),r=t.attr("data-unit_subtotal"),i=t.attr("data-unit_subtotal_tax"),s=t.attr("data-unit_total"),o=t.attr("data-unit_total_tax"),u=e(this).attr("data-o_qty"),a=parseFloat(accounting.formatNumber(r*n,woocommerce_admin_meta_boxes.rounding_precision,"")),f=parseFloat(accounting.formatNumber(i*n,woocommerce_admin_meta_boxes.rounding_precision,"")),l=parseFloat(accounting.formatNumber(s*n,woocommerce_admin_meta_boxes.rounding_precision,"")),c=parseFloat(accounting.formatNumber(o*n,woocommerce_admin_meta_boxes.rounding_precision,""));t.find("input.line_subtotal").val(a);t.find("input.line_total").val(l);t.find("input.line_subtotal_tax").val(f);t.find("input.line_tax").val(c);e(this).trigger("quantity_changed")});e("#order_items_list").on("change","input.line_subtotal",function(){var t=e(this).closest("tr.item"),n=t.find("input.quantity"),r=n.val(),i=r?accounting.toFixed(e(this).val()/r,woocommerce_admin_meta_boxes.rounding_precision):0;t.attr("data-unit_subtotal",i)});e("#order_items_list").on("change","input.line_total",function(){var t=e(this).closest("tr.item"),n=t.find("input.quantity"),r=n.val(),i=r?accounting.toFixed(e(this).val()/r,woocommerce_admin_meta_boxes.rounding_precision):0;t.attr("data-unit_total",i)});e("#order_items_list").on("change","input.line_subtotal_tax",function(){var t=e(this).closest("tr.item"),n=t.find("input.quantity"),r=n.val(),i=r?accounting.toFixed(e(this).val()/r,woocommerce_admin_meta_boxes.rounding_precision):0;t.attr("data-unit_subtotal_tax",i)});e("#order_items_list").on("change","input.line_tax",function(){var t=e(this).closest("tr.item"),n=t.find("input.quantity"),r=n.val(),i=r?accounting.toFixed(e(this).val()/r,woocommerce_admin_meta_boxes.rounding_precision):0;t.attr("data-unit_total_tax",i)});e("#woocommerce-order-totals").on("change input",".order_taxes_amount, .order_taxes_shipping_amount, .shipping_cost, #_order_discount",function(){var t=e(this),n=t.closest(".totals_group").find("input[type=number], .wc_input_decimal"),r=0;n.each(function(){e(this).val()&&(r+=parseFloat(e(this).val()))});if(t.is(".order_taxes_amount")||t.is(".order_taxes_shipping_amount"))r=round(r,woocommerce_admin_meta_boxes.currency_format_num_decimals,woocommerce_admin_meta_boxes.tax_rounding_mode);var i=accounting.formatMoney(r,{symbol:woocommerce_admin_meta_boxes.currency_format_symbol,decimal:woocommerce_admin_meta_boxes.currency_format_decimal_sep,thousand:woocommerce_admin_meta_boxes.currency_format_thousand_sep,precision:woocommerce_admin_meta_boxes.currency_format_num_decimals,format:woocommerce_admin_meta_boxes.currency_format});t.closest(".totals_group").find("span.inline_total").text(i)});e("span.inline_total").closest(".totals_group").find("input").change();e("button.calc_line_taxes").click(function(){e(".woocommerce_order_items_wrapper").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t=confirm(woocommerce_admin_meta_boxes.calc_line_taxes);if(t){var n=e("#order_items_list").find("tr.item, tr.fee"),r=e("#_shipping_country").val(),i=e("#_billing_country").val();if(r)var s=r,o=e("#_shipping_state").val(),u=e("#_shipping_postcode").val(),a=e("#_shipping_city").val();else if(i)var s=i,o=e("#_billing_state").val(),u=e("#_billing_postcode").val(),a=e("#_billing_city").val();else var s=woocommerce_admin_meta_boxes.base_country,o="",u="",a="";var f={};n.each(function(){var t=e(this),n=t.find("input.order_item_id").val(),r=t.find("input.line_subtotal").val(),i=t.find("input.line_total").val(),s=t.find("select.tax_class").val();f[n]={};f[n].line_subtotal=r;f[n].line_total=i;f[n].tax_class=s});order_shipping=0;e("#shipping_rows").find("input[type=number], .wc_input_decimal").each(function(){cost=e(this).val()||"0";cost=accounting.unformat(cost.replace(",","."));order_shipping+=parseFloat(cost)});var l={action:"woocommerce_calc_line_taxes",order_id:woocommerce_admin_meta_boxes.post_id,items:f,shipping:order_shipping,country:s,state:o,postcode:u,city:a,security:woocommerce_admin_meta_boxes.calc_totals_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,l,function(t){if(t){n.each(function(){var n=e(this),r=n.find("input.order_item_id").val();n.find(".edit_order_item").click();if(t.item_taxes[r]){n.find("input.line_tax").val(t.item_taxes[r].line_tax).change();n.find("input.line_subtotal_tax").val(t.item_taxes[r].line_subtotal_tax).change()}t.tax_row_html&&e("#tax_rows").empty().append(t.tax_row_html)});e("#tax_rows").find("input").change()}e(".woocommerce_order_items_wrapper").unblock()})}else e(".woocommerce_order_items_wrapper").unblock();return!1});e("button.calc_totals").click(function(){e("#woocommerce-order-totals").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t=confirm(woocommerce_admin_meta_boxes.calc_totals);if(t){var n=0,r=0,i=0,s=e("#_order_discount").val()||"0";s=accounting.unformat(s.replace(",","."));e("#shipping_rows").find("input[type=number], .wc_input_decimal").each(function(){cost=e(this).val()||"0";cost=accounting.unformat(cost.replace(",","."));i+=parseFloat(cost)});e("#tax_rows").find("input[type=number], .wc_input_decimal").each(function(){cost=e(this).val()||"0";cost=accounting.unformat(cost.replace(",","."));r+=parseFloat(cost)});e("#order_items_list tr.item, #order_items_list tr.fee").each(function(){line_total=e(this).find("input.line_total").val()||"0";n+=accounting.unformat(line_total.replace(",","."))});woocommerce_admin_meta_boxes.round_at_subtotal=="yes"&&(r=parseFloat(accounting.toFixed(r,woocommerce_admin_meta_boxes.rounding_precision)));e("#_order_total").val(parseFloat(accounting.toFixed(n+r+i-s,woocommerce_admin_meta_boxes.currency_format_num_decimals))).change()}e("#woocommerce-order-totals").unblock();return!1});e("#woocommerce-order-items button.add_order_item").click(function(){var t=e("select#add_item_id").val();if(t){count=t.length;e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.each(t,function(t,n){var r={action:"woocommerce_add_order_item",item_to_add:n,order_id:woocommerce_admin_meta_boxes.post_id,security:woocommerce_admin_meta_boxes.order_item_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,r,function(t){e("table.woocommerce_order_items tbody#order_items_list").append(t);if(!--count){e("select#add_item_id, #add_item_id_chosen .chosen-choices").css("border-color","").val("");jQuery(".tips").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200});e("select#add_item_id").trigger("chosen:updated");e("table.woocommerce_order_items").unblock()}e("#order_items_list tr.new_row").trigger("init_row").removeClass("new_row")})})}else e("select#add_item_id, #add_item_id_chosen .chosen-choices").css("border-color","red");return!1});e("#woocommerce-order-items button.add_order_fee").click(function(){e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t={action:"woocommerce_add_order_fee",order_id:woocommerce_admin_meta_boxes.post_id,security:woocommerce_admin_meta_boxes.order_item_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,t,function(t){e("table.woocommerce_order_items tbody#order_items_list").append(t);e("table.woocommerce_order_items").unblock()});return!1});e("#order_items_list").on("click","button.add_order_item_meta",function(){var t=e(this),n=t.closest("tr.item"),r={order_item_id:n.attr("data-order_item_id"),action:"woocommerce_add_order_item_meta",security:woocommerce_admin_meta_boxes.order_item_nonce};e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:r,type:"POST",success:function(t){n.find("tbody.meta_items").append(t);e("table.woocommerce_order_items").unblock()}});return!1});e("#order_items_list").on("click","button.remove_order_item_meta",function(){var t=confirm(woocommerce_admin_meta_boxes.remove_item_meta);if(t){var n=e(this).closest("tr"),r={meta_id:n.attr("data-meta_id"),action:"woocommerce_remove_order_item_meta",security:woocommerce_admin_meta_boxes.order_item_nonce};e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:r,type:"POST",success:function(t){n.hide();e("table.woocommerce_order_items").unblock()}})}return!1});e("#woocommerce-order-items").on("click","input.check-column",function(){e(this).is(":checked")?e("#woocommerce-order-items").find(".check-column input").attr("checked","checked"):e("#woocommerce-order-items").find(".check-column input").removeAttr("checked")});e("#woocommerce-order-items").on("click",".do_bulk_action",function(){var t=e(this).closest(".bulk_actions").find("select").val(),n=e("#woocommerce-order-items").find(".check-column input:checked"),r=[];e(n).each(function(){var t=e(this).closest("tr.item, tr.fee");r.push(t.attr("data-order_item_id"))});if(r.length==0){alert(woocommerce_admin_meta_boxes.i18n_select_items);return}if(t=="delete"){var i=confirm(woocommerce_admin_meta_boxes.remove_item_notice);if(i){e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var s={order_item_ids:r,action:"woocommerce_remove_order_item",security:woocommerce_admin_meta_boxes.order_item_nonce};e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:s,type:"POST",success:function(t){e(n).each(function(){e(this).closest("tr.item, tr.fee").remove()});e("table.woocommerce_order_items").unblock()}})}}else if(t=="reduce_stock"){e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var o={};e(n).each(function(){var t=e(this).closest("tr.item, tr.fee"),n=t.find("input.quantity");o[t.attr("data-order_item_id")]=n.val()});var s={order_id:woocommerce_admin_meta_boxes.post_id,order_item_ids:r,order_item_qty:o,action:"woocommerce_reduce_order_item_stock",security:woocommerce_admin_meta_boxes.order_item_nonce};e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:s,type:"POST",success:function(t){alert(t);e("table.woocommerce_order_items").unblock()}})}else if(t=="increase_stock"){e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var o={};e(n).each(function(){var t=e(this).closest("tr.item, tr.fee"),n=t.find("input.quantity");o[t.attr("data-order_item_id")]=n.val()});var s={order_id:woocommerce_admin_meta_boxes.post_id,order_item_ids:r,order_item_qty:o,action:"woocommerce_increase_order_item_stock",security:woocommerce_admin_meta_boxes.order_item_nonce};e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:s,type:"POST",success:function(t){alert(t);e("table.woocommerce_order_items").unblock()}})}return!1});e("button.load_customer_billing").click(function(){var t=confirm(woocommerce_admin_meta_boxes.load_billing);if(t){var n=e("#customer_user").val();if(!n){alert(woocommerce_admin_meta_boxes.no_customer_selected);return!1}var r={user_id:n,type_to_load:"billing",action:"woocommerce_get_customer_details",security:woocommerce_admin_meta_boxes.get_customer_details_nonce};e(this).closest(".edit_address").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:r,type:"POST",success:function(t){var n=t;if(n){e("input#_billing_first_name").val(n.billing_first_name);e("input#_billing_last_name").val(n.billing_last_name);e("input#_billing_company").val(n.billing_company);e("input#_billing_address_1").val(n.billing_address_1);e("input#_billing_address_2").val(n.billing_address_2);e("input#_billing_city").val(n.billing_city);e("input#_billing_postcode").val(n.billing_postcode);e("#_billing_country").val(n.billing_country);e("input#_billing_state").val(n.billing_state);e("input#_billing_email").val(n.billing_email);e("input#_billing_phone").val(n.billing_phone)}e(".edit_address").unblock()}})}return!1});e("button.load_customer_shipping").click(function(){var t=confirm(woocommerce_admin_meta_boxes.load_shipping);if(t){var n=e("#customer_user").val();if(!n){alert(woocommerce_admin_meta_boxes.no_customer_selected);return!1}var r={user_id:n,type_to_load:"shipping",action:"woocommerce_get_customer_details",security:woocommerce_admin_meta_boxes.get_customer_details_nonce};e(this).closest(".edit_address").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:r,type:"POST",success:function(t){var n=t;if(n){e("input#_shipping_first_name").val(n.shipping_first_name);e("input#_shipping_last_name").val(n.shipping_last_name);e("input#_shipping_company").val(n.shipping_company);e("input#_shipping_address_1").val(n.shipping_address_1);e("input#_shipping_address_2").val(n.shipping_address_2);e("input#_shipping_city").val(n.shipping_city);e("input#_shipping_postcode").val(n.shipping_postcode);e("#_shipping_country").val(n.shipping_country);e("input#_shipping_state").val(n.shipping_state)}e(".edit_address").unblock()}})}return!1});e("button.billing-same-as-shipping").click(function(){var t=confirm(woocommerce_admin_meta_boxes.copy_billing);if(t){e("input#_shipping_first_name").val(e("input#_billing_first_name").val());e("input#_shipping_last_name").val(e("input#_billing_last_name").val());e("input#_shipping_company").val(e("input#_billing_company").val());e("input#_shipping_address_1").val(e("input#_billing_address_1").val());e("input#_shipping_address_2").val(e("input#_billing_address_2").val());e("input#_shipping_city").val(e("input#_billing_city").val());e("input#_shipping_postcode").val(e("input#_billing_postcode").val());e("#_shipping_country").val(e("#_billing_country").val());e("input#_shipping_state").val(e("input#_billing_state").val())}return!1});e(".totals_group").on("click","a.add_total_row",function(){e(this).closest(".totals_group").find(".total_rows").append(e(this).data("row"));return!1});e(".total_rows").on("click","a.delete_total_row",function(){$row=e(this).closest(".total_row");var t=$row.attr("data-order_item_id");t?$row.append('').hide():$row.remove();return!1});e("select#product-type").change(function(){var n=e(this).val();if(n=="variable"){e("input#_manage_stock").change();e("input#_downloadable").prop("checked",!1);e("input#_virtual").removeAttr("checked")}else if(n=="grouped"){e("input#_downloadable").prop("checked",!1);e("input#_virtual").removeAttr("checked")}else if(n=="external"){e("input#_downloadable").prop("checked",!1);e("input#_virtual").removeAttr("checked")}t();e("ul.wc-tabs li:visible").eq(0).find("a").click();e("body").trigger("woocommerce-product-type-change",n,e(this))}).change();e("ul.wc-tabs li:visible").eq(0).find("a").click();e("input#_downloadable, input#_virtual").change(function(){t()});e(".sale_price_dates_fields").each(function(){var t=e(this),n=!1,r=t.closest("div, table");t.find("input").each(function(){e(this).val()!=""&&(n=!0)});if(n){r.find(".sale_schedule").hide();r.find(".sale_price_dates_fields").show()}else{r.find(".sale_schedule").show();r.find(".sale_price_dates_fields").hide()}});e("#woocommerce-product-data").on("click",".sale_schedule",function(){var t=e(this).closest("div, table");e(this).hide();t.find(".cancel_sale_schedule").show();t.find(".sale_price_dates_fields").show();return!1});e("#woocommerce-product-data").on("click",".cancel_sale_schedule",function(){var t=e(this).closest("div, table");e(this).hide();t.find(".sale_schedule").show();t.find(".sale_price_dates_fields").hide();t.find(".sale_price_dates_fields").find("input").val("");return!1});e(".downloadable_files").on("click","a.insert",function(){e(this).closest(".downloadable_files").find("tbody").append(e(this).data("row"));return!1});e(".downloadable_files").on("click","a.delete",function(){e(this).closest("tr").remove();return!1});e("input#_manage_stock").change(function(){e(this).is(":checked")?e("div.stock_fields").show():e("div.stock_fields").hide()}).change();var n=e(".sale_price_dates_fields input").datepicker({defaultDate:"",dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0,showOn:"button",buttonImage:woocommerce_admin_meta_boxes.calendar_image,buttonImageOnly:!0,onSelect:function(t){var r=e(this).is("#_sale_price_dates_from, .sale_price_dates_from")?"minDate":"maxDate",i=e(this).data("datepicker"),s=e.datepicker.parseDate(i.settings.dateFormat||e.datepicker._defaults.dateFormat,t,i.settings);n.not(this).datepicker("option",r,s)}});e(".date-picker").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0,showOn:"button",buttonImage:woocommerce_admin_meta_boxes.calendar_image,buttonImageOnly:!0});e(".date-picker-field").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0});jQuery(".wc-metaboxes-wrapper").on("click",".wc-metabox h3",function(t){if(e(t.target).filter(":input, option").length)return;jQuery(this).next(".wc-metabox-content").toggle()}).on("click",".expand_all",function(e){jQuery(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > table").show();return!1}).on("click",".close_all",function(e){jQuery(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > table").hide();return!1});jQuery(".wc-metabox.closed").each(function(){jQuery(this).find(".wc-metabox-content").hide()});e(".product_attributes select.multiselect").chosen();var r=e(".product_attributes").find(".woocommerce_attribute").get();r.sort(function(t,n){var r=parseInt(e(t).attr("rel")),i=parseInt(e(n).attr("rel"));return ri?1:0});e(r).each(function(t,n){e(".product_attributes").append(n)});e("button.add_attribute").on("click",function(){var t=e(".product_attributes .woocommerce_attribute").size(),n=e("select.attribute_taxonomy").val();if(!n){var r=e("select#product-type").val();r!="variable"?enable_variation='style="display:none;"':enable_variation="";e(".product_attributes").append('

")}else{var s=e(".product_attributes .woocommerce_attribute."+n);e(".product_attributes").append(e(s));e(s).show().find(".woocommerce_attribute_data").show();i()}e("select.attribute_taxonomy").val("")});e(".product_attributes").on("blur","input.attribute_name",function(){e(this).closest(".woocommerce_attribute").find("strong.attribute_name").text(e(this).val())});e(".product_attributes").on("click","button.select_all_attributes",function(){e(this).closest("td").find("select option").attr("selected","selected");e(this).closest("td").find("select").trigger("chosen:updated");return!1});e(".product_attributes").on("click","button.select_no_attributes",function(){e(this).closest("td").find("select option").removeAttr("selected");e(this).closest("td").find("select").trigger("chosen:updated");return!1});e(".product_attributes").on("click","button.remove_row",function(){var t=confirm(woocommerce_admin_meta_boxes.remove_attribute);if(t){var n=e(this).parent().parent();if(n.is(".taxonomy")){n.find("select, input[type=text]").val("");n.hide()}else{n.find("select, input[type=text]").val("");n.hide();i()}}return!1});e(".product_attributes").sortable({items:".woocommerce_attribute",cursor:"move",axis:"y",handle:"h3",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",opacity:.65,placeholder:"wc-metabox-sortable-placeholder",start:function(e,t){t.item.css("background-color","#f6f6f6")},stop:function(e,t){t.item.removeAttr("style");i()}});e(".product_attributes").on("click","button.add_new_attribute",function(){e(".product_attributes").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t=e(this).attr("data-attribute"),n=e(this).closest(".woocommerce_attribute_data"),r=prompt(woocommerce_admin_meta_boxes.new_attribute_prompt);if(r){var i={action:"woocommerce_add_new_attribute",taxonomy:t,term:r,security:woocommerce_admin_meta_boxes.add_attribute_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,i,function(t){if(t.error)alert(t.error);else if(t.slug){n.find("select.attribute_values").append('");n.find("select.attribute_values").trigger("chosen:updated")}e(".product_attributes").unblock()})}else e(".product_attributes").unblock();return!1});e(".save_attributes").on("click",function(){e(".product_attributes").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t={post_id:woocommerce_admin_meta_boxes.post_id,data:e(".product_attributes").find("input, select, textarea").serialize(),action:"woocommerce_save_attributes",security:woocommerce_admin_meta_boxes.save_attributes_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,t,function(t){var n=window.location.toString();n=n.replace("post-new.php?","post.php?post="+woocommerce_admin_meta_boxes.post_id+"&action=edit&");e("#variable_product_options").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e("#variable_product_options").load(n+" #variable_product_options_inner",function(){e("#variable_product_options").unblock()});e(".product_attributes").unblock()})});var s,o;jQuery(document).on("click",".upload_file_button",function(t){var n=e(this);o=n.closest("tr").find("td.file_url input");t.preventDefault();if(s){s.open();return}var r=[new wp.media.controller.Library({library:wp.media.query(),multiple:!0,title:n.data("choose"),priority:20,filterable:"uploaded"})];s=wp.media.frames.downloadable_file=wp.media({title:n.data("choose"),library:{type:""},button:{text:n.data("update")},multiple:!0,states:r});s.on("select",function(){var e="",t=s.state().get("selection");t.map(function(t){t=t.toJSON();t.url&&(e=t.url)});o.val(e)});s.on("ready",function(){s.uploader.options.uploader.params={type:"downloadable_product"}});s.open()});jQuery(".downloadable_files tbody").sortable({items:"tr",cursor:"move",axis:"y",handle:"td.sort",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",opacity:.65})}); \ No newline at end of file +jQuery(function(e){function t(){var t=e("select#product-type").val(),n=e("input#_virtual:checked").size(),r=e("input#_downloadable:checked").size(),i=".hide_if_downloadable, .hide_if_virtual",s=".show_if_downloadable, .show_if_virtual, .show_if_external";e.each(woocommerce_admin_meta_boxes.product_types,function(e,t){i=i+", .hide_if_"+t;s=s+", .show_if_"+t});e(i).show();e(s).hide();r&&e(".show_if_downloadable").show();n&&e(".show_if_virtual").show();e(".show_if_"+t).show();r&&e(".hide_if_downloadable").hide();n&&e(".hide_if_virtual").hide();e(".hide_if_"+t).hide();e("input#_manage_stock").change()}function i(){e(".product_attributes .woocommerce_attribute").each(function(t,n){e(".attribute_position",n).val(parseInt(e(n).index(".product_attributes .woocommerce_attribute")))})}e("#titlediv #title").keyup(function(t){var n=t.keyCode||t.which;if(n=="9"&&e("#woocommerce-coupon-description").size()>0){t.stopPropagation();e("#woocommerce-coupon-description").focus();return!1}});e("select#discount_type").change(function(){var t=e(this).val();t=="fixed_product"||t=="percent_product"?e(".limit_usage_to_x_items_field").show():e(".limit_usage_to_x_items_field").hide()}).change();e(function(){e('[id$="-all"] > ul.categorychecklist').each(function(){var t=e(this),n=t.find(":checked").first();if(!n.length)return;var r=t.find("input").position().top,i=n.position().top;t.closest(".tabs-panel").scrollTop(i-r+5)})});e("#upsell_product_data").bind("keypress",function(e){if(e.keyCode==13)return!1});e(".type_box").appendTo("#woocommerce-product-data h3.hndle span");e(function(){e("#woocommerce-product-data h3.hndle").unbind("click.postboxes");jQuery("#woocommerce-product-data").on("click","h3.hndle",function(t){if(e(t.target).filter("input, option, label, select").length)return;e("#woocommerce-product-data").toggleClass("closed")})});e("#order-emails a.show-order-emails").click(function(){if(e("#order-emails-select").is(":hidden")){e("#order-emails-select").slideDown("fast");e(this).hide()}return!1});e("#order-emails a.hide-order-emails").click(function(){e('input[name="order_email[]"]').each(function(){e(this).attr("checked",!1)});if(e("#order-emails-select").is(":visible")){e("#order-emails-select").slideUp("fast");e("#order-emails a.show-order-emails").show()}return!1});e("#catalog-visibility .edit-catalog-visibility").click(function(){if(e("#catalog-visibility-select").is(":hidden")){e("#catalog-visibility-select").slideDown("fast");e(this).hide()}return!1});e("#catalog-visibility .save-post-visibility").click(function(){e("#catalog-visibility-select").slideUp("fast");e("#catalog-visibility .edit-catalog-visibility").show();var t=e("input[name=_visibility]:checked").val(),n=e("input[name=_visibility]:checked").attr("data-label");if(e("input[name=_featured]").is(":checked")){n=n+", "+woocommerce_admin_meta_boxes.featured_label;e("input[name=_featured]").attr("checked","checked")}e("#catalog-visibility-display").text(n);return!1});e("#catalog-visibility .cancel-post-visibility").click(function(){e("#catalog-visibility-select").slideUp("fast");e("#catalog-visibility .edit-catalog-visibility").show();var t=e("#current_visibility").val(),n=e("#current_featured").val();e("input[name=_visibility]").removeAttr("checked");e("input[name=_visibility][value="+t+"]").attr("checked","checked");var r=e("input[name=_visibility]:checked").attr("data-label");if(n=="yes"){r=r+", "+woocommerce_admin_meta_boxes.featured_label;e("input[name=_featured]").attr("checked","checked")}else e("input[name=_featured]").removeAttr("checked");e("#catalog-visibility-display").text(r);return!1});e("ul.wc-tabs").show();e("div.panel-wrap").each(function(){e(this).find("div.panel:not(:first)").hide()});e("ul.wc-tabs a").click(function(){var t=e(this).closest("div.panel-wrap");e("ul.wc-tabs li",t).removeClass("active");e(this).parent().addClass("active");e("div.panel",t).hide();e(e(this).attr("href")).show();return!1});jQuery("select.chosen_select").chosen();jQuery("select.chosen_select_nostd").chosen({allow_single_deselect:"true"});jQuery("select.ajax_chosen_select_products").ajaxChosen({method:"GET",url:woocommerce_admin_meta_boxes.ajax_url,dataType:"json",afterTypeDelay:100,data:{action:"woocommerce_json_search_products",security:woocommerce_admin_meta_boxes.search_products_nonce}},function(t){var n={};e.each(t,function(e,t){n[e]=t});return n});jQuery("select.ajax_chosen_select_products_and_variations").ajaxChosen({method:"GET",url:woocommerce_admin_meta_boxes.ajax_url,dataType:"json",afterTypeDelay:100,data:{action:"woocommerce_json_search_products_and_variations",security:woocommerce_admin_meta_boxes.search_products_nonce}},function(t){var n={};e.each(t,function(e,t){n[e]=t});return n});jQuery("#woocommerce-order-actions input, #woocommerce-order-actions a").click(function(){window.onbeforeunload=""});e("a.edit_address").click(function(t){e(this).hide();e(this).closest(".order_data_column").find("div.address").hide();e(this).closest(".order_data_column").find("div.edit_address").show();t.preventDefault()});e("#order_items_list").on("init_row","tr.item",function(){var t=e(this),n=t.find("input.quantity"),r=n.val(),i=t.find("input.line_subtotal").val(),s=t.find("input.line_total").val(),o=t.find("input.line_tax").val(),u=t.find("input.line_subtotal_tax").val();if(r){unit_subtotal=parseFloat(accounting.toFixed(i/r,woocommerce_admin_meta_boxes.rounding_precision));unit_subtotal_tax=parseFloat(accounting.toFixed(u/r,woocommerce_admin_meta_boxes.rounding_precision));unit_total=parseFloat(accounting.toFixed(s/r,woocommerce_admin_meta_boxes.rounding_precision));unit_total_tax=parseFloat(accounting.toFixed(o/r,woocommerce_admin_meta_boxes.rounding_precision))}else unit_subtotal=unit_subtotal_tax=unit_total=unit_total_tax=0;n.attr("data-o_qty",r);t.attr("data-unit_subtotal",unit_subtotal);t.attr("data-unit_subtotal_tax",unit_subtotal_tax);t.attr("data-unit_total",unit_total);t.attr("data-unit_total_tax",unit_total_tax)});e("#order_items_list tr.item").each(function(){e(this).trigger("init_row");e(this).find(".edit").hide()});e("#order_items_list").on("click","a.edit_order_item",function(){e(this).closest("tr").find(".view").hide();e(this).closest("tr").find(".edit").show();e(this).hide();return!1});e("#order_items_list").on("change","input.quantity",function(){var t=e(this).closest("tr.item"),n=e(this).val(),r=t.attr("data-unit_subtotal"),i=t.attr("data-unit_subtotal_tax"),s=t.attr("data-unit_total"),o=t.attr("data-unit_total_tax"),u=e(this).attr("data-o_qty"),a=parseFloat(accounting.formatNumber(r*n,woocommerce_admin_meta_boxes.rounding_precision,"")),f=parseFloat(accounting.formatNumber(i*n,woocommerce_admin_meta_boxes.rounding_precision,"")),l=parseFloat(accounting.formatNumber(s*n,woocommerce_admin_meta_boxes.rounding_precision,"")),c=parseFloat(accounting.formatNumber(o*n,woocommerce_admin_meta_boxes.rounding_precision,""));t.find("input.line_subtotal").val(a);t.find("input.line_total").val(l);t.find("input.line_subtotal_tax").val(f);t.find("input.line_tax").val(c);e(this).trigger("quantity_changed")});e("#order_items_list").on("change","input.line_subtotal",function(){var t=e(this).closest("tr.item"),n=t.find("input.quantity"),r=n.val(),i=r?accounting.toFixed(e(this).val()/r,woocommerce_admin_meta_boxes.rounding_precision):0;t.attr("data-unit_subtotal",i)});e("#order_items_list").on("change","input.line_total",function(){var t=e(this).closest("tr.item"),n=t.find("input.quantity"),r=n.val(),i=r?accounting.toFixed(e(this).val()/r,woocommerce_admin_meta_boxes.rounding_precision):0;t.attr("data-unit_total",i)});e("#order_items_list").on("change","input.line_subtotal_tax",function(){var t=e(this).closest("tr.item"),n=t.find("input.quantity"),r=n.val(),i=r?accounting.toFixed(e(this).val()/r,woocommerce_admin_meta_boxes.rounding_precision):0;t.attr("data-unit_subtotal_tax",i)});e("#order_items_list").on("change","input.line_tax",function(){var t=e(this).closest("tr.item"),n=t.find("input.quantity"),r=n.val(),i=r?accounting.toFixed(e(this).val()/r,woocommerce_admin_meta_boxes.rounding_precision):0;t.attr("data-unit_total_tax",i)});e("#woocommerce-order-totals").on("change input",".order_taxes_amount, .order_taxes_shipping_amount, .shipping_cost, #_order_discount",function(){var t=e(this),n=t.closest(".totals_group").find("input[type=number], .wc_input_price"),r=0;n.each(function(){e(this).val()&&(r+=accounting.unformat(e(this).val(),woocommerce_admin.mon_decimal_point))});if(t.is(".order_taxes_amount")||t.is(".order_taxes_shipping_amount"))r=round(r,woocommerce_admin_meta_boxes.currency_format_num_decimals,woocommerce_admin_meta_boxes.tax_rounding_mode);var i=accounting.formatMoney(r,{symbol:woocommerce_admin_meta_boxes.currency_format_symbol,decimal:woocommerce_admin_meta_boxes.currency_format_decimal_sep,thousand:woocommerce_admin_meta_boxes.currency_format_thousand_sep,precision:woocommerce_admin_meta_boxes.currency_format_num_decimals,format:woocommerce_admin_meta_boxes.currency_format});t.closest(".totals_group").find("span.inline_total").text(i)});e("span.inline_total").closest(".totals_group").find("input").change();e("button.calc_line_taxes").click(function(){e(".woocommerce_order_items_wrapper").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t=confirm(woocommerce_admin_meta_boxes.calc_line_taxes);if(t){var n=e("#order_items_list").find("tr.item, tr.fee"),r=e("#_shipping_country").val(),i=e("#_billing_country").val();if(r)var s=r,o=e("#_shipping_state").val(),u=e("#_shipping_postcode").val(),a=e("#_shipping_city").val();else if(i)var s=i,o=e("#_billing_state").val(),u=e("#_billing_postcode").val(),a=e("#_billing_city").val();else var s=woocommerce_admin_meta_boxes.base_country,o="",u="",a="";var f={};n.each(function(){var t=e(this),n=t.find("input.order_item_id").val(),r=t.find("input.line_subtotal").val(),i=t.find("input.line_total").val(),s=t.find("select.tax_class").val();f[n]={};f[n].line_subtotal=r;f[n].line_total=i;f[n].tax_class=s});order_shipping=0;e("#shipping_rows").find("input[type=number], .wc_input_price").each(function(){cost=e(this).val()||"0";cost=accounting.unformat(cost,woocommerce_admin.mon_decimal_point);order_shipping+=parseFloat(cost)});var l={action:"woocommerce_calc_line_taxes",order_id:woocommerce_admin_meta_boxes.post_id,items:f,shipping:order_shipping,country:s,state:o,postcode:u,city:a,security:woocommerce_admin_meta_boxes.calc_totals_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,l,function(t){if(t){n.each(function(){var n=e(this),r=n.find("input.order_item_id").val();n.find(".edit_order_item").click();if(t.item_taxes[r]){n.find("input.line_tax").val(t.item_taxes[r].line_tax).change();n.find("input.line_subtotal_tax").val(t.item_taxes[r].line_subtotal_tax).change()}t.tax_row_html&&e("#tax_rows").empty().append(t.tax_row_html)});e("#tax_rows").find("input").change()}e(".woocommerce_order_items_wrapper").unblock()})}else e(".woocommerce_order_items_wrapper").unblock();return!1});e("button.calc_totals").click(function(){e("#woocommerce-order-totals").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t=confirm(woocommerce_admin_meta_boxes.calc_totals);if(t){var n=0,r=0,i=0,s=e("#_order_discount").val()||"0";s=accounting.unformat(s.replace(",","."));e("#shipping_rows").find("input[type=number], .wc_input_price").each(function(){cost=e(this).val()||"0";cost=accounting.unformat(cost,woocommerce_admin.mon_decimal_point);i+=parseFloat(cost)});e("#tax_rows").find("input[type=number], .wc_input_price").each(function(){cost=e(this).val()||"0";cost=accounting.unformat(cost,woocommerce_admin.mon_decimal_point);r+=parseFloat(cost)});e("#order_items_list tr.item, #order_items_list tr.fee").each(function(){line_total=e(this).find("input.line_total").val()||"0";n+=accounting.unformat(line_total.replace(",","."))});woocommerce_admin_meta_boxes.round_at_subtotal=="yes"&&(r=parseFloat(accounting.toFixed(r,woocommerce_admin_meta_boxes.rounding_precision)));e("#_order_total").val(accounting.formatNumber(n+r+i-s,woocommerce_admin_meta_boxes.currency_format_num_decimals,"",woocommerce_admin.mon_decimal_point)).change()}e("#woocommerce-order-totals").unblock();return!1});e("#woocommerce-order-items button.add_order_item").click(function(){var t=e("select#add_item_id").val();if(t){count=t.length;e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.each(t,function(t,n){var r={action:"woocommerce_add_order_item",item_to_add:n,order_id:woocommerce_admin_meta_boxes.post_id,security:woocommerce_admin_meta_boxes.order_item_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,r,function(t){e("table.woocommerce_order_items tbody#order_items_list").append(t);if(!--count){e("select#add_item_id, #add_item_id_chosen .chosen-choices").css("border-color","").val("");jQuery(".tips").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200});e("select#add_item_id").trigger("chosen:updated");e("table.woocommerce_order_items").unblock()}e("#order_items_list tr.new_row").trigger("init_row").removeClass("new_row")})})}else e("select#add_item_id, #add_item_id_chosen .chosen-choices").css("border-color","red");return!1});e("#woocommerce-order-items button.add_order_fee").click(function(){e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t={action:"woocommerce_add_order_fee",order_id:woocommerce_admin_meta_boxes.post_id,security:woocommerce_admin_meta_boxes.order_item_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,t,function(t){e("table.woocommerce_order_items tbody#order_items_list").append(t);e("table.woocommerce_order_items").unblock()});return!1});e("#order_items_list").on("click","button.add_order_item_meta",function(){var t=e(this),n=t.closest("tr.item"),r={order_item_id:n.attr("data-order_item_id"),action:"woocommerce_add_order_item_meta",security:woocommerce_admin_meta_boxes.order_item_nonce};e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:r,type:"POST",success:function(t){n.find("tbody.meta_items").append(t);e("table.woocommerce_order_items").unblock()}});return!1});e("#order_items_list").on("click","button.remove_order_item_meta",function(){var t=confirm(woocommerce_admin_meta_boxes.remove_item_meta);if(t){var n=e(this).closest("tr"),r={meta_id:n.attr("data-meta_id"),action:"woocommerce_remove_order_item_meta",security:woocommerce_admin_meta_boxes.order_item_nonce};e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:r,type:"POST",success:function(t){n.hide();e("table.woocommerce_order_items").unblock()}})}return!1});e("#woocommerce-order-items").on("click","input.check-column",function(){e(this).is(":checked")?e("#woocommerce-order-items").find(".check-column input").attr("checked","checked"):e("#woocommerce-order-items").find(".check-column input").removeAttr("checked")});e("#woocommerce-order-items").on("click",".do_bulk_action",function(){var t=e(this).closest(".bulk_actions").find("select").val(),n=e("#woocommerce-order-items").find(".check-column input:checked"),r=[];e(n).each(function(){var t=e(this).closest("tr.item, tr.fee");r.push(t.attr("data-order_item_id"))});if(r.length==0){alert(woocommerce_admin_meta_boxes.i18n_select_items);return}if(t=="delete"){var i=confirm(woocommerce_admin_meta_boxes.remove_item_notice);if(i){e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var s={order_item_ids:r,action:"woocommerce_remove_order_item",security:woocommerce_admin_meta_boxes.order_item_nonce};e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:s,type:"POST",success:function(t){e(n).each(function(){e(this).closest("tr.item, tr.fee").remove()});e("table.woocommerce_order_items").unblock()}})}}else if(t=="reduce_stock"){e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var o={};e(n).each(function(){var t=e(this).closest("tr.item, tr.fee"),n=t.find("input.quantity");o[t.attr("data-order_item_id")]=n.val()});var s={order_id:woocommerce_admin_meta_boxes.post_id,order_item_ids:r,order_item_qty:o,action:"woocommerce_reduce_order_item_stock",security:woocommerce_admin_meta_boxes.order_item_nonce};e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:s,type:"POST",success:function(t){alert(t);e("table.woocommerce_order_items").unblock()}})}else if(t=="increase_stock"){e("table.woocommerce_order_items").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var o={};e(n).each(function(){var t=e(this).closest("tr.item, tr.fee"),n=t.find("input.quantity");o[t.attr("data-order_item_id")]=n.val()});var s={order_id:woocommerce_admin_meta_boxes.post_id,order_item_ids:r,order_item_qty:o,action:"woocommerce_increase_order_item_stock",security:woocommerce_admin_meta_boxes.order_item_nonce};e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:s,type:"POST",success:function(t){alert(t);e("table.woocommerce_order_items").unblock()}})}return!1});e("button.load_customer_billing").click(function(){var t=confirm(woocommerce_admin_meta_boxes.load_billing);if(t){var n=e("#customer_user").val();if(!n){alert(woocommerce_admin_meta_boxes.no_customer_selected);return!1}var r={user_id:n,type_to_load:"billing",action:"woocommerce_get_customer_details",security:woocommerce_admin_meta_boxes.get_customer_details_nonce};e(this).closest(".edit_address").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:r,type:"POST",success:function(t){var n=t;if(n){e("input#_billing_first_name").val(n.billing_first_name);e("input#_billing_last_name").val(n.billing_last_name);e("input#_billing_company").val(n.billing_company);e("input#_billing_address_1").val(n.billing_address_1);e("input#_billing_address_2").val(n.billing_address_2);e("input#_billing_city").val(n.billing_city);e("input#_billing_postcode").val(n.billing_postcode);e("#_billing_country").val(n.billing_country);e("input#_billing_state").val(n.billing_state);e("input#_billing_email").val(n.billing_email);e("input#_billing_phone").val(n.billing_phone)}e(".edit_address").unblock()}})}return!1});e("button.load_customer_shipping").click(function(){var t=confirm(woocommerce_admin_meta_boxes.load_shipping);if(t){var n=e("#customer_user").val();if(!n){alert(woocommerce_admin_meta_boxes.no_customer_selected);return!1}var r={user_id:n,type_to_load:"shipping",action:"woocommerce_get_customer_details",security:woocommerce_admin_meta_boxes.get_customer_details_nonce};e(this).closest(".edit_address").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e.ajax({url:woocommerce_admin_meta_boxes.ajax_url,data:r,type:"POST",success:function(t){var n=t;if(n){e("input#_shipping_first_name").val(n.shipping_first_name);e("input#_shipping_last_name").val(n.shipping_last_name);e("input#_shipping_company").val(n.shipping_company);e("input#_shipping_address_1").val(n.shipping_address_1);e("input#_shipping_address_2").val(n.shipping_address_2);e("input#_shipping_city").val(n.shipping_city);e("input#_shipping_postcode").val(n.shipping_postcode);e("#_shipping_country").val(n.shipping_country);e("input#_shipping_state").val(n.shipping_state)}e(".edit_address").unblock()}})}return!1});e("button.billing-same-as-shipping").click(function(){var t=confirm(woocommerce_admin_meta_boxes.copy_billing);if(t){e("input#_shipping_first_name").val(e("input#_billing_first_name").val());e("input#_shipping_last_name").val(e("input#_billing_last_name").val());e("input#_shipping_company").val(e("input#_billing_company").val());e("input#_shipping_address_1").val(e("input#_billing_address_1").val());e("input#_shipping_address_2").val(e("input#_billing_address_2").val());e("input#_shipping_city").val(e("input#_billing_city").val());e("input#_shipping_postcode").val(e("input#_billing_postcode").val());e("#_shipping_country").val(e("#_billing_country").val());e("input#_shipping_state").val(e("input#_billing_state").val())}return!1});e(".totals_group").on("click","a.add_total_row",function(){e(this).closest(".totals_group").find(".total_rows").append(e(this).data("row"));return!1});e(".total_rows").on("click","a.delete_total_row",function(){$row=e(this).closest(".total_row");var t=$row.attr("data-order_item_id");t?$row.append('').hide():$row.remove();return!1});e("select#product-type").change(function(){var n=e(this).val();if(n=="variable"){e("input#_manage_stock").change();e("input#_downloadable").prop("checked",!1);e("input#_virtual").removeAttr("checked")}else if(n=="grouped"){e("input#_downloadable").prop("checked",!1);e("input#_virtual").removeAttr("checked")}else if(n=="external"){e("input#_downloadable").prop("checked",!1);e("input#_virtual").removeAttr("checked")}t();e("ul.wc-tabs li:visible").eq(0).find("a").click();e("body").trigger("woocommerce-product-type-change",n,e(this))}).change();e("ul.wc-tabs li:visible").eq(0).find("a").click();e("input#_downloadable, input#_virtual").change(function(){t()});e(".sale_price_dates_fields").each(function(){var t=e(this),n=!1,r=t.closest("div, table");t.find("input").each(function(){e(this).val()!=""&&(n=!0)});if(n){r.find(".sale_schedule").hide();r.find(".sale_price_dates_fields").show()}else{r.find(".sale_schedule").show();r.find(".sale_price_dates_fields").hide()}});e("#woocommerce-product-data").on("click",".sale_schedule",function(){var t=e(this).closest("div, table");e(this).hide();t.find(".cancel_sale_schedule").show();t.find(".sale_price_dates_fields").show();return!1});e("#woocommerce-product-data").on("click",".cancel_sale_schedule",function(){var t=e(this).closest("div, table");e(this).hide();t.find(".sale_schedule").show();t.find(".sale_price_dates_fields").hide();t.find(".sale_price_dates_fields").find("input").val("");return!1});e(".downloadable_files").on("click","a.insert",function(){e(this).closest(".downloadable_files").find("tbody").append(e(this).data("row"));return!1});e(".downloadable_files").on("click","a.delete",function(){e(this).closest("tr").remove();return!1});e("input#_manage_stock").change(function(){e(this).is(":checked")?e("div.stock_fields").show():e("div.stock_fields").hide()}).change();var n=e(".sale_price_dates_fields input").datepicker({defaultDate:"",dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0,showOn:"button",buttonImage:woocommerce_admin_meta_boxes.calendar_image,buttonImageOnly:!0,onSelect:function(t){var r=e(this).is("#_sale_price_dates_from, .sale_price_dates_from")?"minDate":"maxDate",i=e(this).data("datepicker"),s=e.datepicker.parseDate(i.settings.dateFormat||e.datepicker._defaults.dateFormat,t,i.settings);n.not(this).datepicker("option",r,s)}});e(".date-picker").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0,showOn:"button",buttonImage:woocommerce_admin_meta_boxes.calendar_image,buttonImageOnly:!0});e(".date-picker-field").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0});jQuery(".wc-metaboxes-wrapper").on("click",".wc-metabox h3",function(t){if(e(t.target).filter(":input, option").length)return;jQuery(this).next(".wc-metabox-content").toggle()}).on("click",".expand_all",function(e){jQuery(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > table").show();return!1}).on("click",".close_all",function(e){jQuery(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > table").hide();return!1});jQuery(".wc-metabox.closed").each(function(){jQuery(this).find(".wc-metabox-content").hide()});e(".product_attributes select.multiselect").chosen();var r=e(".product_attributes").find(".woocommerce_attribute").get();r.sort(function(t,n){var r=parseInt(e(t).attr("rel")),i=parseInt(e(n).attr("rel"));return ri?1:0});e(r).each(function(t,n){e(".product_attributes").append(n)});e("button.add_attribute").on("click",function(){var t=e(".product_attributes .woocommerce_attribute").size(),n=e("select.attribute_taxonomy").val();if(!n){var r=e("select#product-type").val();r!="variable"?enable_variation='style="display:none;"':enable_variation="";e(".product_attributes").append('

")}else{var s=e(".product_attributes .woocommerce_attribute."+n);e(".product_attributes").append(e(s));e(s).show().find(".woocommerce_attribute_data").show();i()}e("select.attribute_taxonomy").val("")});e(".product_attributes").on("blur","input.attribute_name",function(){e(this).closest(".woocommerce_attribute").find("strong.attribute_name").text(e(this).val())});e(".product_attributes").on("click","button.select_all_attributes",function(){e(this).closest("td").find("select option").attr("selected","selected");e(this).closest("td").find("select").trigger("chosen:updated");return!1});e(".product_attributes").on("click","button.select_no_attributes",function(){e(this).closest("td").find("select option").removeAttr("selected");e(this).closest("td").find("select").trigger("chosen:updated");return!1});e(".product_attributes").on("click","button.remove_row",function(){var t=confirm(woocommerce_admin_meta_boxes.remove_attribute);if(t){var n=e(this).parent().parent();if(n.is(".taxonomy")){n.find("select, input[type=text]").val("");n.hide()}else{n.find("select, input[type=text]").val("");n.hide();i()}}return!1});e(".product_attributes").sortable({items:".woocommerce_attribute",cursor:"move",axis:"y",handle:"h3",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",opacity:.65,placeholder:"wc-metabox-sortable-placeholder",start:function(e,t){t.item.css("background-color","#f6f6f6")},stop:function(e,t){t.item.removeAttr("style");i()}});e(".product_attributes").on("click","button.add_new_attribute",function(){e(".product_attributes").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t=e(this).attr("data-attribute"),n=e(this).closest(".woocommerce_attribute_data"),r=prompt(woocommerce_admin_meta_boxes.new_attribute_prompt);if(r){var i={action:"woocommerce_add_new_attribute",taxonomy:t,term:r,security:woocommerce_admin_meta_boxes.add_attribute_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,i,function(t){if(t.error)alert(t.error);else if(t.slug){n.find("select.attribute_values").append('");n.find("select.attribute_values").trigger("chosen:updated")}e(".product_attributes").unblock()})}else e(".product_attributes").unblock();return!1});e(".save_attributes").on("click",function(){e(".product_attributes").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var t={post_id:woocommerce_admin_meta_boxes.post_id,data:e(".product_attributes").find("input, select, textarea").serialize(),action:"woocommerce_save_attributes",security:woocommerce_admin_meta_boxes.save_attributes_nonce};e.post(woocommerce_admin_meta_boxes.ajax_url,t,function(t){var n=window.location.toString();n=n.replace("post-new.php?","post.php?post="+woocommerce_admin_meta_boxes.post_id+"&action=edit&");e("#variable_product_options").block({message:null,overlayCSS:{background:"#fff url("+woocommerce_admin_meta_boxes.plugin_url+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});e("#variable_product_options").load(n+" #variable_product_options_inner",function(){e("#variable_product_options").unblock()});e(".product_attributes").unblock()})});var s,o;jQuery(document).on("click",".upload_file_button",function(t){var n=e(this);o=n.closest("tr").find("td.file_url input");t.preventDefault();if(s){s.open();return}var r=[new wp.media.controller.Library({library:wp.media.query(),multiple:!0,title:n.data("choose"),priority:20,filterable:"uploaded"})];s=wp.media.frames.downloadable_file=wp.media({title:n.data("choose"),library:{type:""},button:{text:n.data("update")},multiple:!0,states:r});s.on("select",function(){var e="",t=s.state().get("selection");t.map(function(t){t=t.toJSON();t.url&&(e=t.url)});o.val(e)});s.on("ready",function(){s.uploader.options.uploader.params={type:"downloadable_product"}});s.open()});jQuery(".downloadable_files tbody").sortable({items:"tr",cursor:"move",axis:"y",handle:"td.sort",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",opacity:.65})}); \ No newline at end of file diff --git a/assets/js/admin/woocommerce_admin.js b/assets/js/admin/woocommerce_admin.js index aa5d2aecffc..ceb29733f2f 100644 --- a/assets/js/admin/woocommerce_admin.js +++ b/assets/js/admin/woocommerce_admin.js @@ -3,24 +3,44 @@ */ jQuery(function(){ - // Price input validation - Keep price inputs formatted correctly - jQuery(".wc_input_decimal[type=text]") - .each(function(){ - var value = jQuery(this).val(); - var newvalue = value.replace( '.', woocommerce_admin.locale_decimal_point ); - jQuery(this).val( newvalue ); + // Price input validation + jQuery(".wc_input_decimal[type=text], .wc_input_price[type=text]") + .bind( 'blur', function() { + jQuery('.wc_error_tip').fadeOut('100', function(){ jQuery(this).remove(); } ); + return this; }); - jQuery(".wc_input_decimal[type=text]") + + jQuery(".wc_input_price[type=text]") .bind( 'keyup change', function() { var value = jQuery(this).val(); - var regex = new RegExp( "[^0-9\%.\\" + woocommerce_admin.locale_decimal_point + "]+", "gi" ); + var regex = new RegExp( "[^0-9\%.\\" + woocommerce_admin.mon_decimal_point + "]+", "gi" ); var newvalue = value.replace( regex, '' ); if ( value !== newvalue ) { jQuery(this).val( newvalue ); if ( jQuery(this).parent().find('.wc_error_tip').size() == 0 ) { var offset = jQuery(this).position(); - jQuery(this).after( '
' + woocommerce_admin.i18n_decimal_input_error + '
' ); + jQuery(this).after( '
' + woocommerce_admin.i18n_mon_decimal_error + '
' ); + jQuery('.wc_error_tip') + .css('left', offset.left + jQuery(this).width() - ( jQuery(this).width() / 2 ) - ( jQuery('.wc_error_tip').width() / 2 ) ) + .css('top', offset.top + jQuery(this).height() ) + .fadeIn('100'); + } + } + return this; + }); + + jQuery(".wc_input_decimal[type=text]") + .bind( 'keyup change', function() { + var value = jQuery(this).val(); + var regex = new RegExp( "[^0-9\%.\\" + woocommerce_admin.decimal_point + "]+", "gi" ); + var newvalue = value.replace( regex, '' ); + + if ( value !== newvalue ) { + jQuery(this).val( newvalue ); + if ( jQuery(this).parent().find('.wc_error_tip').size() == 0 ) { + var offset = jQuery(this).position(); + jQuery(this).after( '
' + woocommerce_admin.i18n_decimal_error + '
' ); jQuery('.wc_error_tip') .css('left', offset.left + jQuery(this).width() - ( jQuery(this).width() / 2 ) - ( jQuery('.wc_error_tip').width() / 2 ) ) .css('top', offset.top + jQuery(this).height() ) @@ -28,10 +48,6 @@ jQuery(function(){ } } return this; - }) - .bind( 'blur', function() { - jQuery('.wc_error_tip').fadeOut('100', function(){ jQuery(this).remove(); } ); - return this; }); jQuery("body").click(function(){ diff --git a/assets/js/admin/woocommerce_admin.min.js b/assets/js/admin/woocommerce_admin.min.js index c4f7e1250f6..88e3c3276a5 100644 --- a/assets/js/admin/woocommerce_admin.min.js +++ b/assets/js/admin/woocommerce_admin.min.js @@ -1,3 +1,3 @@ /** * WooCommerce Admin JS - */jQuery(function(){jQuery(".wc_input_decimal[type=text]").each(function(){var e=jQuery(this).val(),t=e.replace(".",woocommerce_admin.locale_decimal_point);jQuery(this).val(t)});jQuery(".wc_input_decimal[type=text]").bind("keyup change",function(){var e=jQuery(this).val(),t=new RegExp("[^0-9%.\\"+woocommerce_admin.locale_decimal_point+"]+","gi"),n=e.replace(t,"");if(e!==n){jQuery(this).val(n);if(jQuery(this).parent().find(".wc_error_tip").size()==0){var r=jQuery(this).position();jQuery(this).after('
'+woocommerce_admin.i18n_decimal_input_error+"
");jQuery(".wc_error_tip").css("left",r.left+jQuery(this).width()-jQuery(this).width()/2-jQuery(".wc_error_tip").width()/2).css("top",r.top+jQuery(this).height()).fadeIn("100")}}return this}).bind("blur",function(){jQuery(".wc_error_tip").fadeOut("100",function(){jQuery(this).remove()});return this});jQuery("body").click(function(){jQuery(".wc_error_tip").fadeOut("100",function(){jQuery(this).remove()})});jQuery(".tips, .help_tip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200});jQuery(".wc_input_table.sortable tbody").sortable({items:"tr",cursor:"move",axis:"y",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",opacity:.65,placeholder:"wc-metabox-sortable-placeholder",start:function(e,t){t.item.css("background-color","#f6f6f6")},stop:function(e,t){t.item.removeAttr("style")}});jQuery(".wc_input_table .remove_rows").click(function(){var e=jQuery(this).closest(".wc_input_table").find("tbody");if(e.find("tr.current").size()>0){$current=e.find("tr.current");$current.each(function(){jQuery(this).remove()})}return!1});var e=!1,t=!1,n=!1;jQuery(document).bind("keyup keydown",function(n){t=n.shiftKey;e=n.ctrlKey||n.metaKey});jQuery(".wc_input_table").on("focus click","input",function(r){$this_table=jQuery(this).closest("table");$this_row=jQuery(this).closest("tr");if(r.type=="focus"&&n!=$this_row.index()||r.type=="click"&&jQuery(this).is(":focus")){n=$this_row.index();if(!t&&!e){jQuery("tr",$this_table).removeClass("current").removeClass("last_selected");$this_row.addClass("current").addClass("last_selected")}else if(t){jQuery("tr",$this_table).removeClass("current");$this_row.addClass("selected_now").addClass("current");jQuery("tr.last_selected",$this_table).size()>0&&($this_row.index()>jQuery("tr.last_selected, $this_table").index()?jQuery("tr",$this_table).slice(jQuery("tr.last_selected",$this_table).index(),$this_row.index()).addClass("current"):jQuery("tr",$this_table).slice($this_row.index(),jQuery("tr.last_selected",$this_table).index()+1).addClass("current"));jQuery("tr",$this_table).removeClass("last_selected");$this_row.addClass("last_selected")}else{jQuery("tr",$this_table).removeClass("last_selected");e&&jQuery(this).closest("tr").is(".current")?$this_row.removeClass("current"):$this_row.addClass("current").addClass("last_selected")}jQuery("tr",$this_table).removeClass("selected_now")}}).on("blur","input",function(e){n=!1});jQuery("select.availability").change(function(){jQuery(this).val()=="all"?jQuery(this).closest("tr").next("tr").hide():jQuery(this).closest("tr").next("tr").show()}).change();jQuery("body").on("click",".show_order_items",function(){jQuery(this).closest("td").find("table").toggle();return!1});jQuery(".hide_options_if_checked").each(function(){jQuery(this).find("input:eq(0)").change(function(){jQuery(this).is(":checked")?jQuery(this).closest("fieldset, tr").nextUntil(".hide_options_if_checked, .show_options_if_checked",".hidden_option").hide():jQuery(this).closest("fieldset, tr").nextUntil(".hide_options_if_checked, .show_options_if_checked",".hidden_option").show()}).change()});jQuery(".show_options_if_checked").each(function(){jQuery(this).find("input:eq(0)").change(function(){jQuery(this).is(":checked")?jQuery(this).closest("fieldset, tr").nextUntil(".hide_options_if_checked, .show_options_if_checked",".hidden_option").show():jQuery(this).closest("fieldset, tr").nextUntil(".hide_options_if_checked, .show_options_if_checked",".hidden_option").hide()}).change()});jQuery("input#woocommerce_demo_store").change(function(){jQuery(this).is(":checked")?jQuery("#woocommerce_demo_store_notice").closest("tr").show():jQuery("#woocommerce_demo_store_notice").closest("tr").hide()}).change()}); \ No newline at end of file + */jQuery(function(){jQuery(".wc_input_decimal[type=text], .wc_input_price[type=text]").bind("blur",function(){jQuery(".wc_error_tip").fadeOut("100",function(){jQuery(this).remove()});return this});jQuery(".wc_input_price[type=text]").bind("keyup change",function(){var e=jQuery(this).val(),t=new RegExp("[^0-9%.\\"+woocommerce_admin.mon_decimal_point+"]+","gi"),n=e.replace(t,"");if(e!==n){jQuery(this).val(n);if(jQuery(this).parent().find(".wc_error_tip").size()==0){var r=jQuery(this).position();jQuery(this).after('
'+woocommerce_admin.i18n_mon_decimal_error+"
");jQuery(".wc_error_tip").css("left",r.left+jQuery(this).width()-jQuery(this).width()/2-jQuery(".wc_error_tip").width()/2).css("top",r.top+jQuery(this).height()).fadeIn("100")}}return this});jQuery(".wc_input_decimal[type=text]").bind("keyup change",function(){var e=jQuery(this).val(),t=new RegExp("[^0-9%.\\"+woocommerce_admin.decimal_point+"]+","gi"),n=e.replace(t,"");if(e!==n){jQuery(this).val(n);if(jQuery(this).parent().find(".wc_error_tip").size()==0){var r=jQuery(this).position();jQuery(this).after('
'+woocommerce_admin.i18n_decimal_error+"
");jQuery(".wc_error_tip").css("left",r.left+jQuery(this).width()-jQuery(this).width()/2-jQuery(".wc_error_tip").width()/2).css("top",r.top+jQuery(this).height()).fadeIn("100")}}return this});jQuery("body").click(function(){jQuery(".wc_error_tip").fadeOut("100",function(){jQuery(this).remove()})});jQuery(".tips, .help_tip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200});jQuery(".wc_input_table.sortable tbody").sortable({items:"tr",cursor:"move",axis:"y",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",opacity:.65,placeholder:"wc-metabox-sortable-placeholder",start:function(e,t){t.item.css("background-color","#f6f6f6")},stop:function(e,t){t.item.removeAttr("style")}});jQuery(".wc_input_table .remove_rows").click(function(){var e=jQuery(this).closest(".wc_input_table").find("tbody");if(e.find("tr.current").size()>0){$current=e.find("tr.current");$current.each(function(){jQuery(this).remove()})}return!1});var e=!1,t=!1,n=!1;jQuery(document).bind("keyup keydown",function(n){t=n.shiftKey;e=n.ctrlKey||n.metaKey});jQuery(".wc_input_table").on("focus click","input",function(r){$this_table=jQuery(this).closest("table");$this_row=jQuery(this).closest("tr");if(r.type=="focus"&&n!=$this_row.index()||r.type=="click"&&jQuery(this).is(":focus")){n=$this_row.index();if(!t&&!e){jQuery("tr",$this_table).removeClass("current").removeClass("last_selected");$this_row.addClass("current").addClass("last_selected")}else if(t){jQuery("tr",$this_table).removeClass("current");$this_row.addClass("selected_now").addClass("current");jQuery("tr.last_selected",$this_table).size()>0&&($this_row.index()>jQuery("tr.last_selected, $this_table").index()?jQuery("tr",$this_table).slice(jQuery("tr.last_selected",$this_table).index(),$this_row.index()).addClass("current"):jQuery("tr",$this_table).slice($this_row.index(),jQuery("tr.last_selected",$this_table).index()+1).addClass("current"));jQuery("tr",$this_table).removeClass("last_selected");$this_row.addClass("last_selected")}else{jQuery("tr",$this_table).removeClass("last_selected");e&&jQuery(this).closest("tr").is(".current")?$this_row.removeClass("current"):$this_row.addClass("current").addClass("last_selected")}jQuery("tr",$this_table).removeClass("selected_now")}}).on("blur","input",function(e){n=!1});jQuery("select.availability").change(function(){jQuery(this).val()=="all"?jQuery(this).closest("tr").next("tr").hide():jQuery(this).closest("tr").next("tr").show()}).change();jQuery("body").on("click",".show_order_items",function(){jQuery(this).closest("td").find("table").toggle();return!1});jQuery(".hide_options_if_checked").each(function(){jQuery(this).find("input:eq(0)").change(function(){jQuery(this).is(":checked")?jQuery(this).closest("fieldset, tr").nextUntil(".hide_options_if_checked, .show_options_if_checked",".hidden_option").hide():jQuery(this).closest("fieldset, tr").nextUntil(".hide_options_if_checked, .show_options_if_checked",".hidden_option").show()}).change()});jQuery(".show_options_if_checked").each(function(){jQuery(this).find("input:eq(0)").change(function(){jQuery(this).is(":checked")?jQuery(this).closest("fieldset, tr").nextUntil(".hide_options_if_checked, .show_options_if_checked",".hidden_option").show():jQuery(this).closest("fieldset, tr").nextUntil(".hide_options_if_checked, .show_options_if_checked",".hidden_option").hide()}).change()});jQuery("input#woocommerce_demo_store").change(function(){jQuery(this).is(":checked")?jQuery("#woocommerce_demo_store_notice").closest("tr").show():jQuery("#woocommerce_demo_store_notice").closest("tr").hide()}).change()}); \ No newline at end of file diff --git a/includes/abstracts/abstract-wc-settings-api.php b/includes/abstracts/abstract-wc-settings-api.php index b5fe0e83b8b..a918f26c715 100644 --- a/includes/abstracts/abstract-wc-settings-api.php +++ b/includes/abstracts/abstract-wc-settings-api.php @@ -3,7 +3,7 @@ * Admin Settings API used by Shipping Methods and Payment Gateways * * @class WC_Settings_API - * @version 2.0.0 + * @version 2.1.0 * @package WooCommerce/Abstracts * @category Abstract Class * @author WooThemes @@ -45,7 +45,6 @@ abstract class WC_Settings_API { settings ) ) $this->init_settings(); @@ -150,7 +144,6 @@ abstract class WC_Settings_API { return $this->settings[ $key ]; } - /** * Decode values for settings. * @@ -159,10 +152,9 @@ abstract class WC_Settings_API { * @return array */ public function format_settings( $value ) { - return ( is_array( $value ) ) ? $value : $value; + return is_array( $value ) ? $value : $value; } - /** * Generate Settings HTML. * @@ -175,11 +167,9 @@ abstract class WC_Settings_API { * @access public * @return string the html for the settings */ - public function generate_settings_html ( $form_fields = false ) { - - if ( ! $form_fields ) { + public function generate_settings_html( $form_fields = false ) { + if ( ! $form_fields ) $form_fields = $this->form_fields; - } $html = ''; foreach ( $form_fields as $k => $v ) { @@ -196,6 +186,56 @@ abstract class WC_Settings_API { echo $html; } + /** + * Get HTML for tooltips + * @param array $data + * @return string + */ + public function get_tooltip_html( $data ) { + if ( $data['desc_tip'] === true ) { + $tip = $data['description']; + } elseif ( ! empty( $data['desc_tip'] ) ) { + $tip = $data['desc_tip']; + } else { + $tip = ''; + } + + return $tip ? '' : ''; + } + + /** + * Get HTML for descriptions + * @param array $data + * @return string + */ + public function get_description_html( $data ) { + if ( $data['desc_tip'] === true ) { + $description = ''; + } elseif ( ! empty( $data['desc_tip'] ) ) { + $description = $data['description']; + } elseif ( ! empty( $data['description'] ) ) { + $description = $data['description']; + } else { + $description = ''; + } + + return $description ? '

' . wp_kses_post( $description ) . '

' . "\n" : ''; + } + + /** + * Get custom attributes + * @param array $data + * @return string + */ + public function get_custom_attribute_html( $data ) { + $custom_attributes = array(); + + if ( ! empty( $data['custom_attributes'] ) && is_array( $data['custom_attributes'] ) ) + foreach ( $data['custom_attributes'] as $attribute => $attribute_value ) + $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; + + return implode( ' ', $custom_attributes ); + } /** * Generate Text Input HTML. @@ -207,60 +247,126 @@ abstract class WC_Settings_API { * @return string */ public function generate_text_html( $key, $data ) { - global $woocommerce; + $field = $this->plugin_id . $this->id . '_' . $key; + $defaults = array( + 'title' => '', + 'disabled' => false, + 'class' => '', + 'css' => '', + 'placeholder' => '', + 'type' => 'text', + 'desc_tip' => false, + 'description' => '', + 'custom_attributes' => array() + ); - $html = ''; + $data = wp_parse_args( $data, $defaults ); - $data['title'] = isset( $data['title'] ) ? $data['title'] : ''; - $data['disabled'] = empty( $data['disabled'] ) ? false : true; - $data['class'] = isset( $data['class'] ) ? $data['class'] : ''; - $data['css'] = isset( $data['css'] ) ? $data['css'] : ''; - $data['placeholder'] = isset( $data['placeholder'] ) ? $data['placeholder'] : ''; - $data['type'] = isset( $data['type'] ) ? $data['type'] : 'text'; - $data['desc_tip'] = isset( $data['desc_tip'] ) ? $data['desc_tip'] : false; - $data['description'] = isset( $data['description'] ) ? $data['description'] : ''; + ob_start(); + ?> + + + + get_tooltip_html( $data ); ?> + + +
+ + get_custom_attribute_html( $data ); ?> /> + get_description_html( $data ); ?> +
+ + + plugin_id . $this->id . '_' . $key; + $defaults = array( + 'title' => '', + 'disabled' => false, + 'class' => '', + 'css' => '', + 'placeholder' => '', + 'type' => 'text', + 'desc_tip' => false, + 'description' => '', + 'custom_attributes' => array() + ); - // Custom attribute handling - $custom_attributes = array(); + $data = wp_parse_args( $data, $defaults ); - if ( ! empty( $data['custom_attributes'] ) && is_array( $data['custom_attributes'] ) ) - foreach ( $data['custom_attributes'] as $attribute => $attribute_value ) - $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; + ob_start(); + ?> + + + + get_tooltip_html( $data ); ?> + + +
+ + get_custom_attribute_html( $data ); ?> /> + get_description_html( $data ); ?> +
+ + + ' . "\n"; - $html .= ''; - $html .= ''; + /** + * Generate Password Input HTML. + * + * @access public + * @param mixed $key + * @param mixed $data + * @since 1.0.0 + * @return string + */ + public function generate_decimal_html( $key, $data ) { + $field = $this->plugin_id . $this->id . '_' . $key; + $defaults = array( + 'title' => '', + 'disabled' => false, + 'class' => '', + 'css' => '', + 'placeholder' => '', + 'type' => 'text', + 'desc_tip' => false, + 'description' => '', + 'custom_attributes' => array() + ); - if ( $tip ) - $html .= ''; + $data = wp_parse_args( $data, $defaults ); - $html .= '' . "\n"; - $html .= '' . "\n"; - $html .= '
' . wp_kses_post( $data['title'] ) . '' . "\n"; - $html .= ''; - - if ( $description ) - $html .= '

' . wp_kses_post( $description ) . '

' . "\n"; - - $html .= '
'; - $html .= '' . "\n"; - $html .= '' . "\n"; - - return $html; + ob_start(); + ?> + + + + get_tooltip_html( $data ); ?> + + +
+ + get_custom_attribute_html( $data ); ?> /> + get_description_html( $data ); ?> +
+ + + $attribute_value ) - $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; - - $html .= '' . "\n"; - $html .= ''; - $html .= ''; - - if ( $tip ) - $html .= ''; - - $html .= '' . "\n"; - $html .= '' . "\n"; - $html .= '
' . wp_kses_post( $data['title'] ) . '' . "\n"; - $html .= ''; - - if ( $description ) - $html .= '

' . wp_kses_post( $description ) . '

' . "\n"; - - $html .= '
'; - $html .= '' . "\n"; - $html .= '' . "\n"; - - return $html; + $data['type'] = 'password'; + return $this->generate_text_html( $key, $data ); } /** @@ -337,59 +393,38 @@ abstract class WC_Settings_API { * @return string */ public function generate_textarea_html( $key, $data ) { - global $woocommerce; + $field = $this->plugin_id . $this->id . '_' . $key; + $defaults = array( + 'title' => '', + 'disabled' => false, + 'class' => '', + 'css' => '', + 'placeholder' => '', + 'type' => 'text', + 'desc_tip' => false, + 'description' => '', + 'custom_attributes' => array() + ); - $html = ''; + $data = wp_parse_args( $data, $defaults ); - $data['title'] = isset( $data['title'] ) ? $data['title'] : ''; - $data['disabled'] = empty( $data['disabled'] ) ? false : true; - $data['class'] = isset( $data['class'] ) ? $data['class'] : ''; - $data['css'] = isset( $data['css'] ) ? $data['css'] : ''; - $data['desc_tip'] = isset( $data['desc_tip'] ) ? $data['desc_tip'] : false; - $data['description'] = isset( $data['description'] ) ? $data['description'] : ''; - $data['placeholder'] = isset( $data['placeholder'] ) ? $data['placeholder'] : ''; - - // Description handling - if ( $data['desc_tip'] === true ) { - $description = ''; - $tip = $data['description']; - } elseif ( ! empty( $data['desc_tip'] ) ) { - $description = $data['description']; - $tip = $data['desc_tip']; - } elseif ( ! empty( $data['description'] ) ) { - $description = $data['description']; - $tip = ''; - } else { - $description = $tip = ''; - } - - // Custom attribute handling - $custom_attributes = array(); - - if ( ! empty( $data['custom_attributes'] ) && is_array( $data['custom_attributes'] ) ) - foreach ( $data['custom_attributes'] as $attribute => $attribute_value ) - $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; - - $html .= '' . "\n"; - $html .= ''; - $html .= ''; - - if ( $tip ) - $html .= ''; - - $html .= '' . "\n"; - $html .= '' . "\n"; - $html .= '
' . wp_kses_post( $data['title'] ) . '' . "\n"; - $html .= ''; - - if ( $description ) - $html .= '

' . wp_kses_post( $description ) . '

' . "\n"; - - $html .= '
'; - $html .= '' . "\n"; - $html .= '' . "\n"; - - return $html; + ob_start(); + ?> + + + + get_tooltip_html( $data ); ?> + + +
+ + + get_description_html( $data ); ?> +
+ + + plugin_id . $this->id . '_' . $key; + $defaults = array( + 'title' => '', + 'label' => '', + 'disabled' => false, + 'class' => '', + 'css' => '', + 'type' => 'text', + 'desc_tip' => false, + 'description' => '', + 'custom_attributes' => array() + ); - $html = ''; + $data = wp_parse_args( $data, $defaults ); - $data['title'] = isset( $data['title'] ) ? $data['title'] : ''; - $data['label'] = isset( $data['label'] ) ? $data['label'] : $data['title']; - $data['disabled'] = empty( $data['disabled'] ) ? false : true; - $data['class'] = isset( $data['class'] ) ? $data['class'] : ''; - $data['css'] = isset( $data['css'] ) ? $data['css'] : ''; - $data['desc_tip'] = isset( $data['desc_tip'] ) ? $data['desc_tip'] : false; - $data['description'] = isset( $data['description'] ) ? $data['description'] : ''; + if ( ! $data['label'] ) + $data['label'] = $data['title']; - // Description handling - if ( $data['desc_tip'] === true ) { - $description = ''; - $tip = $data['description']; - } elseif ( ! empty( $data['desc_tip'] ) ) { - $description = $data['description']; - $tip = $data['desc_tip']; - } elseif ( ! empty( $data['description'] ) ) { - $description = $data['description']; - $tip = ''; - } else { - $description = $tip = ''; - } - - // Custom attribute handling - $custom_attributes = array(); - - if ( ! empty( $data['custom_attributes'] ) && is_array( $data['custom_attributes'] ) ) - foreach ( $data['custom_attributes'] as $attribute => $attribute_value ) - $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; - - $html .= '' . "\n"; - $html .= '' . $data['title']; - - if ( $tip ) - $html .= ''; - - $html .= '' . "\n"; - $html .= '' . "\n"; - $html .= '
' . wp_kses_post( $data['title'] ) . '' . "\n"; - $html .= '
' . "\n"; - - if ( $description ) - $html .= '

' . wp_kses_post( $description ) . '

' . "\n"; - - $html .= '
'; - $html .= '' . "\n"; - $html .= '' . "\n"; - - return $html; + ob_start(); + ?> + + + + get_tooltip_html( $data ); ?> + + +
+ +
+ get_description_html( $data ); ?> +
+ + + plugin_id . $this->id . '_' . $key; + $defaults = array( + 'title' => '', + 'disabled' => false, + 'class' => '', + 'css' => '', + 'placeholder' => '', + 'type' => 'text', + 'desc_tip' => false, + 'description' => '', + 'custom_attributes' => array(), + 'options' => array() + ); - $html = ''; + $data = wp_parse_args( $data, $defaults ); - $data['title'] = isset( $data['title'] ) ? $data['title'] : ''; - $data['disabled'] = empty( $data['disabled'] ) ? false : true; - $data['options'] = isset( $data['options'] ) ? (array) $data['options'] : array(); - $data['class'] = isset( $data['class'] ) ? $data['class'] : ''; - $data['css'] = isset( $data['css'] ) ? $data['css'] : ''; - $data['desc_tip'] = isset( $data['desc_tip'] ) ? $data['desc_tip'] : false; - $data['description'] = isset( $data['description'] ) ? $data['description'] : ''; - - // Description handling - if ( $data['desc_tip'] === true ) { - $description = ''; - $tip = $data['description']; - } elseif ( ! empty( $data['desc_tip'] ) ) { - $description = $data['description']; - $tip = $data['desc_tip']; - } elseif ( ! empty( $data['description'] ) ) { - $description = $data['description']; - $tip = ''; - } else { - $description = $tip = ''; - } - - // Custom attribute handling - $custom_attributes = array(); - - if ( ! empty( $data['custom_attributes'] ) && is_array( $data['custom_attributes'] ) ) - foreach ( $data['custom_attributes'] as $attribute => $attribute_value ) - $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; - - $html .= '' . "\n"; - $html .= ''; - $html .= ''; - - if ( $tip ) - $html .= ''; - - $html .= '' . "\n"; - $html .= '' . "\n"; - $html .= '
' . wp_kses_post( $data['title'] ) . '' . "\n"; - $html .= ''; - - if ( $description ) - $html .= '

' . wp_kses_post( $description ) . '

' . "\n"; - - $html .= '
'; - $html .= '' . "\n"; - $html .= '' . "\n"; - - return $html; + ob_start(); + ?> + + + + get_tooltip_html( $data ); ?> + + +
+ + + get_description_html( $data ); ?> +
+ + + plugin_id . $this->id . '_' . $key; + $defaults = array( + 'title' => '', + 'disabled' => false, + 'class' => '', + 'placeholder' => '', + 'type' => 'text', + 'desc_tip' => false, + 'description' => '', + 'custom_attributes' => array(), + 'options' => array() + ); - $html = ''; + $data = wp_parse_args( $data, $defaults ); - $data['title'] = isset( $data['title'] ) ? $data['title'] : ''; - $data['disabled'] = empty( $data['disabled'] ) ? false : true; - $data['options'] = isset( $data['options'] ) ? (array) $data['options'] : array(); - $data['class'] = isset( $data['class'] ) ? $data['class'] : ''; - $data['css'] = isset( $data['css'] ) ? $data['css'] : ''; - $data['desc_tip'] = isset( $data['desc_tip'] ) ? $data['desc_tip'] : false; - $data['description'] = isset( $data['description'] ) ? $data['description'] : ''; - - // Description handling - if ( $data['desc_tip'] === true ) { - $description = ''; - $tip = $data['description']; - } elseif ( ! empty( $data['desc_tip'] ) ) { - $description = $data['description']; - $tip = $data['desc_tip']; - } elseif ( ! empty( $data['description'] ) ) { - $description = $data['description']; - $tip = ''; - } else { - $description = $tip = ''; - } - - // Custom attribute handling - $custom_attributes = array(); - - if ( ! empty( $data['custom_attributes'] ) && is_array( $data['custom_attributes'] ) ) - foreach ( $data['custom_attributes'] as $attribute => $attribute_value ) - $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; - - $html .= '' . "\n"; - $html .= ''; - $html .= ''; - - if ( $tip ) - $html .= ''; - - $html .= '' . "\n"; - $html .= '' . "\n"; - $html .= '
' . wp_kses_post( $data['title'] ) . '' . "\n"; - $html .= ''; - - if ( $description ) - $html .= '

' . wp_kses_post( $description ) . '

' . "\n"; - - $html .= '
'; - $html .= '' . "\n"; - $html .= '' . "\n"; - - return $html; + ob_start(); + ?> + + + + get_tooltip_html( $data ); ?> + + +
+ + + get_description_html( $data ); ?> +
+ + + '', + 'class' => '', + 'css' => '' + ); - $data['title'] = isset( $data['title'] ) ? $data['title'] : ''; - $data['class'] = isset( $data['class'] ) ? $data['class'] : ''; - $data['css'] = isset( $data['css'] ) ? $data['css'] : ''; + $data = wp_parse_args( $data, $defaults ); - $html .= '' . "\n"; - $html .= '

' . wp_kses_post( $data['title'] ) . '

' . "\n"; - if ( isset( $data['description'] ) && $data['description'] != '' ) { $html .= '

' . wp_kses_post( $data['description'] ) . '

' . "\n"; } - $html .= '' . "\n"; - - return $html; + ob_start(); + ?> +
+

+ +

+ + + form_fields; @@ -660,15 +636,9 @@ abstract class WC_Settings_API { $field = $this->{'validate_text_field'}( $k ); $this->sanitized_fields[ $k ] = $field; } - - // Format values - if ( isset( $v['class'] ) && strstr( $v['class'], 'wc_input_decimal' ) ) { - $this->sanitized_fields[ $k ] = ( $this->sanitized_fields[ $k ] === '' ) ? '' : woocommerce_format_decimal( $this->sanitized_fields[ $k ], false ); - } } } - /** * Validate Checkbox Field. * @@ -691,23 +661,55 @@ abstract class WC_Settings_API { /** * Validate Text Field. * - * Make sure the data is escaped correctly, etc. - * - * @access public * @param mixed $key - * @since 1.0.0 * @return string */ public function validate_text_field( $key ) { $text = $this->get_option( $key ); - if ( isset( $_POST[ $this->plugin_id . $this->id . '_' . $key ] ) ) { + if ( isset( $_POST[ $this->plugin_id . $this->id . '_' . $key ] ) ) $text = wp_kses_post( trim( stripslashes( $_POST[ $this->plugin_id . $this->id . '_' . $key ] ) ) ); - } return $text; } + /** + * Validate Price Field. + * + * @param mixed $key + * @return string + */ + public function validate_price_field( $key ) { + $text = $this->get_option( $key ); + + if ( isset( $_POST[ $this->plugin_id . $this->id . '_' . $key ] ) ) { + if ( $_POST[ $this->plugin_id . $this->id . '_' . $key ] !== '' ) + $text = woocommerce_format_decimal( trim( stripslashes( $_POST[ $this->plugin_id . $this->id . '_' . $key ] ) ) ); + else + $text = ''; + } + + return $text; + } + + /** + * Validate Price Field. + * + * @param mixed $key + * @return string + */ + public function validate_decimal_field( $key ) { + $text = $this->get_option( $key ); + + if ( isset( $_POST[ $this->plugin_id . $this->id . '_' . $key ] ) ) { + if ( $_POST[ $this->plugin_id . $this->id . '_' . $key ] !== '' ) + $text = woocommerce_format_decimal( trim( stripslashes( $_POST[ $this->plugin_id . $this->id . '_' . $key ] ) ) ); + else + $text = ''; + } + + return $text; + } /** * Validate Password Field. @@ -729,7 +731,6 @@ abstract class WC_Settings_API { return $text; } - /** * Validate Textarea Field. * @@ -757,7 +758,6 @@ abstract class WC_Settings_API { return $text; } - /** * Validate Select Field. * @@ -799,5 +799,4 @@ abstract class WC_Settings_API { return $value; } - } \ No newline at end of file diff --git a/includes/admin/class-wc-admin-assets.php b/includes/admin/class-wc-admin-assets.php index 8e451d17c7f..dd3c664bb59 100644 --- a/includes/admin/class-wc-admin-assets.php +++ b/includes/admin/class-wc-admin-assets.php @@ -84,7 +84,14 @@ class WC_Admin_Assets { wp_register_script( 'chosen', $woocommerce->plugin_url() . '/assets/js/chosen/chosen.jquery' . $suffix . '.js', array('jquery'), $woocommerce->version ); - // WooCommerce admin pages + // Accounting + $params = array( + 'mon_decimal_point' => get_option( 'woocommerce_price_decimal_sep' ) + ); + + wp_localize_script( 'accounting', 'accounting_params', $params ); + + // WooCommerce admin pages if ( in_array( $screen->id, wc_get_screen_ids() ) ) { wp_enqueue_script( 'woocommerce_admin' ); @@ -94,11 +101,14 @@ class WC_Admin_Assets { wp_enqueue_script( 'jquery-ui-sortable' ); wp_enqueue_script( 'jquery-ui-autocomplete' ); - $locale = localeconv(); + $locale = localeconv(); + $decimal = isset( $locale['decimal_point'] ) ? $locale['decimal_point'] : '.'; $params = array( - 'i18n_decimal_input_error' => __( 'Please enter in decimal format without thousand separators and currency symbols.', 'woocommerce' ), - 'locale_decimal_point' => isset( $locale['decimal_point'] ) ? $locale['decimal_point'] : '.' + 'i18n_decimal_error' => sprintf( __( 'Please enter in decimal (%s) format without thousand separators.', 'woocommerce' ), $decimal ), + 'i18n_mon_decimal_error' => sprintf( __( 'Please enter in monitary decimal (%s) format without thousand separators and currency symbols.', 'woocommerce' ), get_option( 'woocommerce_price_decimal_sep' ) ), + 'decimal_point' => $decimal, + 'mon_decimal_point' => get_option( 'woocommerce_price_decimal_sep' ) ); wp_localize_script( 'woocommerce_admin', 'woocommerce_admin', $params ); diff --git a/includes/admin/importers/class-wc-tax-rate-importer.php b/includes/admin/importers/class-wc-tax-rate-importer.php index 842a0b73a0e..57af1bdb374 100644 --- a/includes/admin/importers/class-wc-tax-rate-importer.php +++ b/includes/admin/importers/class-wc-tax-rate-importer.php @@ -137,7 +137,7 @@ if ( class_exists( 'WP_Importer' ) ) { array( 'tax_rate_country' => $country, 'tax_rate_state' => $state, - 'tax_rate' => number_format( $rate, 4, '.', '' ), + 'tax_rate' => woocommerce_format_decimal( $rate, 4 ), 'tax_rate_name' => trim( $name ), 'tax_rate_priority' => absint( $priority ), 'tax_rate_compound' => $compound ? 1 : 0, diff --git a/includes/admin/post-types/class-wc-admin-cpt-product.php b/includes/admin/post-types/class-wc-admin-cpt-product.php index 14645c63f03..d2aecb67153 100644 --- a/includes/admin/post-types/class-wc-admin-cpt-product.php +++ b/includes/admin/post-types/class-wc-admin-cpt-product.php @@ -812,7 +812,7 @@ class WC_Admin_CPT_Product extends WC_Admin_CPT { if ( isset( $new_price ) && $new_price != $old_regular_price ) { $price_changed = true; - $new_price = number_format( $new_price, absint( get_option( 'woocommerce_price_num_decimals' ) ), '.', '' ); + $new_price = round( $new_price, absint( get_option( 'woocommerce_price_num_decimals' ) ) ); update_post_meta( $post_id, '_regular_price', $new_price ); $product->regular_price = $new_price; } @@ -855,7 +855,7 @@ class WC_Admin_CPT_Product extends WC_Admin_CPT { if ( isset( $new_price ) && $new_price != $old_sale_price ) { $price_changed = true; - $new_price = number_format( $new_price, absint( get_option( 'woocommerce_price_num_decimals' ) ), '.', '' ); + $new_price = round( $new_price, absint( get_option( 'woocommerce_price_num_decimals' ) ) ); update_post_meta( $post_id, '_sale_price', $new_price ); $product->sale_price = $new_price; } diff --git a/includes/admin/post-types/meta-boxes/class-wc-meta-box-coupon-data.php b/includes/admin/post-types/meta-boxes/class-wc-meta-box-coupon-data.php index 1381e82136a..8da12511463 100644 --- a/includes/admin/post-types/meta-boxes/class-wc-meta-box-coupon-data.php +++ b/includes/admin/post-types/meta-boxes/class-wc-meta-box-coupon-data.php @@ -63,7 +63,7 @@ class WC_Meta_Box_Coupon_Data { woocommerce_wp_select( array( 'id' => 'discount_type', 'label' => __( 'Discount type', 'woocommerce' ), 'options' => wc_get_coupon_types() ) ); // Amount - woocommerce_wp_text_input( array( 'id' => 'coupon_amount', 'label' => __( 'Coupon amount', 'woocommerce' ), 'placeholder' => '0.00', 'description' => __( 'Value of the coupon.', 'woocommerce' ), 'class' => 'wc_input_decimal', 'desc_tip' => true ) ); + woocommerce_wp_text_input( array( 'id' => 'coupon_amount', 'label' => __( 'Coupon amount', 'woocommerce' ), 'placeholder' => wc_format_localized_price( 0 ), 'description' => __( 'Value of the coupon.', 'woocommerce' ), 'data_type' => 'price', 'desc_tip' => true ) ); // Free Shipping woocommerce_wp_checkbox( array( 'id' => 'free_shipping', 'label' => __( 'Allow free shipping', 'woocommerce' ), 'description' => sprintf(__( 'Check this box if the coupon grants free shipping. The free shipping method must be enabled with the "must use coupon" setting.', 'woocommerce' ), admin_url('admin.php?page=wc-settings&tab=shipping§ion=WC_Shipping_Free_Shipping')) ) ); @@ -82,7 +82,7 @@ class WC_Meta_Box_Coupon_Data { echo '
'; // minimum spend - woocommerce_wp_text_input( array( 'id' => 'minimum_amount', 'label' => __( 'Minimum spend', 'woocommerce' ), 'placeholder' => __( 'No minimum', 'woocommerce' ), 'description' => __( 'This field allows you to set the minimum subtotal needed to use the coupon.', 'woocommerce' ), 'class' => 'wc_input_decimal', 'desc_tip' => true ) ); + woocommerce_wp_text_input( array( 'id' => 'minimum_amount', 'label' => __( 'Minimum spend', 'woocommerce' ), 'placeholder' => __( 'No minimum', 'woocommerce' ), 'description' => __( 'This field allows you to set the minimum subtotal needed to use the coupon.', 'woocommerce' ), 'data_type' => 'price', 'desc_tip' => true ) ); // Individual use woocommerce_wp_checkbox( array( 'id' => 'individual_use', 'label' => __( 'Individual use only', 'woocommerce' ), 'description' => __( 'Check this box if the coupon cannot be used in conjunction with other coupons.', 'woocommerce' ) ) ); @@ -225,7 +225,7 @@ class WC_Meta_Box_Coupon_Data { // Add/Replace data to array $type = woocommerce_clean( $_POST['discount_type'] ); - $amount = woocommerce_format_decimal( $_POST['coupon_amount'], false ); + $amount = woocommerce_format_decimal( $_POST['coupon_amount'] ); $usage_limit = empty( $_POST['usage_limit'] ) ? '' : absint( $_POST['usage_limit'] ); $usage_limit_per_user = empty( $_POST['usage_limit_per_user'] ) ? '' : absint( $_POST['usage_limit_per_user'] ); $limit_usage_to_x_items = empty( $_POST['limit_usage_to_x_items'] ) ? '' : absint( $_POST['limit_usage_to_x_items'] ); @@ -234,7 +234,7 @@ class WC_Meta_Box_Coupon_Data { $apply_before_tax = isset( $_POST['apply_before_tax'] ) ? 'yes' : 'no'; $free_shipping = isset( $_POST['free_shipping'] ) ? 'yes' : 'no'; $exclude_sale_items = isset( $_POST['exclude_sale_items'] ) ? 'yes' : 'no'; - $minimum_amount = woocommerce_format_decimal( $_POST['minimum_amount'], false ); + $minimum_amount = woocommerce_format_decimal( $_POST['minimum_amount'] ); $customer_email = array_filter( array_map( 'trim', explode( ',', woocommerce_clean( $_POST['customer_email'] ) ) ) ); if ( isset( $_POST['product_ids'] ) ) { diff --git a/includes/admin/post-types/meta-boxes/class-wc-meta-box-order-items.php b/includes/admin/post-types/meta-boxes/class-wc-meta-box-order-items.php index 71fc7876006..84e047a3263 100644 --- a/includes/admin/post-types/meta-boxes/class-wc-meta-box-order-items.php +++ b/includes/admin/post-types/meta-boxes/class-wc-meta-box-order-items.php @@ -138,27 +138,27 @@ class WC_Meta_Box_Order_Items { woocommerce_update_order_item_meta( $item_id, '_tax_class', woocommerce_clean( $order_item_tax_class[ $item_id ] ) ); if ( isset( $line_subtotal[ $item_id ] ) ) { - woocommerce_update_order_item_meta( $item_id, '_line_subtotal', woocommerce_format_decimal( $line_subtotal[ $item_id ], false ) ); + woocommerce_update_order_item_meta( $item_id, '_line_subtotal', woocommerce_format_decimal( $line_subtotal[ $item_id ] ) ); - $subtotal += woocommerce_clean( $line_subtotal[ $item_id ] ); + $subtotal += woocommerce_format_decimal( $line_subtotal[ $item_id ] ); } if ( isset( $line_subtotal_tax[ $item_id ] ) ) { - woocommerce_update_order_item_meta( $item_id, '_line_subtotal_tax', woocommerce_format_decimal( $line_subtotal_tax[ $item_id ], false ) ); + woocommerce_update_order_item_meta( $item_id, '_line_subtotal_tax', woocommerce_format_decimal( $line_subtotal_tax[ $item_id ] ) ); - $subtotal += woocommerce_clean( $line_subtotal_tax[ $item_id ] ); + $subtotal += woocommerce_format_decimal( $line_subtotal_tax[ $item_id ] ); } if ( isset( $line_total[ $item_id ] ) ) { - woocommerce_update_order_item_meta( $item_id, '_line_total', woocommerce_format_decimal( $line_total[ $item_id ], false ) ); + woocommerce_update_order_item_meta( $item_id, '_line_total', woocommerce_format_decimal( $line_total[ $item_id ] ) ); - $total += woocommerce_clean( $line_total[ $item_id ] ); + $total += woocommerce_format_decimal( $line_total[ $item_id ] ); } if ( isset( $line_tax[ $item_id ] ) ) { - woocommerce_update_order_item_meta( $item_id, '_line_tax', woocommerce_format_decimal( $line_tax[ $item_id ], false ) ); + woocommerce_update_order_item_meta( $item_id, '_line_tax', woocommerce_format_decimal( $line_tax[ $item_id ] ) ); - $total += woocommerce_clean( $line_tax[ $item_id ] ); + $total += woocommerce_format_decimal( $line_tax[ $item_id ] ); } // Clear meta cache @@ -186,6 +186,6 @@ class WC_Meta_Box_Order_Items { } // Update cart discount from item totals - update_post_meta( $post_id, '_cart_discount', woocommerce_format_decimal( $subtotal - $total, false ) ); + update_post_meta( $post_id, '_cart_discount', $subtotal - $total ); } } \ No newline at end of file diff --git a/includes/admin/post-types/meta-boxes/class-wc-meta-box-order-totals.php b/includes/admin/post-types/meta-boxes/class-wc-meta-box-order-totals.php index 9ddbb9f2535..6b82481597e 100644 --- a/includes/admin/post-types/meta-boxes/class-wc-meta-box-order-totals.php +++ b/includes/admin/post-types/meta-boxes/class-wc-meta-box-order-totals.php @@ -111,16 +111,16 @@ class WC_Meta_Box_Order_Totals {

-

-
$new_value ) { $method_id = woocommerce_clean( $shipping_method[ $item_id ][ $new_key ] ); $method_title = woocommerce_clean( $shipping_method_title[ $item_id ][ $new_key ] ); - $cost = woocommerce_format_decimal( $shipping_cost[ $item_id ][ $new_key ], false ); + $cost = woocommerce_format_decimal( $shipping_cost[ $item_id ][ $new_key ] ); $new_id = woocommerce_add_order_item( $post_id, array( 'order_item_name' => $method_title, @@ -311,7 +311,7 @@ class WC_Meta_Box_Order_Totals { $item_id = absint( $item_id ); $method_id = woocommerce_clean( $shipping_method[ $item_id ] ); $method_title = woocommerce_clean( $shipping_method_title[ $item_id ] ); - $cost = woocommerce_format_decimal( $shipping_cost[ $item_id ], false ); + $cost = woocommerce_format_decimal( $shipping_cost[ $item_id ] ); $wpdb->update( $wpdb->prefix . "woocommerce_order_items", @@ -339,6 +339,6 @@ class WC_Meta_Box_Order_Totals { delete_post_meta( $post_id, '_shipping_method' ); delete_post_meta( $post_id, '_shipping_method_title' ); - update_post_meta( $post_id, '_order_shipping', woocommerce_format_decimal( $order_shipping, false ) ); + update_post_meta( $post_id, '_order_shipping', $order_shipping ); } } \ No newline at end of file diff --git a/includes/admin/post-types/meta-boxes/class-wc-meta-box-product-data.php b/includes/admin/post-types/meta-boxes/class-wc-meta-box-product-data.php index b89bb2223b0..ad58f419abb 100644 --- a/includes/admin/post-types/meta-boxes/class-wc-meta-box-product-data.php +++ b/includes/admin/post-types/meta-boxes/class-wc-meta-box-product-data.php @@ -153,10 +153,10 @@ class WC_Meta_Box_Product_Data { echo '
'; // Price - woocommerce_wp_text_input( array( 'id' => '_regular_price', 'class' => 'wc_input_decimal short', 'label' => __( 'Regular Price', 'woocommerce' ) . ' ('.get_woocommerce_currency_symbol().')' ) ); + woocommerce_wp_text_input( array( 'id' => '_regular_price', 'label' => __( 'Regular Price', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')', 'data_type' => 'price' ) ); // Special Price - woocommerce_wp_text_input( array( 'id' => '_sale_price', 'class' => 'wc_input_decimal short', 'label' => __( 'Sale Price', 'woocommerce' ) . ' ('.get_woocommerce_currency_symbol().')', 'description' => '' . __( 'Schedule', 'woocommerce' ) . '' ) ); + woocommerce_wp_text_input( array( 'id' => '_sale_price', 'data_type' => 'price', 'label' => __( 'Sale Price', 'woocommerce' ) . ' ('.get_woocommerce_currency_symbol().')', 'description' => '' . __( 'Schedule', 'woocommerce' ) . '' ) ); // Special Price date range $sale_price_dates_from = ( $date = get_post_meta( $thepostid, '_sale_price_dates_from', true ) ) ? date_i18n( 'Y-m-d', $date ) : ''; @@ -340,16 +340,16 @@ class WC_Meta_Box_Product_Data { // Weight if ( wc_product_weight_enabled() ) - woocommerce_wp_text_input( array( 'id' => '_weight', 'label' => __( 'Weight', 'woocommerce' ) . ' ('.get_option('woocommerce_weight_unit').')', 'placeholder' => '0.00', 'description' => __( 'Weight in decimal form', 'woocommerce' ), 'type' => 'text', 'class' => 'wc_input_decimal short' ) ); + woocommerce_wp_text_input( array( 'id' => '_weight', 'label' => __( 'Weight', 'woocommerce' ) . ' (' . get_option('woocommerce_weight_unit') . ')', 'placeholder' => wc_format_localized_decimal( 0 ), 'description' => __( 'Weight in decimal form', 'woocommerce' ), 'type' => 'text', 'data_type' => 'decimal' ) ); // Size fields if ( wc_product_dimensions_enabled() ) { ?>

- - - + + +

$attributes, 'tax_class_options' => $tax_class_options, 'sku' => get_post_meta( $post->ID, '_sku', true ), - 'weight' => get_post_meta( $post->ID, '_weight', true ), - 'length' => get_post_meta( $post->ID, '_length', true ), - 'width' => get_post_meta( $post->ID, '_width', true ), - 'height' => get_post_meta( $post->ID, '_height', true ), + 'weight' => wc_format_localized_decimal( get_post_meta( $post->ID, '_weight', true ) ), + 'length' => wc_format_localized_decimal( get_post_meta( $post->ID, '_length', true ) ), + 'width' => wc_format_localized_decimal( get_post_meta( $post->ID, '_width', true ) ), + 'height' => wc_format_localized_decimal( get_post_meta( $post->ID, '_height', true ) ), 'tax_class' => get_post_meta( $post->ID, '_tax_class', true ) ); if ( ! $parent_data['weight'] ) - $parent_data['weight'] = '0.00'; + $parent_data['weight'] = wc_format_localized_decimal( 0 ); if ( ! $parent_data['length'] ) - $parent_data['length'] = '0'; + $parent_data['length'] = wc_format_localized_decimal( 0 ); if ( ! $parent_data['width'] ) - $parent_data['width'] = '0'; + $parent_data['width'] = wc_format_localized_decimal( 0 ); if ( ! $parent_data['height'] ) - $parent_data['height'] = '0'; + $parent_data['height'] = wc_format_localized_decimal( 0 ); // Get variations $args = array( @@ -827,7 +827,6 @@ class WC_Meta_Box_Product_Data { $variation_fields = array( '_sku', '_stock', - '_price', '_regular_price', '_sale_price', '_weight', @@ -847,18 +846,17 @@ class WC_Meta_Box_Product_Data { foreach ( $variation_fields as $field ) $$field = isset( $variation_data[ $field ][0] ) ? maybe_unserialize( $variation_data[ $field ][0] ) : ''; - // Tax class handling $_tax_class = isset( $variation_data['_tax_class'][0] ) ? $variation_data['_tax_class'][0] : null; - - // Price backwards compat - if ( $_regular_price == '' && $_price ) - $_regular_price = $_price; - - // Get image - $image = ''; - $image_id = absint( $_thumbnail_id ); - if ( $image_id ) - $image = wp_get_attachment_thumb_url( $image_id ); + $image_id = absint( $_thumbnail_id ); + $image = $image_id ? wp_get_attachment_thumb_url( $image_id ) : ''; + + // Locale formatting + $_regular_price = wc_format_localized_price( $_regular_price ); + $_sale_price = wc_format_localized_price( $_sale_price ); + $_weight = wc_format_localized_decimal( $_weight ); + $_length = wc_format_localized_decimal( $_length ); + $_width = wc_format_localized_decimal( $_width ); + $_height = wc_format_localized_decimal( $_height ); include( 'views/html-variation-admin.php' ); @@ -936,9 +934,9 @@ class WC_Meta_Box_Product_Data { // Update post meta if ( isset( $_POST['_regular_price'] ) ) - update_post_meta( $post_id, '_regular_price', ( $_POST['_regular_price'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_regular_price'], false ) ); + update_post_meta( $post_id, '_regular_price', ( $_POST['_regular_price'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_regular_price'] ) ); if ( isset( $_POST['_sale_price'] ) ) - update_post_meta( $post_id, '_sale_price', ( $_POST['_sale_price'] === '' ? '' : woocommerce_format_decimal( $_POST['_sale_price'], false ) ) ); + update_post_meta( $post_id, '_sale_price', ( $_POST['_sale_price'] === '' ? '' : woocommerce_format_decimal( $_POST['_sale_price'] ) ) ); if ( isset( $_POST['_tax_status'] ) ) update_post_meta( $post_id, '_tax_status', stripslashes( $_POST['_tax_status'] ) ); if ( isset( $_POST['_tax_class'] ) ) update_post_meta( $post_id, '_tax_class', stripslashes( $_POST['_tax_class'] ) ); if ( isset( $_POST['_visibility'] ) ) update_post_meta( $post_id, '_visibility', stripslashes( $_POST['_visibility'] ) ); @@ -949,16 +947,16 @@ class WC_Meta_Box_Product_Data { if ( $is_virtual == 'no' ) { if ( isset( $_POST['_weight'] ) ) - update_post_meta( $post_id, '_weight', ( $_POST['_weight'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_weight'], false ) ); + update_post_meta( $post_id, '_weight', ( $_POST['_weight'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_weight'] ) ); if ( isset( $_POST['_length'] ) ) - update_post_meta( $post_id, '_length', ( $_POST['_length'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_length'], false ) ); + update_post_meta( $post_id, '_length', ( $_POST['_length'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_length'] ) ); if ( isset( $_POST['_width'] ) ) - update_post_meta( $post_id, '_width', ( $_POST['_width'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_width'], false ) ); + update_post_meta( $post_id, '_width', ( $_POST['_width'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_width'] ) ); if ( isset( $_POST['_height'] ) ) - update_post_meta( $post_id, '_height', ( $_POST['_height'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_height'], false ) ); + update_post_meta( $post_id, '_height', ( $_POST['_height'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_height'] ) ); } else { update_post_meta( $post_id, '_weight', '' ); @@ -1122,17 +1120,17 @@ class WC_Meta_Box_Product_Data { // Update price if on sale if ( $_POST['_sale_price'] !== '' && $date_to == '' && $date_from == '' ) - update_post_meta( $post_id, '_price', woocommerce_format_decimal( $_POST['_sale_price'], false ) ); + update_post_meta( $post_id, '_price', woocommerce_format_decimal( $_POST['_sale_price'] ) ); else - update_post_meta( $post_id, '_price', ( $_POST['_regular_price'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_regular_price'], false ) ); + update_post_meta( $post_id, '_price', ( $_POST['_regular_price'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_regular_price'] ) ); if ( $_POST['_sale_price'] !== '' && $date_from && strtotime( $date_from ) < strtotime( 'NOW', current_time( 'timestamp' ) ) ) - update_post_meta( $post_id, '_price', woocommerce_format_decimal( $_POST['_sale_price'], false ) ); + update_post_meta( $post_id, '_price', woocommerce_format_decimal( $_POST['_sale_price'] ) ); if ( $date_to && strtotime( $date_to ) < strtotime( 'NOW', current_time( 'timestamp' ) ) ) { - update_post_meta( $post_id, '_price', ( $_POST['_regular_price'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_regular_price'], false ) ); - update_post_meta( $post_id, '_sale_price_dates_from', ''); - update_post_meta( $post_id, '_sale_price_dates_to', ''); + update_post_meta( $post_id, '_price', ( $_POST['_regular_price'] === '' ) ? '' : woocommerce_format_decimal( $_POST['_regular_price'] ) ); + update_post_meta( $post_id, '_sale_price_dates_from', '' ); + update_post_meta( $post_id, '_sale_price_dates_to', '' ); } } @@ -1392,21 +1390,21 @@ class WC_Meta_Box_Product_Data { update_post_meta( $variation_id, '_downloadable', woocommerce_clean( $is_downloadable ) ); if ( isset( $variable_weight[ $i ] ) ) - update_post_meta( $variation_id, '_weight', ( $variable_weight[ $i ] === '' ) ? '' : woocommerce_format_decimal( $variable_weight[ $i ], false ) ); + update_post_meta( $variation_id, '_weight', ( $variable_weight[ $i ] === '' ) ? '' : woocommerce_format_decimal( $variable_weight[ $i ] ) ); if ( isset( $variable_length[ $i ] ) ) - update_post_meta( $variation_id, '_length', ( $variable_length[ $i ] === '' ) ? '' : woocommerce_format_decimal( $variable_length[ $i ], false ) ); + update_post_meta( $variation_id, '_length', ( $variable_length[ $i ] === '' ) ? '' : woocommerce_format_decimal( $variable_length[ $i ] ) ); if ( isset( $variable_width[ $i ] ) ) - update_post_meta( $variation_id, '_width', ( $variable_width[ $i ] === '' ) ? '' : woocommerce_format_decimal( $variable_width[ $i ], false ) ); + update_post_meta( $variation_id, '_width', ( $variable_width[ $i ] === '' ) ? '' : woocommerce_format_decimal( $variable_width[ $i ] ) ); if ( isset( $variable_height[ $i ] ) ) - update_post_meta( $variation_id, '_height', ( $variable_height[ $i ] === '' ) ? '' : woocommerce_format_decimal( $variable_height[ $i ], false ) ); + update_post_meta( $variation_id, '_height', ( $variable_height[ $i ] === '' ) ? '' : woocommerce_format_decimal( $variable_height[ $i ] ) ); // Stock handling if ( isset($variable_stock[$i]) ) wc_update_product_stock( $variation_id, woocommerce_clean( $variable_stock[ $i ] ) ); // Price handling - $regular_price = woocommerce_format_decimal( $variable_regular_price[ $i ], false ); - $sale_price = ( $variable_sale_price[ $i ] === '' ? '' : woocommerce_format_decimal( $variable_sale_price[ $i ], false ) ); + $regular_price = woocommerce_format_decimal( $variable_regular_price[ $i ] ); + $sale_price = ( $variable_sale_price[ $i ] === '' ? '' : woocommerce_format_decimal( $variable_sale_price[ $i ] ) ); $date_from = woocommerce_clean( $variable_sale_price_dates_from[ $i ] ); $date_to = woocommerce_clean( $variable_sale_price_dates_to[ $i ] ); diff --git a/includes/admin/post-types/meta-boxes/views/html-order-fee.php b/includes/admin/post-types/meta-boxes/views/html-order-fee.php index 293b8e6a2de..338bcb63558 100644 --- a/includes/admin/post-types/meta-boxes/views/html-order-fee.php +++ b/includes/admin/post-types/meta-boxes/views/html-order-fee.php @@ -59,7 +59,7 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
@@ -70,7 +70,7 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
diff --git a/includes/admin/post-types/meta-boxes/views/html-order-item.php b/includes/admin/post-types/meta-boxes/views/html-order-item.php index ad45e52e0d6..2731919a883 100644 --- a/includes/admin/post-types/meta-boxes/views/html-order-item.php +++ b/includes/admin/post-types/meta-boxes/views/html-order-item.php @@ -166,9 +166,9 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?> @@ -185,9 +185,9 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?> diff --git a/includes/admin/post-types/meta-boxes/views/html-order-shipping.php b/includes/admin/post-types/meta-boxes/views/html-order-shipping.php index f91efc34a24..7e29a7c1e81 100644 --- a/includes/admin/post-types/meta-boxes/views/html-order-shipping.php +++ b/includes/admin/post-types/meta-boxes/views/html-order-shipping.php @@ -36,7 +36,7 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

- +

×
diff --git a/includes/admin/post-types/meta-boxes/views/html-order-tax.php b/includes/admin/post-types/meta-boxes/views/html-order-tax.php index 1a64272fd9b..f2083312460 100644 --- a/includes/admin/post-types/meta-boxes/views/html-order-tax.php +++ b/includes/admin/post-types/meta-boxes/views/html-order-tax.php @@ -15,11 +15,11 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

- +

- +

×
diff --git a/includes/admin/post-types/meta-boxes/views/html-variation-admin.php b/includes/admin/post-types/meta-boxes/views/html-variation-admin.php index 37b08635cdd..f8cd7f83ebe 100644 --- a/includes/admin/post-types/meta-boxes/views/html-variation-admin.php +++ b/includes/admin/post-types/meta-boxes/views/html-variation-admin.php @@ -70,11 +70,11 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly diff --git a/includes/admin/wc-meta-box-functions.php b/includes/admin/wc-meta-box-functions.php index dafb7eb2f1e..c9b97c6b2a8 100644 --- a/includes/admin/wc-meta-box-functions.php +++ b/includes/admin/wc-meta-box-functions.php @@ -20,13 +20,25 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly function woocommerce_wp_text_input( $field ) { global $thepostid, $post, $woocommerce; - $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; - $field['placeholder'] = isset( $field['placeholder'] ) ? $field['placeholder'] : ''; - $field['class'] = isset( $field['class'] ) ? $field['class'] : 'short'; + $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; + $field['placeholder'] = isset( $field['placeholder'] ) ? $field['placeholder'] : ''; + $field['class'] = isset( $field['class'] ) ? $field['class'] : 'short'; $field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : ''; - $field['value'] = isset( $field['value'] ) ? $field['value'] : get_post_meta( $thepostid, $field['id'], true ); - $field['name'] = isset( $field['name'] ) ? $field['name'] : $field['id']; - $field['type'] = isset( $field['type'] ) ? $field['type'] : 'text'; + $field['value'] = isset( $field['value'] ) ? $field['value'] : get_post_meta( $thepostid, $field['id'], true ); + $field['name'] = isset( $field['name'] ) ? $field['name'] : $field['id']; + $field['type'] = isset( $field['type'] ) ? $field['type'] : 'text'; + $data_type = empty( $field['data_type'] ) ? '' : $field['data_type']; + + switch ( $data_type ) { + case 'price' : + $field['class'] .= ' wc_input_price'; + $field['value'] = wc_format_localized_price( $field['value'] ); + break; + case 'decimal' : + $field['class'] .= ' wc_input_decimal'; + $field['value'] = wc_format_localized_decimal( $field['value'] ); + break; + } // Custom attribute handling $custom_attributes = array(); diff --git a/includes/class-wc-cart.php b/includes/class-wc-cart.php index 6396a52c4e0..2d009b3c34c 100644 --- a/includes/class-wc-cart.php +++ b/includes/class-wc-cart.php @@ -1153,7 +1153,7 @@ class WC_Cart { do_action( 'woocommerce_calculate_totals', $this ); // Grand Total - Discounted product prices, discounted tax, shipping cost + tax, and any discounts to be added after tax (e.g. store credit) - $this->total = max( 0, apply_filters( 'woocommerce_calculated_total', number_format( $this->cart_contents_total + $this->tax_total + $this->shipping_tax_total + $this->shipping_total - $this->discount_total + $this->fee_total, $this->dp, '.', '' ), $this ) ); + $this->total = max( 0, apply_filters( 'woocommerce_calculated_total', round( $this->cart_contents_total + $this->tax_total + $this->shipping_tax_total + $this->shipping_total - $this->discount_total + $this->fee_total, $this->dp ), $this ) ); } else { @@ -1648,7 +1648,7 @@ class WC_Cart { * @access public */ public function apply_cart_discounts_after_tax() { - $pre_discount_total = number_format( $this->cart_contents_total + $this->tax_total + $this->shipping_tax_total + $this->shipping_total + $this->fee_total, $this->dp, '.', '' ); + $pre_discount_total = round( $this->cart_contents_total + $this->tax_total + $this->shipping_tax_total + $this->shipping_total + $this->fee_total, $this->dp ); if ( $this->applied_coupons ) { foreach ( $this->applied_coupons as $code ) { diff --git a/includes/class-wc-checkout.php b/includes/class-wc-checkout.php index 5775abbf626..a52d59359d1 100644 --- a/includes/class-wc-checkout.php +++ b/includes/class-wc-checkout.php @@ -269,10 +269,10 @@ class WC_Checkout { woocommerce_add_order_item_meta( $item_id, '_tax_class', $_product->get_tax_class() ); woocommerce_add_order_item_meta( $item_id, '_product_id', $values['product_id'] ); woocommerce_add_order_item_meta( $item_id, '_variation_id', $values['variation_id'] ); - woocommerce_add_order_item_meta( $item_id, '_line_subtotal', woocommerce_format_decimal( $values['line_subtotal'], false ) ); - woocommerce_add_order_item_meta( $item_id, '_line_total', woocommerce_format_decimal( $values['line_total'], false ) ); - woocommerce_add_order_item_meta( $item_id, '_line_tax', woocommerce_format_decimal( $values['line_tax'], false ) ); - woocommerce_add_order_item_meta( $item_id, '_line_subtotal_tax', woocommerce_format_decimal( $values['line_subtotal_tax'], false ) ); + woocommerce_add_order_item_meta( $item_id, '_line_subtotal', woocommerce_format_decimal( $values['line_subtotal'] ) ); + woocommerce_add_order_item_meta( $item_id, '_line_total', woocommerce_format_decimal( $values['line_total'] ) ); + woocommerce_add_order_item_meta( $item_id, '_line_tax', woocommerce_format_decimal( $values['line_tax'] ) ); + woocommerce_add_order_item_meta( $item_id, '_line_subtotal_tax', woocommerce_format_decimal( $values['line_subtotal_tax'] ) ); // Store variation data in meta so admin can view it if ( $values['variation'] && is_array( $values['variation'] ) ) @@ -300,8 +300,8 @@ class WC_Checkout { else woocommerce_add_order_item_meta( $item_id, '_tax_class', '0' ); - woocommerce_add_order_item_meta( $item_id, '_line_total', woocommerce_format_decimal( $fee->amount, false ) ); - woocommerce_add_order_item_meta( $item_id, '_line_tax', woocommerce_format_decimal( $fee->tax, false ) ); + woocommerce_add_order_item_meta( $item_id, '_line_total', woocommerce_format_decimal( $fee->amount ) ); + woocommerce_add_order_item_meta( $item_id, '_line_tax', woocommerce_format_decimal( $fee->tax ) ); } // Store shipping for all packages @@ -319,7 +319,7 @@ class WC_Checkout { if ( $item_id ) { woocommerce_add_order_item_meta( $item_id, 'method_id', $method->id ); - woocommerce_add_order_item_meta( $item_id, 'cost', woocommerce_format_decimal( $method->cost, false ) ); + woocommerce_add_order_item_meta( $item_id, 'cost', woocommerce_format_decimal( $method->cost ) ); } } } @@ -337,8 +337,8 @@ class WC_Checkout { woocommerce_add_order_item_meta( $item_id, 'rate_id', $key ); woocommerce_add_order_item_meta( $item_id, 'label', WC()->cart->tax->get_rate_label( $key ) ); woocommerce_add_order_item_meta( $item_id, 'compound', absint( WC()->cart->tax->is_compound( $key ) ? 1 : 0 ) ); - woocommerce_add_order_item_meta( $item_id, 'tax_amount', woocommerce_format_decimal( isset( WC()->cart->taxes[ $key ] ) ? WC()->cart->taxes[ $key ] : 0, false ) ); - woocommerce_add_order_item_meta( $item_id, 'shipping_tax_amount', woocommerce_format_decimal( isset( WC()->cart->shipping_taxes[ $key ] ) ? WC()->cart->shipping_taxes[ $key ] : 0, false ) ); + woocommerce_add_order_item_meta( $item_id, 'tax_amount', woocommerce_format_decimal( isset( WC()->cart->taxes[ $key ] ) ? WC()->cart->taxes[ $key ] : 0 ) ); + woocommerce_add_order_item_meta( $item_id, 'shipping_tax_amount', woocommerce_format_decimal( isset( WC()->cart->shipping_taxes[ $key ] ) ? WC()->cart->shipping_taxes[ $key ] : 0 ) ); } } @@ -362,12 +362,12 @@ class WC_Checkout { update_post_meta( $order_id, '_payment_method', $this->payment_method->id ); update_post_meta( $order_id, '_payment_method_title', $this->payment_method->get_title() ); } - update_post_meta( $order_id, '_order_shipping', woocommerce_format_decimal( WC()->cart->shipping_total, false ) ); - update_post_meta( $order_id, '_order_discount', woocommerce_format_decimal( WC()->cart->get_order_discount_total(), false ) ); - update_post_meta( $order_id, '_cart_discount', woocommerce_format_decimal( WC()->cart->get_cart_discount_total(), false ) ); - update_post_meta( $order_id, '_order_tax', woocommerce_format_decimal( woocommerce_round_tax_total( WC()->cart->tax_total ), false ) ); - update_post_meta( $order_id, '_order_shipping_tax', woocommerce_format_decimal( woocommerce_round_tax_total( WC()->cart->shipping_tax_total ), false ) ); - update_post_meta( $order_id, '_order_total', woocommerce_format_decimal( WC()->cart->total ) ); + update_post_meta( $order_id, '_order_shipping', woocommerce_format_decimal( WC()->cart->shipping_total ) ); + update_post_meta( $order_id, '_order_discount', woocommerce_format_decimal( WC()->cart->get_order_discount_total() ) ); + update_post_meta( $order_id, '_cart_discount', woocommerce_format_decimal( WC()->cart->get_cart_discount_total() ) ); + update_post_meta( $order_id, '_order_tax', woocommerce_format_decimal( woocommerce_round_tax_total( WC()->cart->tax_total ) ) ); + update_post_meta( $order_id, '_order_shipping_tax', woocommerce_format_decimal( woocommerce_round_tax_total( WC()->cart->shipping_tax_total ) ) ); + update_post_meta( $order_id, '_order_total', woocommerce_format_decimal( WC()->cart->total, get_option( 'woocommerce_price_num_decimals' ) ) ); update_post_meta( $order_id, '_order_key', apply_filters('woocommerce_generate_order_key', uniqid('order_') ) ); update_post_meta( $order_id, '_customer_user', absint( $this->customer_id ) ); diff --git a/includes/class-wc-order.php b/includes/class-wc-order.php index cdac0b688c4..048ecea0620 100644 --- a/includes/class-wc-order.php +++ b/includes/class-wc-order.php @@ -512,7 +512,7 @@ class WC_Order { else $price = ( $item['line_subtotal'] / $item['qty'] ); - $price = $round ? number_format( $price, 2, '.', '' ) : $price; + $price = $round ? round( $price, 2 ) : $price; return apply_filters( 'woocommerce_order_amount_item_subtotal', $price, $this ); } @@ -532,7 +532,7 @@ class WC_Order { else $price = $item['line_subtotal']; - $price = $round ? number_format( $price, 2, '.', '' ) : $price; + $price = $round ? round( $price, 2 ) : $price; return apply_filters( 'woocommerce_order_amount_line_subtotal', $price, $this ); } @@ -552,7 +552,7 @@ class WC_Order { else $price = $item['line_total'] / $item['qty']; - $price = $round ? number_format( $price, 2, '.', '' ) : $price; + $price = $round ? round( $price, 2 ) : $price; return apply_filters( 'woocommerce_order_amount_item_total', $price, $this ); } @@ -566,7 +566,7 @@ class WC_Order { * @return float */ public function get_line_total( $item, $inc_tax = false ) { - $line_total = $inc_tax ? number_format( $item['line_total'] + $item['line_tax'] , 2, '.', '' ) : number_format( $item['line_total'] , 2, '.', '' ); + $line_total = $inc_tax ? round( $item['line_total'] + $item['line_tax'], 2 ) : round( $item['line_total'], 2 ); return apply_filters( 'woocommerce_order_amount_line_total', $line_total, $this ); } diff --git a/includes/class-wc-post-data.php b/includes/class-wc-post-data.php index f4d8363f4a6..a5b9c06f92d 100644 --- a/includes/class-wc-post-data.php +++ b/includes/class-wc-post-data.php @@ -19,9 +19,35 @@ class WC_Post_Data { * Constructor */ public function __construct() { + add_filter( 'update_order_item_metadata', array( $this, 'update_order_item_metadata' ), 10, 5 ); add_filter( 'update_post_metadata', array( $this, 'update_post_metadata' ), 10, 5 ); } + /** + * Ensure floats are correctly converted to strings based on PHP locale + * + * @param null $check + * @param int $object_id + * @param string $meta_key + * @param mixed $meta_value + * @param mixed $prev_value + * @return null|bool + */ + public function update_order_item_metadata( $check, $object_id, $meta_key, $meta_value, $prev_value ) { + if ( ! empty( $meta_value ) && is_float( $meta_value ) ) { + + // Convert float to string + $meta_value = wc_float_to_string( $meta_value ); + + // Update meta value with new string + update_metadata( 'order_item', $object_id, $meta_key, $meta_value, $prev_value ); + + // Return + return true; + } + return $check; + } + /** * Ensure floats are correctly converted to strings based on PHP locale * @@ -36,7 +62,7 @@ class WC_Post_Data { if ( ! empty( $meta_value ) && is_float( $meta_value ) && in_array( get_post_type( $object_id ), array( 'shop_order', 'shop_coupon', 'product', 'product_variation' ) ) ) { // Convert float to string - $meta_value = wc_parse_float( $meta_value ); + $meta_value = wc_float_to_string( $meta_value ); // Update meta value with new string update_metadata( 'post', $object_id, $meta_key, $meta_value, $prev_value ); @@ -44,7 +70,6 @@ class WC_Post_Data { // Return return true; } - return $check; } diff --git a/includes/gateways/paypal/class-wc-gateway-paypal.php b/includes/gateways/paypal/class-wc-gateway-paypal.php index 427f34893be..0e053dcbc83 100644 --- a/includes/gateways/paypal/class-wc-gateway-paypal.php +++ b/includes/gateways/paypal/class-wc-gateway-paypal.php @@ -347,7 +347,6 @@ class WC_Gateway_Paypal extends WC_Payment_Gateway { // No longer using shipping_1 because // a) paypal ignore it if *any* shipping rules are within paypal // b) paypal ignore anything over 5 digits, so 999.99 is the max - // $paypal_args['shipping_1'] = number_format( $order->get_total_shipping() + $order->get_shipping_tax() , 2, '.', '' ); if ( ( $order->get_total_shipping() + $order->get_shipping_tax() ) > 0 ) { $paypal_args['item_name_2'] = __( 'Shipping via', 'woocommerce' ) . ' ' . ucwords( $order->get_shipping_method() ); $paypal_args['quantity_2'] = '1'; diff --git a/includes/shipping/flat-rate/class-wc-shipping-flat-rate.php b/includes/shipping/flat-rate/class-wc-shipping-flat-rate.php index aa238807d72..74b2d6a87a5 100644 --- a/includes/shipping/flat-rate/class-wc-shipping-flat-rate.php +++ b/includes/shipping/flat-rate/class-wc-shipping-flat-rate.php @@ -117,12 +117,11 @@ class WC_Shipping_Flat_Rate extends WC_Shipping_Method { ), 'cost_per_order' => array( 'title' => __( 'Cost per order', 'woocommerce' ), - 'type' => 'text', - 'class' => 'wc_input_decimal', + 'type' => 'price', + 'placeholder' => wc_format_localized_price( 0 ), 'description' => __( 'Enter a cost (excluding tax) per order, e.g. 5.00. Leave blank to disable.', 'woocommerce' ), 'default' => '', - 'desc_tip' => true, - 'placeholder' => '0.00', + 'desc_tip' => true ), 'options' => array( 'title' => __( 'Additional Rates', 'woocommerce' ), @@ -152,12 +151,11 @@ class WC_Shipping_Flat_Rate extends WC_Shipping_Method { ), 'minimum_fee' => array( 'title' => __( 'Minimum Handling Fee', 'woocommerce' ), - 'type' => 'text', - 'class' => 'wc_input_decimal', + 'type' => 'price', + 'placeholder' => wc_format_localized_price( 0 ), 'description' => __( 'Enter a minimum fee amount. Fee\'s less than this will be increased. Leave blank to disable.', 'woocommerce' ), 'default' => '', - 'desc_tip' => true, - 'placeholder' => '0.00' + 'desc_tip' => true ), ); @@ -539,8 +537,8 @@ class WC_Shipping_Flat_Rate extends WC_Shipping_Method { - - + + - - + + '; } } @@ -593,8 +591,8 @@ class WC_Shipping_Flat_Rate extends WC_Shipping_Method { ?>\ \ \ - \ - \ + \ + \ ').appendTo('#id; ?>_flat_rates table tbody'); return false; @@ -645,10 +643,10 @@ class WC_Shipping_Flat_Rate extends WC_Shipping_Method { for ( $i = 0; $i <= $key; $i++ ) { if ( ! empty( $flat_rate_class[ $i ] ) && isset( $flat_rate_cost[ $i ] ) && isset( $flat_rate_fee[ $i ] ) ) { - $flat_rate_cost[ $i ] = woocommerce_format_decimal( $flat_rate_cost[$i], 2 ); + $flat_rate_cost[ $i ] = woocommerce_format_decimal( $flat_rate_cost[$i] ); if ( ! strstr( $flat_rate_fee[$i], '%' ) ) - $flat_rate_fee[ $i ] = woocommerce_format_decimal( $flat_rate_fee[$i], 2 ); + $flat_rate_fee[ $i ] = woocommerce_format_decimal( $flat_rate_fee[$i] ); else $flat_rate_fee[ $i ] = woocommerce_clean( $flat_rate_fee[$i] ); @@ -673,10 +671,10 @@ class WC_Shipping_Flat_Rate extends WC_Shipping_Method { * @return void */ function save_default_costs( $fields ) { - $default_cost = ( $_POST['default_cost'] === '' ) ? '' : woocommerce_format_decimal( $_POST['default_cost'], false ); + $default_cost = ( $_POST['default_cost'] === '' ) ? '' : woocommerce_format_decimal( $_POST['default_cost'] ); if ( ! strstr( $_POST['default_fee'], '%' ) ) - $default_fee = ( $_POST['default_fee'] === '' ) ? '' : woocommerce_format_decimal( $_POST['default_fee'], false ); + $default_fee = ( $_POST['default_fee'] === '' ) ? '' : woocommerce_format_decimal( $_POST['default_fee'] ); else $default_fee = woocommerce_clean( $_POST['default_fee'] ); diff --git a/includes/shipping/free-shipping/class-wc-shipping-free-shipping.php b/includes/shipping/free-shipping/class-wc-shipping-free-shipping.php index fdcd5f9ab70..7d07b9d91cb 100644 --- a/includes/shipping/free-shipping/class-wc-shipping-free-shipping.php +++ b/includes/shipping/free-shipping/class-wc-shipping-free-shipping.php @@ -109,12 +109,11 @@ class WC_Shipping_Free_Shipping extends WC_Shipping_Method { ), 'min_amount' => array( 'title' => __( 'Minimum Order Amount', 'woocommerce' ), - 'type' => 'text', - 'class' => 'wc_input_decimal', + 'type' => 'price', + 'placeholder' => wc_format_localized_price( 0 ), 'description' => __( 'Users will need to spend this amount to get free shipping (if enabled above).', 'woocommerce' ), 'default' => '0', - 'desc_tip' => true, - 'placeholder' => '0.00' + 'desc_tip' => true ) ); diff --git a/includes/shipping/international-delivery/class-wc-shipping-international-delivery.php b/includes/shipping/international-delivery/class-wc-shipping-international-delivery.php index 0f5a0e5c6fb..5b28d9e6791 100644 --- a/includes/shipping/international-delivery/class-wc-shipping-international-delivery.php +++ b/includes/shipping/international-delivery/class-wc-shipping-international-delivery.php @@ -101,12 +101,11 @@ class WC_Shipping_International_Delivery extends WC_Shipping_Flat_Rate { ), 'cost' => array( 'title' => __( 'Cost', 'woocommerce' ), - 'type' => 'text', - 'class' => 'wc_input_decimal', + 'type' => 'price', + 'placeholder' => wc_format_localized_price( 0 ), 'description' => __( 'Cost excluding tax. Enter an amount, e.g. 2.50.', 'woocommerce' ), 'default' => '', - 'desc_tip' => true, - 'placeholder' => '0.00' + 'desc_tip' => true ), 'fee' => array( 'title' => __( 'Handling Fee', 'woocommerce' ), @@ -114,16 +113,15 @@ class WC_Shipping_International_Delivery extends WC_Shipping_Flat_Rate { 'description' => __( 'Fee excluding tax. Enter an amount, e.g. 2.50, or a percentage, e.g. 5%. Leave blank to disable.', 'woocommerce' ), 'default' => '', 'desc_tip' => true, - 'placeholder' => '0.00' + 'placeholder' => wc_format_localized_price( 0 ), ), 'minimum_fee' => array( 'title' => __( 'Minimum Handling Fee', 'woocommerce' ), - 'type' => 'text', - 'class' => 'wc_input_decimal', + 'type' => 'decimal', 'description' => __( 'Enter a minimum fee amount. Fee\'s less than this will be increased. Leave blank to disable.', 'woocommerce' ), 'default' => '', 'desc_tip' => true, - 'placeholder' => '0.00' + 'placeholder' => wc_format_localized_decimal( '0' ) ), ); diff --git a/includes/shipping/local-delivery/class-wc-shipping-local-delivery.php b/includes/shipping/local-delivery/class-wc-shipping-local-delivery.php index 1df08f9cbe9..850ea15e885 100644 --- a/includes/shipping/local-delivery/class-wc-shipping-local-delivery.php +++ b/includes/shipping/local-delivery/class-wc-shipping-local-delivery.php @@ -121,12 +121,11 @@ class WC_Shipping_Local_Delivery extends WC_Shipping_Method { ), 'fee' => array( 'title' => __( 'Delivery Fee', 'woocommerce' ), - 'type' => 'text', - 'class' => 'wc_input_decimal', + 'type' => 'price', 'description' => __( 'What fee do you want to charge for local delivery, disregarded if you choose free. Leave blank to disable.', 'woocommerce' ), 'default' => '', 'desc_tip' => true, - 'placeholder' => '0.00' + 'placeholder' => wc_format_localized_price( 0 ) ), 'codes' => array( 'title' => __( 'Zip/Post Codes', 'woocommerce' ), diff --git a/includes/wc-deprecated-functions.php b/includes/wc-deprecated-functions.php index ee14fdfc577..9415e09fb95 100644 --- a/includes/wc-deprecated-functions.php +++ b/includes/wc-deprecated-functions.php @@ -37,6 +37,19 @@ function woocommerce_readfile_chunked( $file, $retbytes = true ) { return WC_Download_Handler::readfile_chunked( $file, $retbytes ); } +/** + * Formal total costs - format to the number of decimal places for the base currency. + * + * @access public + * @param mixed $number + * @deprecated 2.1 + * @return string + */ +function woocommerce_format_total( $number ) { + _deprecated_function( __FUNCTION__, '2.1', 'woocommerce_format_decimal()' ); + return woocommerce_format_decimal( $number, get_option( 'woocommerce_price_num_decimals' ), false ); +} + /** * Get product name with extra details such as SKU price and attributes. Used within admin. * diff --git a/includes/wc-formatting-functions.php b/includes/wc-formatting-functions.php index 617f2a029be..63ff7ea4baf 100644 --- a/includes/wc-formatting-functions.php +++ b/includes/wc-formatting-functions.php @@ -175,34 +175,27 @@ function woocommerce_round_tax_total( $tax ) { } /** - * Format decimal numbers - format to a defined number of dp and remove trailing zeros. + * Format decimal numbers ready for DB storage * - * Remove's user locale settings, converting to a string which uses '.' for decimals, with no thousand separators. + * Sanitize, remove locale formatting, and optionally round + trim off zeros * - * @param float|string $number + * @param float|string $number Expects either a float or a string with a decimal separator only (no thousands) * @param mixed $dp number of decimal points to use, blank to use woocommerce_price_num_decimals, or false to avoid all rounding. * @param boolean $trim_zeros from end of string * @return string */ -function woocommerce_format_decimal( $number, $dp = '', $trim_zeros = false ) { - $number = floatval( $number ); +function woocommerce_format_decimal( $number, $dp = false, $trim_zeros = false ) { + // Remove locale from string + if ( ! is_float( $number ) ) { + $locale = localeconv(); + $decimals = array( get_option( 'woocommerce_price_decimal_sep' ), $locale['decimal_point'], $locale['mon_decimal_point'] ); + $number = woocommerce_clean( str_replace( $decimals, '.', $number ) ); + } - // DP is false - don't use number format, just remove locale settings from the number - if ( $dp === false ) { - $locale = localeconv(); - $decimal = isset( $locale['decimal_point'] ) ? $locale['decimal_point'] : '.'; - - // Only allow numbers and the decimal point - if ( strstr( $number, $decimal ) ) - $number = preg_replace( "/[^0-9\\" . $decimal . "]/", "", strval( $number ) ); - else - $number = preg_replace( "/[^0-9.]/", "", strval( $number ) ); - - // Replace decimal point with . - $number = str_replace( $decimal, '.', $number ); - } else { - $dp = ( $dp == "" ) ? intval( get_option( 'woocommerce_price_num_decimals' ) ) : intval( $dp ); - $number = number_format( $number, $dp, '.', '' ); + // DP is false - don't use number format, just return a string in our format + if ( $dp !== false ) { + $dp = intval( $dp == "" ? get_option( 'woocommerce_price_num_decimals' ) : $dp ); + $number = number_format( floatval( $number ), $dp, '.', '' ); } if ( $trim_zeros && strstr( $number, '.' ) ) @@ -212,14 +205,38 @@ function woocommerce_format_decimal( $number, $dp = '', $trim_zeros = false ) { } /** - * Formal total costs - format to the number of decimal places for the base currency. - * - * @access public - * @param mixed $number + * Convert a float to a string without locale formatting which PHP adds when changing floats to strings + * @param float $float * @return string */ -function woocommerce_format_total( $number ) { - return woocommerce_format_decimal( $number, '', false ); +function wc_float_to_string( $float ) { + if ( ! is_float( $float ) ) + return $float; + + $locale = localeconv(); + $string = strval( $float ); + $string = str_replace( $locale['decimal_point'], '.', $string ); + + return $string; +} + +/** + * Format a price with WC Currency Locale settings + * @param string $value + * @return string + */ +function wc_format_localized_price( $value ) { + return str_replace( '.', get_option( 'woocommerce_price_decimal_sep' ), strval( $value ) ); +} + +/** + * Format a decimal with PHP Locale settings + * @param string $value + * @return string + */ +function wc_format_localized_decimal( $value ) { + $locale = localeconv(); + return str_replace( '.', $locale['decimal_point'], strval( $value ) ); } /** @@ -296,13 +313,13 @@ function woocommerce_price( $price, $args = array() ) { ), $args ) ); $return = ''; - $num_decimals = (int) get_option( 'woocommerce_price_num_decimals' ); + $num_decimals = absint( get_option( 'woocommerce_price_num_decimals' ) ); $currency_pos = get_option( 'woocommerce_currency_pos' ); $currency_symbol = get_woocommerce_currency_symbol(); $decimal_sep = wp_specialchars_decode( stripslashes( get_option( 'woocommerce_price_decimal_sep' ) ), ENT_QUOTES ); $thousands_sep = wp_specialchars_decode( stripslashes( get_option( 'woocommerce_price_thousand_sep' ) ), ENT_QUOTES ); - $price = apply_filters( 'raw_woocommerce_price', (double) $price ); + $price = apply_filters( 'raw_woocommerce_price', floatval( $price ) ); $price = number_format( $price, $num_decimals, $decimal_sep, $thousands_sep ); if ( apply_filters( 'woocommerce_price_trim_zeros', true ) && $num_decimals > 0 ) diff --git a/woocommerce-ajax.php b/woocommerce-ajax.php index 10fc182c45c..c6fccb17f56 100644 --- a/woocommerce-ajax.php +++ b/woocommerce-ajax.php @@ -911,9 +911,9 @@ function woocommerce_ajax_add_order_item() { $item['name'] = $_product->get_title(); $item['tax_class'] = $_product->get_tax_class(); $item['qty'] = 1; - $item['line_subtotal'] = woocommerce_format_decimal( $_product->get_price_excluding_tax(), false ); + $item['line_subtotal'] = woocommerce_format_decimal( $_product->get_price_excluding_tax() ); $item['line_subtotal_tax'] = ''; - $item['line_total'] = woocommerce_format_decimal( $_product->get_price_excluding_tax(), false ); + $item['line_total'] = woocommerce_format_decimal( $_product->get_price_excluding_tax() ); $item['line_tax'] = ''; // Add line item @@ -1192,9 +1192,9 @@ function woocommerce_calc_line_taxes() { foreach( $items as $item_id => $item ) { $item_id = absint( $item_id ); - $line_subtotal = isset( $item['line_subtotal'] ) ? esc_attr( $item['line_subtotal'] ) : ''; - $line_total = esc_attr( $item['line_total'] ); - $tax_class = esc_attr( $item['tax_class'] ); + $line_subtotal = isset( $item['line_subtotal'] ) ? woocommerce_format_decimal( $item['line_subtotal'] ) : 0; + $line_total = woocommerce_format_decimal( $item['line_total'] ); + $tax_class = sanitize_text_field( $item['tax_class'] ); $product_id = $order->get_item_meta( $item_id, '_product_id', true ); if ( ! $item_id || $tax_class == '0' ) @@ -1231,8 +1231,8 @@ function woocommerce_calc_line_taxes() { $line_tax = 0; $item_taxes[ $item_id ] = array( - 'line_subtotal_tax' => $line_subtotal_tax, - 'line_tax' => $line_tax + 'line_subtotal_tax' => wc_format_localized_price( $line_subtotal_tax ), + 'line_tax' => wc_format_localized_price( $line_tax ) ); $item_tax += $line_tax; @@ -1295,8 +1295,8 @@ function woocommerce_calc_line_taxes() { $item['name'] = $tax_codes[ $key ]; $item['label'] = $tax->get_rate_label( $key ); $item['compound'] = $tax->is_compound( $key ) ? 1 : 0; - $item['tax_amount'] = woocommerce_format_decimal( isset( $taxes[ $key ] ) ? $taxes[ $key ] : 0, false ); - $item['shipping_tax_amount'] = woocommerce_format_decimal( isset( $shipping_taxes[ $key ] ) ? $shipping_taxes[ $key ] : 0, false ); + $item['tax_amount'] = woocommerce_format_decimal( isset( $taxes[ $key ] ) ? $taxes[ $key ] : 0 ); + $item['shipping_tax_amount'] = woocommerce_format_decimal( isset( $shipping_taxes[ $key ] ) ? $shipping_taxes[ $key ] : 0 ); if ( ! $item['label'] ) $item['label'] = $woocommerce->countries->tax_or_vat(); diff --git a/woocommerce.php b/woocommerce.php index 26e1cd5317c..b5e2f34bfd1 100644 --- a/woocommerce.php +++ b/woocommerce.php @@ -273,6 +273,7 @@ final class WooCommerce { include( 'includes/class-wc-install.php' ); include( 'includes/class-wc-download-handler.php' ); include( 'includes/class-wc-comments.php' ); + include( 'includes/class-wc-post-data.php' ); if ( is_admin() ) include_once( 'includes/admin/class-wc-admin.php' );
- + - +